diff --git a/DataJoint/+ANLI/FPSTHMatrix.m b/DataJoint/+ANLI/FPSTHMatrix.m new file mode 100644 index 0000000..c4baa5d --- /dev/null +++ b/DataJoint/+ANLI/FPSTHMatrix.m @@ -0,0 +1,66 @@ +%{ +# +-> EXP2.Session +--- +psth_roi_tr_fr : longblob # psth matrix (ROIs x Trials X Frames) +typical_psth_timestamps : longblob # timestamps of each frame relative to go cue, typical refers to the case in which trial times would differ across sessions (e.g. when delay duration is different for different trials). In this this timestamps are only representative for the session, but may differ for indvidual trials. +typical_time_sample_start : double # time of sample start relative to go cue +typical_time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHMatrix < dj.Computed + properties + keySource = EXP2.Session & IMG.ROI; + end + methods(Access=protected) + function makeTuples(self, key) + roi_list=fetchn(IMG.ROI & key,'roi_number','ORDER BY roi_number'); + + + bEvent_all=fetch( EXP2.BehaviorTrialEvent*EXP2.BehaviorTrial & key & 'early_lick="no early"','*','ORDER BY trial'); + + trial_event_time_all = [bEvent_all.trial_event_time]; + typical_time_go = mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'go'))); + typical_time_sample_start =mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'sound sample start')))-typical_time_go; + typical_time_sample_end = mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'sound sample end')))-typical_time_go; + +% + k=key; + k.roi_number=1; + frames_per_trial=fetchn(IMG.ROITrial & k,'frames_per_trial','ORDER BY trial'); + typical_num_frames_per_trial=mode(frames_per_trial); + f_trace_timestamps=fetchn(IMG.ROITrial & k,'f_trace_timestamps','ORDER BY trial'); + [~,longest_trial_idx] = max(frames_per_trial); + typical_psth_timestamps = f_trace_timestamps{longest_trial_idx}(1:typical_num_frames_per_trial); + +% frames_per_trial = frames_per_trial(b_trials); +% f_trace_timestamps = f_trace_timestamps(b_trials); + + numberTrials = numel(frames_per_trial); + + FPSTH_roi_tr_fr = zeros(numel(roi_list),numberTrials,max(frames_per_trial)) + NaN; + for iROI = 1:numel(roi_list) + + k.roi_number=roi_list(iROI); + baseline_fl_trials=cell2mat(fetchn(IMG.ROI & k,'baseline_fl_trials')); + smooth_b=smooth(baseline_fl_trials,10,'rlowess',1); + + ROITrial=fetchn(IMG.ROITrial & k,'f_trace','ORDER BY trial'); + + for iTr=1:1:numberTrials + f_trial=(ROITrial{iTr} - smooth_b(iTr))/smooth_b(iTr); %deltaF/F + FPSTH_roi_tr_fr(iROI , iTr, 1:frames_per_trial(iTr))=f_trial; + end + + end + + key.psth_roi_tr_fr = FPSTH_roi_tr_fr; + key.typical_psth_timestamps = typical_psth_timestamps -typical_time_go; + key.typical_time_sample_start = typical_time_sample_start; + key.typical_time_sample_end = typical_time_sample_end; + insert(ANLI.FPSTHMatrix, key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/FPSTHaverage.m b/DataJoint/+ANLI/FPSTHaverage.m new file mode 100644 index 0000000..cbc6dcf --- /dev/null +++ b/DataJoint/+ANLI/FPSTHaverage.m @@ -0,0 +1,117 @@ +%{ +# +-> IMG.ROI +-> EXP2.TrialNameType +-> EXP2.Outcome +--- +num_trials_averaged : int # number of trials averaged per condition, for this ROI +psth_avg : longblob # trial-type averaged PSTH aligned to go cue time, expressed as deltaF/F, where F is the baseline flourescene in the beginning of each trial +psth_stem : longblob # standard error of the mean of the above, expressed as deltaF/F +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHaverage < dj.Computed + properties + keySource = (IMG.FOV & IMG.ROI) * (EXP2.TrialNameType) * EXP2.Outcome; + end + methods(Access=protected) + function makeTuples(self, key) + roi_list=fetchn(IMG.ROI & key,'roi_number'); + + b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key,'*','ORDER BY trial'); + if isempty(b) + return; + end + b=struct2table(b); b_trials=[b.trial]; + b_trials=b_trials(contains(b.early_lick,'no early')); + if isempty(b_trials) + return; + end + + + % for all conditions and trial-types + kk=key; + kk=rmfield(kk,'trial_type_name'); + kk=rmfield(kk,'outcome'); + + bEvent_all=fetch( EXP2.BehaviorTrialEvent*EXP2.BehaviorTrial & kk & 'early_lick="no early"','*','ORDER BY trial'); + + trial_event_time_all = [bEvent_all.trial_event_time]; + typical_time_go = mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'go'))); + typical_time_sample_start =mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'sound sample start')))-typical_time_go; + typical_time_sample_end = mode(trial_event_time_all (contains({bEvent_all.trial_event_type},'sound sample end')))-typical_time_go; + + + % for this conditions and trial-type combination + bEvent=fetch( EXP2.BehaviorTrialEvent&((EXP2.BehaviorTrial*EXP2.TrialName)& key),'*','ORDER BY trial'); + trial_event_time = [bEvent.trial_event_time]; + time_go = trial_event_time (contains({bEvent.trial_event_type},'go')); + time_sample_start =trial_event_time (contains({bEvent.trial_event_type},'sound sample start')); + time_sample_end = trial_event_time (contains({bEvent.trial_event_type},'sound sample end')); + + + key.roi_number=1; + frames_per_trial=fetchn(IMG.ROITrial & key,'frames_per_trial','ORDER BY trial'); + typical_num_frames_per_trial=mode(frames_per_trial); + f_trace_timestamps=fetchn(IMG.ROITrial & key,'f_trace_timestamps','ORDER BY trial'); + [~,longest_trial_idx] = max(frames_per_trial); + typical_psth_timestamps = f_trace_timestamps{longest_trial_idx}(1:typical_num_frames_per_trial); + + frames_per_trial = frames_per_trial(b_trials); + f_trace_timestamps = f_trace_timestamps(b_trials); + + numberTrials = numel(frames_per_trial); + + for iROI = 1:numel(roi_list) + F=zeros(numberTrials,max(frames_per_trial)) + NaN; + + key.roi_number=roi_list(iROI); + baseline_fl_trials=cell2mat(fetchn(IMG.ROI & key,'baseline_fl_trials')); + % smooth_b=smooth(baseline_fl_trials,10,'sgolay',1); + smooth_b=smooth(baseline_fl_trials,10,'rlowess',1); + + smooth_b=smooth_b(b_trials)'; + + ROITrial=fetchn(IMG.ROITrial & key,'f_trace','ORDER BY trial'); + ROITrial = ROITrial (b_trials); + + key_FPSTHtrial = key; + key_FPSTHtrial = repmat(key_FPSTHtrial,1,numberTrials); + + for iTr=1:1:numberTrials + f_trial=(ROITrial{iTr} - smooth_b(iTr))/smooth_b(iTr); %deltaF/F + F(iTr,1:frames_per_trial(iTr))=f_trial; + + key_FPSTHtrial(iTr).trial=b_trials(iTr); + key_FPSTHtrial(iTr).psth_trial = f_trial; + this_trial_time_go = time_go (iTr); + key_FPSTHtrial(iTr).psth_timestamps = f_trace_timestamps{iTr} - this_trial_time_go; + key_FPSTHtrial(iTr).time_sample_start = time_sample_start(iTr) - this_trial_time_go; + key_FPSTHtrial(iTr).time_sample_end = time_sample_end(iTr)- this_trial_time_go; + + end + + + F=F(:,1:typical_num_frames_per_trial); + psth_avg = nanmean(F,1); + psth_stem = nanstd(F,1)/sqrt(numberTrials); + + key_FPSTHaverage=key; + key_FPSTHaverage.num_trials_averaged=numberTrials; + key_FPSTHaverage.psth_avg=psth_avg; + key_FPSTHaverage.psth_stem=psth_stem; + key_FPSTHaverage.psth_timestamps= typical_psth_timestamps -typical_time_go; + key_FPSTHaverage.time_sample_start = typical_time_sample_start; + key_FPSTHaverage.time_sample_end = typical_time_sample_end; + + insert(ANLI.FPSTHaverage, key_FPSTHaverage) + insert(ANLI.FPSTHtrial, key_FPSTHtrial) + + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/FPSTHaverageClusterbased.m b/DataJoint/+ANLI/FPSTHaverageClusterbased.m new file mode 100644 index 0000000..aef17ab --- /dev/null +++ b/DataJoint/+ANLI/FPSTHaverageClusterbased.m @@ -0,0 +1,68 @@ +%{ +# +-> IMG.ROI +-> EXP2.EpochName +-> EXP2.TrialNameType +trial_cluster_group : int +--- +num_trials_averaged : int # number of trials averaged per condition, for this ROI +psth_avg : longblob # trial-type averaged PSTH aligned to go cue time, expressed as deltaF/F, where F is the baseline flourescene in the beginning of each trial +psth_stem : longblob # standard error of the mean of the above, expressed as deltaF/F +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHaverageClusterbased < dj.Computed + properties + keySource = (IMG.FOV & IMG.ROI) * (EXP2.TrialNameType & 'task="sound"') * EXP2.EpochName; + end + methods(Access=protected) + function makeTuples(self, key) + trial_cluster_group=[1,2]; + + roi_list=fetchn(IMG.ROI & key,'roi_number'); + + key.time_sample_start =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_start'); + key.time_sample_end =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_end'); + psth_timestamps =fetch1(ANLI.FPSTHMatrix & key,'typical_psth_timestamps'); + + + for i_g=1:1:numel(trial_cluster_group) + key_group.trial_cluster_group = trial_cluster_group(i_g); + rel=(ANLI.TrialCluster*EXP2.TrialName & key & key_group); + trials_group = fetchn(rel,'trial','ORDER BY trial'); + numberTrials = numel(trials_group); + frames_per_trial=fetchn(IMG.ROITrial & key & 'roi_number=1' & rel,'frames_per_trial','ORDER BY trial'); + + for iROI = 1:numel(roi_list) + key_FPSTHaverage=[]; + F=zeros(numberTrials,max([frames_per_trial;numel(psth_timestamps)])) + NaN; + key_roi.roi_number=roi_list(iROI); + + FPSTHtrial=fetchn((ANLI.FPSTHtrial & rel) & key_roi,'psth_trial','ORDER BY trial'); + + for iTr=1:1:numberTrials + F(iTr,1:frames_per_trial(iTr))=FPSTHtrial{iTr}; + end + + F=F(:,1:numel(psth_timestamps)); + psth_avg = nanmean(F,1); + psth_stem = nanstd(F,1)/sqrt(numberTrials); + + key_FPSTHaverage=key; + key_FPSTHaverage.roi_number = roi_list(iROI); + key_FPSTHaverage.trial_cluster_group = trial_cluster_group(i_g); + key_FPSTHaverage.psth_timestamps=psth_timestamps; + key_FPSTHaverage.num_trials_averaged=numberTrials; + key_FPSTHaverage.psth_avg=psth_avg; + key_FPSTHaverage.psth_stem=psth_stem; + + insert(self, key_FPSTHaverage) + + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/FPSTHtrial.m b/DataJoint/+ANLI/FPSTHtrial.m new file mode 100644 index 0000000..8b4d4ca --- /dev/null +++ b/DataJoint/+ANLI/FPSTHtrial.m @@ -0,0 +1,21 @@ +%{ +# +-> IMG.ROI +-> EXP2.TrialNameType +-> EXP2.Outcome +-> EXP2.SessionTrial +--- +psth_trial : longblob # PSTH aligned to go cue time, expressed as deltaF/F, where F is the baseline flourescene in the beginning of each trial +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHtrial < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROI.m b/DataJoint/+ANLI/IncludeROI.m new file mode 100644 index 0000000..f6c21a4 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROI.m @@ -0,0 +1,161 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +threshold_for_event : double # threshold in deltaf_overf +number_of_events : int # + +%} + +classdef IncludeROI < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI & IMG.ROISpikes); + + end + methods(Access=protected) + function makeTuples(self, key) + + + + key=fetch(EXP2.Session & key); + key.threshold_for_event = 3; + % key.minimal_number_of_suprahtreshold_events = 10; + running_window=60; %seconds + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\ROI\']; + + + + close all; + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + panel_width=0.8; + panel_height=0.25; + horizontal_distance=0.3; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.65; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + + + + + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig 'anm' num2str(key.subject_id) '\' session_date '\']; + dir_current_fig_active = [dir_current_fig 'active\']; + dir_current_fig_silent = [dir_current_fig 'silent\']; + + if isempty(dir(dir_current_fig_active)) + mkdir (dir_current_fig_active) + end + if isempty(dir(dir_current_fig_silent)) + mkdir (dir_current_fig_silent) + end + + frame_rate= ceil(fetch1(IMG.FOV& key , 'imaging_frame_rate')); + roi_list = fetchn(IMG.ROI & key, 'roi_number','ORDER BY roi_number'); + + key2=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + + warning('off','all') + + for iROI = 1:numel(roi_list) + key.roi_number = roi_list (iROI); + F=fetchn(IMG.ROITrace & key,'f_trace','ORDER BY session_epoch_number'); + F=cell2mat(F'); + + Spk=fetchn(IMG.ROISpikes & key,'spikes_trace','ORDER BY session_epoch_number'); + Spk=cell2mat(Spk'); + + % running_min=movmin(Ftrial,[0 running_window*frame_rate]); + % baseline=movmax(running_min,[0 running_window*frame_rate]); %running max of the running min + % baseline=running_min; + + Fs=smoothdata(F,'gaussian',running_window*5); + % Fs=F; + + running_min=movmin(Fs,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); + % running_min =[running_min zeros(1,running_window*frame_rate)+running_min(end)]; + baseline=movmax(running_min,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); %running max of the running min + % baseline =[baseline zeros(1,running_window*frame_rate)+baseline(end)]; + baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + + + % running_min=movmin(Fs,[0 running_window*frame_rate],'Endpoints','discard'); + % running_min =[running_min zeros(1,running_window*frame_rate)+running_min(end)]; + % baseline=movmax(running_min,[0 running_window*frame_rate],'Endpoints','discard'); %running max of the running min + % baseline =[baseline zeros(1,running_window*frame_rate)+baseline(end)]; + % baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + + + + % baseline2=movmedian(baseline,[0 running_window*frame_rate]); + dFF = (F-baseline2)./baseline2; %deltaF over F + + [~,idx_peaks]=findpeaks(dFF,'MinPeakDistance',frame_rate*2,'MinPeakHeight',key.threshold_for_event); + + + key2(iROI).number_of_events = numel(idx_peaks); + key2(iROI).threshold_for_event = key.threshold_for_event; + + % + % %% Plotting + % ax(1)=axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + % hold on; + % plot(F,'-b') + % plot(baseline2,'-r') + % plot(baseline,'-g') + % ylabel('F'); + % title(sprintf('ROI = %d',roi_list(iROI))); + % + % + % ax(2)= axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + % plot(dFF,'-b') + % ylabel('deltaF/F'); + % title(sprintf('# Peaks = %d',numel(idx_peaks))); + % + % + % ax(3)= axes('position',[position_x(1), position_y(3), panel_width, panel_height]); + % [~,idx_peaks3]=findpeaks(Spk,'MinPeakDistance',frame_rate,'MinPeakHeight',2); + % plot(Spk); + % ylabel('Spikes'); + % title(sprintf('# Peaks = %d',numel(idx_peaks3))); + % + % linkaxes(ax,'x'); + % + % + % filename=['ROI_' num2str(roi_list(iROI))]; + % + % if numel(idx_peaks)>=key.minimal_number_of_suprahtreshold_events + % figure_name_out=[ dir_current_fig_active filename]; + % eval(['print ', figure_name_out, ' -dtiff -r100']); + % else + % figure_name_out=[ dir_current_fig_silent filename]; + % eval(['print ', figure_name_out, ' -dtiff -r100']); + % end + % clf + end + warning('on','all') + + insert(self,key2); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROI2.m b/DataJoint/+ANLI/IncludeROI2.m new file mode 100644 index 0000000..2675a18 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROI2.m @@ -0,0 +1,34 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +threshold_deltaf_overf : double # + +%} + +classdef IncludeROI2 < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + + key=fetch(IMG.FOV & key); + key.threshold_deltaf_overf = 0.25; +% key.minimal_number_of_suprahtreshold_events = 5; + + roi_list = fetchn(IMG.ROI-IMG.ExcludeROImultiSession & key, 'roi_number','ORDER BY roi_number'); + for iROI = 1:numel(roi_list) + key.roi_number = roi_list (iROI); + Favg=fetchn(ANLI.FPSTHaverage & key & 'outcome!="ignore"' ,'psth_avg'); + maxF = cellfun(@max,Favg); + if sum(maxF>=key.threshold_deltaf_overf)>0 + insert(self,key); + end + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROI3.m b/DataJoint/+ANLI/IncludeROI3.m new file mode 100644 index 0000000..91e00b4 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROI3.m @@ -0,0 +1,34 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +threshold_deltaf_overf : double # + +%} + +classdef IncludeROI3 < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + + key=fetch(IMG.FOV & key); + key.threshold_deltaf_overf = 0.4; +% key.minimal_number_of_suprahtreshold_events = 5; + + roi_list = fetchn(IMG.ROI-IMG.ExcludeROImultiSession & key, 'roi_number','ORDER BY roi_number'); + for iROI = 1:numel(roi_list) + key.roi_number = roi_list (iROI); + Favg=fetchn(ANLI.FPSTHaverage & key & 'outcome!="ignore"' ,'psth_avg'); + maxF = cellfun(@max,Favg); + if sum(maxF>=key.threshold_deltaf_overf)>0 + insert(self,key); + end + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROI4.m b/DataJoint/+ANLI/IncludeROI4.m new file mode 100644 index 0000000..f2af701 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROI4.m @@ -0,0 +1,171 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +threshold_for_event : double # threshold in deltaf_overf +number_of_events : int # + +%} + +classdef IncludeROI4 < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI & IMG.PlaneDirectory); + + end + methods(Access=protected) + function makeTuples(self, key) + + + + key=fetch(EXP2.Session & key); + key.threshold_for_event = 0.5; + minimal_number_of_suprahtreshold_events = 10; %will affect in which directory the plot will be saved + running_window=60; %seconds + MinPeakDistance = 5; %seconds + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\ROI\']; + + + + close all; + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + panel_width=0.8; + panel_height=0.25; + horizontal_distance=0.3; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.65; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + + + + + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig 'anm' num2str(key.subject_id) '\' session_date '\']; + dir_current_fig_active = [dir_current_fig 'active\']; + dir_current_fig_silent = [dir_current_fig 'silent\']; + + if isempty(dir(dir_current_fig_active)) + mkdir (dir_current_fig_active) + end + if isempty(dir(dir_current_fig_silent)) + mkdir (dir_current_fig_silent) + end + + roi_list = fetchn(IMG.ROI & key, 'roi_number','ORDER BY roi_number'); + + key2=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + + warning('off','all') + roi_list_subsampled =roi_list(1:100:end); + + for iROI = 1:numel(roi_list) + key.roi_number = roi_list (iROI); + kkk.plane = key2(iROI).plane_num; + frame_rate= (fetchn(IMG.FOVEpoch & key & kkk, 'imaging_frame_rate')); + frame_rate=frame_rate(1); %assuming same frame rate for all session epochs + F=fetchn(IMG.ROITrace & key,'f_trace','ORDER BY session_epoch_number'); + F=cell2mat(F'); + time = [1:1:numel(F)]/frame_rate; + % Spk=fetchn(IMG.ROISpikes & key,'spikes_trace','ORDER BY session_epoch_number'); + % Spk=cell2mat(Spk'); + + % running_min=movmin(Ftrial,[0 running_window*frame_rate]); + % baseline=movmax(running_min,[0 running_window*frame_rate]); %running max of the running min + % baseline=running_min; + + Fs=smoothdata(F,'gaussian',(running_window*frame_rate)/5); + % Fs=F; + + running_min=movmin(Fs,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); + % running_min =[running_min zeros(1,running_window*frame_rate)+running_min(end)]; + baseline=movmax(running_min,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); %running max of the running min + % baseline =[baseline zeros(1,running_window*frame_rate)+baseline(end)]; + baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + + + % running_min=movmin(Fs,[0 running_window*frame_rate],'Endpoints','discard'); + % running_min =[running_min zeros(1,running_window*frame_rate)+running_min(end)]; + % baseline=movmax(running_min,[0 running_window*frame_rate],'Endpoints','discard'); %running max of the running min + % baseline =[baseline zeros(1,running_window*frame_rate)+baseline(end)]; + % baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + + + + % baseline2=movmedian(baseline,[0 running_window*frame_rate]); + dFF = (F-baseline2)./baseline2; %deltaF over F + + [~,idx_peaks]=findpeaks(dFF,'MinPeakDistance',MinPeakDistance*frame_rate,'MinPeakHeight',key.threshold_for_event); + + + key2(iROI).number_of_events = numel(idx_peaks); + key2(iROI).threshold_for_event = key.threshold_for_event; + + if ismember(iROI, roi_list_subsampled) + + %% Plotting + ax(1)=axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + hold on; + plot(time, F,'-b') + plot(time, baseline2,'-r') + plot(time, baseline,'-g') + ylabel('F'); + xlabel ('Time (s)'); + title(sprintf('ROI = %d',roi_list(iROI))); + + ax(2)= axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + hold on; + plot(time, dFF,'-b') + plot(time(idx_peaks), dFF(idx_peaks),'.r') + ylabel('deltaF/F'); + xlabel ('Time (s)'); + title(sprintf('# Peaks = %d',numel(idx_peaks))); + + + % ax(3)= axes('position',[position_x(1), position_y(3), panel_width, panel_height]); + % [~,idx_peaks3]=findpeaks(Spk,'MinPeakDistance',frame_rate,'MinPeakHeight',2); + % plot(Spk); + % ylabel('Spikes'); + % title(sprintf('# Peaks = %d',numel(idx_peaks3))); + % + linkaxes(ax,'x'); + + + filename=['ROI_' num2str(roi_list(iROI))]; + + if numel(idx_peaks)>=minimal_number_of_suprahtreshold_events + figure_name_out=[ dir_current_fig_active filename]; + eval(['print ', figure_name_out, ' -dtiff -r50']); + else + figure_name_out=[ dir_current_fig_silent filename]; + eval(['print ', figure_name_out, ' -dtiff -r50']); + end + clf + end + warning('on','all') + end + + + insert(self,key2); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROImultiSession.m b/DataJoint/+ANLI/IncludeROImultiSession.m new file mode 100644 index 0000000..1e6fb46 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROImultiSession.m @@ -0,0 +1,45 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.FOVmultiSessions +-> IMG.ROI +--- +%} + +classdef IncludeROImultiSession < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOVmultiSessions); + + end + methods(Access=protected) + function makeTuples(self, key) + + k=fetch(IMG.FOVmultiSessions & key,'*'); + k=rmfield(k,'session'); + k=fetch(IMG.FOVmultiSessions & k,'*'); + + + + + roi_intersect=[]; + for i_s =1:1:numel(k) + kkk=k(i_s); + roi_number_list{i_s} = fetchn(ANLI.IncludeROI & kkk, 'roi_number', 'ORDER BY roi_number'); + if i_s==1 + roi_intersect = roi_number_list{i_s}; + else + roi_intersect=intersect(roi_intersect, roi_number_list{i_s}); + end + end + + k_insert=key; + k_insert= repmat(k_insert,numel(roi_intersect),1); + + for i_roi=1:1:numel(roi_intersect) + k_insert(i_roi).roi_number = roi_intersect(i_roi); + end + insert(self,k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROImultiSession2intersect.m b/DataJoint/+ANLI/IncludeROImultiSession2intersect.m new file mode 100644 index 0000000..dbb90b0 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROImultiSession2intersect.m @@ -0,0 +1,45 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.FOVmultiSessions +-> IMG.ROI +--- +%} + +classdef IncludeROImultiSession2intersect < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOVmultiSessions); + + end + methods(Access=protected) + function makeTuples(self, key) + + k=fetch(IMG.FOVmultiSessions & key,'*'); + k=rmfield(k,'session'); + k=fetch(IMG.FOVmultiSessions & k,'*'); + + + + + roi_intersect=[]; + for i_s =1:1:numel(k) + kkk=k(i_s); + roi_number_list{i_s} = fetchn(ANLI.IncludeROI2 & kkk, 'roi_number', 'ORDER BY roi_number'); + if i_s==1 + roi_intersect = roi_number_list{i_s}; + else + roi_intersect=intersect(roi_intersect, roi_number_list{i_s}); + end + end + + k_insert=key; + k_insert= repmat(k_insert,numel(roi_intersect),1); + + for i_roi=1:1:numel(roi_intersect) + k_insert(i_roi).roi_number = roi_intersect(i_roi); + end + insert(self,k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROImultiSession2union.m b/DataJoint/+ANLI/IncludeROImultiSession2union.m new file mode 100644 index 0000000..43898bb --- /dev/null +++ b/DataJoint/+ANLI/IncludeROImultiSession2union.m @@ -0,0 +1,45 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.FOVmultiSessions +-> IMG.ROI +--- +%} + +classdef IncludeROImultiSession2union < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOVmultiSessions); + + end + methods(Access=protected) + function makeTuples(self, key) + + k=fetch(IMG.FOVmultiSessions & key,'*'); + k=rmfield(k,'session'); + k=fetch(IMG.FOVmultiSessions & k,'*'); + + + + + roi_union=[]; + for i_s =1:1:numel(k) + kkk=k(i_s); + roi_number_list{i_s} = fetchn(ANLI.IncludeROI2 & kkk, 'roi_number', 'ORDER BY roi_number'); + if i_s==1 + roi_union = roi_number_list{i_s}; + else + roi_union=union(roi_union, roi_number_list{i_s}); + end + end + + k_insert=key; + k_insert= repmat(k_insert,numel(roi_union),1); + + for i_roi=1:1:numel(roi_union) + k_insert(i_roi).roi_number = roi_union(i_roi); + end + insert(self,k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/IncludeROImultiSession3intersect.m b/DataJoint/+ANLI/IncludeROImultiSession3intersect.m new file mode 100644 index 0000000..81dd5f3 --- /dev/null +++ b/DataJoint/+ANLI/IncludeROImultiSession3intersect.m @@ -0,0 +1,45 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.FOVmultiSessions +-> IMG.ROI +--- +%} + +classdef IncludeROImultiSession3intersect < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOVmultiSessions); + + end + methods(Access=protected) + function makeTuples(self, key) + + k=fetch(IMG.FOVmultiSessions & key,'*'); + k=rmfield(k,'session'); + k=fetch(IMG.FOVmultiSessions & k,'*'); + + + + + roi_intersect=[]; + for i_s =1:1:numel(k) + kkk=k(i_s); + roi_number_list{i_s} = fetchn(ANLI.IncludeROI3 & kkk, 'roi_number', 'ORDER BY roi_number'); + if i_s==1 + roi_intersect = roi_number_list{i_s}; + else + roi_intersect=intersect(roi_intersect, roi_number_list{i_s}); + end + end + + k_insert=key; + k_insert= repmat(k_insert,numel(roi_intersect),1); + + for i_roi=1:1:numel(roi_intersect) + k_insert(i_roi).roi_number = roi_intersect(i_roi); + end + insert(self,k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Jobs.m b/DataJoint/+ANLI/Jobs.m new file mode 100644 index 0000000..d7d59f8 --- /dev/null +++ b/DataJoint/+ANLI/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +ANLI +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+ANLI/Lick2D.m b/DataJoint/+ANLI/Lick2D.m new file mode 100644 index 0000000..32101e9 --- /dev/null +++ b/DataJoint/+ANLI/Lick2D.m @@ -0,0 +1,37 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef Lick2D < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_preferred_non_preferred_meso(key, flag_plot_clusters_individually); + + % lick2D_map_onFOV_clusters_shape_meso(key, flag_plot_clusters_individually); + +% lick2D_map_onFOV_clusters_shapeandselectivity_meso(key, flag_plot_clusters_individually); + + flag_plot_clusters_individually=1; + lick2D_map_onFOV_clusters_preferred_non_preferred_meso(key, flag_plot_clusters_individually); + + % lick2D_map_onFOV_clusters_shape_meso(key, flag_plot_clusters_individually); + + % lick2D_map_onFOV_clusters_shapeandselectivity_meso(key, flag_plot_clusters_individually); + % lick2D_map_onFOV_clusters_selectivity_meso(key, flag_plot_clusters_individually); + +% lick2D_map_onFOV_angles__meso(key) + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D2.m b/DataJoint/+ANLI/Lick2D2.m new file mode 100644 index 0000000..29adcfb --- /dev/null +++ b/DataJoint/+ANLI/Lick2D2.m @@ -0,0 +1,29 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef Lick2D2 < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + flag_plot_clusters_individually=0; + + lick2D_map_onFOV_clusters_shape_meso(key, flag_plot_clusters_individually); + + lick2D_map_onFOV_clusters_shapeandselectivity_meso(key, flag_plot_clusters_individually); + + lick2D_map_onFOV_clusters_selectivity_meso(key, flag_plot_clusters_individually); + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D3.m b/DataJoint/+ANLI/Lick2D3.m new file mode 100644 index 0000000..466cd0c --- /dev/null +++ b/DataJoint/+ANLI/Lick2D3.m @@ -0,0 +1,28 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef Lick2D3 < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_shape_meso(key, flag_plot_clusters_individually); + + lick2D_map_onFOV_clusters_shapeandselectivity_meso(key, flag_plot_clusters_individually); + + lick2D_map_onFOV_clusters_selectivity_meso(key, flag_plot_clusters_individually); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D5.m b/DataJoint/+ANLI/Lick2D5.m new file mode 100644 index 0000000..b5d66b6 --- /dev/null +++ b/DataJoint/+ANLI/Lick2D5.m @@ -0,0 +1,36 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2D5 < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorr; + + end + methods(Access=protected) + function makeTuples(self, key) +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + n_clust_vector = [100, 500, 1000, 2000]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust, M_all); +% flag_plot_clusters_individually=1; +% lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D6.m b/DataJoint/+ANLI/Lick2D6.m new file mode 100644 index 0000000..c4b5a97 --- /dev/null +++ b/DataJoint/+ANLI/Lick2D6.m @@ -0,0 +1,36 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2D6 < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorr; + + end + methods(Access=protected) + function makeTuples(self, key) +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + n_clust_vector = [100, 500, 1000, 2000]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust, M_all); +% flag_plot_clusters_individually=1; +% lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D7.m b/DataJoint/+ANLI/Lick2D7.m new file mode 100644 index 0000000..62865f8 --- /dev/null +++ b/DataJoint/+ANLI/Lick2D7.m @@ -0,0 +1,36 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2D7 < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorr2; + + end + methods(Access=protected) + function makeTuples(self, key) +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + n_clust_vector = [500, 1000, 2000]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso2(key, flag_plot_clusters_individually, n_clust, M_all); +% flag_plot_clusters_individually=1; +% lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2D8.m b/DataJoint/+ANLI/Lick2D8.m new file mode 100644 index 0000000..f4dfcfc --- /dev/null +++ b/DataJoint/+ANLI/Lick2D8.m @@ -0,0 +1,36 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2D8 < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorrDiscrete; + + end + methods(Access=protected) + function makeTuples(self, key) +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + n_clust_vector = [100, 500, 1000]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso3(key, flag_plot_clusters_individually, n_clust, M_all); +% flag_plot_clusters_individually=1; +% lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DFiringRate.m b/DataJoint/+ANLI/Lick2DFiringRate.m new file mode 100644 index 0000000..2d547de --- /dev/null +++ b/DataJoint/+ANLI/Lick2DFiringRate.m @@ -0,0 +1,23 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2DFiringRate < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.ROIdeltaFPeak & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + k=key; + k.threshold_for_event=0.5; + lick2D_FiringRate_map(k); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DMeanFiringRate.m b/DataJoint/+ANLI/Lick2DMeanFiringRate.m new file mode 100644 index 0000000..bfc9a3c --- /dev/null +++ b/DataJoint/+ANLI/Lick2DMeanFiringRate.m @@ -0,0 +1,19 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2DMeanFiringRate < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.ROIdeltaFMean & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + lick2D_MeanFiringRate_map(key); + insert(self,key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DPlotPCA.m b/DataJoint/+ANLI/Lick2DPlotPCA.m new file mode 100644 index 0000000..dabecd0 --- /dev/null +++ b/DataJoint/+ANLI/Lick2DPlotPCA.m @@ -0,0 +1,32 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2DPlotPCA < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIPCA; + + end + methods(Access=protected) + function makeTuples(self, key) + num_components=10; + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + M_all=struct2table(M_all); + kkk=key; + for i_c = 1:1:num_components + kkk.component_id = i_c; + lick2D_map_pca(kkk,M_all); + + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DanalAngleMaps.m b/DataJoint/+ANLI/Lick2DanalAngleMaps.m new file mode 100644 index 0000000..e9a8c0e --- /dev/null +++ b/DataJoint/+ANLI/Lick2DanalAngleMaps.m @@ -0,0 +1,23 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef Lick2DanalAngleMaps < dj.Computed + properties + + keySource = EXP2.Session & ANLI.ROILick2Dangle & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + + lick2D_map_onFOV_angles__meso(key); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DlocalCorr.m b/DataJoint/+ANLI/Lick2DlocalCorr.m new file mode 100644 index 0000000..eea688c --- /dev/null +++ b/DataJoint/+ANLI/Lick2DlocalCorr.m @@ -0,0 +1,32 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2DlocalCorr < dj.Computed + properties + + keySource = EXP2.SessionEpoch & POP.ROICorrLocal & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrLocal\']; + + +% lick2D_local_corr_map(key); + +% radius_size_vector=[30,40,50,100]; + radius_size_vector=[20, 100]; + + for i_r = 1:1:numel(radius_size_vector) + lick2D_local_corr_map(key, radius_size_vector(i_r), dir_current_fig); + end + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2DlocalCorrSpontvsBehav.m b/DataJoint/+ANLI/Lick2DlocalCorrSpontvsBehav.m new file mode 100644 index 0000000..598258b --- /dev/null +++ b/DataJoint/+ANLI/Lick2DlocalCorrSpontvsBehav.m @@ -0,0 +1,32 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef Lick2DlocalCorrSpontvsBehav < dj.Computed + properties + + keySource = EXP2.Session & POP.ROICorrLocal & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrLocalSpontvsBehav\']; + + +% lick2D_local_corr_map(key); + +% radius_size_vector=[30,40,50,100]; + radius_size_vector=[20, 100]; + + for i_r = 1:1:numel(radius_size_vector) + lick2D_local_corr_map_spont_vs_behav(key, radius_size_vector(i_r), dir_current_fig); + end + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Lick2Dsubcorr.m b/DataJoint/+ANLI/Lick2Dsubcorr.m new file mode 100644 index 0000000..40a58c3 --- /dev/null +++ b/DataJoint/+ANLI/Lick2Dsubcorr.m @@ -0,0 +1,48 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef Lick2Dsubcorr < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROISubClusterCorr; + + end + methods(Access=protected) + function makeTuples(self, key) + % n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + n_clust_vector = [100,500]; + n_sub_clust_vector = [100,500]; + n_master_clust = 5; + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + kkk=key; + for i_nc = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(i_nc); + kkk.n_clust = n_clust; + + for i_sub_nc = 1:1:numel(n_clust_vector) + n_sub_clust = n_sub_clust_vector(i_sub_nc); + kkk.n_sub_clust = n_sub_clust; + + for i_master_clust = 1:1:n_master_clust + kkk.heirar_cluster_id = i_master_clust; + + flag_plot_clusters_individually=0; + lick2D_map_sub_clusters_corr_meso(kkk, flag_plot_clusters_individually,M_all); + end + % flag_plot_clusters_individually=1; + % lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/Mode.m b/DataJoint/+ANLI/Mode.m new file mode 100644 index 0000000..60d1d8b --- /dev/null +++ b/DataJoint/+ANLI/Mode.m @@ -0,0 +1,74 @@ +%{ +# Modes in Activity Space +-> IMG.ROI +-> ANLI.ModeTypeName +mode_time1_st : double # beginning of the first time interval used to compute the mode (seconds, relative to go cue). +--- +mode_unit_weight = null : double # contribution (weight) of each unit to this mode +mode_time1_end : double # end of the first time interval used to compute the mode (seconds, relative to go cue). +mode_time2_st = null : double # beginning of the second time interval used to compute the mode (seconds, relative to go cue). +mode_time2_end = null : double # end of the second time interval used to compute the mode (seconds, relative to go cue). +mode_uid : int # unique id that could be used instead of specifying the mode_name +%} + +classdef Mode < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + tic + + + key=fetch(IMG.FOV & key); + +% b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key & 'early_lick="no early"','*','ORDER BY trial'); + b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key,'*','ORDER BY trial'); + + b=struct2table(b); + + F=fetch(ANLI.FPSTHMatrix & key,'*'); + F.psth_roi_tr_fr = F.psth_roi_tr_fr (:,:,1:numel(F.typical_psth_timestamps)); + t_sample_start =F.typical_time_sample_start; + t_sample_end =F.typical_time_sample_end; + + % Stimulus + k_insert=key; + k_insert.mode_type_name = 'Stimulus'; + k_insert.mode_uid = 1; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [t_sample_start t_sample_end]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [t_sample_start t_sample_end]; + [k_insert,weights{1}] = fn_compute_roi_weights (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.Mode, k_insert); + + % LateDelay + k_insert=key; + k_insert.mode_type_name = 'LateDelay'; + k_insert.mode_uid = 2; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [-0.5 0]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [-0.5 0]; + [k_insert,weights{2}] = fn_compute_roi_weights (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.Mode, k_insert); + + % Movement + k_insert=key; + k_insert.mode_type_name = 'Movement'; + k_insert.mode_uid = 3; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [0 2]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [0 2]; + [k_insert,weights{3}] = fn_compute_roi_weights (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.Mode, k_insert); + + % Ramping + k_insert=key; + k_insert.mode_type_name = 'Ramping'; + k_insert.mode_uid = 4; + trials1 = find(strcmp(b.outcome,'hit')); tint1 = [-1 0] ; + trials2 = find(strcmp(b.outcome,'hit')); tint2 = [t_sample_start (t_sample_start+1)]; + [k_insert,weights{4}] = fn_compute_roi_weights (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.Mode, k_insert); + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ModeClustering.m b/DataJoint/+ANLI/ModeClustering.m new file mode 100644 index 0000000..61df12c --- /dev/null +++ b/DataJoint/+ANLI/ModeClustering.m @@ -0,0 +1,51 @@ +%{ +# Modes in Activity Space +-> IMG.ROI +-> EXP.TrialNameType +-> ANLI.EpochName +--- +mode_unit_weight = null : double # contribution (weight) of each unit to this mode +mode_time1_st : double # beginning of the first time interval used to compute the mode (seconds, relative to go cue). +mode_time1_end : double # end of the first time interval used to compute the mode (seconds, relative to go cue). +mode_time2_st = null : double # beginning of the second time interval used to compute the mode (seconds, relative to go cue). +mode_time2_end = null : double # end of the second time interval used to compute the mode (seconds, relative to go cue). +%} + +classdef ModeClustering < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOV) *(EXP.TrialNameType & 'task="sound"') * ANLI.EpochName; + + end + methods(Access=protected) + function makeTuples(self, key) + tic + + F=fetch(ANLI.FPSTHMatrix & key,'*'); + F.psth_roi_tr_fr = F.psth_roi_tr_fr (:,:,1:numel(F.typical_psth_timestamps)); + t_sample_start =F.typical_time_sample_start; + t_sample_end =F.typical_time_sample_end; + + + + %% left delay + trials1 = fetchn((ANLI.TrialCluster*EXP.TrialName) & key & 'trial_cluster_group=1','trial','ORDER BY trial'); + trials2 = fetchn((ANLI.TrialCluster*EXP.TrialName) & key & 'trial_cluster_group=2','trial','ORDER BY trial'); + + if numel(trials1)>10 && numel(trials2>10) + if strcmp(key.trial_epoch_name,'delay') + tint1 = [-1 0]; + tint2 = tint1; + elseif strcmp(key.trial_epoch_name,'response') + tint1 = [0 2]; + tint2 = tint1; + end + + k_insert=key; + [k_insert,weights] = fn_compute_roi_weights (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert(self, k_insert); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ModeTypeName.m b/DataJoint/+ANLI/ModeTypeName.m new file mode 100644 index 0000000..3b709db --- /dev/null +++ b/DataJoint/+ANLI/ModeTypeName.m @@ -0,0 +1,20 @@ +%{ +# +mode_type_name : varchar(400) # mode-type name +--- +mode_type_name_description=null : varchar(4000) # +%} + + +classdef ModeTypeName < dj.Lookup + properties + contents = { + 'Stimulus' 'Selectivity during sample period - i.e. response to stimulus, computed using all L/R trials' + 'LateDelay' 'Selectivity during late delay, computed using all L/R trials' + 'Ramping' 'Ramping during delay, computed using all L/R trials' + 'Movement' 'Selectivity during movement, computed using all L/R trials' + + + } + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ProjClusterTrialAverage.m b/DataJoint/+ANLI/ProjClusterTrialAverage.m new file mode 100644 index 0000000..21e99d6 --- /dev/null +++ b/DataJoint/+ANLI/ProjClusterTrialAverage.m @@ -0,0 +1,61 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP.Session +-> EXP.TrialNameType +-> ANLI.EpochName +trial_cluster_group : int +--- +num_trials_projected : int # number of projected trials in this trial-type/outcome +proj_average : longblob # projection of the neural acitivity on the mode (weights vector) for this trial-type/outcome, given in arbitrary units. +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef ProjClusterTrialAverage < dj.Computed + properties + keySource = (EXP.Session & IMG.ROI) * (EXP.TrialNameType & 'task="sound"') * ANLI.EpochName ; + + end + methods(Access=protected) + function makeTuples(self, key) + trial_cluster_group=[1,2]; + + for i_g=1:1:numel(trial_cluster_group) + + key.trial_cluster_group=trial_cluster_group(i_g); + + Favg = cell2mat(fetchn((ANLI.FPSTHaverageClusterbased & ANLI.IncludeROImultiSession2intersect) & key,'psth_avg', 'ORDER BY roi_number')); + + if size(Favg,2)<2 + return + end + + weights = fetchn((ANLI.ModeClustering & ANLI.IncludeROImultiSession2intersect) & key,'mode_unit_weight', 'ORDER BY roi_number'); + + w_mat = repmat(weights,1,size(Favg,2)); + proj_avg = nansum( Favg.*w_mat); + + + key_insert=key; + key_insert.proj_average =proj_avg; + key_insert.num_trials_projected =size(Favg,2); %% SHOULD BE CORRECTED + + key_insert.time_sample_start =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_start'); + key_insert.time_sample_end =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_end'); + key_insert.psth_timestamps =fetch1(ANLI.FPSTHMatrix & key,'typical_psth_timestamps'); + + insert(self,key_insert); + + % roi_list = fetchn(ANLI.FPSTHaverage & key, 'roi_number', 'ORDER BY roi_number'); + % for i_roi=1:1:numel(roi_list) + % key.roi_number = roi_list (i_roi); + % F = (ANLI.FPSTHaverage & key, 'ORDER BY trial') + % end + + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ProjTrialAverage.m b/DataJoint/+ANLI/ProjTrialAverage.m new file mode 100644 index 0000000..b7067d7 --- /dev/null +++ b/DataJoint/+ANLI/ProjTrialAverage.m @@ -0,0 +1,54 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +-> ANLI.ModeTypeName +-> EXP2.Outcome +-> EXP2.TrialNameType +--- +num_trials_projected : int # number of projected trials in this trial-type/outcome +proj_average : longblob # projection of the neural acitivity on the mode (weights vector) for this trial-type/outcome, given in arbitrary units. +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef ProjTrialAverage < dj.Computed + properties + keySource = (EXP2.Session & IMG.ROI) * EXP2.Outcome * (ANLI.ModeTypeName& ANLI.Mode) * (EXP2.TrialNameType & 'task="sound"'); + + end + methods(Access=protected) + function makeTuples(self, key) + + Favg = cell2mat(fetchn((ANLI.FPSTHaverage & ANLI.IncludeROImultiSession2intersect) & key,'psth_avg', 'ORDER BY roi_number')); + + if size(Favg,2)<2 + return + end + + weights = fetchn((ANLI.Mode & ANLI.IncludeROImultiSession2intersect) & key,'mode_unit_weight', 'ORDER BY roi_number'); + + w_mat = repmat(weights,1,size(Favg,2)); + proj_avg = nansum( Favg.*w_mat); + + key.proj_average =proj_avg; + key.num_trials_projected =size(Favg,2); %% SHOULD BE CORRECTED + + key.time_sample_start =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_start'); + key.time_sample_end =fetch1(ANLI.FPSTHMatrix & key,'typical_time_sample_end'); + key.psth_timestamps =fetch1(ANLI.FPSTHMatrix & key,'typical_psth_timestamps'); + + insert(self,key); + +% roi_list = fetchn(ANLI.FPSTHaverage & key, 'roi_number', 'ORDER BY roi_number'); +% for i_roi=1:1:numel(roi_list) +% key.roi_number = roi_list (i_roi); +% F = (ANLI.FPSTHaverage & key, 'ORDER BY trial') +% end + + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROICluster.m b/DataJoint/+ANLI/ROICluster.m new file mode 100644 index 0000000..51445f4 --- /dev/null +++ b/DataJoint/+ANLI/ROICluster.m @@ -0,0 +1,18 @@ +%{ +# +-> IMG.ROI +-> ANLI.EpochName +clustering_option_name : varchar(400) # i.e. using all signficant cells based on euclidean +--- +roi_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly + +%} + + +classdef ROICluster < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROICorr.m b/DataJoint/+ANLI/ROICorr.m new file mode 100644 index 0000000..5d14f7e --- /dev/null +++ b/DataJoint/+ANLI/ROICorr.m @@ -0,0 +1,268 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorr < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Graph_correlation\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =2; %seconds + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width=0.8; + panel_height=0.5; + horizontal_distance=0.3; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + + roi_number_list=fetchn(IMG.ROI & IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + pos_x=fetchn(IMG.ROI & IMG.ROIGood & key,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + pos_y=fetchn(IMG.ROI & IMG.ROIGood & key,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + F = fetchn((IMG.ROISpikes & key) & IMG.ROIGood ,'spikes_trace','ORDER BY roi_number'); + F=cell2mat(F); + for i = 1:1:size(F,1) + f=F(i,:); + f=smooth(f,smooth_frames); + % f=rescale(f); + F(i,:)=f'; + % moving_baseline=movmin(f,20); + + % f=F(i,:); + % moving_baseline=movmin(f,6000); + % dff=(f-moving_baseline)./moving_baseline; + % F(i,:)=smooth(dff,smooth_frames); + end + % F=zscore(F,[],2); + F=F(:,smooth_frames:end-smooth_frames); + % meanF=rescale(mean(F)); + % meanF=zscore(mean(F)); + meanF=mean(F); + for i = 1:1:size(F,1) + f=F(i,:); + + % f=rescale(F(i,:)); + f_sigma=std(f); + + % f=zscore(F(i,:)); + + weight=corr(meanF',f'); + f_sub=f-weight*f_sigma*meanF; + hold on + plot(f,'-b') + plot(meanF,'-r') + plot(f_sub,'-g') + FbaseSubt(i,:)=f_sub'; + end + + % FbaseSubt = F - mean(F); + + [rho,pval]=corr(FbaseSubt'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + key.roi_pos_x=pos_x; + key.roi_pos_y=pos_y; + + for i_r=1:1:numel(roi_number_list) + dx = pos_x - pos_x(i_r); + dy = pos_y - pos_y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + key.mat_distance=mat_distance; + + insert(self, key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + %% Plotting a graph out of correlation Matrix + M=rho; + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(isnan(M))=0; + + M(abs(M)<=corr_threshold)=0; + M(mat_distance<=minimal_distance_pixels)=0; + + G = graph(M,'upper'); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + D = degree(G); + % if isempty(LWidths) + p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = D/max(D); + p.MarkerSize = 5*(D+1)/max(D); + + colormap bluewhitered + colorbar + + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + s=fetch(EXP2.Session & key,'*'); + session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + + title(sprintf('Session %d epoch %d \n anm %d %s \n %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:10:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:10:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:10:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width/4, panel_height/4]); + hold on + plot(bins_center_all,r_binned_all,'-.b') + ylabel('Pairwise correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width/4, panel_height/4]); + hold on + + yyaxis right + ylabel('Pairwise correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-.b') + ylabel('Pairwise correlations (negative)'); + + + + + axes('position',[position_x(3), position_y(2), panel_width/4, panel_height/4]); + hold on + histogram(D,10); + xlabel('Node degree'); + ylabel('Counts'); + + + %Saving the graph + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROICorr1.m b/DataJoint/+ANLI/ROICorr1.m new file mode 100644 index 0000000..3d254b7 --- /dev/null +++ b/DataJoint/+ANLI/ROICorr1.m @@ -0,0 +1,305 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorr1 < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Graph_correlation1_remove1PC\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =2; %seconds + remove_PCs=1; + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + roi_number_list=fetchn(rel,'roi_number','ORDER BY roi_number'); + pos_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + F = fetchn(IMG.ROIdeltaF & rel & key,'dff_trace','ORDER BY roi_number'); + F=cell2mat(F); + for i = 1:1:size(F,1) + f=F(i,:); + f=smooth(f,smooth_frames); + % f=rescale(f); + F(i,:)=f'; + + Fz(i,:) = f' - mean(f'); + % moving_baseline=movmin(f,20); + + % f=F(i,:); + % moving_baseline=movmin(f,6000); + % dff=(f-moving_baseline)./moving_baseline; + % F(i,:)=smooth(dff,smooth_frames); + end + +[coeff,score,~, ~, explained] = pca(Fz); + + +% Fz_reconst=score(:,:)*coeff'; + +use_pcs=1:1:numel(explained); +use_pcs(remove_PCs)=[]; + +% Fz_reconst=score(:,:)*coeff'; + +Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + +% a=coeff*score(1,:)'; +% plot(coeff(:,1),'-r') +% plot(coeff(:,2),'-g') +% plot(coeff(:,3),'-c') +% +% +% % F=zscore(F,[],2); +% F=F(:,smooth_frames:end-smooth_frames); +% meanF=mean(F); +% meanF=zscore(meanF); +% for i = 1:1:size(F,1) +% f=F(i,:); +% weight=corr(meanF',f'); +% +% % f_sigma=var(f); +% % f_sub=f-weight*f_sigma*meanF; +% +% f=zscore(f); +% f_sub=f-weight*meanF; +% +% hold on +% plot(f,'-b') +% plot(meanF,'-r') +% plot(f_sub,'-g') +% FbaseSubt(i,:)=f_sub'; +% end +% + % FbaseSubt = F - mean(F); + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + key.roi_pos_x=pos_x; + key.roi_pos_y=pos_y; + + for i_r=1:1:numel(roi_number_list) + dx = pos_x - pos_x(i_r); + dy = pos_y - pos_y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + key.mat_distance=mat_distance; + + insert(self, key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + %% Plotting a graph out of correlation Matrix + M=rho; + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(isnan(M))=0; + + M(abs(M)<=corr_threshold)=0; + M(mat_distance<=minimal_distance_pixels)=0; + + G = graph(M,'upper'); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + D = degree(G); + % if isempty(LWidths) + p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = D/max(D); + p.MarkerSize = 5*(D+1)/max(D); + + colormap bluewhitered + colorbar + + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + s=fetch(EXP2.Session & key,'*'); + session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + + title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:12.5:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:12.5:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:12.5:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + hold on + histogram(D,10); + xlabel('Node degree'); + ylabel('Counts'); + + + axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); + plot(1:20,explained(1:20)); + xlabel('Principal Component #'); + ylabel('Variance Explained'); + box off; + %Saving the graph + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROICorr10.m b/DataJoint/+ANLI/ROICorr10.m new file mode 100644 index 0000000..34be98b --- /dev/null +++ b/DataJoint/+ANLI/ROICorr10.m @@ -0,0 +1,305 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorr10 < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Graph_correlation1_remove10PC\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =2; %seconds + remove_PCs=10; + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + roi_number_list=fetchn(rel,'roi_number','ORDER BY roi_number'); + pos_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + F = fetchn(IMG.ROIdeltaF & rel & key,'dff_trace','ORDER BY roi_number'); + F=cell2mat(F); + for i = 1:1:size(F,1) + f=F(i,:); + f=smooth(f,smooth_frames); + % f=rescale(f); + F(i,:)=f'; + + Fz(i,:) = f' - mean(f'); + % moving_baseline=movmin(f,20); + + % f=F(i,:); + % moving_baseline=movmin(f,6000); + % dff=(f-moving_baseline)./moving_baseline; + % F(i,:)=smooth(dff,smooth_frames); + end + + [coeff,score,~, ~, explained] = pca(Fz); + + + % Fz_reconst=score(:,:)*coeff'; + + use_pcs=1:1:numel(explained); + use_pcs(remove_PCs)=[]; + + % Fz_reconst=score(:,:)*coeff'; + + Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + + % a=coeff*score(1,:)'; + % plot(coeff(:,1),'-r') + % plot(coeff(:,2),'-g') + % plot(coeff(:,3),'-c') + % + % + % % F=zscore(F,[],2); + % F=F(:,smooth_frames:end-smooth_frames); + % meanF=mean(F); + % meanF=zscore(meanF); + % for i = 1:1:size(F,1) + % f=F(i,:); + % weight=corr(meanF',f'); + % + % % f_sigma=var(f); + % % f_sub=f-weight*f_sigma*meanF; + % + % f=zscore(f); + % f_sub=f-weight*meanF; + % + % hold on + % plot(f,'-b') + % plot(meanF,'-r') + % plot(f_sub,'-g') + % FbaseSubt(i,:)=f_sub'; + % end + % + % FbaseSubt = F - mean(F); + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + key.roi_pos_x=pos_x; + key.roi_pos_y=pos_y; + + for i_r=1:1:numel(roi_number_list) + dx = pos_x - pos_x(i_r); + dy = pos_y - pos_y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + key.mat_distance=mat_distance; + + insert(self, key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + %% Plotting a graph out of correlation Matrix + M=rho; + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(isnan(M))=0; + + M(abs(M)<=corr_threshold)=0; + M(mat_distance<=minimal_distance_pixels)=0; + + G = graph(M,'upper'); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + D = degree(G); + % if isempty(LWidths) + p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = D/max(D); + p.MarkerSize = 5*(D+1)/max(D); + + colormap bluewhitered + colorbar + + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + s=fetch(EXP2.Session & key,'*'); + session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + + title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:12.5:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:12.5:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:12.5:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + hold on + histogram(D,10); + xlabel('Node degree'); + ylabel('Counts'); + + + axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); + plot(1:20,explained(1:20)); + xlabel('Principal Component #'); + ylabel('Variance Explained'); + box off; + %Saving the graph + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROICorr3.m b/DataJoint/+ANLI/ROICorr3.m new file mode 100644 index 0000000..6cd23f6 --- /dev/null +++ b/DataJoint/+ANLI/ROICorr3.m @@ -0,0 +1,305 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorr3 < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Graph_correlation1_remove3PC\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =2; %seconds + remove_PCs=3; + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + roi_number_list=fetchn(rel,'roi_number','ORDER BY roi_number'); + pos_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + F = fetchn(IMG.ROIdeltaF & rel & key,'dff_trace','ORDER BY roi_number'); + F=cell2mat(F); + for i = 1:1:size(F,1) + f=F(i,:); + f=smooth(f,smooth_frames); + % f=rescale(f); + F(i,:)=f'; + + Fz(i,:) = f' - mean(f'); + % moving_baseline=movmin(f,20); + + % f=F(i,:); + % moving_baseline=movmin(f,6000); + % dff=(f-moving_baseline)./moving_baseline; + % F(i,:)=smooth(dff,smooth_frames); + end + +[coeff,score,~, ~, explained] = pca(Fz); + + +% Fz_reconst=score(:,:)*coeff'; + +use_pcs=1:1:numel(explained); +use_pcs(remove_PCs)=[]; + +% Fz_reconst=score(:,:)*coeff'; + +Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + +% a=coeff*score(1,:)'; +% plot(coeff(:,1),'-r') +% plot(coeff(:,2),'-g') +% plot(coeff(:,3),'-c') +% +% +% % F=zscore(F,[],2); +% F=F(:,smooth_frames:end-smooth_frames); +% meanF=mean(F); +% meanF=zscore(meanF); +% for i = 1:1:size(F,1) +% f=F(i,:); +% weight=corr(meanF',f'); +% +% % f_sigma=var(f); +% % f_sub=f-weight*f_sigma*meanF; +% +% f=zscore(f); +% f_sub=f-weight*meanF; +% +% hold on +% plot(f,'-b') +% plot(meanF,'-r') +% plot(f_sub,'-g') +% FbaseSubt(i,:)=f_sub'; +% end +% + % FbaseSubt = F - mean(F); + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + key.roi_pos_x=pos_x; + key.roi_pos_y=pos_y; + + for i_r=1:1:numel(roi_number_list) + dx = pos_x - pos_x(i_r); + dy = pos_y - pos_y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + key.mat_distance=mat_distance; + + insert(self, key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + %% Plotting a graph out of correlation Matrix + M=rho; + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(isnan(M))=0; + + M(abs(M)<=corr_threshold)=0; + M(mat_distance<=minimal_distance_pixels)=0; + + G = graph(M,'upper'); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + D = degree(G); + % if isempty(LWidths) + p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = D/max(D); + p.MarkerSize = 5*(D+1)/max(D); + + colormap bluewhitered + colorbar + + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + s=fetch(EXP2.Session & key,'*'); + session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + + title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:12.5:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:12.5:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:12.5:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + hold on + histogram(D,10); + xlabel('Node degree'); + ylabel('Counts'); + + + axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); + plot(1:20,explained(1:20)); + xlabel('Principal Component #'); + ylabel('Variance Explained'); + box off; + %Saving the graph + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROICorr5.m b/DataJoint/+ANLI/ROICorr5.m new file mode 100644 index 0000000..d44e29b --- /dev/null +++ b/DataJoint/+ANLI/ROICorr5.m @@ -0,0 +1,305 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorr5 < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Graph_correlation1_remove5PC\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =2; %seconds + remove_PCs=3; + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + roi_number_list=fetchn(rel,'roi_number','ORDER BY roi_number'); + pos_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + F = fetchn(IMG.ROIdeltaF & rel & key,'dff_trace','ORDER BY roi_number'); + F=cell2mat(F); + for i = 1:1:size(F,1) + f=F(i,:); + f=smooth(f,smooth_frames); + % f=rescale(f); + F(i,:)=f'; + + Fz(i,:) = f' - mean(f'); + % moving_baseline=movmin(f,20); + + % f=F(i,:); + % moving_baseline=movmin(f,6000); + % dff=(f-moving_baseline)./moving_baseline; + % F(i,:)=smooth(dff,smooth_frames); + end + +[coeff,score,~, ~, explained] = pca(Fz); + + +% Fz_reconst=score(:,:)*coeff'; + +use_pcs=1:1:numel(explained); +use_pcs(remove_PCs)=[]; + +% Fz_reconst=score(:,:)*coeff'; + +Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + +% a=coeff*score(1,:)'; +% plot(coeff(:,1),'-r') +% plot(coeff(:,2),'-g') +% plot(coeff(:,3),'-c') +% +% +% % F=zscore(F,[],2); +% F=F(:,smooth_frames:end-smooth_frames); +% meanF=mean(F); +% meanF=zscore(meanF); +% for i = 1:1:size(F,1) +% f=F(i,:); +% weight=corr(meanF',f'); +% +% % f_sigma=var(f); +% % f_sub=f-weight*f_sigma*meanF; +% +% f=zscore(f); +% f_sub=f-weight*meanF; +% +% hold on +% plot(f,'-b') +% plot(meanF,'-r') +% plot(f_sub,'-g') +% FbaseSubt(i,:)=f_sub'; +% end +% + % FbaseSubt = F - mean(F); + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + key.roi_pos_x=pos_x; + key.roi_pos_y=pos_y; + + for i_r=1:1:numel(roi_number_list) + dx = pos_x - pos_x(i_r); + dy = pos_y - pos_y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + key.mat_distance=mat_distance; + + insert(self, key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + %% Plotting a graph out of correlation Matrix + M=rho; + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(isnan(M))=0; + + M(abs(M)<=corr_threshold)=0; + M(mat_distance<=minimal_distance_pixels)=0; + + G = graph(M,'upper'); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + D = degree(G); + % if isempty(LWidths) + p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = D/max(D); + p.MarkerSize = 5*(D+1)/max(D); + + colormap bluewhitered + colorbar + + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + s=fetch(EXP2.Session & key,'*'); + session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + + title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:12.5:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:12.5:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:12.5:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + hold on + histogram(D,10); + xlabel('Node degree'); + ylabel('Counts'); + + + axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); + plot(1:20,explained(1:20)); + xlabel('Principal Component #'); + ylabel('Variance Explained'); + box off; + %Saving the graph + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROICorrMeso.m b/DataJoint/+ANLI/ROICorrMeso.m new file mode 100644 index 0000000..d58c7b3 --- /dev/null +++ b/DataJoint/+ANLI/ROICorrMeso.m @@ -0,0 +1,284 @@ + %{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROICorrMeso < dj.Computed + properties + keySource = EXP2.SessionEpoch & 'session_epoch_type="spont_only"' & IMG.ROI & IMG.ROISpikes & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + close all + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base 'Mesoscope\Graph_correlation1_remove1PC\']; + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =1; %seconds + remove_PCs=1; + % + % try + % zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + % kkk.scanimage_zoom = zoom; + % pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + % catch + % pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + % end + pix2dist=1; + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + % rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + rel = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M = fetch(rel,'*'); + M=struct2table(M); + + roi_number_list = M.roi_number; + + % pozs_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + % pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + + + + F = fetchn(IMG.ROISpikes & rel & key,'spikes_trace','ORDER BY roi_number'); + F=cell2mat(F); + + F=movmean(F,[smooth_frames 0],'omitnan','Endpoints','shrink'); + F = F - mean(F,2); + + + +% [coeff,score,~, ~, explained] = pca(F,'NumComponents',100); +% use_pcs=1:1:numel(explained); +% use_pcs(remove_PCs)=[]; +% Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + Fz_reconst = F; + clear F; + + + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + + + + key.roi_pos_x=x; + key.roi_pos_y=y; + + mat_distance=zeros(size(rho)); + parfor i_r=1:1:numel(roi_number_list) + dx = x - x(i_r); + dy = y - y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + + + key.mat_distance=mat_distance; + + + % close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + % %% Plotting a graph out of correlation Matrix + % M=rho; + % diagonal_values = M(1:size(M,1)+1:end); + % + % M = M - diag(diag(M)); %setting diagonal values to 0 + % M(isnan(M))=0; + % + % M(abs(M)<=corr_threshold)=0; + % M(mat_distance<=minimal_distance_pixels)=0; + % + % G = graph(M,'upper'); + % LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + % + % axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + % mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + % x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + % y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + % D = degree(G); + % % if isempty(LWidths) + % p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % % else + % % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % % end + % p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = D/max(D); + % p.MarkerSize = 5*(D+1)/max(D); + % + % colormap bluewhitered + % colorbar + % + % % highlight(p,[1 3]) + % % h = plot(G,'Layout','force'); + % % layout(h,'force','UseGravity',true) + % s=fetch(EXP2.Session & key,'*'); + % session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + % + % title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + % axis xy + % set(gca,'YDir','reverse') + % axis equal + % xlabel('Anterior - Posterior (\mum)'); + % ylabel('Lateral - Medial (\mum)'); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:1:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:1:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:1:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + % axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + % hold on + % histogram(D,10); + % xlabel('Node degree'); + % ylabel('Counts'); + + +% axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); +% plot(1:20,explained(1:20)); +% xlabel('Principal Component #'); +% ylabel('Variance Explained'); +% box off; + %Saving the graph + + + insert(self, key); + + + dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+ANLI/ROIHierarCluster.m b/DataJoint/+ANLI/ROIHierarCluster.m new file mode 100644 index 0000000..56d29ca --- /dev/null +++ b/DataJoint/+ANLI/ROIHierarCluster.m @@ -0,0 +1,74 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> IMG.ROI +heirar_cluster_time_st : double # beginning of the time interval used for heirarchical clustering (seconds, relative to go cue). +heirar_cluster_time_end : double # end of the time interval used for heirarchical clustering (seconds, relative to go cue). +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + + +classdef ROIHierarCluster < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock; + + end + methods(Access=protected) + function makeTuples(self, key) + + smooth_bins=1; % one element backward, current element, and one element forward + + + key=[]; + key.heirar_cluster_time_st = -3; + key.heirar_cluster_time_end = 3; + + PSTH = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2Dmap & key & 'psth_selectivity_odd_even_corr>=-1', 'selectivity', 'ORDER BY roi_number_uid')); + + PSTH = cell2mat(fetchn(ANLI.ROILick2DPSTH*IMG.ROI & key, 'psth_averaged_over_all_positions', 'ORDER BY roi_number_uid')); + PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + + PSTH = PSTH./nanmax(PSTH,[],2); + [~,idx]=max(PSTH,[],2); + + [~,idxs]=sort(idx); + imagesc(PSTH(idxs,:)) + + time_psth = fetch1(ANLI.ROILick2DPSTH & key, 'time_psth', 'LIMIT 1'); + key_ROIs = fetch(IMG.ROI*ANLI.ROILick2Dmap & key, 'ORDER BY roi_number_uid'); + + %Perform Hierarchical Clustering + if ~ishandle(1) + close all; + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + end + [cl_id, cluster_percent] = fn_ClusterROI2(PSTH, time_psth, key); + + % Insert + for i=1:1:size(key_ROIs,1) + key(i).subject_id=key_ROIs(i).subject_id; + key(i).session=key_ROIs(i).session; + key(i).fov_num=key_ROIs(i).fov_num; + key(i).plane_num=key_ROIs(i).plane_num; + key(i).channel_num=key_ROIs(i).channel_num; + key(i).roi_number=key_ROIs(i).roi_number; + + key(i).heirar_cluster_time_st=key(1).heirar_cluster_time_st; + key(i).heirar_cluster_time_end=key(1).heirar_cluster_time_end; + key(i).heirar_cluster_id = cl_id(i); + key(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROIHierarClusterSelectivity.m b/DataJoint/+ANLI/ROIHierarClusterSelectivity.m new file mode 100644 index 0000000..f36ebc7 --- /dev/null +++ b/DataJoint/+ANLI/ROIHierarClusterSelectivity.m @@ -0,0 +1,110 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> IMG.ROI +heirar_cluster_time_st : double # beginning of the time interval used for heirarchical clustering (seconds, relative to go cue). +heirar_cluster_time_end : double # end of the time interval used for heirarchical clustering (seconds, relative to go cue). +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + + +classdef ROIHierarClusterSelectivity < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH; + + end + methods(Access=protected) + function makeTuples(self, key) + + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\ClustersBySelectivity\']; + + smooth_bins=1; % one element backward, current element, and one element forward + + + % key=[]; + time_interval(1) = -2; + time_interval(2) = 4; + + clusterparam.metric='euclidean'; %euclidean or correlation + clusterparam.n_clust=1000; + clusterparam.agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + key.heirar_cluster_time_st = time_interval(1); + key.heirar_cluster_time_end = time_interval(2); + + + PSTH1 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2DPSTH & key , 'psth_averaged_over_all_positions', 'ORDER BY roi_number_uid')); + % psth_selectivity_odd_even_corr = fetchn(ANLI.ROILick2Dmap & key, 'psth_selectivity_odd_even_corr', 'ORDER BY roi_number'); + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + [~,idx]=max(PSTH1,[],2); + [~,idxs]=sort(idx); + % imagesc(PSTH1(idxs,:)) + + PSTH2 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2Dselectivity & key , 'selectivity', 'ORDER BY roi_number_uid')); + % psth_selectivity_odd_even_corr = fetchn(ANLI.ROILick2Dmap & key, 'psth_selectivity_odd_even_corr', 'ORDER BY roi_number'); + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); %we normalize selectivty to max PSTH + + + psth_time = fetch1(ANLI.ROILick2DPSTH & key, 'psth_time', 'LIMIT 1'); + + idx_time = psth_time>= time_interval(1) & psth_time< time_interval(2); + + % PSTH1=PSTH1(:,idx_time); + PSTH2=PSTH2(:,idx_time); + + PSTH = [PSTH2]; + + + + + + + time_vec = 1:1:size(PSTH,2); %fetch1(ANLI.ROILick2DPSTH & key, 'time_psth', 'LIMIT 1'); + key_ROIs = fetch(IMG.ROI*ANLI.ROILick2Dselectivity & key, 'ORDER BY roi_number_uid'); + + %Perform Hierarchical Clustering + if ~ishandle(1) + close all; + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + end + [cl_id, cluster_percent] = fn_ClusterROI2(PSTH, time_vec, key, clusterparam, dir_save_figure); + + % Insert + for i=1:1:size(key_ROIs,1) + key(i).subject_id=key_ROIs(i).subject_id; + key(i).session=key_ROIs(i).session; + key(i).fov_num=key_ROIs(i).fov_num; + key(i).plane_num=key_ROIs(i).plane_num; + key(i).channel_num=key_ROIs(i).channel_num; + key(i).roi_number=key_ROIs(i).roi_number; + + key(i).heirar_cluster_time_st=key(1).heirar_cluster_time_st; + key(i).heirar_cluster_time_end=key(1).heirar_cluster_time_end; + key(i).heirar_cluster_id = cl_id(i); + key(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROIHierarClusterShape.m b/DataJoint/+ANLI/ROIHierarClusterShape.m new file mode 100644 index 0000000..16e9b60 --- /dev/null +++ b/DataJoint/+ANLI/ROIHierarClusterShape.m @@ -0,0 +1,100 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> IMG.ROI +heirar_cluster_time_st : double # beginning of the time interval used for heirarchical clustering (seconds, relative to go cue). +heirar_cluster_time_end : double # end of the time interval used for heirarchical clustering (seconds, relative to go cue). +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + + +classdef ROIHierarClusterShape < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\ClustersByShape\']; + + smooth_bins=1; % one element backward, current element, and one element forward + + + % key=[]; + time_interval(1) = -2; + time_interval(2) = 4; + + clusterparam.metric='euclidean'; %euclidean or correlation + + clusterparam.n_clust=1000; + clusterparam.agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + key.heirar_cluster_time_st = time_interval(1); + key.heirar_cluster_time_end = time_interval(2); + + + PSTH1 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2DPSTH & key , 'psth_averaged_over_all_positions', 'ORDER BY roi_number_uid')); + % psth_selectivity_odd_even_corr = fetchn(ANLI.ROILick2Dmap & key, 'psth_selectivity_odd_even_corr', 'ORDER BY roi_number'); + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + [~,idx]=max(PSTH1,[],2); + [~,idxs]=sort(idx); +% imagesc(PSTH1(idxs,:)) + + + psth_time = fetch1(ANLI.ROILick2DPSTH & key, 'psth_time', 'LIMIT 1'); + idx_time = psth_time>= time_interval(1) & psth_time< time_interval(2); + + PSTH1=PSTH1(:,idx_time); + + PSTH = [PSTH1]; + + + time_vec = 1:1:size(PSTH,2); %fetch1(ANLI.ROILick2DPSTH & key, 'time_psth', 'LIMIT 1'); + key_ROIs = fetch(IMG.ROI & key, 'ORDER BY roi_number_uid'); + + %Perform Hierarchical Clustering + if ~ishandle(1) + close all; + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + end + [cl_id, cluster_percent] = fn_ClusterROI2(PSTH, time_vec, key, clusterparam, dir_save_figure); + + % Insert + for i=1:1:size(key_ROIs,1) + key(i).subject_id=key_ROIs(i).subject_id; + key(i).session=key_ROIs(i).session; + key(i).fov_num=key_ROIs(i).fov_num; + key(i).plane_num=key_ROIs(i).plane_num; + key(i).channel_num=key_ROIs(i).channel_num; + key(i).roi_number=key_ROIs(i).roi_number; + + key(i).heirar_cluster_time_st=key(1).heirar_cluster_time_st; + key(i).heirar_cluster_time_end=key(1).heirar_cluster_time_end; + key(i).heirar_cluster_id = cl_id(i); + key(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROIHierarClusterShapeAndSelectivity.m b/DataJoint/+ANLI/ROIHierarClusterShapeAndSelectivity.m new file mode 100644 index 0000000..0824590 --- /dev/null +++ b/DataJoint/+ANLI/ROIHierarClusterShapeAndSelectivity.m @@ -0,0 +1,116 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> IMG.ROI +heirar_cluster_time_st : double # beginning of the time interval used for heirarchical clustering (seconds, relative to go cue). +heirar_cluster_time_end : double # end of the time interval used for heirarchical clustering (seconds, relative to go cue). +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + + +classdef ROIHierarClusterShapeAndSelectivity < dj.Computed + properties + + keySource = EXP2.Session & EXP2.TrialLickBlock & ANLI.ROILick2DPSTH & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\ClusteringSelectivityAndShape\']; + + + + smooth_bins=1; % one element backward, current element, and one element forward + + + % key=[]; + time_interval(1) = -2; + time_interval(2) = 4; + + clusterparam.metric='euclidean'; %euclidean or correlation + + clusterparam.n_clust=500; + clusterparam.agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + key.heirar_cluster_time_st = time_interval(1); + key.heirar_cluster_time_end = time_interval(2); + + PSTH1 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2Dselectivity & key , 'psth_preferred', 'ORDER BY roi_number_uid')); + +% PSTH1 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2DPSTH & key , 'psth_averaged_over_all_positions', 'ORDER BY roi_number_uid')); +% psth_selectivity_odd_even_corr = fetchn(ANLI.ROILick2Dmap & key, 'psth_selectivity_odd_even_corr', 'ORDER BY roi_number'); + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + [~,idx]=max(PSTH1,[],2); + [~,idxs]=sort(idx); + imagesc(PSTH1(idxs,:)) + + PSTH2 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2Dselectivity & key , 'psth_non_preferred', 'ORDER BY roi_number_uid')); + +% PSTH2 = cell2mat(fetchn(IMG.ROI*ANLI.ROILick2Dselectivity & key , 'selectivity', 'ORDER BY roi_number_uid')); +% psth_selectivity_odd_even_corr = fetchn(ANLI.ROILick2Dmap & key, 'psth_selectivity_odd_even_corr', 'ORDER BY roi_number'); + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); %we normalize selectivty to max PSTH + + + psth_time = fetch1(ANLI.ROILick2DPSTH & key, 'psth_time', 'LIMIT 1'); + + idx_time = psth_time>= time_interval(1) & psth_time< time_interval(2); + + PSTH1=PSTH1(:,idx_time); + PSTH2=PSTH2(:,idx_time); + + PSTH = [PSTH1, PSTH2]; + + + + + + + time_vec = 1:1:size(PSTH,2); %fetch1(ANLI.ROILick2DPSTH & key, 'time_psth', 'LIMIT 1'); + key_ROIs = fetch(IMG.ROI*ANLI.ROILick2Dselectivity & key, 'ORDER BY roi_number_uid'); + + %Perform Hierarchical Clustering + if ~ishandle(1) + close all; + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + end + [cl_id, cluster_percent] = fn_ClusterROI2(PSTH, time_vec, key, clusterparam, dir_save_figure); + + % Insert + for i=1:1:size(key_ROIs,1) + key(i).subject_id=key_ROIs(i).subject_id; + key(i).session=key_ROIs(i).session; + key(i).fov_num=key_ROIs(i).fov_num; + key(i).plane_num=key_ROIs(i).plane_num; + key(i).channel_num=key_ROIs(i).channel_num; + key(i).roi_number=key_ROIs(i).roi_number; + + key(i).heirar_cluster_time_st=key(1).heirar_cluster_time_st; + key(i).heirar_cluster_time_end=key(1).heirar_cluster_time_end; + key(i).heirar_cluster_id = cl_id(i); + key(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROILick2DPSTHBlock.m b/DataJoint/+ANLI/ROILick2DPSTHBlock.m new file mode 100644 index 0000000..610f7b0 --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DPSTHBlock.m @@ -0,0 +1,33 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +fr_interval_start1 : int # %in miliseconds, window to compute the firing rate change +fr_interval_end1 : int # %in miliseconds, window to compute the firing rate change +fr_interval_start2 : int # %in miliseconds, window to compute the firing rate change +fr_interval_end2 : int # %in miliseconds, window to compute the firing rate change +--- +psth_averaged_over_all_positions_begin : longblob # +psth_averaged_over_all_positions_mid : longblob # +psth_averaged_over_all_positions_end : longblob # +psth_averaged_over_all_positions_first : longblob # +%} + + +classdef ROILick2DPSTHBlock < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialRewardSize; + end + methods(Access=protected) + function makeTuples(self, key) + key.fr_interval_start1 = -1000; + key.fr_interval_end1 = 0; + key.fr_interval_start2 = 0; + key.fr_interval_end2 = 1000; + + fn_computer_Lick2DPSTH_block(key,self); + + + end + end +end diff --git a/DataJoint/+ANLI/ROILick2DPSTHReward.m b/DataJoint/+ANLI/ROILick2DPSTHReward.m new file mode 100644 index 0000000..969bc0d --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DPSTHReward.m @@ -0,0 +1,32 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +fr_interval_start1 : int # %in miliseconds, window to compute the firing rate change +fr_interval_end1 : int # %in miliseconds, window to compute the firing rate change +fr_interval_start2 : int # %in miliseconds, window to compute the firing rate change +fr_interval_end2 : int # %in miliseconds, window to compute the firing rate change +--- +psth_averaged_over_all_positions_regular : longblob # +psth_averaged_over_all_positions_large : longblob # +psth_averaged_over_all_positions_small : longblob # +%} + + +classdef ROILick2DPSTHReward < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialRewardSize; + end + methods(Access=protected) + function makeTuples(self, key) + key.fr_interval_start1 = -1000; + key.fr_interval_end1 = 0; + key.fr_interval_start2 = 0; + key.fr_interval_end2 = 1000; + + fn_computer_Lick2DPSTH_reward(key,self); + + + end + end +end diff --git a/DataJoint/+ANLI/ROILick2DangleShuffle.m b/DataJoint/+ANLI/ROILick2DangleShuffle.m new file mode 100644 index 0000000..d816460 --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DangleShuffle.m @@ -0,0 +1,42 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +fr_interval_start : int # %in miliseconds, window to compute the firing rate for the activity maps +fr_interval_end : int # %in miliseconds, window to compute the firing rate for the activity maps +--- +pval_rayleigh_length=null : double # +pval_theta_tuning_odd_even_corr = null : double # +%} + + +classdef ROILick2DangleShuffle< dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock; + end + methods(Access=protected) + function makeTuples(self, key) + +% key.fr_interval_start = -2000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dangle_shuffle(key,self); +% +% key.fr_interval_start = -1000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dangle_shuffle(key,self); +% +% key.fr_interval_start = 0; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dangle_shuffle(key,self); +% +% key.fr_interval_start = -1000; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dangle_shuffle(key,self); + + key.fr_interval_start = -1000; + key.fr_interval_end = 2000; + fn_computer_Lick2Dangle_shuffle(key,self); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROILick2DmapBlock.m b/DataJoint/+ANLI/ROILick2DmapBlock.m new file mode 100644 index 0000000..90dd6d8 --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DmapBlock.m @@ -0,0 +1,50 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +fr_interval_start : int # %in miliseconds, window to compute the firing rate for the activity maps +fr_interval_end : int # %in miliseconds, window to compute the firing rate for the activity maps +--- +psth_per_position : longblob # +psth_per_position_odd : longblob # +psth_per_position_even : longblob # +psth_time : longblob # +lickmap_fr : longblob # +lickmap_fr_odd : longblob # +lickmap_fr_even : longblob # +lickmap_odd_even_corr : double # +pos_x_bins_centers : blob # +pos_z_bins_centers : blob # +information_per_spike : double # +preferred_bin : double # +preferred_radius : double # + +%} + + +classdef ROILick2DmapBlock < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialRewardSize; + end + methods(Access=protected) + function makeTuples(self, key) + for i_numbin=[4] + key.number_of_bins = i_numbin; + +% key.fr_interval_start = -1000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dmap(key,self); +% +% key.fr_interval_start = 0; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dmap(key,self); + + key.fr_interval_start = 0; + key.fr_interval_end = 2000; + fn_computer_Lick2DmapBlock(key,self); + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROILick2DmapReward.m b/DataJoint/+ANLI/ROILick2DmapReward.m new file mode 100644 index 0000000..7df13d5 --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DmapReward.m @@ -0,0 +1,50 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +fr_interval_start : int # %in miliseconds, window to compute the firing rate for the activity maps +fr_interval_end : int # %in miliseconds, window to compute the firing rate for the activity maps +--- +psth_per_position : longblob # +psth_per_position_odd : longblob # +psth_per_position_even : longblob # +psth_time : longblob # +lickmap_fr : longblob # +lickmap_fr_odd : longblob # +lickmap_fr_even : longblob # +lickmap_odd_even_corr : double # +pos_x_bins_centers : blob # +pos_z_bins_centers : blob # +information_per_spike : double # +preferred_bin : double # +preferred_radius : double # + +%} + + +classdef ROILick2DmapReward < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialRewardSize; + end + methods(Access=protected) + function makeTuples(self, key) + for i_numbin=[4] + key.number_of_bins = i_numbin; + +% key.fr_interval_start = -1000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dmap(key,self); +% +% key.fr_interval_start = 0; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dmap(key,self); + + key.fr_interval_start = 0; + key.fr_interval_end = 2000; + fn_computer_Lick2DmapReward(key,self); + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/ROILick2DmapShuffle.m b/DataJoint/+ANLI/ROILick2DmapShuffle.m new file mode 100644 index 0000000..94ebf6f --- /dev/null +++ b/DataJoint/+ANLI/ROILick2DmapShuffle.m @@ -0,0 +1,48 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +fr_interval_start : int # %in miliseconds, window to compute the firing rate for the activity maps +fr_interval_end : int # %in miliseconds, window to compute the firing rate for the activity maps +--- +pval_information_per_spike = null : double # +pval_lickmap_odd_even_corr = null : double # + +%} + + +classdef ROILick2DmapShuffle < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock;; + end + methods(Access=protected) + function makeTuples(self, key) + for i_numbin=[4] + + key.number_of_bins = i_numbin; + +% key.fr_interval_start = -2000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dmap_shuffle(key,self); +% +% key.fr_interval_start = -1000; +% key.fr_interval_end = 0; +% fn_computer_Lick2Dmap_shuffle(key,self); +% +% key.fr_interval_start = 0; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dmap_shuffle(key,self); +% +% key.fr_interval_start = -1000; +% key.fr_interval_end = 1000; +% fn_computer_Lick2Dmap_shuffle(key,self); + + key.fr_interval_start = -1000; + key.fr_interval_end = 2000; + fn_computer_Lick2Dmap_shuffle(key,self); + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TaskSignifName.m b/DataJoint/+ANLI/TaskSignifName.m new file mode 100644 index 0000000..f6a1979 --- /dev/null +++ b/DataJoint/+ANLI/TaskSignifName.m @@ -0,0 +1,18 @@ +%{ +# +task_signif_name : varchar(400) # element of the task that we check for significance - i.e. delay epoch selectivity, ramping etc +--- +task_signif_name_description=null : varchar(4000) # +%} + + +classdef TaskSignifName < dj.Lookup + properties + contents = { + 'Stimulus' 'Selectivity during sample period - i.e. response to stimulus' + 'LateDelay' 'Selectivity during late delay' + 'Ramping' 'Ramping, not necessarily selective. Computed in the beginning of the trial versus end of delay' + 'Movement' 'Selectivity during movement' + } + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TaskSignifROI.m b/DataJoint/+ANLI/TaskSignifROI.m new file mode 100644 index 0000000..077d34f --- /dev/null +++ b/DataJoint/+ANLI/TaskSignifROI.m @@ -0,0 +1,76 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +-> ANLI.TaskSignifName +--- +task_signif_pval = null : double # pval of each roi +signif_time1_st = null : double # beginning of the first time interval used to compute the signif (seconds, relative to go cue). +signif_time1_end = null : double # end of the first time interval used to compute the signficance (seconds, relative to go cue). +signif_time2_st = null : double # beginning of the second time interval used to compute the signficance (seconds, relative to go cue). +signif_time2_end = null : double # end of the second time interval used to compute the signficance (seconds, relative to go cue). +task_signif_name_uid : int # unique id that could be used instead of specifying the task_signif_name +%} + +classdef TaskSignifROI < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + tic + key=fetch(IMG.FOV & key); + +% b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key & 'early_lick="no early"','*','ORDER BY trial'); + b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key ,'*','ORDER BY trial'); + + b=struct2table(b); + + F=fetch(ANLI.FPSTHMatrix & key,'*'); + F.psth_roi_tr_fr = F.psth_roi_tr_fr (:,:,1:numel(F.typical_psth_timestamps)); + t_sample_start =F.typical_time_sample_start; + t_sample_end =F.typical_time_sample_end; + + + % Stimulus + k_insert=key; + k_insert.task_signif_name = 'Stimulus'; + k_insert.task_signif_name_uid = 1; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [t_sample_start t_sample_end]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [t_sample_start t_sample_end]; + k_insert = fn_compute_roi_task_significance (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.TaskSignifROI, k_insert); + + + % LateDelay + k_insert=key; + k_insert.task_signif_name = 'LateDelay'; + k_insert.task_signif_name_uid = 2; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [-1 0]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [-1 0]; + k_insert = fn_compute_roi_task_significance (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.TaskSignifROI, k_insert); + + + % Movement + k_insert=key; + k_insert.task_signif_name = 'Movement'; + k_insert.task_signif_name_uid = 3; + trials1 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'r')); tint1 = [0 2]; + trials2 = find(strcmp(b.outcome,'hit') & strcmp(b.trial_type_name,'l')); tint2 = [0 2]; + k_insert = fn_compute_roi_task_significance (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.TaskSignifROI, k_insert); + + % Ramping + k_insert=key; + k_insert.task_signif_name = 'Ramping'; + k_insert.task_signif_name_uid = 4; + trials1 = find(strcmp(b.outcome,'hit')); tint1 = [t_sample_start (t_sample_start+1)]; + trials2 = find(strcmp(b.outcome,'hit')); tint2 = [-1 0]; + k_insert = fn_compute_roi_task_significance (F.psth_roi_tr_fr, trials1, trials2, tint1, tint2, F.typical_psth_timestamps, k_insert); + insert( ANLI.TaskSignifROI, k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TaskSignifROIsomeEpoch.m b/DataJoint/+ANLI/TaskSignifROIsomeEpoch.m new file mode 100644 index 0000000..bb2a3ae --- /dev/null +++ b/DataJoint/+ANLI/TaskSignifROIsomeEpoch.m @@ -0,0 +1,33 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +task_signif_pval_threshold = null : double # pval at some epoch used for signficance +%} + +classdef TaskSignifROIsomeEpoch < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + rel=ANLI.TaskSignifName; + pval_threshold = 0.01/rel.count; + + key=fetch(IMG.FOV & key); + + roi_list=fetchn((IMG.ROI - IMG.ExcludeROI) & key,'roi_number','ORDER BY roi_number'); + for i_roi = 1:1:numel(roi_list) + key.roi_number =roi_list(i_roi); + pval= fetchn(ANLI.TaskSignifROI & key,'task_signif_pval'); + if sum(pval< pval_threshold)>0 + key.task_signif_pval_threshold =pval_threshold; + insert(self,key); + end + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TaskSignifROIsomeEpoch2.m b/DataJoint/+ANLI/TaskSignifROIsomeEpoch2.m new file mode 100644 index 0000000..97d9868 --- /dev/null +++ b/DataJoint/+ANLI/TaskSignifROIsomeEpoch2.m @@ -0,0 +1,32 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +task_signif_pval_threshold = null : double # pval at some epoch used for signficance +%} + +classdef TaskSignifROIsomeEpoch2 < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + pval_threshold = 0.0001; + + key=fetch(IMG.FOV & key); + + roi_list=fetchn((IMG.ROI - IMG.ExcludeROI) & key,'roi_number','ORDER BY roi_number'); + for i_roi = 1:1:numel(roi_list) + key.roi_number =roi_list(i_roi); + pval= fetchn(ANLI.TaskSignifROI & key & 'task_signif_name="LateDelay" or task_signif_name="Movement"','task_signif_pval'); + if sum(pval< pval_threshold)>0 + key.task_signif_pval_threshold =pval_threshold; + insert(self,key); + end + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TaskSignifROIsomeEpoch3.m b/DataJoint/+ANLI/TaskSignifROIsomeEpoch3.m new file mode 100644 index 0000000..880e462 --- /dev/null +++ b/DataJoint/+ANLI/TaskSignifROIsomeEpoch3.m @@ -0,0 +1,32 @@ +%{ +# Significance of a activity for different task-related epochs/features +-> IMG.ROI +--- +task_signif_pval_threshold = null : double # pval at some epoch used for signficance +%} + +classdef TaskSignifROIsomeEpoch3 < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + pval_threshold = 0.00001; + + key=fetch(IMG.FOV & key); + + roi_list=fetchn((IMG.ROI - IMG.ExcludeROI) & key,'roi_number','ORDER BY roi_number'); + for i_roi = 1:1:numel(roi_list) + key.roi_number =roi_list(i_roi); + pval= fetchn(ANLI.TaskSignifROI & key & 'task_signif_name="LateDelay" or task_signif_name="Movement"','task_signif_pval'); + if sum(pval< pval_threshold)>0 + key.task_signif_pval_threshold =pval_threshold; + insert(self,key); + end + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/TrialCluster.m b/DataJoint/+ANLI/TrialCluster.m new file mode 100644 index 0000000..16b795c --- /dev/null +++ b/DataJoint/+ANLI/TrialCluster.m @@ -0,0 +1,19 @@ +%{ +# +-> EXP.SessionTrial +-> ANLI.EpochName +clustering_option_name : varchar(400) # i.e. using all signficant cells based on euclidean +--- +trial_cluster_id : int # +trial_cluster_group : int # group 1 - largest cluster, group 2 - second largest cluster etc. + +%} + + +classdef TrialCluster < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+ANLI/getSchema.m b/DataJoint/+ANLI/getSchema.m new file mode 100644 index 0000000..27c87bd --- /dev/null +++ b/DataJoint/+ANLI/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'ANLI', 'arseny_learning_analysis'); +end +obj = schemaObject; +end diff --git a/DataJoint/+EXP2/ActionEvent.m b/DataJoint/+EXP2/ActionEvent.m new file mode 100644 index 0000000..b90250b --- /dev/null +++ b/DataJoint/+EXP2/ActionEvent.m @@ -0,0 +1,14 @@ +%{ +# +-> EXP2.BehaviorTrial +-> EXP2.ActionEventType +action_event_time : decimal(8,4) # (s) from trial start +%} + + +classdef ActionEvent < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/ActionEventType.m b/DataJoint/+EXP2/ActionEventType.m new file mode 100644 index 0000000..46a8489 --- /dev/null +++ b/DataJoint/+EXP2/ActionEventType.m @@ -0,0 +1,17 @@ +%{ +# +action_event_type : varchar(32) # +--- +action_event_description : varchar(1000) # +%} + + +classdef ActionEventType < dj.Lookup + properties + contents = { + 'left lick' '' + 'right lick' '' + 'lick' '' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/BehaviorTrial.m b/DataJoint/+EXP2/BehaviorTrial.m new file mode 100644 index 0000000..01fa27e --- /dev/null +++ b/DataJoint/+EXP2/BehaviorTrial.m @@ -0,0 +1,17 @@ +%{ +# +-> EXP2.SessionTrial +--- +-> EXP2.TaskProtocol +-> EXP2.TrialInstruction +-> EXP2.EarlyLick +-> EXP2.Outcome +%} + + +classdef BehaviorTrial < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/BehaviorTrialEvent.m b/DataJoint/+EXP2/BehaviorTrialEvent.m new file mode 100644 index 0000000..ab0efc0 --- /dev/null +++ b/DataJoint/+EXP2/BehaviorTrialEvent.m @@ -0,0 +1,19 @@ +%{ +# +-> EXP2.BehaviorTrial +-> EXP2.TrialEventType +trial_event_time : decimal(8,4) # (s) from trial start +--- +duration : decimal(8,4) # (s) +%} + + +classdef BehaviorTrialEvent < dj.Part + properties(SetAccess=protected) + master=EXP2.BehaviorTrial + end + methods(Access=protected) + function makeTuples(self, key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/EarlyLick.m b/DataJoint/+EXP2/EarlyLick.m new file mode 100644 index 0000000..ea558e8 --- /dev/null +++ b/DataJoint/+EXP2/EarlyLick.m @@ -0,0 +1,16 @@ +%{ +# +early_lick : varchar(32) # +--- +early_lick_description : varchar(4000) # +%} + + +classdef EarlyLick < dj.Lookup + properties + contents = { + 'early' 'early lick during sample and/or delay' + 'no early' '' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/EpochName.m b/DataJoint/+EXP2/EpochName.m new file mode 100644 index 0000000..8891117 --- /dev/null +++ b/DataJoint/+EXP2/EpochName.m @@ -0,0 +1,17 @@ +%{ +# +trial_epoch_name : varchar(400) # +--- +trial_epoch_name_name_description=null : varchar(4000) # +%} + + +classdef EpochName < dj.Lookup + properties + contents = { + 'delay' '' + 'response' '' + 'delay and response' '' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/EpochName2.m b/DataJoint/+EXP2/EpochName2.m new file mode 100644 index 0000000..3bda8db --- /dev/null +++ b/DataJoint/+EXP2/EpochName2.m @@ -0,0 +1,18 @@ +%{ +# +trial_epoch_name : varchar(400) # +--- +trial_epoch_name_name_description=null : varchar(4000) # +%} + + +classdef EpochName2 < dj.Lookup + properties + contents = { + 'sample' '' + 'delay' '' + 'response' '' + 'all' '' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/Jobs.m b/DataJoint/+EXP2/Jobs.m new file mode 100644 index 0000000..e0c04ff --- /dev/null +++ b/DataJoint/+EXP2/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +EXP2 +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+EXP2/Outcome.m b/DataJoint/+EXP2/Outcome.m new file mode 100644 index 0000000..01e6f36 --- /dev/null +++ b/DataJoint/+EXP2/Outcome.m @@ -0,0 +1,15 @@ +%{ +# +outcome : varchar(32) # +%} + + +classdef Outcome < dj.Lookup + properties + contents = { + 'hit' + 'miss' + 'ignore' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/RewardSizeType.m b/DataJoint/+EXP2/RewardSizeType.m new file mode 100644 index 0000000..59836b8 --- /dev/null +++ b/DataJoint/+EXP2/RewardSizeType.m @@ -0,0 +1,15 @@ +%{ +# +reward_size_type : varchar(32) # +%} + + +classdef RewardSizeType < dj.Lookup + properties + contents = { + 'regular' + 'omission' + 'large' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/Session.m b/DataJoint/+EXP2/Session.m new file mode 100644 index 0000000..0263e81 --- /dev/null +++ b/DataJoint/+EXP2/Session.m @@ -0,0 +1,15 @@ +%{ +# +-> LAB.Subject +session : smallint # session number +--- +session_date : date # +-> LAB.Person +-> LAB.Rig +%} + + +classdef Session < dj.Manual + methods(Access=protected) + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionDirectory.m b/DataJoint/+EXP2/SessionDirectory.m new file mode 100644 index 0000000..08fd1ca --- /dev/null +++ b/DataJoint/+EXP2/SessionDirectory.m @@ -0,0 +1,15 @@ +%{ +# Session directory - only updated in case there are multiple sessions with the same date +-> EXP2.Session +--- +local_path_orignal_session :varchar(5000) # path to the local directory with relevant files +%} + + +classdef SessionDirectory < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionEpoch.m b/DataJoint/+EXP2/SessionEpoch.m new file mode 100644 index 0000000..5fb2e97 --- /dev/null +++ b/DataJoint/+EXP2/SessionEpoch.m @@ -0,0 +1,217 @@ +%{ +# Session epoch time +-> EXP2.Session +-> EXP2.SessionEpochType +session_epoch_number : int # session epoch number +--- +session_epoch_start_time : double # (s) session epoch start time relative to the beginning of the session +session_epoch_end_time : double # (s) session epoch start time relative to the beginning of the session +flag_photostim_epoch : double # 1 if this epoch has photostimulation, 0 otherwise + +%} + + +classdef SessionEpoch < dj.Imported + properties + keySource = EXP2.Session; + end + methods(Access=protected) + function makeTuples(self, key) + + + local_path_orignal_session = fetchn(EXP2.SessionDirectory & key,'local_path_orignal_session'); + if isempty(local_path_orignal_session) + dir_data = fetch1(IMG.Parameters & 'parameter_name="dir_raw_data_scan_image"','parameter_value'); + temp = dir(dir_data); %gets the names of all files and nested directories in this folder + subDirNames = {temp([temp.isdir]).name}; %gets only the names of all files + subDirNames = subDirNames(3:end); + + subDirNames = subDirNames{contains(subDirNames,num2str(key.subject_id))}; + dir_data1 = [dir_data subDirNames '\']; + + + + currentSessionDate = fetch1(EXP2.Session & key,'session_date'); + currentSessionDate = char(datetime(currentSessionDate,'Format','yyyyMMdd','InputFormat','yyyy-MM-dd')); + + dir_data2 = [dir_data1 currentSessionDate]; + else + dir_data2 = local_path_orignal_session{1}; + end + temp = dir(dir_data2); %gets the names of all files and nested directories in this folder + subDirNames = {temp([temp.isdir]).name}; %gets only the names of all files + subDirNames = subDirNames(3:end); + + k=key; + + + session_epoch_types = fetchn(EXP2.SessionEpochType,'session_epoch_type'); + + session_start_time = 0; + session_start_frame = 0; + session_frames_timestamps =[]; + for jDir = 1:1:numel (subDirNames) + if sum(contains(session_epoch_types,subDirNames{jDir}(2:end)))>0 + k.session_epoch_type = subDirNames{jDir}(2:end); + else + continue + end + + + dir_data3 = [dir_data2 '\' subDirNames{jDir} '\']; + + k.session_epoch_number = jDir; + k2=k; + k3=k; + + allFiles = dir(dir_data3); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + + %initialzing + frames_file_timestamps=cell(numel(allFileNames),1); + parfor ifile=1:1:numel(allFileNames) + [header]=scanimage.util.opentif([dir_data3,allFileNames{ifile}]); + frames_file_timestamps{ifile} = header.frameTimestamps_sec; + end + all_frames_timestamps=cell2mat(frames_file_timestamps'); + + %checking for the number of planes + [header]=scanimage.util.opentif([dir_data3,allFileNames{1}]); + num_planes = header.SI.hFastZ.numFramesPerVolume; %number of planes + if isempty(num_planes) %debug, not sure why this is happening + num_planes=1; + end + + % in case of multiplane imaging we take only the first frame of each volume as the timestamp. Not all frames within this volume will have the "same" timestamp + frames_timestamps = all_frames_timestamps(1:num_planes:end); + +% load([dir_data2 '_registered\suite2p\plane0\Fall.mat'],'ops'); % we take the first plane in suite2p to check how many 'volumetric frames' are there +% number_of_frames_in_suite2p = ops.frames_per_folder(jDir) -1; % we discard the last 'volumetric frame' to ensture that all planes have the same number of frames +% frames_timestamps = frames_timestamps(1:1:number_of_frames_in_suite2p); + + session_frames_timestamps = [session_frames_timestamps, frames_timestamps+ session_start_time]; + + + %% POPULATE EXP2.SessionEpoch + if contains(subDirNames{jDir},'photo') + k2.flag_photostim_epoch = 1; + else + k2.flag_photostim_epoch = 0; + end + + k2.session_epoch_start_time = frames_timestamps(1) ; + k2.session_epoch_end_time = frames_timestamps(end); + + insert(EXP2.SessionEpoch, k2 ); + session_start_time = k2.session_epoch_end_time + 100; + + %% Populate FrameTimeFiles + key_file=k; + key_file=repmat(key_file,1,numel(allFileNames)); + frame_counter=1; + for ifile=1:1:numel(allFileNames) + key_file(ifile).session_epoch_file_num = ifile; + key_file(ifile).session_epoch_file_start_frame = frame_counter; + key_file(ifile).session_epoch_file_end_frame = frame_counter + numel(frames_file_timestamps{ifile})/num_planes -1; + frame_counter = frame_counter + numel(frames_file_timestamps{ifile})/num_planes; + end + % frame_counter=frame_counter-1; + + insert(IMG.FrameStartFile, key_file); + + + %% Reading trials and files start times from the mesoscope + timeline_file = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + idx_timeline_file = contains(timeline_file,'Timeline'); + if sum(idx_timeline_file)>0 + timeline_file_name =timeline_file{idx_timeline_file}; + else + timeline_file_name=[]; + end + if ~isempty(timeline_file_name) && contains(k2.session_epoch_type,'behav') + Timeline = load ([dir_data3 timeline_file_name]); + Timeline=Timeline.Timeline.data; + timeline_sampling_rate = 5000; + [~,idx_frames_detected]=findpeaks(diff([0;Timeline(:,2)]),'MinPeakHeight',1); % getting the beginning of each frame aquisition + + if numel(idx_frames_detected)~= numel(all_frames_timestamps) + mismatch_in_frames =numel(idx_frames_detected)-numel(all_frames_timestamps); + tf=idx_frames_detected/timeline_sampling_rate; + if numel(tf)>all_frames_timestamps + tf=tf(1:1:numel(all_frames_timestamps)); + max_offset_ms = max(abs(diff([tf-tf(1)]'-all_frames_timestamps))); + end + if mismatch_in_frames<=3 && max_offset_ms<5/1000 %% DEBUG why 1 and not 2 extra frames. 1 extra frame detected happens if SI before the frame finished. In this case, the missed frame starts but because it shorter than the other frames it is not saved by SI, but its on and off (rise/fall) will be detected + idx_frames_detected=idx_frames_detected(1:1:numel(all_frames_timestamps)); + else + error('Mismatch in number of frames detected on the mesoscope'); + end + end + % + + [~,temp_idx_trials]=findpeaks(diff([0;Timeline(:,3)]),'MinPeakHeight',3); % getting the beginning of each trial aquisition (the time of the bitcode onset) + + idx_trials = temp_idx_trials([inf;diff(temp_idx_trials)]>timeline_sampling_rate*2); + + bitcodestart_t =fetchn(EXP2.BehaviorTrialEvent & 'trial_event_type="bitcodestart"' & k2,'trial_event_time', 'ORDER BY trial'); + + if numel(idx_trials)~= numel(bitcodestart_t) + error('Mismatch in number of trial detected on the mesoscope'); + % idx_trials = idx_trials(1:numel(bitcodestart_t)); % in case of mismatch + end + % hold on; + % % plot(Timeline(:,3)) + % plot(diff([0;Timeline(:,3)])) + % plot(idx_trials,5,'*') + closest_frame=[]; + for i_tr = 1:1:numel(idx_trials) + idx_begin_trial = idx_trials(i_tr) - bitcodestart_t(i_tr)*timeline_sampling_rate; + [~,closest_frame(i_tr)] = min(abs(idx_frames_detected-idx_begin_trial)); + end + closest_frame = floor(closest_frame/num_planes); + key_frametrial=k; + key_frametrial=repmat(key_frametrial,1,numel(idx_trials)); + for i_tr = 1:1:numel(idx_trials) + key_frametrial(i_tr).trial =i_tr; + key_frametrial(i_tr).session_epoch_trial_bitcode = NaN; + key_frametrial(i_tr).session_epoch_trial_start_frame = closest_frame(i_tr); + if i_tr EXP2.SessionEpoch +--- +local_path_session :varchar(5000) # path to the local directory with relevant files +local_path_session_registered :varchar(5000) # path to the local directory with relevant files after registration +local_path_session_epoch :varchar(5000) # path to the local directory with relevant files +local_path_session_epoch_registered :varchar(5000) # path to the local directory with relevant files after registration + + +%} + + +classdef SessionEpochDirectory < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionEpochSomatotopy.m b/DataJoint/+EXP2/SessionEpochSomatotopy.m new file mode 100644 index 0000000..fcc2681 --- /dev/null +++ b/DataJoint/+EXP2/SessionEpochSomatotopy.m @@ -0,0 +1,21 @@ +%{ +# Session epoch time +-> EXP2.SessionEpoch +--- +sensory_stimulation_area : varchar(2000) # are that was touched during somatotopic mapping +%} + + +classdef SessionEpochSomatotopy < dj.Imported + properties + keySource = EXP2.Session; + end + methods(Access=protected) + function makeTuples(self, key) + + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionEpochType.m b/DataJoint/+EXP2/SessionEpochType.m new file mode 100644 index 0000000..42d39ea --- /dev/null +++ b/DataJoint/+EXP2/SessionEpochType.m @@ -0,0 +1,19 @@ +%{ +# +session_epoch_type : varchar(200) # +---- +session_epoch_type_description : varchar(2000) # + +%} + + +classdef SessionEpochType < dj.Lookup + properties + contents = { + 'behav_only' 'behavior only' + 'behav_photo' 'behavior with photostimulation' + 'spont_only' 'spontaneous activity only' + 'spont_photo' 'spontaneous activity with photostimulation' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionID.m b/DataJoint/+EXP2/SessionID.m new file mode 100644 index 0000000..c1e48a8 --- /dev/null +++ b/DataJoint/+EXP2/SessionID.m @@ -0,0 +1,20 @@ +%{ +# +-> EXP2.Session +--- +session_uid : int # unique across sessions/animals +%} + + +classdef SessionID < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + session_uid=max(fetchn(EXP2.SessionID,'session_uid')); + if isempty(session_uid) + session_uid=0; + end + key.session_uid=session_uid+1; + self.insert(key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionTask.m b/DataJoint/+EXP2/SessionTask.m new file mode 100644 index 0000000..fbf372f --- /dev/null +++ b/DataJoint/+EXP2/SessionTask.m @@ -0,0 +1,9 @@ +%{ +# +-> EXP2.Session +-> EXP2.TaskProtocol +%} + + +classdef SessionTask < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionTraining.m b/DataJoint/+EXP2/SessionTraining.m new file mode 100644 index 0000000..88fc917 --- /dev/null +++ b/DataJoint/+EXP2/SessionTraining.m @@ -0,0 +1,9 @@ +%{ +# +-> EXP2.Session +-> EXP2.TrainingType +%} + + +classdef SessionTraining < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+EXP2/SessionTrial.m b/DataJoint/+EXP2/SessionTrial.m new file mode 100644 index 0000000..03768d3 --- /dev/null +++ b/DataJoint/+EXP2/SessionTrial.m @@ -0,0 +1,16 @@ +%{ +# +-> EXP2.Session +trial : smallint # +--- +trial_uid : int # unique across sessions/animals +start_time : decimal(8,4) # (s) % relative to session beginning +%} + + +classdef SessionTrial < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+EXP2/Task.m b/DataJoint/+EXP2/Task.m new file mode 100644 index 0000000..a2c6d89 --- /dev/null +++ b/DataJoint/+EXP2/Task.m @@ -0,0 +1,17 @@ +%{ +# Type of tasks +task : varchar(12) # task type +--- +task_description : varchar(4000) # +%} + + +classdef Task < dj.Lookup + properties + contents = { + 'sound' 'sound task (2AFC)' + 'lick2D' 'lick upon presentation of a lickport in 2D' + 'waterCue' 'lick the lickport that was cued with water before (2AFC)' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TaskProtocol.m b/DataJoint/+EXP2/TaskProtocol.m new file mode 100644 index 0000000..0c7a470 --- /dev/null +++ b/DataJoint/+EXP2/TaskProtocol.m @@ -0,0 +1,17 @@ +%{ +# SessionType +-> EXP2.Task +task_protocol : tinyint # task ptotcol +----- +task_protocol_description : varchar(4000) # +%} + +classdef TaskProtocol < dj.Lookup + properties + contents = { + 'sound' 1 '3 Khz - lick right; 12kHz - lick left' + 'lick2D' 2 'lick upon presentation of the lickport that can appear at different locations on the 2D X-Z plane around mouse face ' + 'waterCue' 3 '2 lick ports appear, one of them with a small drop of water. They are withdrawn and then presented again after some delay. The mouse has to choose the lickport that was cued with water in the first lickport-presentation, in order to recieve another water reward' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TrainingType.m b/DataJoint/+EXP2/TrainingType.m new file mode 100644 index 0000000..2a3a870 --- /dev/null +++ b/DataJoint/+EXP2/TrainingType.m @@ -0,0 +1,17 @@ +%{ +# Mouse training +training_type : varchar(100) # mouse training +--- +training_type_description : varchar(2000) # + +%} + + +classdef TrainingType < dj.Lookup + properties + contents = { + 'regular sound' 'regular training on the sound task' + 'no training' ''} + + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TrialEventType.m b/DataJoint/+EXP2/TrialEventType.m new file mode 100644 index 0000000..56a068a --- /dev/null +++ b/DataJoint/+EXP2/TrialEventType.m @@ -0,0 +1,22 @@ +%{ +# +trial_event_type : varchar(24) # +%} + + +classdef TrialEventType < dj.Lookup + properties + contents = { + 'delay' + 'go' + 'trigger imaging' + 'sound sample start' + 'sound sample end' + 'sample' + 'firstlick' + 'reward' + 'bitcodestart' + 'trialend' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TrialInstruction.m b/DataJoint/+EXP2/TrialInstruction.m new file mode 100644 index 0000000..d7de792 --- /dev/null +++ b/DataJoint/+EXP2/TrialInstruction.m @@ -0,0 +1,16 @@ +%{ +# Instruction to mouse +trial_instruction : varchar(8) # +%} + + +classdef TrialInstruction < dj.Lookup + properties + contents = { + 'left' + 'right' + 'go' + 'no go' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TrialLickBlock.m b/DataJoint/+EXP2/TrialLickBlock.m new file mode 100644 index 0000000..e924ad0 --- /dev/null +++ b/DataJoint/+EXP2/TrialLickBlock.m @@ -0,0 +1,24 @@ +%{ +-> EXP2.SessionTrial +----- +num_trials_in_block : smallint # if the same trial is repeated, for how many trials it is repeated +current_trial_num_in_block : smallint # position of trial in a block +num_licks_for_reward : smallint # how many licks are needed to trigger a water release. The mouse can collect the water drop on num_licks_for_reward +1 lick +roll_deg : double # roll angle of the lickport positions in deg.Positve roll means the mouse is turning its head towards its right shoulder +flag_auto_water_curret_trial=null : smallint # 1 if this this an auto-water trial, in which a drop is presented before the tongue contact; 0 otherwise +flag_auto_water_settings=null : smallint # 1 if the settings indicate that the behavior is on auto-water; 0 otherwise +flag_auto_water_first_trial_in_block_settings =null : smallint # 1 if the settings indicate that the first trial in the block is an auto-water trial; 0 otherwise + +%} + +classdef TrialLickBlock < dj.Imported + + methods(Access=protected) + + function makeTuples(self, key) + %!!! compute missing fields for key here + self.insert(key) + end + end + +end diff --git a/DataJoint/+EXP2/TrialLickPort.m b/DataJoint/+EXP2/TrialLickPort.m new file mode 100644 index 0000000..bbd9a94 --- /dev/null +++ b/DataJoint/+EXP2/TrialLickPort.m @@ -0,0 +1,26 @@ +%{ +-> EXP2.SessionTrial +----- +lickport_pos_number : int # +lickport_pos_x=null : double # in zabor motor units +lickport_pos_y=null : double # in zabor motor units +lickport_pos_z=null : double # in zabor motor units +lickport_pos_x_bins=null : blob # in zabor motor units +lickport_pos_y_bins=null : blob # in zabor motor units +lickport_pos_z_bins=null : blob # in zabor motor units + + + +%} + +classdef TrialLickPort < dj.Imported + + methods(Access=protected) + + function makeTuples(self, key) + %!!! compute missing fields for key here + self.insert(key) + end + end + +end diff --git a/DataJoint/+EXP2/TrialName.m b/DataJoint/+EXP2/TrialName.m new file mode 100644 index 0000000..3f94a39 --- /dev/null +++ b/DataJoint/+EXP2/TrialName.m @@ -0,0 +1,17 @@ +%{ +-> EXP2.SessionTrial +-> EXP2.TrialNameType +----- +%} + +classdef TrialName < dj.Imported + + methods(Access=protected) + + function makeTuples(self, key) + %!!! compute missing fields for key here + self.insert(key) + end + end + +end diff --git a/DataJoint/+EXP2/TrialNameType.m b/DataJoint/+EXP2/TrialNameType.m new file mode 100644 index 0000000..857a40b --- /dev/null +++ b/DataJoint/+EXP2/TrialNameType.m @@ -0,0 +1,19 @@ +%{ +# +-> EXP2.Task +trial_type_name : varchar(200) # trial-type name +--- +trial_type_name_description=null : varchar(4000) # +%} + + +classdef TrialNameType < dj.Lookup + properties + contents = { + 'sound' 'l' '' + 'sound' 'r' '' + 'waterCue' 'l' '' + 'waterCue' 'r' '' + } + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/TrialRewardSize.m b/DataJoint/+EXP2/TrialRewardSize.m new file mode 100644 index 0000000..1fc5b54 --- /dev/null +++ b/DataJoint/+EXP2/TrialRewardSize.m @@ -0,0 +1,15 @@ +%{ +# +-> EXP2.SessionTrial +--- +-> EXP2.RewardSizeType +reward_size_valve_time : double # reward size valve time (s) +%} + + +classdef TrialRewardSize < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+EXP2/getSchema.m b/DataJoint/+EXP2/getSchema.m new file mode 100644 index 0000000..dc7a911 --- /dev/null +++ b/DataJoint/+EXP2/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'EXP2', 'arseny_s1alm_experiment2'); +end +obj = schemaObject; +end diff --git a/DataJoint/+IMG/Bregma.m b/DataJoint/+IMG/Bregma.m new file mode 100644 index 0000000..3e2c84e --- /dev/null +++ b/DataJoint/+IMG/Bregma.m @@ -0,0 +1,40 @@ +%{ +# Field of View +-> EXP2.Session +--- +bregma_x_cm : double # FOV anterior-posterior edge relative to bregma +bregma_y_cm : double # FOV medial-lateral edge relative to bregma +%} + + +classdef Bregma < dj.Lookup + properties + contents = { + 464724 1 2.95 0.25 + 464724 2 3.10 0.25 + 464724 3 3.10 0.25 + 464724 4 2.75 0.25 + 464724 5 2.95 0.25 + 464724 6 3.10 0.25 + 464724 7 2.65 0.5 + 464724 8 2.75 0.25 + 464724 9 2.85 0.45 + + + 464725 1 3.1 0.25 + 464725 2 3.1 0.25 + 464725 3 3.1 0.25 + 464725 4 3.1 0.25 + 464725 5 3.1 0.25 + 464725 6 3.1 0.25 + 464725 7 3.1 0.25 + 464725 8 3.1 0.25 + 464725 9 3.1 0.25 + 464725 10 3.1 0.35 + 464725 11 3.2 0.25 + 464725 12 2.9 0.25 + 464725 13 3.1 0.25 + + } + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ExcludeROI.m b/DataJoint/+IMG/ExcludeROI.m new file mode 100644 index 0000000..41f9b42 --- /dev/null +++ b/DataJoint/+IMG/ExcludeROI.m @@ -0,0 +1,30 @@ +%{ +# Exlusion of ROIs based on baseline flourescence +-> IMG.ROI +--- +%} + +classdef ExcludeROI < dj.Computed + properties + % keySource = EXP2.Session & EPHYS.TrialSpikes + keySource = (EXP2.Session & IMG.ROI); + + end + methods(Access=protected) + function makeTuples(self, key) + minimal_fl_median = 10; + + key=fetch(IMG.FOV & key); + + roi_list = fetchn(IMG.ROI & key, 'roi_number','ORDER BY roi_number'); + for iROI = 1:numel(roi_list) + key.roi_number = roi_list (iROI); + baseline_fl_median=fetchn(IMG.ROI & key ,'baseline_fl_median'); + if baseline_fl_median < minimal_fl_median + insert(self,key); + end + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ExcludeROImultiSession.m b/DataJoint/+IMG/ExcludeROImultiSession.m new file mode 100644 index 0000000..be63974 --- /dev/null +++ b/DataJoint/+IMG/ExcludeROImultiSession.m @@ -0,0 +1,45 @@ +%{ +# Exlusion of ROIs based on baseline flourescence +-> IMG.FOVmultiSessions +-> IMG.ROI +--- +%} + +classdef ExcludeROImultiSession < dj.Computed + properties + % keySource = EXP.Session & EPHYS.TrialSpikes + keySource = (IMG.FOVmultiSessions); + + end + methods(Access=protected) + function makeTuples(self, key) + + k=fetch(IMG.FOVmultiSessions & key,'*'); + k=rmfield(k,'session'); + k=fetch(IMG.FOVmultiSessions & k,'*'); + + + + + roi_union=[]; + for i_s =1:1:numel(k) + kkk=k(i_s); + roi_number_list{i_s} = fetchn(IMG.ExcludeROI & kkk, 'roi_number', 'ORDER BY roi_number'); + if i_s==1 + roi_union = roi_number_list{i_s}; + else + roi_union=union(roi_union, roi_number_list{i_s}); + end + end + + k_insert=key; + k_insert= repmat(k_insert,numel(roi_union),1); + + for i_roi=1:1:numel(roi_union) + k_insert(i_roi).roi_number = roi_union(i_roi); + end + insert(self,k_insert); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOV.m b/DataJoint/+IMG/FOV.m new file mode 100644 index 0000000..bd20eca --- /dev/null +++ b/DataJoint/+IMG/FOV.m @@ -0,0 +1,172 @@ +%{ +# Field of View +-> EXP2.Session +fov_num : int # field of view number (restarts for every session) +--- +fov_name : varchar(200) # field of view name +fov_x_size : double # (pixels) +fov_y_size : double # (pixels) +imaging_frame_rate : double # (Hz) Should be removed in future versions. The frame rate is saved in FOV epoch +%} + + +classdef FOV < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + dir_data = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_epoch'); + dir_data = dir_data{1}; + allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + + try + S2P=load([dir_data2 '\suite2p\plane' num2str(0) '\Fall.mat'],'ops'); + catch + disp('Suite2p output file not found') + return + end + + [header]=scanimage.util.opentif([dir_data,allFileNames{1}]); + % IMG.FOV + k1=key; + k1.fov_name='fov'; + k1.imaging_frame_rate = 0; %header.SI.hRoiManager.scanFrameRate ; Should be removed in future versions. The frame rate is saved in FOV epoch + + + num_planes = header.SI.hFastZ.numFramesPerVolume; %number of planes, for each FOV. + + + if isfield(S2P.ops,'nrois') %mesoscope + flag_mesoscope=1; + try + kmeso.subject_id = key.subject_id; + kmeso.session = key.session; + insert(IMG.Mesoscope, kmeso); + end + FOVnums=S2P.ops.nrois; + else + flag_mesoscope=0; + FOVnums=1; + end + + %finds the order in which the planes are numbering in suite2p + % Suite2p first saves the top(?) plane for FOV1, FOV2, etc... Then it saves the next (middle?) plane for FOV1, FOV2, etc + %---------------------------------------------------------- + % So if there were 2 FOV, each imaged at 3 depth then it will save into directory as: + % plane=0 FOV1, depth 1 + % plane1= FOV2, depth 1 + % plane2 = FOV1 depth 2 + % plane 3 = FOV2 depth 2 + % plane4 = FOV1 depth 3 + % plane 5 = FOV2 depth 3 + % FOVs in Suite2P are referred to as nrois + counter =0; + for i_p=1:1:num_planes %loops across planes we loop loop first across planes, because of the numbering in suite2p mesoscope output + for i_f=1:1:FOVnums %loops across planes + fov_by_plane_numbering_in_S2P(i_f,i_p) = counter; + counter = counter+1; + end + end + + for i_f=1:1:FOVnums %loops across planes + counter_new_fov = 1; + for i_p=1:1:num_planes %loops across planes we loop loop first across planes, because of the numbering in suite2p mesoscope output + k1.fov_num=i_f; + try + %count starts at plane0, and accumulates across FOVs + + dir_suite2p_plane = [dir_data2 '\suite2p\plane' num2str(fov_by_plane_numbering_in_S2P(i_f,i_p)) '\']; + S2P=load([dir_suite2p_plane 'Fall.mat'],'ops'); + catch + disp('Suite2p output file not found') + return + end + + % IMG.FOV + if counter_new_fov==1 % only the first plane in the fov gets saved + k1.fov_x_size = size(S2P.ops.meanImg,2); + k1.fov_y_size = size(S2P.ops.meanImg,1); + insert(IMG.FOV, k1); + end + counter_new_fov=0; + + % IMG.Plane + k2=key; + k2.fov_num=i_f; + k2.plane_num=i_p; + k2.channel_num=1; + + if sum(size(S2P.ops.meanImg)>512)>0 + imaged_indexed.num_rows =size(S2P.ops.meanImg,1); + imaged_indexed.num_columns = size(S2P.ops.meanImg,2); + imaged_indexed.values = S2P.ops.meanImg(:); + + k2.mean_img=imaged_indexed; + imaged_indexed.values=S2P.ops.meanImgE(:); + k2.mean_img_enhanced=imaged_indexed; + % to rebuild the image from values and indices + % M =zeros([num_rows,num_columns]); + % [R C] = find(M ); + % M(sub2ind([num_rows,num_columns],R,C))=values; + + else + k2.mean_img=S2P.ops.meanImg; + k2.mean_img_enhanced=S2P.ops.meanImgE; + end + insert(IMG.Plane, k2); + + + % IMG.PlaneCoordinates + k3=key; + k3.fov_num=i_f; + k3.plane_num=i_p; + k3.channel_num=1; + k3.flag_mesoscope=flag_mesoscope; + % k3.imaging_frame_rate_plane = header.SI.hRoiManager.scanFrameRate ; + % k3.imaging_frame_rate_volume = header.SI.hRoiManager.scanVolumeRate ; + % k3.zoom = header.SI.hRoiManager.scanZoomFactor ; + % k3.fov_x_size = size(S2P.ops.meanImg,2); + % k3.fov_y_size = size(S2P.ops.meanImg,1); + % k3.imaging_fov_deg = header.SI.hRoiManager.imagingFovDeg ; + % k3.imaging_fov_um = header.SI.hRoiManager.imagingFovUm ; + Zs = header.SI.hFastZ.userZs; + if flag_mesoscope==0 + Zs = Zs*(-1); %for some reason the Zs on Kayvon's rig are inverted. So the most negative z appears as the deepest. Here we invert it, so that positive numbers mean deeper. + + k3.x_pos_relative = 0; + k3.y_pos_relative = 0; + k3.z_pos_relative = Zs(i_p); + + elseif flag_mesoscope==1 + k3.x_pos_relative = S2P.ops.dx; + k3.y_pos_relative = S2P.ops.dy; + k3.z_pos_relative = Zs(i_p)-Zs(1); + end + insert(IMG.PlaneCoordinates, k3); + + + % IMG.PlaneDirectory + k4=key; + k4.fov_num=i_f; + k4.plane_num=i_p; + k4.channel_num=1; + k4.local_path_plane_registered = dir_suite2p_plane; + insert(IMG.PlaneDirectory, k4); + + % IMG.PlaneSuite2p + k4=key; + k4.fov_num=i_f; + k4.plane_num=i_p; + k4.channel_num=1; + k4.plane_num_in_suite2p = fov_by_plane_numbering_in_S2P(i_f,i_p); + k4.frames_per_folder = S2P.ops.frames_per_folder; + insert(IMG.PlaneSuite2p, k4); + + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOV0ld.m b/DataJoint/+IMG/FOV0ld.m new file mode 100644 index 0000000..c16be21 --- /dev/null +++ b/DataJoint/+IMG/FOV0ld.m @@ -0,0 +1,134 @@ +%{ +# Field of View +-> EXP2.Session +fov_num : int # field of view number (restarts for every session) +--- +fov_name : varchar(200) # field of view name +fov_x_size : double # (pixels) +fov_y_size : double # (pixels) +imaging_frame_rate : double # (Hz) Should be removed in future versions. The frame rate is saved in FOV epoch +%} + + +classdef FOV < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + dir_data = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_epoch'); + dir_data = dir_data{1}; + allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + + try + S2P=load([dir_data2 '\suite2p\plane' num2str(0) '\Fall.mat']); + catch + disp('Suite2p output file not found') + return + end + + [header]=scanimage.util.opentif([dir_data,allFileNames{1}]); + % IMG.FOV + k1=key; + k1.fov_name='fov'; + k1.imaging_frame_rate = 0; %header.SI.hRoiManager.scanFrameRate ; Should be removed in future versions. The frame rate is saved in FOV epoch + + + num_planes = header.SI.hFastZ.numFramesPerVolume; %number of planes, for each FOV. + + + if isfield(S2P.ops,'nrois') %mesoscope + flag_mesoscope=1; + FOVnums=S2P.ops.nrois; + + % Suite2p first saves the top(?) plane for FOV1, FOV2, etc... Then it saves the next (middle?) plane for FOV1, FOV2, etc + %---------------------------------------------------------- + % So if there were 2 FOV, each imaged at 3 depth then it will save into directory as: + % plane=0 FOV1, depth 1 + % plane1= FOV2, depth 1 + % plane2 = FOV1 depth 2 + % plane 3 = FOV2 depth 2 + % plane4 = FOV1 depth 3 + % plane 5 = FOV2 depth 3 + % FOVs in Suite2P are referred to as nrois + else + flag_mesoscope=0; + FOVnums=1; + end + + counter =0; + for i_p=1:1:num_planes %loops across planes we lop[ loop first across planes, because of the numbering in suite2p mesoscope output + for i_f=1:1:FOVnums %loops across planes + k1.fov_num=i_f; + try + %count starts at plane0, and accumulates across FOVs + dir_suite2p_plane = [dir_data2 '\suite2p\plane' num2str(counter) '\']; + S2P=load([dir_suite2p_plane 'Fall.mat']); + counter =counter+1; + catch + disp('Suite2p output file not found') + return + end + + % IMG.FOV + if i_p==1 + k1.fov_x_size = size(S2P.ops.meanImg,2); + k1.fov_y_size = size(S2P.ops.meanImg,1); + insert(IMG.FOV, k1); + end + + + % IMG.Plane + k2=key; + k2.fov_num=i_f; + k2.plane_num=i_p; + k2.channel_num=1; + k2.mean_img=S2P.ops.meanImg; + k2.mean_img_enhanced=S2P.ops.meanImgE; + insert(IMG.Plane, k2); + + + % IMG.PlaneCoordinates + k3=key; + k3.fov_num=i_f; + k3.plane_num=i_p; + k3.channel_num=1; + k3.flag_mesoscope=flag_mesoscope; + % k3.imaging_frame_rate_plane = header.SI.hRoiManager.scanFrameRate ; + % k3.imaging_frame_rate_volume = header.SI.hRoiManager.scanVolumeRate ; + % k3.zoom = header.SI.hRoiManager.scanZoomFactor ; + % k3.fov_x_size = size(S2P.ops.meanImg,2); + % k3.fov_y_size = size(S2P.ops.meanImg,1); + % k3.imaging_fov_deg = header.SI.hRoiManager.imagingFovDeg ; + % k3.imaging_fov_um = header.SI.hRoiManager.imagingFovUm ; + Zs = header.SI.hFastZ.userZs; + if flag_mesoscope==0 + Zs = Zs*(-1); %for some reason the Zs on Kayvon's rig are inverted. So the most negative z appears as the deepest. Here we invert it, so that positive numbers mean deeper. + + k3.x_pos_relative = 0; + k3.y_pos_relative = 0; + k3.z_pos_relative = Zs(i_p); + + elseif flag_mesoscope==1 + k3.x_pos_relative = S2P.ops.dx; + k3.y_pos_relative = S2P.ops.dy; + k3.z_pos_relative = Zs(i_p)-Zs(1); + end + insert(IMG.PlaneCoordinates, k3); + + + % IMG.PlaneDirectory + k4=key; + k4.fov_num=i_f; + k4.plane_num=i_p; + k4.channel_num=1; + k4.local_path_plane_registered = dir_suite2p_plane; + insert(IMG.PlaneDirectory, k4); + + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVEpoch.m b/DataJoint/+IMG/FOVEpoch.m new file mode 100644 index 0000000..941fe3c --- /dev/null +++ b/DataJoint/+IMG/FOVEpoch.m @@ -0,0 +1,45 @@ +%{ +# Field of View parameters for each epoch. We save it separately for each epoch because the frame rate can change for every epoch. +-> EXP2.SessionEpoch +--- +imaging_frame_rate : double # from scanimage (Hz). Imaging rate of a volume (or of a single plane, if there is only one plane) +imaging_frame_rate_plane : double # from scanimage (Hz). Imaging rate of a single plane +imaging_frame_rate_volume : double # from scanimage (Hz). Imaging rate of a volume (multiple planes, or FOVs in case of mesoscope). In case there is only a single plane, than the imaging_frame_rate_volume is the same as the imaging_frame_rate_plane +zoom : double # from scanimage Should be moved to a separate table (under FOV, not under Epochs in future versions +imaging_fov_deg = null : blob # from scanimage Should be moved to a separate table (under FOV, not under Epochs in future versions +imaging_fov_um = null : blob # from scanimage Should be moved to a separate table (under FOV, not under Epochs in future versions +%} + + +classdef FOVEpoch < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + dir_data = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_epoch'); + + dir_data = dir_data{1}; + + + allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + if isempty(allFileNames) + disp('No tiff files found') + return + end + [header]=scanimage.util.opentif([dir_data,allFileNames{1}]); + k1=key; + + k1.imaging_frame_rate = header.SI.hRoiManager.scanVolumeRate ; + k1.imaging_frame_rate_plane = header.SI.hRoiManager.scanFrameRate ; + k1.imaging_frame_rate_volume = header.SI.hRoiManager.scanVolumeRate ; + + k1.zoom = header.SI.hRoiManager.scanZoomFactor ; + k1.imaging_fov_deg = header.SI.hRoiManager.imagingFovDeg ; + k1.imaging_fov_um = header.SI.hRoiManager.imagingFovUm ; + + insert(self, k1); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVMapActivity.m b/DataJoint/+IMG/FOVMapActivity.m new file mode 100644 index 0000000..a77b0aa --- /dev/null +++ b/DataJoint/+IMG/FOVMapActivity.m @@ -0,0 +1,90 @@ +%{ +# Field of View +-> IMG.FOV +-> EXP2.Outcome +-> EXP2.TrialNameType +-> EXP2.EpochName2 +--- +map_activity_f : longblob # trial-averaged map of activity, flourescence for different trial epochs +map_activity_dff : longblob # trial-averaged map of activity df/f - relative to trial baseline, flourescence for different trial epochs + +%} + + +classdef FOVMapActivity < dj.Imported + properties + keySource = IMG.FOVRegisteredMovie; + end + methods(Access=protected) + function makeTuples(self, key) + smoothing_3D_size=5; + smoothing_2D_size=3; % the actual smoothing window is (smoothing_2D_size*2 +1) + z_score_threshold=1; %zero pixels with absolute z-score below 0.5, in the deltaf map + + + psth_timestamps = fetch1(IMG.FOVRegisteredMovie & key, 'psth_timestamps'); + typical_time_sample_start = fetch1(IMG.FOVRegisteredMovie & key, 'typical_time_sample_start'); + typical_time_sample_end = fetch1(IMG.FOVRegisteredMovie & key, 'typical_time_sample_end'); + + temp = fetchn(IMG.FOVRegisteredMovieFrame & key, 'fov_movie_trial_avg', 'ORDER BY movie_frame_number'); + M_avg=zeros([size(temp{1}),size(temp,1)]); + for i_fr=1:1:size(temp,1) + M_avg(:,:,i_fr)=temp{i_fr}; + end + + + %baseline flourescence for each pixel (based on 1 sec of the presample period averaged over all trial-types/conditions) + frame_idx = psth_timestamps>=psth_timestamps(1) & psth_timestamps<(psth_timestamps(1)+1); + +% b=M_avg(:,:,frame_idx); +% % smoothing_3D_size=5; +% % b = smooth3(b,'gaussian',smoothing_3D_size); %3D smoothing in x-y-z +% +% +% baselineF_2D=median(b,3); + baselineF_2D = fetch1(IMG.FOVMapBaselineF & key, 'map_baseline_f'); + baselineF_2D_smoothed = smooth2a(baselineF_2D,smoothing_2D_size,smoothing_2D_size); + blank_idx=zscore(baselineF_2D_smoothed(:))<-1; +% z=zscore(b(:)); +% b(z<-1)=1000; + + % average over all trial epochs + key.trial_epoch_name = 'all'; + frame_idx = 1:1:numel(psth_timestamps); + map = M_avg(:,:,frame_idx); + [map_f_smoothed, map_dff_smoothed] = fn_compute_map_dff2 (map, smoothing_3D_size, baselineF_2D_smoothed, z_score_threshold, blank_idx); + key.map_activity_f = mean(map_f_smoothed,3); + key.map_activity_dff = mean(map_dff_smoothed,3); + insert(self,key); + + + % average over sample epoch + key.trial_epoch_name = 'sample'; + frame_idx = psth_timestamps>=typical_time_sample_start & psth_timestamps=typical_time_sample_end & psth_timestamps<0; + map = M_avg(:,:,frame_idx); + [map_f_smoothed, map_dff_smoothed] = fn_compute_map_dff2 (map, smoothing_3D_size, baselineF_2D_smoothed, z_score_threshold, blank_idx); + key.map_activity_f = mean(map_f_smoothed,3); + key.map_activity_dff = mean(map_dff_smoothed,3); + insert(self,key); + + % average over response epoch + key.trial_epoch_name = 'response'; + frame_idx = psth_timestamps>=0; + map = M_avg(:,:,frame_idx); + [map_f_smoothed, map_dff_smoothed] =fn_compute_map_dff2 (map, smoothing_3D_size, baselineF_2D_smoothed, z_score_threshold, blank_idx); + key.map_activity_f = mean(map_f_smoothed,3); + key.map_activity_dff = mean(map_dff_smoothed,3); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVMapActivity_temp.m b/DataJoint/+IMG/FOVMapActivity_temp.m new file mode 100644 index 0000000..f14cf00 --- /dev/null +++ b/DataJoint/+IMG/FOVMapActivity_temp.m @@ -0,0 +1,89 @@ +%{ +# Field of View +-> IMG.FOV +-> EXP.Outcome +-> EXP.TrialNameType +-> ANLI.EpochName2 +--- +map_activity_f : longblob # trial-averaged map of activity, flourescence for different trial epochs +map_activity_dff : longblob # trial-averaged map of activity df/f - relative to trial baseline, flourescence for different trial epochs + +%} + + +classdef FOVMapActivity < dj.Imported + properties + keySource = IMG.FOVMovie; + end + methods(Access=protected) + function makeTuples(self, key) + smoothing_3D_size=3; +% blank_percentile=10; % blanking dark spots in the video (for display in movies only, not for savign in DJ) + + psth_timestamps = fetch1(IMG.FOVMovie & key, 'psth_timestamps'); + typical_time_sample_start = fetch1(IMG.FOVMovie & key, 'typical_time_sample_start'); + typical_time_sample_end = fetch1(IMG.FOVMovie & key, 'typical_time_sample_end'); + + temp = fetchn(IMG.FOVMovieFrame & key, 'fov_movie_trial_avg', 'ORDER BY movie_frame_number'); + M_avg=zeros([size(temp{1}),size(temp,1)]); + for i_fr=1:1:size(temp,1) + M_avg(:,:,i_fr)=temp{i_fr}; + end + + + + %baseline flourescence for each pixel (based on 1 sec of the presample period) + frame_idx = psth_timestamps>=(typical_time_sample_start-1) & psth_timestamps=typical_time_sample_start & psth_timestamps=typical_time_sample_end & psth_timestamps<0; + map = M_avg(:,:,frame_idx); + map_rescaled = M_avg_rescaled(:,:,frame_idx); + map_dff = fn_compute_map_dff (map_rescaled, smoothing_3D_size, baselineF_2D_rescaled); + key.map_activity_f = mean(map,3); + key.map_activity_dff = mean(map_dff,3); + insert(self,key); + + % average over sample epoch + key.trial_epoch_name = 'response'; + frame_idx = psth_timestamps>=0; + map = M_avg(:,:,frame_idx); + map_rescaled = M_avg_rescaled(:,:,frame_idx); + map_dff = fn_compute_map_dff (map_rescaled, smoothing_3D_size, baselineF_2D_rescaled); + key.map_activity_f = mean(map,3); + key.map_activity_dff = mean(map_dff,3); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVMapBaselineF.m b/DataJoint/+IMG/FOVMapBaselineF.m new file mode 100644 index 0000000..c995183 --- /dev/null +++ b/DataJoint/+IMG/FOVMapBaselineF.m @@ -0,0 +1,37 @@ +%{ +# Field of View +-> IMG.FOV +--- +map_baseline_f : longblob # median activity of each pixel at presample period + +%} + + +classdef FOVMapBaselineF < dj.Imported + properties + keySource = IMG.FOV & IMG.FOVRegisteredMovie; + end + methods(Access=protected) + function makeTuples(self, key) + psth_timestamps = fetch1(IMG.FOVRegisteredMovie & key, 'psth_timestamps','ORDER BY outcome DESC LIMIT 1'); + frame_idx = psth_timestamps>=psth_timestamps(1) & psth_timestamps<(psth_timestamps(1)+1); + movie_frame_number=find(frame_idx); + counter=1; + for i_f=1:1:numel(movie_frame_number) + k.movie_frame_number = movie_frame_number(i_f); + temp = fetchn(IMG.FOVRegisteredMovieFrame & key & k, 'fov_movie_trial_avg'); + % M_avg=zeros([size(temp{1}),size(temp,1)]); + for i_fr=1:1:size(temp,1) + M_avg(:,:,counter)=temp{i_fr}; + counter=counter+1; + end + end + + + %baseline flourescence for each pixel (based on 1 sec of the presample period) + baselineF_2D=median(M_avg,3); + key.map_baseline_f =baselineF_2D; + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVMapSelectivity.m b/DataJoint/+IMG/FOVMapSelectivity.m new file mode 100644 index 0000000..879c6f5 --- /dev/null +++ b/DataJoint/+IMG/FOVMapSelectivity.m @@ -0,0 +1,37 @@ +%{ +# Field of View +-> IMG.FOV +-> EXP2.Outcome +-> EXP2.EpochName2 + +--- +map_selectivity_f : longblob # trial-averaged map of selectivity (R-L), flourescence for different trial epochs +map_selectivity_dff : longblob # median activity of each pixel at presample period + +%} + + +classdef FOVMapSelectivity < dj.Imported + properties + keySource = (IMG.FOV & IMG.FOVMapActivity) * EXP2.EpochName2 * (EXP2.Outcome & 'outcome="hit"'); + end + methods(Access=protected) + function makeTuples(self, key) + k=key; + + k.trial_type_name='l'; + f_L=fetch1(IMG.FOVMapActivity & k, 'map_activity_f'); + dff_L=fetch1(IMG.FOVMapActivity & k, 'map_activity_dff'); + + k.trial_type_name='r'; + f_R=fetch1(IMG.FOVMapActivity & k, 'map_activity_f'); + dff_R=fetch1(IMG.FOVMapActivity & k, 'map_activity_dff'); + + key.map_selectivity_f = f_R - f_L; + key.map_selectivity_dff = dff_R - dff_L; + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVRegisteredMovie.m b/DataJoint/+IMG/FOVRegisteredMovie.m new file mode 100644 index 0000000..b189804 --- /dev/null +++ b/DataJoint/+IMG/FOVRegisteredMovie.m @@ -0,0 +1,122 @@ +%{ +# Field of View +-> IMG.FOV +-> EXP2.Outcome +-> EXP2.TrialNameType +--- +typical_time_sample_start : double +typical_time_sample_end : double +psth_timestamps : blob +movie_frame_rate : double +%} + + +classdef FOVRegisteredMovie < dj.Imported + properties + keySource = (IMG.FOV & 'fov_name="fov2"') * (EXP2.TrialNameType & 'task="sound"') * EXP2.Outcome; + end + methods(Access=protected) + function makeTuples(self, key) + reg_tiff_dir = 'Z:\users\Arseny\Projects\Learning\imaging2p\Registered\AF09_anm437545\suite2p\2019_02_04_08\suite2p\plane0\reg_tif\'; + trial_in_chunk=10; % average trials in chunks of 10 + frames_in_regestired_tiff = 400; + + trial_list=fetchn(EXP2.BehaviorTrial*EXP2.TrialName & key & 'early_lick="no early"', 'trial','ORDER BY trial'); + + if numel(trial_list)<=trial_in_chunk + return + end + + rel_multi=(IMG.FOVmultiSessionsFirstFrame & key); + if rel_multi.count>0 + first_frame_in_session_out_of_multisession = fetchn(rel_multi & key,'first_frame_in_session_out_of_multisession'); + else + first_frame_in_session_out_of_multisession=1; + end + + reg_tiff_list=dir(reg_tiff_dir); + reg_tiff_list=reg_tiff_list(~[reg_tiff_list.isdir]); + file_list={reg_tiff_list.name}; + file_list=file_list(contains(file_list,'.tif')); + + + + FOV=fetch(IMG.FOV & key,'*'); + frame_rate = FOV.imaging_frame_rate; + typical_time_sample_start=fetchn(ANLI.FPSTHMatrix & key,'typical_time_sample_start'); + typical_time_sample_end=fetchn(ANLI.FPSTHMatrix & key,'typical_time_sample_end'); + typical_psth_timestamps=cell2mat(fetchn(ANLI.FPSTHMatrix & key,'typical_psth_timestamps')); + + + idx_frames =typical_psth_timestamps<=2; + number_of_frames = sum(idx_frames); + + + FileTif=[reg_tiff_dir file_list{1}]; + + InfoImage=imfinfo(FileTif); + mImage=InfoImage(1).Width; + nImage=InfoImage(1).Height; + + M_avg=zeros(nImage,mImage,number_of_frames); + M_var=zeros(nImage,mImage,number_of_frames); + + + k_movie = key; + k_movie_frame = key; + + k_movie_frame=repmat(k_movie_frame,1,number_of_frames); + + k_movie.typical_time_sample_start = typical_time_sample_start; + k_movie.typical_time_sample_end = typical_time_sample_end; + k_movie.psth_timestamps = typical_psth_timestamps(idx_frames); + k_movie.movie_frame_rate = frame_rate; + insert(self,k_movie); + + tic + number_of_chunks = floor(numel(trial_list)/trial_in_chunk); % I ignore trials in the last chunk - should fix later + parfor i_fr=1:1:number_of_frames + % i_fr + M_trials_chunk=zeros(nImage,mImage); + + for i_tr_chunk=1:1:number_of_chunks + M=zeros(nImage,mImage); + + for i_tr=1:1:trial_in_chunk + current_trial=(i_tr + (i_tr_chunk-1)*trial_in_chunk); + tr = trial_list(current_trial); + frames_start_trial=FOV.frames_start_trial(tr); + + current_frame = frames_start_trial + i_fr -1 + (first_frame_in_session_out_of_multisession-1); + + tiff_number = ceil(current_frame/frames_in_regestired_tiff); + frame2read = mod(current_frame,frames_in_regestired_tiff); + + if frame2read==0 + if tiff_number>1 + tiff_number=tiff_number-1; + frame2read=1; + elseif tiff_number==1 + frame2read=400; + end + end + + FileTif=[reg_tiff_dir file_list{tiff_number}]; + TifLink = Tiff(FileTif, 'r'); + TifLink.setDirectory(frame2read); + M= M + double(TifLink.read())/trial_in_chunk; %averaging without using memory + TifLink.close(); + end + M_trials_chunk= M_trials_chunk + M/number_of_chunks; %averaging without using memory + end + k_movie_frame(i_fr).movie_frame_number = i_fr; + k_movie_frame(i_fr).fov_movie_trial_avg = M_trials_chunk; + + end + toc + insert(IMG.FOVRegisteredMovieFrame,k_movie_frame); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVRegisteredMovieFrame.m b/DataJoint/+IMG/FOVRegisteredMovieFrame.m new file mode 100644 index 0000000..cfdd4b4 --- /dev/null +++ b/DataJoint/+IMG/FOVRegisteredMovieFrame.m @@ -0,0 +1,20 @@ +%{ +# Field of View +-> IMG.FOVRegisteredMovie +movie_frame_number : int +--- +fov_movie_trial_avg : longblob + +%} + + +classdef FOVRegisteredMovieFrame < dj.Part + properties(SetAccess=protected) + master= IMG.FOVRegisteredMovie + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVmultiSessions.m b/DataJoint/+IMG/FOVmultiSessions.m new file mode 100644 index 0000000..e297ad5 --- /dev/null +++ b/DataJoint/+IMG/FOVmultiSessions.m @@ -0,0 +1,15 @@ +%{ +# Table indicating that this field of view was registered across multiple sessions. FOV that are not in this table were not registered across multiple sessions +-> IMG.FOV +---- +multiple_sessions_uid : int # unique id that identifies sessions that were coregistered together. +%} + + +classdef FOVmultiSessions < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FOVmultiSessionsDirData.m b/DataJoint/+IMG/FOVmultiSessionsDirData.m new file mode 100644 index 0000000..96797ae --- /dev/null +++ b/DataJoint/+IMG/FOVmultiSessionsDirData.m @@ -0,0 +1,20 @@ +%{ +# +-> IMG.FOVmultiSessions +---- +multiple_sessions_data_dir : varchar(4000) # directory of the suite2p data coregistered across sessions +%} + + +classdef FOVmultiSessionsDirData < dj.Part + properties(SetAccess=protected) + master= IMG.FOVmultiSessions + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end + + diff --git a/DataJoint/+IMG/FOVmultiSessionsFirstFrame.m b/DataJoint/+IMG/FOVmultiSessionsFirstFrame.m new file mode 100644 index 0000000..75032a6 --- /dev/null +++ b/DataJoint/+IMG/FOVmultiSessionsFirstFrame.m @@ -0,0 +1,29 @@ +%{ +# first frame of a session with a concatenated array of frames spanning multisessions +-> IMG.FOVmultiSessions +---- +first_frame_in_session_out_of_multisession : int # first frame of a session with a concatenated array of frames spanning multisessions +%} + + +classdef FOVmultiSessionsFirstFrame < dj.Imported + properties(SetAccess=protected) + master= IMG.FOVmultiSessions + end + methods(Access=protected) + function makeTuples(self, key) + k.multiple_sessions_uid = fetch1(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + + session_list = fetchn(IMG.FOVmultiSessions & k,'session','ORDER BY session'); + + total_frames_in_previous_sessions = 0; + for i_s = 1:1:sum(session_list EXP2.SessionEpoch +session_epoch_file_num : int # first and last frame of each tiff file, relative to the beginning of the session epoch +--- +session_epoch_file_start_frame : double # (s) session epoch start frame relative to the beginning of the session epoch +session_epoch_file_end_frame : double # (s) session epoch file file start time relative to the beginning of the session epoch +%} + + +classdef FrameStartFile < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FrameStartTrial.m b/DataJoint/+IMG/FrameStartTrial.m new file mode 100644 index 0000000..a621fee --- /dev/null +++ b/DataJoint/+IMG/FrameStartTrial.m @@ -0,0 +1,18 @@ +%{ +# Frame timestamps +-> EXP2.SessionEpoch +-> EXP2.SessionTrial +--- +session_epoch_trial_bitcode=null : int # trial detected based on bitcode, after transforming from binary to integers +session_epoch_trial_start_frame : double # trial epoch start frame relative to the beginning of the session epoch. Start frame is the closest frame to the beginning of bpod trial. Closeness is defined according to absolute time difference, so it could be the frame preceding the trial start. +session_epoch_trial_end_frame : double # trial epoch file file start time relative to the beginning of the session epoch +%} + + +classdef FrameStartTrial < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/FrameTime.m b/DataJoint/+IMG/FrameTime.m new file mode 100644 index 0000000..b749b3f --- /dev/null +++ b/DataJoint/+IMG/FrameTime.m @@ -0,0 +1,15 @@ +%{ +# Frame timestamps +-> EXP2.Session +--- +frame_timestamps : longblob # (s) frame times relative to the beginning of the session +%} + + +classdef FrameTime < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/Jobs.m b/DataJoint/+IMG/Jobs.m new file mode 100644 index 0000000..c9ba3ed --- /dev/null +++ b/DataJoint/+IMG/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +IMAGING +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+IMG/Mesoscope.m b/DataJoint/+IMG/Mesoscope.m new file mode 100644 index 0000000..5533d75 --- /dev/null +++ b/DataJoint/+IMG/Mesoscope.m @@ -0,0 +1,13 @@ +%{ +# If this sessioon was recorded on mesoscope +-> EXP2.Session +%} + + +classdef Mesoscope < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/Parameters.m b/DataJoint/+IMG/Parameters.m new file mode 100644 index 0000000..4ac6657 --- /dev/null +++ b/DataJoint/+IMG/Parameters.m @@ -0,0 +1,21 @@ +%{ +# +parameter_name : varchar(200) +--- +parameter_value = null : blob +parameter_description= null : varchar(4000) +%} + +classdef Parameters < dj.Lookup + properties + contents = { + 'dir_raw_data_scan_image' 'F:\Arseny\2p\data\' '' + 'fov_size_microns_z1.1' 891.4 'field of view size in microns for zoom x1.1' + 'fov_size_microns_z1.3' 738.2 'field of view size in microns for zoom x1.3' + 'dir_root_save' 'F:\Arseny\2p\Results\' '' + 'dir_video_processed' 'G:\Arseny\2p\video_processed\' '' + } + end +end + + diff --git a/DataJoint/+IMG/PhotostimDATfile.m b/DataJoint/+IMG/PhotostimDATfile.m new file mode 100644 index 0000000..ab116a2 --- /dev/null +++ b/DataJoint/+IMG/PhotostimDATfile.m @@ -0,0 +1,17 @@ +%{ +# Session Epoch directory +-> EXP2.SessionEpoch +--- +dat_file :longblob # dat file with parameters used for photostimulation + + +%} + + +classdef PhotostimDATfile < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PhotostimGroup.m b/DataJoint/+IMG/PhotostimGroup.m new file mode 100644 index 0000000..c0a06d8 --- /dev/null +++ b/DataJoint/+IMG/PhotostimGroup.m @@ -0,0 +1,181 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +photostim_start_frame :longblob # relative to the beginning of the session epoch, *not* to the entire session +photostim_end_frame :longblob # relative to the beginning of the session epoch, *not* to the entire session +%} + + +classdef PhotostimGroup < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + end + methods(Access=protected) + function makeTuples(self, key) + + %% HERE WE ASSUME THAT A PHOTOSTIMULATION HAPPENS BETWEEN "FRAMES", either between single *frames* during single plane imaging, or between *planes* durint volumetric imaging + % photostim_duration_in_frames = 1; % this is experiment dependent. Here the photostim lasts exactly for one frame + + % below will also find if the same stimulus was applied for several consequetive frames + % same_photostim_duration_in_frames - determines sequence periodicity, i.e. if the same stimulus was applied for several consequetive frames + + + % photostim_duration_in_frames = 0.25; % this is experiment dependent. Here the photostim happens 4 times per "volumetric" plane + % photostim_duration_in_frames = 0.5; % this is experiment dependent. Here the photostim happens 2 times per "volumetric" plane + + dir_data = fetchn(EXP2.SessionEpochDirectory & key,'local_path_session_epoch_registered'); + dir_data = dir_data{1}; + + + try + photostim_session_epoch = (load([dir_data 'photostim_session_epoch.mat'])); photostim_session_epoch=photostim_session_epoch.photostim_session_epoch; + stim_frame=photostim_session_epoch.stim_frame(110:1:end-110); % to be able to analyze single trial traces of suffiecient length, aligned to photostim onset + stim_sequence=photostim_session_epoch.stim_sequence(110:1:end-110); + catch + + dir_data = fetchn(EXP2.SessionEpochDirectory & key,'local_path_session_epoch'); + dir_data = dir_data{1}; + allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + sequence_filenames =allFileNames(contains(allFileNames,'Sequence'))'; + session_epoch_start_frame = fetch1(IMG.SessionEpochFrame & key,'session_epoch_start_frame'); + session_epoch_end_frame = fetch1(IMG.SessionEpochFrame & key,'session_epoch_end_frame'); + + + + seq = (load([dir_data sequence_filenames{1}])); %DEBUG to include multiple sequence names + seq=seq.sequence; + + %determining sequence periodicity, i.e. if the same stimulus was applied for several consequetive frames + seq_diff = diff(seq); + seq_diff(seq_diff~=0) = 1; + same_photostim_duration_in_frames = round(numel(seq)/(sum(seq_diff)+1)); % frames here will refer to frames or planes for single/multi plane imaging respectively + + + num_of_planes = numel(fetchn(IMG.Plane & key,'plane_num')); + + photostim_volume_ratio = same_photostim_duration_in_frames/num_of_planes; % because of the volumetric imaging, a "frame" here is a volumetric frame. Therefore more than one photostim can happen in a volumetric frame + stim_frame=session_epoch_start_frame : photostim_volume_ratio: session_epoch_end_frame; + stim_frame= stim_frame - stim_frame(1) +1; % relative to the beginning of the session epoch, *not* to the entire session + + seq = seq(1:same_photostim_duration_in_frames:end); + seq=[seq seq seq seq seq seq seq seq]; % in case the sequence is too short and has to repeat itself + seq=seq(1:1:numel(stim_frame)); + stim_sequence = seq; + + %% Populate IMG.PhotostimProtocol + key2 = fetch(EXP2.SessionEpoch & key); + key2.same_photostim_duration_in_frames = same_photostim_duration_in_frames; + key2.photostim_volume_ratio = photostim_volume_ratio; + insert(IMG.PhotostimProtocol, key2); + + + % stim_sequence=seq(110:1:end-110); + % stim_frame=stim_frame((110:1:end-110)); + end + + + % try + % photostim_session_epoch = (load([dir_data 'photostim_session_epoch.mat'])); photostim_session_epoch=photostim_session_epoch.photostim_session_epoch; + % stim_frame=photostim_session_epoch.stim_frame(110:1:end-110); % to be able to analyze single trial traces of suffiecient length, aligned to photostim onset + % stim_sequence=photostim_session_epoch.stim_sequence(110:1:end-110); + % catch + % + % dir_data = fetchn(EXP2.SessionEpochDirectory & key,'local_path_session_epoch'); + % dir_data = dir_data{1}; + % allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + % allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + % sequence_filenames =allFileNames(contains(allFileNames,'Sequence'))'; + % + % stim_frame=fetch1(IMG.SessionEpochFrame & key,'session_epoch_start_frame'):1:fetch1(IMG.SessionEpochFrame & key,'session_epoch_end_frame'); + % stim_frame=1:1:numel(stim_frame); + % seq = (load([dir_data sequence_filenames{1}])); %DEBUG to include multiple sequence names + % seq=seq.sequence; + % seq=[seq seq seq seq seq seq seq seq]; % in case the sequence is too short and has to repeat itself + % seq=seq(1:1:numel(stim_frame)); + % + % stim_sequence=seq(110:1:end-110); + % stim_frame=stim_frame((110:1:end-110)); + % end + + + + + + % load dat file containing the photostimulation groups info + dir_data1 = fetch1(EXP2.SessionEpochDirectory & key,'local_path_session'); + allFiles = dir(dir_data1); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'dat.mat'))'; + if ~isempty(allFileNames) % if dat file is common to all session + dat = (load([dir_data1 'dat.mat'])); + else %if there is a dat file specific to session epoch + dir_data2 = fetch1(EXP2.SessionEpochDirectory & key,'local_path_session_epoch'); + dat = (load([dir_data2 'dat.mat'])); + end + dat=dat.dat; + + + + if size(dat.photostim_groups,2)>5 %muiltiplexing 5 is just to make sure that the number of groups was not because of accidental clicking + + for i_g = 1:1:size(dat.photostim_groups,2) + group_rois (i_g,:)= find(dat.photostim_groups(i_g).powers); + end + + + group_list=unique(group_rois(:),'sorted'); + + % session_epoch_start_frame = fetchn(IMG.SessionEpochFrame & key,'session_epoch_start_frame'); + + for i_g = 1:1:numel(group_list) + k=key; + k.photostim_group_num=i_g; + idx=[]; + idx_group_with_this_roi=[]; + for i_gg=1:1:size(group_rois,1) + idx_group_with_this_roi(i_gg)=sum(group_rois(i_gg,:)==group_list(i_g))>0; + end + idx_group_with_this_roi = find(idx_group_with_this_roi); + for iii = 1:1:numel(idx_group_with_this_roi) + idx_temp=find(stim_sequence==idx_group_with_this_roi(iii)); + idx = [idx idx_temp]; + end + % idx_g=find(stim_sequence==group_list(i_g)); + idx = sort(idx); + for i_stim = 1:1:numel(idx) + f_start=stim_frame(idx(i_stim)); + k.photostim_start_frame(i_stim) = floor(f_start); + k.photostim_end_frame (i_stim)= floor(f_start);%+ photostim_duration_in_frames -1; %DEBUG in case a stimulus lasts longer than a frame + end + insert(self,k); + end + + + + else % Not multiplexing + + + group_list=unique(stim_sequence,'sorted'); + + % session_epoch_start_frame = fetchn(IMG.SessionEpochFrame & key,'session_epoch_start_frame'); + + for i_g = 1:1:numel(group_list) + k=key; + k.photostim_group_num=i_g; + idx=find(stim_sequence==group_list(i_g)); + for i_stim = 1:1:numel(idx) + f_start=stim_frame(idx(i_stim)); + k.photostim_start_frame(i_stim) = floor(f_start); + k.photostim_end_frame (i_stim)= floor(f_start);%+ photostim_duration_in_frames -1; %DEBUG in case a stimulus lasts longer than a frame + end + insert(self,k); + end + + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PhotostimGroupROI.m b/DataJoint/+IMG/PhotostimGroupROI.m new file mode 100644 index 0000000..3a8b0cd --- /dev/null +++ b/DataJoint/+IMG/PhotostimGroupROI.m @@ -0,0 +1,102 @@ +%{ +# PhotostimGroup ROI +-> IMG.PhotostimGroup +-> IMG.ROI +--- +flag_neuron_or_control :int # 1 neuron 0 control +photostim_center_x : double # (pixels) +photostim_center_y : double # (pixels) +closest_neuron_center_x : double # (pixels) +closest_neuron_center_y : double # (pixels) +distance_to_closest_neuron : double # (pixels) +%} + + +classdef PhotostimGroupROI < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + end + methods(Access=protected) + function makeTuples(self, key) + pixel_offset = 0; + non_neural_targets = 0; % assuming the first targets are neuorns and the last non_neural_targets targets are control sites + + % load dat file containing the photostimulation groups info + dir_data1 = fetch1(EXP2.SessionEpochDirectory & key,'local_path_session'); + allFiles = dir(dir_data1); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'dat.mat'))'; + if ~isempty(allFileNames) % if dat file is common to all session + dat = (load([dir_data1 'dat.mat'])); + else %if there is a dat file specific to session epoch + dir_data2 = fetch1(EXP2.SessionEpochDirectory & key,'local_path_session_epoch'); + dat = (load([dir_data2 'dat.mat'])); + end + dat=dat.dat; + + dat2.photostim_groups=dat.photostim_groups; + + if ~isfield(dat,'rect') + rect = [-4.9091, -4.9091; 4.9091 -4.9091; 4.9091 4.9091; -4.9091 4.9091]; %Have to be fixed. Check why this is missing in some of the dat files. This is likely true only for the typical zoom size + dat.rect = rect; + end + if ~isfield(dat,'plane') + dat.plane=1; + end + dat2.rect=dat.rect; + dat2.plane=dat.plane; %the photostim plane. 1 by default + dat2.roi=dat.roi; + k5=key; + k5.dat_file=dat2; + insert(IMG.PhotostimDATfile,k5); + + roi=dat.roi; + close all; + SI_xy = cell2mat({roi.centroid}'); % from SI + SI_xy(:,1) = SI_xy(:,1) - pixel_offset; + + key.plane_num = dat.plane; %the photostim plane. 1 by default (top most) + key.fov_num = 1; % 1 by default + key.channel_num = 1; + + ROI=fetch((IMG.ROI & IMG.ROIGood) & key,'*', 'ORDER BY roi_number'); % from DataJoint + DJ_xy(:,1) = [ROI.roi_centroid_x]'; + DJ_xy(:,2) = [ROI.roi_centroid_y]'; +% +% k1 = fetch(IMG.Plane & key); +% key.fov_num = k1.fov_num; +% key.plane_num = k1.plane_num; +% key.channel_num = k1.channel_num; + + + + k2 = repmat(key,size(SI_xy,1),1); + for i_g=1:1:size(SI_xy,1) + dx = SI_xy(i_g,1) - DJ_xy(:,1); + dy = SI_xy(i_g,2) - DJ_xy(:,2); + [distance_to_closest_ROI , idx_closest_ROI] = min(sqrt(dx.^2 + dy.^2)); + %for debug DJ_xy(idx_closest_ROI,:); + k2(i_g).photostim_group_num = i_g; + k2(i_g).roi_number = ROI(idx_closest_ROI).roi_number; + k2(i_g).photostim_center_x = SI_xy(i_g,1); + k2(i_g).photostim_center_y = SI_xy(i_g,2); + k2(i_g).closest_neuron_center_x = DJ_xy(idx_closest_ROI,1); + k2(i_g).closest_neuron_center_y = DJ_xy(idx_closest_ROI,2); + k2(i_g).distance_to_closest_neuron = distance_to_closest_ROI; + + if i_g>(size(SI_xy,1)-non_neural_targets +2) %finds non-neural targets + k2(i_g).flag_neuron_or_control = 0; + else + k2(i_g).flag_neuron_or_control = 1; + end + end + + % hold on; + % plot(DJ_xy(:,1),DJ_xy(:,2),'ok'); + % plot(SI_xy(:,1),SI_xy(:,2),'om'); + + insert(self, k2); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PhotostimProtocol.m b/DataJoint/+IMG/PhotostimProtocol.m new file mode 100644 index 0000000..6972980 --- /dev/null +++ b/DataJoint/+IMG/PhotostimProtocol.m @@ -0,0 +1,18 @@ +%{ +# How many times the same stimulus is repeated across consequative frames +-> EXP2.SessionEpoch +--- +same_photostim_duration_in_frames : double # frames here will refer to frames or planes for single/multi plane imaging, respectively +photostim_volume_ratio : double # same_photostim_duration_in_frames/num_of_planes for volumetric imaging, it tells how many stimuli there are during the time it takes to aquire a volume +%} + + +classdef PhotostimProtocol < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + + insert(self, key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/Plane.m b/DataJoint/+IMG/Plane.m new file mode 100644 index 0000000..e850ad4 --- /dev/null +++ b/DataJoint/+IMG/Plane.m @@ -0,0 +1,18 @@ +%{ +# Imaging plane +-> IMG.FOV +plane_num : int # imaging plane within this field of view +channel_num : int # imaging channel (e.g. 1 green, 2 red etc) +--- +mean_img : longblob # mean image from suite2p +mean_img_enhanced : longblob # enahnced mean image from suite2p +%} + + +classdef Plane < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PlaneCoordinates.m b/DataJoint/+IMG/PlaneCoordinates.m new file mode 100644 index 0000000..81a0cba --- /dev/null +++ b/DataJoint/+IMG/PlaneCoordinates.m @@ -0,0 +1,19 @@ +%{ +# Relative coordinates of the image plane, in case of multiplane, or multiFOV (e.g. mesoscope) imaging +-> IMG.Plane +--- +flag_mesoscope : smallint # 1 if mesoscope, 0 if not +x_pos_relative : double # relative plane coordinates, in um (doublecheck, units) +y_pos_relative : double # relative plane coordinates, in um (doublecheck, units) +z_pos_relative : double # relative plane depth, in um +%} + + +classdef PlaneCoordinates < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PlaneDirectory.m b/DataJoint/+IMG/PlaneDirectory.m new file mode 100644 index 0000000..addbe13 --- /dev/null +++ b/DataJoint/+IMG/PlaneDirectory.m @@ -0,0 +1,15 @@ +%{ +# Relative coordinates of the image plane, in case of multiplane, or multiFOV (e.g. mesoscope) imaging +-> IMG.Plane +--- +local_path_plane_registered :varchar(5000) # path to the local directory with relevant files for this plane after registration +%} + + +classdef PlaneDirectory < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/PlaneSuite2p.m b/DataJoint/+IMG/PlaneSuite2p.m new file mode 100644 index 0000000..9baeb45 --- /dev/null +++ b/DataJoint/+IMG/PlaneSuite2p.m @@ -0,0 +1,16 @@ +%{ +# +-> IMG.Plane +--- +plane_num_in_suite2p :smallint # +frames_per_folder :blob # number of frames for this plane read by suite2p from each folder. Folders typically correspond to session epochs. Some planes will have 1 frame less than other planes, if the acquistion was stopped during volumetricimaging before finished reading the entire volume +%} + + +classdef PlaneSuite2p < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROI.m b/DataJoint/+IMG/ROI.m new file mode 100644 index 0000000..aab9e7f --- /dev/null +++ b/DataJoint/+IMG/ROI.m @@ -0,0 +1,80 @@ +%{ +# ROI (Region of interest - e.g. cells) +-> IMG.Plane +roi_number : int # roi number (restarts for every session) +--- +roi_number_uid : int # roi uid (unique across sessions). Same roi registered across sessions would have the same uid. It wasn't unique until 2020.01.13 +roi_centroid_x : double # ROI centroid x, pixels, within plane coordinates +roi_centroid_y : double # ROI centroid y, pixels, within plane coordinates +roi_radius : double # ROI radius, pixels +roi_x_pix : longblob # pixel indices, x +roi_y_pix : longblob # pixel indices, y +roi_pixel_weight : longblob # pixel mask (fluorescence = sum(pixel_weight * frames[ypix,xpix,:])) +neuropil_pixels : longblob # pixel indices, for the linearized matrix +f_mean : double # mean ROI flouresence +f_median : double # median ROI flouresence + +%} + + +classdef ROI < dj.Imported + properties + keySource = IMG.Plane; + end + methods(Access=protected) + function makeTuples(self, key) + local_path_plane_registered = fetchn(IMG.PlaneDirectory & key,'local_path_plane_registered'); + if isempty(local_path_plane_registered)==0 %for newer code + S2P=load([local_path_plane_registered{1} 'Fall.mat']); + else %for older code + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + S2P=load([dir_data2 '\suite2p\plane0\Fall.mat']); + end + + numberROI = numel(S2P.stat); + + % Ensures cells are numbered across planes/FOVs for the same session + kkkkk.subject_id=key.subject_id; + kkkkk.session=key.session ; + rel_temp = IMG.ROI & kkkkk; + number_of_existing_ROIs_session = rel_temp.count; + + % Ensures the roi_number uid are unique. It wasn't unique until 2020.01.13 + rel_temp2 = IMG.ROI; + number_of_existing_ROIs_all = rel_temp2.count; + roi_number_uid = fetchn(IMG.ROI,'roi_number_uid'); + last_uniqueid = max(max(roi_number_uid),number_of_existing_ROIs_all); + + + z_pos_relative =fetchn(IMG.PlaneCoordinates & key,'z_pos_relative'); + for iROI=1:1:numberROI + % iROI + F = S2P.F(iROI,:); + + key_ROI=key; + key_ROI.roi_number = iROI + number_of_existing_ROIs_session; + key_ROI.roi_number_uid = iROI + last_uniqueid; + key_ROI.roi_centroid_x = S2P.stat{iROI}.med(2); %note the unintuitive order in suite2p output + key_ROI.roi_centroid_y = S2P.stat{iROI}.med(1); %note the unintuitive order in suite2p output + key_ROI.roi_x_pix = S2P.stat{iROI}.xpix; + key_ROI.roi_y_pix = S2P.stat{iROI}.ypix; + key_ROI.roi_pixel_weight = S2P.stat{iROI}.lam; %pixel mask (fluorescence = sum(pixel_weight * frames[ypix,xpix,:])) + key_ROI.roi_radius = S2P.stat{iROI}.radius; + key_ROI.neuropil_pixels = 1; %S2P.stat{iROI}.ipix_neuropil; + key_ROI.f_mean = mean(F); + key_ROI.f_median = median(F); + insert(IMG.ROI,key_ROI); + + key_ROIdept=key; + key_ROIdept.roi_number = iROI + number_of_existing_ROIs_session; + key_ROIdept.z_pos_relative = z_pos_relative; + + insert(IMG.ROIdepth,key_ROIdept); + + + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIBad.m b/DataJoint/+IMG/ROIBad.m new file mode 100644 index 0000000..a11177e --- /dev/null +++ b/DataJoint/+IMG/ROIBad.m @@ -0,0 +1,23 @@ +%{ +# bad ROI that were considered cell by suite2p +-> IMG.ROI +%} + + +classdef ROIBad < dj.Imported + properties + keySource = EXP2.Session & IMG.ROIBadSessionEpoch; + end + methods(Access=protected) + function makeTuples(self, key) + + key_roi = fetch(IMG.ROIBadSessionEpoch & key); + key_roi = rmfield(key_roi, 'session_epoch_type'); + key_roi = rmfield(key_roi, 'session_epoch_number'); + + [C,ia,ic] = unique([key_roi.roi_number]); %take unique across session epochs + insert(self,key_roi(ia)); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIBadNeuropil.m b/DataJoint/+IMG/ROIBadNeuropil.m new file mode 100644 index 0000000..75afdef --- /dev/null +++ b/DataJoint/+IMG/ROIBadNeuropil.m @@ -0,0 +1,52 @@ +%{ +# include good ROI that were considered cell by suite2p +-> IMG.ROI +%} + + +classdef ROIBadNeuropil < dj.Imported + properties + keySource = EXP2.Session & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + threshold_max=15; + threshold_min=-1; + + key_roi = fetch(IMG.ROI & key,'ORDER BY roi_number'); + rel=(IMG.ROIdeltaFStatsNeuropil & IMG.Mesoscope)-EXP2.SessionEpochSomatotopy; + + %% based on spontaneous session + key.session_epoch_type='spont_only'; + m=fetchn(rel & key,'max_dff','ORDER BY roi_number'); + % histogram(m,[0:1:max(m)]) + idx_bad_max_spont=(m>threshold_max); + + m=fetchn(rel & key,'min_dff','ORDER BY roi_number'); + % histogram(m) + idx_bad_min_spont=(mthreshold_max); + + m=fetchn(rel & key,'min_dff','ORDER BY roi_number'); + % histogram(m) + idx_bad_min_behav=(m EXP2.SessionEpoch +-> IMG.ROI +%} + + +classdef ROIBadSessionEpoch < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROIdeltaFStats; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_temp=IMG.Mesoscope &key; + if rel_temp.count>0 + threshold_max=15; + threshold_min=-1; + else + threshold_max=100; + threshold_min=-5; + end + + key_roi = fetch(EXP2.SessionEpoch*IMG.ROI & key,'ORDER BY roi_number'); + rel=(IMG.ROIdeltaFStats)-EXP2.SessionEpochSomatotopy; + + m=fetchn(rel & key,'max_dff','ORDER BY roi_number'); + % histogram(m,[0:1:max(m)]) + idx_bad_max=(m>threshold_max) | m==0; % we exlude rois that have exactly zero values, because that indicate flat responses + + m=fetchn(rel & key,'min_dff','ORDER BY roi_number'); + % histogram(m) + idx_bad_min=(m EXP2.SessionEpoch +-> IMG.ROI +--- +mean_f : double # mean of f +%} + + +classdef ROIFMean < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROITrace; + end + methods(Access=protected) + function makeTuples(self, key) + + roi_list=fetchn(IMG.ROITrace & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(IMG.ROITrace & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'f_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(IMG.ROITrace & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'f_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(IMG.ROITrace & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + key_ROI=fetch(IMG.ROI*EXP2.SessionEpoch &key,'ORDER BY roi_number'); + mean_f = mean(Fall,2); + + for iROI = 1:1:numel(key_ROI) + key_ROI(iROI).mean_f = mean_f(iROI); + end + insert(self,key_ROI); + end + + end +end diff --git a/DataJoint/+IMG/ROIGood.m b/DataJoint/+IMG/ROIGood.m new file mode 100644 index 0000000..2f2f3ba --- /dev/null +++ b/DataJoint/+IMG/ROIGood.m @@ -0,0 +1,27 @@ +%{ +# include good ROI that were considered cell by suite2p +-> IMG.ROI +%} + + +classdef ROIGood < dj.Imported + properties + keySource = IMG.Plane; + end + methods(Access=protected) + function makeTuples(self, key) + local_path_plane_registered = fetchn(IMG.PlaneDirectory & key,'local_path_plane_registered'); + if isempty(local_path_plane_registered)==0 %for newer code + iscell=readNPY([local_path_plane_registered{1} 'iscell.npy']); + else %for older code + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + iscell=readNPY([dir_data2 '\suite2p\plane0\iscell.npy']); + end + iscell=logical(iscell(:,1)); + R=fetch(IMG.ROI & key,'ORDER BY roi_number'); + R=R(iscell); + insert(self, R); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROISpikes.m b/DataJoint/+IMG/ROISpikes.m new file mode 100644 index 0000000..39d2db4 --- /dev/null +++ b/DataJoint/+IMG/ROISpikes.m @@ -0,0 +1,122 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +spikes_trace : longblob # (s) deconvolved trace for each frame +%} + + +classdef ROISpikes < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI; + end + methods(Access=protected) + function makeTuples(self, key) + + + + local_path_plane_registered = fetchn(IMG.PlaneDirectory & key,'local_path_plane_registered'); + if isempty(local_path_plane_registered) % for older code + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + try + S2P=load([dir_data2 '\suite2p\plane0\Fall.mat']); + catch + disp('Suite2p output file not found') + return + end + end + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + numberROI=numel(key_ROITrace); + + + previous_plane_num =0; + previous_fov_num =0; + s2p_roi=0; + + current_plane_num =key_ROITrace(1).plane_num; + current_fov_num =key_ROITrace(1).fov_num; + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + + for iROI=1:1:numberROI + iROI; + + current_plane_num =key_ROITrace(iROI).plane_num; + current_fov_num =key_ROITrace(iROI).fov_num; + + if previous_fov_num~=current_fov_num || previous_plane_num~=current_plane_num + keydirectory=key; + keydirectory.fov_num=key_ROITrace(iROI).fov_num; + keydirectory.plane_num=key_ROITrace(iROI).plane_num; + keydirectory.channel_num=key_ROITrace(iROI).channel_num; + local_path_plane_registered = fetch1(IMG.PlaneDirectory & keydirectory,'local_path_plane_registered'); + try + S2P=load([local_path_plane_registered 'Fall.mat']); + catch + local_path_plane_registered(1)='G'; + S2P=load([local_path_plane_registered 'Fall.mat']); + end + s2p_roi = 1; + + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + end + + % in case they are missing frames in this plane at the end of the epoch (should be no more than 1 missing frame per epoch, due to volumetric imaging) we 'pad' it by adding frames identical to the last one + key_ROITrace(iROI).spikes_trace = [S2P.spks(s2p_roi,start_frame:end_frame), repmat(S2P.spks(s2p_roi,end_frame),1,missing_frames_epoch_plane)]; % if missing_frames_epoch_plane=0 then we don't add anything + + key_ROITrace(iROI).session_epoch_type = key.session_epoch_type; + key_ROITrace(iROI).session_epoch_number = key.session_epoch_number; + + + + k2=key_ROITrace(iROI); + insert(self, k2); + s2p_roi = s2p_roi +1; + previous_fov_num = current_fov_num; + previous_plane_num = current_plane_num; + end + end + end +end + + + + +% key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); +% dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); +% dir_data2 = dir_data2{1}; +% try +% S2P=load([dir_data2 '\suite2p\plane0\Fall.mat']); +% catch +% disp('Suite2p output file no found') +% return +% end +% numberROI = numel(S2P.stat); +% +% start_frame = fetchn(IMG.SessionEpochFrame & key,'session_epoch_start_frame'); +% end_frame = fetchn(IMG.SessionEpochFrame & key,'session_epoch_end_frame'); +% +% for iROI=1:1:numberROI +% iROI; +% key_ROITrace(iROI).spikes_trace = S2P.spks(iROI,start_frame:end_frame); +% key_ROITrace(iROI).session_epoch_type = key.session_epoch_type; +% key_ROITrace(iROI).session_epoch_number = key.session_epoch_number; +% +% k2=key_ROITrace(iROI); +% insert(self, k2); +% end +% end +% end +% end \ No newline at end of file diff --git a/DataJoint/+IMG/ROITrace.m b/DataJoint/+IMG/ROITrace.m new file mode 100644 index 0000000..3fc1ff1 --- /dev/null +++ b/DataJoint/+IMG/ROITrace.m @@ -0,0 +1,97 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +f_trace : longblob # fluorescent trace for each frame +%} + + +classdef ROITrace < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI; + end + methods(Access=protected) + function makeTuples(self, key) + local_path_plane_registered = fetchn(IMG.PlaneDirectory & key,'local_path_plane_registered'); + if isempty(local_path_plane_registered) % for older code + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + try + S2P=load([dir_data2 '\suite2p\plane0\Fall.mat']); + catch + disp('Suite2p output file not found') + return + end + end + + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + numberROI=numel(key_ROITrace); + + + previous_plane_num =0; + previous_fov_num =0; + s2p_roi=0; + + current_plane_num =key_ROITrace(1).plane_num; + current_fov_num =key_ROITrace(1).fov_num; + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + + for iROI=1:1:numberROI + iROI; + + current_plane_num =key_ROITrace(iROI).plane_num; + current_fov_num =key_ROITrace(iROI).fov_num; + + if previous_fov_num~=current_fov_num || previous_plane_num~=current_plane_num + keydirectory=key; + keydirectory.fov_num=key_ROITrace(iROI).fov_num; + keydirectory.plane_num=key_ROITrace(iROI).plane_num; + keydirectory.channel_num=key_ROITrace(iROI).channel_num; + local_path_plane_registered = fetch1(IMG.PlaneDirectory & keydirectory,'local_path_plane_registered'); + try + S2P=load([local_path_plane_registered 'Fall.mat']); + catch + local_path_plane_registered(1)='G'; + S2P=load([local_path_plane_registered 'Fall.mat']); + end + s2p_roi = 1; + + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + end + % in case they are missing frames in this plane at the end of the epoch (should be no more than 1 missing frame per epoch, due to volumetric imaging) we 'pad' it by adding frames identical to the last one + key_ROITrace(iROI).f_trace = [S2P.F(s2p_roi,start_frame:end_frame), repmat(S2P.F(s2p_roi,end_frame),1,missing_frames_epoch_plane)]; % if missing_frames_epoch_plane=0 then we don't add anything + + key_ROITrace(iROI).session_epoch_type = key.session_epoch_type; + key_ROITrace(iROI).session_epoch_number = key.session_epoch_number; + + k2=key_ROITrace(iROI); + insert(self, k2); + s2p_roi = s2p_roi +1; + previous_fov_num = current_fov_num; + previous_plane_num = current_plane_num; + end + end + end +end + + + + + + + + + + diff --git a/DataJoint/+IMG/ROITraceNeuropil.m b/DataJoint/+IMG/ROITraceNeuropil.m new file mode 100644 index 0000000..69d06b1 --- /dev/null +++ b/DataJoint/+IMG/ROITraceNeuropil.m @@ -0,0 +1,111 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +f_trace : longblob # fluorescent trace for each frame +%} + + +classdef ROITraceNeuropil < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + local_path_plane_registered = fetchn(IMG.PlaneDirectory & key,'local_path_plane_registered'); + if isempty(local_path_plane_registered) % for older code + dir_data2 = fetchn(EXP2.SessionEpochDirectory &key,'local_path_session_registered'); + dir_data2 = dir_data2{1}; + try + S2P=load([dir_data2 '\suite2p\plane0\Fall.mat']); + catch + disp('Suite2p output file not found') + return + end + end + + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + numberROI=numel(key_ROITrace); + + + previous_plane_num =0; + previous_fov_num =0; + s2p_roi=0; + + + current_plane_num =key_ROITrace(1).plane_num; + current_fov_num =key_ROITrace(1).fov_num; + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + if isempty(missing_frames_epoch_plane) + start_frame = fetchn(IMG.SessionEpochFrame & key & kkkk,'session_epoch_start_frame'); + end_frame = fetchn(IMG.SessionEpochFrame & key & kkkk,'session_epoch_end_frame'); + missing_frames_epoch_plane = 0; + end + + for iROI=1:1:numberROI + iROI; + + current_plane_num =key_ROITrace(iROI).plane_num; + current_fov_num =key_ROITrace(iROI).fov_num; + + + + if previous_fov_num~=current_fov_num || previous_plane_num~=current_plane_num + keydirectory=key; + keydirectory.fov_num=key_ROITrace(iROI).fov_num; + keydirectory.plane_num=key_ROITrace(iROI).plane_num; + keydirectory.channel_num=key_ROITrace(iROI).channel_num; + local_path_plane_registered = fetch1(IMG.PlaneDirectory & keydirectory,'local_path_plane_registered'); + try + S2P=load([local_path_plane_registered 'Fall.mat']); + catch + local_path_plane_registered(1)='G'; + S2P=load([local_path_plane_registered 'Fall.mat']); + end + s2p_roi = 1; + + kkkk.plane_num = current_plane_num; + kkkk.fov_num = current_fov_num; + start_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_start_frame'); + end_frame = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'session_epoch_plane_end_frame'); + missing_frames_epoch_plane = fetchn(IMG.SessionEpochFramePlane & key & kkkk,'missing_frames_epoch_plane'); + + if isempty(missing_frames_epoch_plane) + start_frame = fetchn(IMG.SessionEpochFrame & key & kkkk,'session_epoch_start_frame'); + end_frame = fetchn(IMG.SessionEpochFrame & key & kkkk,'session_epoch_end_frame'); + missing_frames_epoch_plane = 0; + end + + end + % in case they are missing frames in this plane at the end of the epoch (should be no more than 1 missing frame per epoch, due to volumetric imaging) we 'pad' it by adding frames identical to the last one + key_ROITrace(iROI).f_trace = [S2P.Fneu(s2p_roi,start_frame:end_frame), repmat(S2P.Fneu(s2p_roi,end_frame),1,missing_frames_epoch_plane)]; % if missing_frames_epoch_plane=0 then we don't add anything + + key_ROITrace(iROI).session_epoch_type = key.session_epoch_type; + key_ROITrace(iROI).session_epoch_number = key.session_epoch_number; + + k2=key_ROITrace(iROI); + insert(self, k2); + s2p_roi = s2p_roi +1; + previous_fov_num = current_fov_num; + previous_plane_num = current_plane_num; + end + end + end +end + + + + + + + + + + diff --git a/DataJoint/+IMG/ROITrial.m b/DataJoint/+IMG/ROITrial.m new file mode 100644 index 0000000..1a3ca01 --- /dev/null +++ b/DataJoint/+IMG/ROITrial.m @@ -0,0 +1,17 @@ +%{ +# +-> IMG.ROI +-> EXP2.SessionTrial +--- +f_trace : longblob # flourescence values for each frame within a trial, from this ROI +f_trace_timestamps : longblob # timestamps of each frame relative to the beginning of each trial +frames_per_trial : int # number of frames in each trial +%} + + +classdef ROITrial < dj.Imported + methods (Access=protected) + function makeTuples(self, key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaF.m b/DataJoint/+IMG/ROIdeltaF.m new file mode 100644 index 0000000..a50d559 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaF.m @@ -0,0 +1,73 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +dff_trace : longblob # (s) delta f over f +%} + + +classdef ROIdeltaF < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROITrace; + end + methods(Access=protected) + function makeTuples(self, key) + + running_window=60; %seconds + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + % Will affect the baseline estimation for delfta/F calculation. Will require more fine adjustment for different frame rates + if frame_rate>10 + smooth_window_multiply_factor =5; + else + smooth_window_multiply_factor =1; + end + + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + key_mean_dff = key_ROITrace; + key_mean_f = key_ROITrace; + + Fall=fetchn(IMG.ROITrace &key,'f_trace','ORDER BY roi_number'); + + for iROI=1:1:size(Fall,1) + iROI; + F=Fall{iROI}; + Fs=smoothdata(F,'gaussian',running_window*smooth_window_multiply_factor); % for baseline estimation only + + running_min=movmin(Fs,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); + baseline=movmax(running_min,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); %running max of the running min + baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + dFF = (F-baseline2)./baseline2; %deltaF over F + + + k2=key_ROITrace(iROI); + k2.dff_trace = dFF; + k2.session_epoch_type = key.session_epoch_type; + k2.session_epoch_number = key.session_epoch_number; + + insert(self,k2); + + key_mean_dff(iROI).session_epoch_type = key.session_epoch_type; + key_mean_dff(iROI).session_epoch_number = key.session_epoch_number; + key_mean_dff(iROI).mean_dff = mean(dFF); + + key_mean_f(iROI).session_epoch_type = key.session_epoch_type; + key_mean_f(iROI).session_epoch_number = key.session_epoch_number; + key_mean_f(iROI).mean_f = mean(F); + + + end + insert(IMG.ROIdeltaFMean , key_mean_dff); + insert(IMG.ROIFMean , key_mean_f); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFMean.m b/DataJoint/+IMG/ROIdeltaFMean.m new file mode 100644 index 0000000..82ae066 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFMean.m @@ -0,0 +1,44 @@ +%{ +# Mean of dff +-> EXP2.SessionEpoch +-> IMG.ROI +--- +mean_dff : double # mean of delta f over f +%} + + +classdef ROIdeltaFMean < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF; + end + methods(Access=protected) + function makeTuples(self, key) + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + key_ROI=fetch(IMG.ROI*EXP2.SessionEpoch &key,'ORDER BY roi_number'); + mean_dff = mean(Fall,2); + + for iROI = 1:1:numel(key_ROI) + key_ROI(iROI).mean_dff = mean_dff(iROI); + end + insert(self,key_ROI); + end + + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFMeanNeuropil.m b/DataJoint/+IMG/ROIdeltaFMeanNeuropil.m new file mode 100644 index 0000000..9d4dfe3 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFMeanNeuropil.m @@ -0,0 +1,34 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +mean_dff : double # mean of delta f over f +%} + + +classdef ROIdeltaFMeanNeuropil < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaFNeuropil; + end + methods(Access=protected) + function makeTuples(self, key) + + + + + key_mean_dff=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + Fall=fetchn(IMG.ROIdeltaFNeuropil &key,'dff_trace','ORDER BY roi_number'); + + for iROI=1:1:size(Fall,1) + F=Fall{iROI}; + key_mean_dff(iROI).mean_dff = mean(F); + key_mean_dff(iROI).session_epoch_type = key.session_epoch_type; + key_mean_dff(iROI).session_epoch_number = key.session_epoch_number; + end + insert(self,key_mean_dff); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFNeuropil.m b/DataJoint/+IMG/ROIdeltaFNeuropil.m new file mode 100644 index 0000000..de7142a --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFNeuropil.m @@ -0,0 +1,65 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +dff_trace : longblob # (s) delta f over f +%} + + +classdef ROIdeltaFNeuropil < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROITraceNeuropil; + end + methods(Access=protected) + function makeTuples(self, key) + + running_window=60; %seconds + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + % Will affect the baseline estimation for delfta/F calculation. Will require more fine adjustment for different frame rates + if frame_rate>10 + smooth_window_multiply_factor =5; + else + smooth_window_multiply_factor =1; + end + + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + key_mean_dff = key_ROITrace; + + Fall=fetchn(IMG.ROITraceNeuropil &key,'f_trace','ORDER BY roi_number'); + + for iROI=1:1:size(Fall,1) + iROI; + F=Fall{iROI}; + Fs=smoothdata(F,'gaussian',running_window*smooth_window_multiply_factor); % for baseline estimation only + + running_min=movmin(Fs,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); + baseline=movmax(running_min,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); %running max of the running min + baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + dFF = (F-baseline2)./baseline2; %deltaF over F + + k2=key_ROITrace(iROI); + k2.dff_trace = dFF; + k2.session_epoch_type = key.session_epoch_type; + k2.session_epoch_number = key.session_epoch_number; + + key_mean_dff(iROI).mean_dff = mean(dFF); + key_mean_dff(iROI).session_epoch_type = key.session_epoch_type; + key_mean_dff(iROI).session_epoch_number = key.session_epoch_number; + + insert(self,k2); + + end + insert(IMG.ROIdeltaFMeanNeuropil,key_mean_dff); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFNeuropilSubtr.m b/DataJoint/+IMG/ROIdeltaFNeuropilSubtr.m new file mode 100644 index 0000000..59f2197 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFNeuropilSubtr.m @@ -0,0 +1,122 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +dff_trace : longblob # (s) delta f over f +%} + + +classdef ROIdeltaFNeuropilSubtr < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROITrace & IMG.ROITraceNeuropil; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + running_window=60; %seconds + neuropil_substraction_factor = 0.7; + + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\ROI\Neuropilcorrection\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig 'anm' num2str(key.subject_id) '\' session_date '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + % Will affect the baseline estimation for delfta/F calculation. Will require more fine adjustment for different frame rates + if frame_rate>10 + smooth_window_multiply_factor =5; + else + smooth_window_multiply_factor =1; + end + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + + + + key_ROITrace=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + key_mean_dff = key_ROITrace; + key_mean_f = key_ROITrace; + + Fall=cell2mat(fetchn(IMG.ROITrace &key,'f_trace','ORDER BY roi_number')); + Fall_neuropil=cell2mat(fetchn(IMG.ROITraceNeuropil &key,'f_trace','ORDER BY roi_number')); + + + Fall =Fall - neuropil_substraction_factor*Fall_neuropil; % Neuropil subtraction + + + for iROI=1:1:size(Fall,1) + iROI; + F=Fall(iROI,:); + Fs=smoothdata(F,'gaussian',running_window*smooth_window_multiply_factor); % for baseline estimation only + + running_min=movmin(Fs,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); + baseline=movmax(running_min,[running_window*frame_rate running_window*frame_rate],'Endpoints','fill'); %running max of the running min + baseline2=smoothdata(baseline,'gaussian',running_window*frame_rate); + dFF = (F-baseline2)./baseline2; %deltaF over F + + + k2=key_ROITrace(iROI); + k2.dff_trace = dFF; + k2.session_epoch_type = key.session_epoch_type; + k2.session_epoch_number = key.session_epoch_number; + + insert(self,k2); + + + %save every 1 in 100 rois + if mod(iROI,100)==0 + subplot(3,1,1) + hold on + plot(Fall(iROI,:),'g') + plot(Fall_neuropil(iROI,:),'b') + xlabel('Frames') + ylabel('F') + legend({'F', 'Neuropil','Corrected'}); + title(sprintf('anm %d %s s%d %s ROI = %d',key.subject_id,session_date,key.session,key.session_epoch_type, iROI)); + + subplot(3,1,2) + hold on + plot(Fall(iROI,:) - neuropil_substraction_factor*Fall_neuropil(iROI,:),'k') + title(sprintf('F, Neuropil subtracted, factor = %.2f',neuropil_substraction_factor)); + xlabel('Frames') + ylabel('F') + + subplot(3,1,3) + hold on + plot(dFF,'k') + title(sprintf('dFF, Neuropil subtracted, factor = %.2f',neuropil_substraction_factor)); + xlabel('Frames') + ylabel('dFF') + + + filename=['roi' num2str(iROI) '_epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r50']); + clf + end + end + close all; + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFPeak.m b/DataJoint/+IMG/ROIdeltaFPeak.m new file mode 100644 index 0000000..1bd6aa3 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFPeak.m @@ -0,0 +1,53 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in deltaf_overf +--- +number_of_events : int # + +%} + + +classdef ROIdeltaFPeak < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF; + end + methods(Access=protected) + function makeTuples(self, key) + + threshold_for_event_vector = [0.25, 0.5, 1, 2, 3]; + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + key_ROI=fetch(IMG.ROI*EXP2.SessionEpoch &key,'ORDER BY roi_number'); + + for i_th = 1:1:numel(threshold_for_event_vector) + key_peaks=key_ROI; + threshold = threshold_for_event_vector(i_th); + number_of_events = sum(Fall>=threshold,2); + + for iROI = 1:1:numel(key_ROI) + key_peaks(iROI).number_of_events = number_of_events(iROI); + key_peaks(iROI).threshold_for_event = threshold; + end + insert(self,key_peaks); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/ROIdeltaFStats.m b/DataJoint/+IMG/ROIdeltaFStats.m new file mode 100644 index 0000000..90c0e1f --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFStats.m @@ -0,0 +1,49 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +mean_dff : double # +min_dff : double # +max_dff : double # +median_dff : double # +%} + + +classdef ROIdeltaFStats < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF; + end + methods(Access=protected) + function makeTuples(self, key) + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + key_ROI=fetch(IMG.ROI*EXP2.SessionEpoch & key,'ORDER BY roi_number'); + for iROI = 1:1:numel(key_ROI) + key_ROI(iROI).mean_dff = mean(Fall(iROI,:)); + key_ROI(iROI).min_dff = min(Fall(iROI,:)); + key_ROI(iROI).max_dff = max(Fall(iROI,:)); + key_ROI(iROI).median_dff = median(Fall(iROI,:)); + + end + insert(self,key_ROI); + end + + end +end diff --git a/DataJoint/+IMG/ROIdeltaFStatsNeuropil.m b/DataJoint/+IMG/ROIdeltaFStatsNeuropil.m new file mode 100644 index 0000000..1d233e7 --- /dev/null +++ b/DataJoint/+IMG/ROIdeltaFStatsNeuropil.m @@ -0,0 +1,49 @@ +%{ +# Flourescent trace +-> EXP2.SessionEpoch +-> IMG.ROI +--- +mean_dff : double # +min_dff : double # +max_dff : double # +median_dff : double # +%} + + +classdef ROIdeltaFStatsNeuropil < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + + roi_list=fetchn(IMG.ROIdeltaFNeuropil & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaFNeuropil & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaFNeuropil & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + key_ROI=fetch(IMG.ROI*EXP2.SessionEpoch & key,'ORDER BY roi_number'); + for iROI = 1:1:numel(key_ROI) + key_ROI(iROI).mean_dff = mean(Fall(iROI,:)); + key_ROI(iROI).min_dff = min(Fall(iROI,:)); + key_ROI(iROI).max_dff = max(Fall(iROI,:)); + key_ROI(iROI).median_dff = median(Fall(iROI,:)); + + end + insert(self,key_ROI); + end + + end +end diff --git a/DataJoint/+IMG/ROIdepth.m b/DataJoint/+IMG/ROIdepth.m new file mode 100644 index 0000000..2c33b04 --- /dev/null +++ b/DataJoint/+IMG/ROIdepth.m @@ -0,0 +1,24 @@ +%{ +# ROI (Region of interest - e.g. cells) +-> IMG.Plane +roi_number : int # roi number (restarts for every session) +--- +z_pos_relative : double # roi relative depth, in case of volumetric imaging. Increasing value means deeper. +%} + + +classdef ROIdepth < dj.Imported + properties + keySource = IMG.Plane; + end + methods(Access=protected) + function makeTuples(self, key) + +% z=fetch(IMG.ROI*IMG.PlaneCoordinates & key,'*'); +% key = rmfield(z,{'f_mean', 'roi_number_uid', 'roi_centroid_x','roi_centroid_y','roi_radius','roi_x_pix','roi_y_pix','roi_pixel_weight','neuropil_pixels','f_mean','f_median','flag_mesoscope','x_pos_relative','y_pos_relative'}); +% insert(self,key); + + end + + end +end diff --git a/DataJoint/+IMG/SessionEpochFrame.m b/DataJoint/+IMG/SessionEpochFrame.m new file mode 100644 index 0000000..e272d26 --- /dev/null +++ b/DataJoint/+IMG/SessionEpochFrame.m @@ -0,0 +1,93 @@ +%{ +# Session epoch frames +-> EXP2.SessionEpoch +--- +session_epoch_start_frame : double # (s) session epoch start frame relative to the beginning of the session +session_epoch_end_frame : double # (s) session epoch start frame relative to the beginning of the session +%} + + +classdef SessionEpochFrame < dj.Imported + methods(Access=protected) + function makeTuples(self, key) + + dir_data2 = [dir_data '\' DirNames{iDir}]; + temp = dir(dir_data2); %gets the names of all files and nested directories in this folder + subDirNames = {temp([temp.isdir]).name}; %gets only the names of all files + subDirNames = subDirNames(3:end); + subDirNames = subDirNames(contains(subDirNames,'data')); + + key=rmfield(key,'session_date'); + k=key; + + session_start_time = 0; + session_start_frame = 0; + session_frames_timestamps =[]; + for jDir = 1:1:numel (subDirNames) + dir_data3 = [dir_data2 '\' subDirNames{jDir} '\']; + if contains(subDirNames{jDir},'spont') + k.session_epoch_type = 'spontaneous only'; + elseif contains(subDirNames{jDir},'photo') + k.session_epoch_type = 'spontaneous photostim'; + elseif contains(subDirNames{jDir},'behav') + k.session_epoch_type = 'behavior only'; + end + k.session_epoch_number = jDir; + k2=k; + k3=k; + + allFiles = dir(dir_data3); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + + %initialzing + frames_timestamps=cell(numel(allFileNames),1); + parfor ifile=1:1:numel(allFileNames) + [header]=scanimage.util.opentif([dir_data3,allFileNames{ifile}]); + frames_timestamps{ifile} = header.frameTimestamps_sec; + end + + frames_timestamps=cell2mat(frames_timestamps') + session_start_time; + session_frames_timestamps = [session_frames_timestamps, frames_timestamps]; + + k2.session_epoch_start_time = frames_timestamps(1) ; + k3.session_epoch_start_frame = 1 + session_start_frame; + + k2.session_epoch_end_time = frames_timestamps(end); + k3.session_epoch_end_frame = numel(frames_timestamps) + session_start_frame; + + insert(EXP2.SessionEpoch, k2 ); + session_start_time = k2.session_epoch_end_time + 100; + + insert(IMG.SessionEpochFrame, k3 ); + session_start_frame = k3.session_epoch_end_frame; + + end + k4=key; + k4.frame_timestamps = session_frames_timestamps; + insert(IMG.FrameTime, k4); + + + [header]=scanimage.util.opentif([dir_data3,allFileNames{1}]); + k5=key; + k5.fov_num=1; + k5.fov_name='fov'; + k5.fov_x_size = header.SI.hRoiManager.pixelsPerLine; + k5.fov_y_size = header.SI.hRoiManager.pixelsPerLine; + k5.imaging_frame_rate = header.SI.hRoiManager.scanFrameRate ; + insert(IMG.FOV, k5); + + k6=key; + k6.fov_num=1; + k6.plane_num=1; + k6.channel_num=1; + + insert(IMG.Plane, k6); + + + + insert(self, key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/SessionEpochFramePlane.m b/DataJoint/+IMG/SessionEpochFramePlane.m new file mode 100644 index 0000000..2e9a18c --- /dev/null +++ b/DataJoint/+IMG/SessionEpochFramePlane.m @@ -0,0 +1,46 @@ +%{ +# Session epoch frames for each plane in case some planes has 1 frame less due to volumetric imaging +-> EXP2.SessionEpoch +-> IMG.Plane +--- +session_epoch_plane_start_frame : double # session epoch start frame relative to the beginning of the session, +session_epoch_plane_end_frame : double # session epoch start frame relative to the beginning of the session +missing_frames_epoch_plane : int # how many frames, if any, are missing at the end of the epoch for a given plane +%} + + +classdef SessionEpochFramePlane < dj.Computed + properties + % keySource = EXP2.SessionEpoch*IMG.Plane & IMG.PlaneSuite2p; + keySource = IMG.Plane & IMG.PlaneSuite2p; + + end + methods(Access=protected) + function makeTuples(self, key) + k.session=key.session; + k.subject_id=key.subject_id; + frames_per_folder_all_planes = cell2mat(fetchn(IMG.PlaneSuite2p & k,'frames_per_folder')); + max_frames_all_planes_epochs = max(frames_per_folder_all_planes,[],1); + frames_current_plane = cell2mat(fetchn(IMG.PlaneSuite2p & key,'frames_per_folder')); + + session_epoch_type = fetchn(EXP2.SessionEpoch & key,'session_epoch_type', 'ORDER BY session_epoch_number'); + + end_frame=0; + for i_epochs = 1:1:numel(max_frames_all_planes_epochs) + start_frame = end_frame+1; + end_frame = start_frame + frames_current_plane(i_epochs)-1; + key.session_epoch_plane_start_frame = start_frame; + key.session_epoch_plane_end_frame= end_frame; + if frames_current_plane(i_epochs) < max_frames_all_planes_epochs(i_epochs) + key.missing_frames_epoch_plane = max_frames_all_planes_epochs(i_epochs) - frames_current_plane(i_epochs); + else + key.missing_frames_epoch_plane=0; + end + + key.session_epoch_number = i_epochs; + key.session_epoch_type = session_epoch_type {i_epochs}; + insert(self, key); + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/Volumetric.m b/DataJoint/+IMG/Volumetric.m new file mode 100644 index 0000000..c15b62b --- /dev/null +++ b/DataJoint/+IMG/Volumetric.m @@ -0,0 +1,19 @@ +%{ +# Field of View +-> EXP2.Session +%} + + +classdef Volumetric < dj.Imported + properties + keySource = EXP2.Session; + end + methods(Access=protected) + function makeTuples(self, key) + rel= (IMG.Plane & 'plane_num>1' & key); + if rel.count>0 + insert(self,key) + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+IMG/Zoom2Microns.m b/DataJoint/+IMG/Zoom2Microns.m new file mode 100644 index 0000000..972ea3c --- /dev/null +++ b/DataJoint/+IMG/Zoom2Microns.m @@ -0,0 +1,23 @@ +%{ +# +scanimage_zoom : double +--- +fov_microns_size_x : double +fov_microns_size_y : double + +%} + +classdef Zoom2Microns < dj.Lookup + properties + contents = { + 1.1 891.4 777.4 + 1.2 814.8 732.8 + 1.3 738.2 688.2 + 1.4 661.6 643.6 + 1.5 585 599 + 1.6 576 550 + } + end +end + + diff --git a/DataJoint/+IMG/getSchema.m b/DataJoint/+IMG/getSchema.m new file mode 100644 index 0000000..ff67677 --- /dev/null +++ b/DataJoint/+IMG/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'IMG', 'arseny_learning_imaging'); +end +obj = schemaObject; +end diff --git a/DataJoint/+LAB/AnimalSource.m b/DataJoint/+LAB/AnimalSource.m new file mode 100644 index 0000000..2a8cd77 --- /dev/null +++ b/DataJoint/+LAB/AnimalSource.m @@ -0,0 +1,17 @@ +%{ +# +animal_source : varchar(30) # +%} + + +classdef AnimalSource < dj.Lookup + properties + contents = { + 'Jackson Labs' + 'Charles River' + 'MMRRC' + 'Taconic' + 'Other' + } + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/BrainArea.m b/DataJoint/+LAB/BrainArea.m new file mode 100644 index 0000000..8094d76 --- /dev/null +++ b/DataJoint/+LAB/BrainArea.m @@ -0,0 +1,17 @@ +%{ +# +brain_area="ALM" : varchar(32) # +--- +brain_area_description=null : varchar(1000) # +%} + + +classdef BrainArea < dj.Lookup + properties + contents = { + 'ALM' 'anterior lateral motor cortex' + 'vS1' 'vibrissal primary somatosensory cortex ("barrel cortex")' + 'all' 'all areas' + } + end +end diff --git a/DataJoint/+LAB/CompleteGenotype.m b/DataJoint/+LAB/CompleteGenotype.m new file mode 100644 index 0000000..7dbb30f --- /dev/null +++ b/DataJoint/+LAB/CompleteGenotype.m @@ -0,0 +1,32 @@ +%{ +# +-> LAB.Subject +--- +complete_genotype : varchar(1000) # +%} + + +classdef CompleteGenotype < dj.Computed + + methods(Access=protected) + + function makeTuples(self, key) + + gene_modification = fetchn(LAB.SubjectGeneModification & key,'gene_modification'); + + complete_genotype = []; %initializing + for ii=1:1:numel(gene_modification) %concatenate gene_modifications + if ii==1 + complete_genotype = gene_modification{ii}; + else + complete_genotype = [complete_genotype ' X ' gene_modification{ii}]; + end + end + + key.complete_genotype = complete_genotype; + self.insert(key) + + end + end + +end \ No newline at end of file diff --git a/DataJoint/+LAB/Hemisphere.m b/DataJoint/+LAB/Hemisphere.m new file mode 100644 index 0000000..bf0f57c --- /dev/null +++ b/DataJoint/+LAB/Hemisphere.m @@ -0,0 +1,15 @@ +%{ +# +hemisphere : varchar(12) +%} + + +classdef Hemisphere < dj.Lookup + properties + contents = { + 'left' + 'right' + 'both' + } + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/ModifiedGene.m b/DataJoint/+LAB/ModifiedGene.m new file mode 100644 index 0000000..1be5225 --- /dev/null +++ b/DataJoint/+LAB/ModifiedGene.m @@ -0,0 +1,10 @@ +%{ +# +gene_modification : varchar(60) # +--- +gene_modification_description : varchar(1000) # +%} + + +classdef ModifiedGene < dj.Manual +end diff --git a/DataJoint/+LAB/Person.m b/DataJoint/+LAB/Person.m new file mode 100644 index 0000000..c98d4e9 --- /dev/null +++ b/DataJoint/+LAB/Person.m @@ -0,0 +1,10 @@ +%{ +# +username : varchar(24) # +--- +fullname : varchar(255) # +%} + + +classdef Person < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/Rig.m b/DataJoint/+LAB/Rig.m new file mode 100644 index 0000000..b308e82 --- /dev/null +++ b/DataJoint/+LAB/Rig.m @@ -0,0 +1,11 @@ +%{ +# +rig : varchar(24) # +--- +room : varchar(20) # example 2w.342 +rig_description : varchar(1024) # +%} + + +classdef Rig < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/Serotype.m b/DataJoint/+LAB/Serotype.m new file mode 100644 index 0000000..39cb12c --- /dev/null +++ b/DataJoint/+LAB/Serotype.m @@ -0,0 +1,8 @@ +%{ +# +serotype : varchar(60) # +%} + + +classdef Serotype < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/SkullReference.m b/DataJoint/+LAB/SkullReference.m new file mode 100644 index 0000000..6ad753a --- /dev/null +++ b/DataJoint/+LAB/SkullReference.m @@ -0,0 +1,14 @@ +%{ +# +skull_reference : varchar(60) # +%} + + +classdef SkullReference < dj.Lookup + properties + contents = { + 'Bregma' + 'Lambda' + } + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/Subject.m b/DataJoint/+LAB/Subject.m new file mode 100644 index 0000000..14e3bb8 --- /dev/null +++ b/DataJoint/+LAB/Subject.m @@ -0,0 +1,14 @@ +%{ +# +subject_id : int # institution 6 digit animal ID +--- +-> LAB.Person +cage_number : int # institution 6 digit cage ID +date_of_birth : date # format: yyyy-mm-dd +sex : enum('M','F','Unknown') # +-> LAB.AnimalSource +%} + + +classdef Subject < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/SubjectGeneModification.m b/DataJoint/+LAB/SubjectGeneModification.m new file mode 100644 index 0000000..905be78 --- /dev/null +++ b/DataJoint/+LAB/SubjectGeneModification.m @@ -0,0 +1,15 @@ +%{ +# Subject gene modifications +-> LAB.Subject +-> LAB.ModifiedGene +--- +zygosity="Unknown" : enum('Het','Hom','Unknown') # +type="Unknown" : enum('Knock-in','Transgene','Unknown') # +%} + + +classdef SubjectGeneModification < dj.Part + properties(SetAccess=protected) + master= LAB.Subject + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/Surgery.m b/DataJoint/+LAB/Surgery.m new file mode 100644 index 0000000..19b761a --- /dev/null +++ b/DataJoint/+LAB/Surgery.m @@ -0,0 +1,14 @@ +%{ +# +-> LAB.Subject +surgery_id : int # surgery number +--- +-> LAB.Person +start_time : datetime # start time +end_time : datetime # end time +surgery_description : varchar(1000) # +%} + + +classdef Surgery < dj.Manual +end diff --git a/DataJoint/+LAB/SurgeryLocation.m b/DataJoint/+LAB/SurgeryLocation.m new file mode 100644 index 0000000..0603630 --- /dev/null +++ b/DataJoint/+LAB/SurgeryLocation.m @@ -0,0 +1,11 @@ +%{ +# Other things you did to the animal +-> LAB.SurgeryProcedure +--- +-> LAB.Hemisphere +-> LAB.BrainArea +%} + + +classdef SurgeryLocation < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/SurgeryProcedure.m b/DataJoint/+LAB/SurgeryProcedure.m new file mode 100644 index 0000000..8714b75 --- /dev/null +++ b/DataJoint/+LAB/SurgeryProcedure.m @@ -0,0 +1,18 @@ +%{ +# Other things you did to the animal +-> LAB.Surgery +procedure_id : int # +--- +-> LAB.SkullReference +ml_location=null : decimal(8,3) # um from ref left is positive +ap_location=null : decimal(8,3) # um from ref anterior is positive +dv_location=null : decimal(8,3) # um from dura dorsal is positive +surgery_procedure_description : varchar(1000) # +%} + + +classdef SurgeryProcedure < dj.Part + properties(SetAccess=protected) + master= LAB.Surgery + end +end diff --git a/DataJoint/+LAB/SurgeryVirusInjection.m b/DataJoint/+LAB/SurgeryVirusInjection.m new file mode 100644 index 0000000..f0bf46e --- /dev/null +++ b/DataJoint/+LAB/SurgeryVirusInjection.m @@ -0,0 +1,21 @@ +%{ +# Virus injections +-> LAB.Surgery +injection_id : int # +--- +-> LAB.Virus +-> LAB.SkullReference +ml_location : decimal(8,3) # um from ref left is positive +ap_location : decimal(8,3) # um from ref anterior is positive +dv_location : decimal(8,3) # um from dura dorsal is positive +volume : decimal(10,3) # in nl +dilution : decimal(10,2) # 1 to how much +surgery_virus_injection_description : varchar(1000) # +%} + + +classdef SurgeryVirusInjection < dj.Part + properties(SetAccess=protected) + master= LAB.Surgery + end +end diff --git a/DataJoint/+LAB/Virus.m b/DataJoint/+LAB/Virus.m new file mode 100644 index 0000000..8c1bb61 --- /dev/null +++ b/DataJoint/+LAB/Virus.m @@ -0,0 +1,16 @@ +%{ +# +virus_id : int unsigned # +--- +-> LAB.VirusSource +-> LAB.Serotype +-> LAB.Person +virus_name : varchar(256) # +titer : decimal(20,1) # +order_date : date # +remarks : varchar(256) # +%} + + +classdef Virus < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/VirusNotes.m b/DataJoint/+LAB/VirusNotes.m new file mode 100644 index 0000000..20eb834 --- /dev/null +++ b/DataJoint/+LAB/VirusNotes.m @@ -0,0 +1,14 @@ +%{ +# Notes for virus +-> LAB.Virus +note_id : int # +--- +note : varchar(256) # +%} + + +classdef VirusNotes < dj.Part + properties(SetAccess=protected) + master= LAB.Virus + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/VirusSource.m b/DataJoint/+LAB/VirusSource.m new file mode 100644 index 0000000..2d0b321 --- /dev/null +++ b/DataJoint/+LAB/VirusSource.m @@ -0,0 +1,17 @@ +%{ +# +virus_source : varchar(60) # +%} + + +classdef VirusSource < dj.Lookup + properties + contents = { + 'Janelia' + 'UPenn' + 'Addgene' + 'UNC' + 'Other' + } + end +end \ No newline at end of file diff --git a/DataJoint/+LAB/WaterRestriction.m b/DataJoint/+LAB/WaterRestriction.m new file mode 100644 index 0000000..3abe3de --- /dev/null +++ b/DataJoint/+LAB/WaterRestriction.m @@ -0,0 +1,13 @@ +%{ +# +-> LAB.Subject +--- +water_restriction_number : varchar(16) # WR number +cage_number : int # +wr_start_date : date # +wr_start_weight : decimal(6,3) # +%} + + +classdef WaterRestriction < dj.Manual +end \ No newline at end of file diff --git a/DataJoint/+LAB/getSchema.m b/DataJoint/+LAB/getSchema.m new file mode 100644 index 0000000..871eb4c --- /dev/null +++ b/DataJoint/+LAB/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'LAB', 'map_lab'); +end +obj = schemaObject; +end diff --git a/DataJoint/+LICK2D/DistanceAngleSpikes.m b/DataJoint/+LICK2D/DistanceAngleSpikes.m new file mode 100644 index 0000000..185ecaa --- /dev/null +++ b/DataJoint/+LICK2D/DistanceAngleSpikes.m @@ -0,0 +1,44 @@ +%{ +# +-> EXP2.SessionEpoch +vn_mises_correlation_treshold : double # +column_radius : double # +--- +theta_lateral_distance : blob # +theta_lateral_distance_shuffled : blob # +bins_lateral_distance : blob # + +theta_axial_distance : blob # +theta_axial_distance_shuffled : blob # +bins_axial_distance : blob # +%} + + +classdef DistanceAngleSpikes < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & LICK2D.ROILick2DangleSpikes; + + end + methods(Access=protected) + function makeTuples(self, key) + + + flag_spikes = 1; % 1 spikes, 0 dff + VM_threshold_vector = [0.5, 0.75]; + column_radius_vector = [20, 30, 40, 50]; + + rel_temp = IMG.Volumetric & key; + if rel_temp.count ==0 + column_radius_vector=0; + end + + for i_th = 1:1:numel(VM_threshold_vector) + for i_c = 1:1:numel(column_radius_vector) + key=Lick2D_DistanceAngle(key, flag_spikes, VM_threshold_vector(i_th), column_radius_vector(i_c)); + insert(self,key); + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/DistanceAngularTuningCorrVolumetricSpikes.m b/DataJoint/+LICK2D/DistanceAngularTuningCorrVolumetricSpikes.m new file mode 100644 index 0000000..f47bb53 --- /dev/null +++ b/DataJoint/+LICK2D/DistanceAngularTuningCorrVolumetricSpikes.m @@ -0,0 +1,48 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +goodness_of_fit_vmises : double # +--- +distance_corr_2d :blob # mat of average pairwise pearson coeff of cells, binned according lateral X axial distance +distance_corr_lateral :blob # binned according lateral X axial distance +distance_corr_axial_inside_column :blob # binned according lateral X axial distance +distance_corr_axial_outside_column :blob # binned according lateral X axial distance +axial_distance_bins :blob # axial bins +lateral_distance_bins :blob # axial bins +num_cells_included :int # +%} + + +classdef DistanceAngularTuningCorrVolumetricSpikes < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & LICK2D.ROILick2DangleSpikes & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy)&IMG.Volumetric ; + end + methods(Access=protected) + function makeTuples(self, key) + + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\Lick2D\population\corr_theta_tuning_psth\']; + + goodness_of_fit_vmises_threshold=[0, 0.25, 0.5, 0.75]; + + for i_c = 1:1:numel(goodness_of_fit_vmises_threshold) + rel_roi = (IMG.ROI - IMG.ROIBad) & key & (LICK2D.ROILick2DangleSpikes & sprintf('goodness_of_fit_vmises>=%.2f',goodness_of_fit_vmises_threshold(i_c))); + rel_data = LICK2D.ROILick2DangleSpikes & rel_roi & key; + fn_compute_distance_psth_correlation(rel_roi, rel_data, key,self, dir_save_fig, goodness_of_fit_vmises_threshold(i_c)); + end + + end + end + +end + diff --git a/DataJoint/+LICK2D/DistancePSTHCorrVolumetricSpikes.m b/DataJoint/+LICK2D/DistancePSTHCorrVolumetricSpikes.m new file mode 100644 index 0000000..f205617 --- /dev/null +++ b/DataJoint/+LICK2D/DistancePSTHCorrVolumetricSpikes.m @@ -0,0 +1,49 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +odd_even_corr_threshold : double # +--- +distance_corr_2d :blob # mat of average pairwise pearson coeff of cells, binned according lateral X axial distance +distance_corr_lateral :blob # binned according lateral X axial distance +distance_corr_axial_inside_column :blob # binned according lateral X axial distance +distance_corr_axial_outside_column :blob # binned according lateral X axial distance +axial_distance_bins :blob # axial bins +lateral_distance_bins :blob # axial bins +num_cells_included :int # +%} + + +classdef DistancePSTHCorrVolumetricSpikes < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & LICK2D.ROILick2DPSTHSpikes & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy)&IMG.Volumetric ; + end + methods(Access=protected) + function makeTuples(self, key) + + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\Lick2D\population\corr_distance_psth\']; + + psth_odd_even_corr_threshold=[-1, 0, 0.25, 0.5, 0.75]; + + for i_c = 1:1:numel(psth_odd_even_corr_threshold) + rel_roi = (IMG.ROI - IMG.ROIBad) & key & (LICK2D.ROILick2DPSTHStatsSpikes & sprintf('psth_odd_even_corr>=%.2f',psth_odd_even_corr_threshold(i_c))); + rel_data = LICK2D.ROILick2DPSTHSpikes & rel_roi & key; + key.odd_even_corr_threshold = psth_odd_even_corr_threshold(i_c); + fn_compute_distance_psth_correlation(rel_roi, rel_data, key,self, dir_save_fig); + end + + end + end + +end + diff --git a/DataJoint/+LICK2D/DistanceQuadrantsCorrVolumetricSpikes.m b/DataJoint/+LICK2D/DistanceQuadrantsCorrVolumetricSpikes.m new file mode 100644 index 0000000..34d2d56 --- /dev/null +++ b/DataJoint/+LICK2D/DistanceQuadrantsCorrVolumetricSpikes.m @@ -0,0 +1,49 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +odd_even_corr_threshold : double # +--- +distance_corr_2d :blob # mat of average pairwise pearson coeff of cells, binned according lateral X axial distance +distance_corr_lateral :blob # binned according lateral X axial distance +distance_corr_axial_inside_column :blob # binned according lateral X axial distance +distance_corr_axial_outside_column :blob # binned according lateral X axial distance +axial_distance_bins :blob # axial bins +lateral_distance_bins :blob # axial bins +num_cells_included :int # +%} + + +classdef DistanceQuadrantsCorrVolumetricSpikes < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & LICK2D.ROILick2DQuadrantsSpikes & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy)&IMG.Volumetric ; + end + methods(Access=protected) + function makeTuples(self, key) + + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\Lick2D\population\corr_distance_quadrants\']; + + psth_quadrants_odd_even_corr_threshold=[-1, 0, 0.25, 0.5, 0.75]; + + for i_c = 1:1:numel(psth_quadrants_odd_even_corr_threshold) + rel_roi = (IMG.ROI - IMG.ROIBad) & key & (LICK2D.ROILick2DQuadrantsSpikes & sprintf('psth_quadrants_odd_even_corr>=%.2f',psth_quadrants_odd_even_corr_threshold(i_c))); + rel_data = LICK2D.ROILick2DQuadrantsSpikes & rel_roi & key; + key.odd_even_corr_threshold = psth_quadrants_odd_even_corr_threshold(i_c); + fn_compute_distance_psth_correlation(rel_roi, rel_data, key,self, dir_save_fig); + end + + end + end + +end + diff --git a/DataJoint/+LICK2D/Jobs.m b/DataJoint/+LICK2D/Jobs.m new file mode 100644 index 0000000..ff4ae70 --- /dev/null +++ b/DataJoint/+LICK2D/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +LICK2D +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+LICK2D/PLOTCameras.m b/DataJoint/+LICK2D/PLOTCameras.m new file mode 100644 index 0000000..a5c493a --- /dev/null +++ b/DataJoint/+LICK2D/PLOTCameras.m @@ -0,0 +1,46 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef PLOTCameras < dj.Computed + properties + + keySource = EXP2.Session & TRACKING.TrackingTrial; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\cameras\']; + + session_date = fetch1(EXP2.Session & key,'session_date'); + filename = [ 'camera_anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + + + + st=fetchn((TRACKING.TrackingTrial & key)-TRACKING.TrackingTrialBad,'tracking_start_time'); +% histogram([st],[-5:0.1:5]) + histogram([st]) + + title(sprintf('tracking start time to mouth\n anm %d s%d %s', key.subject_id, key.session, session_date)); + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + filename =[filename]; + + % filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/PLOTLickport.m b/DataJoint/+LICK2D/PLOTLickport.m new file mode 100644 index 0000000..80f95fe --- /dev/null +++ b/DataJoint/+LICK2D/PLOTLickport.m @@ -0,0 +1,87 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef PLOTLickport < dj.Computed + properties + + keySource = EXP2.Session & TRACKING.VideoLickportPositionTrial; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\lickport_position_video\']; + + session_date = fetch1(EXP2.Session & key,'session_date'); + filename = [ 'lickport_anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + + + + L=fetch((TRACKING.VideoLickportPositionTrial*EXP2.TrialLickBlock & key)-TRACKING.VideoGroomingTrial,'*'); + roll=[L.roll_deg]; + + + if isnan(roll) %if there is no roll + roll=0; + end + roll=mean(roll); + + x = [L.lickport_x]; + z=[L.lickport_z]; + + + for i = 1:1:numel(L) + R = [cosd(roll) -sind(roll); sind(roll) cosd(roll)]; + point = [x(i);z(i)]; + rotpoint = R*point; + x_rotated(i) = rotpoint(1); + z_rotated(i) = rotpoint(2); + end + + + % We correct for Z that arrises from camera non-planarity with + % the lickport motion + poly_fit = polyfit(x_rotated',z_rotated',1); + z_corrected = z_rotated -(x_rotated*poly_fit(1)); + + + subplot(2,2,1) + plot(x,z,'.') + xlabel('Medio-lateral (px)') + ylabel('Dorsal-Ventral (px)'); + title(sprintf('Lickport position relative to mouth\n anm %d s%d %s', key.subject_id, key.session, session_date)); + + subplot(2,2,2) + plot(x_rotated,z_rotated,'.') + xlabel('Medio-lateral (px)') + ylabel('Dorsal-Ventral (px)'); + title(sprintf('Rotated roll=%.1f',mean(roll))); + + subplot(2,2,3) + plot(x_rotated,z_corrected,'.') + xlabel('Medio-lateral (px)') + ylabel('Dorsal-Ventral (px)'); + title(sprintf('Z corrected')); + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + filename =[filename]; + + % filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROIBodypartCorr.m b/DataJoint/+LICK2D/ROIBodypartCorr.m new file mode 100644 index 0000000..5e9358a --- /dev/null +++ b/DataJoint/+LICK2D/ROIBodypartCorr.m @@ -0,0 +1,27 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +-> TRACKING.VideoBodypartType +threshold_for_event : double # threshold in deltaf_overf +--- +corr_with_bodypart : double # correlation between dff and bodypart trace +%} + + +classdef ROIBodypartCorr < dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope & TRACKING.VideoBodypartTrajectTrial; + end + methods(Access=protected) + function makeTuples(self, key) + threshold_for_event=[0,0.25]; + rel_data = IMG.ROIdeltaF; + bodypart_name={'pawfrontleft','pawfrontright','whiskers'}; + for i=1:1:numel(bodypart_name) + key.bodypart_name = bodypart_name{i}; + fn_compute_ActivityBodypart_corr(key,self, rel_data, threshold_for_event); + end + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DBlockStats.m b/DataJoint/+LICK2D/ROILick2DBlockStats.m new file mode 100644 index 0000000..70c2bab --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DBlockStats.m @@ -0,0 +1,31 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +block_mean_first=null : double # %averaged across trial time, and cells +block_mean_begin=null : double # +block_mean_mid=null : double # +block_mean_end=null : double # +block_mean_pval_first_begin=null : double # +block_mean_pval_first_end=null : double # +block_mean_pval_begin_end=null : double # + +block_peak_first=null : double # response at peak. peak determined based on full psth, averaged across cells +block_peak_begin=null : double # +block_peak_mid=null : double # +block_peak_end=null : double # +block_peak_pval_first_begin=null : double # +block_peak_pval_first_end=null : double # +block_peak_pval_begin_end=null : double # +%} + + +classdef ROILick2DBlockStats < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DBlockStatsSpikes.m b/DataJoint/+LICK2D/ROILick2DBlockStatsSpikes.m new file mode 100644 index 0000000..e5c515f --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DBlockStatsSpikes.m @@ -0,0 +1,31 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +block_mean_first=null : float # %averaged across trial time, and cells +block_mean_begin=null : float # +block_mean_mid=null : float # +block_mean_end=null : float # +block_mean_pval_first_begin=null : float # +block_mean_pval_first_end=null : float # +block_mean_pval_begin_end=null : float # + +block_peak_first=null : float # response at peak. peak determined based on full psth, averaged across cells +block_peak_begin=null : float # +block_peak_mid=null : float # +block_peak_end=null : float # +block_peak_pval_first_begin=null : float # +block_peak_pval_first_end=null : float # +block_peak_pval_begin_end=null : float # +%} + + +classdef ROILick2DBlockStatsSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DLickRate.m b/DataJoint/+LICK2D/ROILick2DLickRate.m new file mode 100644 index 0000000..25a73b1 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DLickRate.m @@ -0,0 +1,23 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in deltaf_overf +--- +corr_with_licks : double # correlation between dff and lick rate +%} + + +classdef ROILick2DLickRate < dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope & TRACKING.VideoNthLickTrial; + end + methods(Access=protected) + function makeTuples(self, key) + threshold_for_event=[0,0.25,0.5,1]; + rel_data = IMG.ROIdeltaF; + fn_computer_Lick2DLickRate(key,self, rel_data, threshold_for_event); + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DPSTH.m b/DataJoint/+LICK2D/ROILick2DPSTH.m new file mode 100644 index 0000000..20c001f --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DPSTH.m @@ -0,0 +1,37 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth : blob # averaged_over_all_positions +psth_stem : blob # +psth_odd : blob # +psth_even : blob # + +psth_first=null : blob # first trial in block +psth_begin=null : blob # trials in the beginning of the block +psth_mid=null : blob # trials in the middle of the block +psth_end=null : blob # trials in the end of the block +psth_small=null : blob # during no rewarded trials +psth_regular=null : blob # during trials with typical reward +psth_large=null : blob # during trials with large reward + +psth_time : longblob # time vector +%} + + +classdef ROILick2DPSTH < dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data = IMG.ROIdeltaF; + fr_interval = [-1, 3]; %s + %fr_interval = [-2, 5]; % used it for the mesoscope + fn_computer_Lick2DPSTH(key,self, rel_data,fr_interval); + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DPSTHSpikes.m b/DataJoint/+LICK2D/ROILick2DPSTHSpikes.m new file mode 100644 index 0000000..4c0c154 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DPSTHSpikes.m @@ -0,0 +1,39 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth : blob # averaged_over_all_positions +psth_stem : blob # +psth_odd : blob # +psth_even : blob # + +psth_first=null : blob # first trial in block +psth_begin=null : blob # trials in the beginning of the block +psth_mid=null : blob # trials in the middle of the block +psth_end=null : blob # trials in the end of the block +psth_small=null : blob # during no rewarded trials +psth_regular=null : blob # during trials with typical reward +psth_large=null : blob # during trials with large reward + +psth_time : longblob # time vector +%} + + +classdef ROILick2DPSTHSpikes < dj.Imported + properties +% keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock) - IMG.Mesoscope; + + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data = IMG.ROISpikes; +% fr_interval = [-1, 3]; %s + fr_interval = [-2, 5]; % used it for the mesoscope + fn_computer_Lick2DPSTH(key,self, rel_data,fr_interval); + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DPSTHStats.m b/DataJoint/+LICK2D/ROILick2DPSTHStats.m new file mode 100644 index 0000000..06723ae --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DPSTHStats.m @@ -0,0 +1,32 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth_odd_even_corr : double # +peaktime_psth : double # peak time of the psth +peaktime_psth_odd : double # +peaktime_psth_even : double # + +peaktime_psth_first=null : double # first trial in block +peaktime_psth_begin=null : double # trials in the beginning of the block +peaktime_psth_mid=null : double # trials in the middle of the block +peaktime_psth_end=null : double # trials in the end of the block +peaktime_psth_small=null : double # during no rewarded trials +peaktime_psth_regular=null : double # during trials with typical reward +peaktime_psth_large=null : double # during trials with large reward + +%} + + +classdef ROILick2DPSTHStats < dj.Part + properties(SetAccess=protected) + master=LICK2D.ROILick2DPSTH + end + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DPSTHStatsSpikes.m b/DataJoint/+LICK2D/ROILick2DPSTHStatsSpikes.m new file mode 100644 index 0000000..7df03b6 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DPSTHStatsSpikes.m @@ -0,0 +1,27 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth_odd_even_corr : float # +peaktime_psth : float # peak time of the psth +peaktime_psth_odd : float # +peaktime_psth_even : float # + +peaktime_psth_first=null : float # first trial in block +peaktime_psth_begin=null : float # trials in the beginning of the block +peaktime_psth_mid=null : float # trials in the middle of the block +peaktime_psth_end=null : float # trials in the end of the block +peaktime_psth_small=null : float # during no rewarded trials +peaktime_psth_regular=null : float # during trials with typical reward +peaktime_psth_large=null : float # during trials with large reward + +%} + + +classdef ROILick2DPSTHStatsSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DQuadrants.m b/DataJoint/+LICK2D/ROILick2DQuadrants.m new file mode 100644 index 0000000..196335d --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DQuadrants.m @@ -0,0 +1,33 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth_quadrants : blob # PSTH concatenated for the 4 different quadrants +psth_quadrants_stem : blob # +psth_quadrants_odd : blob # +psth_quadrants_even : blob # +psth_quadrants_odd_even_corr : float # +psth_quadrants_time : blob # time vector, for the non-concatenated PSTH +%} + + +classdef ROILick2DQuadrants < dj.Imported + properties + keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"') & IMG.Mesoscope; +% keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"') & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\lickport_position_quadrants\']; + + rel_data = IMG.ROIdeltaF; +% fr_interval = [-1, 3]; %s + fr_interval = [-2, 5]; % used it for the mesoscope + fn_computer_Lick2DQuadrantsPSTH(key,self, rel_data,fr_interval,dir_current_fig); + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DQuadrantsSpikes.m b/DataJoint/+LICK2D/ROILick2DQuadrantsSpikes.m new file mode 100644 index 0000000..8fdf273 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DQuadrantsSpikes.m @@ -0,0 +1,33 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +psth_quadrants : blob # PSTH concatenated for the 4 different quadrants +psth_quadrants_stem : blob # +psth_quadrants_odd : blob # +psth_quadrants_even : blob # +psth_quadrants_odd_even_corr : float # +psth_quadrants_time : blob # time vector, for the non-concatenated PSTH +%} + + +classdef ROILick2DQuadrantsSpikes < dj.Imported + properties +% keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"') - IMG.Mesoscope; + keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"') & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\lickport_position_quadrants\']; + + rel_data = IMG.ROISpikes; +% fr_interval = [-1, 3]; %s + fr_interval = [-2, 5]; % used it for the mesoscope + fn_computer_Lick2DQuadrantsPSTH(key,self, rel_data,fr_interval,dir_current_fig); + + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DRewardStats.m b/DataJoint/+LICK2D/ROILick2DRewardStats.m new file mode 100644 index 0000000..766e812 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DRewardStats.m @@ -0,0 +1,30 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +reward_mean_small=null : double # %averaged across trial time, and cells +reward_mean_regular=null : double # +reward_mean_large=null : double # +reward_mean_pval_regular_small=null : double # +reward_mean_pval_regular_large=null : double # +reward_mean_pval_small_large=null : double # + +reward_peak_small=null : double # response at peak. peak determined based on full psth, averaged across cells +reward_peak_regular=null : double # +reward_peak_large=null : double # +reward_peak_pval_regular_small=null : double # +reward_peak_pval_regular_large=null : double # +reward_peak_pval_small_large=null : double # +%} + + +classdef ROILick2DRewardStats < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end + diff --git a/DataJoint/+LICK2D/ROILick2DRewardStatsSpikes.m b/DataJoint/+LICK2D/ROILick2DRewardStatsSpikes.m new file mode 100644 index 0000000..d1b5126 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DRewardStatsSpikes.m @@ -0,0 +1,30 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +reward_mean_small=null : float # %averaged across trial time, and cells +reward_mean_regular=null : float # +reward_mean_large=null : float # +reward_mean_pval_regular_small=null : float # +reward_mean_pval_regular_large=null : float # +reward_mean_pval_small_large=null : float # + +reward_peak_small=null : float # response at peak. peak determined based on full psth, averaged across cells +reward_peak_regular=null : float # +reward_peak_large=null : float # +reward_peak_pval_regular_small=null : float # +reward_peak_pval_regular_large=null : float # +reward_peak_pval_small_large=null : float # +%} + + +classdef ROILick2DRewardStatsSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end + diff --git a/DataJoint/+LICK2D/ROILick2DSelectivity.m b/DataJoint/+LICK2D/ROILick2DSelectivity.m new file mode 100644 index 0000000..5ec9a5c --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DSelectivity.m @@ -0,0 +1,60 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_preferred : blob # psth averaged over the preferred map position/positions +psth_preferred_odd : blob # +psth_preferred_even : blob # +psth_non_preferred : blob # psth averaged over all non preferred map positions + +selectivity : blob # psth preferred - non-preferred +selectivity_odd : blob # +selectivity_even : blob # + +selectivity_first=null : blob # first trial in block +selectivity_begin=null : blob # trials in the beginning of the block +selectivity_mid=null : blob # trials in the middle of the block +selectivity_end=null : blob # trials in the end of the block +selectivity_small=null : blob # during no rewarded trials +selectivity_regular=null : blob # during trials with typical reward +selectivity_large=null : blob # during trials with large reward + +selectivity_time : blob # time vector + +%} + + +classdef ROILick2DSelectivity < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock; + end + methods(Access=protected) + function makeTuples(self, key) + % for i_numbin=[4] + % key.number_of_bins = i_numbin; + % + % % key.fr_interval_start = -2000; + % % key.fr_interval_end = 0; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = -1000; + % % key.fr_interval_end = 0; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = -1000; + % % key.fr_interval_end = 1000; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = 0; + % % key.fr_interval_end = 1000; + % % fn_computer_Lick2Dmap(key,self); + % + % key.fr_interval_start = -1000; + % key.fr_interval_end = 2000; + % fn_computer_Lick2Dselectivity(key,self); + %end + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DSelectivitySpikes.m b/DataJoint/+LICK2D/ROILick2DSelectivitySpikes.m new file mode 100644 index 0000000..5f95210 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DSelectivitySpikes.m @@ -0,0 +1,60 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_preferred : blob # psth averaged over the preferred map position/positions +psth_preferred_odd : blob # +psth_preferred_even : blob # +psth_non_preferred : blob # psth averaged over all non preferred map positions + +selectivity : blob # psth preferred - non-preferred +selectivity_odd : blob # +selectivity_even : blob # + +selectivity_first=null : blob # first trial in block +selectivity_begin=null : blob # trials in the beginning of the block +selectivity_mid=null : blob # trials in the middle of the block +selectivity_end=null : blob # trials in the end of the block +selectivity_small=null : blob # during no rewarded trials +selectivity_regular=null : blob # during trials with typical reward +selectivity_large=null : blob # during trials with large reward + +selectivity_time : blob # time vector + +%} + + +classdef ROILick2DSelectivitySpikes < dj.Imported + properties + keySource = EXP2.SessionEpoch & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock; + end + methods(Access=protected) + function makeTuples(self, key) + % for i_numbin=[4] + % key.number_of_bins = i_numbin; + % + % % key.fr_interval_start = -2000; + % % key.fr_interval_end = 0; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = -1000; + % % key.fr_interval_end = 0; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = -1000; + % % key.fr_interval_end = 1000; + % % fn_computer_Lick2Dmap(key,self); + % % + % % key.fr_interval_start = 0; + % % key.fr_interval_end = 1000; + % % fn_computer_Lick2Dmap(key,self); + % + % key.fr_interval_start = -1000; + % key.fr_interval_end = 2000; + % fn_computer_Lick2Dselectivity(key,self); + %end + end + end +end diff --git a/DataJoint/+LICK2D/ROILick2DSelectivityStats.m b/DataJoint/+LICK2D/ROILick2DSelectivityStats.m new file mode 100644 index 0000000..581aa3e --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DSelectivityStats.m @@ -0,0 +1,36 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_preferred_odd_even_corr=null : double # +selectivity_odd_even_corr=null : double # +peaktime_preferred=null : double # peak time of the psth +peaktime_preferred_odd=null : double # +peaktime_preferred_even=null : double # + +peaktime_selectivity : double # peak time of the psth +peaktime_selectivity_odd : double # +peaktime_selectivity_even : double # +peaktime_selectivity_first=null : double # first trial in block +peaktime_selectivity_begin=null : double # trials in the beginning of the block +peaktime_selectivity_mid=null : double # trials in the middle of the block +peaktime_selectivity_end=null : double # trials in the end of the block +peaktime_selectivity_small=null : double # during no rewarded trials +peaktime_selectivity_regular=null : double # during trials with typical reward +peaktime_selectivity_large=null : double # during trials with large reward + +%} + + +classdef ROILick2DSelectivityStats < dj.Part + properties(SetAccess=protected) + master=LICK2D.ROILick2DSelectivity + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2DSelectivityStatsSpikes.m b/DataJoint/+LICK2D/ROILick2DSelectivityStatsSpikes.m new file mode 100644 index 0000000..fc4cce2 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DSelectivityStatsSpikes.m @@ -0,0 +1,33 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_preferred_odd_even_corr=null : double # +selectivity_odd_even_corr=null : double # +peaktime_preferred=null : double # peak time of the psth +peaktime_preferred_odd=null : double # +peaktime_preferred_even=null : double # + +peaktime_selectivity : double # peak time of the psth +peaktime_selectivity_odd : double # +peaktime_selectivity_even : double # +peaktime_selectivity_first=null : double # first trial in block +peaktime_selectivity_begin=null : double # trials in the beginning of the block +peaktime_selectivity_mid=null : double # trials in the middle of the block +peaktime_selectivity_end=null : double # trials in the end of the block +peaktime_selectivity_small=null : double # during no rewarded trials +peaktime_selectivity_regular=null : double # during trials with typical reward +peaktime_selectivity_large=null : double # during trials with large reward + +%} + + +classdef ROILick2DSelectivityStatsSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2Dangle.m b/DataJoint/+LICK2D/ROILick2Dangle.m new file mode 100644 index 0000000..e26b062 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2Dangle.m @@ -0,0 +1,43 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +preferred_theta=null : double # +rayleigh_length=null : double # +theta_tuning_odd_even_corr = null : double # +preferred_theta_vmises : double # +goodness_of_fit_vmises : double # +theta_tuning_curve_vmises : blob # +theta_tuning_curve : blob # +theta_tuning_curve_odd : blob # +theta_tuning_curve_even : blob # +theta_bins_centers : blob # +number_of_theta_not_nan : int # + +%} + + +classdef ROILick2Dangle< dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\lickport_position_angles\']; + + + rel_data = IMG.ROIdeltaF; + fr_interval = [-1, 3]; %s + %fr_interval = [-2, 5]; % used it for the mesoscope + flag_threshold_events=0; + threshold_events_cutoff=0; + fn_computer_Lick2Dangle(key,self, rel_data,fr_interval,flag_threshold_events,threshold_events_cutoff,dir_current_fig); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2DangleEvents.m b/DataJoint/+LICK2D/ROILick2DangleEvents.m new file mode 100644 index 0000000..1392a2a --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DangleEvents.m @@ -0,0 +1,36 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +preferred_theta=null : double # +rayleigh_length=null : double # +theta_tuning_odd_even_corr = null : double # +preferred_theta_vmises : double # +goodness_of_fit_vmises : double # +theta_tuning_curve_vmises : blob # +theta_tuning_curve : blob # +theta_tuning_curve_odd : blob # +theta_tuning_curve_even : blob # +theta_bins_centers : blob # +%} + + +classdef ROILick2DangleEvents< dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data = IMG.ROIdeltaF; + + flag_threshold_events=1; % threshold the trace, set values EXP2.SessionEpoch +-> IMG.ROI +fr_interval_start : int # %in miliseconds, window to compute the firing rate for the activity maps +fr_interval_end : int # %in miliseconds, window to compute the firing rate for the activity maps +--- +theta_tuning_curve : blob # +theta_tuning_curve_odd : blob # +theta_tuning_curve_even : blob # +theta_bins_centers : blob # +preferred_theta=null : double # +rayleigh_length=null : double # +theta_tuning_odd_even_corr = null : double # +theta_tuning_curve_vmises : blob # +preferred_theta_vmises : double # +goodness_of_fit_vmises : double # +%} + + +classdef ROILick2DangleNeuropil< dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROIdeltaFNeuropil & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + + rel_data = IMG.ROIdeltaFNeuropil; + +% fr_interval = [-1, 3]; %s + fr_interval = [-2, 5]; % used it for the mesoscope + fn_computer_Lick2Dangle(key,self, rel_data, fr_interval); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2DangleSpikes.m b/DataJoint/+LICK2D/ROILick2DangleSpikes.m new file mode 100644 index 0000000..4fad0fb --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DangleSpikes.m @@ -0,0 +1,43 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +preferred_theta=null : double # +rayleigh_length=null : double # +theta_tuning_odd_even_corr = null : double # +preferred_theta_vmises : double # +goodness_of_fit_vmises : double # +theta_tuning_curve_vmises : blob # +theta_tuning_curve : blob # +theta_tuning_curve_odd : blob # +theta_tuning_curve_even : blob # +theta_bins_centers : blob # +number_of_theta_not_nan : int # + +%} + + +classdef ROILick2DangleSpikes< dj.Imported + properties +% keySource = ((EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock) - IMG.Mesoscope; + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\behavior\lickport_position_angles\']; + + + rel_data = IMG.ROISpikes; + fr_interval = [-1, 3]; %s + %fr_interval = [-2, 5]; % used it for the mesoscope + flag_threshold_events=0; + threshold_events_cutoff=0; + fn_computer_Lick2Dangle(key,self, rel_data,fr_interval,flag_threshold_events,threshold_events_cutoff,dir_current_fig); + + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2Dmap.m b/DataJoint/+LICK2D/ROILick2Dmap.m new file mode 100644 index 0000000..a8eab56 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2Dmap.m @@ -0,0 +1,37 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_per_position : longblob # +psth_per_position_odd : longblob # +psth_per_position_even : longblob # +psthmap_time : blob # +lickmap_fr : blob # +lickmap_fr_odd : blob # +lickmap_fr_even : blob # +lickmap_odd_even_corr : double # +pos_x_bins_centers : blob # +pos_z_bins_centers : blob # +information_per_spike : double # +preferred_bin : double # +preferred_radius : double # +%} + + +classdef ROILick2Dmap < dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data = IMG.ROIdeltaF; + fr_interval = [-1, 3]; %s + %fr_interval = [-2, 5]; % used it for the mesoscope + fn_compute_Lick2D_map_and_selectivity(key,self, rel_data, fr_interval); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/ROILick2DmapSpikes.m b/DataJoint/+LICK2D/ROILick2DmapSpikes.m new file mode 100644 index 0000000..9f00310 --- /dev/null +++ b/DataJoint/+LICK2D/ROILick2DmapSpikes.m @@ -0,0 +1,41 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +number_of_bins : int # +--- +psth_per_position : longblob # +psth_per_position_odd : longblob # +psth_per_position_even : longblob # +psthmap_time : blob # +lickmap_fr : blob # +lickmap_fr_odd : blob # +lickmap_fr_even : blob # +lickmap_odd_even_corr : double # +pos_x_bins_centers : blob # +pos_z_bins_centers : blob # +information_per_spike : double # +preferred_bin : double # +preferred_radius : double # +%} + + +classdef ROILick2DmapSpikes < dj.Imported + properties + keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock & IMG.Mesoscope; +% keySource = (EXP2.SessionEpoch*IMG.FOV) & IMG.ROI & EXP2.TrialLickPort & 'session_epoch_type="behav_only"' & EXP2.TrialLickBlock - IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data = IMG.ROISpikes; + +% fr_interval = [-1, 3]; %s + fr_interval = [-2, 5]; % used it for the mesoscope + fn_compute_Lick2D_map_and_selectivity(key,self, rel_data, fr_interval); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+LICK2D/getSchema.m b/DataJoint/+LICK2D/getSchema.m new file mode 100644 index 0000000..b7fae3c --- /dev/null +++ b/DataJoint/+LICK2D/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'LICK2D', 'arseny_learning_lick2d'); +end +obj = schemaObject; +end diff --git a/DataJoint/+PLOTS/Cells2DTuning.m b/DataJoint/+PLOTS/Cells2DTuning.m new file mode 100644 index 0000000..a5135f7 --- /dev/null +++ b/DataJoint/+PLOTS/Cells2DTuning.m @@ -0,0 +1,30 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Cells2DTuning < dj.Computed + properties + + keySource = EXP2.Session & LICK2D.ROILick2Dmap & IMG.Mesoscope; +% keySource = (EXP2.Session & LICK2D.ROILick2DmapSpikes) - IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\Cells\2DTuning\']; + + flag_spikes = 0; % 1 spikes, 0 dff + + plot_one_in_x_cell=10; % e.g. plots one in 20 signficant cell + + PLOTS_Cells2DTuning(key, dir_current_fig,flag_spikes, plot_one_in_x_cell); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Cells2DTuningSpikes.m b/DataJoint/+PLOTS/Cells2DTuningSpikes.m new file mode 100644 index 0000000..d5fe1e6 --- /dev/null +++ b/DataJoint/+PLOTS/Cells2DTuningSpikes.m @@ -0,0 +1,30 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Cells2DTuningSpikes < dj.Computed + properties + +% keySource = (EXP2.Session & LICK2D.ROILick2DangleSpikes) - IMG.Mesoscope; + keySource = (EXP2.Session & LICK2D.ROILick2DangleSpikes) & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\Cells\2DTuning_spikes\mesoscope\']; + + flag_spikes = 1; % 1 spikes, 0 dff + + plot_one_in_x_cell=50; % e.g. plots one in 20 signficant cell + + PLOTS_Cells2DTuning(key, dir_current_fig,flag_spikes, plot_one_in_x_cell); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Cells2DTuningSpikesUnstable.m b/DataJoint/+PLOTS/Cells2DTuningSpikesUnstable.m new file mode 100644 index 0000000..0544cf7 --- /dev/null +++ b/DataJoint/+PLOTS/Cells2DTuningSpikesUnstable.m @@ -0,0 +1,30 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Cells2DTuningSpikesUnstable < dj.Computed + properties + + keySource = (EXP2.Session & LICK2D.ROILick2DangleSpikes) - IMG.Mesoscope; +% keySource = (EXP2.Session & LICK2D.ROILick2DangleSpikes) & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\Cells\2DTuning_spikes\not_mesoscope\unstable\']; + + flag_spikes = 1; % 1 spikes, 0 dff + + plot_one_in_x_cell=50; % e.g. plots one in 20 signficant cell + + PLOTS_Cells2DTuning(key, dir_current_fig,flag_spikes, plot_one_in_x_cell); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/CorrPairwiseDistance.m b/DataJoint/+PLOTS/CorrPairwiseDistance.m new file mode 100644 index 0000000..9b1e13c --- /dev/null +++ b/DataJoint/+PLOTS/CorrPairwiseDistance.m @@ -0,0 +1,65 @@ +%{ +# +-> EXP2.SessionEpoch +%} + + +classdef CorrPairwiseDistance < dj.Computed + properties + + keySource = EXP2.SessionEpoch & POP.CorrPairwiseDistanceSVDSpikes; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\POP\corr_distance_plots\neuropil_subtracted\']; + num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + + k=key; + k.threshold_for_event=0; + + rel_data=POP.CorrPairwiseDistanceSVDSpikes; + % rel_data=POP.CorrPairwiseDistanceSVDSpikes ; + + clf + %Graphics + % %--------------------------------- + % figure; + % set(gcf,'DefaultAxesFontName','helvetica'); + % set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + % set(gcf,'PaperOrientation','portrait'); + % set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + % set(gcf,'color',[1 1 1]); + + for i_c=1:1:numel(num_svd_components_removed_vector) + k.num_svd_components_removed=num_svd_components_removed_vector(i_c); + DATA=fetch(rel_data & k,'*'); + + corr_histogram = DATA.corr_histogram; + corr_histogram_bins = DATA.corr_histogram_bins; + corr_histogram_bins=corr_histogram_bins(1:1:end-1) + diff(corr_histogram_bins); + + + distance_corr_all = DATA.distance_corr_all; + distance_bins = DATA.distance_bins; + distance_bins=distance_bins(1:1:end-1) + diff(distance_bins); + + + + subplot(2,2,1); + hold on + plot(corr_histogram_bins,corr_histogram); + + subplot(2,2,2); + if i_c==1 + plot([0,distance_bins(end)],[0,0],'-k'); + end + hold on + plot(distance_bins(1:1:end),distance_corr_all(1:1:end)); + + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Dimensionality.m b/DataJoint/+PLOTS/Dimensionality.m new file mode 100644 index 0000000..da04398 --- /dev/null +++ b/DataJoint/+PLOTS/Dimensionality.m @@ -0,0 +1,49 @@ +%{ +# +-> LAB.Subject +--- +%} + + +classdef Dimensionality < dj.Computed + properties + + keySource = LAB.Subject & POP.SVDSingularValues; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\dimensionality\']; + threshold_variance_explained=0.9; + k=key; + k.session_epoch_type='spont_only'; + V = fetch(POP.SVDSingularValues & k,'*'); + for i=1:1:numel(V) + + singular_values=V(i).singular_values; + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + cumulative_variance_explained=cumsum(variance_explained); + num_comp{1}(i) = find(cumulative_variance_explained>threshold_variance_explained,1,'first'); + end + + + k.session_epoch_type='behav_only'; + V = fetch(POP.SVDSingularValues & k,'*'); + for i=1:1:numel(V) + + singular_values=V(i).singular_values; + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + cumulative_variance_explained=cumsum(variance_explained); + num_comp{2}(i) = find(cumulative_variance_explained>threshold_variance_explained,1,'first'); + end + + clf + plot(num_comp{1},'-k') + hold on + plot(num_comp{2},'-b') + pause(3) + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/DimensionalityNeuropil.m b/DataJoint/+PLOTS/DimensionalityNeuropil.m new file mode 100644 index 0000000..cd34a47 --- /dev/null +++ b/DataJoint/+PLOTS/DimensionalityNeuropil.m @@ -0,0 +1,49 @@ +%{ +# +-> LAB.Subject +--- +%} + + +classdef DimensionalityNeuropil < dj.Computed + properties + + keySource = LAB.Subject & POP.SVDSingularValuesNeuropil; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\dimensionality_neuropil\']; + threshold_variance_explained=0.9; + k=key; + k.session_epoch_type='spont_only'; + V = fetch(POP.SVDSingularValuesNeuropil & k,'*'); + for i=1:1:numel(V) + + singular_values=V(i).singular_values; + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + cumulative_variance_explained=cumsum(variance_explained); + num_comp{1}(i) = find(cumulative_variance_explained>threshold_variance_explained,1,'first'); + end + + + k.session_epoch_type='behav_only'; + V = fetch(POP.SVDSingularValuesNeuropil & k,'*'); + for i=1:1:numel(V) + + singular_values=V(i).singular_values; + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + cumulative_variance_explained=cumsum(variance_explained); + num_comp{2}(i) = find(cumulative_variance_explained>threshold_variance_explained,1,'first'); + end + clf + plot(num_comp{1},'-k') + hold on + plot(num_comp{2},'-b') + pause(3) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Jobs.m b/DataJoint/+PLOTS/Jobs.m new file mode 100644 index 0000000..214726e --- /dev/null +++ b/DataJoint/+PLOTS/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +PLOTS +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+PLOTS/Maps2DBlock.m b/DataJoint/+PLOTS/Maps2DBlock.m new file mode 100644 index 0000000..7626635 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DBlock.m @@ -0,0 +1,29 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DBlock < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DBlockStats & LICK2D.ROILick2Dangle; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\block_meso\']; + flag_spikes = 0; % 1 spikes, 0 dff + + flag_block = [0,1,2]; % 0 first versus begin 1 first versus end 2 begin versus end + + for i_f = 1:1:numel(flag_block) + PLOTS_Maps2DBlock(key, dir_current_fig, flag_spikes, flag_block(i_f)); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DLickRate.m b/DataJoint/+PLOTS/Maps2DLickRate.m new file mode 100644 index 0000000..79f05b3 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DLickRate.m @@ -0,0 +1,34 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef Maps2DLickRate < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DLickRate; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\lick_rate\']; + flag_spikes = 0; % 1 spikes, 0 dff + + + threshold=[0,0.25,0.5,1]; + + for i = 1:1:numel(threshold) + key.threshold_for_event=threshold(i); + PLOTS_Maps2DLickRate(key, dir_current_fig, flag_spikes); + end + + key=rmfield(key,'threshold_for_event'); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DPSTH.m b/DataJoint/+PLOTS/Maps2DPSTH.m new file mode 100644 index 0000000..440ca36 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DPSTH.m @@ -0,0 +1,25 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DPSTH < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DPSTH & LICK2D.ROILick2Dangle; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\psth_distance_meso\']; + flag_spikes = 0; % 1 spikes, 0 dff + PLOTS_Maps2DPSTH(key, dir_current_fig, flag_spikes); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DPSTHSpikes.m b/DataJoint/+PLOTS/Maps2DPSTHSpikes.m new file mode 100644 index 0000000..a39fd75 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DPSTHSpikes.m @@ -0,0 +1,25 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DPSTHSpikes < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DPSTHSpikes; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\psth_distance_meso_spikes\']; + flag_spikes = 1; % 1 spikes, 0 dff + PLOTS_Maps2DPSTH(key, dir_current_fig, flag_spikes); + +% insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DPSTHpreferred.m b/DataJoint/+PLOTS/Maps2DPSTHpreferred.m new file mode 100644 index 0000000..0fd1479 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DPSTHpreferred.m @@ -0,0 +1,25 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DPSTHpreferred < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DSelectivity; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\psth_preferred_distance_meso\']; + + PLOTS_Maps2DPSTHpreferred(key, dir_current_fig); + +% insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DReward.m b/DataJoint/+PLOTS/Maps2DReward.m new file mode 100644 index 0000000..1b4fc28 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DReward.m @@ -0,0 +1,29 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DReward < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DRewardStats & LICK2D.ROILick2Dangle; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\reward_meso\']; + flag_spikes = 0; % 1 spikes, 0 dff + + flag_reward = [0,1,2]; % 0 regular versus large 1 small versus regular 2 small versus large + + for i_f = 1:1:numel(flag_reward) + PLOTS_Maps2DReward(key, dir_current_fig, flag_spikes, flag_reward(i_f)); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DSelectivity.m b/DataJoint/+PLOTS/Maps2DSelectivity.m new file mode 100644 index 0000000..085523d --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DSelectivity.m @@ -0,0 +1,25 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DSelectivity < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DPSTH; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\selectivity_distance_meso\']; + + PLOTS_Maps2DSelectivity(key, dir_current_fig); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2Dtheta.m b/DataJoint/+PLOTS/Maps2Dtheta.m new file mode 100644 index 0000000..8a5ee58 --- /dev/null +++ b/DataJoint/+PLOTS/Maps2Dtheta.m @@ -0,0 +1,25 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2Dtheta < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2Dangle & LICK2D.ROILick2DangleNeuropil; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\theta_meso\']; + flag_spikes = 0; % 1 spikes, 0 dff + PLOTS_Maps2Dtheta(key, dir_current_fig,flag_spikes); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DthetaSpikes.m b/DataJoint/+PLOTS/Maps2DthetaSpikes.m new file mode 100644 index 0000000..f30619b --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DthetaSpikes.m @@ -0,0 +1,26 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DthetaSpikes < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROILick2DangleSpikes; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\theta_meso_spikes\']; + + flag_spikes = 1; % 1 spikes, 0 dff + PLOTS_Maps2Dtheta(key, dir_current_fig, flag_spikes); + +% insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/Maps2DthetaSpikesPhoto.m b/DataJoint/+PLOTS/Maps2DthetaSpikesPhoto.m new file mode 100644 index 0000000..1a39c1d --- /dev/null +++ b/DataJoint/+PLOTS/Maps2DthetaSpikesPhoto.m @@ -0,0 +1,27 @@ +%{ +# +-> EXP2.Session +%} + + +classdef Maps2DthetaSpikesPhoto < dj.Computed + properties + + keySource = EXP2.Session & IMG.Volumetric & LICK2D.ROILick2DangleSpikesPhoto; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\theta_photorig_spikes\']; + +rel_data=LICK2D.ROILick2DangleSpikesPhoto; + + PLOTS_Maps2Dtheta_distance(key, dir_current_fig, rel_data); + +% insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsBodypartCorr.m b/DataJoint/+PLOTS/MapsBodypartCorr.m new file mode 100644 index 0000000..4fd3aaf --- /dev/null +++ b/DataJoint/+PLOTS/MapsBodypartCorr.m @@ -0,0 +1,37 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef MapsBodypartCorr < dj.Computed + properties + + keySource = EXP2.Session & IMG.Mesoscope & LICK2D.ROIBodypartCorr; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\bodypart_corr\']; + flag_spikes = 0; % 1 spikes, 0 dff + bodypart_name={'pawfrontleft','pawfrontright','whiskers'}; + + threshold=[0,0.25]; + for j=1:1:numel(bodypart_name) + for i = 1:1:numel(threshold) + key.bodypart_name = bodypart_name{j}; + key.threshold_for_event=threshold(i); + PLOTS_MapsBodypartCorr(key, dir_current_fig, flag_spikes); + end + end + + key=rmfield(key,'threshold_for_event'); + key=rmfield(key,'bodypart_name'); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsClusterCorr.m b/DataJoint/+PLOTS/MapsClusterCorr.m new file mode 100644 index 0000000..c56d006 --- /dev/null +++ b/DataJoint/+PLOTS/MapsClusterCorr.m @@ -0,0 +1,39 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef MapsClusterCorr < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorr; + + end + methods(Access=protected) + function makeTuples(self, key) + % n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; + % n_clust_vector = [100, 500, 1000, 2000]; + n_clust_vector = [100, 500]; + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrClusters\clusters_corr\']; + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig); + % flag_plot_clusters_individually=1; + % lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsClusterCorrNeuropil.m b/DataJoint/+PLOTS/MapsClusterCorrNeuropil.m new file mode 100644 index 0000000..ea554bf --- /dev/null +++ b/DataJoint/+PLOTS/MapsClusterCorrNeuropil.m @@ -0,0 +1,40 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef MapsClusterCorrNeuropil < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorrNeuropil; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrClusters\clusters_corr_neuropil\']; + +% n_clust_vector = [20, 100, 500]; + n_clust_vector = [20, 100]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso_neuropil(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig); + % flag_plot_clusters_individually=1; + % lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsClusterCorrNeuropilSubtr.m b/DataJoint/+PLOTS/MapsClusterCorrNeuropilSubtr.m new file mode 100644 index 0000000..4fe61e2 --- /dev/null +++ b/DataJoint/+PLOTS/MapsClusterCorrNeuropilSubtr.m @@ -0,0 +1,39 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef MapsClusterCorrNeuropilSubtr < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorrNeuropilSubtr; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\clusters_corr_neuropil_subtr\']; + + n_clust_vector = [20, 100, 500]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + + for ic = 1:1:numel(n_clust_vector) + n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + lick2D_map_onFOV_clusters_corr_meso_neuropil_subtr(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig); + % flag_plot_clusters_individually=1; + % lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsClusterCorrSVD.m b/DataJoint/+PLOTS/MapsClusterCorrSVD.m new file mode 100644 index 0000000..4c971aa --- /dev/null +++ b/DataJoint/+PLOTS/MapsClusterCorrSVD.m @@ -0,0 +1,50 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef MapsClusterCorrSVD < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorrSVD & 'subject_id="464724" OR subject_id="464725"'; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrClusters\clusters_corr_SVD\']; + + % num_svd_components_removed_vector = [0, 1, 10]; + num_svd_components_removed_vector = [0, 1, 5, 10]; +% threshold_for_event_vector = [0, 0.25]; + threshold_for_event_vector = [0]; + n_clust_vector = [20, 100]; + +% n_clust_vector = [20, 100]; + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_all = rel_roi*IMG.PlaneCoordinates & key; + M_all=fetch(rel_all ,'*'); + + k=key; + + for ith = 1:1:numel(threshold_for_event_vector) + for i_svd = 1:1:numel(num_svd_components_removed_vector) + for ic = 1:1:numel(n_clust_vector) + k.threshold_for_event = threshold_for_event_vector(ith); + k.n_clust = n_clust_vector(ic); + k.num_svd_components_removed = num_svd_components_removed_vector(i_svd); + flag_plot_clusters_individually=0; +% PLOTS_MapsClusterCorrSVD(k, flag_plot_clusters_individually, M_all, dir_current_fig); + PLOTS_MapsClusterCorrSVD_CCF(k, flag_plot_clusters_individually, M_all, dir_current_fig); + % flag_plot_clusters_individually=1; + % lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + end + end + insert(self,key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsClusterCorrThresholded.m b/DataJoint/+PLOTS/MapsClusterCorrThresholded.m new file mode 100644 index 0000000..296c8de --- /dev/null +++ b/DataJoint/+PLOTS/MapsClusterCorrThresholded.m @@ -0,0 +1,45 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef MapsClusterCorrThresholded < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.Mesoscope & POP.ROIClusterCorrThresholded; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\CorrClusters\clusters_corr_thresholded\']; + +% threshold_for_event_vector = [0, 0.1, 0.25, 0.5]; + threshold_for_event_vector = [0, 0.1, 0.25]; +% n_clust_vector = [100, 500, 1000]; + n_clust_vector = [100, 500]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M_all=fetch(rel_all ,'*'); + + k=key; + for ic = 1:1:numel(n_clust_vector) + for ith = 1:1:numel(threshold_for_event_vector) + k.threshold_for_event = threshold_for_event_vector(ith); + k.n_clust = n_clust_vector(ic); + flag_plot_clusters_individually=0; + PLOTS_MapsClusterCorrThresholded(k, flag_plot_clusters_individually, M_all, dir_current_fig); +% flag_plot_clusters_individually=1; +% lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust); + end + end + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsRidge.m b/DataJoint/+PLOTS/MapsRidge.m new file mode 100644 index 0000000..de3b954 --- /dev/null +++ b/DataJoint/+PLOTS/MapsRidge.m @@ -0,0 +1,59 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef MapsRidge < dj.Computed + properties + + keySource = EXP2.Session & RIDGE.ROIRidge; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\ridge\']; + rel_data=RIDGE.ROIRidge & IMG.ROIGood; + predictor_name=fetchn(RIDGE.PredictorType& RIDGE.PredictorTypeUse,'predictor_name','ORDER BY predictor_name'); + threshold=[0]; + time_shift_vec=[-2:1:7]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & key & rel_data; + M=fetch(rel_all ,'*'); + + + + for ii = 1:1:numel(threshold) + key.threshold_for_flourescence_event=threshold(ii); + for jj=1:1:numel(predictor_name) + key.predictor_name = predictor_name{jj}; + + for tt=1:1:numel(time_shift_vec) + key.time_shift=time_shift_vec(tt); + R(:,tt) = fetchn(rel_data & key ,'predictor_beta','ORDER BY roi_number'); + end + + upper=prctile(R(:),99); + lower=prctile(R(:),1); + bounds = max([abs(lower), abs(upper)]); + + parfor tt=1:1:numel(time_shift_vec) + PLOTS_MapsRidge(key, dir_current_fig, rel_data,tt, bounds, M, R(:,tt), time_shift_vec(tt)); + end + end + end + % end + + key=rmfield(key,'threshold_for_flourescence_event'); + key=rmfield(key,'predictor_name'); + key=rmfield(key,'time_shift'); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsRidgeNeuropil.m b/DataJoint/+PLOTS/MapsRidgeNeuropil.m new file mode 100644 index 0000000..58be01d --- /dev/null +++ b/DataJoint/+PLOTS/MapsRidgeNeuropil.m @@ -0,0 +1,59 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef MapsRidgeNeuropil < dj.Computed + properties + + keySource = EXP2.Session & RIDGE.ROIRidge; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\ridge_neuropil\']; + rel_data=RIDGE.ROIRidgeNeuropil & IMG.ROIGood; + predictor_name=fetchn(RIDGE.PredictorType& RIDGE.PredictorTypeUse,'predictor_name','ORDER BY predictor_name'); + threshold=[0]; + time_shift_vec=[-2:1:7]; + + + rel_all = IMG.ROI*IMG.PlaneCoordinates & key & rel_data; + M=fetch(rel_all ,'*'); + + + + for ii = 1:1:numel(threshold) + key.threshold_for_flourescence_event=threshold(ii); + for jj=1:1:numel(predictor_name) + key.predictor_name = predictor_name{jj}; + + for tt=1:1:numel(time_shift_vec) + key.time_shift=time_shift_vec(tt); + R(:,tt) = fetchn(rel_data & key,'predictor_beta','ORDER BY roi_number'); + end + + upper=prctile(R(:),99); + lower=prctile(R(:),1); + bounds = max([abs(lower), abs(upper)]); + + parfor tt=1:1:numel(time_shift_vec) + PLOTS_MapsRidge(key, dir_current_fig, rel_data,tt, bounds, M, R(:,tt), time_shift_vec(tt)); + end + end + end + % end + + key=rmfield(key,'threshold_for_flourescence_event'); + key=rmfield(key,'predictor_name'); + key=rmfield(key,'time_shift'); + + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsRidgeVarianceExplained.m b/DataJoint/+PLOTS/MapsRidgeVarianceExplained.m new file mode 100644 index 0000000..b29f7b5 --- /dev/null +++ b/DataJoint/+PLOTS/MapsRidgeVarianceExplained.m @@ -0,0 +1,23 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef MapsRidgeVarianceExplained < dj.Computed + properties + keySource = EXP2.Session & RIDGE.ROIRidgeVarExplained; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\ridge_variance_explained\']; + rel_data=RIDGE.ROIRidgeVarExplained; + PLOTS_MapsRidgeVarianceExplained(key, dir_current_fig, rel_data); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsRidgeVarianceExplainedNeuropil.m b/DataJoint/+PLOTS/MapsRidgeVarianceExplainedNeuropil.m new file mode 100644 index 0000000..481cc93 --- /dev/null +++ b/DataJoint/+PLOTS/MapsRidgeVarianceExplainedNeuropil.m @@ -0,0 +1,23 @@ +%{ +# +-> EXP2.Session +--- +%} + + +classdef MapsRidgeVarianceExplainedNeuropil < dj.Computed + properties + keySource = EXP2.Session & RIDGE.ROIRidgeVarExplainedNeuropil; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\lick2D\ridge_variance_explained_neuropil\']; + rel_data=RIDGE.ROIRidgeVarExplainedNeuropil; + PLOTS_MapsRidgeVarianceExplained(key, dir_current_fig, rel_data); + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsSVD.m b/DataJoint/+PLOTS/MapsSVD.m new file mode 100644 index 0000000..2c2bffa --- /dev/null +++ b/DataJoint/+PLOTS/MapsSVD.m @@ -0,0 +1,65 @@ +%{ +# +-> EXP2.SessionEpoch +%} + + +classdef MapsSVD < dj.Computed + properties + keySource = EXP2.SessionEpoch & POP.ROISVD & IMG.Mesoscope & POP.ROISVDDistanceScale; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\SVD\dff\']; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + rel_data_spatial_scale = POP.ROISVDDistanceScale & key; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + + % aligning relative to bregma + bregma_x_mm=1000*fetchn(IMG.Bregma & key,'bregma_x_cm'); + if ~isempty(bregma_x_mm) + bregma_y_mm=1000*fetchn(IMG.Bregma & key,'bregma_y_cm'); + x_all_max= max(x_all); + y_all_min= min(y_all); + + x_all=x_all-[x_all_max - bregma_x_mm]; % anterior posterior + y_all=y_all-y_all_min+bregma_y_mm; % medial lateral + end + + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + DATA_SPATIAL_SCALE=fetch(rel_data_spatial_scale,'*'); + distance_bins_centers =DATA_SPATIAL_SCALE.distance_bins_centers; + rd_distance_components =DATA_SPATIAL_SCALE.rd_distance_components; + distance_tau =DATA_SPATIAL_SCALE.distance_tau; + max_components = min(size(ROI_WEIGHTS,2),500); + + + components_2plot = [1:10,50, 100, max_components]; + for i_c = 1:1:numel(components_2plot) + W = ROI_WEIGHTS(:, components_2plot(i_c)); + rd_distance = rd_distance_components(components_2plot(i_c),:); + PLOTS_MapsSVD(key, dir_current_fig, W, x_all, y_all, components_2plot(i_c), rd_distance, distance_bins_centers, distance_tau(components_2plot(i_c))); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsSVDNeuropil.m b/DataJoint/+PLOTS/MapsSVDNeuropil.m new file mode 100644 index 0000000..aa7dbfa --- /dev/null +++ b/DataJoint/+PLOTS/MapsSVDNeuropil.m @@ -0,0 +1,53 @@ +%{ +# +-> EXP2.SessionEpoch +%} + + +classdef MapsSVDNeuropil < dj.Computed + properties + keySource = EXP2.SessionEpoch & POP.ROISVDNeuropil & IMG.Mesoscope & POP.ROISVDDistanceScaleNeuropil; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\SVD\neuropil\']; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVDNeuropil & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + rel_data_spatial_scale = POP.ROISVDDistanceScaleNeuropil & key; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + DATA_SPATIAL_SCALE=fetch(rel_data_spatial_scale,'*'); + distance_bins_centers =DATA_SPATIAL_SCALE.distance_bins_centers; + rd_distance_components =DATA_SPATIAL_SCALE.rd_distance_components; + distance_tau =DATA_SPATIAL_SCALE.distance_tau; + max_components = min(size(ROI_WEIGHTS,2),500); + + + components_2plot = [1:10,50, 100, max_components]; + components_2plot(components_2plot>max_components)=[]; + for i_c = 1:1:numel(components_2plot) + W = ROI_WEIGHTS(:, components_2plot(i_c)); + rd_distance = rd_distance_components(components_2plot(i_c),:); + PLOTS_MapsSVD(key, dir_current_fig, W, x_all, y_all, components_2plot(i_c), rd_distance, distance_bins_centers, distance_tau(components_2plot(i_c))); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsSVDSave.m b/DataJoint/+PLOTS/MapsSVDSave.m new file mode 100644 index 0000000..bf541a1 --- /dev/null +++ b/DataJoint/+PLOTS/MapsSVDSave.m @@ -0,0 +1,52 @@ +%{ +# +-> EXP2.SessionEpoch +%} + + +classdef MapsSVDSave < dj.Computed + properties + keySource = EXP2.SessionEpoch & POP.ROISVD & IMG.Mesoscope & POP.ROISVDDistanceScale; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\SVD\dff\']; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + rel_data_spatial_scale = POP.ROISVDDistanceScale & key; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + DATA_SPATIAL_SCALE=fetch(rel_data_spatial_scale,'*'); + distance_bins_centers =DATA_SPATIAL_SCALE.distance_bins_centers; + rd_distance_components =DATA_SPATIAL_SCALE.rd_distance_components; + distance_tau =DATA_SPATIAL_SCALE.distance_tau; + max_components = min(size(ROI_WEIGHTS,2),500); + + + components_2plot = [1:10,50, 100, max_components]; + for i_c = 1:1:numel(components_2plot) + W = ROI_WEIGHTS(:, components_2plot(i_c)); + rd_distance = rd_distance_components(components_2plot(i_c),:); + PLOTS_MapsSVD(key, dir_current_fig, W, x_all, y_all, components_2plot(i_c), rd_distance, distance_bins_centers, distance_tau(components_2plot(i_c))); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsSVDSpikes.m b/DataJoint/+PLOTS/MapsSVDSpikes.m new file mode 100644 index 0000000..b31bd49 --- /dev/null +++ b/DataJoint/+PLOTS/MapsSVDSpikes.m @@ -0,0 +1,52 @@ +%{ +# +-> EXP2.SessionEpoch +%} + + +classdef MapsSVDSpikes < dj.Computed + properties + keySource = EXP2.SessionEpoch & POP.ROISVDSpikes & IMG.Mesoscope & POP.ROISVDDistanceScaleSpikes; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\SVD\spikes\']; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVDSpikes & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + rel_data_spatial_scale = POP.ROISVDDistanceScaleSpikes & key; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + DATA_SPATIAL_SCALE=fetch(rel_data_spatial_scale,'*'); + distance_bins_centers =DATA_SPATIAL_SCALE.distance_bins_centers; + rd_distance_components =DATA_SPATIAL_SCALE.rd_distance_components; + distance_tau =DATA_SPATIAL_SCALE.distance_tau; + max_components = min(size(ROI_WEIGHTS,2),500); + + + components_2plot = [1:10,50, 100, max_components]; + for i_c = 1:1:numel(components_2plot) + W = ROI_WEIGHTS(:, components_2plot(i_c)); + rd_distance = rd_distance_components(components_2plot(i_c),:); + PLOTS_MapsSVD(key, dir_current_fig, W, x_all, y_all, components_2plot(i_c), rd_distance, distance_bins_centers, distance_tau(components_2plot(i_c))); + end + insert(self,key); + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MapsSpontVsBeharDeltaMeanDFF.m b/DataJoint/+PLOTS/MapsSpontVsBeharDeltaMeanDFF.m new file mode 100644 index 0000000..e922f5b --- /dev/null +++ b/DataJoint/+PLOTS/MapsSpontVsBeharDeltaMeanDFF.m @@ -0,0 +1,31 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.Session +%} + + +classdef MapsSpontVsBeharDeltaMeanDFF < dj.Computed + properties + + keySource = (EXP2.Session & IMG.ROIdeltaFMean & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + flag_contrast_index = 0; + dir_current_fig = [dir_base '\Lick2D\brain_maps\SpontVSBehav_DeltaMeanDFF\']; + PLOTS_MapsSpontVsBeharDeltaMeanDFF(key, dir_current_fig, flag_contrast_index); + + flag_contrast_index = 1; + dir_current_fig = [dir_base '\Lick2D\brain_maps\SpontVSBehav_DeltaMeanDFF_contrast_index\']; + PLOTS_MapsSpontVsBeharDeltaMeanDFF(key, dir_current_fig, flag_contrast_index); + + insert(self,key); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MoviesActivity.m b/DataJoint/+PLOTS/MoviesActivity.m new file mode 100644 index 0000000..52a9cd4 --- /dev/null +++ b/DataJoint/+PLOTS/MoviesActivity.m @@ -0,0 +1,297 @@ +%{ +# +-> EXP2.SessionEpoch +--- +%} + + +classdef MoviesActivity < dj.Computed + properties + + keySource = (EXP2.SessionEpoch- EXP2.SessionEpochSomatotopy) & IMG.ROI & (IMG.Mesoscope- IMG.Volumetric) & 'subject_id=464724 OR subject_id=464725'; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\activity_movies\']; + video_quality=85; % Default 75 + speedup_factor=2; %we speed up the movie 10 times relative to the imaging rate + total_time2plot = 180; % seconds - that's how much imaged time we are going to plot, and we are going to speed this up by speedup_factor + image_rescaling_factor = 12; % making this number large will make cells larger, making it small will make them smaller + + % saving each session epoch into a separate folder + session_date = fetch1(EXP2.Session & key,'session_date'); + session_epoch_number = fetch1(EXP2.SessionEpoch & key,'session_epoch_number'); + session_epoch_type = fetch1(EXP2.SessionEpoch & key,'session_epoch_type'); + subdir_name = sprintf('anm%d_s%d_%s_e%d_%s',key.subject_id,key.session, session_date, session_epoch_number, session_epoch_type); + dir_current_fig = [dir_current_fig subdir_name '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = IMG.ROIdeltaF & rel_roi & key; + % rel_data_svd = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + %% loading traces + roi_list=fetchn(rel_roi & key,'roi_number','ORDER BY roi_number'); + num_rois=numel(roi_list); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + F(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + + %% behavioral trace + flag_behavior = fetch(IMG.FrameStartTrial & key); + if ~isempty(flag_behavior) + + rel_predictor_type = (RIDGE.PredictorType&RIDGE.PredictorTypeUse); + + rel_start_frame = IMG.FrameStartTrial & key & RIDGE.Predictors; + TrialsStartFrame=fetchn(rel_start_frame,'session_epoch_trial_start_frame','ORDER BY trial'); + trial_num=fetchn(rel_start_frame, 'trial','ORDER BY trial'); + + if isempty(TrialsStartFrame) % not mesoscope recordings + rel_start_frame = IMG.FrameStartFile & key & RIDGE.Predictors; + TrialsStartFrame=fetchn(rel_start_frame,'session_epoch_file_start_frame','ORDER BY trial'); + trial_num=fetchn(rel_start_frame,'trial','ORDER BY trial'); + end + + P=struct2table(fetch(RIDGE.Predictors*rel_predictor_type & key,'*','ORDER BY trial')); + + idx_frames=[]; + for i_tr = 1:1:numel(trial_num) + idx=find(P.trial==trial_num(i_tr),1,'first'); + TrialsEndFrame = TrialsStartFrame(i_tr) + numel(P.trial_predictor{idx}) - TrialsStartFrame(1); + idx_frames = [idx_frames, (TrialsStartFrame(i_tr)- TrialsStartFrame(1)+1):1:TrialsEndFrame]; + end + + F = F(:,idx_frames); + + Behav_trace(1,:) = 4*cell2mat(fetchn(RIDGE.Predictors & key & 'predictor_name="FirstLickReward"','trial_predictor')'); + Behav_trace(2,:) = abs(zscore(cell2mat(fetchn(RIDGE.Predictors & key & 'predictor_name="Whiskers"','trial_predictor')'))); + Behav_trace(3,:) = abs(zscore(cell2mat(fetchn(RIDGE.Predictors & key & 'predictor_name="Jaw"','trial_predictor')'))); + % Behav_trace(3,:) = abs(zscore(cell2mat(fetchn(RIDGE.Predictors & key & 'predictor_name="PawFrontLeft"','trial_predictor')'))); + % Behav_trace(4,:) = abs(zscore(cell2mat(fetchn(RIDGE.Predictors & key & 'predictor_name="PawFrontRight"','trial_predictor')'))); + Behav_trace(Behav_trace(:)<1.5)=0; + Behav_trace(Behav_trace(:)>=3)=3; + + Behav_trace(1,:)= (4/3)*Behav_trace(1,:); + end + + + + %% Loading ROIs coordinates + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + + % aligning relative to bregma + bregma_x_mm=1000*fetchn(IMG.Bregma & key,'bregma_x_cm'); + if ~isempty(bregma_x_mm) + bregma_y_mm=1000*fetchn(IMG.Bregma & key,'bregma_y_cm'); + x_all_max= max(x_all); + y_all_min= min(y_all); + + x_all=x_all-[x_all_max - bregma_x_mm]; % anterior posterior + y_all=y_all-y_all_min+bregma_y_mm; % medial lateral + + end + x_all_max = [x_all_max + (3300-max(x_all))]/image_rescaling_factor; + y_all= y_all +750; + + %% Creating a matrix which will display cells as pixels on a 2D matrix according to their anatomical position (cell occupies only one pixel) + x_all_resized=x_all/image_rescaling_factor; % decreasing the resolution of the matrix + y_all_resized=y_all/image_rescaling_factor; + % MM= zeros(ceil(max(x_all_resized)), ceil(max(y_all_resized))) + 256/2; %setting every pixel which is not a cell into mid of the colormap (white) + MM= zeros(ceil(x_all_max), ceil(max(y_all_resized))) + 256/2; %setting every pixel which is not a cell into mid of the colormap (white) + + + ind = sub2ind(size(MM),ceil(x_all_resized-min(x_all_resized)+eps),ceil(y_all_resized)); %indices in the matrix that correspond to cells + + imaging_frame_rate = fetchn(IMG.FOVEpoch&key,'imaging_frame_rate'); + total_imaging_frames_2use = floor(min(total_time2plot*imaging_frame_rate,size(F,2))); + + + %% Z-scoring + % F = zscore(F); + F = rescale(F); + F = F-mean(F,2); + + min_prctile=0.1; + max_prctile=97; + + %% Looping over PC and creating videos of neural activity weighted by the loadings. + % We start by creating a movie of the original (non-weighted) neural activity + num_periods = 10; + + max_periods = floor(size(F,2)/total_imaging_frames_2use); + periods2plot = floor(linspace(1,max_periods,10)); + for i_period = 1:1:num_periods; %numel(components_2plot) + + if i_period==1 + frame2plot_start=1; + frame2plot_end = total_imaging_frames_2use; + else + frame2plot_start = periods2plot(i_period-1)*total_imaging_frames_2use + 1; + frame2plot_end = frame2plot_start + total_imaging_frames_2use; + end + Data2Plot =F(:,frame2plot_start:1:frame2plot_end); + filename_prefix=['start_' num2str(floor(frame2plot_start/imaging_frame_rate)) 'sec']; + + if ~isempty(flag_behavior) + + Behav_trace_2Plot = Behav_trace(:, frame2plot_start:1:frame2plot_end); + end + + % scaling the colormap + minp=double(prctile (Data2Plot(:),min_prctile)); + maxp=double(prctile (Data2Plot(:),max_prctile)); + PCT = rescale(Data2Plot,-1,1,'InputMin',minp,'InputMax',maxp); + imagesc(PCT); + cmp = inferno(256); % 16 element colormap + cmp(end,[1 1 1]); + + colormap(cmp), colorbar; + % cmp = bluewhitered(256); % 16 element colormap + % colormap(cmp), colorbar; + Data2Plot_color = uint8(256*mat2gray(double(Data2Plot),[minp,maxp])); + + % Creating video file + myVideo = VideoWriter([dir_current_fig subdir_name '_' filename_prefix '.avi'],'Motion JPEG AVI'); + myVideo.FrameRate = speedup_factor*imaging_frame_rate; + myVideo.Quality = video_quality; % Default 75 + open(myVideo); + + + %% PLOT ALLEN MAP + allen2mm=[1000*3.2/160]/image_rescaling_factor; + edgeOutline=[]; + if ~isempty(bregma_x_mm) + allenDorsalMapSM_Musalletal2019 = load('allenDorsalMapSM_Musalletal2019.mat'); + edgeOutline = allenDorsalMapSM_Musalletal2019.dorsalMaps.edgeOutline; + + bregma_x_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(2); + bregma_y_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(1); + end + % xlim([min(x),3300]); + % % xlim([min(x),max(x)]); + % ylim([0,max(y)]); + % set(gca,'Ytick', [0:1000:max(y)]) + + counter =1; + Allen_contours2Use=[]; + for i_a = 1:1:numel(edgeOutline) + hold on + xxx = (-1*([edgeOutline{i_a}(:,1)]-bregma_x_allen))*allen2mm - min(x_all_resized); + yyy= ([edgeOutline{i_a}(:,2)]-bregma_y_allen)*allen2mm ; + temp=[]; + + if sum(yyy<0)==0 && sum(xxx<-3000/image_rescaling_factor)==0 + + for i_x=1:1:numel(xxx) + temp = [temp xxx(i_x) (yyy(i_x) + 750/image_rescaling_factor) ]; + end + Allen_contours2Use{counter}=temp; + counter =counter +1; + end + % plot(0,0 ,'*') + end + + + % Writing video file + current2D=MM*0; + + B1 = [0,size(current2D,2)*0.15 ]; + B2 = [0,size(current2D,2)*0.15 ]; + B3 = [0,size(current2D,2)*0.15 ]; + % B4 = [0,size(current2D,2)*0.99 ]; + + for i_fr=1:1:total_imaging_frames_2use + current2D(ind) =Data2Plot_color(:,i_fr); + RGB = ind2rgb(current2D',cmp); + frame_second = (frame2plot_start + i_fr -2)/imaging_frame_rate; + + %time stamp + RGB = insertText(RGB,[size(current2D,1)*0.85,size(current2D,2)*0.8],sprintf('%.1f s',frame_second), 'BoxOpacity', 1); + + % plot Allen mask + for i_a = 1:1:numel(Allen_contours2Use) + hold on + RGB = insertShape(RGB,'Polygon',Allen_contours2Use{i_a},'Color', [1 1 1], 'LineWidth',1); + end + + % scale bar + scalebar_start = (x_all_max*image_rescaling_factor*0.99 - 1000)/image_rescaling_factor; + scalebar_end = (x_all_max*image_rescaling_factor*0.99)/image_rescaling_factor; + RGB = insertShape(RGB,'Line',[scalebar_start size(current2D,2)*0.99 scalebar_end size(current2D,2)*0.99],'Color', [1 1 1], 'LineWidth',1); + RGB = insertText(RGB,[scalebar_start*1.05 ,size(current2D,2)*0.9],'1 mm', 'BoxColor', [0 0 0], 'BoxOpacity', 0, 'TextColor',[1 1 1]); + % scalebar_start = (x_all_max*image_rescaling_factor*0.95 - 1000)/image_rescaling_factor; + % scalebar_end = (x_all_max*image_rescaling_factor*0.95)/image_rescaling_factor; + % RGB = insertShape(RGB,'Line',[scalebar_start size(current2D,2)*0.95 scalebar_end size(current2D,2)*0.95],'Color', [1 1 1], 'LineWidth',1); + % RGB = insertText(RGB,[scalebar_start*1.05 ,size(current2D,2)*0.85],'1 mm', 'BoxColor', [0 0 0], 'BoxOpacity', 0, 'TextColor',[1 1 1]); + + + if ~isempty(flag_behavior) + + % behavioral trace - reward + temp1 = -Behav_trace_2Plot(1,i_fr)*15 + size(current2D,2)*0.15; + B1= [B1 i_fr*(size(current2D,1)/total_imaging_frames_2use) temp1 ]; + RGB = insertShape(RGB,'Line',B1,'Color', [1 0.25 0.25], 'LineWidth',1); + + % behavioral trace 0 whiskers + temp1 = -Behav_trace_2Plot(2,i_fr)*15 + size(current2D,2)*0.15; + B2= [B2 i_fr*(size(current2D,1)/total_imaging_frames_2use) temp1 ]; + RGB = insertShape(RGB,'Line',B2,'Color', [0.25 0.25 1], 'LineWidth',1); + + + % behavioral trace - jaw + temp1 = -Behav_trace_2Plot(3, i_fr)*15 + size(current2D,2)*0.15; + B3= [B3 i_fr*(size(current2D,1)/total_imaging_frames_2use) temp1 ]; + RGB = insertShape(RGB,'Line',B3,'Color', [0.5 1 0.5], 'LineWidth',1); + + + % % behavioral trace - paw right + % temp1 = -Behav_trace_2Plot(4,i_fr)*10 + size(current2D,2)*0.2; + % B4= [B4 i_fr*(size(current2D,1)/total_imaging_frames_2use) temp1 ]; + % RGB = insertShape(RGB,'Line',B4,'Color', [0.25 0.25 0.25], 'LineWidth',1); + + end + + writeVideo(myVideo, RGB); + end + close(myVideo); + + % displaying the movie + % for i=1:1:size(PCxTime,2) + % MM(ind) = PCxTime(:,i); + % imagesc(MM') + % set(gca,'CLim',[min(PCxTime(:))/10 max(PCxTime(:))/10]) + % colormap(bluewhitered); + % pause(0.01) + % end + end + insert(self,key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/MoviesSVD.m b/DataJoint/+PLOTS/MoviesSVD.m new file mode 100644 index 0000000..95539e3 --- /dev/null +++ b/DataJoint/+PLOTS/MoviesSVD.m @@ -0,0 +1,141 @@ +%{ +# +-> EXP2.SessionEpoch +--- +%} + + +classdef MoviesSVD < dj.Computed + properties + + keySource = EXP2.SessionEpoch & POP.ROISVD & (IMG.Mesoscope- IMG.Volumetric) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\SVD_movies\']; + video_quality=75; % Default 75 + speedup_factor=3; %we speed up the movie 10 times relative to the imaging rate + total_time2plot = 360; % seconds - that's how much imaged time we are going to plot, and we are going to speed this up by speedup_factor + image_rescaling_factor = 15; % making this number large will make cells larger, making it small will make them smaller + + % saving each session epoch into a separate folder + session_date = fetch1(EXP2.Session & key,'session_date'); + session_epoch_number = fetch1(EXP2.SessionEpoch & key,'session_epoch_number'); + session_epoch_type = fetch1(EXP2.SessionEpoch & key,'session_epoch_type'); + subdir_name = sprintf('anm%d_s%d_%s_e%d_%s',key.subject_id,key.session, session_date, session_epoch_number, session_epoch_type); + dir_current_fig = [dir_current_fig subdir_name '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = IMG.ROIdeltaF & rel_roi & key; + rel_data_svd = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + %% loading traces + roi_list=fetchn(rel_roi & key,'roi_number','ORDER BY roi_number'); + num_rois=numel(roi_list); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + F(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + %% Z-scoring + F = zscore(F); + + %% Loading SVD weights + ROI_WEIGHTS=cell2mat(fetchn(rel_data_svd,'roi_components','ORDER BY roi_number')); + max_components = size(ROI_WEIGHTS,2); + components_2plot = [1:10,50, 100, max_components]; + components_2plot(components_2plot>max_components)=[]; + + %% Loading ROIs coordinates + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + %% Creating a matrix which will display cells as pixels on a 2D matrix according to their anatomical position (cell occupies only one pixel) + x_all_resized=x_all/image_rescaling_factor; % decreasing the resolution of the matrix + y_all_resized=y_all/image_rescaling_factor; + MM= zeros(ceil(max(x_all_resized)), ceil(max(y_all_resized))) + 256/2; %setting every pixel which is not a cell into mid of the colormap (white) + ind = sub2ind(size(MM),ceil(x_all_resized),ceil(y_all_resized)); %indices in the matrix that correspond to cells + + imaging_frame_rate = fetchn(IMG.FOVEpoch&key,'imaging_frame_rate'); + total_imaging_frames_2use = floor(min(total_time2plot*imaging_frame_rate,size(F,2))); + F = F(:,1:1:total_imaging_frames_2use); + + %% Looping over PC and creating videos of neural activity weighted by the loadings. + % We start by creating a movie of the original (non-weighted) neural activity + + for i_pc = 0:1:numel(components_2plot) + + if i_pc==0 + Data2Plot = F; %F./max(F,[],2); + filename_prefix='original'; + min_prctile=1; + max_prctile=95; + + else + Data2Plot = F.*ROI_WEIGHTS(:,components_2plot(i_pc)); + filename_prefix=['pc' num2str(components_2plot(i_pc))]; + min_prctile=1; + max_prctile=99; + + end + + % scaling the colormap + minp=double(prctile (Data2Plot(:),min_prctile)); + maxp=double(prctile (Data2Plot(:),max_prctile)); + PCT = rescale(Data2Plot,-1,1,'InputMin',minp,'InputMax',maxp); + imagesc(PCT); + cmp = bluewhitered(256); % 16 element colormap + colormap(bluewhitered(256)), colorbar; + Data2Plot_color = uint8(256*mat2gray(double(Data2Plot),[minp,maxp])); + + % Creating video file + myVideo = VideoWriter([dir_current_fig subdir_name '_' filename_prefix '.avi'],'Motion JPEG AVI'); + myVideo.FrameRate = speedup_factor*imaging_frame_rate; + myVideo.Quality = video_quality; % Default 75 + open(myVideo); + + % Writing video file + current2D=MM; + for i_fr=1:1:total_imaging_frames_2use + current2D(ind) =Data2Plot_color(:,i_fr); + RGB = ind2rgb(current2D',cmp); + writeVideo(myVideo, RGB); + end + close(myVideo); + + % displaying the movie + % for i=1:1:size(PCxTime,2) + % MM(ind) = PCxTime(:,i); + % imagesc(MM') + % set(gca,'CLim',[min(PCxTime(:))/10 max(PCxTime(:))/10]) + % colormap(bluewhitered); + % pause(0.01) + % end + end + insert(self,key); + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/SomatotopyDeltaFiringRate.m b/DataJoint/+PLOTS/SomatotopyDeltaFiringRate.m new file mode 100644 index 0000000..48ec42f --- /dev/null +++ b/DataJoint/+PLOTS/SomatotopyDeltaFiringRate.m @@ -0,0 +1,27 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef SomatotopyDeltaFiringRate < dj.Computed + properties + + keySource = (EXP2.SessionEpoch*EXP2.SessionEpochSomatotopy) & IMG.ROIdeltaFPeak; + + end + methods(Access=protected) + function makeTuples(self, key) + threshold_for_event_vector = [0.25]; + + k=key; + if ~strcmp(fetch1(EXP2.SessionEpochSomatotopy & k,'sensory_stimulation_area'),'control') + for i=1:1:numel(threshold_for_event_vector) + k.threshold_for_event = threshold_for_event_vector(i); + PLOTS_SomatotopyDeltaFiringRate(k); + end + insert(self,key); + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/SomatotopyDeltaMean.m b/DataJoint/+PLOTS/SomatotopyDeltaMean.m new file mode 100644 index 0000000..d6b9ee6 --- /dev/null +++ b/DataJoint/+PLOTS/SomatotopyDeltaMean.m @@ -0,0 +1,25 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef SomatotopyDeltaMean < dj.Computed + properties + + keySource = EXP2.SessionEpoch*EXP2.SessionEpochSomatotopy & IMG.ROIdeltaFMean; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\somatotopy\deltamean\']; + rel_data = IMG.ROIdeltaFMean; + k=key; + if ~strcmp(fetch1(EXP2.SessionEpochSomatotopy & k,'sensory_stimulation_area'),'control') + PLOTS_SomatotopyDeltaMean(k, dir_current_fig, rel_data); + insert(self,key); + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/SomatotopyDeltaMeanFlourescence.m b/DataJoint/+PLOTS/SomatotopyDeltaMeanFlourescence.m new file mode 100644 index 0000000..a649960 --- /dev/null +++ b/DataJoint/+PLOTS/SomatotopyDeltaMeanFlourescence.m @@ -0,0 +1,23 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef SomatotopyDeltaMeanFlourescence < dj.Computed + properties + + keySource = EXP2.SessionEpoch*EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + k=key; + if ~strcmp(fetch1(EXP2.SessionEpochSomatotopy & k,'sensory_stimulation_area'),'control') + PLOTS_SomatotopyDeltaMeanFlourescence(k); + insert(self,key); + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/SomatotopyDeltaMeanNeuropil.m b/DataJoint/+PLOTS/SomatotopyDeltaMeanNeuropil.m new file mode 100644 index 0000000..18750f2 --- /dev/null +++ b/DataJoint/+PLOTS/SomatotopyDeltaMeanNeuropil.m @@ -0,0 +1,25 @@ +%{ +# Projection of the neural acitivity on a mode (neuron weights vector) +-> EXP2.SessionEpoch +%} + + +classdef SomatotopyDeltaMeanNeuropil < dj.Computed + properties + + keySource = EXP2.SessionEpoch*EXP2.SessionEpochSomatotopy & IMG.ROIdeltaFMeanNeuropil; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\brain_maps\somatotopy\deltamean_neuropil\']; + rel_data = IMG.ROIdeltaFMeanNeuropil; + k=key; + if ~strcmp(fetch1(EXP2.SessionEpochSomatotopy & k,'sensory_stimulation_area'),'control') + PLOTS_SomatotopyDeltaMean(k, dir_current_fig, rel_data); + insert(self,key); + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+PLOTS/VisualizingNeurTraces.m b/DataJoint/+PLOTS/VisualizingNeurTraces.m new file mode 100644 index 0000000..5efec0b --- /dev/null +++ b/DataJoint/+PLOTS/VisualizingNeurTraces.m @@ -0,0 +1,72 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +%} + + +classdef VisualizingNeurTraces < dj.Computed + properties + keySource = ((EXP2.SessionEpoch& IMG.ROIdeltaF) - EXP2.SessionEpochSomatotopy)& IMG.PlaneCoordinates & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + close all + + + rel_data1 = IMG.ROIdeltaF - IMG.ROIBad; + rel_data2 = IMG.ROIdeltaFNeuropilSubtr - IMG.ROIBad; + rel_data3 = IMG.ROISpikes - IMG.ROIBad; + rel_data4 = IMG.ROIdeltaFNeuropil - IMG.ROIBad; + + roi_list=fetchn(rel_data1 &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size: 1000 %numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_roi_num=fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + + temp_Fall=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + F1(temp_roi_num,:)=temp_Fall; + + temp_Fall=cell2mat(fetchn(rel_data2 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + F2(temp_roi_num,:)=temp_Fall; + + temp_Fall=cell2mat(fetchn(rel_data3 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + F3(temp_roi_num,:)=temp_Fall; + + temp_Fall=cell2mat(fetchn(rel_data4 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + F4(temp_roi_num,:)=temp_Fall; + end + + num=20 + hold on + time=1:1:size(F1(:,1:10000),2); + counter=0; + for i=500:1:num+500 + counter=counter+1; + + a=F4(i,1:10000); + a=rescale(a); + plot(time,a+(counter+0.5),'-k','LineWidth',0.5) + + + a=F1(i,1:10000); + a=rescale(a); + plot(time,a+(counter+0.5),'-g','LineWidth',0.5) + + a=F2(i,1:10000); + a=rescale(a); + plot(time,a+(counter+0.5),'-b','LineWidth',0.5) + + a=F3(i,1:10000); + a=rescale(a); + plot(time,a+(counter+0.5),'-r','LineWidth',0.5) + + + box off + end + end + end +end diff --git a/DataJoint/+PLOTS/getSchema.m b/DataJoint/+PLOTS/getSchema.m new file mode 100644 index 0000000..a449bc1 --- /dev/null +++ b/DataJoint/+PLOTS/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'PLOTS', 'arseny_learning_plots'); +end +obj = schemaObject; +end diff --git a/DataJoint/+POP/CorrPairwiseCluster.m b/DataJoint/+POP/CorrPairwiseCluster.m new file mode 100644 index 0000000..02952c1 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseCluster.m @@ -0,0 +1,64 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly. 0 means all cells +--- +roi_corr_all : longblob # pearson coeff +%} + + +classdef CorrPairwiseCluster < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope + end + methods(Access=protected) + function makeTuples(self, key) + + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = x_all/0.5; + + roi_list=fetchn(IMG.ROIdeltaF &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,~]=corr(Fall'); + + clust_id = 0:1:5; + heirar_cluster_id = fetchn(POP.ROIClusterCorr & key & 'n_clust=5', 'heirar_cluster_id', 'ORDER BY roi_number'); + + for ic=1:1:numel(clust_id) + if ic==0 + r_clust = rho; + else + idx = heirar_cluster_id == ic; + r_clust = rho(idx,idx); + end + key.heirar_cluster_id =ic ; + r_clust = tril(r_clust); + r_clust(r_clust==0)=[]; + key.roi_corr_all = r_clust; + insert(self,key); + end + + end + end +end + diff --git a/DataJoint/+POP/CorrPairwiseDistance.m b/DataJoint/+POP/CorrPairwiseDistance.m new file mode 100644 index 0000000..6789402 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistance.m @@ -0,0 +1,123 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +--- +num_of_rois : int # number of rois analyzed +distance_corr_all :blob # average pairwise pearson coeff, binned by percentiles according to lateral distance between neurons +distance_corr_positive :blob # average positive pairwise pearson coeff, binned by percentiles according to lateral distance between neurons +distance_corr_negative :blob # average negative pairwise pearson coeff, binned by percentiles according to lateral distance between neurons +distance_bins :blob +distance_corr_all_fixed_bins :blob # same as above but binned in fixed bins, e.g. [0:25:1000] +distance_corr_positive_fixed_bins :blob # +distance_corr_negative_fixed_bins :blob # +distance_bins_fixed_bins :blob + + +%} + + +classdef CorrPairwiseDistance < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy) ; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\POP\corr_distance\']; + + threshold_for_event_vector = [0, 0.25, 0.5, 1, 2]; + min_num_events = 20; %per hour + imaging_frame_rate = fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + z_all=fetchn(IMG.ROI*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; x_all = x_all/0.75; + y_all = y_all + y_pos_relative; y_all = x_all/0.5; + + + + dXY=zeros(numel(x_all),numel(x_all)); + d3D=zeros(numel(x_all),numel(x_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + + + roi_list=fetchn(IMG.ROIdeltaF &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + duration_hours=(size(temp_Fall,2)/imaging_frame_rate)/3600; + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + Fall_thresholded=Fall; + Fall_thresholded(Fall<=threshold)=0; + idx_enough_events = sum(Fall_thresholded>0,2)>=(duration_hours*min_num_events); + [rho,~]=corr(Fall_thresholded(idx_enough_events,:)'); + % rho(isnan(rho(:)))=0; + + key.num_of_rois=sum(idx_enough_events); + key.threshold_for_event = threshold; + + flag_fixed_bins=0; + kk=fn_POP_bin_pairwise_corr_by_distance(key, rho, dXY(idx_enough_events,idx_enough_events), threshold_for_event_vector, i_th, flag_fixed_bins); + + flag_fixed_bins=1; + kk=fn_POP_bin_pairwise_corr_by_distance(kk, rho, dXY(idx_enough_events,idx_enough_events), threshold_for_event_vector, i_th, flag_fixed_bins); + + insert(self,kk); + end + + session_date = fetch1(EXP2.Session & key,'session_date'); + session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); + if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; + elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; + end + + filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number)]; + if isempty(dir(dir_save_fig)) + mkdir (dir_save_fig) + end + % + figure_name_out=[ dir_save_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + end + end +end + \ No newline at end of file diff --git a/DataJoint/+POP/CorrPairwiseDistanceSVD.m b/DataJoint/+POP/CorrPairwiseDistanceSVD.m new file mode 100644 index 0000000..2ca4990 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistanceSVD.m @@ -0,0 +1,43 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +num_svd_components_removed : int # how many of the first svd components were removed +--- +corr_histogram :blob # histogram of all pairwise correlations +corr_histogram_bins :blob # corresponding bins +distance_corr_all :blob # average pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_positive :blob # average positive pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_negative :blob # average negative pairwise pearson coeff, binned according to lateral distance between neurons +distance_bins :blob # corresponding bins +corr_histogram_per_distance :longblob # a matrix containing, for each distance bin, the histogram of correlations in this distance bin, binned into corr_histogram_bins +variance_explained_components :blob # by the SVD components +%} + + +classdef CorrPairwiseDistanceSVD < dj.Computed + properties + keySource =(EXP2.SessionEpoch & IMG.ROIdeltaF & STIMANAL.MiceIncluded & IMG.PlaneCoordinates)- EXP2.SessionEpochSomatotopy; + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\POP\corr_distance\dff\']; + + threshold_for_event_vector=[0,1,2]; + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + rel_data = (IMG.ROIdeltaF & key)-IMG.ROIBad; + for it=1:1:numel(time_bin_vector) + fn_compute_CorrPairwiseDistance(key, rel_data, self, flag_zscore,time_bin_vector(it), threshold_for_event_vector, dir_save_fig) + end + end + end +end + diff --git a/DataJoint/+POP/CorrPairwiseDistanceSVDNeuropilSubtract.m b/DataJoint/+POP/CorrPairwiseDistanceSVDNeuropilSubtract.m new file mode 100644 index 0000000..70c86b4 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistanceSVDNeuropilSubtract.m @@ -0,0 +1,238 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed : int # how many of the first svd components were removed +--- +corr_histogram :blob # histogram of all pairwise correlations +corr_histogram_bins :blob # corresponding bins +distance_corr_all :blob # average pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_positive :blob # average positive pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_negative :blob # average negative pairwise pearson coeff, binned according to lateral distance between neurons +distance_bins :blob # corresponding bins +corr_histogram_per_distance :longblob # a matrix containing, for each distance bin, the histogram of correlations in this distance bin, binned into corr_histogram_bins +variance_explained_components :blob # by the SVD components +%} + + +classdef CorrPairwiseDistanceSVDNeuropilSubtract < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaFNeuropilSubtr) - EXP2.SessionEpochSomatotopy)& IMG.PlaneCoordinates & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = IMG.ROI - IMG.ROIBad; + + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\POP\corr_distance\neuropil_subtracted\']; + + + time_bin=1.5; %s + threshold_for_event_vector = [0]; + num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + % num_svd_components_removed_vector = [1000]; + + + corr_histogram_bins=[-0.5:0.01:0.5]; + % distance_bins=[0:50:100,200:100:1000,1250:250:5000]; % in microns + % distance_bins=[0:50:450,500:250:2750,3000:1000:6000]; % in microns + distance_bins=[0:25:200,250:50:450,500:250:4000]; % in microns + + key.corr_histogram_bins=corr_histogram_bins; + key.distance_bins=distance_bins; + + + % min_num_events = 20; %per hour + try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + imaging_frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + + %% Loading Data + rel_temp = IMG.Mesoscope & key; + rel_data = IMG.ROIdeltaFNeuropilSubtr; + + roi_list=fetchn(rel_data &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Distance between all pairs + + x_all=fetchn(rel_roi &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi &key,'roi_centroid_y','ORDER BY roi_number'); + z_all=fetchn(rel_roi*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; x_all = x_all/0.75; + y_all = y_all + y_pos_relative; y_all = y_all/0.5; + + + + dXY=zeros(numel(x_all),numel(x_all)); + % d3D=zeros(numel(x_all),numel(x_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + + %% Thresholding activity and computing SVD and correlations + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + + %% We take neurons with enough events during spont + behav session combined + % if threshold==0 + % % idx_enough_events=ones(size(F,1),1); + % else + + % kkk=key; + % kkk.session_epoch_type='spont_only'; + % kkk.threshold_for_event=threshold; + % epoch_spont_duration = fetchn(IMG.SessionEpochFrame & kkk, 'session_epoch_end_frame'); + % events_spont = fetchn((IMG.ROIdeltaFPeak-EXP2.SessionEpochSomatotopy) & kkk, 'number_of_events','ORDER BY roi_number'); + % + % + % kkk=key; + % kkk.session_epoch_type='behav_only'; + % kkk.threshold_for_event=threshold; + % epoch_behav_duration = fetchn(IMG.SessionEpochFrame & kkk, 'session_epoch_end_frame'); + % events_behav = fetchn((IMG.ROIdeltaFPeak-EXP2.SessionEpochSomatotopy) & kkk, 'number_of_events','ORDER BY roi_number'); + % + % if isempty(events_behav) + % events=events_spont; + % duration = epoch_spont_duration; + % elseif isempty(events_spont) + % events=events_behav; + % duration = epoch_behav_duration; + % else + % events = events_behav + events_spont; + % duration = epoch_spont_duration + epoch_behav_duration; + % end + % duration_hours=(duration/imaging_frame_rate)/3600; + % idx_enough_events = events>=(duration_hours*min_num_events); + % end + + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + try + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + catch + F_reconstruct=gather(F_reconstruct); + rho=corrcoef(F_reconstruct'); + end + key.variance_explained_components=gather(variance_explained); + else + try + rho=corrcoef(F_thresholded'); + rho=gather(rho); + catch + F_thresholded=gather(F_thresholded); + rho=corrcoef(F_thresholded'); + end + key.variance_explained_components=NaN; + end + + + key.threshold_for_event = threshold; + key.num_svd_components_removed = num_svd_components_removed_vector(i_c); + % Bin correlation by distance + kk=fn_POP_bin_pairwise_corr_by_distance(key, rho, dXY, threshold_for_event_vector, i_th,i_c, corr_histogram_bins, distance_bins, num_svd_components_removed_vector); + + insert(self,kk); + end + end + + + session_date = fetch1(EXP2.Session & key,'session_date'); + session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); + if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; + elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; + elseif strcmp(session_epoch_type,'spont_photo') + session_epoch_label = 'SpontaneousPhotosim'; + end + + filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number)]; + if isempty(dir(dir_save_fig)) + mkdir (dir_save_fig) + end + % + figure_name_out=[ dir_save_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + end + end +end + diff --git a/DataJoint/+POP/CorrPairwiseDistanceSVDSpikes.m b/DataJoint/+POP/CorrPairwiseDistanceSVDSpikes.m new file mode 100644 index 0000000..be7cb69 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistanceSVDSpikes.m @@ -0,0 +1,43 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +num_svd_components_removed : int # how many of the first svd components were removed +--- +corr_histogram :blob # histogram of all pairwise correlations +corr_histogram_bins :blob # corresponding bins +distance_corr_all :blob # average pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_positive :blob # average positive pairwise pearson coeff, binned according to lateral distance between neurons +distance_corr_negative :blob # average negative pairwise pearson coeff, binned according to lateral distance between neurons +distance_bins :blob # corresponding bins +corr_histogram_per_distance :longblob # a matrix containing, for each distance bin, the histogram of correlations in this distance bin, binned into corr_histogram_bins +variance_explained_components :blob # by the SVD components +%} + + +classdef CorrPairwiseDistanceSVDSpikes < dj.Computed + properties + keySource =(EXP2.SessionEpoch & IMG.ROISpikes & STIMANAL.MiceIncluded & IMG.PlaneCoordinates)- EXP2.SessionEpochSomatotopy; + end + methods(Access=protected) + function makeTuples(self, key) + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_fig = [dir_base '\POP\corr_distance\spikes\']; + + threshold_for_event_vector=[0]; + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + rel_data = (IMG.ROISpikes & key)-IMG.ROIBad; + for it=1:1:numel(time_bin_vector) + fn_compute_CorrPairwiseDistance(key, rel_data, self, flag_zscore,time_bin_vector(it), threshold_for_event_vector, dir_save_fig) + end + end + end +end + diff --git a/DataJoint/+POP/CorrPairwiseDistanceSVDVolumetric.m b/DataJoint/+POP/CorrPairwiseDistanceSVDVolumetric.m new file mode 100644 index 0000000..7e027c6 --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistanceSVDVolumetric.m @@ -0,0 +1,239 @@ +%{ +# Pairwise correlation as a function of distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed : int # how many of the first svd components were removed +--- +column_radius_vector :blob # size of the columns +column_distance_corr_all :blob # columns size X axial distance mat, average pairwise pearson coeff of cells within a column, binned according to axial distance between neurons +column_distance_corr_positive :blob # columns size X axial distance mat, average positive pairwise pearson coeff of cells within a column, binned according to axial distance between neurons +column_distance_corr_negative :blob # columns size X axial distance mat, average negative pairwise pearson coeff of cells within a column, binned according to axial distance between neurons +axial_distance_bins :blob # axial bins +%} + + +classdef CorrPairwiseDistanceSVDVolumetric < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy)&IMG.Volumetric ; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + % dir_save_fig = [dir_base '\POP\corr_distance\']; + + + time_bin=1.5; %s + threshold_for_event_vector = [0, 0.25, 0.5]; + num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + % num_svd_components_removed_vector = [1000]; + + column_radius_vector=[20:20:200]; + key.column_radius_vector = column_radius_vector; + + + + % min_num_events = 20; %per hour + imaging_frame_rate = fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + + + + %% Loading Data + + roi_list=fetchn(IMG.ROIdeltaFNeuropilSubtr &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Distance between all pairs + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + z_all=fetchn(IMG.ROI*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; x_all = x_all/0.75; + y_all = y_all + y_pos_relative; y_all = y_all/0.5; + + + + dXY=zeros(numel(x_all),numel(x_all)); +% d3D=zeros(numel(x_all),numel(x_all)); + dZ=zeros(numel(z_all),numel(z_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(iROI,:)= abs(z_all-z); % in um +% d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + axial_distance_bins = unique(dZ)'; + axial_distance_bins=[axial_distance_bins,inf]; + key.axial_distance_bins=axial_distance_bins; + + temp=logical(tril(dXY)); + idx_up_triangle=~temp; + dZ = dZ(idx_up_triangle); + dXY = dXY(idx_up_triangle); + + + + %% Thresholding activity and computing SVD and correlations + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + try + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + catch + F_reconstruct=gather(F_reconstruct); + rho=corrcoef(F_reconstruct'); + end + else + try + rho=corrcoef(F_thresholded'); + rho=gather(rho); + catch + F_thresholded=gather(F_thresholded); + rho=corrcoef(F_thresholded'); + end + end + + + rho = rho(idx_up_triangle); + + %% Axial Distance dependence + for i_col=1:1:numel(column_radius_vector) + idx_within_column = dXY<=column_radius_vector(i_col); + + rho_column = rho(idx_within_column); + idx_positive = rho_column>0; + idx_negative = rho_column<=0; + + dZ_column = dZ(idx_within_column); + [~,~,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + column_distance_corr_all(i_col,i)=nanmean(rho_column(idx)); + column_distance_corr_positive(i_col,i)=nanmean(rho_column(idx&idx_positive)); + column_distance_corr_negative(i_col,i)=nanmean(rho_column(idx&idx_negative)); + end + + key.column_distance_corr_all=column_distance_corr_all; + key.column_distance_corr_positive=column_distance_corr_positive; + key.column_distance_corr_negative=column_distance_corr_negative; + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + % dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtheta(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_shuffled = dtheta(idx_shuffled); + % dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\theta (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); + + + + + % Bin correlation by distance + % kk=fn_POP_bin_pairwise_corr_by_distance(key, rho, dXY, threshold_for_event_vector, i_th,i_c, corr_histogram_bins, distance_bins, num_svd_components_removed_vector); + + end + key.threshold_for_event = threshold; + key.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,key); + + end + end + + + + + + end + end +end + diff --git a/DataJoint/+POP/CorrPairwiseDistanceSVDVoxels.m b/DataJoint/+POP/CorrPairwiseDistanceSVDVoxels.m new file mode 100644 index 0000000..9bce1ae --- /dev/null +++ b/DataJoint/+POP/CorrPairwiseDistanceSVDVoxels.m @@ -0,0 +1,217 @@ +%{ +# Pairwise correlation as a function of distance, binned in 2D lateral X axial distance +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed : int # how many of the first svd components were removed +--- +distance_corr_all :blob # mat of average pairwise pearson coeff of cells, binned according lateral X axial distance +distance_corr_positive :blob # mat of positive average pairwise pearson coeff of cells, binned according lateral X axial distance +distance_corr_negative :blob # mat of negative pairwise pearson coeff of cells, binned according lateral X axial distance +axial_distance_bins :blob # axial bins +lateral_distance_bins :blob # axial bins +%} + + +classdef CorrPairwiseDistanceSVDVoxels < dj.Computed + properties + keySource = ((EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy)&IMG.Volumetric ; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + % dir_save_fig = [dir_base '\POP\corr_distance\']; + + + time_bin=1.5; %s + threshold_for_event_vector = [0, 0.25]; + num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + % num_svd_components_removed_vector = [1000]; + + lateral_distance_bins=[0:10:190,200:20:1000]; + key.lateral_distance_bins = lateral_distance_bins; + + + + % min_num_events = 20; %per hour + imaging_frame_rate = fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + + + + %% Loading Data + + roi_list=fetchn(IMG.ROIdeltaFNeuropilSubtr &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Distance between all pairs + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + z_all=fetchn(IMG.ROI*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; x_all = x_all/0.75; + y_all = y_all + y_pos_relative; y_all = y_all/0.5; + + + + dXY=zeros(numel(x_all),numel(x_all)); + % d3D=zeros(numel(x_all),numel(x_all)); + dZ=zeros(numel(z_all),numel(z_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(iROI,:)= abs(z_all-z); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + axial_distance_bins =unique((z_all))'; + key.axial_distance_bins=axial_distance_bins; + + + temp=logical(tril(dXY)); + idx_up_triangle=~temp; + dXY = dXY(idx_up_triangle); + dZ = dZ(idx_up_triangle); + + idx_local=dXY>5 & dXY<=max(lateral_distance_bins); + dXY=dXY(idx_local); + dZ=dZ(idx_local); + + + %% Thresholding activity and computing SVD and correlations + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + try + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + catch + F_reconstruct=gather(F_reconstruct); + rho=corrcoef(F_reconstruct'); + end + else + try + rho=corrcoef(F_thresholded'); + rho=gather(rho); + catch + F_thresholded=gather(F_thresholded); + rho=corrcoef(F_thresholded'); + end + end + +% diag_mat=diag(ones(1,numel(roi_list))); +% idx_diag=diag_mat(:)==1; +% rho(idx_diag)=NaN; + rho = rho(idx_up_triangle); + rho=rho(idx_local); %also gets rid of diagonal elements + + + %% 2D binning according to lateral and axial distnace + distance_corr_all=zeros(numel(lateral_distance_bins)-1,numel(axial_distance_bins)); + distance_corr_positive=zeros(numel(lateral_distance_bins)-1,numel(axial_distance_bins)); + distance_corr_negative=zeros(numel(lateral_distance_bins)-1,numel(axial_distance_bins)); + for i_l=1:1:numel(lateral_distance_bins)-1 + idx_lateral = dXY>lateral_distance_bins(i_l) & dXY<=lateral_distance_bins(i_l+1); +% dXY_temp=dXY(idx_lateral); + dz_temp=dZ(idx_lateral); + rho_temp=rho(idx_lateral); + parfor i_a=1:1:numel(axial_distance_bins) + idx_axial = dz_temp==axial_distance_bins(i_a); +% if i_a==2 +% idx_axial = idx_axial& dXY_temp>5; % pairs of neurons in the adjacent plane to the seed neuron (top plane in our case) within 5um distance form the seed neuron are removed to avoid contribution from auto-focus floursence +% end + rho_bin = rho_temp(idx_axial); + idx_positive = rho_bin>0; + idx_negative = rho_bin<0; + + distance_corr_all(i_l,i_a)=nanmean(rho_bin); + distance_corr_positive(i_l,i_a)=nanmean(rho_bin(idx_positive)); + distance_corr_negative(i_l,i_a)=nanmean(rho_bin(idx_negative)); + end + + end + key.distance_corr_all=distance_corr_all; + key.distance_corr_positive=distance_corr_positive; + key.distance_corr_negative=distance_corr_negative; + key.threshold_for_event = threshold; + key.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,key); + + end + end + + + + + + end + end +end + diff --git a/DataJoint/+POP/DistancePairwise3D.m b/DataJoint/+POP/DistancePairwise3D.m new file mode 100644 index 0000000..a516830 --- /dev/null +++ b/DataJoint/+POP/DistancePairwise3D.m @@ -0,0 +1,22 @@ +%{ +# Distance of each ROI from all the other ROIs +-> EXP2.Session +--- +roi_distance_3d : longblob # matrix of eucledian 3d distances of each roi from all the other rois +roi_numbers : longblob # numbers of all rois + +%} + + +classdef DistancePairwise3D < dj.Computed + properties + keySource = EXP2.Session & IMG.ROI & IMG.Mesoscope + end + methods(Access=protected) + function makeTuples(self, key) + + + end + end +end + diff --git a/DataJoint/+POP/DistancePairwiseLateral.m b/DataJoint/+POP/DistancePairwiseLateral.m new file mode 100644 index 0000000..d1cb68b --- /dev/null +++ b/DataJoint/+POP/DistancePairwiseLateral.m @@ -0,0 +1,59 @@ +%{ +# Distance of each ROI from all the other ROIs +-> EXP2.Session +--- +roi_distance_lateral : longblob # matrix of lateral distances of each roi from all the other rois; we flatten the matrix into a 1D array, to reshape back use mat = reshape(roi_distance_lateral,numel(roi_numbers),numel(roi_numbers)) +roi_numbers : longblob # numbers of all rois + +%} + + +classdef DistancePairwiseLateral < dj.Computed + properties + keySource = EXP2.Session & IMG.ROI & IMG.Mesoscope + end + methods(Access=protected) + function makeTuples(self, key) + key1=key; + key2=key; + + roi_numbers=fetchn(IMG.ROI &key,'roi_number','ORDER BY roi_number'); + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + z_all=fetchn(IMG.ROI*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; x_all = x_all/0.75; + y_all = y_all + y_pos_relative; y_all = x_all/0.5; + + + + dXY=zeros(numel(roi_numbers),numel(roi_numbers)); + d3D=zeros(numel(roi_numbers),numel(roi_numbers)); + parfor iROI=1:1:numel(roi_numbers) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + % we flatten the matrix into a 1D array, to reshape back use mat = reshape(dXY,numel(roi_numbers),numel(roi_numbers)) + + key1.roi_distance_lateral = dXY(:); %we flatten the matrix + key1.roi_numbers = roi_numbers; + key1.roi_distance_lateral=uint16(round(dXY(:))); + % to reshape back use mat = reshape(roi_distance_lateral,numel(roi_numbers),numel(roi_numbers)) + insert(self,key1); + + key2.roi_distance_3d = uint16(round(dXY(d3D(:)))); %we flatten the matrix + key2.roi_numbers = roi_numbers; + insert(self,key2); + + + end + end +end + diff --git a/DataJoint/+POP/Jobs.m b/DataJoint/+POP/Jobs.m new file mode 100644 index 0000000..dd8a0d6 --- /dev/null +++ b/DataJoint/+POP/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +POP +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+POP/ROIClusterCorr.m b/DataJoint/+POP/ROIClusterCorr.m new file mode 100644 index 0000000..8d7580d --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorr.m @@ -0,0 +1,88 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorr < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\Lick2D\Clusters\Corr\']; + +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; +% n_clust_vector = [100, 500, 1000, 2000]; + n_clust_vector = [100, 500]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,~]=corr(Fall'); + + + + key_ROIs= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorr2.m b/DataJoint/+POP/ROIClusterCorr2.m new file mode 100644 index 0000000..c7780b0 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorr2.m @@ -0,0 +1,86 @@ +%{ +# Smoothed trace +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorr2 < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\Corr2\']; + smooth_window=1; + n_clust_vector = [500, 1000, 2000]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + Fall=movmean(Fall,[smooth_window smooth_window],2,'omitnan','Endpoints','shrink'); + + + [rho,pval]=corr(Fall'); + + + + key_ROIs= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorrDiscrete.m b/DataJoint/+POP/ROIClusterCorrDiscrete.m new file mode 100644 index 0000000..3831622 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrDiscrete.m @@ -0,0 +1,90 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorrDiscrete < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + threshold=0.2; + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\CorrDiscrete\']; + smooth_window=1; + n_clust_vector = [100, 500, 1000]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + Fall=movmean(Fall,[smooth_window smooth_window],2,'omitnan','Endpoints','shrink'); + + Fall(Fall<=threshold)=0; + Fall(Fall>threshold)=1; + [rho,~]=corr(Fall'); + rho(isnan(rho(:)))=0; + + + + key_ROIs= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorrDistance.m b/DataJoint/+POP/ROIClusterCorrDistance.m new file mode 100644 index 0000000..65d1e50 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrDistance.m @@ -0,0 +1,329 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +--- +mat_roi_corr : longblob # pearson coeff +mat_roi_corr_pval : longblob # signif of pearson coeff +mat_distance : longblob # pixels + +roi_number_list : longblob # list of ROIs used +roi_pos_x : longblob # pixels +roi_pos_y : longblob # pixels + +%} + + +classdef ROIClusterCorrDistance < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope + end + methods(Access=protected) + function makeTuples(self, key) + + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_figure = [dir_base '\Mesoscope\Correlation_remove1PC\']; + + + key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = x_all/0.5; + + roi_list=fetchn(IMG.ROIdeltaF &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,pval]=corr(Fall'); + + + + a=1; + + + + + + + + + + + + close all + + minimal_distance =25; %in microns + corr_threshold =0.15; + smooth_time =1; %seconds + remove_PCs=1; + % + % try + % zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + % kkk.scanimage_zoom = zoom; + % pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOVEpoch & key, 'fov_x_size'); + % catch + % pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + % end + pix2dist=1; + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + smooth_frames = ceil(smooth_time * frame_rate); + + minimal_distance_pixels = minimal_distance/pix2dist; % in pixels + + + + + + + panel_width1=0.8; + panel_height1=0.5; + + panel_width2=0.15; + panel_height2=0.15; + + horizontal_distance=0.22; + vertical_distance=0.3; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + position_x(end+1)=position_x(end) + horizontal_distance*1.2; + position_x(end+1)=position_x(end) + horizontal_distance*0.9; + + position_y(1)=0.4; + position_y(end+1)=position_y(end) - vertical_distance; + position_y(end+1)=position_y(end) - vertical_distance; + + + % rel = IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=10'); + rel = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + M = fetch(rel,'*'); + M=struct2table(M); + + roi_number_list = M.roi_number; + + % pozs_x=fetchn(rel,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + % pos_y=fetchn(rel,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + + + + F = fetchn(IMG.ROISpikes & rel & key,'spikes_trace','ORDER BY roi_number'); + F=cell2mat(F); + + F=movmean(F,[smooth_frames 0],'omitnan','Endpoints','shrink'); + F = F - mean(F,2); + + + +% [coeff,score,~, ~, explained] = pca(F,'NumComponents',100); +% use_pcs=1:1:numel(explained); +% use_pcs(remove_PCs)=[]; +% Fz_reconst=score(:,use_pcs)*coeff(:,use_pcs)'; + Fz_reconst = F; + clear F; + + + + [rho,pval]=corr(Fz_reconst'); + + key.roi_number_list=roi_number_list; + key.mat_roi_corr=rho; + key.mat_roi_corr_pval=pval; + + + + key.roi_pos_x=x; + key.roi_pos_y=y; + + mat_distance=zeros(size(rho)); + parfor i_r=1:1:numel(roi_number_list) + dx = x - x(i_r); + dy = y - y(i_r); + mat_distance(i_r,:)=(sqrt(dx.^2 + dy.^2))'; + end + + + key.mat_distance=mat_distance; + + + % close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + % %% Plotting a graph out of correlation Matrix + % M=rho; + % diagonal_values = M(1:size(M,1)+1:end); + % + % M = M - diag(diag(M)); %setting diagonal values to 0 + % M(isnan(M))=0; + % + % M(abs(M)<=corr_threshold)=0; + % M(mat_distance<=minimal_distance_pixels)=0; + % + % G = graph(M,'upper'); + % LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + % + % axes('position',[position_x(1), position_y(1), panel_width1, panel_height1]); + % mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + % x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + % y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + % D = degree(G); + % % if isempty(LWidths) + % p = plot(G,'XData',pos_x,'YData',pos_y,'NodeLabel',{},'LineWidth',0.01); + % % else + % % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % % end + % p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = D/max(D); + % p.MarkerSize = 5*(D+1)/max(D); + % + % colormap bluewhitered + % colorbar + % + % % highlight(p,[1 3]) + % % h = plot(G,'Layout','force'); + % % layout(h,'force','UseGravity',true) + % s=fetch(EXP2.Session & key,'*'); + % session_epoch_type=fetch1(EXP2.SessionEpochType & key,'session_epoch_type'); + % + % title(sprintf('Session %d epoch %d anm %d %s %s',s.session, key.session_epoch_number,s.subject_id, s.session_date,session_epoch_type )); + % axis xy + % set(gca,'YDir','reverse') + % axis equal + % xlabel('Anterior - Posterior (\mum)'); + % ylabel('Lateral - Medial (\mum)'); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, floor(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,floor(max(y_dim))],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + + + + %% Distance dependence + rho(isnan(rho))=0; + temp=logical(tril(rho)); + idx_up_triangle=~temp; + + all_corr = rho(idx_up_triangle); + all_distance = mat_distance(idx_up_triangle)*pix2dist; + + idx_positive_r=all_corr>=0; + all_corr_positive=all_corr(idx_positive_r); + all_distance_positive=all_distance(idx_positive_r); + + idx_negative_r=all_corr<0; + all_corr_negative=all_corr(idx_negative_r); + all_distance_negative=all_distance(idx_negative_r); + + distance_bins_all=[prctile(all_distance,[0:1:100])]; + distance_bins_positive=[prctile(all_distance_positive,[0:1:100])]; + distance_bins_negative=[prctile(all_distance_negative,[0:1:100])]; + + for i_d=1:1:numel(distance_bins_positive)-1 + + idx=all_distance>=(distance_bins_all(i_d)) & all_distance<(distance_bins_all(i_d+1)); + r_binned_all(i_d)=mean(all_corr(idx)); + bins_center_all(i_d) = (distance_bins_all(i_d) + distance_bins_all(i_d+1))/2; + + + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=mean(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=mean(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + + end + + + axes('position',[position_x(1), position_y(2), panel_width2, panel_height2]); + hold on + plot(bins_center_all,r_binned_all,'-k') + plot(bins_center_all,r_binned_all,'.k') + ylabel('Correlations (all)'); + ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); + xlim([0 max(bins_center_all)]); + xlabel('Distance (\mum)'); + + axes('position',[position_x(2), position_y(2), panel_width2, panel_height2]); + hold on + + yyaxis right + ylabel('Correlations (positive)'); + plot(bins_center_positive,r_binned_positive,'-r') + plot(bins_center_positive,r_binned_positive,'.r') + xlabel('Distance (\mum)'); + xlim([0 max(bins_center_positive)]); + + yyaxis left + plot(bins_center_negative,r_binned_negative,'-b') + plot(bins_center_negative,r_binned_negative,'.b') + ylabel('Correlations (negative)'); + + + + + % axes('position',[position_x(3), position_y(2), panel_width2, panel_width2]); + % hold on + % histogram(D,10); + % xlabel('Node degree'); + % ylabel('Counts'); + + +% axes('position',[position_x(4), position_y(2), panel_width2, panel_height2]); +% plot(1:20,explained(1:20)); +% xlabel('Principal Component #'); +% ylabel('Variance Explained'); +% box off; + %Saving the graph + + + insert(self, key); + + + dir_save_figure = [dir_current_figure 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end + diff --git a/DataJoint/+POP/ROIClusterCorrNeuropil.m b/DataJoint/+POP/ROIClusterCorrNeuropil.m new file mode 100644 index 0000000..5379d84 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrNeuropil.m @@ -0,0 +1,89 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorrNeuropil < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaFNeuropil & IMG.Mesoscope)-EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\Lick2D\Clusters\CorrNeuropil\']; + +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; +% n_clust_vector = [100, 500, 1000, 2000]; +% n_clust_vector = [20, 100, 500]; + n_clust_vector = [20, 100]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaFNeuropil & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaFNeuropil & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaFNeuropil & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,~]=corr(Fall'); + + + + key_ROIs= fetch(IMG.ROIdeltaFNeuropil & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorrNeuropilSubtr.m b/DataJoint/+POP/ROIClusterCorrNeuropilSubtr.m new file mode 100644 index 0000000..4a5e899 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrNeuropilSubtr.m @@ -0,0 +1,88 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorrNeuropilSubtr < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaFNeuropilSubtr & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\Lick2D\Clusters\CorrNeuropilSubtr\']; + +% n_clust_vector = [20, 100, 500, 1000, 2000, 5000]; +% n_clust_vector = [100, 500, 1000, 2000]; + n_clust_vector = [20, 100, 500]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaFNeuropilSubtr & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaFNeuropilSubtr & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaFNeuropilSubtr & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,~]=corr(Fall'); + + + + key_ROIs= fetch(IMG.ROIdeltaFNeuropilSubtr & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorrSVD.m b/DataJoint/+POP/ROIClusterCorrSVD.m new file mode 100644 index 0000000..4392b22 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrSVD.m @@ -0,0 +1,217 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed : int # how many of the first svd components were removed +n_clust : int # +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorrSVD < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + rel_ROI = (IMG.ROI - IMG.ROIBad) & key; + rel_data1 = IMG.ROIdeltaF & rel_ROI & key; + + time_bin=1.5; %s + % threshold_for_event_vector = [0, 0.25]; + threshold_for_event_vector = [0]; + % num_svd_components_removed_vector = [0, 1, 10]; + num_svd_components_removed_vector = [0, 1,5, 10]; + + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure_original = [dir_base 'Lick2D\Clusters\CorrSVD\']; + n_clust_vector = [20, 100]; +% n_clust_vector = [100]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + imaging_frame_rate = fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + + + %% Loading Data + key_ROIs= fetch(rel_ROI, 'ORDER BY roi_number'); + roi_list=fetchn(rel_ROI,'roi_number','ORDER BY roi_number'); + + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + +% chunk_size=500; +% for i_chunk=1:chunk_size:numel(roi_list) +% roi_interval = [i_chunk, i_chunk+chunk_size]; +% if roi_interval(end)>numel(roi_list) +% roi_interval(end) = numel(roi_list)+1; +% end +% temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & rel_ROI & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); +% temp_roi_num=fetchn(IMG.ROIdeltaF & rel_ROI & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); +% Fall(temp_roi_num,:)=temp_Fall; +% end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Thresholding activity and computing SVD and correlations + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + for i_c = 1:1:numel(num_svd_components_removed_vector) + + dir_save_figure = [dir_save_figure_original sprintf('Threshold%.2f\\SVD%d\\',threshold,num_svd_components_removed_vector(i_c))]; + + %% We take neurons with enough events during spont + behav session combined + % if threshold==0 + % % idx_enough_events=ones(size(F,1),1); + % else + + % kkk=key; + % kkk.session_epoch_type='spont_only'; + % kkk.threshold_for_event=threshold; + % epoch_spont_duration = fetchn(IMG.SessionEpochFrame & kkk, 'session_epoch_end_frame'); + % events_spont = fetchn((IMG.ROIdeltaFPeak-EXP2.SessionEpochSomatotopy) & kkk, 'number_of_events','ORDER BY roi_number'); + % + % + % kkk=key; + % kkk.session_epoch_type='behav_only'; + % kkk.threshold_for_event=threshold; + % epoch_behav_duration = fetchn(IMG.SessionEpochFrame & kkk, 'session_epoch_end_frame'); + % events_behav = fetchn((IMG.ROIdeltaFPeak-EXP2.SessionEpochSomatotopy) & kkk, 'number_of_events','ORDER BY roi_number'); + % + % if isempty(events_behav) + % events=events_spont; + % duration = epoch_spont_duration; + % elseif isempty(events_spont) + % events=events_behav; + % duration = epoch_behav_duration; + % else + % events = events_behav + events_spont; + % duration = epoch_spont_duration + epoch_behav_duration; + % end + % duration_hours=(duration/imaging_frame_rate)/3600; + % idx_enough_events = events>=(duration_hours*min_num_events); + % end + + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + % variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + % [rho,~]=corr(F_reconstruct'); + try + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + catch + F_reconstruct=gather(F_reconstruct); + rho=corrcoef(F_reconstruct'); + end + else + try + rho=corrcoef(F_thresholded'); + rho=gather(rho); + catch + F_thresholded=gather(F_thresholded); + rho=corrcoef(F_thresholded'); + end + + % [rho,~]=corr(F_thresholded'); + end + + + + rho(isnan(rho))=0; + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key.subject_id; + k(i).session=key.session; + k(i).session_epoch_type=key.session_epoch_type; + k(i).session_epoch_number=key.session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).threshold_for_event=threshold; + k(i).num_svd_components_removed=num_svd_components_removed_vector(i_c); + k(i).n_clust=n_clust_vector(in); + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + end + + end + end + end +end diff --git a/DataJoint/+POP/ROIClusterCorrThresholded.m b/DataJoint/+POP/ROIClusterCorrThresholded.m new file mode 100644 index 0000000..8bd5012 --- /dev/null +++ b/DataJoint/+POP/ROIClusterCorrThresholded.m @@ -0,0 +1,101 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +threshold_for_event : double # threshold in deltaf_overf +--- +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROIClusterCorrThresholded < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) +% threshold_for_event_vector = [0.1, 0.25, 0.5, 1]; + threshold_for_event_vector = [0.1, 0.25]; + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure_original = [dir_base 'Lick2D\Clusters\CorrThresholded\']; +% smooth_window=1; +% n_clust_vector = [100, 500, 1000]; + n_clust_vector = [100, 500]; + + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end +% Fall=movmean(Fall,[smooth_window smooth_window],2,'omitnan','Endpoints','shrink'); + + + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + dir_save_figure = [dir_save_figure_original sprintf('Threshold%.2f',threshold) '\']; + Fall_thresholded=Fall; + Fall_thresholded(Fall<=threshold)=0; + % Fall(Fall>threshold)=1; + [rho,~]=corr(Fall_thresholded'); + rho(isnan(rho(:)))=0; + + + + key_ROIs= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + + for in = 1:1:numel(n_clust_vector) + if in==1 + flag_plot =1; + else + flag_plot =0; + end + + key.n_clust=n_clust_vector(in); + clusterparam.n_clust=n_clust_vector(in); + [cl_id, cluster_percent] = fn_ClusterROI_corr(rho, key, clusterparam, dir_save_figure, flag_plot); + k = key; + % Insert + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).n_clust=n_clust_vector(in); + k(i).threshold_for_event=threshold; + k(i).heirar_cluster_id = cl_id(i); + k(i).heirar_cluster_percent = cluster_percent(cl_id(i)); + + end + insert(self,k); + end + end + + end + end +end diff --git a/DataJoint/+POP/ROICorrLocal.m b/DataJoint/+POP/ROICorrLocal.m new file mode 100644 index 0000000..c6f8b82 --- /dev/null +++ b/DataJoint/+POP/ROICorrLocal.m @@ -0,0 +1,58 @@ +%{ +# ROI responses to each photostim group +-> EXP2.SessionEpoch +-> IMG.ROI +radius_size : double # radius size +--- +corr_local=null : double # correlation of dff between a given cell and all of its neihgbors within radius_size +%} + + +classdef ROICorrLocal < dj.Computed + properties + keySource = (EXP2.SessionEpoch & IMG.ROI & IMG.ROIdeltaF & IMG.Mesoscope) - EXP2.SessionEpochSomatotopy; + end + methods(Access=protected) + function makeTuples(self, key) + + radius_size_vector=[20,30,40,50,100]; + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + x_all=fetchn(IMG.ROI &key,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(IMG.ROI &key,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(IMG.ROI*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + roi_list=fetchn(IMG.ROIdeltaF &key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + for ir=1:1:numel(radius_size_vector) + fn_local_correlations_space(key, key_ROI,Fall,x_all, y_all, radius_size_vector(ir) ) + end + + end + end +end + + diff --git a/DataJoint/+POP/ROICorrLocalPhoto.m b/DataJoint/+POP/ROICorrLocalPhoto.m new file mode 100644 index 0000000..54574c3 --- /dev/null +++ b/DataJoint/+POP/ROICorrLocalPhoto.m @@ -0,0 +1,102 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +-> IMG.ROI +radius_size : float # radius size, in um in lateral dimension +num_svd_components_removed : int # how many of the first svd components were removed +--- +corr_local=null : float # trace (dff or spikes) correlation between a given cell (seed) and all of its neihgbors within radius_size +corr_local_without_inner_ring : float # same as above, but ecxluding neurons within min_lateral_distanceb from the seed + +num_neurons_in_radius =null : float # number of neurons within radius_size from the seed +num_neurons_in_radius_without_inner_ring =null : float # number of neurons within radius size, exluding neurons within min_lateral_distanceb from the seed + +%} + + +classdef ROICorrLocalPhoto < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes & (EXP2.Session & STIM.ROIResponseDirect) & IMG.Volumetric; + end + methods(Access=protected) + function makeTuples(self, key) + + num_svd_components_removed_vector = [0, 1 , 10, 100]; + + time_bin=1; %s + min_lateral_distance =25; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = IMG.ROISpikes & rel_roi & key; + + % radius_size_vector=[25,50,75,100, 125, 150, 175, 200]; + radius_size_vector=[50,100,200]; + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + + + key_ROI=fetch(rel_roi,'ORDER BY roi_number'); + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_all = x_all * pix2dist; + y_all = y_all * pix2dist; + + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + else + F_binned=F_original; + end + + clear F_original + + F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + F=F_binned; + end + F=gather(F); + + + for ir = 1:1:numel(radius_size_vector) + fn_local_correlations_space(key, key_ROI,F,x_all, y_all, radius_size_vector(ir), self, min_lateral_distance ) + end + end + end + end +end + + + diff --git a/DataJoint/+POP/ROIPCA.m b/DataJoint/+POP/ROIPCA.m new file mode 100644 index 0000000..7298fcd --- /dev/null +++ b/DataJoint/+POP/ROIPCA.m @@ -0,0 +1,59 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +component_id : int +--- +roi_coeff : double # for this component +%} + +classdef ROIPCA < dj.Computed + properties + + keySource = EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope; + + end + methods(Access=protected) + function makeTuples(self, key) + + num_components = 20; + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + Fall=zscore(Fall,[],2); + [coeff,score,~, ~, explained]=pca(Fall','NumComponents',num_components); + + + key_ROIs= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + + for ic = 1:1:num_components + for i=1:1:size(key_ROIs,1) + k(i).subject_id=key_ROIs(i).subject_id; + k(i).session=key_ROIs(i).session; + k(i).session_epoch_type=key_ROIs(i).session_epoch_type; + k(i).session_epoch_number=key_ROIs(i).session_epoch_number; + k(i).fov_num=key_ROIs(i).fov_num; + k(i).plane_num=key_ROIs(i).plane_num; + k(i).channel_num=key_ROIs(i).channel_num; + k(i).roi_number=key_ROIs(i).roi_number; + + k(i).component_id=ic; + k(i).roi_coeff = coeff(i,ic); + end + insert(self,k); + end + + + end + end +end diff --git a/DataJoint/+POP/ROISVD.m b/DataJoint/+POP/ROISVD.m new file mode 100644 index 0000000..2c84fa4 --- /dev/null +++ b/DataJoint/+POP/ROISVD.m @@ -0,0 +1,40 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +roi_components : longblob # contribution of the temporal components to the activity of each neurons; fetching this table for all neurons should give U in SVD of size (neurons x components) for the top num_comp components +%} + +classdef ROISVD < dj.Computed + properties + keySource =(EXP2.SessionEpoch & IMG.ROIdeltaF & STIMANAL.MiceIncluded)- EXP2.SessionEpochSomatotopy; + end + methods(Access=protected) + function makeTuples(self, key) + + threshold_for_event_vector=[0, 1, 2]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + rel_data1 = (IMG.ROIdeltaF & key)-IMG.ROIBad; + self2 = POP.SVDSingularValues; + self3 = POP.SVDTemporalComponents; + for it=1:1:numel(time_bin_vector) + fn_compute_SVD(key,rel_data1, self, self2, self3, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + + end + end +end diff --git a/DataJoint/+POP/ROISVDCrossValid.m b/DataJoint/+POP/ROISVDCrossValid.m new file mode 100644 index 0000000..2619134 --- /dev/null +++ b/DataJoint/+POP/ROISVDCrossValid.m @@ -0,0 +1,45 @@ +%{ +# +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +shared_variance_stringer : longblob # shared variance explained by each component from train set on the test set +total_variance_stringer : longblob # total variance explained by each component from train set + +var_explained_train : longblob # variance explained in the training set by itself +var_explained_test : longblob # variance explained in the test set by the training set +my_shared_variance : longblob # shared variance 1 - (var_explained_test - var_explained_train)./(var_explained_test + var_explained_train) + +%} + +classdef ROISVDCrossValid < dj.Computed + properties + keySource =((EXP2.SessionEpoch & IMG.ROIdeltaF & STIMANAL.MiceIncluded)- EXP2.SessionEpochSomatotopy) & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + +% threshold_for_event_vector=[0, 1, 2]; + threshold_for_event_vector=[0]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + rel_data1 = (IMG.ROIdeltaF & key)-IMG.ROIBad; + + for it=1:1:numel(time_bin_vector) + fn_compute_SVD_crossvalid(key,rel_data1, self, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + + end + end +end diff --git a/DataJoint/+POP/ROISVDCrossValid2.m b/DataJoint/+POP/ROISVDCrossValid2.m new file mode 100644 index 0000000..3c0c851 --- /dev/null +++ b/DataJoint/+POP/ROISVDCrossValid2.m @@ -0,0 +1,45 @@ +%{ +# +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +shared_variance_stringer : longblob # shared variance explained by each component from train set on the test set +total_variance_stringer : longblob # total variance explained by each component from train set + +var_explained_train : longblob # variance explained in the training set by itself +var_explained_test : longblob # variance explained in the test set by the training set +my_shared_variance : longblob # shared variance 1 - (var_explained_test - var_explained_train)./(var_explained_test + var_explained_train) + +%} + +classdef ROISVDCrossValid2 < dj.Computed + properties + keySource =((EXP2.SessionEpoch & IMG.ROIdeltaF & STIMANAL.MiceIncluded)- EXP2.SessionEpochSomatotopy) & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + +% threshold_for_event_vector=[0, 1, 2]; + threshold_for_event_vector=[0]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + rel_data1 = (IMG.ROIdeltaF & key)-IMG.ROIBad; + + for it=1:1:numel(time_bin_vector) + fn_compute_SVD_crossvalid(key,rel_data1, self, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + + end + end +end diff --git a/DataJoint/+POP/ROISVDDistanceScale.m b/DataJoint/+POP/ROISVDDistanceScale.m new file mode 100644 index 0000000..7350744 --- /dev/null +++ b/DataJoint/+POP/ROISVDDistanceScale.m @@ -0,0 +1,80 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +--- +distance_tau : blob # spatial scale for each component of the similarity of its weights +num_components : int # number of components analyzed, is limited to 1000 +rd_distance_components : blob # mean relative difference between weights values for each component as a funciton of distance betwee pairs. shuffled values are already subtracted. high values mean high similarity +distance_bins_centers : blob # +%} + + +classdef ROISVDDistanceScale < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & POP.ROISVD & (IMG.Mesoscope); + end + methods(Access=protected) + function makeTuples(self, key) + + minimal_distance=25; %microns + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + % radius_size_vector=[100, 200, 500, 1000]; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + + dXY_mat=zeros(numel(x_all),numel(x_all)); + % d3D=zeros(numel(x_all),numel(x_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + % z=z_all(iROI); + dXY_mat(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + idx_diagonal = 1:size(dXY_mat, 1)+1:numel(dXY_mat); + idx_up_triangle=~logical(tril(dXY_mat)); + idx_up_triangle(idx_diagonal) = false; + idx_up_triangle(dXY_mat= distance_bins(i_d) & dXY_mat < distance_bins(i_d+1); + end + + num_components = min(size(ROI_WEIGHTS,2),1000); + tic + [distance_tau,rd_distance_components] = fn_spatial_scale(ROI_WEIGHTS, DISTANCE_IDX,idx_up_triangle, distance_bins_centers, num_components); + toc + key.distance_tau = distance_tau; + key.num_components = num_components; + key.rd_distance_components = rd_distance_components; + key.distance_bins_centers = distance_bins_centers; + + insert(self,key); + end + end +end + diff --git a/DataJoint/+POP/ROISVDDistanceScaleNeuropil.m b/DataJoint/+POP/ROISVDDistanceScaleNeuropil.m new file mode 100644 index 0000000..c623720 --- /dev/null +++ b/DataJoint/+POP/ROISVDDistanceScaleNeuropil.m @@ -0,0 +1,81 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +--- +distance_tau : blob # spatial scale for each component of the similarity of its weights +num_components : int # number of components analyzed, is limited to 1000 +rd_distance_components : blob # mean relative difference between weights values for each component as a funciton of distance betwee pairs. shuffled values are already subtracted. high values mean high similarity +distance_bins_centers : blob # +%} + + +classdef ROISVDDistanceScaleNeuropil < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & POP.ROISVDNeuropil & (IMG.Mesoscope); + end + methods(Access=protected) + function makeTuples(self, key) + + minimal_distance=25; %microns + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVDNeuropil & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + % radius_size_vector=[100, 200, 500, 1000]; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + + dXY_mat=zeros(numel(x_all),numel(x_all)); + % d3D=zeros(numel(x_all),numel(x_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + % z=z_all(iROI); + dXY_mat(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + idx_diagonal = 1:size(dXY_mat, 1)+1:numel(dXY_mat); + idx_up_triangle=~logical(tril(dXY_mat)); + idx_up_triangle(idx_diagonal) = false; + idx_up_triangle(dXY_mat= distance_bins(i_d) & dXY_mat < distance_bins(i_d+1); + end + + num_components = min(size(ROI_WEIGHTS,2),1000); + tic + [distance_tau,rd_distance_components] = fn_spatial_scale(ROI_WEIGHTS, DISTANCE_IDX,idx_up_triangle, distance_bins_centers, num_components); + toc + key.distance_tau = distance_tau; + key.num_components = num_components; + key.rd_distance_components = rd_distance_components; + key.distance_bins_centers = distance_bins_centers; + + insert(self,key); + end + end +end + diff --git a/DataJoint/+POP/ROISVDDistanceScaleSpikes.m b/DataJoint/+POP/ROISVDDistanceScaleSpikes.m new file mode 100644 index 0000000..5877bb7 --- /dev/null +++ b/DataJoint/+POP/ROISVDDistanceScaleSpikes.m @@ -0,0 +1,80 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +--- +distance_tau : blob # spatial scale for each component of the similarity of its weights +num_components : int # number of components analyzed, is limited to 1000 +rd_distance_components : blob # mean relative difference between weights values for each component as a funciton of distance betwee pairs. shuffled values are already subtracted. high values mean high similarity +distance_bins_centers : blob # +%} + + +classdef ROISVDDistanceScaleSpikes < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & POP.ROISVDSpikes & (IMG.Mesoscope); + end + methods(Access=protected) + function makeTuples(self, key) + + minimal_distance=25; %microns + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVDSpikes & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + % radius_size_vector=[100, 200, 500, 1000]; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + + dXY_mat=zeros(numel(x_all),numel(x_all)); + % d3D=zeros(numel(x_all),numel(x_all)); + parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + % z=z_all(iROI); + dXY_mat(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + end + + idx_diagonal = 1:size(dXY_mat, 1)+1:numel(dXY_mat); + idx_up_triangle=~logical(tril(dXY_mat)); + idx_up_triangle(idx_diagonal) = false; + idx_up_triangle(dXY_mat= distance_bins(i_d) & dXY_mat < distance_bins(i_d+1); + end + + num_components = min(size(ROI_WEIGHTS,2),1000); + tic + [distance_tau,rd_distance_components] = fn_spatial_scale(ROI_WEIGHTS, DISTANCE_IDX,idx_up_triangle, distance_bins_centers, num_components); + toc + key.distance_tau = distance_tau; + key.num_components = num_components; + key.rd_distance_components = rd_distance_components; + key.distance_bins_centers = distance_bins_centers; + + insert(self,key); + end + end +end + diff --git a/DataJoint/+POP/ROISVDNeuropil.m b/DataJoint/+POP/ROISVDNeuropil.m new file mode 100644 index 0000000..07b8f52 --- /dev/null +++ b/DataJoint/+POP/ROISVDNeuropil.m @@ -0,0 +1,41 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +roi_components : longblob # contribution of the temporal components to the activity of each neurons; fetching this table for all neurons should give U in SVD of size (neurons x components) for the top num_comp components +%} + +classdef ROISVDNeuropil < dj.Computed + properties + + keySource =(EXP2.SessionEpoch & IMG.ROIdeltaFNeuropil & STIMANAL.MiceIncluded) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + threshold_for_event_vector=[0,1,2]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + + rel_data1 = IMG.ROIdeltaFNeuropil-IMG.ROIBad; + self2 = POP.SVDSingularValuesNeuropil; + self3 = POP.SVDTemporalComponentsNeuropil; + for it=1:1:numel(time_bin_vector) + fn_compute_SVD(key,rel_data1, self, self2, self3, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + end + end +end diff --git a/DataJoint/+POP/ROISVDNeuropilSubtr.m b/DataJoint/+POP/ROISVDNeuropilSubtr.m new file mode 100644 index 0000000..192debd --- /dev/null +++ b/DataJoint/+POP/ROISVDNeuropilSubtr.m @@ -0,0 +1,42 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +roi_components : longblob # contribution of the temporal components to the activity of each neurons; fetching this table for all neurons should give U in SVD of size (neurons x components) for the top num_comp components +%} + +classdef ROISVDNeuropilSubtr < dj.Computed + properties + + keySource =(EXP2.SessionEpoch & IMG.ROIdeltaFNeuropilSubtr & STIMANAL.MiceIncluded) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + threshold_for_event_vector=[0, 1, 2]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + rel_data1 = (IMG.ROIdeltaFNeuropilSubtr & key)-IMG.ROIBad; + self2 = POP.SVDSingularValuesNeuropilSubtract; + self3 = POP.SVDTemporalComponentsNeuropilSubtract; + for it=1:1:numel(time_bin_vector) + fn_compute_SVD(key,rel_data1, self, self2, self3, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + + end + end +end diff --git a/DataJoint/+POP/ROISVDSpatialScale.m b/DataJoint/+POP/ROISVDSpatialScale.m new file mode 100644 index 0000000..bf9c8be --- /dev/null +++ b/DataJoint/+POP/ROISVDSpatialScale.m @@ -0,0 +1,59 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +--- +similarity_local_mean : blob # correlation of principal components weights between a given cell and all of its neihgbors within radius_size, for each principal component. We ecxlude neurons within min_lateral_distanceb from the seed +similarity_local_mean_shuffled : blob # correlation of principal components weights between a given cell and all of its neihgbors within radius_size, for each principal component. We ecxlude neurons within min_lateral_distanceb from the seed +radius_size_vector : blob # radius size, in um in lateral dimension +num_components : int # number of components analyzed, is limited to 1000 +%} + + +classdef ROISVDSpatialScale < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes & POP.ROISVD & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + + min_lateral_distance =25; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVD & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + radius_size_vector=[50, 100, 500, 1000]; + % radius_size_vector=[100, 200, 500, 1000]; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + + for ir = 1:1:numel(radius_size_vector) + + [similarity_local,similarity_local_shuffled] = fn_local_similarity_space(ROI_WEIGHTS,x_all, y_all, radius_size_vector(ir), min_lateral_distance ); + + SPATIAL_SCALE_mean(ir,:) = nanmean(cell2mat(similarity_local),1); + SPATIAL_SCALE_mean_shuffled(ir,:) = nanmean(cell2mat(similarity_local_shuffled),1); + end + + key.similarity_local_mean = SPATIAL_SCALE_mean; + key.similarity_local_mean_shuffled = SPATIAL_SCALE_mean_shuffled; + key.radius_size_vector = radius_size_vector; + key.num_components = size(SPATIAL_SCALE_mean,2); + + insert(self,key); + end + end +end diff --git a/DataJoint/+POP/ROISVDSpatialScaleSpikes.m b/DataJoint/+POP/ROISVDSpatialScaleSpikes.m new file mode 100644 index 0000000..c9504f8 --- /dev/null +++ b/DataJoint/+POP/ROISVDSpatialScaleSpikes.m @@ -0,0 +1,79 @@ +%{ +# Local correlation +-> EXP2.SessionEpoch +--- +similarity_local_mean : blob # correlation of principal components weights between a given cell and all of its neihgbors within radius_size, for each principal component. We ecxlude neurons within min_lateral_distanceb from the seed +similarity_local_mean_shuffled : blob # correlation of principal components weights between a given cell and all of its neihgbors within radius_size, for each principal component. We ecxlude neurons within min_lateral_distanceb from the seed +radius_size_vector : blob # radius size, in um in lateral dimension +num_components : int # number of components analyzed, is limited to 1000 +%} + + +classdef ROISVDSpatialScaleSpikes < dj.Computed + properties + keySource = EXP2.SessionEpoch & IMG.ROI & IMG.ROISpikes & POP.ROISVDSpikes & IMG.Mesoscope; + end + methods(Access=protected) + function makeTuples(self, key) + + + min_lateral_distance =25; + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = (POP.ROISVDSpikes & 'threshold_for_event=0' & 'time_bin=1.5') & rel_roi & key; + + radius_size_vector=[50, 100, 500, 1000]; + % radius_size_vector=[100, 200, 500, 1000]; + + x_all=fetchn(rel_roi,'roi_centroid_x','ORDER BY roi_number'); + y_all=fetchn(rel_roi,'roi_centroid_y','ORDER BY roi_number'); + + x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates ,'x_pos_relative','ORDER BY roi_number'); + y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates,'y_pos_relative','ORDER BY roi_number'); + + x_all = x_all + x_pos_relative; + y_all = y_all + y_pos_relative; + x_all = x_all/0.75; + y_all = y_all/0.5; + + DATA=fetch(rel_data,'*'); + ROI_WEIGHTS = cell2mat({DATA.roi_components}'); + + + for ir = 1:1:numel(radius_size_vector) + + [similarity_local,similarity_local_shuffled] = fn_local_similarity_space(ROI_WEIGHTS,x_all, y_all, radius_size_vector(ir), min_lateral_distance ); + + SPATIAL_SCALE_mean(ir,:) = nanmean(cell2mat(similarity_local),1); + SPATIAL_SCALE_mean_shuffled(ir,:) = nanmean(cell2mat(similarity_local_shuffled),1); + end + + key.similarity_local_mean = SPATIAL_SCALE_mean; + key.similarity_local_mean_shuffled = SPATIAL_SCALE_mean_shuffled; + key.radius_size_vector = radius_size_vector; + key.num_components = size(SPATIAL_SCALE_mean,2); + + insert(self,key); + end + end +end + + % function [similarity_local,similarity_local_shuffled] = fn_local_similarity_space(W,x_all, y_all, radius_size, min_lateral_distance ) + +% radius_size = radius_size_vector(ir); + % ir; + % for i_c = 1:1:min(size(ROI_WEIGHTS,2),1000) + % i_c; + % W = ROI_WEIGHTS(:,i_c); + % + % % % %%% MAP for debug + % % bins1 = prctile(current_svd_weigts, [0:5:100]); + % % [N,edges,bin]=histcounts(current_svd_weigts,bins1); + % % % ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); + % % my_colormap=jet(numel(bins1)); + % % % my_colormap=plasma(numel(time_bins1)); + % % hold on + % % for i_roi=1:1:size(key_ROI,1) + % % plot(x_all(i_roi), y_all(i_roi),'.','Color',my_colormap(bin(i_roi),:),'MarkerSize',7) + % % end + % diff --git a/DataJoint/+POP/ROISVDSpikes.m b/DataJoint/+POP/ROISVDSpikes.m new file mode 100644 index 0000000..34e2556 --- /dev/null +++ b/DataJoint/+POP/ROISVDSpikes.m @@ -0,0 +1,42 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +threshold_for_event : double # threshold in zscore, after binning. 0 means we don't threshold. 1 means we take only positive events exceeding 1 std, 2 means 2 std etc. +time_bin : double # time window used for binning the data. 0 means no binning +--- +roi_components : longblob # contribution of the temporal components to the activity of each neurons; fetching this table for all neurons should give U in SVD of size (neurons x components) for the top num_comp components +%} + +classdef ROISVDSpikes < dj.Computed + properties + + keySource =(EXP2.SessionEpoch & IMG.ROISpikes & STIMANAL.MiceIncluded) - EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + threshold_for_event_vector=[0]; + + rel_temp = IMG.Mesoscope & key; + if rel_temp.count>0 % i.e its mesoscope data + time_bin_vector=[1.5]; % we will bin the data into these time bins before doing SVD + else + time_bin_vector=[0.5, 1.5]; % we will bin the data into these time bins before doing SVD + end + + flag_zscore=1; %0 only centering the data (i.e. mean subtraction), 1 zscoring the data + threshold_variance_explained = 0.9; % We will save the weights of neurons (U) only for number of components needed to reach that level of cumulative variance explained + num_components_save = 100; % We will save only this number of components + + rel_data1 = (IMG.ROISpikes & key)-IMG.ROIBad; + self2 = POP.SVDSingularValuesSpikes; + self3 = POP.SVDTemporalComponentsSpikes; + for it=1:1:numel(time_bin_vector) + fn_compute_SVD(key,rel_data1, self, self2, self3, flag_zscore, time_bin_vector(it), threshold_for_event_vector, threshold_variance_explained, num_components_save) + end + + end + end +end diff --git a/DataJoint/+POP/ROISubClusterCorr.m b/DataJoint/+POP/ROISubClusterCorr.m new file mode 100644 index 0000000..224fee5 --- /dev/null +++ b/DataJoint/+POP/ROISubClusterCorr.m @@ -0,0 +1,104 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +n_clust : int +heirar_cluster_id : int # cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +n_sub_clust : int +--- +heirar_sub_cluster_id : int # sub cluster to which this cell belongs. Note that this id is not unique, because clustering is done independently for different combinations of the primary keys, and the cluster_id would change accordingly +heirar_sub_cluster_percent : double # percentage of cells belonging to this cluster +%} + +classdef ROISubClusterCorr < dj.Computed + properties + + keySource = (EXP2.SessionEpoch & IMG.ROIdeltaF & IMG.Mesoscope)- EXP2.SessionEpochSomatotopy; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\Clusters\Corr\SubCluster\']; + + n_clust_vector = [100, 500, 1000]; + n_sub_clust_vector = [100,500]; + heirar_cluster_id_vector=1:1:5; + clusterparam.metric='correlation'; %euclidean or correlation + + clusterparam.agregate_clusters_flag = 0; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + + clusterparam.corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + clusterparam.corr_thresh_within_cluster_target = 0.8; + + + + roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); + chunk_size=500; + for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; + end + + + [rho,~]=corr(Fall'); + + key_ROIs_all= fetch(IMG.ROIdeltaF & key, 'ORDER BY roi_number'); + key_original = key; + for in = 1:1:numel(n_clust_vector) + key = key_original; + key.n_clust = n_clust_vector(in); + heirar_cluster_id = fetchn(POP.ROIClusterCorr & key,'heirar_cluster_id', 'ORDER BY roi_number'); + + for ic=1:1:numel(heirar_cluster_id_vector) + idx_cluster = (heirar_cluster_id==heirar_cluster_id_vector(ic)); + key.heirar_cluster_id = heirar_cluster_id_vector(ic); + r_cluster = rho(idx_cluster,idx_cluster); + key_ROIs = key_ROIs_all(idx_cluster); + + for in_sub=1:1:numel(n_sub_clust_vector) + if sum(idx_cluster) EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +singular_values : longblob # singular values of each SVD temporal component, ordered from larges to smallest value +%} + +classdef SVDSingularValues < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+POP/SVDSingularValuesNeuropil.m b/DataJoint/+POP/SVDSingularValuesNeuropil.m new file mode 100644 index 0000000..7f61a94 --- /dev/null +++ b/DataJoint/+POP/SVDSingularValuesNeuropil.m @@ -0,0 +1,21 @@ +%{ +# +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +singular_values : longblob # singular values of each SVD temporal component, ordered from larges to smallest value +%} + +classdef SVDSingularValuesNeuropil < dj.Computed + properties + + keySource = EXP2.SessionEpoch; + + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+POP/SVDSingularValuesNeuropilSubtract.m b/DataJoint/+POP/SVDSingularValuesNeuropilSubtract.m new file mode 100644 index 0000000..435ff61 --- /dev/null +++ b/DataJoint/+POP/SVDSingularValuesNeuropilSubtract.m @@ -0,0 +1,16 @@ +%{ +# +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +singular_values : longblob # singular values of each SVD temporal component, ordered from larges to smallest value +%} + +classdef SVDSingularValuesNeuropilSubtract < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+POP/SVDSingularValuesSpikes.m b/DataJoint/+POP/SVDSingularValuesSpikes.m new file mode 100644 index 0000000..e41da92 --- /dev/null +++ b/DataJoint/+POP/SVDSingularValuesSpikes.m @@ -0,0 +1,16 @@ +%{ +# +-> EXP2.SessionEpoch +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +singular_values : longblob # singular values of each SVD temporal component, ordered from larges to smallest value +%} + +classdef SVDSingularValuesSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+POP/SVDTemporalComponents.m b/DataJoint/+POP/SVDTemporalComponents.m new file mode 100644 index 0000000..f685230 --- /dev/null +++ b/DataJoint/+POP/SVDTemporalComponents.m @@ -0,0 +1,17 @@ +%{ +# +-> EXP2.SessionEpoch +component_id : int +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +temporal_component : longblob # temporal component after SVD (fetching this table for all components should give the Vtransopose matrix from SVD) of size (components x frames). Includes the top num_comp components +%} + +classdef SVDTemporalComponents < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+POP/SVDTemporalComponentsNeuropil.m b/DataJoint/+POP/SVDTemporalComponentsNeuropil.m new file mode 100644 index 0000000..27775f9 --- /dev/null +++ b/DataJoint/+POP/SVDTemporalComponentsNeuropil.m @@ -0,0 +1,22 @@ +%{ +# +-> EXP2.SessionEpoch +component_id : int +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +temporal_component : longblob # temporal component after SVD (fetching this table for all components should give the Vtransopose matrix from SVD) of size (components x frames). Includes the top num_comp components +%} + +classdef SVDTemporalComponentsNeuropil < dj.Computed + properties + + keySource = EXP2.SessionEpoch; + + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+POP/SVDTemporalComponentsNeuropilSubtract.m b/DataJoint/+POP/SVDTemporalComponentsNeuropilSubtract.m new file mode 100644 index 0000000..44ccd27 --- /dev/null +++ b/DataJoint/+POP/SVDTemporalComponentsNeuropilSubtract.m @@ -0,0 +1,17 @@ +%{ +# +-> EXP2.SessionEpoch +component_id : int +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +temporal_component : longblob # temporal component after SVD (fetching this table for all components should give the Vtransopose matrix from SVD) of size (components x frames). Includes the top num_comp components +%} + +classdef SVDTemporalComponentsNeuropilSubtract < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+POP/SVDTemporalComponentsSpikes.m b/DataJoint/+POP/SVDTemporalComponentsSpikes.m new file mode 100644 index 0000000..418d736 --- /dev/null +++ b/DataJoint/+POP/SVDTemporalComponentsSpikes.m @@ -0,0 +1,17 @@ +%{ +# +-> EXP2.SessionEpoch +component_id : int +threshold_for_event : double # threshold in deltaf_overf +time_bin : double #time window used for binning the data. 0 means no binning +--- +temporal_component : longblob # temporal component after SVD (fetching this table for all components should give the Vtransopose matrix from SVD) of size (components x frames). Includes the top num_comp components +%} + +classdef SVDTemporalComponentsSpikes < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+POP/getSchema.m b/DataJoint/+POP/getSchema.m new file mode 100644 index 0000000..395d2a1 --- /dev/null +++ b/DataJoint/+POP/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'POP', 'arseny_analysis_pop'); +end +obj = schemaObject; +end diff --git a/DataJoint/+POP/test.m b/DataJoint/+POP/test.m new file mode 100644 index 0000000..dd381f8 --- /dev/null +++ b/DataJoint/+POP/test.m @@ -0,0 +1,22 @@ +function test() +key.subject_id = 463189; +key.session =1; +key.session_epoch_number = 1; + +roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); +chunk_size=500; +for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; +end + + +[rho,pval]=corr(Fall'); +Y = tsne(rho, 'Perplexity', 500); + +plot(Y(:,1),Y(:,2),'.'); \ No newline at end of file diff --git a/DataJoint/+POP/test_tsne.m b/DataJoint/+POP/test_tsne.m new file mode 100644 index 0000000..de810b3 --- /dev/null +++ b/DataJoint/+POP/test_tsne.m @@ -0,0 +1,22 @@ +function test() +key.subject_id = 463189; +key.session =1; +key.session_epoch_number = 1; + +roi_list=fetchn(IMG.ROIdeltaF & key,'roi_number','ORDER BY roi_number'); +chunk_size=500; +for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + temp_Fall=cell2mat(fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + temp_roi_num=fetchn(IMG.ROIdeltaF & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; +end + + +[rho,pval]=corr(Fall'); +Y = tsne(rho); + +plot(Y(:,1),Y(:,2),'.'); \ No newline at end of file diff --git a/DataJoint/+RIDGE/PredictorType.m b/DataJoint/+RIDGE/PredictorType.m new file mode 100644 index 0000000..cf95702 --- /dev/null +++ b/DataJoint/+RIDGE/PredictorType.m @@ -0,0 +1,41 @@ +%{ +# +predictor_name : varchar(200) # +--- +predictor_category : varchar(1000) # +predictor_description : varchar(1000) # +%} + + +classdef PredictorType < dj.Lookup + properties + contents = { + + 'LickPortEntrance' 'task' 'lickport entrance' + 'LickPortExit' 'task' 'lickport exit' + 'LickPortBlockStart' 'task' 'beginning of a new block' + + 'AutoWater' 'task' '1 if autowater trial - i.e. water was delivered at lickport entrance, 0 otherwise' + 'RewardDelivery' 'task' 'time when reward was delivered, if it was an autowater trial reward delivery would be at lickport entrance, otherwise at the beginning of answer period' + 'RewardSize' 'task' '1 large, 0 regular or omission' + 'RewardOmission' 'task' '0 no omission - i.e. regular or large reward, 1 omission' + + 'Lick' 'lick' '' + 'LickTouch' 'lick' '' + 'LickNoTouch' 'lick' '' + 'LickTouchReward' 'lick' '' + 'LickTouchNoReward' 'lick' '' + 'LickTouchNoRewardOmitted' 'lick' 'licks with touch on trials in which reward was omitted' + + 'FirstLickTouch' 'task' '' + 'FirstLickReward' 'task' 'first lick with touch after reward was presented' + + 'PawFrontLeft' 'move' 'Left Front Paw' + 'PawFrontRight' 'move' 'Right Front Paw' + 'Whiskers' 'move' 'Whiskers' + 'Nose' 'move' 'Nose' + 'Jaw' 'move' 'Jaw' + }; + end +end + diff --git a/DataJoint/+RIDGE/PredictorTypeUse.m b/DataJoint/+RIDGE/PredictorTypeUse.m new file mode 100644 index 0000000..3eadf57 --- /dev/null +++ b/DataJoint/+RIDGE/PredictorTypeUse.m @@ -0,0 +1,27 @@ +%{ +# +predictor_name : varchar(200) # +--- +%} + + +classdef PredictorTypeUse < dj.Lookup + properties + contents = { + + 'LickPortBlockStart' + + 'RewardSize' + + 'Lick' + 'RewardDelivery' + 'RewardOmission' + + 'PawFrontLeft' + 'PawFrontRight' + 'Whiskers' + 'Jaw' + }; + end +end + diff --git a/DataJoint/+RIDGE/Predictors.m b/DataJoint/+RIDGE/Predictors.m new file mode 100644 index 0000000..52db6ca --- /dev/null +++ b/DataJoint/+RIDGE/Predictors.m @@ -0,0 +1,22 @@ +%{ +# +-> EXP2.SessionTrial +-> RIDGE.PredictorType +--- +trial_predictor = null : blob # predictor time series, resampled according to neural data rate +%} + +classdef Predictors < dj.Imported + properties + keySource = (EXP2.SessionTrial & TRACKING.TrackingTrial)-TRACKING.TrackingTrialBad - (TRACKING.VideoGroomingTrial); + end + methods(Access=protected) + + function makeTuples(self, key) + + fn_compute_predictors (key,self); + + end + end + +end \ No newline at end of file diff --git a/DataJoint/+RIDGE/ROIRidge.m b/DataJoint/+RIDGE/ROIRidge.m new file mode 100644 index 0000000..4eed9d5 --- /dev/null +++ b/DataJoint/+RIDGE/ROIRidge.m @@ -0,0 +1,27 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +-> RIDGE.PredictorType +time_shift : int # in units of 2p-imaging frames +--- +predictor_beta : double # beta coefficient of the ridge regression +%} + + +classdef ROIRidge < dj.Imported + properties + keySource = (EXP2.SessionEpoch) & IMG.ROI & 'session_epoch_type="behav_only"' & RIDGE.Predictors; + end + methods(Access=protected) + function makeTuples(self, key) + time_shift_vec=[-2:1:7]; + rel_data1 = POP.ROISVD; + rel_data2 = POP.SVDSingularValues; + rel_data3 = POP.SVDTemporalComponents; + self2 = RIDGE.ROIRidgeVarExplained; + fn_compute_Ridge_svd(key,self,self2, rel_data1,rel_data2,rel_data3, time_shift_vec); + + end + end +end diff --git a/DataJoint/+RIDGE/ROIRidgeNeuropil.m b/DataJoint/+RIDGE/ROIRidgeNeuropil.m new file mode 100644 index 0000000..f0addc7 --- /dev/null +++ b/DataJoint/+RIDGE/ROIRidgeNeuropil.m @@ -0,0 +1,27 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +-> RIDGE.PredictorType +time_shift : int # in units of 2p-imaging frames +--- +predictor_beta : double # beta coefficient of the ridge regression +%} + + +classdef ROIRidgeNeuropil < dj.Imported + properties + keySource = (EXP2.SessionEpoch) & IMG.ROI & 'session_epoch_type="behav_only"' & RIDGE.Predictors; + end + methods(Access=protected) + function makeTuples(self, key) + time_shift_vec=[-2:1:7]; + rel_data1 = POP.ROISVDNeuropil; + rel_data2 = POP.SVDSingularValuesNeuropil; + rel_data3 = POP.SVDTemporalComponentsNeuropil; + self2 = RIDGE.ROIRidgeVarExplainedNeuropil; + fn_compute_Ridge_svd(key,self,self2, rel_data1,rel_data2,rel_data3, time_shift_vec); + + end + end +end diff --git a/DataJoint/+RIDGE/ROIRidgeVarExplained.m b/DataJoint/+RIDGE/ROIRidgeVarExplained.m new file mode 100644 index 0000000..601d689 --- /dev/null +++ b/DataJoint/+RIDGE/ROIRidgeVarExplained.m @@ -0,0 +1,19 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +variance_explained : double # variance of individual neuron activity explained by the ridge model +%} + + +classdef ROIRidgeVarExplained < dj.Imported + properties + keySource = (EXP2.SessionEpoch) & IMG.ROI & 'session_epoch_type="behav_only"' & RIDGE.Predictors; + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+RIDGE/ROIRidgeVarExplainedNeuropil.m b/DataJoint/+RIDGE/ROIRidgeVarExplainedNeuropil.m new file mode 100644 index 0000000..b56f85b --- /dev/null +++ b/DataJoint/+RIDGE/ROIRidgeVarExplainedNeuropil.m @@ -0,0 +1,19 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +--- +variance_explained : double # variance of individual neuron activity explained by the ridge model +%} + + +classdef ROIRidgeVarExplainedNeuropil < dj.Imported + properties + keySource = (EXP2.SessionEpoch) & IMG.ROI & 'session_epoch_type="behav_only"' & RIDGE.Predictors; + end + methods(Access=protected) + function makeTuples(self, key) + + end + end +end diff --git a/DataJoint/+RIDGE/getSchema.m b/DataJoint/+RIDGE/getSchema.m new file mode 100644 index 0000000..2347bf8 --- /dev/null +++ b/DataJoint/+RIDGE/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'RIDGE', 'arseny_learning_ridge'); +end +obj = schemaObject; +end diff --git a/DataJoint/+STIM/Jobs.m b/DataJoint/+STIM/Jobs.m new file mode 100644 index 0000000..c7c20e2 --- /dev/null +++ b/DataJoint/+STIM/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +STIM +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+STIM/ROIGraph.m b/DataJoint/+STIM/ROIGraph.m new file mode 100644 index 0000000..52d4a42 --- /dev/null +++ b/DataJoint/+STIM/ROIGraph.m @@ -0,0 +1,93 @@ +%{ +# Taking most responsive neurons +-> EXP2.SessionEpoch +--- +mat_response_mean : longblob # (pixels) +mat_distance : longblob # (pixels) +mat_response_pval : longblob # (pixels) + +roi_num_list : blob # (pixels) +photostim_group_num_list : blob # (pixels) + + +%} + + +classdef ROIGraph < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOV; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\Graph\']; + + p_val_threshold =0.001; + + group_num= fetchn( STIM.ROIResponseDirect & key & 'most_response_p_value<0.001','photostim_group_num','ORDER BY photostim_group_num'); + roi_num= fetchn( STIM.ROIResponseDirect & key,'roi_number','ORDER BY photostim_group_num'); + roi_centroid_x= fetchn( STIM.ROIResponseDirect*IMG.ROI & key,'roi_centroid_x','ORDER BY photostim_group_num'); + roi_centroid_y= fetchn( STIM.ROIResponseDirect*IMG.ROI & key,'roi_centroid_y','ORDER BY photostim_group_num'); + + + + k1=key; + tic + F=struct2table(fetch( STIM.ROIResponse50 & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & key)),'*')); + toc + for i_g = 1:1:numel(group_num) + % k1.photostim_group_num = group_num(i_g); + for i_r = 1:1:numel(group_num) + % k1.roi_number = roi_num(i_r); + F_selected=F(F.photostim_group_num ==group_num(i_g) & F.roi_number == roi_num(i_r),:); + + key.mat_response_mean(i_g,i_r)=F_selected.response_mean; + key.mat_distance(i_g,i_r)=F_selected.response_distance_pixels; + key.mat_response_pval(i_g,i_r)=F_selected.response_p_value; + % key.mat_response_mean(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_mean'); + % key.mat_distance(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_distance_pixels'); + % key.mat_response_pval(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_p_value'); + + end + + end + key.roi_num_list = group_num; + key.photostim_group_num_list = roi_num; + insert(self,key); + + s=fetch(EXP2.Session & key,'*'); + + % Creating a Graph + M=key.mat_response_mean; + M = M - diag(diag(M)); %setting diagonal values to 0 + + M(key.mat_response_pval>p_val_threshold)=0; + G = digraph(M); + D = outdegree(G); + p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'MarkerSize',5); +p.NodeCData = D; +colormap jet +colorbar +% h = plot(G,'Layout','force'); +% layout(h,'force','UseGravity',true) + + title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + axis off; + box off; + + %Saving the graph + + dir_current_figure = [dir_save_figure 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_current_figure)) + mkdir (dir_current_figure) + end + figure_name_out = [dir_current_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + + clf; + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIM/ROIGraph2.m b/DataJoint/+STIM/ROIGraph2.m new file mode 100644 index 0000000..d1165c7 --- /dev/null +++ b/DataJoint/+STIM/ROIGraph2.m @@ -0,0 +1,190 @@ +%{ +# Taking most responsive neurons +-> EXP2.SessionEpoch +--- +mat_response_mean : longblob # (pixels) +mat_distance : longblob # (pixels) +mat_response_pval : longblob # (pixels) +roi_num_list : blob # (pixels) +photostim_group_num_list : blob # (pixels) + + +%} + + +classdef ROIGraph2 < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOV; + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\Graph\']; + p_val_threshold =0.01; + minimal_distance =30; %in microns + + % pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.3"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + minimal_distance = minimal_distance/pix2dist; % in pixels + + group_num= fetchn( STIM.ROIResponseDirect & key & 'response_p_value<0.01','photostim_group_num','ORDER BY photostim_group_num'); + roi_num= fetchn( STIM.ROIResponseDirect & 'response_p_value<0.01' & key,'roi_number','ORDER BY photostim_group_num'); + roi_centroid_x= fetchn( STIM.ROIResponseDirect*IMG.ROI & 'response_p_value<0.01' & key,'roi_centroid_x','ORDER BY photostim_group_num')*pix2dist; + roi_centroid_y= fetchn( STIM.ROIResponseDirect*IMG.ROI & 'response_p_value<0.01' & key,'roi_centroid_y','ORDER BY photostim_group_num')*pix2dist; + + + panel_width=0.7; + panel_height=0.7; + horizontal_distance=0.7; + vertical_distance=0.7; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.15; + position_y(end+1)=position_y(end) - vertical_distance; + + + + k1=key; + + try + F=struct2table(fetch( STIM.ROIResponse & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & key)),'*')); + catch + disp('No Photostim-Responsive cells detected') + return + end + + for i_g = 1:1:numel(group_num) + % k1.photostim_group_num = group_num(i_g); + for i_r = 1:1:numel(group_num) + % k1.roi_number = roi_num(i_r); + F_selected=F(F.photostim_group_num ==group_num(i_g) & F.roi_number == roi_num(i_r),:); + + key.mat_response_mean(i_g,i_r)=F_selected.response_mean; + key.mat_distance(i_g,i_r)=F_selected.response_distance_pixels; + key.mat_response_pval(i_g,i_r)=F_selected.response_p_value; + % key.mat_response_mean(i_g,i_r)= fetch1(STIM.ROIResponse & k1,'response_mean'); + % key.mat_distance(i_g,i_r)= fetch1(STIM.ROIResponse & k1,'response_distance_pixels'); + % key.mat_response_pval(i_g,i_r)= fetch1(STIM.ROIResponse & k1,'response_p_value'); + + end + + end + key.roi_num_list = group_num; + key.photostim_group_num_list = roi_num; + insert(self,key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + + s=fetch(EXP2.Session & key,'*'); + + % Creating a Graph + M=key.mat_response_mean; + + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + M(key.mat_response_pval>p_val_threshold)=0; + M(key.mat_distance<=minimal_distance)=0; + + G = digraph(M); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + % imagesc(mean_img_enhanced) + % colormap(gray) + % hold on; + % axis xy + % set(gca,'YDir','reverse') + + + D = outdegree(G); + % if isempty(LWidths) + p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + p.NodeCData = diagonal_values; + p.MarkerSize = D+2; + + colormap bluewhitered + h = colorbar; + ylabel(h, '\Delta activity') + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + + title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + % axis off; + % box off; + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + % axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + % D = indegree(G); + % % if isempty(LWidths) + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % % else + % % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % % end + % p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = diagonal_values; + % p.MarkerSize = D+1; + % + % colormap bluewhitered + % colorbar + % + % % highlight(p,[1 3]) + % % h = plot(G,'Layout','force'); + % % layout(h,'force','UseGravity',true) + % + % title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + % axis off; + % box off; + % axis xy; + + %Saving the graph + + dir_current_figure = [dir_save_figure 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_current_figure)) + mkdir (dir_current_figure) + end + figure_name_out = [dir_current_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIM/ROIGraphAll.m b/DataJoint/+STIM/ROIGraphAll.m new file mode 100644 index 0000000..5eb005f --- /dev/null +++ b/DataJoint/+STIM/ROIGraphAll.m @@ -0,0 +1,239 @@ +%{ +# Taking most responsive neurons +-> EXP2.SessionEpoch +--- +mat_response_mean : longblob # (pixels) +mat_distance : longblob # (pixels) +mat_response_pval : longblob # (pixels) +roi_num_list : blob # (pixels) +photostim_group_num_list : blob # (pixels) + + +%} + + +classdef ROIGraphAll < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOV ; + end + methods(Access=protected) + function makeTuples(self, key) + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\GraphAll\']; + + p_val_threshold =0.01; + minimal_distance =30; %in microns + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + minimal_distance = minimal_distance/pix2dist; % in pixels + + group_num= fetchn( STIM.ROIResponseDirect & key & 'response_p_value<0.01','photostim_group_num','ORDER BY photostim_group_num'); + roi_num= fetchn( IMG.ROI & key ,'roi_number','ORDER BY roi_number'); + group_roi_num= fetchn( STIM.ROIResponseDirect & key & 'response_p_value<0.01','roi_number','ORDER BY photostim_group_num'); + + roi_num_good = fetchn( IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + + [group_roi_num, idxx,idxy ] = unique(group_roi_num,'stable'); + group_num = group_num(idxx); + + roi_centroid_x= fetchn( IMG.ROI & IMG.ROIGood & key,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + roi_centroid_y= fetchn( IMG.ROI & IMG.ROIGood & key,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + + panel_width=0.8; + panel_height=0.8; + horizontal_distance=0.7; + vertical_distance=0.7; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.15; + position_y(end+1)=position_y(end) - vertical_distance; + + + + k1=key; + tic + F=(fetch( STIM.ROIResponse & key & sprintf('response_distance_pixels>%.2f', minimal_distance) & sprintf('response_p_value<=%.5f', p_val_threshold),'*')); + if isempty(F) + return + end + F=struct2table(F) + toc +% for i_g = 1:1:numel(group_num) +% % k1.photostim_group_num = group_num(i_g); +% for i_r = 1:1:numel(roi_num) +% % k1.roi_number = roi_num(i_r); +% F_selected=F(F.photostim_group_num ==group_num(i_g) & F.roi_number == roi_num(i_r),:); +% +% key.mat_response_mean(i_g,i_r)=F_selected.response_mean; +% key.mat_distance(i_g,i_r)=F_selected.response_distance_pixels; +% key.mat_response_pval(i_g,i_r)=F_selected.response_p_value; +% % key.mat_response_mean(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_mean'); +% % key.mat_distance(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_distance_pixels'); +% % key.mat_response_pval(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_p_value'); +% +% end +% +% end +% key.roi_num_list = group_num; +% key.photostim_group_num_list = roi_num; +% insert(self,key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + + s=fetch(EXP2.Session & key,'*'); + + % Creating a Graph + % M=key.mat_response_mean; + +% for i_r = 1:1:numel(roi_num) +% [~,idx_roi]=find(group_roi_num==roi_num(i_r)); +% if isempty(idx_roi) +% M(i_r,1:numel(roi_num))=0; +% Mpval(i_r,1:numel(roi_num))=1; +% Mdistance(i_r,1:numel(roi_num))=0; +% +% else +% M(i_r,1:numel(roi_num))=key.mat_response_mean(idx_roi,:); +% Mpval (i_r,1:numel(roi_num))= key.mat_response_pval(idx_roi,:); +% Mdistance (i_r,1:numel(roi_num))= key.mat_distance(idx_roi,:); +% +% end +% end +M=zeros(numel(roi_num)); +Mdistance=zeros(numel(roi_num)); +Mpval=zeros(numel(roi_num))+1; +for i_r = 1:1:numel(roi_num) + [idx_roi]=find(group_roi_num==roi_num(i_r)); + if ~ isempty(idx_roi) + %i_r + + F_selected=F(F.photostim_group_num ==group_num(idx_roi),:); + if isempty(F_selected) + M(i_r,1:numel(roi_num))=0; + Mpval(i_r,1:numel(roi_num))=1; + Mdistance(i_r,1:numel(roi_num))=0; + else + + M(i_r,F_selected.roi_number')=F_selected.response_mean'; + Mpval (i_r,F_selected.roi_number')= F_selected.response_p_value'; + Mdistance (i_r,F_selected.roi_number') = F_selected.response_distance_pixels'; + + end + end +end + +M=M(roi_num_good,roi_num_good); + Mpval=Mpval(roi_num_good,roi_num_good); + Mdistance=Mdistance(roi_num_good,roi_num_good); + + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 +% M(Mpval>p_val_threshold)=0; +% M(Mdistance<=minimal_distance)=0; + + G = digraph(M); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + % imagesc(mean_img_enhanced) + % colormap(gray) + % hold on; + % axis xy + % set(gca,'YDir','reverse') + + + D = outdegree(G); + Din = indegree(G); + + % if isempty(LWidths) + p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); +% p.NodeCData = D/1000; +% p.NodeCData = [0 0 0]; + + p.MarkerSize = D+2; + + colormap bluewhitered + h = colorbar; + ylabel(h, '\Delta activity') + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + + title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + % axis off; + % box off; + axis xy + set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out','FontSize',12) + + + + % axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + % D = indegree(G); + % % if isempty(LWidths) + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % % else + % % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % % end + % p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = diagonal_values; + % p.MarkerSize = D+1; + % + % colormap bluewhitered + % colorbar + % + % % highlight(p,[1 3]) + % % h = plot(G,'Layout','force'); + % % layout(h,'force','UseGravity',true) + % + % title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + % axis off; + % box off; + % axis xy; + + %Saving the graph + + dir_current_figure = [dir_save_figure 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_current_figure)) + mkdir (dir_current_figure) + end + figure_name_out = [dir_current_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIM/ROIInfluence.m b/DataJoint/+STIM/ROIInfluence.m new file mode 100644 index 0000000..4de5bfd --- /dev/null +++ b/DataJoint/+STIM/ROIInfluence.m @@ -0,0 +1,266 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_p_value2 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, wilcoxon-ranksum +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_p_value2_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # +response_p_value2_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_baseline_trials_used : int # number of control photostim trials used to compute response +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluence < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch) & (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + + end + methods(Access=protected) + function makeTuples(self, key) + + distance_to_exclude_all=50; %microns + + num_svd_components_removed_vector = [0, 1 , 3]; + % num_svd_components_removed_vector = [0]; + + p_val=[0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=1; %s + + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + % rel_data = IMG.ROIdeltaF; + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0,1]; + else %default, only if protocol is missing + timewind_response=[0,1]; + end + time = [-10: (1/frame_rate): 10]; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi,'plane_num','ORDER BY roi_number'); + roi_z=fetchn(rel_roi*IMG.ROIdepth,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi ,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi ,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + + + rel_all_sites=(IMG.PhotostimGroup& key); + rel_all_sites=rel_all_sites* IMG.PhotostimGroupROI; + + allsites_photostim_frames =(fetchn(rel_all_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_num =(fetchn(rel_all_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + allsites_center_x =(fetchn(rel_all_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + allsites_center_y =(fetchn(rel_all_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + F=F_binned; + end + F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + dx = allsites_center_x - R_x(i_r); + dy = allsites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); + idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); + allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + + baseline_frames_clean=allsites_photostim_frames_far(~ismember(allsites_photostim_frames_far, [allsites_photostim_frames_near-1, allsites_photostim_frames_near])); + baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [target_photostim_frames-1, target_photostim_frames])); + + if numel(baseline_frames_clean)<100 + baseline_frames_clean=allsites_photostim_frames_far; + k_response(i_r).num_of_baseline_trials_used = 0; + else + k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); + end + if numel(baseline_frames_clean)>3 + baseline_frames_clean(1)=[]; + baseline_frames_clean(end)=[]; + end + + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [allsites_photostim_frames_near-1, allsites_photostim_frames_near])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + +% [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + [StimStat, ~] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_p_value2 = StimStat.response_p_value2; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + +% StimTrace=struct2table(StimTrace); + +% response_sign = {'all','excited','inhibited'}; +% k_trace=k1; +% k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); +% flag_distance=[0,1,2,3]; +% flag_distance_edge1=[0,25,100,200]; +% flag_distance_edge2=[25,100,200,inf]; +% for i_dist = 1:1:numel(flag_distance) +% for i_sign = 1:1:numel(response_sign) +% for i_p=1:1:numel(p_val) +% +% idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; +% switch response_sign{i_sign} +% case 'excited' +% idx_rois = idx_rois & [k_response.response_mean_odd]>0; +% case 'inhibited' +% idx_rois = idx_rois & [k_response.response_mean_odd]<0; +% end +% if sum(idx_rois)>1 +% k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); +% k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); +% k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); +% k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); +% k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); +% else +% k_trace.response_trace_mean = single(time+NaN); +% k_trace.response_trace_mean_odd = single(time+NaN); +% k_trace.response_trace_mean_even = single(time+NaN); +% k_trace.baseline_trace_mean = single(time+NaN); +% k_trace.responseraw_trace_mean = single(time+NaN); +% +% end +% k_trace.response_p_val = p_val(i_p); +% k_trace.response_sign = response_sign{i_sign}; +% k_trace.flag_distance = flag_distance(i_dist); +% k_trace.num_pairs = sum(idx_rois); +% insert(STIM.ROIInfluenceTrace, k_trace); +% end +% end +% end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/ROIInfluence5.m b/DataJoint/+STIM/ROIInfluence5.m new file mode 100644 index 0000000..dde3fe0 --- /dev/null +++ b/DataJoint/+STIM/ROIInfluence5.m @@ -0,0 +1,272 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluence5 < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch) & (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') & IMG.Volumetric + + end + methods(Access=protected) + function makeTuples(self, key) + + distance_to_exclude_all=75; %microns + + num_svd_components_removed_vector = [0]; + % num_svd_components_removed_vector = [0]; + + % p_val=[0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=0; %s + + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + % rel_data = IMG.ROIdeltaF; + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); +% group_list = fetchn((IMG.PhotostimGroup & key & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') ),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0.05,0.5]; + else %default, only if protocol is missing + timewind_response=[0.05,0.5]; + end + + time =[-3:1:3]./frame_rate; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi,'plane_num','ORDER BY roi_number'); + roi_z=fetchn(rel_roi*IMG.ROIdepth,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi ,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi ,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + % if time_bin>0 + % bin_size_in_frame=ceil(time_bin*frame_rate); + % bins_vector=1:bin_size_in_frame:size(F_original,2); + % bins_vector=bins_vector(2:1:end); + % for i= 1:1:numel(bins_vector) + % ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + % F_binned(:,i)=mean(F_original(:,ix1),2); + % end + % time = time(1:bin_size_in_frame:end); + % else + % F_binned=F_original; + bin_size_in_frame=1; + % end + + % F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F=zscore(F_original,[],2); + % [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + + + rel_all_sites=(IMG.PhotostimGroup& key); + rel_all_sites=rel_all_sites* IMG.PhotostimGroupROI; + + allsites_num =(fetchn(rel_all_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + allsites_center_x =(fetchn(rel_all_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + allsites_center_y =(fetchn(rel_all_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + allsites_photostim_frames =(fetchn(rel_all_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_photostim_frames_unique = unique(floor(cell2mat(allsites_photostim_frames)./bin_size_in_frame)); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + % if num_svd_components_removed_vector(i_c)>0 + % num_comp = num_svd_components_removed_vector(i_c); + % F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + % else + % F=F_binned; + % end + % F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + dx = allsites_center_x - R_x(i_r); + dy = allsites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); +% idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); +% allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); +% allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + + baseline_frames_clean=allsites_photostim_frames_unique(~ismember(allsites_photostim_frames_unique, [allsites_photostim_frames_near-3, allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); + baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [target_photostim_frames-3, target_photostim_frames-2, target_photostim_frames-1, target_photostim_frames, target_photostim_frames+1])); + +% if numel(baseline_frames_clean)<100 +% baseline_frames_clean=allsites_photostim_frames_far; +% k_response(i_r).num_of_baseline_trials_used = 0; +% else +% k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); +% end +% if numel(baseline_frames_clean)>3 +% baseline_frames_clean(1)=[]; +% baseline_frames_clean(end)=[]; +% end + + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [allsites_photostim_frames_near-3, allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +% i_r +% single(distance2D*pix2dist) + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + + % [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + [StimStat] = fn_compute_photostim_delta_influence5 (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; +% k_response(i_r).response_p_value2 = StimStat.response_p_value2; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; +% k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; +% k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + + + + + end + + % StimTrace=struct2table(StimTrace); + + % response_sign = {'all','excited','inhibited'}; + % k_trace=k1; + % k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); + % flag_distance=[0,1,2,3]; + % flag_distance_edge1=[0,25,100,200]; + % flag_distance_edge2=[25,100,200,inf]; + % for i_dist = 1:1:numel(flag_distance) + % for i_sign = 1:1:numel(response_sign) + % for i_p=1:1:numel(p_val) + % + % idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; + % switch response_sign{i_sign} + % case 'excited' + % idx_rois = idx_rois & [k_response.response_mean_odd]>0; + % case 'inhibited' + % idx_rois = idx_rois & [k_response.response_mean_odd]<0; + % end + % if sum(idx_rois)>1 + % k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); + % k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); + % k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); + % k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); + % k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); + % else + % k_trace.response_trace_mean = single(time+NaN); + % k_trace.response_trace_mean_odd = single(time+NaN); + % k_trace.response_trace_mean_even = single(time+NaN); + % k_trace.baseline_trace_mean = single(time+NaN); + % k_trace.responseraw_trace_mean = single(time+NaN); + % + % end + % k_trace.response_p_val = p_val(i_p); + % k_trace.response_sign = response_sign{i_sign}; + % k_trace.flag_distance = flag_distance(i_dist); + % k_trace.num_pairs = sum(idx_rois); + % insert(STIM.ROIInfluenceTrace, k_trace); + % end + % end + % end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/ROIInfluence7.m b/DataJoint/+STIM/ROIInfluence7.m new file mode 100644 index 0000000..3a01ab8 --- /dev/null +++ b/DataJoint/+STIM/ROIInfluence7.m @@ -0,0 +1,272 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluence7 < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch) & (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') & IMG.Volumetric + + end + methods(Access=protected) + function makeTuples(self, key) + + distance_to_exclude_all=75; %microns + + num_svd_components_removed_vector = [0]; + % num_svd_components_removed_vector = [0]; + + % p_val=[0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=0; %s + + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + % rel_data = IMG.ROIdeltaF; + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); +% group_list = fetchn((IMG.PhotostimGroup & key & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') ),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0.05,0.5]; + else %default, only if protocol is missing + timewind_response=[0.05,0.5]; + end + + time =[-3:1:3]./frame_rate; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi,'plane_num','ORDER BY roi_number'); + roi_z=fetchn(rel_roi*IMG.ROIdepth,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi ,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi ,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + % if time_bin>0 + % bin_size_in_frame=ceil(time_bin*frame_rate); + % bins_vector=1:bin_size_in_frame:size(F_original,2); + % bins_vector=bins_vector(2:1:end); + % for i= 1:1:numel(bins_vector) + % ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + % F_binned(:,i)=mean(F_original(:,ix1),2); + % end + % time = time(1:bin_size_in_frame:end); + % else + % F_binned=F_original; + bin_size_in_frame=1; + % end + + % F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F=zscore(F_original,[],2); + % [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + + + rel_all_sites=(IMG.PhotostimGroup& key); + rel_all_sites=rel_all_sites* IMG.PhotostimGroupROI; + + allsites_num =(fetchn(rel_all_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + allsites_center_x =(fetchn(rel_all_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + allsites_center_y =(fetchn(rel_all_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + allsites_photostim_frames =(fetchn(rel_all_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_photostim_frames_unique = unique(floor(cell2mat(allsites_photostim_frames)./bin_size_in_frame)); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + % if num_svd_components_removed_vector(i_c)>0 + % num_comp = num_svd_components_removed_vector(i_c); + % F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + % else + % F=F_binned; + % end + % F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + dx = allsites_center_x - R_x(i_r); + dy = allsites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); +% idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); +% allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); +% allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + + baseline_frames_clean=allsites_photostim_frames_unique(~ismember(allsites_photostim_frames_unique, [ allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); + baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [ target_photostim_frames-2, target_photostim_frames-1, target_photostim_frames, target_photostim_frames+1])); + +% if numel(baseline_frames_clean)<100 +% baseline_frames_clean=allsites_photostim_frames_far; +% k_response(i_r).num_of_baseline_trials_used = 0; +% else +% k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); +% end +% if numel(baseline_frames_clean)>3 +% baseline_frames_clean(1)=[]; +% baseline_frames_clean(end)=[]; +% end + + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [ allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +% i_r +% single(distance2D*pix2dist) + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + + % [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + [StimStat] = fn_compute_photostim_delta_influence5 (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; +% k_response(i_r).response_p_value2 = StimStat.response_p_value2; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; +% k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; +% k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + + + + + end + + % StimTrace=struct2table(StimTrace); + + % response_sign = {'all','excited','inhibited'}; + % k_trace=k1; + % k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); + % flag_distance=[0,1,2,3]; + % flag_distance_edge1=[0,25,100,200]; + % flag_distance_edge2=[25,100,200,inf]; + % for i_dist = 1:1:numel(flag_distance) + % for i_sign = 1:1:numel(response_sign) + % for i_p=1:1:numel(p_val) + % + % idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; + % switch response_sign{i_sign} + % case 'excited' + % idx_rois = idx_rois & [k_response.response_mean_odd]>0; + % case 'inhibited' + % idx_rois = idx_rois & [k_response.response_mean_odd]<0; + % end + % if sum(idx_rois)>1 + % k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); + % k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); + % k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); + % k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); + % k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); + % else + % k_trace.response_trace_mean = single(time+NaN); + % k_trace.response_trace_mean_odd = single(time+NaN); + % k_trace.response_trace_mean_even = single(time+NaN); + % k_trace.baseline_trace_mean = single(time+NaN); + % k_trace.responseraw_trace_mean = single(time+NaN); + % + % end + % k_trace.response_p_val = p_val(i_p); + % k_trace.response_sign = response_sign{i_sign}; + % k_trace.flag_distance = flag_distance(i_dist); + % k_trace.num_pairs = sum(idx_rois); + % insert(STIM.ROIInfluenceTrace, k_trace); + % end + % end + % end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/ROIInfluenceLocal.m b/DataJoint/+STIM/ROIInfluenceLocal.m new file mode 100644 index 0000000..bc7ee54 --- /dev/null +++ b/DataJoint/+STIM/ROIInfluenceLocal.m @@ -0,0 +1,222 @@ +%{ +# ROI responses to each photostim group.response is measured on zscored dff trace +-> IMG.PhotostimGroup +-> IMG.ROI +flag_zscore : boolean # 1 zscore, 0 no zscore +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_p_value2 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, wilcoxon-ranksum +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_p_value2_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # +response_p_value2_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_baseline_trials_used : int # number of control photostim trials used to compute response +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluenceLocal < dj.Computed + properties + keySource =(EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + + end + methods(Access=protected) + function makeTuples(self, key) + time_bin=1; %s + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + + + + flag_zscore=[1]; % 0 don't zscore, 1 do zscore + distance_to_exclude_all=50; %microns + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0,1]; + else %default, only if protocol is missing + timewind_response=[0,1]; + end + time = [-10: (1/frame_rate): 10]; + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi & key,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi & key,'plane_num','ORDER BY roi_number'); + + roi_z=fetchn(rel_roi*IMG.ROIdepth & key,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi & key,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi & key,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + for i_z=1:1:numel(flag_zscore) + key.flag_zscore=flag_zscore(i_z); + + if flag_zscore(i_z)==1 + F=zscore(F_binned,[],2); + + elseif flag_zscore(i_z)==0 + F=F_binned; + end + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + rel_all=(IMG.PhotostimGroup & key); + rel_all=rel_all* IMG.PhotostimGroupROI; + allsites_photostim_frames =(fetchn(rel_all,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_num =(fetchn(rel_all,'photostim_group_num','ORDER BY photostim_group_num')'); + allsites_center_x =(fetchn(rel_all,'photostim_center_x','ORDER BY photostim_group_num')'); + allsites_center_y =(fetchn(rel_all,'photostim_center_y','ORDER BY photostim_group_num')'); + + + dx = g_x - R_x; + dy = g_y - R_y; + distance = sqrt(dx.^2 + dy.^2)*pix2dist; %pixels + + current_roi_idx = distance<30 & roi_z==0; % we only take neurons in the vicinity of the photostimulation site + current_roi_list = roi_list(current_roi_idx); + current_roi_plane_num = roi_plane_num(current_roi_idx); + current_roi_R_x = R_x(current_roi_idx); + current_roi_R_y = R_y(current_roi_idx); + current_roi_z = roi_z(current_roi_idx); + current_F= F(current_roi_idx,:); + k_response = repmat(k1,numel(current_roi_list),1); + for i_r= 1:1:numel(current_roi_list) + k_response(i_r).roi_number = current_roi_list(i_r); + k_response(i_r).plane_num = current_roi_plane_num(i_r); + + f_trace=current_F(i_r,:); + + dx = allsites_center_x - current_roi_R_x(i_r); + dy = allsites_center_y - current_roi_R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); + idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); + allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + + baseline_frames_clean=allsites_photostim_frames_far(~ismember(allsites_photostim_frames_far, [allsites_photostim_frames_near-1, allsites_photostim_frames_near])); + baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [target_photostim_frames-1, target_photostim_frames])); + if numel(baseline_frames_clean)>3 + baseline_frames_clean(1)=[]; + baseline_frames_clean(end)=[]; + end + + + if numel(baseline_frames_clean)<100 + baseline_frames_clean=allsites_photostim_frames_far; + k_response(i_r).num_of_baseline_trials_used = 0; + else + k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); + end + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [allsites_photostim_frames_near-1, allsites_photostim_frames_near])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + + + + [StimStat, ] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + % k_response(i_r).response_mean_over_std = StimStat.response_mean_over_std; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_p_value2 = StimStat.response_p_value2; + + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + % k_response(i_r).response_mean_over_std_odd = StimStat.response_mean_over_std_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + + k_response(i_r).response_mean_even = StimStat.response_mean_even; + % k_response(i_r).response_mean_over_std_even = StimStat.response_mean_over_std_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + + dx = g_x - current_roi_R_x(i_r); + dy = g_y - current_roi_R_y(i_r); + distance = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + current_roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance*pix2dist); + k_response(i_r).response_distance_axial_um = single(current_roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/ROIInfluenceTrace.m b/DataJoint/+STIM/ROIInfluenceTrace.m new file mode 100644 index 0000000..73f2360 --- /dev/null +++ b/DataJoint/+STIM/ROIInfluenceTrace.m @@ -0,0 +1,22 @@ +%{ +# Response trace to each photostim group, averaged across rois +-> IMG.PhotostimGroup +num_svd_components_removed : int # how many of the first svd components were removed +flag_distance : int # 0 (0-25um), 1 (25-100um), 2 (100-200um), 3 (>200 um) +response_sign : varchar(200)# all, excited, or inhibited pairs +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +--- +num_pairs : int # +response_trace_mean : blob # trial-average response trace to photostimulation with response to control sites subtracted +response_trace_mean_odd : blob # +response_trace_mean_even : blob # +baseline_trace_mean : blob # trial-average response trace to control site photostimulation +responseraw_trace_mean : blob # trial-average response trace to photostimulation without subtracting control sites +%} + +classdef ROIInfluenceTrace < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+STIM/ROIInfluenceTrace2.m b/DataJoint/+STIM/ROIInfluenceTrace2.m new file mode 100644 index 0000000..d147408 --- /dev/null +++ b/DataJoint/+STIM/ROIInfluenceTrace2.m @@ -0,0 +1,22 @@ +%{ +# Response trace to each photostim group, averaged across rois +-> IMG.PhotostimGroup +num_svd_components_removed : int # how many of the first svd components were removed +flag_distance : int # 0 (0-25um), 1 (25-100um), 2 (100-200um), 3 (>200 um) +response_sign : varchar(200)# all, excited, or inhibited pairs +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +--- +num_pairs : int # +response_trace_mean : blob # trial-average response trace to photostimulation with response to control sites subtracted +response_trace_mean_odd : blob # +response_trace_mean_even : blob # +baseline_trace_mean : blob # trial-average response trace to control site photostimulation +responseraw_trace_mean : blob # trial-average response trace to photostimulation without subtracting control sites +%} + +classdef ROIInfluenceTrace2 < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+STIM/ROIInfluenceTrace3.m b/DataJoint/+STIM/ROIInfluenceTrace3.m new file mode 100644 index 0000000..26f5b4a --- /dev/null +++ b/DataJoint/+STIM/ROIInfluenceTrace3.m @@ -0,0 +1,21 @@ +%{ +# Response trace to each photostim group, averaged across rois +-> IMG.PhotostimGroup +num_svd_components_removed : int # how many of the first svd components were removed +flag_distance : int # 0 (0-25um), 1 (25-100um), 2 (100-200um), 3 (>200 um) +response_sign : varchar(200)# all, excited, or inhibited pairs +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +flag_prominent : boolean # 0, we take all responses matching the above criteria, 1 we take only prominent responses, for which the min or the max value of the response is larger than the largest fluctuation outside of the response window +--- +num_pairs : int # +response_trace_mean : blob # trial-average response trace to photostimulation with response to control sites subtracted +response_trace_mean_odd : blob # +response_trace_mean_even : blob # +%} + +classdef ROIInfluenceTrace3 < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+STIM/ROIInfluenceVariability.m b/DataJoint/+STIM/ROIInfluenceVariability.m new file mode 100644 index 0000000..b4759be --- /dev/null +++ b/DataJoint/+STIM/ROIInfluenceVariability.m @@ -0,0 +1,214 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_trials : blob # response amlitude at each trial +response_trace_trials : longblob # response trace at each trial + +%} + + +classdef ROIInfluenceVariability < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = EXP2.SessionEpoch & STIMANAL.ROIResponseDirectVariability; + + end + methods(Access=protected) + function makeTuples(self, key) + + + min_distance_to_closest_target=50; % in microns + + close all; + frame_window_short=[40,40]/4; + frame_window_long=[50,100]/2; + flag_baseline_trial_or_avg=0; %1 baseline per trial, 0 - baseline averaged across trials + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + min_distance_to_closest_target_pixels=min_distance_to_closest_target/pix2dist; + + rel=STIM.ROIInfluence5 & 'response_p_value1<=0.0001' & sprintf('response_distance_lateral_um >%.2f', min_distance_to_closest_target_pixels) & 'response_mean>0'; + + if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; + elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; + elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; + end + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + smooth_bins=1; + + + + + + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + panel_width=0.2; + panel_height=0.25; + horizontal_distance=0.2; + vertical_distance=0.3; + + position_x(1)=0.13; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.7; + + + G=fetch(IMG.PhotostimGroupROI & STIM.ROIResponseDirect & key,'*','ORDER BY photostim_group_num'); + + group_list=[G.photostim_group_num]; + + + + + time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + + for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; + % signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); + % response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); + % response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); + % response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels + % response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; + % flag_distance_flag=5 + % if flag_distance_flag==0 % lateral distance + % distance=[DATA.response_distance_pixels]; + % distance=pix2dist*distance; + % elseif flag_distance_flag==1 % axial distance + % distance=[DATA.response_distance_axial_um]; + % elseif flag_distance_flag==2 % 3D distance + % distance=[DATA.response_distance_3d_um]; + % end + + + response_trials_direct = fetchn(STIMANAL.ROIResponseDirectVariability & key,'response_trials'); + response_trials_direct=response_trials_direct{1}; + % idx_weak = response_trials_direct<=0.25; + % idx_strong = response_trials_direct>=0.75; + idx_weak = response_trials_direct<=prctile(response_trials_direct,25); + idx_strong = response_trials_direct>prctile(response_trials_direct,75); + idx_no_response = response_trials_direct<=0.12; + + for i_r = 1:1:numel(signif_roi) + k2=k1; + k2.roi_number = signif_roi(i_r); + + + + photostim_start_frame = fetch1(IMG.PhotostimGroup & STIM.ROIResponseDirect & k2,'photostim_start_frame'); + + f_trace_direct = fetch1(IMG.ROITrace & k2,'f_trace'); + + global_baseline=mean( f_trace_direct); + + timewind_response = [ 0 2]; + timewind_baseline1 = [ -3 0]; + timewind_baseline2 = [-3 0] ; + timewind_baseline3 = [ -3 0]; + [StimStat,StimTrace] = fn_compute_photostim_response_variability (f_trace_direct , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + + + hold on; + + %% below 25 response percentile + y=StimTrace.response_trace_trials(idx_weak,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 1 0 0]); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 1]}) + + + %% no response + if sum(idx_no_response)>=2 + y=StimTrace.response_trace_trials(idx_no_response,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 1 0 0]); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + end + + + + + %% above 75 response percentile + y=StimTrace.response_trace_trials(idx_strong,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 1 0 0]); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[1 0 0]}) + + + + + + ylim ([min([-0.2,min_epoch]),max([0.5 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F') + % title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + + + % title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + set(gca,'FontSize',60); + % title(sprintf('anm %d, session %d \n Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n \n \n',k2.subject_id,k2.session, G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + set(gca,'Ytick',[-0.2, 0, 0.5]); + clf + + + end + end + + + insert(self, k_response); + end + end +end diff --git a/DataJoint/+STIM/ROIResponseDirect.m b/DataJoint/+STIM/ROIResponseDirect.m new file mode 100644 index 0000000..40bbf96 --- /dev/null +++ b/DataJoint/+STIM/ROIResponseDirect.m @@ -0,0 +1,88 @@ +%{ +# Take the closest neuron within a small radius around the photostimulation site and assess its response, sites that are too far from cells won't appear here +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIResponseDirect < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & (IMG.FOV & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_closest_neuron=25; % in microns, max distance to direct neuron + + rel_data = STIM.ROIInfluence5; + + group_num= fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; + key.channel_num = temp.channel_num; + + + for i_g = 1:1:numel(group_num) + k1=key; + k1.photostim_group_num = group_num(i_g); + + p_value = 0.05; % threshod for direct neuron response + + C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + if ~isempty(C) + if C(1).response_p_value1_odd<=p_value & C(1).response_mean_odd>0 % checking if the neuron most close to the photostimulation coordinate has a significant and positive response + DIRECT=C(1); + if numel(C)>=2 + end + else % if not, we check if the remaining neurons in the neiborhood have a significant and positive response, and if such neurons exist we take (from those remaining neurons) the neuron that is closest to the photostimulation coordinate + C_remaining=C; + C_remaining = C_remaining([C.response_p_value1_odd]<=p_value & [C.response_mean_odd]>0); + if ~isempty(C_remaining) % if no neuron has a significant and positve response, we take the closest neuron to the stimulation site as target, regardless of the signifcance or sign/magnitude of its response + DIRECT=C_remaining(1); + if numel(C_remaining)>=2 + end + else + DIRECT=C(1); + end + end + DIRECT=rmfield(DIRECT,'num_svd_components_removed'); + insert(self, DIRECT); % C(end) in case there are multiple neurons + end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the closest neuron + % if ~isempty(C) + % DIRECT=C(1); + % insert(self, DIRECT); + % end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_mean'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + % if ~isempty(C) + % DIRECT=C(end); + % insert(self, DIRECT); + % end + + end + end + + end +end + diff --git a/DataJoint/+STIM/ROIResponseDirect5.m b/DataJoint/+STIM/ROIResponseDirect5.m new file mode 100644 index 0000000..38e149b --- /dev/null +++ b/DataJoint/+STIM/ROIResponseDirect5.m @@ -0,0 +1,88 @@ +%{ +# Take the closest neuron within a small radius around the photostimulation site and assess its response, sites that are too far from cells won't appear here +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIResponseDirect5 < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & (IMG.FOV & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_closest_neuron=25; % in microns, max distance to direct neuron + + rel_data = STIM.ROIInfluence5; + + group_num= fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; + key.channel_num = temp.channel_num; + + + for i_g = 1:1:numel(group_num) + k1=key; + k1.photostim_group_num = group_num(i_g); + + p_value = 0.05; % threshod for direct neuron response + + C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + if ~isempty(C) + if C(1).response_p_value1_odd<=p_value & C(1).response_mean_odd>0 % checking if the neuron most close to the photostimulation coordinate has a significant and positive response + DIRECT=C(1); + if numel(C)>=2 + end + else % if not, we check if the remaining neurons in the neiborhood have a significant and positive response, and if such neurons exist we take (from those remaining neurons) the neuron that is closest to the photostimulation coordinate + C_remaining=C; + C_remaining = C_remaining([C.response_p_value1_odd]<=p_value & [C.response_mean_odd]>0); + if ~isempty(C_remaining) % if no neuron has a significant and positve response, we take the closest neuron to the stimulation site as target, regardless of the signifcance or sign/magnitude of its response + DIRECT=C_remaining(1); + if numel(C_remaining)>=2 + end + else + DIRECT=C(1); + end + end + DIRECT=rmfield(DIRECT,'num_svd_components_removed'); + insert(self, DIRECT); % C(end) in case there are multiple neurons + end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the closest neuron + % if ~isempty(C) + % DIRECT=C(1); + % insert(self, DIRECT); + % end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_mean'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + % if ~isempty(C) + % DIRECT=C(end); + % insert(self, DIRECT); + % end + + end + end + + end +end + diff --git a/DataJoint/+STIM/ROIResponseDirect7.m b/DataJoint/+STIM/ROIResponseDirect7.m new file mode 100644 index 0000000..7e18679 --- /dev/null +++ b/DataJoint/+STIM/ROIResponseDirect7.m @@ -0,0 +1,88 @@ +%{ +# Take the closest neuron within a small radius around the photostimulation site and assess its response, sites that are too far from cells won't appear here +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIResponseDirect7 < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & (IMG.FOV & STIM.ROIInfluence7); + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_closest_neuron=25; % in microns, max distance to direct neuron + + rel_data = STIM.ROIInfluence7; + + group_num= fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; + key.channel_num = temp.channel_num; + + + for i_g = 1:1:numel(group_num) + k1=key; + k1.photostim_group_num = group_num(i_g); + + p_value = 0.05; % threshod for direct neuron response + + C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + if ~isempty(C) + if C(1).response_p_value1_odd<=p_value & C(1).response_mean_odd>0 % checking if the neuron most close to the photostimulation coordinate has a significant and positive response + DIRECT=C(1); + if numel(C)>=2 + end + else % if not, we check if the remaining neurons in the neiborhood have a significant and positive response, and if such neurons exist we take (from those remaining neurons) the neuron that is closest to the photostimulation coordinate + C_remaining=C; + C_remaining = C_remaining([C.response_p_value1_odd]<=p_value & [C.response_mean_odd]>0); + if ~isempty(C_remaining) % if no neuron has a significant and positve response, we take the closest neuron to the stimulation site as target, regardless of the signifcance or sign/magnitude of its response + DIRECT=C_remaining(1); + if numel(C_remaining)>=2 + end + else + DIRECT=C(1); + end + end + DIRECT=rmfield(DIRECT,'num_svd_components_removed'); + insert(self, DIRECT); % C(end) in case there are multiple neurons + end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_distance_lateral_um'); % meaning we take the closest neuron + % if ~isempty(C) + % DIRECT=C(1); + % insert(self, DIRECT); + % end + + % C=fetch(rel_data & k1 & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_mean'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + % if ~isempty(C) + % DIRECT=C(end); + % insert(self, DIRECT); + % end + + end + end + + end +end + diff --git a/DataJoint/+STIM/ROIResponseMost.m b/DataJoint/+STIM/ROIResponseMost.m new file mode 100644 index 0000000..c56497e --- /dev/null +++ b/DataJoint/+STIM/ROIResponseMost.m @@ -0,0 +1,56 @@ +%{ +# Taking most responsive neurons +-> IMG.PhotostimGroup +-> IMG.ROI +--- +most_response_mean : double # (pixels) +most_response_min : double # (pixels) +most_response_max : double # (pixels) +most_response_p_value : double # (pixels) +most_response_distance_pixels : double # (pixels) +%} + + +classdef ROIResponseMost < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOV; + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_closest_neuron=30; % in microns + + group_num= fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; + key.channel_num = temp.channel_num; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + distance_to_closest_neuron_pixels = distance_to_closest_neuron/pix2dist; % in pixels + + + k1=key; + for i_g = 1:1:numel(group_num) + k1.photostim_group_num = group_num(i_g); +% C=fetch(STIM.ROIResponse50 & IMG.ROIGood & k1 & 'response_p_value<=0.01' & sprintf('response_distance_pixels <%.2f', distance_to_closest_neuron_pixels),'*', 'ORDER BY response_mean'); + C=fetch(STIM.ROIResponse & IMG.ROIGood & k1 & 'response_p_value<=0.05' & sprintf('response_distance_pixels <%.2f', distance_to_closest_neuron_pixels),'*', 'ORDER BY response_mean'); + + k2=k1; + if ~isempty(C) + k2.roi_number=C(end).roi_number; + k2.most_response_mean=C(end).response_mean; + k2.most_response_max=C(end).response_max; + k2.most_response_min=C(end).response_min; + k2.most_response_p_value=C(end).response_p_value; + k2.most_response_distance_pixels=C(end).response_distance_pixels; + insert(self, k2); + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIM/getSchema.m b/DataJoint/+STIM/getSchema.m new file mode 100644 index 0000000..a3990a0 --- /dev/null +++ b/DataJoint/+STIM/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'STIM', 'arseny_learning_photostim'); +end +obj = schemaObject; +end diff --git a/DataJoint/+STIM/old/ROIInfluence3.m b/DataJoint/+STIM/old/ROIInfluence3.m new file mode 100644 index 0000000..29723fe --- /dev/null +++ b/DataJoint/+STIM/old/ROIInfluence3.m @@ -0,0 +1,283 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : double # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_p_value2 : double # significance of response to photostimulation, relative to distant pre stimulus baseline, wilcoxon-ranksum +response_mean_odd : float # for the odd trials +response_p_value1_odd : double # +response_p_value2_odd : double # +response_mean_even : float # for the even trials +response_p_value1_even : float # +response_p_value2_even : float # + +response_min_odd : float # min of the trace during response window, odd trials +response_max_odd : float # max of the trace during response window, odd trials +non_response_min_odd : float # min of the trace outside of the response window, odd trials +non_response_max_odd : float # max of the trace outside of the response window, odd trials + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_baseline_trials_used : int # number of control photostim trials used to compute response +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluence3 < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch) & (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') & IMG.Volumetric + + end + methods(Access=protected) + function makeTuples(self, key) + + + num_svd_components_removed_vector = [0, 1, 3]; + % num_svd_components_removed_vector = [0]; + + p_val=[0.0001, 0.001, 0.01, 0.05, 1]; % for saving trace + time_bin=0.5; %s + + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + % rel_data = IMG.ROIdeltaF; + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + % group_list = fetchn((IMG.PhotostimGroup & key & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ),'photostim_group_num','ORDER BY photostim_group_num'); + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0.5,1.5]; + else %default, only if protocol is missing + timewind_response=[0.5,1.5]; + end + time = [-10: (1/frame_rate): 10]; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi,'plane_num','ORDER BY roi_number'); + roi_z=fetchn(rel_roi*IMG.ROIdepth,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi ,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi ,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + + + rel_all_sites=(IMG.PhotostimGroup& key); + rel_all_sites=rel_all_sites* IMG.PhotostimGroupROI; + + allsites_photostim_frames =(fetchn(rel_all_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_photostim_frames = unique(floor(cell2mat(allsites_photostim_frames)./bin_size_in_frame)); + + % allsites_num =(fetchn(rel_all_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + % allsites_center_x =(fetchn(rel_all_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + % allsites_center_y =(fetchn(rel_all_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + F=F_binned; + end + F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + % dx = allsites_center_x - R_x(i_r); + % dy = allsites_center_y - R_y(i_r); + % distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + % idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + % allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + % allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); + % idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + % allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); + % allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + + baseline_frames_clean=allsites_photostim_frames(~ismember(allsites_photostim_frames,[target_photostim_frames-1, target_photostim_frames, target_photostim_frames+1])); + k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); + + baseline_frames_clean(1)=[]; + baseline_frames_clean(end)=[]; + + % if numel(baseline_frames_clean)>3 + % baseline_frames_clean(1)=[]; + % baseline_frames_clean(end)=[]; + % end + + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [target_photostim_frames-1, target_photostim_frames+1])); + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + + [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + % [StimStat, ~] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_p_value2 = StimStat.response_p_value2; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + + k_response(i_r).non_response_min_odd = StimStat.non_response_min_odd; + k_response(i_r).non_response_max_odd = StimStat.non_response_max_odd; + k_response(i_r).response_min_odd = StimStat.response_min_odd; + k_response(i_r).response_max_odd = StimStat.response_max_odd; + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + + StimTrace=struct2table(StimTrace); + + response_sign = {'all','excited','inhibited'}; + k_trace=k1; + k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); + flag_distance=[0,1,2,3]; + flag_distance_edge1=[0,25,100,200]; + flag_distance_edge2=[25,100,200,inf]; + flag_prominent=[0,1]; %0, we take all responses matching the above criteria, 1 we take only prominent responses, for which the min or the max value of the response is larger than the largest fluctuation outside of the response window + + for i_dist = 1:1:numel(flag_distance) + for i_p=1:1:numel(p_val) + for i_sign = 1:1:numel(response_sign) + for i_prom = 1:1:numel(flag_prominent) + + + idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; + switch response_sign{i_sign} + case 'excited' + idx_rois = idx_rois & [k_response.response_mean_odd]>0; + case 'inhibited' + idx_rois = idx_rois & [k_response.response_mean_odd]<0; + end + + + if flag_prominent(i_prom)==1 % we take only prominent responses, for which the min or the max value of the response is larger than the largest fluctuation outside of the response window + idx_rois = idx_rois & ([k_response.response_min_odd] < [k_response.non_response_min_odd] | [k_response.response_max_odd] > [k_response.non_response_max_odd]); +% if sum(idx_rois)>0 +% sum(idx_rois) +% end + end + + if sum(idx_rois)>1 + k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); + k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); + k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); + % k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); + % k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); + else + k_trace.response_trace_mean = single(time+NaN); + k_trace.response_trace_mean_odd = single(time+NaN); + k_trace.response_trace_mean_even = single(time+NaN); + % k_trace.baseline_trace_mean = single(time+NaN); + % k_trace.responseraw_trace_mean = single(time+NaN); + + end + k_trace.response_p_val = p_val(i_p); + k_trace.response_sign = response_sign{i_sign}; + k_trace.flag_distance = flag_distance(i_dist); + k_trace.flag_prominent = flag_prominent(i_prom); + + k_trace.num_pairs = sum(idx_rois); + insert(STIM.ROIInfluenceTrace3, k_trace); + end + end + end + end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/old/ROIInfluence6.m b/DataJoint/+STIM/old/ROIInfluence6.m new file mode 100644 index 0000000..27b359f --- /dev/null +++ b/DataJoint/+STIM/old/ROIInfluence6.m @@ -0,0 +1,282 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline, ttest +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_mean_even : float # for the even trials +response_p_value1_even : float # + +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +num_of_baseline_trials_used : int # number of control photostim trials used to compute response +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluence6 < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOVEpoch) & (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') & IMG.Volumetric & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type = "spont_only"')) + + end + methods(Access=protected) + function makeTuples(self, key) + + distance_to_exclude_all=75; %microns + + num_svd_components_removed_vector = [0]; + % num_svd_components_removed_vector = [0]; + + % p_val=[0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=0; %s + + + rel_roi = (IMG.ROI-IMG.ROIBad) & key; + rel_data = (IMG.ROISpikes -IMG.ROIBad) & key; + % rel_data = IMG.ROIdeltaF; + + key_session = (EXP2.Session & key); + key_spont = EXP2.SessionEpoch & 'session_epoch_type = "spont_only"' & key_session; + key_spont = fetch(key_spont); + key_spont = key_spont(1); + + + rel_data_spont = (IMG.ROISpikes -IMG.ROIBad) & key_spont; + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + % group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + group_list = fetchn((IMG.PhotostimGroup & key & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') ),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0.05,0.5]; + else %default, only if protocol is missing + timewind_response=[0.05,0.5]; + end + + time =[-10:1:10]./frame_rate; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn(rel_roi,'plane_num','ORDER BY roi_number'); + roi_z=fetchn(rel_roi*IMG.ROIdepth,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn(rel_roi ,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn(rel_roi ,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original_photo = fetchn(rel_data ,'dff_trace','ORDER BY roi_number'); + F_original_spont = fetchn(rel_data_spont ,'dff_trace','ORDER BY roi_number'); + catch + F_original_photo = fetchn(rel_data ,'spikes_trace','ORDER BY roi_number'); + F_original_spont = fetchn(rel_data_spont ,'spikes_trace','ORDER BY roi_number'); + end + F_original_photo=cell2mat(F_original_photo); + F_original_spont=cell2mat(F_original_spont); + + F_combined = [F_original_photo, F_original_spont]; + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + % if time_bin>0 + % bin_size_in_frame=ceil(time_bin*frame_rate); + % bins_vector=1:bin_size_in_frame:size(F_original,2); + % bins_vector=bins_vector(2:1:end); + % for i= 1:1:numel(bins_vector) + % ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + % F_binned(:,i)=mean(F_original(:,ix1),2); + % end + % time = time(1:bin_size_in_frame:end); + % else + % F_binned=F_original; + bin_size_in_frame=1; + % end + + % F_binned = gpuArray((F_binned)); + % F_binned = F_binned-mean(F_binned,2); + F_combined=zscore(F_combined,[],2); + % [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + F=F_combined(:,1:1:size(F_original_photo,2)); + + F_baseline = F_combined(:,size(F_original_photo,2)+1:1:end); + F_baseline=mean(F_baseline,1); + + rel_all_sites=(IMG.PhotostimGroup& key); + rel_all_sites=rel_all_sites* IMG.PhotostimGroupROI; + + allsites_photostim_frames =(fetchn(rel_all_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + allsites_num =(fetchn(rel_all_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + allsites_center_x =(fetchn(rel_all_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + allsites_center_y =(fetchn(rel_all_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + % if num_svd_components_removed_vector(i_c)>0 + % num_comp = num_svd_components_removed_vector(i_c); + % F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + % else + % F=F_binned; + % end + % F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=floor(target_photostim_frames./bin_size_in_frame); + + + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + dx = allsites_center_x - R_x(i_r); + dy = allsites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_allsites_near = distance2D<=distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); + allsites_photostim_frames_near = cell2mat(allsites_photostim_frames(idx_allsites_near)); + allsites_photostim_frames_near = unique(floor(allsites_photostim_frames_near./bin_size_in_frame)); +% idx_allsites_far = distance2D>distance_to_exclude_all & ~ (allsites_num== group_list(i_g)); +% allsites_photostim_frames_far = cell2mat(allsites_photostim_frames(idx_allsites_far)); +% allsites_photostim_frames_far = unique(floor(allsites_photostim_frames_far./bin_size_in_frame)); + + +% baseline_frames_clean=allsites_photostim_frames_far(~ismember(allsites_photostim_frames_far, [allsites_photostim_frames_near-3, allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); +% baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [target_photostim_frames-3, target_photostim_frames-2, target_photostim_frames-1, target_photostim_frames, target_photostim_frames+1])); + +% if numel(baseline_frames_clean)<100 +% baseline_frames_clean=allsites_photostim_frames_far; +% k_response(i_r).num_of_baseline_trials_used = 0; +% else +% k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); +% end +% if numel(baseline_frames_clean)>3 +% baseline_frames_clean(1)=[]; +% baseline_frames_clean(end)=[]; +% end + + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [allsites_photostim_frames_near-3, allsites_photostim_frames_near-2, allsites_photostim_frames_near-1, allsites_photostim_frames_near, allsites_photostim_frames_near+1])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +% i_r +% single(distance2D*pix2dist) + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + + % [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + [StimStat, ~] = fn_compute_photostim_delta_influence_fixed_baseline (f_trace, target_photostim_frames_clean,F_baseline(i_r), timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + + + + + end + + % StimTrace=struct2table(StimTrace); + + % response_sign = {'all','excited','inhibited'}; + % k_trace=k1; + % k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); + % flag_distance=[0,1,2,3]; + % flag_distance_edge1=[0,25,100,200]; + % flag_distance_edge2=[25,100,200,inf]; + % for i_dist = 1:1:numel(flag_distance) + % for i_sign = 1:1:numel(response_sign) + % for i_p=1:1:numel(p_val) + % + % idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; + % switch response_sign{i_sign} + % case 'excited' + % idx_rois = idx_rois & [k_response.response_mean_odd]>0; + % case 'inhibited' + % idx_rois = idx_rois & [k_response.response_mean_odd]<0; + % end + % if sum(idx_rois)>1 + % k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); + % k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); + % k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); + % k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); + % k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); + % else + % k_trace.response_trace_mean = single(time+NaN); + % k_trace.response_trace_mean_odd = single(time+NaN); + % k_trace.response_trace_mean_even = single(time+NaN); + % k_trace.baseline_trace_mean = single(time+NaN); + % k_trace.responseraw_trace_mean = single(time+NaN); + % + % end + % k_trace.response_p_val = p_val(i_p); + % k_trace.response_sign = response_sign{i_sign}; + % k_trace.flag_distance = flag_distance(i_dist); + % k_trace.num_pairs = sum(idx_rois); + % insert(STIM.ROIInfluenceTrace, k_trace); + % end + % end + % end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/old/ROIInfluenceRefinedOld.m b/DataJoint/+STIM/old/ROIInfluenceRefinedOld.m new file mode 100644 index 0000000..e043d31 --- /dev/null +++ b/DataJoint/+STIM/old/ROIInfluenceRefinedOld.m @@ -0,0 +1,267 @@ +%{ +# ROI responses to each photostim group. Zscoring. Spikes. +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline +response_mean : float # dff during photostimulatuon minus dff during photostimulation of control sites - averaged over all trials and over that time window +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials + +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # + +response_mean_even : float # for the even trials +response_p_value1_even : float # + +num_of_baseline_trials_used : int # number of control photostim trials used to compute response +num_of_target_trials_used : int # number of target photostim trials used to compute response +%} + + +classdef ROIInfluenceRefinedOld < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>0') & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>0') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_exclude_other=100; %microns + distance_to_exclude_control=25; %microns + +% num_svd_components_removed_vector = [0, 1 , 3, 5]; + num_svd_components_removed_vector = [0, 1]; + + p_val=[0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=0.5; %s + +% rel_data = IMG.ROIdeltaF; + rel_data = IMG.ROISpikes; + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key & STIMANAL.NeuronOrControl),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0,0.5]; + else %default, only if protocol is missing + timewind_response=[0,0.5]; + end + time = [-10: (1/frame_rate): 10]; + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood& key,'plane_num','ORDER BY roi_number'); + + roi_z=fetchn((IMG.ROI-IMG.ROIBad)*IMG.ROIdepth & IMG.ROIGood & key,'z_pos_relative','ORDER BY roi_number'); + + + R_x = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(((rel_data-IMG.ROIBad)& key) & IMG.ROIGood ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(((rel_data-IMG.ROIBad)& key) & IMG.ROIGood ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + F_binned = gpuArray((F_binned)); +% F_binned = F_binned-mean(F_binned,2); + F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + + rel_control_sites=IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key & 'neurons_or_control=0'); + rel_control_sites=rel_control_sites* IMG.PhotostimGroupROI; + controlsites_photostim_frames =(fetchn(rel_control_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + controlsites_num =(fetchn(rel_control_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + controlsites_center_x =(fetchn(rel_control_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + controlsites_center_y =(fetchn(rel_control_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + rel_other_sites=(IMG.PhotostimGroup& key) - (STIMANAL.NeuronOrControl & key & 'neurons_or_control=0'); + rel_other_sites=rel_other_sites* IMG.PhotostimGroupROI; + + othersites_photostim_frames =(fetchn(rel_other_sites,'photostim_start_frame','ORDER BY photostim_group_num')'); + othersites_num =(fetchn(rel_other_sites,'photostim_group_num','ORDER BY photostim_group_num')'); + othersites_center_x =(fetchn(rel_other_sites,'photostim_center_x','ORDER BY photostim_group_num')'); + othersites_center_y =(fetchn(rel_other_sites,'photostim_center_y','ORDER BY photostim_group_num')'); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + F=F_binned; + end + F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + target_photostim_frames = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + target_photostim_frames=ceil(target_photostim_frames./bin_size_in_frame); + + + + + k_response = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + f_trace=F(i_r,:); + + + dx = controlsites_center_x - R_x(i_r); + dy = controlsites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_controlsites_far = distance2D>distance_to_exclude_control & ~ (controlsites_num== group_list(i_g)); + controlsites_photostim_frames_far = cell2mat(controlsites_photostim_frames(idx_controlsites_far)); + controlsites_photostim_frames_far = unique(ceil(controlsites_photostim_frames_far./bin_size_in_frame)); + + idx_controlsites_near = distance2D<=distance_to_exclude_control & ~ (controlsites_num== group_list(i_g)); + controlsites_photostim_frames_near = cell2mat(controlsites_photostim_frames(idx_controlsites_near)); + controlsites_photostim_frames_near = unique(ceil(controlsites_photostim_frames_near./bin_size_in_frame)); + + + dx = othersites_center_x - R_x(i_r); + dy = othersites_center_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_othersites_near = distance2D<=distance_to_exclude_other & ~ (othersites_num== group_list(i_g)); + othersites_photostim_frames_near = cell2mat(othersites_photostim_frames(idx_othersites_near)); + othersites_photostim_frames_near = unique(ceil(othersites_photostim_frames_near./bin_size_in_frame)); + + + baseline_frames_clean=controlsites_photostim_frames_far(~ismember(controlsites_photostim_frames_far, [othersites_photostim_frames_near])); + baseline_frames_clean=baseline_frames_clean(~ismember(baseline_frames_clean, [target_photostim_frames])); + if numel(baseline_frames_clean)<100 + baseline_frames_clean=controlsites_photostim_frames_far(~ismember(controlsites_photostim_frames_far, [othersites_photostim_frames_near])); + k_response(i_r).num_of_baseline_trials_used = 0; + else + k_response(i_r).num_of_baseline_trials_used = numel(baseline_frames_clean); + end + + target_photostim_frames_clean=target_photostim_frames(~ismember(target_photostim_frames, [othersites_photostim_frames_near])); + target_photostim_frames_clean=target_photostim_frames_clean(~ismember(target_photostim_frames_clean, [controlsites_photostim_frames_near])); + if numel(target_photostim_frames_clean)<20 + target_photostim_frames_clean=target_photostim_frames; + k_response(i_r).num_of_target_trials_used = 0; + else + k_response(i_r).num_of_target_trials_used = numel(target_photostim_frames_clean); + end + + [StimStat, StimTrace(i_r)] = fn_compute_photostim_delta_influence (f_trace, target_photostim_frames_clean,baseline_frames_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance2D = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance2D*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + + StimTrace=struct2table(StimTrace); +% +% response_sign = {'all','excited','inhibited'}; +% k_trace=k1; +% k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); +% flag_distance=[0,1,2,3]; +% flag_distance_edge1=[0,25,100,200]; +% flag_distance_edge2=[25,100,200,inf]; +% for i_dist = 1:1:numel(flag_distance) +% for i_sign = 1:1:numel(response_sign) +% for i_p=1:1:numel(p_val) +% +% idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>=flag_distance_edge1(i_dist) & [k_response.response_distance_lateral_um]0 & [k_response.num_of_baseline_trials_used]>0; +% switch response_sign{i_sign} +% case 'excited' +% idx_rois = idx_rois & [k_response.response_mean_odd]>0; +% case 'inhibited' +% idx_rois = idx_rois & [k_response.response_mean_odd]<0; +% end +% if sum(idx_rois)>1 +% k_trace.response_trace_mean = sum(StimTrace.response_trace_mean(idx_rois,:),1); +% k_trace.response_trace_mean_odd = sum(StimTrace.response_trace_mean_odd(idx_rois,:),1); +% k_trace.response_trace_mean_even = sum(StimTrace.response_trace_mean_even(idx_rois,:),1); +% k_trace.baseline_trace_mean = sum(StimTrace.baseline_trace_mean(idx_rois,:),1); +% k_trace.responseraw_trace_mean = sum(StimTrace.responseraw_trace_mean(idx_rois,:),1); +% else +% k_trace.response_trace_mean = single(time+NaN); +% k_trace.response_trace_mean_odd = single(time+NaN); +% k_trace.response_trace_mean_even = single(time+NaN); +% k_trace.baseline_trace_mean = single(time+NaN); +% k_trace.responseraw_trace_mean = single(time+NaN); +% +% end +% k_trace.response_p_val = p_val(i_p); +% k_trace.response_sign = response_sign{i_sign}; +% k_trace.flag_distance = flag_distance(i_dist); +% k_trace.num_pairs = sum(idx_rois); +% insert(STIM.ROIInfluenceRefinedTrace, k_trace); +% end +% end +% end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/old/ROIResponse.m b/DataJoint/+STIM/old/ROIResponse.m new file mode 100644 index 0000000..654520d --- /dev/null +++ b/DataJoint/+STIM/old/ROIResponse.m @@ -0,0 +1,189 @@ +%{ +# ROI responses to each photostim group.response is measured on zscored dff trace +-> IMG.PhotostimGroup +-> IMG.ROI +flag_zscore : boolean # 1 zscore, 0 no zscore +--- +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline +response_mean : float # dff atr some time after photostimulatuon minus dff at some time before the photostimulation - averaged over all trials and over that time window +response_std : float # standard deviation of that value over trials +response_mean_over_std : float # response mean divided by standard deviation of the entire zscored trace by standard deviation of the entire trace +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials +response_tstat : float # ttest statistic xmean-ymean/sqrt(stdev^2/n ystdev^2/m), for p-value1 + +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +response_mean_odd : float # for the odd trials +response_mean_over_std_odd : float # for the odd trials +response_p_value1_odd : float # + +response_mean_even : float # for the even trials +response_mean_over_std_even : float # for the odd trials +response_p_value1_even : float # + +num_of_control_photostim_used : int # number of control photostim trials used to compute response + +%} + + +classdef ROIResponse < dj.Computed + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates; + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + + end + methods(Access=protected) + function makeTuples(self, key) + time_bin=0.5; %s + rel_data = IMG.ROISpikes; + flag_zscore=[0,1]; % 0 don't zscore, 1 do zscore + distance_to_exclude=50; %microns + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_response=[0,0.5]; + else %default, only if protocol is missing + timewind_response=[0,0.5]; + end + time = [-30: (1/frame_rate): 30]; + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood& key,'plane_num','ORDER BY roi_number'); + + roi_z=fetchn((IMG.ROI-IMG.ROIBad)*IMG.ROIdepth & IMG.ROIGood & key,'z_pos_relative','ORDER BY roi_number'); + + R_x = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_y','ORDER BY roi_number'); + + try + F_original = fetchn(((rel_data-IMG.ROIBad)& key) & IMG.ROIGood ,'dff_trace','ORDER BY roi_number'); + catch + F_original = fetchn(((rel_data-IMG.ROIBad)& key) & IMG.ROIGood ,'spikes_trace','ORDER BY roi_number'); + end + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + for i_z=1:1:numel(flag_zscore) + key.flag_zscore=flag_zscore(i_z); + + if flag_zscore(i_z)==1 + F=zscore(F_binned,[],2); + + elseif flag_zscore(i_z)==0 + F=F_binned; + end + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + photostim_start_frame=ceil(photostim_start_frame./bin_size_in_frame); + + k_response = repmat(k1,numel(roi_list),1); + +% rel_control=(IMG.PhotostimGroup & key) -k1; + rel_control=(IMG.PhotostimGroup & key); + rel_control=rel_control* IMG.PhotostimGroupROI; + % & [k_response.response_distance_lateral_um]>20 + control_start_frame =(fetchn(rel_control,'photostim_start_frame','ORDER BY photostim_group_num')'); + control_group_photostim_center_x =(fetchn(rel_control,'photostim_center_x','ORDER BY photostim_group_num')'); + control_group_photostim_center_y =(fetchn(rel_control,'photostim_center_y','ORDER BY photostim_group_num')'); + + + + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + + f_trace=F(i_r,:); + + dx = control_group_photostim_center_x - R_x(i_r); + dy = control_group_photostim_center_y - R_y(i_r); + distance_to_control = sqrt(dx.^2 + dy.^2)*pix2dist; % + idx_control_sites_far = distance_to_control>distance_to_exclude; + idx_control_sites_near = distance_to_control<=distance_to_exclude; + + control_start_frame_far = cell2mat(control_start_frame(idx_control_sites_far)); + control_start_frame_far = unique(ceil(control_start_frame_far./bin_size_in_frame)); + + control_start_frame_near = cell2mat(control_start_frame(idx_control_sites_near)); + control_start_frame_near = unique(ceil(control_start_frame_near./bin_size_in_frame)); + + control_start_frame_clean=control_start_frame_far(~ismember(control_start_frame_far,[control_start_frame_near-2,control_start_frame_near-1,control_start_frame_near,control_start_frame_near+1,control_start_frame_near+2])); + + k_response(i_r).num_of_control_photostim_used = numel(control_start_frame_clean); + + [StimStat, ] = fn_compute_photostim_delta_influence (f_trace, photostim_start_frame,control_start_frame_clean, timewind_response, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_mean_over_std = StimStat.response_mean_over_std; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_tstat = StimStat.response_tstat; + + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_mean_over_std_odd = StimStat.response_mean_over_std_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_mean_over_std_even = StimStat.response_mean_over_std_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIM/old/ROIResponseDirectOld.m b/DataJoint/+STIM/old/ROIResponseDirectOld.m new file mode 100644 index 0000000..ab2a5dc --- /dev/null +++ b/DataJoint/+STIM/old/ROIResponseDirectOld.m @@ -0,0 +1,73 @@ +%{ +# Take the closest neuron within a small radius around the photostimulation site and assess its response, sites that are too far from cells won't appear here +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_p_value1 : float # significance of response to photostimulation, relative to baseline +response_p_value2 : float # significance of response to photostimulation, relative to baseline +response_p_value3 : float # significance of response to photostimulation, relative to baseline +response_mean : float # dff atr some time after photostimulatuon minus dff at some time before the photostimulation - averaged over all trials and over that time window +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials +response_tstat : float # ttest statistic xmean-ymean/sqrt(stdev^2/n ystdev^2/m) + +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +response_mean_1half : float # for the 1st half of the trials +response_p_value1_1half : float # +response_p_value2_1half : float # +response_p_value3_1half : float # + +response_mean_2half : float # for the 2nd half of the trials +response_p_value1_2half : float # +response_p_value2_2half : float # +response_p_value3_2half : float # + +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_p_value2_odd : float # +response_p_value3_odd : float # + +response_mean_even : float # for the even trials +response_p_value1_even : float # +response_p_value2_even : float # +response_p_value3_even : float # +%} + + +classdef ROIResponseDirectOld < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & (IMG.FOV & STIM.ROIResponseZscore); + end + methods(Access=protected) + function makeTuples(self, key) + distance_to_closest_neuron=25; % in microns, max distance to direct neuron + % response_p_value = 0.05; % threshod for direct neuron response + response_p_value=1; + + num_svd_components_removed_vector = 0; + + group_num= fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; + key.channel_num = temp.channel_num; + + parfor i_g = 1:1:numel(group_num) + k1=key; + k1.photostim_group_num = group_num(i_g); + C=fetch(STIM.ROIResponseZscore & k1 & sprintf('response_p_value1 <=%.10f', response_p_value) & sprintf('num_svd_components_removed=%d', num_svd_components_removed_vector) & sprintf('response_distance_lateral_um <%.2f', distance_to_closest_neuron),'*', 'ORDER BY response_mean_odd'); % meaning we take the neuron with the strongest response. If there are multiple neurons we should take C(end) + C=rmfield(C,'num_svd_components_removed'); + if ~isempty(C) + insert(self, C(end)); % C(end) in case there are multiple neurons + end + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIM/old/ROIResponseTraceZscore.m b/DataJoint/+STIM/old/ROIResponseTraceZscore.m new file mode 100644 index 0000000..be87319 --- /dev/null +++ b/DataJoint/+STIM/old/ROIResponseTraceZscore.m @@ -0,0 +1,22 @@ +%{ +# Response trace to each photostim group, averaged across rois +-> IMG.PhotostimGroup +num_svd_components_removed : int # how many of the first svd components were removed +flag_within_column : boolean # 1 pairs within column, 0 outside of the column +response_sign : varchar(200)# all, excited, or inhibited pairs +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +--- +num_pairs : int # +response_trace_mean : blob # trial-average df over f response trace to photostimulation +response_trace_mean_1half : blob # trial-average df over f response trace to photostimulation +response_trace_mean_2half : blob # trial-average df over f response trace to photostimulation +response_trace_mean_odd : blob # trial-average df over f response trace to photostimulation +response_trace_mean_even : blob # trial-average df over f response trace to photostimulation +%} + +classdef ROIResponseTraceZscore < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + end + end +end diff --git a/DataJoint/+STIM/old/ROIResponseZscore.m b/DataJoint/+STIM/old/ROIResponseZscore.m new file mode 100644 index 0000000..08477b5 --- /dev/null +++ b/DataJoint/+STIM/old/ROIResponseZscore.m @@ -0,0 +1,252 @@ +%{ +# ROI responses to each photostim group.response is measured on zscored dff trace +-> IMG.PhotostimGroup +-> IMG.ROI +num_svd_components_removed : int # how many of the first svd components were removed +--- +response_p_value1 : float # significance of response to photostimulation, relative to distant pre stimulus baseline +response_p_value2 : float # significance of response to photostimulation, relative to pre stimulus baseline that immediately preceds the stimulus +response_p_value3 : float # significance of response to photostimulation, relative to distant post stimulus baseline +response_mean : float # dff atr some time after photostimulatuon minus dff at some time before the photostimulation - averaged over all trials and over that time window +response_std : float # standard deviation of that value over trials +response_coefvar : float # coefficient of variation of that value over trials +response_fanofactor : float # fanto factor of that value over trials +response_tstat : float # ttest statistic xmean-ymean/sqrt(stdev^2/n ystdev^2/m), for p-value1 + +response_distance_lateral_um : float # (um) lateral (X-Y) distance from target to a given ROI +response_distance_axial_um : float # (um) axial (Z) distance from target to a given ROI +response_distance_3d_um : float # (um) 3D distance from target to a given ROI + +response_mean_1half : float # for the 1st half of the trials +response_p_value1_1half : float # +response_p_value2_1half : float # +response_p_value3_1half : float # + +response_mean_2half : float # for the 2nd half of the trials +response_p_value1_2half : float # +response_p_value2_2half : float # +response_p_value3_2half : float # + +response_mean_odd : float # for the odd trials +response_p_value1_odd : float # +response_p_value2_odd : float # +response_p_value3_odd : float # + +response_mean_even : float # for the even trials +response_p_value1_even : float # +response_p_value2_even : float # +response_p_value3_even : float # + +%} + + +classdef ROIResponseZscore < dj.Computed + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates; + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + + end + methods(Access=protected) + function makeTuples(self, key) + num_svd_components_removed_vector = [0, 1, 10]; + p_val=[0.0001, 0.001, 0.01, 0.05, 1]; % for saving SVD trace + time_bin=0.5; %s + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + group_list = fetchn((IMG.PhotostimGroup & key),'photostim_group_num','ORDER BY photostim_group_num'); + + % window_in_which_all_targets_are_stimulated_once = numel(group_list)/imaging_frame_rate_volume; + photostim_protocol = fetch(IMG.PhotostimProtocol & key,'*'); + if ~isempty(photostim_protocol) + timewind_stim=[0.5,2.5]; + timewind_baseline1 = [-25, -20];% %[-2, -0.5] + timewind_baseline2=[-2,0]; + timewind_baseline3 = [20, 25];% %[-2, -0.5] + % if photostim_protocol.same_photostim_duration_in_frames>=2 + % timewind_stim=[0.5,2.5]; + % end + else %default, only if protocol is missing + timewind_stim=[0.5,2.5]; + timewind_baseline1 = [-25, -20];% %[-2, -0.5] + timewind_baseline2=[-2,0]; + timewind_baseline3 = [20, 25];% %[-2, -0.5] + end + time = [-30: (1/frame_rate): 30]; + + flag_baseline_trial_or_avg=3; %0 - baseline averaged across trials, 1 baseline per trial, 2 global baseline - mean of roi across the entire session epoch, 3 no baseline subtraction + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + + % distance_to_closest_neuron = distance_to_closest_neuron/pix2dist; % in pixels + + roi_list=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + roi_plane_num=fetchn((IMG.ROI-IMG.ROIBad) & IMG.ROIGood& key,'plane_num','ORDER BY roi_number'); + + roi_z=fetchn((IMG.ROI-IMG.ROIBad)*IMG.ROIdepth & IMG.ROIGood & key,'z_pos_relative','ORDER BY roi_number'); + + + R_x = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_x','ORDER BY roi_number'); + R_y = fetchn((IMG.ROI-IMG.ROIBad)&IMG.ROIGood & key,'roi_centroid_y','ORDER BY roi_number'); + + + F_original = fetchn(((IMG.ROIdeltaF-IMG.ROIBad)& key) & IMG.ROIGood ,'dff_trace','ORDER BY roi_number'); + F_original=cell2mat(F_original); + + + + temp = fetch(IMG.Plane & key); + key.fov_num = temp.fov_num; + key.plane_num = 1; % we will put the actual plane_num later + key.channel_num = temp.channel_num; + + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + F_binned = gpuArray((F_binned)); + F_binned = F_binned-mean(F_binned,2); + % F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + + for i_c = 1:1:numel(num_svd_components_removed_vector) + + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + F = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + F=F_binned; + end + F = zscore(F,[],2); % note that we zscore after perofrming SVD + F=gather(F); + + parfor i_g = 1:1:numel(group_list) + k1=key; + k1.photostim_group_num = group_list(i_g); + g_x = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_x'); + g_y = fetch1(IMG.PhotostimGroupROI & k1,'photostim_center_y'); + + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + + photostim_start_frame=ceil(photostim_start_frame./bin_size_in_frame); + + k_response = repmat(k1,numel(roi_list),1); + % k_trace = repmat(k1,numel(roi_list),1); + % k_pairs = repmat(k1,numel(roi_list),1); + % k_pairs=rmfield(k_pairs,'num_svd_components_removed'); + % k_response_vec = repmat(k1,numel(roi_list),1); + + for i_r= 1:1:numel(roi_list) + k_response(i_r).roi_number = roi_list(i_r); + k_response(i_r).plane_num = roi_plane_num(i_r); + + f_trace=F(i_r,:); + global_baseline=mean( f_trace); + + [StimStat, StimTrace(i_r)] = fn_compute_photostim_response (f_trace, photostim_start_frame, timewind_stim, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg,global_baseline, time); + + k_response(i_r).response_mean = StimStat.response_mean; + k_response(i_r).response_std = StimStat.response_std; + k_response(i_r).response_coefvar = StimStat.response_coefvar; + k_response(i_r).response_fanofactor = StimStat.response_fanofactor; + + k_response(i_r).response_p_value1 = StimStat.response_p_value1; + k_response(i_r).response_p_value2 = StimStat.response_p_value2; + k_response(i_r).response_p_value3 = StimStat.response_p_value3; + + k_response(i_r).response_tstat = StimStat.response_tstat; + + + k_response(i_r).response_mean_1half = StimStat.response_mean_1half; + k_response(i_r).response_p_value1_1half = StimStat.response_p_value1_1half; + k_response(i_r).response_p_value2_1half = StimStat.response_p_value2_1half; + k_response(i_r).response_p_value3_1half = StimStat.response_p_value3_1half; + + k_response(i_r).response_mean_2half = StimStat.response_mean_2half; + k_response(i_r).response_p_value1_2half = StimStat.response_p_value1_2half; + k_response(i_r).response_p_value2_2half = StimStat.response_p_value2_2half; + k_response(i_r).response_p_value3_2half = StimStat.response_p_value3_2half; + + k_response(i_r).response_mean_odd = StimStat.response_mean_odd; + k_response(i_r).response_p_value1_odd = StimStat.response_p_value1_odd; + k_response(i_r).response_p_value2_odd = StimStat.response_p_value2_odd; + k_response(i_r).response_p_value3_odd = StimStat.response_p_value3_odd; + + k_response(i_r).response_mean_even = StimStat.response_mean_even; + k_response(i_r).response_p_value1_even = StimStat.response_p_value1_even; + k_response(i_r).response_p_value2_even = StimStat.response_p_value2_even; + k_response(i_r).response_p_value3_even = StimStat.response_p_value3_even; + + + dx = g_x - R_x(i_r); + dy = g_y - R_y(i_r); + distance = sqrt(dx.^2 + dy.^2); %pixels + distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + + k_response(i_r).response_distance_lateral_um = single(distance*pix2dist); + k_response(i_r).response_distance_axial_um = single(roi_z(i_r)); + k_response(i_r).response_distance_3d_um = single(distance3D); + + end + StimTrace=struct2table(StimTrace); + + response_sign = {'all','excited','inhibited'}; + k_trace=k1; + k_trace=rmfield(k_trace,{'fov_num','plane_num', 'channel_num'}); + flag_within_column=[0,1]; + for i_column = 1:1:numel(flag_within_column) + for i_sign = 1:1:numel(response_sign) + for i_p=1:1:numel(p_val) + if flag_within_column(i_column) ==1 % within column + idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>20 & [k_response.response_distance_lateral_um]<=100; % we exclude durectly stimulated neurons, and take every pairs within a "column" + else + idx_rois= [k_response.response_p_value1_odd]<=p_val(i_p) & [k_response.response_distance_lateral_um]>100; % we take only pairs outside of the column + end + switch response_sign{i_sign} + case 'excited' + idx_rois = idx_rois & [k_response.response_mean_odd]>0; + case 'inhibited' + idx_rois = idx_rois & [k_response.response_mean_odd]<0; + end + if sum(idx_rois)>1 + k_trace.response_trace_mean = mean(StimTrace.response_trace_mean(idx_rois,:),1); + k_trace.response_trace_mean_1half = mean(StimTrace.response_trace_mean_1half(idx_rois,:),1); + k_trace.response_trace_mean_2half = mean(StimTrace.response_trace_mean_2half(idx_rois,:),1); + k_trace.response_trace_mean_odd = mean(StimTrace.response_trace_mean_odd(idx_rois,:),1); + k_trace.response_trace_mean_even = mean(StimTrace.response_trace_mean_even(idx_rois,:),1); + else + k_trace.response_trace_mean = single(time+NaN); + k_trace.response_trace_mean_1half = single(time+NaN); + k_trace.response_trace_mean_2half = single(time+NaN); + k_trace.response_trace_mean_odd = single(time+NaN); + k_trace.response_trace_mean_even = single(time+NaN); + end + k_trace.response_p_val = p_val(i_p); + k_trace.response_sign = response_sign{i_sign}; + k_trace.flag_within_column = flag_within_column(i_column); + k_trace.num_pairs = sum(idx_rois); + insert(STIM.ROIResponseTraceZscore, k_trace); + end + end + end + insert(self, k_response); + end + end + end + end +end diff --git a/DataJoint/+STIMANAL/InfluenceDistance.m b/DataJoint/+STIMANAL/InfluenceDistance.m new file mode 100644 index 0000000..7eac8e8 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceDistance.m @@ -0,0 +1,116 @@ +%{ +# Responses of couple neurons to photostimulation, as a function of distance +-> EXP2.SessionEpoch +neurons_or_control : boolean # 1 - neurons, 0 control +flag_withold_trials : boolean # 1 define influence significance and sign based on odd trials, but compute the actual response based on even trials, 0 use all trials +flag_divide_by_std : boolean # 1 normalize the response by its std, 0 don't normalize +flag_normalize_by_total : boolean # 1 normalize by total number of pairs (e.g. includin non significant), 0 don't normalize +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +num_svd_components_removed : int # how many of the first svd components were removed +--- +is_volumetric : boolean # 1 volumetric, 0 single plane +num_targets : int # number of directly stimulated neurons (with significant response) or number of control targets (with non-significant responses) +num_pairs : int # total number of cell-pairs included +distance_lateral_bins : blob # lateral bins (um), edges +distance_axial_bins=null : blob # axial positions (um), planes depth + +response_lateral : longblob # sum of response for all cell-pairs in each (lateral) bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_excitation : longblob # sum of response for all cell-pairs with positive response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_inhibition : longblob # sum of response for all cell-pairs with negative response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_absolute : longblob # sum of absolute value of tre response for all cell-pairs in each bin, divided by the total number of all pairs (positive and negative) in that bin + +counts_lateral=null : longblob # counts of cell-pairs, in each bin +counts_lateral_excitation=null : longblob # counts of cell-pairs with positive response, in each bin +counts_lateral_inhibition=null : longblob # counts of cell-pairs with negative response, in each bin + +response_axial : longblob # same for axial bins +response_axial_excitation : longblob # +response_axial_inhibition : longblob # +response_axial_absolute : longblob # + +response_axial_in_column : longblob # same for axial bins +response_axial_in_column_excitation : longblob # +response_axial_in_column_inhibition : longblob # +response_axial_in_column_absolute : longblob # + +response_axial_out_column : longblob # same for axial bins +response_axial_out_column_excitation : longblob # +response_axial_out_column_inhibition : longblob # +response_axial_out_column_absolute : longblob # + + +counts_axial=null : longblob # +counts_axial_excitation=null : longblob # +counts_axial_inhibition=null : longblob # + +response_2d=null : longblob # ame for lateral-axial bin +response_2d_excitation=null : longblob # +response_2d_inhibition=null : longblob # +response_2d_absolute=null : longblob # + +counts_2d=null : longblob # +counts_2d_excitation=null : longblob # +counts_2d_inhibition =null : longblob # +%} + + +classdef InfluenceDistance < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1') & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + + rel=STIM.ROIInfluence; + distance_lateral_bins = [0:25:500]; % microns + column_radius(1) =100; % microns + column_radius(2) =200; % microns + + minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance + num_svd_components_removed_vector = [0, 1, 3, 5]; + pval=[0.001, 0.01, 0.05, 0.1, 0.2, 1]; + neurons_or_control_flag = [1,0]; + flag_withold_trials = [0,1]; + flag_normalize_by_total = [0,1]; + flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + +% minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance +% num_svd_components_removed_vector = [0]; +% pval=[0.001, 0.01, 0.05, 0.1, 0.2, 1]; +% neurons_or_control_flag = [1,0]; +% flag_withold_trials = [1]; +% flag_normalize_by_total = [1]; +% flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + + for i_n = 1:1:numel(neurons_or_control_flag) + kkk=key; + kkk.neurons_or_control = neurons_or_control_flag(i_n); + rel_direct= STIMANAL.NeuronOrControl & kkk; + rel_group_targets = IMG.PhotostimGroup & rel_direct; % we do it to get rid of the roi column + DATA_all=fetch((rel & key & rel_group_targets)& 'num_svd_components_removed=0' & 'num_of_baseline_trials_used>0' & 'num_of_target_trials_used>0','*'); + parfor i_p = 1:1:numel(pval) %parfor + for i_c = 1:1:numel(num_svd_components_removed_vector) + kk=key; + kk.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_total = 1:1:numel(flag_normalize_by_total) + for i_w = 1:1:numel(flag_withold_trials) + for i_std = 1:1:numel(flag_divide_by_std) + rel_current = rel & kk; + k =STIMANAL_fn_distance_binning_coupled_response(rel_current, key,DATA_all,rel_group_targets, pval(i_p), distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials(i_w),flag_normalize_by_total(i_total),flag_divide_by_std(i_std)); + k.flag_withold_trials = flag_withold_trials(i_w); + k.flag_normalize_by_total = flag_normalize_by_total(i_total); + k.flag_divide_by_std = flag_divide_by_std(i_std); + k.neurons_or_control = neurons_or_control_flag(i_n); + k.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,k); + end + end + end + + end + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/InfluenceDistance55.m b/DataJoint/+STIMANAL/InfluenceDistance55.m new file mode 100644 index 0000000..85c46bc --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceDistance55.m @@ -0,0 +1,116 @@ +%{ +# Responses of couple neurons to photostimulation, as a function of distance +-> EXP2.SessionEpoch +neurons_or_control : boolean # 1 - neurons, 0 control +flag_withold_trials : boolean # 1 define influence significance and sign based on odd trials, but compute the actual response based on even trials, 0 use all trials +flag_divide_by_std : boolean # 1 normalize the response by its std, 0 don't normalize +flag_normalize_by_total : boolean # 1 normalize by total number of pairs (e.g. includin non significant), 0 don't normalize +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +num_svd_components_removed : int # how many of the first svd components were removed +--- +is_volumetric : boolean # 1 volumetric, 0 single plane +num_targets : int # number of directly stimulated neurons (with significant response) or number of control targets (with non-significant responses) +num_pairs : int # total number of cell-pairs included +distance_lateral_bins : blob # lateral bins (um), edges +distance_axial_bins=null : blob # axial positions (um), planes depth + +response_lateral : longblob # sum of response for all cell-pairs in each (lateral) bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_excitation : longblob # sum of response for all cell-pairs with positive response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_inhibition : longblob # sum of response for all cell-pairs with negative response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_absolute : longblob # sum of absolute value of tre response for all cell-pairs in each bin, divided by the total number of all pairs (positive and negative) in that bin + +counts_lateral=null : longblob # counts of cell-pairs, in each bin +counts_lateral_excitation=null : longblob # counts of cell-pairs with positive response, in each bin +counts_lateral_inhibition=null : longblob # counts of cell-pairs with negative response, in each bin + +response_axial : longblob # same for axial bins +response_axial_excitation : longblob # +response_axial_inhibition : longblob # +response_axial_absolute : longblob # + +response_axial_in_column : longblob # same for axial bins +response_axial_in_column_excitation : longblob # +response_axial_in_column_inhibition : longblob # +response_axial_in_column_absolute : longblob # + +response_axial_out_column : longblob # same for axial bins +response_axial_out_column_excitation : longblob # +response_axial_out_column_inhibition : longblob # +response_axial_out_column_absolute : longblob # + + +counts_axial=null : longblob # +counts_axial_excitation=null : longblob # +counts_axial_inhibition=null : longblob # + +response_2d=null : longblob # ame for lateral-axial bin +response_2d_excitation=null : longblob # +response_2d_inhibition=null : longblob # +response_2d_absolute=null : longblob # + +counts_2d=null : longblob # +counts_2d_excitation=null : longblob # +counts_2d_inhibition =null : longblob # +%} + + +classdef InfluenceDistance55 < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1') & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + + rel=STIM.ROIInfluence5; + distance_lateral_bins = [0:25:500]; % microns + column_radius(1) =100; % microns + column_radius(2) =200; % microns + + minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance + num_svd_components_removed_vector = [0]; + pval=[0.001, 0.01, 0.05, 0.1, 1]; + neurons_or_control_flag = [1,0]; + flag_withold_trials = [0,1]; + flag_normalize_by_total = [1]; + flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + +% minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance +% num_svd_components_removed_vector = [0]; +% pval=[0.001, 0.01, 0.05, 0.1, 0.2, 1]; +% neurons_or_control_flag = [1,0]; +% flag_withold_trials = [1]; +% flag_normalize_by_total = [1]; +% flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + + for i_n = 1:1:numel(neurons_or_control_flag) + kkk=key; + kkk.neurons_or_control = neurons_or_control_flag(i_n); + rel_direct= STIMANAL.NeuronOrControl5 & kkk; + rel_group_targets = IMG.PhotostimGroup & rel_direct; % we do it to get rid of the roi column + DATA_all=fetch((rel & key & rel_group_targets)& 'num_svd_components_removed=0' & 'num_of_target_trials_used>0','*'); + parfor i_p = 1:1:numel(pval) %parfor + for i_c = 1:1:numel(num_svd_components_removed_vector) + kk=key; + kk.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_total = 1:1:numel(flag_normalize_by_total) + for i_w = 1:1:numel(flag_withold_trials) + for i_std = 1:1:numel(flag_divide_by_std) + rel_current = rel & kk; + k =STIMANAL_fn_distance_binning_coupled_response(rel_current, key,DATA_all,rel_group_targets, pval(i_p), distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials(i_w),flag_normalize_by_total(i_total),flag_divide_by_std(i_std)); + k.flag_withold_trials = flag_withold_trials(i_w); + k.flag_normalize_by_total = flag_normalize_by_total(i_total); + k.flag_divide_by_std = flag_divide_by_std(i_std); + k.neurons_or_control = neurons_or_control_flag(i_n); + k.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,k); + end + end + end + + end + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/InfluenceDistance7.m b/DataJoint/+STIMANAL/InfluenceDistance7.m new file mode 100644 index 0000000..7835f2d --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceDistance7.m @@ -0,0 +1,116 @@ +%{ +# Responses of couple neurons to photostimulation, as a function of distance +-> EXP2.SessionEpoch +neurons_or_control : boolean # 1 - neurons, 0 control +flag_withold_trials : boolean # 1 define influence significance and sign based on odd trials, but compute the actual response based on even trials, 0 use all trials +flag_divide_by_std : boolean # 1 normalize the response by its std, 0 don't normalize +flag_normalize_by_total : boolean # 1 normalize by total number of pairs (e.g. includin non significant), 0 don't normalize +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +num_svd_components_removed : int # how many of the first svd components were removed +--- +is_volumetric : boolean # 1 volumetric, 0 single plane +num_targets : int # number of directly stimulated neurons (with significant response) or number of control targets (with non-significant responses) +num_pairs : int # total number of cell-pairs included +distance_lateral_bins : blob # lateral bins (um), edges +distance_axial_bins=null : blob # axial positions (um), planes depth + +response_lateral : longblob # sum of response for all cell-pairs in each (lateral) bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_excitation : longblob # sum of response for all cell-pairs with positive response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_inhibition : longblob # sum of response for all cell-pairs with negative response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_absolute : longblob # sum of absolute value of tre response for all cell-pairs in each bin, divided by the total number of all pairs (positive and negative) in that bin + +counts_lateral=null : longblob # counts of cell-pairs, in each bin +counts_lateral_excitation=null : longblob # counts of cell-pairs with positive response, in each bin +counts_lateral_inhibition=null : longblob # counts of cell-pairs with negative response, in each bin + +response_axial : longblob # same for axial bins +response_axial_excitation : longblob # +response_axial_inhibition : longblob # +response_axial_absolute : longblob # + +response_axial_in_column : longblob # same for axial bins +response_axial_in_column_excitation : longblob # +response_axial_in_column_inhibition : longblob # +response_axial_in_column_absolute : longblob # + +response_axial_out_column : longblob # same for axial bins +response_axial_out_column_excitation : longblob # +response_axial_out_column_inhibition : longblob # +response_axial_out_column_absolute : longblob # + + +counts_axial=null : longblob # +counts_axial_excitation=null : longblob # +counts_axial_inhibition=null : longblob # + +response_2d=null : longblob # ame for lateral-axial bin +response_2d_excitation=null : longblob # +response_2d_inhibition=null : longblob # +response_2d_absolute=null : longblob # + +counts_2d=null : longblob # +counts_2d_excitation=null : longblob # +counts_2d_inhibition =null : longblob # +%} + + +classdef InfluenceDistance7 < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1') & STIM.ROIInfluence7; + end + methods(Access=protected) + function makeTuples(self, key) + + rel=STIM.ROIInfluence7; + distance_lateral_bins = [0:25:500]; % microns + column_radius(1) =100; % microns + column_radius(2) =200; % microns + + minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance + num_svd_components_removed_vector = [0]; + pval=[0.0001, 0.001, 0.01, 0.05, 0.1, 1]; + neurons_or_control_flag = [1,0]; + flag_withold_trials = [0,1]; + flag_normalize_by_total = [1]; + flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + +% minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance +% num_svd_components_removed_vector = [0]; +% pval=[0.001, 0.01, 0.05, 0.1, 0.2, 1]; +% neurons_or_control_flag = [1,0]; +% flag_withold_trials = [1]; +% flag_normalize_by_total = [1]; +% flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + + for i_n = 1:1:numel(neurons_or_control_flag) + kkk=key; + kkk.neurons_or_control = neurons_or_control_flag(i_n); + rel_direct= STIMANAL.NeuronOrControl7 & kkk; + rel_group_targets = IMG.PhotostimGroup & rel_direct; % we do it to get rid of the roi column + DATA_all=fetch((rel & key & rel_group_targets)& 'num_svd_components_removed=0' & 'num_of_target_trials_used>0','*'); + parfor i_p = 1:1:numel(pval) %parfor + for i_c = 1:1:numel(num_svd_components_removed_vector) + kk=key; + kk.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_total = 1:1:numel(flag_normalize_by_total) + for i_w = 1:1:numel(flag_withold_trials) + for i_std = 1:1:numel(flag_divide_by_std) + rel_current = rel & kk; + k =STIMANAL_fn_distance_binning_coupled_response(rel_current, key,DATA_all,rel_group_targets, pval(i_p), distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials(i_w),flag_normalize_by_total(i_total),flag_divide_by_std(i_std)); + k.flag_withold_trials = flag_withold_trials(i_w); + k.flag_normalize_by_total = flag_normalize_by_total(i_total); + k.flag_divide_by_std = flag_divide_by_std(i_std); + k.neurons_or_control = neurons_or_control_flag(i_n); + k.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,k); + end + end + end + + end + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrAngle.m b/DataJoint/+STIMANAL/InfluenceVsCorrAngle.m new file mode 100644 index 0000000..0813342 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrAngle.m @@ -0,0 +1,153 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngle < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngle & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + % bins + bins_corr = linspace(-1,1,10); % if there is no SVD component/s subtraction + bins_influence = linspace(-0.1,0.1,10); + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_angle\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrAngle; + rel_data_influence=STIM.ROIInfluence-IMG.ROIBad; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrAngle2.m b/DataJoint/+STIMANAL/InfluenceVsCorrAngle2.m new file mode 100644 index 0000000..a9a74ed --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrAngle2.m @@ -0,0 +1,189 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngle2 < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngle2 & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins +% bins_corr = linspace(0,180,8); + bins_corr = linspace(0,180,6); + + bins_influence = [-inf,linspace(-0.15,0.15,6),inf]; + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_angle2\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrAngle2; + rel_data_influence=STIM.ROIInfluence; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + +% rel_target_signif_by_psth = (STIM.ROIResponseDirect & 'flag_zscore=1' & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'theta_tuning_odd_even_corr>=0.5')); +% rel_target_signif_by_psth = (STIM.ROIResponseDirect & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'rayleigh_length>=0.05')); + rel_target_signif_by_psth = (STIM.ROIResponseDirect & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'goodness_of_fit_vmises>=0.5')); + + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance +% roi_psth_signif = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi & 'theta_tuning_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); +% roi_psth_signif = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi & 'rayleigh_length>=0.05', 'roi_number', 'ORDER BY roi_number'); + roi_psth_signif = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi & 'goodness_of_fit_vmises>=0.5', 'roi_number', 'ORDER BY roi_number'); + + roi_psth_all = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrAngleShuffled.m b/DataJoint/+STIMANAL/InfluenceVsCorrAngleShuffled.m new file mode 100644 index 0000000..c81da8e --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrAngleShuffled.m @@ -0,0 +1,187 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngleShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngle & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + + % bins + bins_corr = linspace(-1,1,10); % if there is no SVD component/s subtraction + bins_influence = linspace(-0.1,0.1,10); + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0,10:20:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_angle\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrAngle; + rel_data_influence=STIM.ROIInfluence-IMG.ROIBad; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngleShuffled2 < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngle2 & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins +% bins_corr = linspace(0,180,8); + bins_corr = linspace(0,180,6) + bins_influence = [-inf,linspace(-0.15,0.15,6),inf]; + + % distance_lateral_bins = [0,10:20:500,inf]; % microns + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_angle2\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrAngle2; + rel_data_influence=STIM.ROIInfluence; + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + % rel_target_signif_by_psth = (STIM.ROIResponseDirect & 'flag_zscore=1' & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'theta_tuning_odd_even_corr>=0.5')); +% rel_target_signif_by_psth = (STIM.ROIResponseDirect & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'rayleigh_length>=0.05')); + rel_target_signif_by_psth = (STIM.ROIResponseDirect & rel_target) & (IMG.ROI & (LICK2D.ROILick2DangleSpikes & k_psth & 'goodness_of_fit_vmises>=0.5')); + + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=0.5', 'roi_number', 'ORDER BY roi_number'); +% roi_psth_signif = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi & 'rayleigh_length>=0.05', 'roi_number', 'ORDER BY roi_number'); + roi_psth_signif = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi & 'goodness_of_fit_vmises>=0.5', 'roi_number', 'ORDER BY roi_number'); + + roi_psth_all = fetchn(LICK2D.ROILick2DangleSpikes & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuning.m b/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuning.m new file mode 100644 index 0000000..7c57413 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuning.m @@ -0,0 +1,186 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngleTuning < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngleTuning & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; +% bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; +% bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrAngleTuning; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DangleSpikes; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'goodness_of_fit_vmises>=0.25')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); +% DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; +% DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); +% DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target +% idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(rel_data_signal & k_psth & rel_roi & 'goodness_of_fit_vmises>=0.25', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuningShuffled.m b/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuningShuffled.m new file mode 100644 index 0000000..a11d11e --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrAngleTuningShuffled.m @@ -0,0 +1,214 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrAngleTuningShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrAngleTuning & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; + + % bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; + % bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrAngleTuning; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DangleSpikes; + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'goodness_of_fit_vmises>=0.25')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + % DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + % DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + % DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + % idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=0.25', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrPSTH.m b/DataJoint/+STIMANAL/InfluenceVsCorrPSTH.m new file mode 100644 index 0000000..57e3557 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrPSTH.m @@ -0,0 +1,186 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrPSTH < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrPSTH & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; +% bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; +% bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrPSTH; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DPSTHStatsSpikes; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); +% DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; +% DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); +% DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target +% idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(rel_data_signal & k_psth & rel_roi & 'psth_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrPSTHShuffled.m b/DataJoint/+STIMANAL/InfluenceVsCorrPSTHShuffled.m new file mode 100644 index 0000000..d1a258d --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrPSTHShuffled.m @@ -0,0 +1,214 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrPSTHShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrPSTH & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; + + % bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; + % bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrPSTH; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DPSTHStatsSpikes; + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + % DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + % DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + % DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + % idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrQuadrants.m b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrants.m new file mode 100644 index 0000000..5a5e2b2 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrants.m @@ -0,0 +1,186 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrants < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; +% bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; +% bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DQuadrantsSpikes; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'psth_quadrants_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); +% DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; +% DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); +% DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target +% idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(rel_data_signal & k_psth & rel_roi & 'psth_quadrants_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsFar.m b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsFar.m new file mode 100644 index 0000000..c61150b --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsFar.m @@ -0,0 +1,185 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrantsFar < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=100; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=inf; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; +% bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; +% bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants_far\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence5; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (LICK2D.ROILick2DQuadrants & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); +% DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; +% DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); +% DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target +% idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi & 'psth_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsResidual.m b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsResidual.m new file mode 100644 index 0000000..a4673e8 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrQuadrantsResidual.m @@ -0,0 +1,240 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrantsResidual < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + + distance_lateral_bins = [0:10:500,inf]; % microns + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; + % bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; + % bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\residuals\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence5; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (LICK2D.ROILick2DQuadrants & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + Data_distance_lateral=cell(numel(group_list),1); + Data_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + Data_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + Data_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + DataStim = cell2mat(DataStim); + Data_distance_lateral = cell2mat(Data_distance_lateral); + Data_distance_axial = cell2mat(Data_distance_axial); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(Data_distance_lateral)); + idx_include(Data_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(Data_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi & 'psth_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + Data_distance_axial =Data_distance_axial(idx_group_list_signif,idx_psth_signif); + Data_distance_lateral =Data_distance_lateral(idx_group_list_signif,idx_psth_signif); + + + DataCorr(~idx_include)=NaN; + + xx = Data_distance_lateral(:); + yy = Data_distance_axial(:); + dd = DataCorr(:); + + + MeanCorrDistance_binned =[]; + distance_axial_bins = unique(yy(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = xx>=distance_lateral_bins(i_l) & xx=distance_lateral_bins(i_l) & Data_distance_lateral=distance_lateral_bins(i_l) & current_distance_lateral EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrantsShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,9); % if there is no SVD component/s subtraction + bins_corr(2)=[]; + + % bins_influence = [-inf,linspace(-0.1,0.2,6),inf]; + % bins_influence = [-inf,linspace(-0.1,0.4,6),inf]; + + bins_influence = [-inf,linspace(-0.2,0.5,8),inf]; + + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence5; + rel_data_signal = LICK2D.ROILick2DQuadrantsSpikes; + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl5 & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect5 & rel_target) & (IMG.ROI & (rel_data_signal & k_psth & 'psth_quadrants_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + % DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + % DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + % DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + % idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(rel_data_signal & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehav.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehav.m new file mode 100644 index 0000000..205dce2 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehav.m @@ -0,0 +1,172 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrTraceBehav < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceBehav & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + num_svd_components_removed_vector_corr = [0,1,3,5,10]; + minimal_distance=25; %um exlude all cells within minimal distance from target + % bins + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_behav\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + for i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceBehav & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + if num_svd_components_removed_vector_corr(i_c)==0 + idx_subplot = 0; + else + idx_subplot = 2; + end + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-','Color',colormap(i_c,:)) + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + if i_c==1 + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + end + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr(1:end-1) + diff(bins_corr)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-','Color',colormap(i_c,:)) + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + if i_c==1 + title(sprintf('\n\nSVD removed %d',num_svd_components_removed_vector_corr(i_c))); + elseif i_c>=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavResidual.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavResidual.m new file mode 100644 index 0000000..a004df7 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavResidual.m @@ -0,0 +1,223 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included + +%} + + +classdef InfluenceVsCorrTraceBehavResidual < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceBehav & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + num_svd_components_removed_vector_corr =[0,1,3,5,10]; + minimal_distance=25; %um, exlude all cells within minimal distance from target + + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_behav2\residual\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + Data_distance_lateral=cell(numel(group_list),1); + Data_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + Data_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + Data_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + Data_distance_lateral = cell2mat(Data_distance_lateral); + Data_distance_axial = cell2mat(Data_distance_axial); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(Data_distance_lateral)); + idx_include(Data_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + DataStim(~idx_include)=NaN; + + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceBehav & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + + xx = Data_distance_lateral(:); + yy = Data_distance_axial(:); + dd = DataCorr(:); + + + MeanCorrDistance_binned =[]; + distance_axial_bins = unique(yy(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = xx>=distance_lateral_bins(i_l) & xx=distance_lateral_bins(i_l) & current_distance_lateral=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavShuffled.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavShuffled.m new file mode 100644 index 0000000..d288566 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceBehavShuffled.m @@ -0,0 +1,202 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included + +%} + + +classdef InfluenceVsCorrTraceBehavShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceBehav & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + num_svd_components_removed_vector_corr =[0,1,3,5,10]; + minimal_distance=25; %um, exlude all cells within minimal distance from target + + % bins + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_behav\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + Data_distance_lateral=cell(numel(group_list),1); + Data_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + Data_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + Data_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + Data_distance_lateral = cell2mat(Data_distance_lateral); + Data_distance_axial = cell2mat(Data_distance_axial); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(Data_distance_lateral)); + idx_include(Data_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + DataStim(~idx_include)=NaN; + DataStim=DataStim(:); + + Data_distance_lateral = Data_distance_lateral(:); + Data_distance_axial = Data_distance_axial(:); + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + idx_DataStim_pval= idx_DataStim_pval(:); + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceBehav & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + DataCorr=DataCorr(:); + + + + distance_axial_bins = unique(Data_distance_axial); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = Data_distance_lateral>=distance_lateral_bins(i_l) & Data_distance_lateral=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpont.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpont.m new file mode 100644 index 0000000..7f78379 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpont.m @@ -0,0 +1,172 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrTraceSpont < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceSpont & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + num_svd_components_removed_vector_corr = [0,1,3,5,10]; + minimal_distance=25; %um exlude all cells within minimal distance from target + % bins + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_spont\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + for i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceSpont & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + if num_svd_components_removed_vector_corr(i_c)==0 + idx_subplot = 0; + else + idx_subplot = 2; + end + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-','Color',colormap(i_c,:)) + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + if i_c==1 + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + end + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr(1:end-1) + diff(bins_corr)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-','Color',colormap(i_c,:)) + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + if i_c==1 + title(sprintf('\n\nSVD removed %d',num_svd_components_removed_vector_corr(i_c))); + elseif i_c>=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontResidual.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontResidual.m new file mode 100644 index 0000000..0b5f242 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontResidual.m @@ -0,0 +1,223 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included + +%} + + +classdef InfluenceVsCorrTraceSpontResidual < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceSpont & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + num_svd_components_removed_vector_corr =[0,1,3,5,10]; + minimal_distance=25; %um, exlude all cells within minimal distance from target + + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_spont\residual\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + Data_distance_lateral=cell(numel(group_list),1); + Data_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + Data_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + Data_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + Data_distance_lateral = cell2mat(Data_distance_lateral); + Data_distance_axial = cell2mat(Data_distance_axial); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(Data_distance_lateral)); + idx_include(Data_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + DataStim(~idx_include)=NaN; + + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceSpont & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + + xx = Data_distance_lateral(:); + yy = Data_distance_axial(:); + dd = DataCorr(:); + + + MeanCorrDistance_binned =[]; + distance_axial_bins = unique(yy(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = xx>=distance_lateral_bins(i_l) & xx=distance_lateral_bins(i_l) & current_distance_lateral=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontShuffled.m b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontShuffled.m new file mode 100644 index 0000000..b8417f8 --- /dev/null +++ b/DataJoint/+STIMANAL/InfluenceVsCorrTraceSpontShuffled.m @@ -0,0 +1,202 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included + +%} + + +classdef InfluenceVsCorrTraceSpontShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceSpont & (EXP2.Session & STIM.ROIInfluence5); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + num_svd_components_removed_vector_corr =[0,1,3,5,10]; + minimal_distance=25; %um, exlude all cells within minimal distance from target + + % bins + bins_corr = [ -0.1,linspace(-0.05,0.05,11),0.1, 0.15, 0.2, 0.3,0.4,0.5, inf]; + bins_influence = [-inf, -0.3, linspace(-0.2,0.2,11),0.3, 0.4,0.5,0.75,1,1.25,1.5, inf]; + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_spont\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence5 & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + Data_distance_lateral=cell(numel(group_list),1); + Data_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + Data_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + Data_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + Data_distance_lateral = cell2mat(Data_distance_lateral); + Data_distance_axial = cell2mat(Data_distance_axial); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(Data_distance_lateral)); + idx_include(Data_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + DataStim(~idx_include)=NaN; + DataStim=DataStim(:); + + Data_distance_lateral = Data_distance_lateral(:); + Data_distance_axial = Data_distance_axial(:); + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + idx_DataStim_pval= idx_DataStim_pval(:); + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + + + rel_data_corr=STIMANAL.Target2AllCorrTraceSpont & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + DataCorr=DataCorr(:); + + + + distance_axial_bins = unique(Data_distance_axial); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = Data_distance_lateral>=distance_lateral_bins(i_l) & Data_distance_lateral=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/Jobs.m b/DataJoint/+STIMANAL/Jobs.m new file mode 100644 index 0000000..4dbf6ac --- /dev/null +++ b/DataJoint/+STIMANAL/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +STIMANAL +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+STIMANAL/MiceIncluded.m b/DataJoint/+STIMANAL/MiceIncluded.m new file mode 100644 index 0000000..3618704 --- /dev/null +++ b/DataJoint/+STIMANAL/MiceIncluded.m @@ -0,0 +1,24 @@ +%{ +# If this sessioon was recorded on mesoscope +-> LAB.Subject +%} + +classdef MiceIncluded < dj.Lookup + properties + contents = { + 447991 + 447990 + 462458 + 462455 + 463195 + 463192 + 445980 + 445873 + + 463190 + 463189 + 464724 + 464725 + } + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/NeuronOrControl.m b/DataJoint/+STIMANAL/NeuronOrControl.m new file mode 100644 index 0000000..c1c1d24 --- /dev/null +++ b/DataJoint/+STIMANAL/NeuronOrControl.m @@ -0,0 +1,49 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +neurons_or_control :boolean # 1 - neurons, 0 control +-> IMG.ROI +num_targets : boolean # number of neurons or control sites +%} + + +classdef NeuronOrControl < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect; + end + methods(Access=protected) + function makeTuples(self, key) + neurons_or_control = [1,0]; + rel = STIM.ROIResponseDirect & key; + + pval_theshold_neurons=0.05; + pval_theshold_control=0.05; + z_score_threshold_neurons =0; + z_score_threshold_controls =100; + + + + for i_n = 1:1:numel(neurons_or_control) + + if neurons_or_control(i_n) == 1 %neurons + % rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>=' num2str(z_score_threshold_neurons)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>' num2str(z_score_threshold_neurons)]); + elseif neurons_or_control(i_n) == 0 % control sites + % rel_direct= (rel & ['response_p_value1_odd>=' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd>' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)]) ; + end + kkk=fetch(rel_direct); + + + for i=1:1:numel(kkk) + kkk(i).neurons_or_control=neurons_or_control(i_n); + kkk(i).num_targets=rel_direct.count; + end + insert(self,kkk); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/NeuronOrControl5.m b/DataJoint/+STIMANAL/NeuronOrControl5.m new file mode 100644 index 0000000..703c10e --- /dev/null +++ b/DataJoint/+STIMANAL/NeuronOrControl5.m @@ -0,0 +1,49 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +neurons_or_control :boolean # 1 - neurons, 0 control +-> IMG.ROI +num_targets : boolean # number of neurons or control sites +%} + + +classdef NeuronOrControl5 < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + neurons_or_control = [1,0]; + rel = STIM.ROIResponseDirect5 & key; + + pval_theshold_neurons=0.05; + pval_theshold_control=0.05; + z_score_threshold_neurons =0; + z_score_threshold_controls =100; + + + + for i_n = 1:1:numel(neurons_or_control) + + if neurons_or_control(i_n) == 1 %neurons + % rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>=' num2str(z_score_threshold_neurons)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>' num2str(z_score_threshold_neurons)]); + elseif neurons_or_control(i_n) == 0 % control sites + % rel_direct= (rel & ['response_p_value1_odd>=' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd>' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)]) ; + end + kkk=fetch(rel_direct); + + + for i=1:1:numel(kkk) + kkk(i).neurons_or_control=neurons_or_control(i_n); + kkk(i).num_targets=rel_direct.count; + end + insert(self,kkk); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/NeuronOrControl7.m b/DataJoint/+STIMANAL/NeuronOrControl7.m new file mode 100644 index 0000000..d4caade --- /dev/null +++ b/DataJoint/+STIMANAL/NeuronOrControl7.m @@ -0,0 +1,49 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +neurons_or_control :boolean # 1 - neurons, 0 control +-> IMG.ROI +num_targets : boolean # number of neurons or control sites +%} + + +classdef NeuronOrControl7 < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect7; + end + methods(Access=protected) + function makeTuples(self, key) + neurons_or_control = [1,0]; + rel = STIM.ROIResponseDirect7 & key; + + pval_theshold_neurons=0.05; + pval_theshold_control=0.05; + z_score_threshold_neurons =0; + z_score_threshold_controls =100; + minimal_num_of_target_trials_used=20; + + + for i_n = 1:1:numel(neurons_or_control) + + if neurons_or_control(i_n) == 1 %neurons + % rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>=' num2str(z_score_threshold_neurons)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd<=' num2str(pval_theshold_neurons)] & ['response_mean_odd>' num2str(z_score_threshold_neurons)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)]); + elseif neurons_or_control(i_n) == 0 % control sites + % rel_direct= (rel & ['response_p_value1_odd>=' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)] & ['num_of_baseline_trials_used>1000']); + rel_direct= (rel & ['response_p_value1_odd>' num2str(pval_theshold_control)] & ['response_mean_odd<' num2str(z_score_threshold_controls)] & ['num_of_target_trials_used>=' num2str(minimal_num_of_target_trials_used)]) ; + end + kkk=fetch(rel_direct); + + + for i=1:1:numel(kkk) + kkk(i).neurons_or_control=neurons_or_control(i_n); + kkk(i).num_targets=rel_direct.count; + end + insert(self,kkk); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/OutDegree.m b/DataJoint/+STIMANAL/OutDegree.m new file mode 100644 index 0000000..2168bff --- /dev/null +++ b/DataJoint/+STIMANAL/OutDegree.m @@ -0,0 +1,76 @@ +%{ +# Out degree of directly stimulated neurons, i.e. number of neurons indirectly influenced by the photostimulation +-> IMG.PhotostimGroup +-> IMG.ROI +max_distance_lateral : float # maximum lateral distance (um) to compute pairs within this distance form target neuron +p_val : double # p-value of the response in influenced cells +--- +out_degree_all : int # number of neurons influenced (excited and inhibited) by this neuron, significance based on t-test +out_degree_excitatory : int # number of neurons influenced (excited) by this neuron, significance based on t-test +out_degree_inhibitory : int # number of neurons influenced (inhibited) by this neuron, significance based on t-test +%} + + +classdef OutDegree < dj.Imported + properties + keySource = EXP2.SessionEpoch & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + minimal_lateral_distance=25; % in microns, max distance to direct neuron + max_distance_lateral_vec = [50, 100, 150, 200, 500, 1000]; + p_val=[0.0001, 0.001, 0.01, 0.05]; + + + rel_group = IMG.PhotostimGroup & STIM.ROIResponseDirect5 & key; + photostim_group = fetch(rel_group,'ORDER BY photostim_group_num'); + + key_ROI=fetch(STIM.ROIResponseDirect5 & key,'ORDER BY photostim_group_num'); + + parfor i_d = 1:1:numel(max_distance_lateral_vec) + for i_p = 1:1:numel(p_val) + current_p_val = p_val(i_p); + key_ROI_current = key_ROI; + for i_g = 1:1: rel_group.count + rel_group_current = photostim_group(i_g); + + % using t-test p-value as criteria + rel = (STIM.ROIInfluence5 & rel_group_current) & sprintf('response_p_value1<=%.4f',current_p_val) & sprintf('response_distance_lateral_um>%d',minimal_lateral_distance) & sprintf('response_distance_lateral_um<=%d',(max_distance_lateral_vec(i_d))); + rel_current = rel ; + key_ROI_current(i_g).out_degree_all = rel_current.count; + + rel_current = rel & 'response_mean>0'; + key_ROI_current(i_g).out_degree_excitatory= rel_current.count; + + rel_current = rel & 'response_mean<0'; + key_ROI_current(i_g).out_degree_inhibitory= rel_current.count; + + + % % using Ranksum test p_value as criteria + % rel = (STIM.ROIInfluence & rel_group_current) & sprintf('num_svd_components_removed=%d',num_svd) & sprintf('response_p_value2<=%.4f',current_p_val) & sprintf('response_distance_lateral_um>%d',minimal_lateral_distance) & sprintf('response_distance_lateral_um<=%d',(max_distance_lateral_vec(i_d))); + % rel_current = rel ; + % key_ROI_current(i_g).out_degree_all2 = rel_current.count; + % + % rel_current = rel & 'response_mean>0'; + % key_ROI_current(i_g).out_degree_excitatory2= rel_current.count; + % + % rel_current = rel & 'response_mean<0'; + % key_ROI_current(i_g).out_degree_inhibitory2= rel_current.count; + + + key_ROI_current(i_g).max_distance_lateral = max_distance_lateral_vec(i_d); + % key_ROI_current(i_g).num_svd_components_removed = num_svd; + key_ROI_current(i_g).p_val = current_p_val; + + + + end + insert(self,key_ROI_current) + end + end + end + end +end + + + diff --git a/DataJoint/+STIMANAL/PLOTInfluenceDistance.m b/DataJoint/+STIMANAL/PLOTInfluenceDistance.m new file mode 100644 index 0000000..f98963c --- /dev/null +++ b/DataJoint/+STIMANAL/PLOTInfluenceDistance.m @@ -0,0 +1,147 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +num_svd_components_removed : int # how many of the first svd components were removed +%} + + +classdef PLOTInfluenceDistance < dj.Imported + properties + keySource = EXP2.SessionEpoch & STIMANAL.InfluenceDistance ; + + end + methods(Access=protected) + function makeTuples(self, key) + + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + clf; + + % figure + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 15 10]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + horizontal_dist=0.35; + vertical_dist=0.35; + + panel_width1=0.2; + panel_height1=0.25; + position_x1(1)=0.2; + position_x1(end+1)=position_x1(end)+horizontal_dist; + + position_y1(1)=0.5; + position_y1(end+1)=position_y1(end)-vertical_dist; + + rel_data = (STIMANAL.InfluenceDistance & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>0') ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>0')) & key; + + key.is_volumetric =1; % 1 volumetric, 1 single plane + distance_axial_bins=[0,60,90,120]; + distance_axial_bins_plot=[0,30,60,90,120]; + % key.session_epoch_number=2; + flag_response=0; %0 all, 1 excitation, 2 inhibition, 3 absolute + key.num_svd_components_removed=0; + response_p_val=1; + + + key.neurons_or_control =1; % 1 neurons, 0 control sites + rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); + rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + + %% 2D plots - Neurons + ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs + OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + + xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; + imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) + axis tight + axis equal + cmp = bluewhitered(2048); % + colormap(ax1, cmp) + % set(gca,'XTick',OUT1.distance_lateral_bins_centers) + xlabel([sprintf('Lateral Distance ') '(\mum)']); + % ylabel([sprintf('Axial Distance ') '(\mum)']); + % colorbar + % set(gca,'YTick',[],'XTick',[20,100:100:500]); + set(gca,'YTick',[],'XTick',[25,100:100:500]); + + %% 2D plots - Control sites + key.neurons_or_control =0; % 1 neurons, 0 control sites + rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); + + ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); + D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs + OUT2=fn_PLOT_CoupledResponseDistance_averaging(D2,distance_axial_bins,flag_response); + imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) + axis tight + axis equal + colormap(ax2,cmp) + % colorbar + caxis([OUT1.minv OUT1.maxv]); + xlabel([sprintf('Lateral Distance ') '(\mum)']); + ylabel([sprintf('Axial Distance ') '(\mum)']); + set(gca,'YTick',[],'XTick',[25,100:100:500]); + + %% Marginal distribution - lateral + axes('position',[position_x1(1), position_y1(1)+0.17, panel_width1, panel_height1*0.5]); + hold on + plot(xl, [0 0],'-k') + plot(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,'-','Color',[1 0 0]); + plot(OUT2.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,'-','Color',[0.5 0.5 0.5]); + yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); + yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); + ylim(yl) + set(gca,'XTick',[],'XLim',xl); + box off + ylabel([sprintf('Response\n') '(z-score)']); + set(gca,'YTick',[0,0.1]); + + % Marginal distribution - lateral (zoom) + axes('position',[position_x1(1)+0.06, position_y1(1)+0.22, panel_width1*0.7, panel_height1*0.4]); + hold on + plot(xl, [0 0],'-k') + plot(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,'-','Color',[1 0 0]); + plot(OUT2.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,'-','Color',[0.5 0.5 0.5]); + yl(1)=1.5*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); + yl(2)=2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); + ylim(yl) + set(gca,'XLim',xl); + box off + set(gca,'YTick',[-0.002 0 0.002]); + + %% Marginal distribution - axial + axm=axes('position',[position_x1(1)-0.1, position_y1(1)+0.09, panel_width1*0.4, panel_height1*0.27]); + hold on + plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') + plot(distance_axial_bins,OUT1.marginal_axial_in_column_mean,'-','Color',[1 0 0]); + plot(distance_axial_bins,OUT2.marginal_axial_in_column_mean,'-','Color',[0.5 0.5 0.5]); + axm.View = [90 90] + xlabel([sprintf('Axial Distance ') '(\mum)']); + ylabel([sprintf('Response\n') '(z-score)']); + set(gca,'XTick',[distance_axial_bins]); + + %% Marginal distribution - axial + axm=axes('position',[position_x1(1)+0.5, position_y1(1)+0.09, panel_width1*0.4, panel_height1*0.27]); + hold on + plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') + plot(distance_axial_bins,OUT1.marginal_axial_out_column_mean,'-','Color',[1 0 0]); + plot(distance_axial_bins,OUT2.marginal_axial_out_column_mean,'-','Color',[0.5 0.5 0.5]); + axm.View = [90 90] + xlabel([sprintf('Axial Distance ') '(\mum)']); + ylabel([sprintf('Response\n') '(z-score)']); + set(gca,'XTick',[distance_axial_bins]); + + end + end +end diff --git a/DataJoint/+STIMANAL/PLOTInfluenceTrace.m b/DataJoint/+STIMANAL/PLOTInfluenceTrace.m new file mode 100644 index 0000000..68b6898 --- /dev/null +++ b/DataJoint/+STIMANAL/PLOTInfluenceTrace.m @@ -0,0 +1,145 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +num_svd_components_removed : int # how many of the first svd components were removed +neurons_or_control :boolean # 1 - neurons, 0 control +%} + + +classdef PLOTInfluenceTrace < dj.Imported + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIMANAL.NeuronOrControl & STIM.ROIResponseTraceZscore3) & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>30')); + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIMANAL.NeuronOrControl & STIM.ROIResponseTraceZscore3); + keySource= (EXP2.SessionEpoch & STIM.ROIInfluenceTrace2) & (IMG.FOVEpoch & 'imaging_frame_rate>5.2') & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30')) + end + methods(Access=protected) + function makeTuples(self, key) + + rel_data=STIM.ROIInfluenceTrace2; + + time_bin=0.5; %s + + flag_session_by_session = 0; %1 per session, 0 all sessions combined + flag_mean_over_std = 0; %1 normalize each trace by this cell std, 0 not + + + + + num_svd_components_removed_vector = [0, 1]; + neurons_or_control_flag = [0,1]; + flag_distance = [0,1,2,3]; % 0 (0-25um), 1 (25-100um), 2 (100-200um), 3 (>200 um) + flag_distance_label = {'distance 25um <', '25um <= distance < 100um', '100um <= distance < 200um', 'distance >= 200um'}; + + k_trace.response_p_val =1; % p_val=[0.01, 0.05, 1] + k_trace.response_sign = 'all'; %all excited inhibited + + + + clf + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + if flag_session_by_session==0 + key=[]; +% rel_sessions= (EXP2.SessionEpoch & ... +% (IMG.FOVEpoch & 'imaging_frame_rate>5.2') ... +% & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30'))); + + + rel_sessions= (EXP2.SessionEpoch & ... + (IMG.FOVEpoch & 'imaging_frame_rate>5.2')); + + + else + rel_sessions=[]; + end + + + + + time = [-10: (1/frame_rate): 10]; + bin_size_in_frame=ceil(time_bin*frame_rate); + time = time(1:bin_size_in_frame:end); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + k_trace.num_svd_components_removed = num_svd_components_removed_vector(i_c); + + for i_distance = 1:1: numel(flag_distance) + k_trace.flag_distance=flag_distance(i_distance); + column_plot_offset =4*(i_distance -1); + MEAN{1}=zeros(2,numel(time))+NaN; + MEAN{2}=zeros(2,numel(time))+NaN; + + + STEM{1}=zeros(2,numel(time))+NaN; + STEM{2}=zeros(2,numel(time))+NaN; + + + for i_n = 1:1:numel(neurons_or_control_flag) + k.neurons_or_control=neurons_or_control_flag(i_n); + rel_direct= IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & k) & key; + + rel_fetch = (rel_data& k_trace) & rel_direct & key & 'num_pairs>1'; + rel_fetch = rel_fetch & rel_sessions; + if rel_fetch.count()>0 + num_pairs=fetchn(rel_fetch,'num_pairs', 'ORDER BY photostim_group_num'); + + % % 1st half trials + % r=cell2mat(fetchn(rel_fetch,'response_trace_mean_1half', 'ORDER BY photostim_group_num')); + % r=r.*(num_pairs/(mean(num_pairs))); + % MEAN{1}(i_n,:)=nanmean(r,1); + % STEM{1}(i_n,:)=nanstd(r,1)./sqrt(numel(num_pairs)); + % + % % 2nd half trials + % r=cell2mat(fetchn(rel_fetch,'response_trace_mean_2half', 'ORDER BY photostim_group_num')); + % r=r.*(num_pairs/(mean(num_pairs))); + % MEAN{2}(i_n,:)=nanmean(r,1); + % STEM{2}(i_n,:)=nanstd(r,1)./sqrt(numel(num_pairs)); + + % odd trials + if flag_mean_over_std==0 + r=cell2mat(fetchn(rel_fetch,'response_trace_mean_odd', 'ORDER BY photostim_group_num')); + elseif flag_mean_over_std==1 + r=cell2mat(fetchn(rel_fetch,'response_trace_mean_over_std_odd', 'ORDER BY photostim_group_num')); + end + r=(r./num_pairs).*(num_pairs/mean(num_pairs)); + MEAN{1}(i_n,:)=nanmean(r,1); + STEM{1}(i_n,:)=nanstd(r,[],1)./sqrt(numel(num_pairs)); + + % even trials + if flag_mean_over_std==0 + r=cell2mat(fetchn(rel_fetch,'response_trace_mean_even', 'ORDER BY photostim_group_num')); + elseif flag_mean_over_std==1 + r=cell2mat(fetchn(rel_fetch,'response_trace_mean_over_std_even', 'ORDER BY photostim_group_num')); + end + r=(r./num_pairs).*(num_pairs/mean(num_pairs)); + MEAN{2}(i_n,:)=nanmean(r,1); + STEM{2}(i_n,:)=nanstd(r,[],1)./sqrt(numel(num_pairs)); + + else + continue + end + + end + subplot(4,4,i_c+column_plot_offset) + hold on + shadedErrorBar(time,MEAN{2}(1,:),STEM{2}(1,:),'lineprops',{'-','Color',[0 0 0]}) + shadedErrorBar(time,MEAN{2}(2,:),STEM{2}(2,:),'lineprops',{'-','Color',[1 0 0]}) + xlabel('Time from photostim. (s)'); + ylabel('Influence, z-score') + title(sprintf('%s\n SVD comp. removed: %d',flag_distance_label{flag_distance(i_distance)+1}, num_svd_components_removed_vector(i_c))); + xlim([-10 10]) + end + end + insert(self,key) + end +end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/PLOTInfluenceTraceRaw.m b/DataJoint/+STIMANAL/PLOTInfluenceTraceRaw.m new file mode 100644 index 0000000..c6082b5 --- /dev/null +++ b/DataJoint/+STIMANAL/PLOTInfluenceTraceRaw.m @@ -0,0 +1,126 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +num_svd_components_removed : int # how many of the first svd components were removed +neurons_or_control :boolean # 1 - neurons, 0 control +%} + + +classdef PLOTInfluenceTraceRaw < dj.Imported + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIMANAL.NeuronOrControl & STIM.ROIResponseTraceZscore3) & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>30')); + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIMANAL.NeuronOrControl & STIM.ROIResponseTraceZscore3); + keySource= (EXP2.SessionEpoch & STIM.ROIInfluenceTrace2) & (IMG.FOVEpoch & 'imaging_frame_rate>5.2') & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30')) + end + + methods(Access=protected) + function makeTuples(self, key) + + rel_data=STIM.ROIInfluenceTrace2; + + time_bin=0.5; %s + + flag_session_by_session = 1; %1 per session, 0 all sessions combined + + num_svd_components_removed_vector = [0,1]; + neurons_or_control_flag = [0,1]; + flag_distance = [0,1,2,3]; % 0 (0-25um), 1 (25-100um), 2 (100-200um), 3 (>200 um) + flag_distance_label = {'distance 25um <', '25um <= distance < 100um', '100um <= distance < 200um', 'distance >= 200um'}; + + k_trace.response_p_val =1; % p_val=[0.01, 0.05, 1] + k_trace.response_sign = 'all'; %all excited inhibited + + + + clf + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + if flag_session_by_session==0 + key=[]; +% rel_sessions= (EXP2.SessionEpoch & ... +% (IMG.FOVEpoch & 'imaging_frame_rate>5.2') ... +% & (STIMANAL.SessionEpochsIncluded& IMG.PlaneCoordinates & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30'))); + + rel_sessions= (EXP2.SessionEpoch & ... + (IMG.FOVEpoch & 'imaging_frame_rate>5.2')); + + else + rel_sessions=[]; + end + + + + + time = [-10: (1/frame_rate): 10]; + bin_size_in_frame=ceil(time_bin*frame_rate); + time = time(1:bin_size_in_frame:end); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + k_trace.num_svd_components_removed = num_svd_components_removed_vector(i_c); + + for i_distance = 1:1: numel(flag_distance) + k_trace.flag_distance=flag_distance(i_distance); + column_plot_offset =4*(i_distance -1); + MEAN=zeros(2,numel(time))+NaN; + STEM=zeros(2,numel(time))+NaN; + + MEAN_baseline=zeros(2,numel(time))+NaN; + STEM_baseline=zeros(2,numel(time))+NaN; + + + for i_n = 1:1:numel(neurons_or_control_flag) + k.neurons_or_control=neurons_or_control_flag(i_n); + rel_direct= IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & k) & key; + + rel_fetch = (rel_data& k_trace) & rel_direct & key & 'num_pairs>1'; + rel_fetch = rel_fetch & rel_sessions; + if rel_fetch.count()>0 + num_pairs=fetchn(rel_fetch,'num_pairs', 'ORDER BY photostim_group_num'); + + + % odd trials + + r=cell2mat(fetchn(rel_fetch,'responseraw_trace_mean', 'ORDER BY photostim_group_num')); + r=(r./num_pairs).*(num_pairs/mean(num_pairs)); + MEAN(i_n,:)=nanmean(r,1); + STEM(i_n,:)=nanstd(r,[],1)./sqrt(numel(num_pairs)); + + r=cell2mat(fetchn(rel_fetch,'baseline_trace_mean', 'ORDER BY photostim_group_num')); + r=(r./num_pairs).*(num_pairs/mean(num_pairs)); + MEAN_baseline(i_n,:)=nanmean(r,1); + STEM_baseline(i_n,:)=nanstd(r,[],1)./sqrt(numel(num_pairs)); + + + else + continue + end + + end + subplot(4,4,i_c+column_plot_offset) + hold on + shadedErrorBar(time,MEAN(1,:),STEM(1,:),'lineprops',{'-','Color',[0 0 0]}) % control targets response + shadedErrorBar(time,MEAN(2,:),STEM(2,:),'lineprops',{'-','Color',[1 0 0]}) % neuron targets response + + shadedErrorBar(time,MEAN_baseline(1,:),STEM_baseline(1,:),'lineprops',{'-','Color',[0 1 0]}) % control targets baseline + shadedErrorBar(time,MEAN_baseline(2,:),STEM_baseline(2,:),'lineprops',{'-','Color',[0 0 1]}) % neuron targets baseline + + + xlabel('Time from photostim. (s)'); + ylabel('Influence, z-score') + title(sprintf('%s\n SVD comp. removed: %d',flag_distance_label{flag_distance(i_distance)+1}, num_svd_components_removed_vector(i_c))); + xlim([-10 10]) + end + end + insert(self,key) + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/PLOTROIInfluenceVariability.m b/DataJoint/+STIMANAL/PLOTROIInfluenceVariability.m new file mode 100644 index 0000000..4e84d3f --- /dev/null +++ b/DataJoint/+STIMANAL/PLOTROIInfluenceVariability.m @@ -0,0 +1,252 @@ +%{ +# ROI responses to each photostim group. +-> IMG.PhotostimGroup +-> IMG.ROI +--- +%} + + +classdef PLOTROIInfluenceVariability < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = EXP2.SessionEpoch & STIMANAL.ROIResponseDirectVariability; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Photostim\photostim_traces\coupled_variability\']; + + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\epoch' num2str(key.session_epoch_number) '\']; + + + min_distance_to_closest_target=30; % in microns + + close all; + frame_window_short=[40,40]/4; + frame_window_long=[56,110]/2; + flag_baseline_trial_or_avg=0; %1 baseline per trial, 0 - baseline averaged across trials + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + min_distance_to_closest_target_pixels=min_distance_to_closest_target/pix2dist; + + rel=STIM.ROIInfluence5 & 'response_p_value1<=0.001' & sprintf('response_distance_lateral_um >%.2f', min_distance_to_closest_target_pixels) & 'response_mean>0'; + + if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; + elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; + elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; + end + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + smooth_bins=2; + + smooth_bins_single_trials=5; + + + + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + panel_width=0.25; + panel_height=0.25; + horizontal_distance=0.4; + vertical_distance=0.35; + + position_x(1)=0.13; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.5; + position_y(end+1)=position_y(end) - vertical_distance; + + + G=fetch(IMG.PhotostimGroupROI & (STIM.ROIResponseDirect & 'response_p_value1<=0.0001') & key ,'*','ORDER BY photostim_group_num'); + + group_list=[G.photostim_group_num]; + + + + + time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + + for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; + % signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); + % response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); + % response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); + % response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels + % response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; + % flag_distance_flag=5 + % if flag_distance_flag==0 % lateral distance + % distance=[DATA.response_distance_pixels]; + % distance=pix2dist*distance; + % elseif flag_distance_flag==1 % axial distance + % distance=[DATA.response_distance_axial_um]; + % elseif flag_distance_flag==2 % 3D distance + % distance=[DATA.response_distance_3d_um]; + % end + + + + response_trace_trials_direct = fetch1(STIMANAL.ROIResponseDirectVariability & key,'response_trace_trials'); + time_vector_direct = fetch1(STIMANAL.ROIResponseDirectVariability & key,'time_vector'); + + + + + for i_r = 1:1:numel(signif_roi) + kk_insert = fetch( STIM.ROIResponseDirect & key); + kk_insert.roi_number =DATA(i_r).roi_number; + kk_insert.plane_num = DATA(i_r).plane_num; + + k_coupled.roi_number =DATA(i_r).roi_number; + k_coupled.plane_num = DATA(i_r).plane_num; + + response_trace_trials_coupled = fetch1(STIMANAL.ROIInfluenceVariability & key & k_coupled,'response_trace_trials'); + + + %% response pre-synaptic + %__________________________________________________________ + + ax1=axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + y=response_trace_trials_direct; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time_vector_direct,y_smooth,'Color',[ 0 0 0],'LineWidth',3); + shadedErrorBar(time_vector_direct,y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + ylim ([min([-0.2,min_epoch]),max([1 ,max_epoch])]); + ylabel('Response (\DeltaF/F)') + set(gca,'FontSize',24); + set(gca,'Ytick',[0, 1]); + xlim ([-5,10]); + title([sprintf('''Pre-synaptic''')]); + + + + %% response pre-synaptic - single trials + %__________________________________________________________ + ax1=axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + hold on + y=response_trace_trials_direct; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + for i=1:1:size(response_trace_trials_direct,1) + xxx= movmean(response_trace_trials_direct(i,:),[smooth_bins_single_trials 0], 2, 'omitnan','Endpoints','shrink'); + plot(time_vector_direct,xxx,'LineWidth',1); + end + plot(time_vector_direct,y_smooth,'Color',[ 0 0 0],'LineWidth',3); + xlabel(' Time from photostimulation (s)'); + ylabel('Response (\DeltaF/F)') + set(gca,'FontSize',24); + xlim ([-5,10]); + + + + %% response post-synaptic + %__________________________________________________________ + + ax1=axes('position',[position_x(2), position_y(1), panel_width, panel_height]); + y=response_trace_trials_coupled; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 0 0 0],'LineWidth',3); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + ylim ([min([-0.2,min_epoch]),max([1 ,max_epoch])]); +% ylabel('Response (\DeltaF/F)') + set(gca,'FontSize',24); + set(gca,'Ytick',[0, 1]); + xlim ([-5,10]); + title([sprintf('''Post-synaptic''')]); + + text(0,1.5,sprintf('anm %d, session %d \n Epoch %d \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n \n',key.subject_id,key.session,key.session_epoch_number, G(i_g).photostim_group_num, k_coupled.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + + %% response post-synaptic - single trials + %__________________________________________________________ + ax1=axes('position',[position_x(2), position_y(2), panel_width, panel_height]); + hold on + y=response_trace_trials_coupled; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + for i=1:1:size(response_trace_trials_coupled,1) + xxx= movmean(response_trace_trials_coupled(i,:),[smooth_bins_single_trials 0], 2, 'omitnan','Endpoints','shrink'); + plot(time(1:end-1),xxx,'LineWidth',1); + end + plot(time(1:end-1),y_smooth,'Color',[ 0 0 0],'LineWidth',3); +% xlabel(' Time from photostimulation (s)'); +% ylabel('Response (\DeltaF/F)') + set(gca,'FontSize',24); + xlim ([-5,10]); + + + + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + + + clf + + + + insert(self, kk_insert); + + + end + end + + + end + end +end diff --git a/DataJoint/+STIMANAL/PLOTResponseVsCorr.m b/DataJoint/+STIMANAL/PLOTResponseVsCorr.m new file mode 100644 index 0000000..9bd2907 --- /dev/null +++ b/DataJoint/+STIMANAL/PLOTResponseVsCorr.m @@ -0,0 +1,90 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +%} + + +classdef PLOTResponseVsCorr < dj.Imported + properties + keySource = EXP2.SessionEpoch & STIMANAL.ResponseVsCorr; + end + methods(Access=protected) + function makeTuples(self, key) + clf + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') & key; + rel_data_corr=STIMANAL.ResponseVsCorr & rel_target; + rel_data_stim=STIM.ROIResponseZscore & rel_target & 'num_svd_components_removed=1'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + num_svd_components_removed_vector = [1, 2, 10]; + + colormap=viridis(numel(num_svd_components_removed_vector)); + if numel(group_list)<1 + return + end + + threshold_for_event_vector = [0]; + for i_g = 1:1:numel(group_list) + + k.photostim_group_num=group_list(i_g); + % DataStim{i_g} = fetchn(rel_data_stim & key & k,'response_mean_even', 'ORDER BY roi_number'); + % DataStim_pval{i_g} = fetchn(rel_data_stim & key & k,'response_p_value1_odd', 'ORDER BY roi_number')<=1; + DataStim{i_g} = fetchn(rel_data_stim & key & k,'response_mean', 'ORDER BY roi_number'); + DataStim_pval{i_g} = fetchn(rel_data_stim & key & k,'response_p_value1', 'ORDER BY roi_number')<=1; + end + DataStim = cell2mat(DataStim)'; + DataStim_pval = cell2mat(DataStim_pval)'; + + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + num_comp = num_svd_components_removed_vector(i_c); + + + key.threshold_for_event = threshold; + key.num_svd_components_removed_corr = num_comp; + + DataCorr = cell2mat(fetchn(rel_data_corr & key,'rois_corr', 'ORDER BY photostim_group_num')); + + % influence as a funciton of correlation + x=DataCorr(DataStim_pval); + y=DataStim(DataStim_pval); + corr_histogram_bins=prctile(x,[0:5:100]);%[-0.5:0.05:0.5]; + x_bin=[]; + y_bin=[]; + for i_b = 1:1:numel(corr_histogram_bins)-1 + idx_cor_bin = x>=corr_histogram_bins(i_b) & x=corr_histogram_bins(i_b) & x EXP2.SessionEpoch +%} + + +classdef PlotRawDataCoupled < dj.Imported + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect) & (STIMANAL.SessionEpochsIncluded & 'stimpower_percent=15' & 'flag_include=1' & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>30')); + end + methods(Access=protected) + function makeTuples(self, key) + flag_coupled_or_direct=1; % 1 direct, 0 coupled + flag_coupled_or_direct_label = {'direct','coupled'}; + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Photostim\photostim_traces_DJ\' flag_coupled_or_direct_label{flag_coupled_or_direct} '\']; + + + close all + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + + + + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session' num2str(key.session) '_' session_date '_' 'session_epoch' num2str(key.session_epoch_number) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + + frame_rate=fetch1(IMG.FOVEpoch&key,'imaging_frame_rate'); + roi_list=fetchn((IMG.ROI-IMG.ROIBad) & key,'roi_number','ORDER BY roi_number'); + + neuron_or_control_flag = [1,0]; + neuron_or_control_label={'Neuron','Control'}; + for i_n = 1:1:numel(neuron_or_control_flag) + kk.neurons_or_control = neuron_or_control_flag(i_n); + rel_direct= IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & kk & key); + + + + F_original=cell2mat([fetchn(IMG.ROIdeltaF & key, 'dff_trace')]); + time = [1:1:size(F_original,2)]/frame_rate; + + time_bin=1; + F_binned=[]; + if time_bin>0 + bin_size_in_frame=ceil(time_bin*frame_rate); + bins_vector=1:bin_size_in_frame:size(F_original,2); + bins_vector=bins_vector(2:1:end); + for i_neuron= 1:1:numel(bins_vector) + ix1=(bins_vector(i_neuron)-bin_size_in_frame):1:(bins_vector(i_neuron)-1); + F_binned(:,i_neuron)=mean(F_original(:,ix1),2); + end + time = time(1:bin_size_in_frame:end); + else + F_binned=F_original; + end + + + F_binned = gpuArray((F_binned)); +% F_binned = F_binned-mean(F_binned,2); + F_binned=zscore(F_binned,[],2); + [U,S,V]=svd(F_binned); % S time X neurons; % U time X time; V neurons x neurons + num_svd_components_removed_vector=[0,1,10]; + + F=[]; + + keykey.num_svd_components_removed=1; + if flag_coupled_or_direct==1 + rel_data = STIM.ROIResponseDirect & keykey & rel_direct; + elseif flag_coupled_or_direct==0 + rel_coupled = STIM.ROIResponseZscore & keykey & rel_direct & 'response_p_value1_odd<=1' & 'response_distance_lateral_um>20'; + end + + RESPONSE=fetch(rel_data & keykey); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + keykey.num_svd_components_removed= num_svd_components_removed_vector(i_c); + + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + Ftemp = U(:,(1+num_comp):end)*S((1+num_comp):end, (1+num_comp):end)*V(:,(1+num_comp):end)'; + else + Ftemp=F_binned; + end + % F = zscore(F,[],2); % note that we zscore after perofrming SVD + F{i_c}=gather(Ftemp); + + end + + for i_neuron=1:1:(numel(RESPONSE)) + clf + photostim_start_frame=fetch1(IMG.PhotostimGroup & RESPONSE(i_neuron), 'photostim_start_frame'); + photostim_start_frame=ceil(photostim_start_frame./bin_size_in_frame); + + photostim_start_frame=photostim_start_frame(1:end-2); + + + for i_c = 1:1:numel(num_svd_components_removed_vector) + key_current_coupled = RESPONSE(i_neuron); + key_current_coupled.num_svd_components_removed= num_svd_components_removed_vector(i_c); + CURRENT_COUPLED= fetch(STIM.ROIResponseZscore & key_current_coupled,'*'); + + subplot(2,3,i_c) + idx_roi = roi_list==RESPONSE(i_neuron).roi_number; + f=F{i_c}(idx_roi,:); + hold on + time=time(1:1:numel(f)); + plot(f,'-b') +% plot(photostim_start_frame,f(photostim_start_frame),'or') + plot(photostim_start_frame+1,f(photostim_start_frame+1),'or') + % title(sprintf('mean response to stimulation %.2f',mean(f(photostim_start_frame+1)))); + + if i_c==1 + title(sprintf('Lateral dist. %.1f\nAxial dist. %.1f \nSVD removed %d',CURRENT_COUPLED.response_distance_lateral_um,CURRENT_COUPLED.response_distance_axial_um, num_svd_components_removed_vector(i_c))); + elseif i_c==2 + title(sprintf(' Target: %s Group %d ROI %d\n anm%d session%d epoch%d %s \nSVD removed %d',neuron_or_control_label{i_n},RESPONSE(i_neuron).photostim_group_num,RESPONSE(i_neuron).roi_number, key.subject_id,key.session, key.session_epoch_number,session_date, num_svd_components_removed_vector(i_c))); + elseif i_c>2 + title(sprintf('\n\nSVD removed %d',num_svd_components_removed_vector(i_c))); + end + + xlabel('Frames'); + ylabel('DFF'); + + time_interval = [-30: (1/frame_rate): 30]; + time_interval = time_interval(1:bin_size_in_frame:end); + Ftrials=[]; + counter=0; + num_frames_pre = sum(time_interval<0); + num_frames_post = sum(time_interval>0); + idx_include=[]; + for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + if (s_fr-num_frames_pre)>0 && (s_fr+num_frames_post)<=length(f) % if the time window is within the full trace + counter = counter+1; + Ftrials(counter,:)=f(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); + end + end + idx_include=1:1:counter; + idx_include_odd = idx_include(1:2:end); + idx_include_even= idx_include(2:2:end); + + subplot(2,3,i_c+3) + hold on + shadedErrorBar(time_interval,mean(Ftrials(idx_include_odd,:),1),std(Ftrials(idx_include_odd,:),1)./sqrt(numel(idx_include_odd)),'lineprops',{'-','Color',[0 0 0]}) + shadedErrorBar(time_interval,mean(Ftrials(idx_include_even,:),1),std(Ftrials(idx_include_even,:),1)./sqrt(numel(idx_include_even)),'lineprops',{'-','Color',[1 0 0]}) + title(sprintf('odd pval %.5f \neven pval %.5f',CURRENT_COUPLED.response_p_value2_odd , CURRENT_COUPLED.response_p_value2_even)); + xlim([-30,30]) + xlabel('Time (s)'); + ylabel('DFF'); + + end + + % + filename=[neuron_or_control_label{i_n} '_photostim_group_' num2str(RESPONSE(i_neuron).photostim_group_num) 'roi_' num2str(RESPONSE(i_neuron).roi_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + + + end + end + + + + + insert(self,key); + + end + end +end diff --git a/DataJoint/+STIMANAL/ROIGraphAll.m b/DataJoint/+STIMANAL/ROIGraphAll.m new file mode 100644 index 0000000..2484b2c --- /dev/null +++ b/DataJoint/+STIMANAL/ROIGraphAll.m @@ -0,0 +1,287 @@ +%{ +# Taking most responsive neurons +-> EXP2.SessionEpoch +--- +mat_response_mean : longblob # (pixels) +mat_distance : longblob # (pixels) +mat_response_pval : longblob # (pixels) +roi_num_list : blob # (pixels) +photostim_group_num_list : blob # (pixels) + + +%} + + +classdef ROIGraphAll < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.FOV & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base '\photostim\Graph_analysis\Graphs_on_map\']; + + p_val_threshold =0.05; + minimal_distance =25; %in microns + + rel_roi = IMG.ROI - IMG.ROIBad; + + try + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + catch + pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + end + + roi_num= fetchn( rel_roi & key ,'roi_number','ORDER BY roi_number'); + + group_num= fetchn( (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1') & key ,'photostim_group_num','ORDER BY photostim_group_num'); + group_roi_num= fetchn( STIM.ROIResponseDirect5 & key & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1'),'roi_number','ORDER BY photostim_group_num'); + + + [group_roi_num, idxx,idxy ] = unique(group_roi_num,'stable'); + group_num = group_num(idxx); + + roi_centroid_x= fetchn( rel_roi & key,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + roi_centroid_y= fetchn( rel_roi & key,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + roi_centroid_x_direct = fetchn( rel_roi & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1') & key,'roi_centroid_x','ORDER BY roi_number')*pix2dist; + roi_centroid_y_direct = fetchn( rel_roi & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1') & key,'roi_centroid_y','ORDER BY roi_number')*pix2dist; + + panel_width=0.8; + panel_height=0.8; + horizontal_distance=0.7; + vertical_distance=0.7; + + position_x(1)=0.1; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.15; + position_y(end+1)=position_y(end) - vertical_distance; + + + + k1=key; + tic + F=(fetch( STIM.ROIInfluence5 & key & 'response_mean>0' & sprintf('response_distance_lateral_um>=%.2f', minimal_distance) & sprintf('response_p_value1<=%.5f', p_val_threshold),'*')); + if isempty(F) + return + end + F=struct2table(F); + toc + % for i_g = 1:1:numel(group_num) + % % k1.photostim_group_num = group_num(i_g); + % for i_r = 1:1:numel(roi_num) + % % k1.roi_number = roi_num(i_r); + % F_selected=F(F.photostim_group_num ==group_num(i_g) & F.roi_number == roi_num(i_r),:); + % + % key.mat_response_mean(i_g,i_r)=F_selected.response_mean; + % key.mat_distance(i_g,i_r)=F_selected.response_distance_pixels; + % key.mat_response_pval(i_g,i_r)=F_selected.response_p_value; + % % key.mat_response_mean(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_mean'); + % % key.mat_distance(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_distance_pixels'); + % % key.mat_response_pval(i_g,i_r)= fetch1(STIM.ROIResponse50 & k1,'response_p_value'); + % + % end + % + % end + % key.roi_num_list = group_num; + % key.photostim_group_num_list = roi_num; + % insert(self,key); + + close; + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + + s=fetch(EXP2.Session & key,'*'); + + % Creating a Graph + % M=key.mat_response_mean; + + % for i_r = 1:1:numel(roi_num) + % [~,idx_roi]=find(group_roi_num==roi_num(i_r)); + % if isempty(idx_roi) + % M(i_r,1:numel(roi_num))=0; + % Mpval(i_r,1:numel(roi_num))=1; + % Mdistance(i_r,1:numel(roi_num))=0; + % + % else + % M(i_r,1:numel(roi_num))=key.mat_response_mean(idx_roi,:); + % Mpval (i_r,1:numel(roi_num))= key.mat_response_pval(idx_roi,:); + % Mdistance (i_r,1:numel(roi_num))= key.mat_distance(idx_roi,:); + % + % end + % end + M=zeros(numel(roi_num)); + Mdistance=zeros(numel(roi_num)); + Mpval=zeros(numel(roi_num))+1; + idx_directly_stimulated = []; + idx_indirectly_stimulated = []; + + for i_r = 1:1:numel(roi_num) + [idx_roi]=find(group_roi_num==roi_num(i_r)); + if ~ isempty(idx_roi) + %i_r + idx_directly_stimulated = [idx_directly_stimulated,i_r]; + F_selected=F(F.photostim_group_num ==group_num(idx_roi),:); + if isempty(F_selected) + M(i_r,1:numel(roi_num))=0; + Mpval(i_r,1:numel(roi_num))=1; + Mdistance(i_r,1:numel(roi_num))=0; + else + + idx_rois_selected = find(ismember(roi_num, F_selected.roi_number')); + + M(i_r,idx_rois_selected)=F_selected.response_mean'; + Mpval (i_r,idx_rois_selected)= F_selected.response_p_value1'; + Mdistance (i_r,idx_rois_selected) = F_selected.response_distance_lateral_um'; + + end + else + idx_indirectly_stimulated = [idx_indirectly_stimulated,i_r]; + end + end + + + diagonal_values = M(1:size(M,1)+1:end); + + M = M - diag(diag(M)); %setting diagonal values to 0 + % M(Mpval>p_val_threshold)=0; + % M(Mdistance<=minimal_distance)=0; + + G = digraph(M); + LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + + axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + + % label the indirectly stimulate neurons + hold on + plot(roi_centroid_x(idx_indirectly_stimulated),roi_centroid_y(idx_indirectly_stimulated),'.','Color',[0.2 1 0.2],'MarkerSize',10); + + + mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); + x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; + y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + % imagesc(mean_img_enhanced) + % colormap(gray) + % hold on; + % axis xy + % set(gca,'YDir','reverse') + + + Dout = outdegree(G); + Din = indegree(G); + + % if isempty(LWidths) + p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % else + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % end + p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = Din+5; + p.NodeColor = [1 0 1]; + % p.NodeCData = diagonal_values; + + p.MarkerSize = (Dout+0.01)/5; + + colormap bluewhitered + h = colorbar; + ylabel(h, 'Connectrion strength (\Delta activity z-score)','FontSize',32); + h.Limits = [0,ceil(h.Limits(2))]; + h.Ticks = h.Limits; + % highlight(p,[1 3]) + % h = plot(G,'Layout','force'); + % layout(h,'force','UseGravity',true) + + % idx_cells_with_outputs=(D>1); + idx_direct = group_roi_num; + % plot( D(idx_direct),Din(idx_direct),'.') + in_out_degree_correlation = corr(Dout(idx_direct),Din(idx_direct)); + + title(sprintf('Session %d epoch %d \n anm %d %s \n In-Out degree corr = %.2f',s.session, key.session_epoch_number,s.subject_id, s.session_date,in_out_degree_correlation )); + % axis off; + % box off; + axis xy +% set(gca,'YDir','reverse') + axis equal + xlabel('Anterior - Posterior (\mum)','FontSize',32); + ylabel('Lateral - Medial (\mum)','FontSize',32); + set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 400, 600],'XtickLabel',[0, 400, 600], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0, 170, 570],'YtickLabel',[0, 0, 400],'TickLength',[0.01,0],'TickDir','out','FontSize',32) + + + + % axes('position',[position_x(1), position_y(2), panel_width, panel_height]); + % D = indegree(G); + % % if isempty(LWidths) + % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{}); + % % else + % % p = plot(G,'XData',roi_centroid_x,'YData',roi_centroid_y,'NodeLabel',{},'LineWidth',LWidths); + % % end + % p.EdgeCData = table2array(G.Edges(:,2)); + % p.NodeCData = diagonal_values; + % p.MarkerSize = D+1; + % + % colormap bluewhitered + % colorbar + % + % % highlight(p,[1 3]) + % % h = plot(G,'Layout','force'); + % % layout(h,'force','UseGravity',true) + % + % title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,s.subject_id, s.session_date )); + % axis off; + % box off; + % axis xy; + + x_min = min(roi_centroid_x_direct)-25; + if x_minmax(roi_centroid_x) + x_max = max(roi_centroid_x); + end + + y_min = min(roi_centroid_y_direct)-25; + if y_minmax(roi_centroid_y) + y_max = max(roi_centroid_y); + end + + xlim ([x_min, x_max]); + ylim ([y_min, y_max]); + +% hold on +% plot(roi_centroid_x_direct,roi_centroid_y_direct,'.b') + + %Saving the graph + + dir_current_figure = [dir_save_figure 'anm' num2str(s.subject_id) '\']; + if isempty(dir(dir_current_figure)) + mkdir (dir_current_figure) + end + figure_name_out = [dir_current_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; + eval(['print ', figure_name_out, ' -dtiff -r500']); + eval(['print ', figure_name_out, ' -dpdf -r500']); + + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/ROIInfluenceVariability.m b/DataJoint/+STIMANAL/ROIInfluenceVariability.m new file mode 100644 index 0000000..eb86425 --- /dev/null +++ b/DataJoint/+STIMANAL/ROIInfluenceVariability.m @@ -0,0 +1,414 @@ +%{ +# ROI responses to each photostim group. +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_mean_trials : blob # response amlitude (mean over response window) at each trial +response_peak_trials : blob # response amlitude (peak at response window) at each trial + +response_trace_trials : longblob # response trace at each trial + +response_trace_mean_all : blob # mean postsynpatic response trace, for all trials +response_trace_stem_all : blob # + +response_trace_mean_presynaptic_weak : blob # mean postsynpatic response trace when the presenypatic cell had weak response to photostimulation (20<= response percentile) +response_trace_stem_presynaptic_weak : blob # + +response_trace_mean_presynaptic_strong : blob # mean postsynpatic response trace when the presenypatic cell had strong response to photostimulation (response percentile>=80) +response_trace_stem_presynaptic_strong : blob # + +pre_post_synaptic_response_correlation=null : float # response peak correlation between pre and post synanptic response, for all trials + +time_vector : blob + +%} + + +classdef ROIInfluenceVariability < dj.Computed + properties + % keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & IMG.PlaneCoordinates)& (STIMANAL.SessionEpochsIncluded& 'stimpower_percent=15' & 'flag_include=1') + % keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI; + keySource = EXP2.SessionEpoch & STIMANAL.ROIResponseDirectVariability; + + end + methods(Access=protected) + function makeTuples(self, key) + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Photostim\photostim_traces\coupled_analysis_for_ilan\']; + + session_date = fetch1(EXP2.Session & key,'session_date'); + dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\epoch' num2str(key.session_epoch_number) '\']; + + + min_distance_to_closest_target=30; % in microns + + close all; + frame_window_short=[40,40]/4; + frame_window_long=[56,110]/2; + flag_baseline_trial_or_avg=0; %1 baseline per trial, 0 - baseline averaged across trials + + + zoom =fetch1(IMG.FOVEpoch & key,'zoom'); + kkk.scanimage_zoom = zoom; + pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + min_distance_to_closest_target_pixels=min_distance_to_closest_target/pix2dist; + + rel=STIM.ROIInfluence5 & 'response_p_value1<=0.001' & sprintf('response_distance_lateral_um >%.2f', min_distance_to_closest_target_pixels) & 'response_mean>0'; + + if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; + elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; + elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; + end + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + smooth_bins=2; + + + + + + + + %Graphics + %--------------------------------- + figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + set(gcf,'color',[1 1 1]); + + panel_width=0.3; + panel_height=0.3; + horizontal_distance=0.4; + vertical_distance=0.35; + + position_x(1)=0.13; + position_x(end+1)=position_x(end) + horizontal_distance; + + position_y(1)=0.5; + position_y(end+1)=position_y(end) - vertical_distance; + + + G=fetch(IMG.PhotostimGroupROI & (STIM.ROIResponseDirect & 'response_p_value1<=0.0001') & key ,'*','ORDER BY photostim_group_num'); + + group_list=[G.photostim_group_num]; + + + + + time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + + for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; + % signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); + % response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); + % response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); + % response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels + % response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; + % flag_distance_flag=5 + % if flag_distance_flag==0 % lateral distance + % distance=[DATA.response_distance_pixels]; + % distance=pix2dist*distance; + % elseif flag_distance_flag==1 % axial distance + % distance=[DATA.response_distance_axial_um]; + % elseif flag_distance_flag==2 % 3D distance + % distance=[DATA.response_distance_3d_um]; + % end + + + response_trials_direct = fetchn(STIMANAL.ROIResponseDirectVariability & key,'response_peak_trials'); + response_trials_direct=response_trials_direct{1}; + % idx_weak = response_trials_direct<=0.25; + % idx_strong = response_trials_direct>=0.75; + + weak_response_threshold = prctile(response_trials_direct,20); + strong_response_threshold = prctile(response_trials_direct,80); + + idx_weak = response_trials_direct<=weak_response_threshold; + idx_strong = response_trials_direct>=strong_response_threshold; + % idx_no_response = response_trials_direct<=0.25; + + + response_trace_trials_direct = fetch1(STIMANAL.ROIResponseDirectVariability & key,'response_trace_trials'); + time_vector_direct = fetch1(STIMANAL.ROIResponseDirectVariability & key,'time_vector'); + + + + + for i_r = 1:1:numel(signif_roi) + kk_insert = fetch( STIM.ROIResponseDirect & key); + kk_insert.roi_number =DATA(i_r).roi_number; + kk_insert.plane_num = DATA(i_r).plane_num; + + + %% response direct + %__________________________________________________________ + + ax1=axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + + %% all + y=response_trace_trials_direct; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time_vector_direct,y_smooth,'Color',[ 0 0 0],'LineWidth',3); + shadedErrorBar(time_vector_direct,y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + + + %% below 25 response percentile + y=response_trace_trials_direct(idx_weak,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time_vector_direct,y_smooth,'Color',[ 0 0 1],'LineWidth',3); + % shadedErrorBar(time_vector_direct,y_smooth,ystem_smooth,'lineprops',{'-','Color',[0.5 0.5 1]}) + + + % %% no response + % if sum(idx_no_response)>=2 + % y=response_trace_trials_direct(idx_no_response,:); + % y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % ystem=std(y)./sqrt(size(y,1)); + % ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % + % max_epoch=max(y_smooth); + % min_epoch=min(y_smooth); + % hold on; + % plot(time_vector_direct,y_smooth,'Color',[ 0 0 1]); + % % shadedErrorBar(time_vector_direct,y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + % + % end + + %% above 75 response percentile + y=response_trace_trials_direct(idx_strong,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth+ystem); + min_epoch=min(y_smooth-ystem); + hold on; + plot(time_vector_direct,y_smooth,'Color',[ 1 0 0],'LineWidth',3); + % shadedErrorBar(time_vector_direct,y_smooth,ystem_smooth,'lineprops',{'-','Color',[1 0 0]}) + + + + ylim ([min([-0.2,min_epoch]),max([1 ,max_epoch])]); + xlabel(' Time from photostimulation (s)'); + ylabel('Response (\DeltaF/F)') + % title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + + + % title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + set(gca,'FontSize',24); + % title(sprintf('anm %d, session %d \n Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n \n \n',k2.subject_id,k2.session, G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + set(gca,'Ytick',[0, 1]); + + xlim ([-5,10]); + + % title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + + + title([sprintf('''Pre-synaptic''')]); + + + + + + + + %% + + + %% response coupled + %__________________________________________________________ + k2=k1; + k2.roi_number = signif_roi(i_r); + + + + photostim_start_frame = fetch1(IMG.PhotostimGroup & STIM.ROIResponseDirect & k2,'photostim_start_frame'); + + f_trace_direct = fetch1(IMG.ROITrace & k2,'f_trace'); + + global_baseline=mean( f_trace_direct); + + timewind_response = [ 0 2]; + timewind_baseline1 = [ -5 0]; + timewind_baseline2 = [-5 0] ; + timewind_baseline3 = [ -5 0]; + [StimStat,StimTrace] = fn_compute_photostim_response_variability (f_trace_direct , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + response_trials_coupled = StimStat.response_peak_trials; + + + hold on; + + + + + %% POST_SYNAPTIC TRACE + + ax1=axes('position',[position_x(2), position_y(1), panel_width, panel_height]); + %% all + y=StimTrace.response_trace_trials; + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 0 0 0],'LineWidth',3); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + + kk_insert.response_trace_mean_all = mean(y); + kk_insert.response_trace_stem_all = ystem; + + + + + %% below 25 response percentile + y=StimTrace.response_trace_trials(idx_weak,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch=max(y_smooth); + min_epoch=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 0 0 1],'LineWidth',3); + % shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0.5 0.5 1]}) + + kk_insert.response_trace_mean_presynaptic_weak = mean(y); + kk_insert.response_trace_stem_presynaptic_weak = ystem; + + + + % %% no response + % if sum(idx_no_response)>=2 + % y=StimTrace.response_trace_trials(idx_no_response,:); + % y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % ystem=std(y)./sqrt(size(y,1)); + % ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % + % max_epoch=max(y_smooth); + % min_epoch=min(y_smooth); + % hold on; + % % plot(time(1:end-1),y_smooth,'Color',[ 1 0 0]); + % shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + % end + + + %% above 75 response percentile + y=StimTrace.response_trace_trials(idx_strong,:); + y_smooth= movmean(mean(y),[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=std(y)./sqrt(size(y,1)); + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch=max(y_smooth+ystem); + min_epoch=min(y_smooth-ystem); + hold on; + plot(time(1:end-1),y_smooth,'Color',[ 1 0 0],'LineWidth',3); + % shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[1 0 0]}) + ylim ([min([-0.2,min_epoch]),max([1 ,max_epoch])]); + % xlabel('Time from photostimulation(s)'); + % ylabel('Response(\Delta F/F)') + % title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + title([sprintf('''Post-synaptic''')]); + set(gca,'FontSize',24); + set(gca,'Ytick',[0, 1]); + xlim ([-5,10]); + text(0,1.5,sprintf('anm %d, session %d \n Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n ',k2.subject_id,k2.session, G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + kk_insert.response_trace_mean_presynaptic_strong = mean(y); + kk_insert.response_trace_stem_presynaptic_strong = ystem; + + + %% histogram + ax1=axes('position',[position_x(1), position_y(2), panel_width, panel_height/2]); + hold on + hist_bins=linspace(-max(response_trials_direct),max(response_trials_direct),15); + hhh=histogram(response_trials_direct,hist_bins,'FaceColor',[0.5 0.5 0.5]); + % xlabel([sprintf('''Pre-synaptic'' response \n peak ') ('(\Delta F/F)')]); + xlabel([sprintf('Response peak ') ('(\Delta F/F)')]); + title([sprintf('''Pre-synaptic''')]); + + ylabel('Counts (trials)'); + set(gca,'FontSize',24); + plot([weak_response_threshold weak_response_threshold], [0,max(hhh.Values)*1.2],'Color',[0 0 1],'LineWidth',3) + plot([strong_response_threshold strong_response_threshold], [0,max(hhh.Values)*1.2],'Color',[1 0 0],'LineWidth',3) + + try + r=corr(response_trials_direct,response_trials_coupled); + catch + r=NaN; + end + % ax2=axes('position',[position_x(2), position_y(2), panel_width, panel_height/2]); + % hist_bins=linspace(-max(response_trials_coupled),max(response_trials_coupled),15); + % histogram(response_trials_coupled,hist_bins,'FaceColor',[0.5 0.5 0.5]); + % % xlabel([sprintf('''Post-synaptic'' response \n peak ') ('(\Delta F/F)')]); + % % ylabel('Counts (trials)'); + % set(gca,'FontSize',24); + % title(sprintf(' \n correlation r = %.2f',r),'FontSize',16) + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + + + clf + + + + kk_insert.response_trace_trials = StimTrace.response_trace_trials; + + kk_insert.response_mean_trials = StimStat.response_trials; + kk_insert.response_peak_trials = StimStat.response_peak_trials; + + kk_insert.pre_post_synaptic_response_correlation = r; + + kk_insert.time_vector = time(1:end-1); + insert(self, kk_insert); + + + end + end + + + end + end +end diff --git a/DataJoint/+STIMANAL/ROIResponseDirectVariability.m b/DataJoint/+STIMANAL/ROIResponseDirectVariability.m new file mode 100644 index 0000000..476654c --- /dev/null +++ b/DataJoint/+STIMANAL/ROIResponseDirectVariability.m @@ -0,0 +1,90 @@ +%{ +# Take the closest neuron within a small radius around the photostimulation site and assess its response, sites that are too far from cells won't appear here +-> IMG.PhotostimGroup +-> IMG.ROI +--- +response_mean_trials : blob # response amlitude (mean over response window) at each trial +response_peak_trials : blob # response amlitude (peak at response window) at each trial +response_trace_trials : longblob # response trace at each trial +time_vector : blob # response amlitude at each trial +%} + + +classdef ROIResponseDirectVariability < dj.Imported + properties + % keySource = IMG.PhotostimGroup; + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & (IMG.FOV & STIM.ROIInfluence5) & IMG.Volumetric; + end + methods(Access=protected) + function makeTuples(self, key) + + flag_baseline_trial_or_avg=2; %0 - baseline averaged across trials, 1 baseline per trial, 2 global baseline - mean of roi across the entire session epoch + + + % frame_window_short=[40,40]/4; + % frame_window_long=[200,100]/2; + % frame_window_short=[40,40]; + % frame_window_long=[100,200]; + smooth_bins=1; %2 + + + + try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); + catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); + end + + % timewind_stim=[0.25,1.5]; + % timewind_baseline=[0.25,1.5]-10; + % timewind_baseline = [-15,-5]; + % time = [-20: (1/frame_rate): 10]; + + % timewind_baseline = [-5,0]; + time = [-5: (1/frame_rate): 11]; + + + + + G=fetch(IMG.PhotostimGroupROI & STIM.ROIResponseDirect & key,'*'); + + + + roi_list_direct=[G.roi_number]; + + + + for i_g=1:1:numel(roi_list_direct) + key.photostim_group_num = G(i_g).photostim_group_num; + + k1=key; + k1.roi_number = roi_list_direct(i_g); + + + + + f_trace = fetch1(IMG.ROITrace & k1,'f_trace'); + photostim_start_frame = fetch1(IMG.PhotostimGroup & STIM.ROIResponseDirect & k1,'photostim_start_frame'); + % global_baseline=mean(movmin(f_trace_direct(i_epoch,:),1009)); + global_baseline=mean( f_trace); + + % timewind_response = [ 0 2]; + timewind_response = [ 0 2]; + timewind_baseline1 = [ -5 0]; + timewind_baseline2 = [-5 0] ; + timewind_baseline3 = [ -5 0]; + [StimStat,StimTrace] = fn_compute_photostim_response_variability (f_trace , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + + kk = fetch( STIM.ROIResponseDirect & key); + kk.response_mean_trials = StimStat.response_trials; + kk.response_peak_trials = StimStat.response_peak_trials; + kk.response_trace_trials = StimTrace.response_trace_trials; + kk.time_vector = time; + insert(self, kk); % + + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/ResponseDirectVsControl.m b/DataJoint/+STIMANAL/ResponseDirectVsControl.m new file mode 100644 index 0000000..aafdf9c --- /dev/null +++ b/DataJoint/+STIMANAL/ResponseDirectVsControl.m @@ -0,0 +1,163 @@ +%{ +# Responses of couple neurons to photostimulation, as a function of distance +-> EXP2.SessionEpoch +neurons_or_control : boolean # 1 - neurons, 0 control +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +--- +is_volumetric : boolean # 1 volumetric, 0 single plane +num_targets : int # number of directly stimulated neurons (with significant response) or number of control targets (with non-significant responses) +num_pairs : int # total number of cell-pairs included +distance_lateral_bins : blob # lateral bins (um), edges +distance_axial_bins=null : blob # axial positions (um), planes depth + +response_lateral : longblob # sum of response for all cell-pairs in each (lateral) bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_excitation : longblob # sum of response for all cell-pairs with positive response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_inhibition : longblob # sum of response for all cell-pairs with negative response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_absolute : longblob # sum of absolute value of tre response for all cell-pairs in each bin, divided by the total number of all pairs (positive and negative) in that bin + +response_axial : longblob # same for axial bins +response_axial_excitation : longblob # +response_axial_inhibition : longblob # +response_axial_absolute : longblob # + +response_2d=null : longblob # ame for lateral-axial bin +response_2d_excitation=null : longblob # +response_2d_inhibition=null : longblob # +response_2d_absolute=null : longblob # + +counts_2d=null : longblob # +counts_2d_excitation=null : longblob # +counts_2d_inhibition =null : longblob # +%} + + +classdef ResponseDirectVsControl < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1') & IMG.FOVEpoch & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + + clf + pval_theshold_neurons=0.05; + pval_theshold_control=0.05; + z_score_threshold_neurons =0; + z_score_threshold_controls =100; + +% rel=STIM.ROIResponseDirect3 & k & (EXP2.SessionEpoch & STIM.ROIInfluenceLocal); + rel=STIM.ROIResponseDirect5 ; + + + DATA=fetch(rel,'*'); +% idx_neurons = [DATA.response_p_value2_odd]<=pval_theshold_neurons & [DATA.response_mean_odd]>=z_score_threshold_neurons & [DATA.num_of_target_trials_used]>20 & [DATA.num_of_baseline_trials_used]>1000; +% idx_control = [DATA.response_p_value2_odd]>pval_theshold_control & [DATA.response_mean_odd]20 & [DATA.num_of_baseline_trials_used]>1000; + idx_neurons = [DATA.response_p_value1_odd]<=pval_theshold_neurons & [DATA.response_mean_odd]>z_score_threshold_neurons ; + idx_control = [DATA.response_p_value1_odd]>pval_theshold_control & [DATA.response_mean_odd] EXP2.SessionEpoch +------------- +flag_include : boolean # +stimpower_percent : float # +%} + +classdef SessionEpochsIncluded < dj.Lookup + properties + contents = { + 447991 1 'spont_photo' 1 1 10 + 447991 1 'spont_photo' 2 1 15 + + 447991 2 'spont_photo' 1 1 10 + 447991 2 'spont_photo' 2 1 15 + + 447991 3 'spont_photo' 2 1 15 + 447991 3 'spont_photo' 4 1 15 + + 447991 4 'spont_photo' 2 1 15 + 447991 4 'spont_photo' 5 1 15 + + 447991 5 'spont_photo' 2 1 15 + 447991 5 'spont_photo' 5 1 15 + + 447991 6 'spont_photo' 2 1 15 + 447991 6 'spont_photo' 5 1 15 + + 447991 7 'spont_photo' 2 1 15 + 447991 7 'spont_photo' 5 1 15 + + 447991 8 'spont_photo' 2 1 15 + 447991 8 'spont_photo' 5 1 15 + + 447991 9 'spont_photo' 2 1 15 + 447991 9 'spont_photo' 5 1 15 + + 447991 10 'spont_photo' 2 1 15 + 447991 10 'spont_photo' 5 1 15 + + 447991 11 'spont_photo' 2 1 15 + 447991 11 'spont_photo' 5 1 15 + + + % + 447990 1 'spont_photo' 2 1 5 + 447990 1 'spont_photo' 3 1 10 + 447990 1 'spont_photo' 4 1 15 + + 447990 2 'spont_photo' 2 0 15 + 447990 2 'spont_photo' 5 1 15 + + 447990 3 'spont_photo' 2 1 15 + 447990 3 'spont_photo' 5 1 15 + + 447990 4 'spont_photo' 2 1 15 + 447990 4 'spont_photo' 5 1 15 + + 447990 5 'spont_photo' 2 1 15 + 447990 5 'spont_photo' 5 1 15 + + 447990 6 'spont_photo' 2 1 15 + 447990 6 'spont_photo' 5 1 15 + + 447990 7 'spont_photo' 2 1 15 + 447990 7 'spont_photo' 5 1 15 + + 447990 8 'spont_photo' 2 1 15 + 447990 8 'spont_photo' 5 1 15 + + + % + 462458 1 'spont_photo' 1 1 5 % 4 per volume + 462458 1 'spont_photo' 2 1 10 % 4 per volume + 462458 1 'spont_photo' 3 1 15 % 4 per volume + 462458 1 'spont_photo' 4 0 15 % 4 per volume + + 462458 2 'spont_photo' 1 1 10 % 4 per volume + 462458 2 'spont_photo' 2 1 15 % 4 per volume + 462458 2 'behav_photo' 3 1 10 % 4 per volume + 462458 2 'behav_photo' 4 1 15 % 4 per volume + + 462458 3 'spont_photo' 1 1 10 % twice per volume + 462458 3 'spont_photo' 2 1 15 % twice per volume + + 462458 4 'spont_photo' 1 1 15 % once per volume + 462458 4 'spont_photo' 2 1 15 % once per volume + + 462458 5 'spont_photo' 2 1 15 % once per volume + 462458 5 'spont_photo' 5 1 15 % once per volume + + 462458 6 'spont_photo' 1 1 15 % once per volume + + 462458 7 'spont_photo' 2 1 15 % once per volume + 462458 7 'spont_photo' 5 1 15 % once per volume + + 462458 8 'spont_photo' 1 1 15 % once per volume + + 462458 9 'spont_photo' 2 1 15 % once per volume + + 462458 10 'spont_photo' 2 1 15 % once per volume + + 462458 11 'spont_photo' 2 1 15 % once per volume + + 462458 12 'spont_photo' 2 1 15 % once per volume + + + % + 462455 1 'spont_photo' 1 1 15 % once per volume + + 462455 2 'spont_photo' 2 1 15 % once per volume + 462455 2 'spont_photo' 5 1 15 % once per volume + + 462455 3 'spont_photo' 2 1 15 % once per volume + + + + % + 463195 1 'spont_photo' 1 1 5 % once per volume + 463195 1 'spont_photo' 2 1 15 % once per volume + 463195 1 'spont_photo' 3 1 15 % 2 per volume + + 463195 2 'spont_photo' 2 1 15 % once per volume + 463195 2 'spont_photo' 4 1 15 % once per volume + 463195 2 'spont_photo' 6 1 15 % 2 per volume + + 463195 3 'spont_photo' 2 1 15 % once per volume + 463195 3 'spont_photo' 5 1 15 % once per volume + 463195 3 'spont_photo' 6 0 15 % multiplexing + + 463195 4 'spont_photo' 1 1 15 % once per volume + 463195 4 'spont_photo' 2 1 15 % once per volume + + + % + 463192 1 'spont_photo' 2 1 15 % once per volume + + 463192 2 'spont_photo' 2 1 15 % once per volume + + 463192 3 'spont_photo' 2 1 15 % once per volume + + + % +% 445980 +% 445873 + } + + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/SessionExcluded.m b/DataJoint/+STIMANAL/SessionExcluded.m new file mode 100644 index 0000000..89ffd37 --- /dev/null +++ b/DataJoint/+STIMANAL/SessionExcluded.m @@ -0,0 +1,12 @@ +%{ +# If this sessioon was recorded on mesoscope +-> EXP2.Session +%} + +classdef SessionExcluded < dj.Lookup + properties + contents = { + 447990 9 %this session is combined processing of multiple days + } + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/Target2AllCorrAngle.m b/DataJoint/+STIMANAL/Target2AllCorrAngle.m new file mode 100644 index 0000000..fe7e4bf --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrAngle.m @@ -0,0 +1,52 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrAngle < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & STIM.ROIResponseDirect & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DangleSpikesPhoto)); + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + + + %% Loading Data + rel_data = LICK2D.ROILick2DangleSpikesPhoto & rel_roi; + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect & 'flag_zscore=1') & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + PSTH=cell2mat(fetchn(rel_data,'theta_tuning_curve_vmises','ORDER BY roi_number')); + + rho=corr(PSTH','rows','pairwise'); + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + end + end +end + + + diff --git a/DataJoint/+STIMANAL/Target2AllCorrAngle2.m b/DataJoint/+STIMANAL/Target2AllCorrAngle2.m new file mode 100644 index 0000000..82e8fdb --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrAngle2.m @@ -0,0 +1,52 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + +classdef Target2AllCorrAngle2 < dj.Computed + properties + + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DangleSpikes)); + end + methods(Access=protected) + function makeTuples(self, key) + + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + + + %% Loading Data + rel_data = LICK2D.ROILick2DangleSpikes & rel_roi; + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect5) & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + theta=fetchn(rel_data,'preferred_theta_vmises','ORDER BY roi_number')'; + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + target_theta = theta(target_roi_idx); + delta_theta = circ_dist(deg2rad(theta),deg2rad(target_theta)); + delta_theta = abs(rad2deg(delta_theta)); + delta_theta(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =delta_theta; + end + insert(self,k_insert); + end + end +end + + diff --git a/DataJoint/+STIMANAL/Target2AllCorrAngleTuning.m b/DataJoint/+STIMANAL/Target2AllCorrAngleTuning.m new file mode 100644 index 0000000..12bd74a --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrAngleTuning.m @@ -0,0 +1,51 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrAngleTuning < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DangleSpikes)) & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + rel_data = LICK2D.ROILick2DangleSpikes & rel_roi; + + + %% Loading Data + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect5) & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + PSTH=cell2mat(fetchn(rel_data,'theta_tuning_curve','ORDER BY roi_number')); + + + rho=corr(PSTH','rows','pairwise'); + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + end + end +end + diff --git a/DataJoint/+STIMANAL/Target2AllCorrPSTH.m b/DataJoint/+STIMANAL/Target2AllCorrPSTH.m new file mode 100644 index 0000000..5648f69 --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrPSTH.m @@ -0,0 +1,51 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrPSTH < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DPSTHSpikes)) & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + rel_data = LICK2D.ROILick2DPSTHSpikes & rel_roi; + + + %% Loading Data + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect5) & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + PSTH=cell2mat(fetchn(rel_data,'psth','ORDER BY roi_number')); + + + rho=corr(PSTH','rows','pairwise'); + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + end + end +end + diff --git a/DataJoint/+STIMANAL/Target2AllCorrQuadrants.m b/DataJoint/+STIMANAL/Target2AllCorrQuadrants.m new file mode 100644 index 0000000..2ddc890 --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrQuadrants.m @@ -0,0 +1,51 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrQuadrants < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DQuadrantsSpikes)) & STIM.ROIResponseDirect5; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + rel_data = LICK2D.ROILick2DQuadrantsSpikes & rel_roi; + + + %% Loading Data + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect5) & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + PSTH=cell2mat(fetchn(rel_data,'psth_quadrants','ORDER BY roi_number')); + + + rho=corr(PSTH','rows','pairwise'); + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + end + end +end + diff --git a/DataJoint/+STIMANAL/Target2AllCorrTraceBehav.m b/DataJoint/+STIMANAL/Target2AllCorrTraceBehav.m new file mode 100644 index 0000000..baca4db --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrTraceBehav.m @@ -0,0 +1,129 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrTraceBehav < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & STIM.ROIInfluence5 & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & 'session_epoch_type="spont_photo"')); + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + rel_data = IMG.ROISpikes & rel_roi; + + time_bin=1.5; %s + threshold_for_event_vector = [0]; +% num_svd_components_removed_vector = [0,1,2,3,4,5,10,20,50,100]; + num_svd_components_removed_vector = [0,1,3,5,10]; + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key_behav, 'imaging_frame_rate'); + catch + imaging_frame_rate = fetch1(IMG.FOV & key_behav, 'imaging_frame_rate'); + end + + %% Loading Data + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect) & key; + rel_photostim=rel_photostim; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Thresholding activity and computing SVD and correlations + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + +% variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + else + rho=corrcoef(F_thresholded'); + end + + rho=gather(rho); + + key.threshold_for_event = threshold; + key.num_svd_components_removed_corr = num_svd_components_removed_vector(i_c); + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + clear rho + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/Target2AllCorrTraceSpont.m b/DataJoint/+STIMANAL/Target2AllCorrTraceSpont.m new file mode 100644 index 0000000..2dbc165 --- /dev/null +++ b/DataJoint/+STIMANAL/Target2AllCorrTraceSpont.m @@ -0,0 +1,124 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrTraceSpont < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & STIM.ROIInfluence5 & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"') & (EXP2.SessionEpoch & 'session_epoch_type="spont_photo"')); + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + time_bin=1.5; %s + threshold_for_event_vector = [0]; + num_svd_components_removed_vector = [0,1,2,3,4,5,10]; + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='spont_only'; + key_spont = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key_spont, 'imaging_frame_rate'); + catch + imaging_frame_rate = fetch1(IMG.FOV & key_spont, 'imaging_frame_rate'); + end + + %% Loading Data + rel_data = IMG.ROISpikes & rel_roi; + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect5) & key; + rel_photostim=rel_photostim; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_spont,'roi_number','ORDER BY roi_number'); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Thresholding activity and computing SVD and correlations + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + else + rho=corrcoef(F_thresholded'); + end + + rho=gather(rho); + + key.threshold_for_event = threshold; + key.num_svd_components_removed_corr = num_svd_components_removed_vector(i_c); + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + clear rho + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/getSchema.m b/DataJoint/+STIMANAL/getSchema.m new file mode 100644 index 0000000..1e166d2 --- /dev/null +++ b/DataJoint/+STIMANAL/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'STIMANAL', 'arseny_learning_photostim_anal'); +end +obj = schemaObject; +end diff --git a/DataJoint/+STIMANAL/old/InfluenceDistanceOld.m b/DataJoint/+STIMANAL/old/InfluenceDistanceOld.m new file mode 100644 index 0000000..8ca21bd --- /dev/null +++ b/DataJoint/+STIMANAL/old/InfluenceDistanceOld.m @@ -0,0 +1,107 @@ +%{ +# Responses of couple neurons to photostimulation, as a function of distance +-> EXP2.SessionEpoch +neurons_or_control : boolean # 1 - neurons, 0 control +flag_withold_trials : boolean # 1 define influence significance and sign based on odd trials, but compute the actual response based on even trials, 0 use all trials +flag_divide_by_std : boolean # 1 normalize the response by its std, 0 don't normalize +flag_normalize_by_total : boolean # 1 normalize by total number of pairs (e.g. includin non significant), 0 don't normalize +response_p_val : double # response p-value for inclusion. 1 means we take all pairs +num_svd_components_removed : int # how many of the first svd components were removed +--- +is_volumetric : boolean # 1 volumetric, 0 single plane +num_targets : int # number of directly stimulated neurons (with significant response) or number of control targets (with non-significant responses) +num_pairs : int # total number of cell-pairs included +distance_lateral_bins : blob # lateral bins (um), edges +distance_axial_bins=null : blob # axial positions (um), planes depth + +response_lateral : longblob # sum of response for all cell-pairs in each (lateral) bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_excitation : longblob # sum of response for all cell-pairs with positive response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_inhibition : longblob # sum of response for all cell-pairs with negative response in each bin, divided by the total number of all pairs (positive and negative) in that bin +response_lateral_absolute : longblob # sum of absolute value of tre response for all cell-pairs in each bin, divided by the total number of all pairs (positive and negative) in that bin + +counts_lateral=null : longblob # counts of cell-pairs, in each bin +counts_lateral_excitation=null : longblob # counts of cell-pairs with positive response, in each bin +counts_lateral_inhibition=null : longblob # counts of cell-pairs with negative response, in each bin + +response_axial : longblob # same for axial bins +response_axial_excitation : longblob # +response_axial_inhibition : longblob # +response_axial_absolute : longblob # + +response_axial_in_column : longblob # same for axial bins +response_axial_in_column_excitation : longblob # +response_axial_in_column_inhibition : longblob # +response_axial_in_column_absolute : longblob # + +response_axial_out_column : longblob # same for axial bins +response_axial_out_column_excitation : longblob # +response_axial_out_column_inhibition : longblob # +response_axial_out_column_absolute : longblob # + + +counts_axial=null : longblob # +counts_axial_excitation=null : longblob # +counts_axial_inhibition=null : longblob # + +response_2d=null : longblob # ame for lateral-axial bin +response_2d_excitation=null : longblob # +response_2d_inhibition=null : longblob # +response_2d_absolute=null : longblob # + +counts_2d=null : longblob # +counts_2d_excitation=null : longblob # +counts_2d_inhibition =null : longblob # +%} + + +classdef InfluenceDistance < dj.Computed + properties + keySource = (EXP2.SessionEpoch & 'flag_photostim_epoch =1') & IMG.FOVEpoch & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + + rel=STIM.ROIInfluence; + % distance_lateral_bins = [0:25:225,250:50:500]; % microns + distance_lateral_bins = [0:25:500]; % microns + column_radius =100; % microns + minimal_distance=25; % for within column calculations we don't consider responses within minimal_distance + % distance_lateral_bins = [0:10:500]; % microns + num_svd_components_removed_vector = [0, 1, 3, 5]; + pval=[0.001, 0.01, 0.05, 1]; + neurons_or_control_flag = [1,0]; + flag_withold_trials = [0,1]; + flag_normalize_by_total = [1]; + flag_divide_by_std = [0]; % 1 divide the response by std. 0 don't divide + + for i_n = 1:1:numel(neurons_or_control_flag) + kkk=key; + kkk.neurons_or_control = neurons_or_control_flag(i_n); + rel_direct= STIMANAL.NeuronOrControl & kkk; + rel_group_targets = IMG.PhotostimGroup & rel_direct; % we do it to get rid of the roi column + DATA_all=fetch((rel & key & rel_group_targets)& 'num_svd_components_removed=0' & 'num_of_baseline_trials_used>0' & 'num_of_target_trials_used>0','*'); + parfor i_c = 1:1:numel(num_svd_components_removed_vector) + kk=key; + kk.num_svd_components_removed=num_svd_components_removed_vector(i_c); + for i_p = 1:1:numel(pval) %parfor + for i_total = 1:1:numel(flag_normalize_by_total) + for i_w = 1:1:numel(flag_withold_trials) + for i_std = 1:1:numel(flag_divide_by_std) + rel_current = rel & kk; + k =STIMANAL_fn_distance_binning_coupled_response(rel_current, key,DATA_all,rel_group_targets, pval(i_p), distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials(i_w),flag_normalize_by_total(i_total),flag_divide_by_std(i_std)); + k.flag_withold_trials = flag_withold_trials(i_w); + k.flag_normalize_by_total = flag_normalize_by_total(i_total); + k.flag_divide_by_std = flag_divide_by_std(i_std); + k.neurons_or_control = neurons_or_control_flag(i_n); + k.num_svd_components_removed = num_svd_components_removed_vector(i_c); + insert(self,k); + end + end + end + + end + end + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrants.m b/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrants.m new file mode 100644 index 0000000..8a01981 --- /dev/null +++ b/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrants.m @@ -0,0 +1,181 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrants < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence5; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,8); % if there is no SVD component/s subtraction + bins_influence = [-inf,linspace(-0.15,0.15,6),inf]; + % bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence5; + + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect & 'flag_zscore=1' & rel_target) & (IMG.ROI & (LICK2D.ROILick2DQuadrants & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + + bins_corr_to_use = bins_corr; + + rel_data_corr_current=rel_data_corr & rel_target; + DataCorr = cell2mat(fetchn(rel_data_corr_current,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + %% exclude based on PSTH significance + roi_psth_signif = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi & 'psth_odd_even_corr>=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d \n\n',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrantsShuffled.m b/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrantsShuffled.m new file mode 100644 index 0000000..41f6c5d --- /dev/null +++ b/DataJoint/+STIMANAL/old/InfluenceVsCorrQuadrantsShuffled.m @@ -0,0 +1,207 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrQuadrantsShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrQuadrants & STIM.ROIInfluence; + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + minimal_distance=25; %um, lateral; exlude all cells within minimal distance from target + maximal_distance=100; %um lateral; exlude all cells further than maximal distance from target + + % bins + bins_corr = linspace(-1,1,8); % if there is no SVD component/s subtraction + bins_influence = [-inf,linspace(-0.15,0.15,6),inf]; + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_quadrants\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + rel_data_corr =STIMANAL.Target2AllCorrQuadrants; + rel_data_influence=STIM.ROIInfluence; + k_psth =key; + k_psth=rmfield(k_psth,'session_epoch_type'); + k_psth=rmfield(k_psth,'session_epoch_number'); + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence2=rel_data_influence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + rel_target_signif_by_psth = (STIM.ROIResponseDirect & 'flag_zscore=1' & rel_target) & (IMG.ROI & (LICK2D.ROILick2DQuadrants & k_psth & 'psth_odd_even_corr>=0.5')); + group_list_signif = fetchn(rel_target_signif_by_psth,'photostim_group_num','ORDER BY photostim_group_num'); + idx_group_list_signif = ismember(group_list,group_list_signif); + + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence2 & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_distance_lateral>maximal_distance )=false; %exlude all cells further than maximal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; + idx_include(DataStim_num_of_target_trials_used==0 )=false; + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=0.5', 'roi_number', 'ORDER BY roi_number'); + roi_psth_all = fetchn(LICK2D.ROILick2DQuadrants & k_psth & rel_roi, 'roi_number', 'ORDER BY roi_number'); + idx_psth_signif=ismember(roi_psth_all,roi_psth_signif); + + DataCorr =DataCorr(idx_group_list_signif,idx_psth_signif); + idx_include =idx_include(idx_group_list_signif,idx_psth_signif); + idx_DataStim_pval =idx_DataStim_pval(idx_group_list_signif,idx_psth_signif); + DataStim =DataStim(idx_group_list_signif,idx_psth_signif); + % + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + idx_subplot = 0; + + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-') + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-') + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + + + + + + key_insert = key; + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list(idx_group_list_signif)); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpont.m b/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpont.m new file mode 100644 index 0000000..8ceb1ee --- /dev/null +++ b/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpont.m @@ -0,0 +1,182 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included +%} + + +classdef InfluenceVsCorrTraceSpont < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceSpont & (EXP2.Session & STIM.ROIInfluence); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance %making it for more significant values requires debugging of the shuffling method + num_svd_components_removed_vector_corr = [0,1,2,3,4,5,10,20,50,100]; + minimal_distance=25; %um exlude all cells within minimal distance from target + % bins + bins_corr{1} = linspace(-0.1,0.2,16); % if there is no SVD component/s subtraction + bins_corr{2} = linspace(-0.1,0.1,16); % if there is SVD component/s subtraction + bins_influence = linspace(-0.3,0.3,16); +% bins_influence=bins_influence(4:end); + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_trace_behav\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + + for i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g} = fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + end + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + + DataStim(~idx_include)=NaN; + + + for i_p=1:1:numel(p_val) + + idx_DataStim_pval=cell(numel(group_list),1); + parfor i_g = 1:1:numel(group_list) + idx_DataStim_pval{i_g} = DataStim_pval{i_g}<=p_val(i_p); + end + idx_DataStim_pval = cell2mat(idx_DataStim_pval); + + for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + num_comp = num_svd_components_removed_vector_corr(i_c); + key_component_corr.num_svd_components_removed_corr = num_comp; + + if num_svd_components_removed_vector_corr(i_c)==0 + bins_corr_to_use = bins_corr{1}; + else + bins_corr_to_use = bins_corr{2}; + end + + rel_data_corr=STIMANAL.Target2AllCorrTraceSpont & rel_target & 'threshold_for_event=0' & key_component_corr; + DataCorr = cell2mat(fetchn(rel_data_corr,'rois_corr', 'ORDER BY photostim_group_num')); + + if numel(DataCorr(:)) ~= numel(DataStim(:)) + a=1 + end + + DataCorr(~idx_include)=NaN; + + % influence as a funciton of correlation + x=DataCorr(idx_DataStim_pval); + y=DataStim(idx_DataStim_pval); + [influence_binned_by_corr]= fn_bin_data(x,y,bins_corr_to_use); + + + x=DataStim(idx_DataStim_pval); + y=DataCorr(idx_DataStim_pval); + [corr_binned_by_influence]= fn_bin_data(x,y,bins_influence); + + + if num_svd_components_removed_vector_corr(i_c)==0 + idx_subplot = 0; + else + idx_subplot = 2; + end + subplot(2,2,idx_subplot+1) + bins_influence_centers = bins_influence(1:end-1) + diff(bins_influence)/2; + hold on + plot(bins_influence_centers,corr_binned_by_influence,'-','Color',colormap(i_c,:)) + xlabel ('Influence (dff)'); + ylabel('Correlation, r'); + if i_c==1 + title(sprintf('Target: %s pval %.3f\n anm%d session%d %s epoch%d ',neurons_or_control_label{i_n},p_val(i_p), key.subject_id,key.session,session_date, key.session_epoch_number)); + end + + + subplot(2,2,idx_subplot+2) + hold on + bins_corr_centers = bins_corr_to_use(1:end-1) + diff(bins_corr_to_use)/2; + plot(bins_corr_centers,influence_binned_by_corr,'-','Color',colormap(i_c,:)) + xlabel('Correlation, r'); + ylabel ('Influence (dff)'); + if i_c==1 + title(sprintf('\n\nSVD removed %d',num_svd_components_removed_vector_corr(i_c))); + elseif i_c>=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpontShuffled.m b/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpontShuffled.m new file mode 100644 index 0000000..0f0de59 --- /dev/null +++ b/DataJoint/+STIMANAL/old/InfluenceVsCorrTraceSpontShuffled.m @@ -0,0 +1,210 @@ +%{ +# Correlation versus influence, and Influence versus Correlation. Binned. Cells within the same lateral-axial bins are shuffled +-> EXP2.SessionEpoch +neurons_or_control :boolean # 1 - neurons, 0 control +response_p_val : double # response p-value of influence cell pairs for inclusion. 1 means we take all pairs +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +influence_binned_by_corr :blob # Influence versus Correlation. +corr_binned_by_influence :blob # Correlation versus Iinfluence. +bins_influence_edges :blob # bin-edges for binning influence +bins_corr_edges :blob # bin-edges for binning correlation +num_targets :int # num targets included +num_pairs :int # num pairs included + +%} + + +classdef InfluenceVsCorrTraceSpontShuffled < dj.Computed + properties + keySource = EXP2.SessionEpoch & STIMANAL.Target2AllCorrTraceSpont & (EXP2.Session & STIM.ROIInfluence); + end + methods(Access=protected) + function makeTuples(self, key) + close all; + + neurons_or_control_flag = [1,0]; % 1 neurons, 0 control sites + neurons_or_control_label = { 'Neurons','Controls'}; + p_val=[1]; % for influence significance; %the code needs adjustment to include shuffling for other p-values + num_svd_components_removed_vector_corr = [0,1,2,3,4,5,10,20,50,100]; + minimal_distance=25; %um, exlude all cells within minimal distance from target + + % bins + bins_corr{1} = linspace(-0.1,0.2,16); % if there is no SVD component/s subtraction + bins_corr{2} = linspace(-0.1,0.1,16); % if there is SVD component/s subtraction + bins_influence = linspace(-0.3,0.3,16); + % bins_influence=bins_influence(4:end); + + distance_lateral_bins = [0:10:500,inf]; % microns + + + + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_fig = [dir_base '\Photostim\influence_vs_corr\corr_noise\shuffled\']; + session_date = fetch1(EXP2.Session & key,'session_date'); + + + + + + colormap=viridis(numel(num_svd_components_removed_vector_corr)); + + for i_n = 1:1:numel(neurons_or_control_flag) + key.neurons_or_control = neurons_or_control_flag(i_n); + rel_target = IMG.PhotostimGroup & (STIMANAL.NeuronOrControl & key); + rel_data_influence=STIM.ROIInfluence & rel_target & 'num_svd_components_removed=0'; + + group_list = fetchn(rel_target,'photostim_group_num','ORDER BY photostim_group_num'); + if numel(group_list)<1 + return + end + + DataStim=cell(numel(group_list),1); + DataStim_pval=cell(numel(group_list),1); + DataStim_num_of_baseline_trials_used=cell(numel(group_list),1); + DataStim_num_of_target_trials_used=cell(numel(group_list),1); + DataStim_distance_lateral=cell(numel(group_list),1); + DataStim_distance_axial=cell(numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + rel_data_influence_current = [rel_data_influence & ['photostim_group_num=' num2str(group_list(i_g))]]; + DataStim{i_g} = fetchn(rel_data_influence_current,'response_mean', 'ORDER BY roi_number')'; + DataStim_pval{i_g} = fetchn(rel_data_influence_current,'response_p_value1', 'ORDER BY roi_number')'; + DataStim_num_of_baseline_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_baseline_trials_used', 'ORDER BY roi_number')'; + DataStim_num_of_target_trials_used{i_g}=fetchn(rel_data_influence_current,'num_of_target_trials_used', 'ORDER BY roi_number')'; + DataStim_distance_lateral{i_g}=fetchn(rel_data_influence_current,'response_distance_lateral_um', 'ORDER BY roi_number')'; + DataStim_distance_axial{i_g}=fetchn(rel_data_influence_current,'response_distance_axial_um', 'ORDER BY roi_number')'; + + end + + DataStim = cell2mat(DataStim); + DataStim_distance_lateral = cell2mat(DataStim_distance_lateral); + DataStim_distance_axial = cell2mat(DataStim_distance_axial); + DataStim_num_of_baseline_trials_used = cell2mat(DataStim_num_of_baseline_trials_used); + DataStim_num_of_target_trials_used = cell2mat(DataStim_num_of_target_trials_used); + + idx_include = true(size(DataStim_distance_lateral)); + idx_include(DataStim_distance_lateral<=minimal_distance )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_baseline_trials_used==0 )=false; %exlude all cells within minimal distance from target + idx_include(DataStim_num_of_target_trials_used==0 )=false; %exlude all cells within minimal distance from target + + DataStim(~idx_include)=NaN; + + for i_g = 1:1:numel(group_list) + current_DataStim = DataStim(i_g,:); + current_distance_lateral= DataStim_distance_lateral(i_g,:); + current_distance_axial= DataStim_distance_axial(i_g,:); + + distance_axial_bins = unique(current_distance_axial(:)); + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = current_distance_lateral>=distance_lateral_bins(i_l) & current_distance_lateral=2 + title(sprintf('\n\nSVD removed >=1')); + end + + + + + key_insert = key; + key_insert.num_svd_components_removed_corr = num_svd_components_removed_vector_corr(i_c); + key_insert.influence_binned_by_corr=influence_binned_by_corr; + key_insert.corr_binned_by_influence=corr_binned_by_influence; + key_insert.bins_corr_edges=bins_corr_to_use; + key_insert.bins_influence_edges=bins_influence; + key_insert.response_p_val=p_val(i_p); + key_insert.num_targets= numel(group_list); + key_insert.num_pairs=sum(~isnan(x)); + + insert(self, key_insert); + end + + + dir_current_fig = [dir_fig '\' neurons_or_control_label{i_n} '\pval_' num2str(p_val(i_p)) '\']; + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + filename = ['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_date '_' 'epoch' num2str(key.session_epoch_number)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + end + end + end + end +end + diff --git a/DataJoint/+STIMANAL/old/NeuronOrControlOLD.m b/DataJoint/+STIMANAL/old/NeuronOrControlOLD.m new file mode 100644 index 0000000..32c817e --- /dev/null +++ b/DataJoint/+STIMANAL/old/NeuronOrControlOLD.m @@ -0,0 +1,36 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +neurons_or_control :boolean # 1 - neurons, 0 control +-> IMG.ROI +num_targets : boolean # number of neurons or control sites +%} + + +classdef NeuronOrControlOLD < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect; + end + methods(Access=protected) + function makeTuples(self, key) + + n_flag = [0,1]; + for i_n = 1:1:numel(n_flag) + if n_flag(i_n) == 1 %neurons + rel_direct= (STIM.ROIResponseDirect & key & 'response_p_value1_odd<=0.01' & 'response_mean_odd>=0.2'); + elseif n_flag(i_n) == 0 % control sites + rel_direct= (STIM.ROIResponseDirect & key & 'response_p_value1_odd>0.05' & 'response_mean_odd<0.2'); + end + kkk=fetch(rel_direct); + for i=1:1:numel(kkk) + kkk(i).neurons_or_control=n_flag(i_n); + kkk(i).num_targets=rel_direct.count; + end + insert(self,kkk); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/old/NeuronOrControlOLD2.m b/DataJoint/+STIMANAL/old/NeuronOrControlOLD2.m new file mode 100644 index 0000000..7b07532 --- /dev/null +++ b/DataJoint/+STIMANAL/old/NeuronOrControlOLD2.m @@ -0,0 +1,45 @@ +%{ +# Photostim Group +-> EXP2.SessionEpoch +photostim_group_num : int # +--- +neurons_or_control :boolean # 1 - neurons, 0 control +-> IMG.ROI +num_targets : boolean # number of neurons or control sites +%} + + +classdef NeuronOrControl < dj.Imported + properties + keySource = EXP2.SessionEpoch & 'flag_photostim_epoch =1' & IMG.ROI & STIM.ROIResponseDirect; + end + methods(Access=protected) + function makeTuples(self, key) + k.flag_zscore=0; + n_flag = [1,0]; + rel = STIM.ROIResponseDirect & key & k; + for i_n = 1:1:numel(n_flag) + + if n_flag(i_n) == 1 %neurons + rel_direct= (rel & 'response_p_value1<=0.05' & 'response_mean>0'); + elseif n_flag(i_n) == 0 % control sites + rel_direct= (rel & 'response_p_value1>0.1'); + end + kkk=fetch(rel_direct); + kkk=rmfield(kkk,'flag_zscore'); + +% kkk=fetch(rel_direct,'*'); +% plot([kkk.response_mean],-log10([kkk.response_p_value1]),'.') +% histogram([kkk.response_distance_lateral_um]) + + + for i=1:1:numel(kkk) + kkk(i).neurons_or_control=n_flag(i_n); + kkk(i).num_targets=rel_direct.count; + end + insert(self,kkk); + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+STIMANAL/old/Target2AllCorrQuadrants.m b/DataJoint/+STIMANAL/old/Target2AllCorrQuadrants.m new file mode 100644 index 0000000..e7cbaa7 --- /dev/null +++ b/DataJoint/+STIMANAL/old/Target2AllCorrQuadrants.m @@ -0,0 +1,51 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrQuadrants < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"') & (EXP2.SessionEpoch & LICK2D.ROILick2DQuadrants)) & STIM.ROIResponseDirect; + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='behav_only'; + key_behav = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + + + %% Loading Data + rel_data = LICK2D.ROILick2DQuadrants & rel_roi; + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect & 'flag_zscore=1') & key; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_behav,'roi_number','ORDER BY roi_number'); + PSTH=cell2mat(fetchn(rel_data,'psth','ORDER BY roi_number')); + + + rho=corr(PSTH','rows','pairwise'); + + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + end + end +end + diff --git a/DataJoint/+STIMANAL/old/Target2AllCorrTraceSpont.m b/DataJoint/+STIMANAL/old/Target2AllCorrTraceSpont.m new file mode 100644 index 0000000..45636fd --- /dev/null +++ b/DataJoint/+STIMANAL/old/Target2AllCorrTraceSpont.m @@ -0,0 +1,124 @@ +%{ +# Pairwise correlation between the activity of a target neuron and each of the rest of the neurons +-> EXP2.SessionEpoch +-> IMG.PhotostimGroup +threshold_for_event : double # threshold in deltaf_overf +num_svd_components_removed_corr : int # how many of the first svd components were removed for computing correlations +--- +rois_corr :blob # correlation between the activity of the target neuron an each of the ROI, including self +%} + + +classdef Target2AllCorrTraceSpont < dj.Computed + properties + keySource = (EXP2.SessionEpoch& 'session_epoch_type="spont_photo"') & STIM.ROIInfluence & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"') & (EXP2.SessionEpoch & 'session_epoch_type="spont_photo"')); + end + methods(Access=protected) + function makeTuples(self, key) + + rel_roi = (IMG.ROI - IMG.ROIBad) & key; + + time_bin=1.5; %s + threshold_for_event_vector = [0]; + num_svd_components_removed_vector = [0,1,2,3,4,5,10,20,50,100]; + + keytemp = rmfield(key,'session_epoch_number'); + keytemp.session_epoch_type='spont_only'; + key_spont = fetch(EXP2.SessionEpoch & keytemp,'LIMIT 1'); + + try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key_spont, 'imaging_frame_rate'); + catch + imaging_frame_rate = fetch1(IMG.FOV & key_spont, 'imaging_frame_rate'); + end + + %% Loading Data + rel_data = IMG.ROISpikes & rel_roi; + rel_photostim =IMG.PhotostimGroup*(STIM.ROIResponseDirect & 'flag_zscore=1') & key; + rel_photostim=rel_photostim; + group_list = fetchn(rel_photostim,'photostim_group_num','ORDER BY photostim_group_num'); + target_roi_list = fetchn(rel_photostim,'roi_number','ORDER BY photostim_group_num'); + + roi_list=fetchn(rel_data &key_spont,'roi_number','ORDER BY roi_number'); + chunk_size=500; + counter=0; + for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); + end + + + %% binning in time + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(Fall,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F(:,i)=mean(Fall(:,ix1),2); + end + clear Fall temp_Fall + + + %% Thresholding activity and computing SVD and correlations + for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + + for i_c = 1:1:numel(num_svd_components_removed_vector) + F_thresholded=F; + if threshold>0 + F_thresholded(F<=threshold)=0; + end + % F_thresholded = F_thresholded(idx_enough_events,:); + rho=[]; + F_thresholded = gpuArray((F_thresholded)); + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + % F_thresholded = F_thresholded-mean(F_thresholded,2); + F_thresholded=zscore(F_thresholded,[],2); + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + F_reconstruct = U*S*V'; + clear U S V F_thresholded + + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + else + rho=corrcoef(F_thresholded'); + end + + rho=gather(rho); + + key.threshold_for_event = threshold; + key.num_svd_components_removed_corr = num_svd_components_removed_vector(i_c); + k_insert = repmat(key,numel(group_list),1); + + parfor i_g = 1:1:numel(group_list) + target_roi_idx = (roi_list == target_roi_list(i_g)); + k_insert(i_g).photostim_group_num = group_list(i_g); + corr_with_target= rho(target_roi_idx,:); + corr_with_target(target_roi_idx)=NaN; %setting self correlation to NaN + k_insert(i_g).rois_corr =corr_with_target; + end + insert(self,k_insert); + clear rho + end + end + end + end +end + diff --git a/DataJoint/+TRACKING/Jobs.m b/DataJoint/+TRACKING/Jobs.m new file mode 100644 index 0000000..112ad2f --- /dev/null +++ b/DataJoint/+TRACKING/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +TRACKING +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+TRACKING/TrackingDevice.m b/DataJoint/+TRACKING/TrackingDevice.m new file mode 100644 index 0000000..093dbde --- /dev/null +++ b/DataJoint/+TRACKING/TrackingDevice.m @@ -0,0 +1,22 @@ +%{ +# +-> LAB.Rig +tracking_device_type : varchar(20) # e.g. camera, microphone +tracking_device_id : int # number of the device, e.g. in case there are multiple cameras +--- +tracking_device_description: varchar(1000) # e.g. side-view camera +tracking_device_model: varchar(1000) # make and model of the tracking device + +%} + + +classdef TrackingDevice < dj.Lookup + properties + contents = { + 'imaging1' 'Camera' 0 'side view' 'Chameleon3 CM3-U3-13Y3M-CS (FLIR)' %these are on the photostim rig + 'imaging1' 'Camera' 1 'bottom view' 'Chameleon3 CM3-U3-13Y3M-CS (FLIR)' + 'imaging1' 'Camera' 3 'side view' 'Blackfly BFS-U3-16S2M-CS (FLIR)' % these are on the mesoscope,but I mistakenly did not call the mesoscopea as a separate rig + 'imaging1' 'Camera' 4 'front view' 'Blackfly BFS-U3-16S2M-CS (FLIR)' + } + end +end \ No newline at end of file diff --git a/DataJoint/+TRACKING/TrackingTrial.m b/DataJoint/+TRACKING/TrackingTrial.m new file mode 100644 index 0000000..e74854e --- /dev/null +++ b/DataJoint/+TRACKING/TrackingTrial.m @@ -0,0 +1,87 @@ +%{ +# +-> EXP2.SessionTrial +-> TRACKING.TrackingDevice +--- +tracking_datafile_num = null : int # tracking data file number associated with this trial +tracking_datafile_path = null : varchar(1000) # +tracking_start_time = null : decimal(8,4) # (s) from trial start +tracking_duration = null : decimal(8,4) # (s) +tracking_sampling_rate = null : decimal(8,4) # Hz +tracking_num_samples = null : int # +%} + + +classdef TrackingTrial < dj.Imported + properties + keySource = (EXP2.Session & IMG.Mesoscope & (EXP2.SessionEpoch& 'session_epoch_type="behav_only"') ) * (TRACKING.TrackingDevice & 'tracking_device_id=4 OR tracking_device_id=3'); + end + methods(Access=protected) + + function makeTuples(self, key) + tracking_sampling_rate=250; % Hz + + + %% Reading CSV files + dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_video_processed"', 'parameter_value'); + device = [key.tracking_device_type num2str(key.tracking_device_id)]; + temp = dir(dir_base); %gets the names of all files and nested directories in this folder + DirNames = {temp([temp.isdir]).name}; %gets only the names of all files + DirNames =DirNames{contains(DirNames,device)}; + + dir_data1 = [dir_base DirNames '\']; + temp = dir(dir_data1); %gets the names of all files and nested directories in this folder + DirNames = {temp([temp.isdir]).name}; %gets only the names of all files + if sum(contains(DirNames,num2str(key.subject_id)))==0 + return + end + DirNames =DirNames{contains(DirNames,num2str(key.subject_id))}; + + date=fetch1(EXP2.Session & key,'session_date'); + dir_data2 = [dir_data1 DirNames '\' date '\']; + temp = dir(dir_data2); %gets the names of all files and nested directories in this folder + FileNames = {temp(~[temp.isdir]).name}; %gets only the names of all files + FileNames =FileNames(contains(FileNames,'.csv'))'; + + B = fetch(EXP2.BehaviorTrial*EXP2.BehaviorTrialEvent & 'trial_event_type="trialend"' & key,'*'); + num_trials = numel(B); + %% DEBUG we assume her that behavior epoch is the last epoch (e.g. spontaneous session epoch, if exists, comes before behavior), so it won't work if there is a spontaneous ecpoch after the behavioral one + if isempty(FileNames) + return + end +% FileNames = FileNames(end-num_trials+1:end); +if num_trials>numel(FileNames) + num_trials=numel(FileNames); +end + FileNames = FileNames(1:1:num_trials); + + for i=1:num_trials + frames = csvread([dir_data2 FileNames{i}],3,1); + num_frames(i)=size(frames,1); + end + for i=1:num_trials + + tracking_duration=num_frames(i)/tracking_sampling_rate; + tracking_start_time = B(i).trial_event_time-tracking_duration; + + key(i).subject_id=key(1).subject_id; % repmat((key.subject_id),numel(trial),1); + key(i).session=key(1).session; % repmat(key.session,numel(trial),1); + key(i).trial=B(i).trial; + key(i).rig=key(1).rig; %repmat({key.rig},numel(trial),1); + key(i).tracking_device_type=key(1).tracking_device_type; %repmat({key.tracking_device_type},numel(trial),1); + key(i).tracking_device_id=key(1).tracking_device_id; %repmat(key.tracking_device_id,numel(trial),1); + key(i).tracking_datafile_num=str2num(FileNames{i}(end-6:end-4)); + key(i).tracking_datafile_path=[dir_data2 FileNames{i}]; + key(i).tracking_start_time=tracking_start_time; + key(i).tracking_duration=tracking_duration; + key(i).tracking_sampling_rate=tracking_sampling_rate; + key(i).tracking_num_samples=num_frames(i); + end + + insert(self,key) + + + end + end + +end \ No newline at end of file diff --git a/DataJoint/+TRACKING/TrackingTrialBad.m b/DataJoint/+TRACKING/TrackingTrialBad.m new file mode 100644 index 0000000..d787425 --- /dev/null +++ b/DataJoint/+TRACKING/TrackingTrialBad.m @@ -0,0 +1,61 @@ +%{ +# +-> EXP2.BehaviorTrial +--- +%} + + +classdef TrackingTrialBad < dj.Imported + properties + keySource = (EXP2.Session & TRACKING.TrackingTrial); + end + methods(Access=protected) + + function makeTuples(self, key) + + trials = fetchn(EXP2.BehaviorTrial & key,'trial','ORDER BY trial'); + go_t = fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"', 'trial_event_time','ORDER BY trial'); + + + ids = unique(fetchn(TRACKING.TrackingTrial & key,'tracking_device_id')); + if numel(ids)<2 %in case only one camera is available + for i =1:1:numel(trials) + key.trial=trials(i); + insert(self, key) + end + return + end + cam1 =struct2table(fetch(TRACKING.TrackingTrial & key & sprintf('tracking_device_id=%d',ids(1)),'*')); + cam2 =struct2table(fetch(TRACKING.TrackingTrial & key & sprintf('tracking_device_id=%d',ids(2)),'*')); + + for i =1:1:numel(trials) + + idx1 = find(cam1.trial == trials(i)); + idx2 = find(cam2.trial == trials(i)); + key.trial=trials(i); + + if cam1.tracking_num_samples(idx1) ~=cam2.tracking_num_samples(idx2) % if there is a mismatch in the number of samples between the two cameras + insert(self, key) + continue + end + + if isempty(idx1) || isempty(idx2) %if one of the cameras did not record during this trial + insert(self, key) + continue + end + + if cam1.tracking_start_time(idx1)>= go_t(i) || cam2.tracking_start_time(idx2)>= go_t(i) % in case of aberant (too short) trials + insert(self, key) + continue + end + + if cam1.tracking_start_time(idx1)<0 || cam2.tracking_start_time(idx2)<0 % in case of aberant (too short) trials + insert(self, key) + continue + end + + end + + end + end +end \ No newline at end of file diff --git a/DataJoint/+TRACKING/VideoBodypartTrajectTrial.m b/DataJoint/+TRACKING/VideoBodypartTrajectTrial.m new file mode 100644 index 0000000..e5cfec8 --- /dev/null +++ b/DataJoint/+TRACKING/VideoBodypartTrajectTrial.m @@ -0,0 +1,29 @@ +%{ +# Body parts trajectory, frames in which the bodypart is not visible are set to NaN +-> EXP2.BehaviorTrial +-> TRACKING.VideoBodypartType +--- +traj_x =null : longblob # Medio-Lateral coordinate in mm, . Left negative, Right positive, relative to midline. Measured based on front/bottom camera +traj_y1 =null : longblob # Anterior-Posterior coordinate in mm. Measured based on side camera +traj_y2 =null : longblob # Anterior-Posterior coordinate in mm. Measured based on front/bottom camera +traj_z =null : longblob # Dorso-Ventral coordinate in mm. Measured based on side camera +time_first_frame : double # time of the first frame, relative to Go cue/ or movinglickport entrance in case lickport is moving +%} + + +% + + + +classdef VideoBodypartTrajectTrial < dj.Computed + properties + keySource = (EXP2.Session & TRACKING.VideoFiducialsTrial) ; + end + methods(Access=protected) + + function makeTuples(self, key) + end + + end +end + diff --git a/DataJoint/+TRACKING/VideoBodypartType.m b/DataJoint/+TRACKING/VideoBodypartType.m new file mode 100644 index 0000000..f9273f8 --- /dev/null +++ b/DataJoint/+TRACKING/VideoBodypartType.m @@ -0,0 +1,21 @@ +%{ +# +bodypart_name : varchar(200) # +--- +bodypart_description : varchar(1000) # +%} + + +classdef VideoBodypartType < dj.Lookup + properties + contents = { + 'tongue' 'tongue' + 'pawfrontleft' 'front paw left' + 'pawfrontright' 'fron paw right' + 'whiskers' 'whiskers' + 'nose' 'nose' + 'jaw' 'jaw' + }; + end +end + diff --git a/DataJoint/+TRACKING/VideoFiducialsSessionAvg.m b/DataJoint/+TRACKING/VideoFiducialsSessionAvg.m new file mode 100644 index 0000000..68afa06 --- /dev/null +++ b/DataJoint/+TRACKING/VideoFiducialsSessionAvg.m @@ -0,0 +1,37 @@ +%{ +# +-> EXP2.Session +-> TRACKING.VideoFiducialsType +--- +fiduical_x_median_session=null : double # fiducial coordinate along, averaged across all trials for the entire session +fiduical_y_median_session=null : double +fiduical_x_min_session=null : double +fiduical_y_min_session=null : double +fiduical_x_max_session=null : double +fiduical_y_max_session=null : double +%} + + + +classdef VideoFiducialsSessionAvg < dj.Imported + properties + keySource = (EXP2.Session & TRACKING.TrackingTrial & TRACKING.VideoFiducialsTrial)* TRACKING.VideoFiducialsType + end + methods(Access=protected) + + function makeTuples(self, key) + key.fiduical_x_median_session =nanmedian(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_x_median')); + key.fiduical_y_median_session =nanmedian(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_y_median')); + + key.fiduical_x_min_session =prctile(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_x_min'),10); + key.fiduical_y_min_session =prctile(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_y_min'),10); + + key.fiduical_x_max_session =prctile(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_x_max'),90); + key.fiduical_y_max_session =prctile(fetchn(TRACKING.VideoFiducialsTrial & key,'fiduical_y_max'),90); + + insert(self,key) + end + + end +end + diff --git a/DataJoint/+TRACKING/VideoFiducialsTrial.m b/DataJoint/+TRACKING/VideoFiducialsTrial.m new file mode 100644 index 0000000..39c1ea4 --- /dev/null +++ b/DataJoint/+TRACKING/VideoFiducialsTrial.m @@ -0,0 +1,94 @@ +%{ +# +-> TRACKING.TrackingTrial +-> TRACKING.VideoFiducialsType +--- +fiducial_x : longblob # fiducial coordinate along the X axis of the video image +fiducial_y : longblob # fiducial coordinate along the Y axis of the video image +fiducial_p : longblob # fiducial probability +fiduical_x_median=null : double +fiduical_y_median=null : double +fiduical_x_min=null : double +fiduical_y_min=null : double +fiduical_x_max=null : double +fiduical_y_max=null : double +%} + + +classdef VideoFiducialsTrial < dj.Imported + properties + keySource = (EXP2.Session & TRACKING.TrackingTrial)*(TRACKING.TrackingDevice& TRACKING.TrackingTrial); + end + methods(Access=protected) + + function makeTuples(self, key) + % Remember that 0,0 is the upper left corner of the image + % Note the for the Mesocscope Side Camera, defined as "Camera 4", we rotate the image because it was aquired when the camera was rotated by 90 degrees. It results in rotating the image 90 clockwise, and then flipping it along the left/right axis + p_threshold =1; %for session average values we only take those values that passed + + V =fetch(TRACKING.TrackingTrial & key,'*'); + if isempty(V) %one of the cameras is missing + return + end + [~,temp_fiducial_labels,~] = xlsread(V(1).tracking_datafile_path,'B2:XX3'); + fiducial_labels = unique(temp_fiducial_labels(1,:)); + + key_insert=fetch(TRACKING.TrackingTrial & key,'LIMIT 1'); + key_insert=repmat(key_insert,1,numel(fiducial_labels)); + + for ii =1:1:length(V) %loops over trials + data = csvread(V(ii).tracking_datafile_path,3,1); + kk.trial = V(ii).trial; + + % finding the index when the lickport is not moving + idx_lickport_stationary = ((1:1:V(ii).tracking_num_samples)*0)'; + go_t = fetch1(EXP2.BehaviorTrialEvent & key & kk & 'trial_event_type="go"', 'trial_event_time'); + idx(1)= floor((go_t+0.5 - V(ii).tracking_start_time)* V(ii).tracking_sampling_rate); + idx(2)= ceil((go_t+1.5 - V(ii).tracking_start_time)* V(ii).tracking_sampling_rate); + if idx>0 %in case of some bad videos the trials are too short which generates negative values + idx_lickport_stationary(idx(1):idx(2))=1; + end + + for jj= 1: length(fiducial_labels) %loops over fiducials + column_idx = find(strcmp(temp_fiducial_labels(1,:),fiducial_labels{jj}),1); + + fiducials_idx(jj).XColumn=column_idx; + fiducials_idx(jj).YColumn=column_idx+1; + fiducials_idx(jj).ProbColumn=column_idx+2; + + X=data(:,fiducials_idx(jj).XColumn); + Y=data(:,fiducials_idx(jj).YColumn); + + if key.tracking_device_id ==4 % Mesoscope specific setting! For front camera we rotate the image. It results in rotating the image 90 clockwise, and then flipping it along the left/right axis + X=data(:,fiducials_idx(jj).YColumn); + Y=data(:,fiducials_idx(jj).XColumn); + end + + P=data(:,fiducials_idx(jj).ProbColumn); + + key_insert(jj).trial=V(ii).trial; + key_insert(jj).video_fiducial_name=fiducial_labels{jj}; + + key_insert(jj).fiducial_x=X; + key_insert(jj).fiducial_y=Y; + key_insert(jj).fiducial_p=P; + + if contains(fiducial_labels{jj},'lickport') + idx_include= P>=p_threshold & idx_lickport_stationary; + else + idx_include= P>=p_threshold; + end + key_insert(jj).fiduical_x_median=nanmedian(X(idx_include)); %for median/min/max values we only take those values that passed + key_insert(jj).fiduical_y_median=nanmedian(Y(idx_include)); %for median/min/max values we only take those values that passed + key_insert(jj).fiduical_x_min=nanmin(X(idx_include)); %for median/min/max values we only take those values that passed + key_insert(jj).fiduical_y_min=nanmin(Y(idx_include)); %for median/min/max values we only take those values that passed + key_insert(jj).fiduical_x_max=nanmax(X(idx_include)); %for median/min/max values we only take those values that passed + key_insert(jj).fiduical_y_max=nanmax(Y(idx_include)); %for median/min/max values we only take those values that passed + + end + insert(self,key_insert); + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+TRACKING/VideoFiducialsType.m b/DataJoint/+TRACKING/VideoFiducialsType.m new file mode 100644 index 0000000..2057261 --- /dev/null +++ b/DataJoint/+TRACKING/VideoFiducialsType.m @@ -0,0 +1,46 @@ +%{ +# +-> TRACKING.TrackingDevice +video_fiducial_name : varchar(200) # +--- +video_fiducial_description : varchar(1000) # +%} + + +classdef VideoFiducialsType < dj.Lookup + properties + contents = { + 'imaging1' 'Camera' 3 'jaw' 'bottom edge of the jaw/mouth' + 'imaging1' 'Camera' 3 'nosetip' 'anterior edge of the nose' + 'imaging1' 'Camera' 3 'lickport' 'tip of the port' + 'imaging1' 'Camera' 3 'tonguemiddle' 'middle of the tongue' + 'imaging1' 'Camera' 3 'TongueTip' 'tip of the tongue, the most bottom part' + 'imaging1' 'Camera' 3 'PawL' 'left paw' + 'imaging1' 'Camera' 3 'PawR' 'right paw' + + 'imaging1' 'Camera' 3 'W1' 'whisker, one of the frontal whiskers' + 'imaging1' 'Camera' 3 'W2' 'whisker, one of the middle whiskers' + 'imaging1' 'Camera' 3 'W3' 'whisker, one of the backward whiskers' + + + 'imaging1' 'Camera' 4 'jaw' 'bottom edge of the jaw/mouth' + 'imaging1' 'Camera' 4 'nosetip' 'center of the nose' + 'imaging1' 'Camera' 4 'lickport' 'tip of the port' + + 'imaging1' 'Camera' 4 'LBtongue' 'left backward edge of the tongue' + 'imaging1' 'Camera' 4 'LFtongue' 'left frontal edge of the tongue' + 'imaging1' 'Camera' 4 'RBtongue' 'right backward edge of the tongue' + 'imaging1' 'Camera' 4 'RFtongue' 'right frontal edge of the tongue' + 'imaging1' 'Camera' 4 'TongueTip' 'tip of the tongue, the most front part' + + 'imaging1' 'Camera' 4 'PawL' 'left paw' + 'imaging1' 'Camera' 4 'PawR' 'right paw' + }; + + + % insert(self,video_fiducial_name); + + + end +end + diff --git a/DataJoint/+TRACKING/VideoGroomingTrial.m b/DataJoint/+TRACKING/VideoGroomingTrial.m new file mode 100644 index 0000000..0497ff8 --- /dev/null +++ b/DataJoint/+TRACKING/VideoGroomingTrial.m @@ -0,0 +1,23 @@ +%{ +# If there was grooming during the trial +-> EXP2.BehaviorTrial +--- +%} + + +% + + + +classdef VideoGroomingTrial < dj.Computed + properties + keySource = (EXP2.Session & TRACKING.VideoFiducialsTrial) ; + end + methods(Access=protected) + + function makeTuples(self, key) + end + + end +end + diff --git a/DataJoint/+TRACKING/VideoLickportPositionTrial.m b/DataJoint/+TRACKING/VideoLickportPositionTrial.m new file mode 100644 index 0000000..a75c91e --- /dev/null +++ b/DataJoint/+TRACKING/VideoLickportPositionTrial.m @@ -0,0 +1,172 @@ +%{ +# lickport position relative to mouse mouth +-> EXP2.BehaviorTrial +--- +lickport_x =null : double # Medio-Lateral coordinate in mm, . Left negative, Right positive, relative to midline. Measured based on front/bottom camera +lickport_y1 =null : double # Anterior-Posterior coordinate in mm. Measured based on side camera relative to mouth +lickport_y2 =null : double # Anterior-Posterior coordinate in mm. Measured based on front/bottom camera relative to mouth +lickport_z =null : double # Dorso-Ventral coordinate in mm. Measured based on side camera relative to mouth + + +%} + +classdef VideoLickportPositionTrial < dj.Computed + properties + keySource = (EXP2.Session & TRACKING.VideoFiducialsTrial) ; + end + methods(Access=protected) + + function makeTuples(self, key) + + % Rig specific settings + %-------------------------------------------------------------- + k_camera1.tracking_device_id = 3; %side camera + k_camera2.tracking_device_id = 4; %bottom (or top/front) camera + side_camera_facing = 'left'; %'left' or 'right' mouse-facing direction as seen from the side view camera + bottom_or_front_camera_facing = 'up'; %'up' or 'down' mouse-facing direction as seen from the front/bottom view camera + % For the Mesoscope (Camera tracking_device_id =4, front) we set mouse-facing direction to 'up', because after intital clockwise 90 rotation in TRACKING.VideoFiducialsTrial the mouse appears to face 'up' + reverse_cam2_x = -1; % '-1' left/right flip along the midline' '1' - no flip + + camera1_pixels_to_mm = 1; %% UPDATE + camera2_pixels_to_mm=1; %% UPDATE + + % Analysis Parameters + %-------------------------------------------------------------- + + p_threshold =0.99999; + MinPeakInterval=0.075; %minimal time interval between peaks (licks) in time (seconds) + tinterval_lickport_lickable =[0.5 1.5]; % (s) time interval in which we expect to see the lickport in lickable position (in case its a moving lickport). It doesn't have to be the full time interval + + + %% Fetching trial and camera information + rel_behavior_trial = (EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"') - TRACKING.TrackingTrialBad ; + rel_video_trial = (TRACKING.TrackingTrial & key & k_camera1) - TRACKING.TrackingTrialBad ; + + if rel_video_trial.count==0 + return + end + + rel_fiducials_trial_cam1 = (TRACKING.VideoFiducialsTrial & key & k_camera1) - TRACKING.TrackingTrialBad ; + rel_fiducials_session_cam1 =(TRACKING.VideoFiducialsSessionAvg & key & k_camera1); + + rel_fiducials_trial_cam2 = (TRACKING.VideoFiducialsTrial & key & k_camera2) - TRACKING.TrackingTrialBad ; + rel_fiducials_session_cam2 =(TRACKING.VideoFiducialsSessionAvg & key & k_camera2); + + + time_go = fetchn(rel_behavior_trial ,'trial_event_time','ORDER BY trial'); %relative to trial start + tracking_start_time = fetchn(rel_video_trial ,'tracking_start_time','ORDER BY trial'); % relative to trial start + num_frames = fetchn(rel_video_trial ,'tracking_num_samples','ORDER BY trial'); + tracking_datafile_num = fetchn(rel_video_trial ,'tracking_datafile_num','ORDER BY trial'); + tracking_datafile_path = fetchn(rel_video_trial ,'tracking_datafile_path','ORDER BY trial'); + + trials = fetchn(rel_behavior_trial ,'trial','ORDER BY trial'); %relative to trial start + frame_rate = fetch1(rel_video_trial ,'tracking_sampling_rate','LIMIT 1'); + + + %% Fiducial Tongue + num=1; + k.video_fiducial_name='TongueTip'; %from Camera1 + switch side_camera_facing + case 'left' + offset_cam1_x = fetchn(rel_fiducials_session_cam1& k,'fiduical_x_max_session'); + reverse_cam1_x = -1 ; %reverse + case 'right' + offset_cam1_x = fetchn(rel_fiducials_session_cam1& k,'fiduical_x_min_session'); + reverse_cam1_x = 1; % no reverse + end + offset_cam1_y = fetchn(rel_fiducials_session_cam1 & k,'fiduical_y_min_session'); + reverse_cam1_y=1; % no reverse + + + num=2; + k.video_fiducial_name='TongueTip'; %from Camera2 + offset_cam2_x = fetchn(rel_fiducials_session_cam2 & k,'fiduical_x_median_session'); + switch bottom_or_front_camera_facing + case 'up' + offset_cam2_y = fetchn(rel_fiducials_session_cam2& k,'fiduical_y_max_session'); + reverse_cam2_y = -1 ; %reverse + case 'down' + offset_cam2_y = fetchn(rel_fiducials_session_cam2& k,'fiduical_y_min_session'); + reverse_cam2_y = 1 ; % no reverse + end + fSession=[]; + fTrial=[]; + + + %Camera 1 + num=0; + + camera_num = 1; + fiducial_names = fetchn(TRACKING.VideoFiducialsType & k_camera1,'video_fiducial_name'); + for i_f = 1:1:numel(fiducial_names) + num = num+1; + k.video_fiducial_name = fiducial_names{i_f}; + [fSession,fTrial] = fn_TRACKING_extract_and_center_fiducials (fSession, fTrial, rel_fiducials_session_cam1, rel_fiducials_trial_cam1, k, num, offset_cam1_x, offset_cam1_y, reverse_cam1_x, reverse_cam1_y,camera_num, camera1_pixels_to_mm, p_threshold); + end + + %Camera 2 + camera_num = 2; + fiducial_names = fetchn(TRACKING.VideoFiducialsType & k_camera2,'video_fiducial_name'); + for i_f = 1:1:numel(fiducial_names) + num = num+1; + k.video_fiducial_name = fiducial_names{i_f}; + [fSession,fTrial] = fn_TRACKING_extract_and_center_fiducials (fSession, fTrial, rel_fiducials_session_cam2, rel_fiducials_trial_cam2, k, num, offset_cam2_x, offset_cam2_y, reverse_cam2_x, reverse_cam2_y,camera_num, camera2_pixels_to_mm, p_threshold); + end + + + + + %% Looping over individual trials + % Number of trials, filenames etc. + key.session_date=fetch1(EXP2.Session & key,'session_date'); + insert_key_lickport_position = []; + + for ii =1:1:numel(trials) + ii; + + + % time vector + t = [0:(1/frame_rate): (num_frames(ii)-1)/frame_rate] + tracking_start_time(ii) - time_go(ii); % relative to Go cue. We will set it later relative to lickport move onset, in case of moving lickport + + + %% Extracting lickport entrance/exit timing, in case there was a moving lickport + + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','lickport')'); + LICKPORT_AP_Cam1 = fTrial(num1).x{ii}; + LICKPORT_Z_Cam1 = fTrial(num1).y{ii}; + + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','lickport')'); + LICKPORT_ML_Cam2 = fTrial(num2).x{ii}; + LICKPORT_AP_Cam2 = fTrial(num2).y{ii}; + + idx_lickport_in = t>=tinterval_lickport_lickable(1) & t0) < (Z_lickport_before -(Z_lickport_before - Z_lickport_in)*0.1),1,'first') + find(t>0,1,'first')-1; + idx_lickport_t_entrance_end = find(LICKPORT_Z_Cam1(t>0)< (Z_lickport_in +(Z_lickport_before - Z_lickport_in)*0.1),1,'first') + find(t>0,1,'first')-1; + idx_lickport_t_exit_start = find(LICKPORT_Z_Cam1(t>1)> (Z_lickport_in +(Z_lickport_before - Z_lickport_in)*0.1),1,'first') + find(t>1,1,'first'); + idx_lickport_t_exit_end = find(LICKPORT_Z_Cam1(t>1)> (Z_lickport_before -(Z_lickport_before - Z_lickport_in)*0.1),1,'first') + + find(t>1,1,'first'); + + lickport_t_entrance_avg = nanmean([t(idx_lickport_t_entrance_start);t(idx_lickport_t_entrance_end)]); + + idx_lickport_lickable = idx_lickport_t_entrance_start:1:idx_lickport_t_exit_start; + + %% Lickport averge positon + insert_key_lickport_position (ii).subject_id = key.subject_id; + insert_key_lickport_position(ii).session = key.session; + insert_key_lickport_position(ii).trial = trials(ii); + insert_key_lickport_position(ii).lickport_x = nanmedian(LICKPORT_ML_Cam2(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_y1 = nanmedian(LICKPORT_AP_Cam1(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_y2 = nanmedian(LICKPORT_AP_Cam2(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_z = nanmedian(LICKPORT_Z_Cam1(idx_lickport_lickable)); + end + + insert(self,insert_key_lickport_position); + + end + end +end + + diff --git a/DataJoint/+TRACKING/VideoLickportTrial.m b/DataJoint/+TRACKING/VideoLickportTrial.m new file mode 100644 index 0000000..2d8bdd5 --- /dev/null +++ b/DataJoint/+TRACKING/VideoLickportTrial.m @@ -0,0 +1,29 @@ +%{ +# In case of moving lickport, lickport entrance and exit time based on video tracking of the lickport +-> EXP2.BehaviorTrial +--- +lickport_t_entrance=null : double # (s) relative to Go cue, average between entrance start and entrance end +lickport_t_entrance_relative_to_trial_start=null : double # (s) relative to beginning of the trial, average between entrance start and entrance end +lickport_t_entrance_start=null : double # (s) relative to Go cue +lickport_t_entrance_end=null : double # (s) relative to Go cue +lickport_lickable_duration=null : double # (s) duration for which the lickport stay in lickable position lickport_t_entrance_end-lickport_t_entrance_start + +%} + + +% + + + +classdef VideoLickportTrial < dj.Computed + properties + keySource = (EXP2.Session & TRACKING.VideoFiducialsTrial) ; + end + methods(Access=protected) + + function makeTuples(self, key) + end + + end +end + diff --git a/DataJoint/+TRACKING/VideoNthLickTrial.m b/DataJoint/+TRACKING/VideoNthLickTrial.m new file mode 100644 index 0000000..2dbfade --- /dev/null +++ b/DataJoint/+TRACKING/VideoNthLickTrial.m @@ -0,0 +1,226 @@ +%{ +# units are cm, deg, and seconds +-> EXP2.BehaviorTrial +lick_number : int # first lick in trial, second lick in trial +--- +lick_touch_number : int # in case there was a touch, what touch number it is. 1 is first touch; -1 if the lick did not result in touch of the lickport +lick_number_relative_to_firsttouch=null : int # first lick with touch is 0, the next lick after it (not necessarily with touch) is 1, etc. the last lick before touch is -1, the one before it -2 etc +lick_number_relative_to_lickport_entrance : int # first lick after the lickport_entrance is 0, next one is 1 etc; the lick before lickport_entrance cue is -1, the one before it -2, etc +lick_number_relative_to_lickport_exit : int # first lick after the lickport_exit is 0, next one is 1 etc; the lick before lickport_exit cue is -1, the one before it -2, etc +lick_number_with_touch_relative_to_reward=null : int # 1 is first touch, 2 is second lick with touch after reward delivery etc. -1 licks with touch before reward delivery +flag_trial_has_licks_after_lickport_entrance : int # 1 if trial has licks after lickport entrance, 0 if not + + +lick_peak_x=null : double # tongue Medio-Lateral coordinate at the peak of the lick, relative to midline. Left negative, Right positive. Measured based on tongue center +lick_peak_y1=null : double # tongue Anterior-Posterior coordinate at the peak of the lick. Positive is forward. Measured based on tongue tip +lick_peak_y2=null : double # tongue Anterior-Posterior coordinate at the peak of the lick. Positive is forward. Measured based on tongue center +lick_peak_z=null : double # tongue Dorso-Ventral coordinate at the peak of the lick. Positive is downwards. Measured based on tongue tip +lick_peak_yaw=null : double # tongue yaw at the peak of the lick. Left negative, Right positive +lick_peak_yaw_avg_across_licks_with_touch=null : double # tongue yaw at the peak, median across all licks with touch +lick_peak_yaw_avg_across_licks_before_lickportentrance=null :double # tongue yaw at the peak, median across all licks occuring before lickportentrance +lick_peak_yaw_avg_across_licks_after_lickportentrance=null :double # tongue yaw at the peak, median across all licks occuring after lickportentrance + +lick_yaw_lickbout=null : double # tongue yaw averaged (median) during the entire outbound lick, i.e. from onset to peak +lick_yaw_lickbout_avg_across_licks_with_touch=null : double # tongue yaw averaged (median) during the entire outbound lick, i.e. from onset to peaktongue yaw at the peak, median across all licks with touch +lick_yaw_lickbout_avg_across_licks_before_lickportentrance=null : double # median tongue yaw during the entire outbound lick, i.e. from onset to peaktongue yaw at the peak, median across all licks occuring before lickportentrance +lick_yaw_lickbout_avg_across_licks_after_lickportentrance=null : double # median tongue yaw during the entire outbound lick, i.e. from onset to peaktongue yaw at the peak, median across all licks occuring after lickportentrance + +lick_vel_x_lickbout_avg=null : double # median tongue linear velocity during the entire outbound lick, i.e. from onset to peak +lick_vel_y1_lickbout_avg=null : double # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak +lick_vel_y2_lickbout_avg=null : double # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak +lick_vel_z_lickbout_avg=null : double # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak + +lick_time_onset : double # lick onset time, relative to Go cue/ or movinglickport entrance in case lickport is moving +lick_time_onset_relative_firstlick_after_lickportentrance=null :double # for trials in which there were licks after lickport entrance, we measure the onset of all licks in this trial relative to the onset of the first lick after lickport entrance +lick_time_onset_relative_to_trial_start : double # lick onset time, relative to trial start +lick_time_peak : double # lick peak time, relative to Go cue/ or movinglickport entrance in case lickport is moving +lick_duration_total : double # time from onset to end, i.e. complete retraction +lick_time_electric=null : double # electric lick port detection during lickbout, relative to Go cue/ or movinglickport entrance in case lickport is moving + +lick_delta_x=null : double # maximal change in the tongue coordinate during the lick +lick_delta_y1=null : double # maximal change in the tongue coordinate during the lick +lick_delta_y2=null : double # maximal change in the tongue coordinate during the lick +lick_delta_z=null : double # maximal change in the tongue coordinate during the lick + +%} + + +classdef VideoNthLickTrial < dj.Computed + properties + keySource = TRACKING.VideoTongueTrial; + end + methods(Access=protected) + + function makeTuples(self, key) + + + T = fetch(TRACKING.VideoTongueTrial & key,'*'); + + LickportMoving = fetch(TRACKING.VideoLickportTrial & key,'*'); + t_lickport_entrance = LickportMoving.lickport_t_entrance_start; + t_lickport_exit = t_lickport_entrance + LickportMoving.lickport_lickable_duration; + lickport_t_entrance_relative_to_trial_start = LickportMoving.lickport_t_entrance_relative_to_trial_start; + t_reward = fetchn(EXP2.BehaviorTrialEvent & 'trial_event_type="reward"'& key, 'trial_event_time') -lickport_t_entrance_relative_to_trial_start; % relative to lickport entrance + + totalnum_licks = numel(T.licks_peak_x); + if totalnum_licks==0 + return; + end + if sum(isnan(T.licks_peak_y1))>0 + return; + end + licks_time_onset =T.licks_time_onset; + licks_duration_total =T.licks_duration_total; + licks_time_peak = T.licks_time_peak; + t_elect = T.licks_time_electric; + + %finding only electric licks that occured during lickbouts (e.g. not by paw touching the lickport) + idx_electric_during_lick=[]; + if numel(t_elect)>0 + for i_l=1:1:totalnum_licks + idx_electric_during_lick = [idx_electric_during_lick,find( licks_time_onset(i_l)t_elect ,1,'first' )]; + end + end + t_elect = t_elect(idx_electric_during_lick); + + key_insert =repmat(key,1,totalnum_licks); + for i_l=1:1:totalnum_licks + + key_insert(i_l).lick_number = i_l; + + key_insert(i_l).lick_peak_x = T.licks_peak_x(i_l); + key_insert(i_l).lick_peak_y1 = T.licks_peak_y1(i_l); + key_insert(i_l).lick_peak_y2 = T.licks_peak_y2(i_l); + key_insert(i_l).lick_peak_z = T.licks_peak_z(i_l); + key_insert(i_l).lick_peak_yaw = T.licks_peak_yaw(i_l); + + key_insert(i_l).lick_yaw_lickbout = T.licks_yaw_lickbout_avg(i_l); + + key_insert(i_l).lick_vel_x_lickbout_avg = T.licks_vel_x_lickbout_avg(i_l); + key_insert(i_l).lick_vel_y1_lickbout_avg = T.licks_vel_y1_lickbout_avg(i_l); + key_insert(i_l).lick_vel_y2_lickbout_avg = T.licks_vel_y2_lickbout_avg(i_l); + key_insert(i_l).lick_vel_z_lickbout_avg = T.licks_vel_z_lickbout_avg(i_l); + + key_insert(i_l).lick_time_onset = licks_time_onset(i_l); + key_insert(i_l).lick_time_onset_relative_to_trial_start = licks_time_onset(i_l) + lickport_t_entrance_relative_to_trial_start; + key_insert(i_l).lick_time_peak = licks_time_peak(i_l); + key_insert(i_l).lick_duration_total = licks_duration_total(i_l); + + if numel(t_elect)>0 + idx=find(licks_time_onset(i_l)t_elect); + if ~isempty(idx) + key_insert(i_l).lick_time_electric = t_elect(idx); + key_insert(i_l).lick_touch_number = idx; + else + key_insert(i_l).lick_time_electric = NaN; + key_insert(i_l).lick_touch_number = -1; + end + else + key_insert(i_l).lick_time_electric = NaN; + key_insert(i_l).lick_touch_number = -1; + end + + % lick_number_relative_to_firsttouch : double # first lick with touch is 0, the next lick after it (not necessarily with touch) is 1, etc. the last lick before touch is -1, the one before it -2 etc + % lick_number_relative_to_lickport_entrance : double # first lick after the lickport_entrance is 0, next one is 1 etc; the lick before lickport_entrance cue is -1, the one before it -2, etc + % lick_number_relative_to_lickport_exit : double # first lick after the lickport_exit is 0, next one is 1 etc; the lick before lickport_exit cue is -1, the one before it -2, etc + % + key_insert(i_l).lick_delta_x = T.licks_delta_x(i_l); + key_insert(i_l).lick_delta_y1 = T.licks_delta_y1(i_l); + key_insert(i_l).lick_delta_y2 = T.licks_delta_y2(i_l); + key_insert(i_l).lick_delta_z = T.licks_delta_z(i_l); + + end + + for i_l=1:1:totalnum_licks + + if numel(t_elect)>0 + key_insert(i_l).lick_number_relative_to_firsttouch = (i_l) - find([key_insert.lick_touch_number]==1); + else + key_insert(i_l).lick_number_relative_to_firsttouch = NaN; + end + + if ~isempty(find([key_insert.lick_time_onset]>0,1,'first')) + key_insert(i_l).lick_number_relative_to_lickport_entrance = (i_l) - find([key_insert.lick_time_onset]>0,1,'first'); + else + key_insert(i_l).lick_number_relative_to_lickport_entrance = (i_l-1) - totalnum_licks ; + end + + if ~isempty(find([key_insert.lick_time_onset]>t_lickport_exit,1,'first')) + key_insert(i_l).lick_number_relative_to_lickport_exit = (i_l) - find([key_insert.lick_time_onset]>t_lickport_exit,1,'first'); + else + key_insert(i_l).lick_number_relative_to_lickport_exit = (i_l-1)- totalnum_licks ; + end + + end + + for i_l=1:1:totalnum_licks + idx = find([key_insert.lick_number_relative_to_lickport_entrance]==0); + if ~isempty(idx) + key_insert(i_l).flag_trial_has_licks_after_lickport_entrance=1; + key_insert(i_l).lick_time_onset_relative_firstlick_after_lickportentrance= key_insert(i_l).lick_time_onset - key_insert(idx).lick_time_onset; + else + key_insert(i_l).flag_trial_has_licks_after_lickport_entrance=0; + key_insert(i_l).lick_time_onset_relative_firstlick_after_lickportentrance=NaN; + end + end + + for i_l=1:1:totalnum_licks + + if numel(t_elect)>0 + lick_peak_yaw = [key_insert.lick_peak_yaw]; + lick_yaw_lickbout = [key_insert.lick_yaw_lickbout]; + key_insert(i_l).lick_peak_yaw_avg_across_licks_with_touch = ... + nanmedian(lick_peak_yaw(~isnan([key_insert.lick_touch_number]))); + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_with_touch = ... + nanmedian(lick_yaw_lickbout(~isnan([key_insert.lick_touch_number]))); + else + key_insert(i_l).lick_peak_yaw_avg_across_licks_with_touch = NaN; + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_with_touch = NaN; + end + end + + for i_l=1:1:totalnum_licks + idx = find([key_insert.lick_number_relative_to_lickport_entrance]<0); + if sum(idx)>0 + lick_peak_yaw = [key_insert.lick_peak_yaw]; + lick_yaw_lickbout = [key_insert.lick_yaw_lickbout]; + key_insert(i_l).lick_peak_yaw_avg_across_licks_before_lickportentrance = ... + nanmedian(lick_peak_yaw(idx)); + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_before_lickportentrance = ... + nanmedian(lick_yaw_lickbout(idx)); + else + key_insert(i_l).lick_peak_yaw_avg_across_licks_before_lickportentrance = NaN; + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_before_lickportentrance = NaN; + end + end + + for i_l=1:1:totalnum_licks + idx = find([key_insert.lick_number_relative_to_lickport_entrance]>=0); + if sum(idx)>0 + lick_peak_yaw = [key_insert.lick_peak_yaw]; + lick_yaw_lickbout = [key_insert.lick_yaw_lickbout]; + key_insert(i_l).lick_peak_yaw_avg_across_licks_after_lickportentrance = ... + nanmedian(lick_peak_yaw(idx)); + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_after_lickportentrance = ... + nanmedian(lick_yaw_lickbout(idx)); + else + key_insert(i_l).lick_peak_yaw_avg_across_licks_after_lickportentrance = NaN; + key_insert(i_l).lick_yaw_lickbout_avg_across_licks_after_lickportentrance = NaN; + end + end + + counter_post_reward=1; + for i_l=1:1:totalnum_licks + if key_insert(i_l).lick_touch_number>-1 & key_insert(i_l).lick_time_electric>=t_reward + key_insert(i_l).lick_number_with_touch_relative_to_reward=counter_post_reward; + counter_post_reward=counter_post_reward+1; + else + key_insert(i_l).lick_number_with_touch_relative_to_reward=-1; + end + end + + insert(self,key_insert) + end + end +end + diff --git a/DataJoint/+TRACKING/VideoTongueTrial.m b/DataJoint/+TRACKING/VideoTongueTrial.m new file mode 100644 index 0000000..0d26dea --- /dev/null +++ b/DataJoint/+TRACKING/VideoTongueTrial.m @@ -0,0 +1,995 @@ +%{ +# units are in mm, deg, and seconds. This code parse tongue trajectory into individual licks. It also populates trajectories of other body parts +-> EXP2.BehaviorTrial +--- + +licks_peak_x = null : blob # tongue Medio-Lateral coordinate at the peak of the lick, relative to midline. Left negative, Right positive. Measured based on tongue center +licks_peak_y1 = null : blob # tongue Anterior-Posterior coordinate at the peak of the lick. Positive is forward. Measured based on tongue tip +licks_peak_y2 = null : blob # tongue Anterior-Posterior coordinate at the peak of the lick. Positive is forward. Measured based on tongue center +licks_peak_z = null : blob # tongue Dorso-Ventral coordinate at the peak of the lick. Positive is downwards. Measured based on tongue tip +licks_peak_yaw = null : blob # tongue yaw at the peak of the lick. Left negative, Right positive + +licks_yaw_lickbout_avg = null : blob # median tongue yaw during the entire outbound lick, i.e. from onset to peak + +licks_vel_x_lickbout_avg = null : blob # median tongue linear velocity during the entire outbound lick, i.e. from onset to peak +licks_vel_y1_lickbout_avg = null : blob # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak +licks_vel_y2_lickbout_avg = null : blob # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak +licks_vel_z_lickbout_avg = null : blob # median tongue angular velocity during the entire outbound lick, i.e. from onset to peak + +licks_time_onset = null : blob # lick onset time, lick onset time, relative to Go cue/ or movinglickport entrance in case lickport is moving +licks_time_peak = null : blob # lick peak time, lick onset time, relative to Go cue/ or movinglickport entrance in case lickport is moving +licks_duration_total = null : blob # time from onset to end, i.e. complete retraction +licks_time_electric = null : blob # timings of electric lick port detection, lick onset time, relative to Go cue/ or movinglickport entrance in case lickport is moving + +licks_delta_x = null : blob # maximal change in the tongue coordinate during the lick +licks_delta_y1 = null : blob # maximal change in the tongue coordinate during the lick +licks_delta_y2 = null : blob # maximal change in the tongue coordinate during the lick +licks_delta_z = null : blob # maximal change in the tongue coordinate during the lick + + +%} + +classdef VideoTongueTrial < dj.Computed + properties + keySource = (EXP2.Session & TRACKING.VideoFiducialsTrial) ; + end + methods(Access=protected) + + function makeTuples(self, key) + + % Rig specific settings + %-------------------------------------------------------------- + k_camera1.tracking_device_id = 3; %side camera + k_camera2.tracking_device_id = 4; %bottom (or top/front) camera + side_camera_facing = 'left'; %'left' or 'right' mouse-facing direction as seen from the side view camera + bottom_or_front_camera_facing = 'up'; %'up' or 'down' mouse-facing direction as seen from the front/bottom view camera + % For the Mesoscope (Camera tracking_device_id =4, front) we set mouse-facing direction to 'up', because after intital clockwise 90 rotation in TRACKING.VideoFiducialsTrial the mouse appears to face 'up' + reverse_cam2_x = -1; % '-1' left/right flip along the midline' '1' - no flip + + camera1_pixels_to_mm = 1; %% UPDATE + camera2_pixels_to_mm=1; %% UPDATE + flag_moving_lickport = 1; % 1 in case of moving lickport, 0 othewise. In case of moving lickport time would be aligned to moving lickport onset, otherwise to Go cue + + % Analysis Parameters + %-------------------------------------------------------------- + flag_plot=1; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\video_tracking\']; + + p_threshold =0.99999; + MinPeakInterval=0.075; %minimal time interval between peaks (licks) in time (seconds) + MinPeakProminence=5; %pixels + tinterval_lickport_lickable =[0.5 1.5]; % (s) time interval in which we expect to see the lickport in lickable position (in case its a moving lickport). It doesn't have to be the full time interval + smooth_velocity_frames = 3; %smoothing the trajectory for velocity calculation + smooth_interpolation_frames=3; % we use it to interpolate between missing frames, typically 1 missing frame due to occlusion. We use it only to measure values at peak of the lick + smooth_window_whiskers=3; %whiskers detection is noisy, and we therefore smooth it + + %grooming detection, based on side view camera + grooming_x_threshold =0; %if paws are in the specified by quandrant location grooming_x_threshold, grooming_y_threshold we will consider it to be a grooming frame + grooming_y_threshold =50; + minimal_num_grooming_frames=25; %if there are more than this number of grooming frames, this trial would be considered as grooming trial + + %------------------------------------------------------------------------------------------------------------- + + + % Graphics for plotting + close all; + if flag_plot==1 + figure1=figure; + set(gcf,'DefaultAxesFontName','helvetica'); + set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 7 21 21]); + set(gcf,'PaperOrientation','portrait'); + set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 -10 0 0]); + end + + panel_width1=0.3; + panel_height1=0.065; + + panel_width2=0.14; + panel_height2=0.15; + + horizontal_distance1=0.4; + vertical_distance1=0.10; + + horizontal_distance2=0.18; + vertical_distance2=0.25; + + position_x1(1)=0.07; + position_x1(2)=position_x1(1)+horizontal_distance1; + + position_y1(1)=0.85; + position_y1(2)=position_y1(1)-vertical_distance1; + position_y1(3)=position_y1(2)-vertical_distance1; + position_y1(4)=position_y1(3)-vertical_distance1; + position_y1(5)=position_y1(4)-vertical_distance1; + position_y1(6)=position_y1(5)-vertical_distance1; + position_y1(7)=position_y1(6)-vertical_distance1; + position_y1(8)=position_y1(7)-vertical_distance1; + position_y1(9)=position_y1(8)-vertical_distance1; + + position_x2(1)=0.42; + position_x2(2)=position_x2(1)+horizontal_distance2; + position_x2(3)=position_x2(2)+horizontal_distance2; + + position_y2(1)=0.8; + position_y2(2)=position_y2(1)-vertical_distance2; + position_y2(3)=position_y2(2)-vertical_distance2; + position_y2(4)=position_y2(3)-vertical_distance2; + position_y2(5)=position_y2(4)-vertical_distance2; + position_y2(6)=position_y2(5)-vertical_distance2; + + %% Fetching trial and camera information + rel_behavior_trial = (EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"') - TRACKING.TrackingTrialBad ; + rel_video_trial = (TRACKING.TrackingTrial & key & k_camera1) - TRACKING.TrackingTrialBad ; + + if rel_video_trial.count==0 + return + end + + rel_fiducials_trial_cam1 = (TRACKING.VideoFiducialsTrial & key & k_camera1) - TRACKING.TrackingTrialBad ; + rel_fiducials_session_cam1 =(TRACKING.VideoFiducialsSessionAvg & key & k_camera1); + + rel_fiducials_trial_cam2 = (TRACKING.VideoFiducialsTrial & key & k_camera2) - TRACKING.TrackingTrialBad ; + rel_fiducials_session_cam2 =(TRACKING.VideoFiducialsSessionAvg & key & k_camera2); + + + time_go = fetchn(rel_behavior_trial ,'trial_event_time','ORDER BY trial'); %relative to trial start + tracking_start_time = fetchn(rel_video_trial ,'tracking_start_time','ORDER BY trial'); % relative to trial start + num_frames = fetchn(rel_video_trial ,'tracking_num_samples','ORDER BY trial'); + tracking_datafile_num = fetchn(rel_video_trial ,'tracking_datafile_num','ORDER BY trial'); + tracking_datafile_path = fetchn(rel_video_trial ,'tracking_datafile_path','ORDER BY trial'); + + trials = fetchn(rel_behavior_trial ,'trial','ORDER BY trial'); %relative to trial start + frame_rate = fetch1(rel_video_trial ,'tracking_sampling_rate','LIMIT 1'); + + MinPeakInterval = MinPeakInterval*frame_rate; + + %% Fiducial Tongue + num=1; + k.video_fiducial_name='TongueTip'; %from Camera1 + switch side_camera_facing + case 'left' + offset_cam1_x = fetchn(rel_fiducials_session_cam1& k,'fiduical_x_max_session'); + reverse_cam1_x = -1 ; %reverse + case 'right' + offset_cam1_x = fetchn(rel_fiducials_session_cam1& k,'fiduical_x_min_session'); + reverse_cam1_x = 1; % no reverse + end + offset_cam1_y = fetchn(rel_fiducials_session_cam1 & k,'fiduical_y_min_session'); + reverse_cam1_y=1; % no reverse + + + num=2; + k.video_fiducial_name='TongueTip'; %from Camera2 + offset_cam2_x = fetchn(rel_fiducials_session_cam2 & k,'fiduical_x_median_session'); + switch bottom_or_front_camera_facing + case 'up' + offset_cam2_y = fetchn(rel_fiducials_session_cam2& k,'fiduical_y_max_session'); + reverse_cam2_y = -1 ; %reverse + case 'down' + offset_cam2_y = fetchn(rel_fiducials_session_cam2& k,'fiduical_y_min_session'); + reverse_cam2_y = 1 ; % no reverse + end + fSession=[]; + fTrial=[]; + + + %Camera 1 + num=0; + + camera_num = 1; + fiducial_names = fetchn(TRACKING.VideoFiducialsType & k_camera1,'video_fiducial_name'); + for i_f = 1:1:numel(fiducial_names) + num = num+1; + k.video_fiducial_name = fiducial_names{i_f}; + [fSession,fTrial] = fn_TRACKING_extract_and_center_fiducials (fSession, fTrial, rel_fiducials_session_cam1, rel_fiducials_trial_cam1, k, num, offset_cam1_x, offset_cam1_y, reverse_cam1_x, reverse_cam1_y,camera_num, camera1_pixels_to_mm, p_threshold); + end + + %Camera 2 + camera_num = 2; + fiducial_names = fetchn(TRACKING.VideoFiducialsType & k_camera2,'video_fiducial_name'); + for i_f = 1:1:numel(fiducial_names) + num = num+1; + k.video_fiducial_name = fiducial_names{i_f}; + [fSession,fTrial] = fn_TRACKING_extract_and_center_fiducials (fSession, fTrial, rel_fiducials_session_cam2, rel_fiducials_trial_cam2, k, num, offset_cam2_x, offset_cam2_y, reverse_cam2_x, reverse_cam2_y,camera_num, camera2_pixels_to_mm, p_threshold); + end + + + + + %% Looping over individual trials + % Number of trials, filenames etc. + key.session_date=fetch1(EXP2.Session & key,'session_date'); + insert_key_grooming=[]; + insert_key_lickport = []; + insert_key_trajectory_tongue = []; + insert_key_trajectory_whiskers= []; + insert_key_trajectory_PawLeft= []; + insert_key_trajectory_PawRight= []; + insert_key_trajectory_NOSE=[]; + insert_key_trajectory_JAW=[]; + insert_key_lickport_position=[]; + + for ii =1:1:numel(trials) + + + insert_key_licks(ii).subject_id = key.subject_id; + insert_key_licks(ii).session = key.session; + insert_key_licks(ii).trial = trials(ii); + + % time vector + t_relative_trial_start = [0:(1/frame_rate): (num_frames(ii)-1)/frame_rate] + tracking_start_time(ii); + t =t_relative_trial_start- time_go(ii); % relative to Go cue. We will set it later relative to lickport move onset, in case of moving lickport + + + %% Extracting lickport entrance/exit timing, in case there was a moving lickport + if flag_moving_lickport ==1 + time_label = 'Time from Lickport move (s)'; + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','lickport')'); + LICKPORT_AP_Cam1 = fTrial(num1).x{ii}; + LICKPORT_Z_Cam1 = fTrial(num1).y{ii}; + + + LICKPORT_Z_Cam1_smoothed = smooth(LICKPORT_Z_Cam1,5); % we smooth only for estimation of tongue entrance/exit timing + + + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','lickport')'); + LICKPORT_ML_Cam2 = fTrial(num2).x{ii}; + LICKPORT_AP_Cam2 = fTrial(num2).y{ii}; + + idx_lickport_in = t>=tinterval_lickport_lickable(1) & t0) < (Z_lickport_before -(Z_lickport_before - Z_lickport_in)*0.2),1,'first') + find(t>0,1,'first')-1; + idx_lickport_t_entrance_end = find(LICKPORT_Z_Cam1_smoothed(t>0)< (Z_lickport_in +(Z_lickport_before - Z_lickport_in)*0.2),1,'first') + find(t>0,1,'first')-1; + idx_lickport_t_exit_start = find(LICKPORT_Z_Cam1_smoothed(t>1)> (Z_lickport_in +(Z_lickport_before - Z_lickport_in)*0.2),1,'first') + find(t>1,1,'first'); + idx_lickport_t_exit_end = find(LICKPORT_Z_Cam1_smoothed(t>1)> (Z_lickport_before -(Z_lickport_before - Z_lickport_in)*0.2),1,'first') + + find(t>1,1,'first'); + + lickport_t_entrance_avg = nanmean([t(idx_lickport_t_entrance_start);t(idx_lickport_t_entrance_end)]); + + insert_key_lickport(ii).subject_id = key.subject_id; + insert_key_lickport(ii).session = key.session; + insert_key_lickport(ii).trial = trials(ii); + insert_key_lickport(ii).lickport_t_entrance = lickport_t_entrance_avg; + insert_key_lickport(ii).lickport_t_entrance_relative_to_trial_start = lickport_t_entrance_avg + time_go(ii); + insert_key_lickport(ii).lickport_t_entrance_start = t(idx_lickport_t_entrance_start); + insert_key_lickport(ii).lickport_t_entrance_end = t(idx_lickport_t_entrance_end); + + insert_key_lickport(ii).lickport_lickable_duration = nanmean([t(idx_lickport_t_exit_start);t(idx_lickport_t_exit_end)]) - lickport_t_entrance_avg; + else + lickport_t_entrance_avg=0; + time_label = 'Time from Go cue (s)'; + end + + + idx_lickport_lickable = idx_lickport_t_entrance_start:1:idx_lickport_t_exit_start; + + %% Lickport averge positon + insert_key_lickport_position (ii).subject_id = key.subject_id; + insert_key_lickport_position(ii).session = key.session; + insert_key_lickport_position(ii).trial = trials(ii); + insert_key_lickport_position(ii).lickport_x = nanmedian(LICKPORT_ML_Cam2(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_y1 = nanmedian(LICKPORT_AP_Cam1(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_y2 = nanmedian(LICKPORT_AP_Cam2(idx_lickport_lickable)); + insert_key_lickport_position(ii).lickport_z = nanmedian(LICKPORT_Z_Cam1(idx_lickport_lickable)); + + + LICKPORT_Z_Cam1_mean(ii) = nanmedian(LICKPORT_Z_Cam1(idx_lickport_lickable)); + LICKPORT_AP_Cam1_mean(ii) = nanmedian(LICKPORT_AP_Cam1(idx_lickport_lickable)); + LICKPORT_ML_Cam2_mean(ii) = nanmedian(LICKPORT_ML_Cam2(idx_lickport_lickable)); + LICKPORT_AP_Cam2_mean(ii) = nanmedian(LICKPORT_AP_Cam2(idx_lickport_lickable)); + + + + + % Extracting lick times based on electric lick port + k.trial=trials(ii); + licks_time_electric = [sort(fetchn(EXP2.BehaviorTrial * EXP2.ActionEvent * EXP2.Session & key & k,'action_event_time'))-time_go(ii)]' - lickport_t_entrance_avg; %relative to Go cue or to moving lickport onset, in case of moving lickport + + % defining time 0 relative to lickport move onset, in case of moving lickport + t= t - lickport_t_entrance_avg; + + + + + %% Extracting Whiskers based on Camera0 (side view) + % We do it based on average of three fiducials, corresponding to thee whiskers( anterior, medial, and posterior whiskers) + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','W1')'); + WHISKERS_idx_P_f1 = fTrial(num1).p{ii}>=p_threshold; + num2=find([fTrial.camera]==1 & strcmp({fTrial.label}','W2')'); + WHISKERS_idx_P_f2 = fTrial(num2).p{ii}>=p_threshold; + num3=find([fTrial.camera]==1 & strcmp({fTrial.label}','W3')'); + WHISKERS_idx_P_f3 = fTrial(num3).p{ii}>=p_threshold; + + WHISKERS_idx_P = WHISKERS_idx_P_f1 & WHISKERS_idx_P_f2 & WHISKERS_idx_P_f3; + + WHISKERS_AP_Cam1 = nanmean([fTrial(num1).x{ii}'; fTrial(num2).x{ii}';fTrial(num3).x{ii}']); + WHISKERS_AP_Cam1(~WHISKERS_idx_P)=NaN; + WHISKERS_AP_Cam1=smooth(WHISKERS_AP_Cam1,smooth_window_whiskers); + WHISKERS_AP_Cam1(~WHISKERS_idx_P)=NaN; + + WHISKERS_Z_Cam1 = nanmean([fTrial(num1).y{ii}'; fTrial(num2).y{ii}';fTrial(num3).y{ii}']); + WHISKERS_Z_Cam1(~WHISKERS_idx_P)=NaN; + WHISKERS_Z_Cam1=smooth(WHISKERS_Z_Cam1,smooth_window_whiskers); + WHISKERS_Z_Cam1(~WHISKERS_idx_P)=NaN; + + % populating bodypart trajectory for the whiskers + insert_key_trajectory_whiskers (ii).subject_id = key.subject_id; + insert_key_trajectory_whiskers(ii).session = key.session; + insert_key_trajectory_whiskers(ii).trial = trials(ii); + insert_key_trajectory_whiskers(ii).bodypart_name= 'whiskers'; + insert_key_trajectory_whiskers(ii).traj_x = NaN; + insert_key_trajectory_whiskers(ii).traj_y1 = WHISKERS_AP_Cam1; + insert_key_trajectory_whiskers(ii).traj_y2 = NaN; + insert_key_trajectory_whiskers(ii).traj_z = WHISKERS_Z_Cam1; + insert_key_trajectory_whiskers(ii).time_first_frame = t(1); + + + %% Extracting Left Front Paw + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawL')'); + idx_P = fTrial(num1).p{ii}>=p_threshold; + PAWleft_AP_Cam1 = [fTrial(num1).x{ii}]; + PAWleft_AP_Cam1(~idx_P)=NaN; + PAWleft_Z_Cam1 = [fTrial(num1).y{ii}]; + PAWleft_Z_Cam1(~idx_P)=NaN; + + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','PawL')'); + idx_P = fTrial(num2).p{ii}>=p_threshold; + PAWleft_ML_Cam2= [fTrial(num2).x{ii}]; + PAWleft_ML_Cam2(~idx_P)=NaN; + PAWleft_AP_Cam2= [fTrial(num2).y{ii}]; + PAWleft_AP_Cam2(~idx_P)=NaN; + + % populating bodypart trajectory for the whiskers + insert_key_trajectory_PawLeft (ii).subject_id = key.subject_id; + insert_key_trajectory_PawLeft(ii).session = key.session; + insert_key_trajectory_PawLeft(ii).trial = trials(ii); + insert_key_trajectory_PawLeft(ii).bodypart_name= 'pawfrontleft'; + insert_key_trajectory_PawLeft(ii).traj_x = PAWleft_ML_Cam2; + insert_key_trajectory_PawLeft(ii).traj_y1 = PAWleft_AP_Cam1; + insert_key_trajectory_PawLeft(ii).traj_y2 = PAWleft_AP_Cam2; + insert_key_trajectory_PawLeft(ii).traj_z = PAWleft_Z_Cam1; + insert_key_trajectory_PawLeft(ii).time_first_frame = t(1); + + %% Extracting Right Front Paw + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawR')'); + idx_P = fTrial(num1).p{ii}>=p_threshold; + PAWright_AP_Cam1 = [fTrial(num1).x{ii}]; + PAWright_AP_Cam1(~idx_P)=NaN; + PAWright_Z_Cam1 = [fTrial(num1).y{ii}]; + PAWright_Z_Cam1(~idx_P)=NaN; + + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','PawR')'); + idx_P = fTrial(num2).p{ii}>=p_threshold; + PAWright_ML_Cam2= [fTrial(num2).x{ii}]; + PAWright_ML_Cam2(~idx_P)=NaN; + PAWright_AP_Cam2= [fTrial(num2).y{ii}]; + PAWright_AP_Cam2(~idx_P)=NaN; + + % populating bodypart trajectory for the whiskers + insert_key_trajectory_PawRight (ii).subject_id = key.subject_id; + insert_key_trajectory_PawRight(ii).session = key.session; + insert_key_trajectory_PawRight(ii).trial = trials(ii); + insert_key_trajectory_PawRight(ii).bodypart_name= 'pawfrontright'; + insert_key_trajectory_PawRight(ii).traj_x = PAWright_ML_Cam2; + insert_key_trajectory_PawRight(ii).traj_y1 = PAWright_AP_Cam1; + insert_key_trajectory_PawRight(ii).traj_y2 = PAWright_AP_Cam2; + insert_key_trajectory_PawRight(ii).traj_z = PAWright_Z_Cam1; + insert_key_trajectory_PawRight(ii).time_first_frame = t(1); + + + %% Finding if there was grooming during the trial, based on side view + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawL')'); + num2=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawR')'); + num_grooming_frames= sum((fTrial(num1).x{ii}>grooming_x_threshold & fTrial(num1).y{ii}grooming_x_threshold & fTrial(num2).y{ii} minimal_num_grooming_frames + counter = numel(insert_key_grooming)+1; + insert_key_grooming(counter).subject_id = key.subject_id; + insert_key_grooming(counter).session = key.session; + insert_key_grooming(counter).trial = trials(ii); + end + + + + + %% Extracting nose + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','nosetip')'); + NOSE_idx_P_Cam1 = fTrial(num1).p{ii}>=p_threshold; + + NOSE_AP_Cam1 = [fTrial(num1).x{ii}]; + NOSE_AP_Cam1(~NOSE_idx_P_Cam1)=NaN; + + NOSE_Z_Cam1 = [fTrial(num1).y{ii}]; + NOSE_Z_Cam1(~NOSE_idx_P_Cam1)=NaN; + + % populating bodypart trajectory for the whiskers + insert_key_trajectory_NOSE (ii).subject_id = key.subject_id; + insert_key_trajectory_NOSE(ii).session = key.session; + insert_key_trajectory_NOSE(ii).trial = trials(ii); + insert_key_trajectory_NOSE(ii).bodypart_name= 'nose'; + insert_key_trajectory_NOSE(ii).traj_x = NaN; + insert_key_trajectory_NOSE(ii).traj_y1 = NOSE_AP_Cam1; + insert_key_trajectory_NOSE(ii).traj_y2 = NaN; + insert_key_trajectory_NOSE(ii).traj_z = NOSE_Z_Cam1; + insert_key_trajectory_NOSE(ii).time_first_frame = t(1); + + + + + %% Extracting jaw + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','jaw')'); + JAW_idx_P_Cam1 = fTrial(num1).p{ii}>=p_threshold; + + JAW_AP_Cam1 = [fTrial(num1).x{ii}]; + JAW_AP_Cam1(~JAW_idx_P_Cam1)=NaN; + + JAW_Z_Cam1 = [fTrial(num1).y{ii}]; + JAW_Z_Cam1(~JAW_idx_P_Cam1)=NaN; + + % populating bodypart trajectory for the whiskers + insert_key_trajectory_JAW (ii).subject_id = key.subject_id; + insert_key_trajectory_JAW(ii).session = key.session; + insert_key_trajectory_JAW(ii).trial = trials(ii); + insert_key_trajectory_JAW(ii).bodypart_name= 'jaw'; + insert_key_trajectory_JAW(ii).traj_x = NaN; + insert_key_trajectory_JAW(ii).traj_y1 = JAW_AP_Cam1; + insert_key_trajectory_JAW(ii).traj_y2 = NaN; + insert_key_trajectory_JAW(ii).traj_z = JAW_Z_Cam1; + insert_key_trajectory_JAW(ii).time_first_frame = t(1); + + + + %% Extracting tongue coordinates + % Extracting coordinates based on Camera1 (side view) + num=find([fTrial.camera]==1 & strcmp({fTrial.label}','TongueTip')'); + TONGUE_idx_P_Cam1 = fTrial(num).p{ii}>=p_threshold; + TONGUE_AP_Cam1= fTrial(num).x{ii}'; + TONGUE_Z_Cam1 = fTrial(num).y{ii}'; + + + % Extracting coordinates based on Camera2 (bottom/top view) + % We do it based on average of two fiducials, corresponding to the right and left edges of the tongue, and only if both are seen + num1=find([fTrial.camera]==2 & strcmp({fTrial.label}','LFtongue')'); + TONGUE_idx_P_Cam2_f1 = fTrial(num1).p{ii}>=p_threshold; + + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','RFtongue')'); + TONGUE_idx_P_Cam2_f2 = fTrial(num2).p{ii}>=p_threshold; + + TONGUE_idx_P_Cam2 = TONGUE_idx_P_Cam2_f1 & TONGUE_idx_P_Cam2_f2; + TONGUE_ML_Cam2= nanmean([fTrial(num1).x{ii}'; fTrial(num2).x{ii}']); + TONGUE_AP_Cam2 = nanmean([fTrial(num1).y{ii}'; fTrial(num2).y{ii}']); + + + + % Setting frames in which the tongue was not seen to NaN, + % its also done in fn_TRACKING_extract_and_center_fiducials for every fiducial + TONGUE_AP_Cam1(~TONGUE_idx_P_Cam1)=NaN; + TONGUE_Z_Cam1(~TONGUE_idx_P_Cam1)=NaN; + + TONGUE_ML_Cam2(~TONGUE_idx_P_Cam2 | ~TONGUE_idx_P_Cam1)=NaN; + TONGUE_AP_Cam2(~TONGUE_idx_P_Cam2 | ~TONGUE_idx_P_Cam1)=NaN; + + + % %For debug + % hold on + % plot(t,TONGUE_AP_Cam1,'-b') + % plot(t,TONGUE_Z_Cam1,'-g') + % plot(t,TONGUE_AP_Cam2,'-c') + % plot(t,TONGUE_ML_Cam2,'-r') + + % Computing trajectory kinematics based on video finding tongue angle, amplitude and vel + [tongue_yaw, ~] = cart2pol(TONGUE_ML_Cam2,TONGUE_AP_Cam2); + tongue_yaw=rad2deg(tongue_yaw)-90; + tongue_vel_x = [0,diff(smoothdata(TONGUE_ML_Cam2,'gaussian',smooth_velocity_frames,'omitnan'))]; + tongue_vel_y1 = [0,diff(smoothdata(TONGUE_AP_Cam1,'gaussian',smooth_velocity_frames,'omitnan'))]; + tongue_vel_y2 = [0,diff(smoothdata(TONGUE_AP_Cam2,'gaussian',smooth_velocity_frames,'omitnan'))]; + tongue_vel_z = [0,diff(smoothdata(TONGUE_Z_Cam1,'gaussian',smooth_velocity_frames,'omitnan'))]; + + + % populating bodypart trajectory for the tongue + insert_key_trajectory_tongue (ii).subject_id = key.subject_id; + insert_key_trajectory_tongue(ii).session = key.session; + insert_key_trajectory_tongue(ii).trial = trials(ii); + insert_key_trajectory_tongue(ii).bodypart_name= 'tongue'; + insert_key_trajectory_tongue(ii).traj_x = TONGUE_ML_Cam2; + insert_key_trajectory_tongue(ii).traj_y1 = TONGUE_AP_Cam1; + insert_key_trajectory_tongue(ii).traj_y2 = TONGUE_AP_Cam2; + insert_key_trajectory_tongue(ii).traj_z = TONGUE_Z_Cam1; + insert_key_trajectory_tongue(ii).time_first_frame = t(1); + + + + + + %% Parsing trajectory into individual licks bouts, only in case there were licks + + % Finding peak of individual lick bouts + xxx = TONGUE_Z_Cam1; + xxx(isnan(TONGUE_Z_Cam1))=0; + [~,idx_licks_peak, halfwidth] = findpeaks(xxx, 'MinPeakDistance',MinPeakInterval,'MinPeakProminence',MinPeakProminence,'WidthReference','halfheight'); + idx_licks_peak(halfwidth==1)=[]; % remove if peak is too narrow (i.e. the lick was too short) + + % Finding onset of individual lick bouts + idx_licks_onset=[]; + for ip = 1:1:numel(idx_licks_peak) + temp = find(isnan(TONGUE_Z_Cam1(1:idx_licks_peak(ip))),1,'last') +1; + if isempty(temp) + idx_licks_onset(ip)=1; + else + idx_licks_onset(ip) = temp; + end + end + + idx_too_short = (idx_licks_peak==idx_licks_onset); % remove if peak is too narrow + idx_licks_peak(idx_too_short)=[]; + idx_licks_onset(idx_too_short)=[]; + + idx_same_onset = find(diff(idx_licks_onset)==0) +1; % in case the tongue was not fully inserted back into the mouth in between licks + for io = 1:1:numel(idx_same_onset) + [~,idx_temp_min]= min(TONGUE_Z_Cam1(idx_licks_peak(idx_same_onset(io)-1):idx_licks_peak(idx_same_onset(io)))); + idx_licks_onset(idx_same_onset(io)) = idx_licks_peak(idx_same_onset(io)-1) +idx_temp_min; + end + + + + if isempty(idx_licks_peak) % in case there were no licks + continue; + end + + + % Finding the end of individual lick bouts + idx_licks_end=[]; + for ip = 1:1:numel(idx_licks_peak) + temp = find(isnan(TONGUE_Z_Cam1(idx_licks_peak(ip):end)),1,'first') + idx_licks_peak(ip) -2; + if isempty(temp) + idx_licks_end(ip)=numel(TONGUE_Z_Cam1); + else + idx_licks_end(ip) = temp; + end + end + + + idx_same_end = find(diff(idx_licks_end)==0); % in case the tongue was not fully inserted back into the mouth in between licks + for ie = 1:1:numel(idx_same_end) + idx_licks_end(idx_same_end(ie)) = idx_licks_onset(idx_same_end(ie)+1) -1; + end + + + idx_noearly_licks= (t(idx_licks_onset)>0); + + + %% Lick timings + %---------------------------------------------------------- + licks_time_onset = t(idx_licks_onset)'; + licks_time_peak = t(idx_licks_peak)'; + licks_duration_total = t(idx_licks_end)' - t(idx_licks_onset)'; + + + %% Angle and velocity averaged (median) for the entire outbound lick trajectory, i.e. from onset to peak + % also maximal change in tongue coordinates during each lick (from onset to full retraction) + %---------------------------------------------------------- + licks_yaw_avg=[]; + licks_vel_x_avg=[]; + licks_vel_y1_avg=[]; + licks_vel_y2_avg=[]; + licks_vel_z_avg=[]; + licks_delta_x=[]; + licks_delta_y1=[]; + licks_delta_y2=[]; + licks_delta_z=[]; + + for ll=1:1:numel(idx_licks_peak) + idx_outbound_lick=idx_licks_onset(ll):idx_licks_peak(ll); + idx_full_lick=idx_licks_onset(ll):idx_licks_end(ll); + + licks_yaw_avg(ll)=nanmedian(tongue_yaw(idx_outbound_lick)); + licks_vel_x_avg(ll)=nanmedian(tongue_vel_x(idx_outbound_lick)); + licks_vel_y1_avg(ll)=nanmedian(tongue_vel_y1(idx_outbound_lick)); + licks_vel_y2_avg(ll)=nanmedian(tongue_vel_y2(idx_outbound_lick)); + licks_vel_z_avg(ll)=nanmedian(tongue_vel_z(idx_outbound_lick)); + + licks_delta_x(ll)=nanmax(TONGUE_ML_Cam2(idx_full_lick)) - nanmin(TONGUE_ML_Cam2(idx_full_lick)); + licks_delta_y1(ll)=nanmax(TONGUE_AP_Cam1(idx_full_lick)) - nanmin(TONGUE_AP_Cam1(idx_full_lick)); + licks_delta_y2(ll)=nanmax(TONGUE_AP_Cam2(idx_full_lick)) - nanmin(TONGUE_AP_Cam2(idx_full_lick)); + licks_delta_z(ll)=nanmax(TONGUE_Z_Cam1(idx_full_lick)) - nanmin(TONGUE_Z_Cam1(idx_full_lick)); + + end + + %% Insert into structure + %parsed by licks + + xxx=smooth(TONGUE_ML_Cam2,smooth_interpolation_frames); % this is done to interpolate in case there are missing frames at the peak + insert_key_licks(ii).licks_peak_x = xxx(idx_licks_peak)'; + + xxx=smooth(TONGUE_AP_Cam1,smooth_interpolation_frames); % this is done to interpolate in case there are missing frames at the peak + insert_key_licks(ii).licks_peak_y1 = xxx(idx_licks_peak)'; + + xxx=smooth(TONGUE_AP_Cam2,smooth_interpolation_frames); % this is done to interpolate in case there are missing frames at the peak + insert_key_licks(ii).licks_peak_y2 = xxx(idx_licks_peak)'; + + xxx=smooth(TONGUE_Z_Cam1,smooth_interpolation_frames); % this is done to interpolate in case there are missing frames at the peak + insert_key_licks(ii).licks_peak_z = xxx(idx_licks_peak)'; + + xxx=smooth(tongue_yaw,smooth_interpolation_frames); % this is done to interpolate in case there are missing frames at the peak + insert_key_licks(ii).licks_peak_yaw = xxx(idx_licks_peak)'; + + insert_key_licks(ii).licks_yaw_lickbout_avg = licks_yaw_avg'; + insert_key_licks(ii).licks_vel_x_lickbout_avg = licks_vel_x_avg'; + insert_key_licks(ii).licks_vel_y1_lickbout_avg = licks_vel_y1_avg'; + insert_key_licks(ii).licks_vel_y2_lickbout_avg = licks_vel_y2_avg'; + insert_key_licks(ii).licks_vel_z_lickbout_avg = licks_vel_z_avg'; + + insert_key_licks(ii).licks_time_onset = licks_time_onset; + insert_key_licks(ii).licks_time_peak = licks_time_peak; + insert_key_licks(ii).licks_duration_total = licks_duration_total; + insert_key_licks(ii).licks_time_electric = licks_time_electric; + + insert_key_licks(ii).licks_delta_x = licks_delta_x'; + insert_key_licks(ii).licks_delta_y1 = licks_delta_y1'; + insert_key_licks(ii).licks_delta_y2 = licks_delta_y2'; + insert_key_licks(ii).licks_delta_z = licks_delta_z'; + + + + + + %% Plot + if flag_plot==1 + + %% Time series, entire trial + xl=[t(1) t(end)]; + + + %Tongue Z axis Camera1 + xxx = TONGUE_Z_Cam1; + axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + hold on; + plot(t,xxx,'-b'); + if ~isempty(licks_time_electric) + plot(licks_time_electric, interp1(t,xxx,licks_time_electric),'og','LineWidth',1) + end + xlim(xl); + plot(t(idx_licks_peak),xxx(idx_licks_peak),'xr','LineWidth',1); + plot(t(idx_licks_onset),xxx(idx_licks_onset),'xk','LineWidth',1); + plot(t(idx_licks_end),xxx(idx_licks_end),'x','LineWidth',1,'Color',[0.5 0.5 0.5]); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Tongue D-V\nSide (px)')); + title(sprintf('ANM%d %s Session %d Trial %d Video %d \n',key.subject_id,key.session_date, key.session, trials(ii), tracking_datafile_num(ii))) + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); + ylim([ fSession(num).y_min , fSession(num).y_max*1.25 ]); + % ylim([0,50]); + + %Tongue A-P axis Camera1 + xxx = TONGUE_AP_Cam1; + axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); + hold on; + plot(t,xxx,'-b'); + if ~isempty(licks_time_electric) + plot(licks_time_electric, interp1(t,xxx,licks_time_electric),'og','LineWidth',1) + end + xlim(xl); + plot(t(idx_licks_peak),xxx(idx_licks_peak),'xr','LineWidth',1); + plot(t(idx_licks_onset),xxx(idx_licks_onset),'xk','LineWidth',1); + plot(t(idx_licks_end),xxx(idx_licks_end),'x','LineWidth',1,'Color',[0.5 0.5 0.5]); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Tongue A-P\nSide (px)')); + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); + ylim([ fSession(num).x_min , fSession(num).x_max*1.25 ]); + % ylim([0,50]); + + %Tongue M-L axis Camera2 + xxx = TONGUE_ML_Cam2; + axes('position',[position_x1(1), position_y1(3), panel_width1, panel_height1]); + hold on; + plot(t,xxx,'-b'); + if ~isempty(licks_time_electric) + plot(licks_time_electric, interp1(t,xxx,licks_time_electric),'og','LineWidth',1) + end + xlim(xl); + ylim([-15,15]); + plot(t(idx_licks_peak),xxx(idx_licks_peak),'xr','LineWidth',1); + plot(t(idx_licks_onset),xxx(idx_licks_onset),'xk','LineWidth',1); + plot(t(idx_licks_end),xxx(idx_licks_end),'x','LineWidth',1,'Color',[0.5 0.5 0.5]); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Tongue M-L\nTop (px)')); + plot([xl],[0 0],'-k','LineWidth',1); + + % %Tongue Yaw (azimuth) Camera2 + % xxx = tongue_yaw; + % axes('position',[position_x1(2), position_y1(5), panel_width1, panel_height1]); + % hold on; + % plot(t,xxx,'-b'); + % if ~isempty(licks_time_electric) + % plot(licks_time_electric, interp1(t,xxx,licks_time_electric),'og','LineWidth',1) + % end + % xlim(xl); + % % ylim([-30,30]); + % plot(t(idx_licks_peak),xxx(idx_licks_peak),'xr','LineWidth',1); + % plot(t(idx_licks_onset),xxx(idx_licks_onset),'xk','LineWidth',1); + % plot(t(idx_licks_end),xxx(idx_licks_end),'x','LineWidth',1,'Color',[0.5 0.5 0.5]); + % xlabel(sprintf('%s', time_label)); + % ylabel(sprintf('Tognue yaw \n (deg) ')); + % plot([xl],[0 0],'-k','LineWidth',1); + + + %Tongue A-P axis Camera2 + xxx = TONGUE_AP_Cam2; + axes('position',[position_x1(1), position_y1(4), panel_width1, panel_height1]); + hold on; + plot(t,xxx,'-b'); + if ~isempty(licks_time_electric) + plot(licks_time_electric, interp1(t,xxx,licks_time_electric),'og','LineWidth',1) + end + xlim(xl); + num=find([fSession.camera]==2 & strcmp({fSession.label}','TongueTip')'); + % ylim([min([fSession(num).y_min, fSession(num).y_max]), max([fSession(num).y_min, fSession(num).y_max])*1.25]); + ylim([0,50]); + plot(t(idx_licks_peak),xxx(idx_licks_peak),'xr','LineWidth',1); + plot(t(idx_licks_onset),xxx(idx_licks_onset),'xk','LineWidth',1); + plot(t(idx_licks_end),xxx(idx_licks_end),'x','LineWidth',1,'Color',[0.5 0.5 0.5]); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Tongue A-P\nTop (px)')); + + % Jaw, Camera 1 + axes('position',[position_x1(1), position_y1(5), panel_width1, panel_height1]); + hold on + % num=find([fTrial.camera]==1 & strcmp({fTrial.label}','jaw')'); + plot(t, JAW_Z_Cam1,'.k','MarkerSize',1,'LineWidth',1); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Jaw D-V\n Side view (px)')); + xlim(xl); +% ylim([0,50]); + num=find([fSession.camera]==1 & strcmp({fSession.label}','jaw')'); % we set the limits based on tongue tip for simplicity because whiskers are estimaged using 3 fiducials + ylim([ fSession(num).y_min, fSession(num).y_max ]); + + % Whiskers, Camera 1 + axes('position',[position_x1(1), position_y1(6), panel_width1, panel_height1]); + hold on + plot(t, WHISKERS_AP_Cam1,'.k','MarkerSize',1,'LineWidth',1); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Whiskers A-P\n Side(px)')); + xlim(xl); + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); % we set the limits based on tongue tip for simplicity because whiskers are estimaged using 3 fiducials + ylim([ -fSession(num).x_max*2 , fSession(num).x_max*2 ]); + + % Nose, Camera 1 + axes('position',[position_x1(1), position_y1(7), panel_width1, panel_height1]); + hold on + % num=find([fTrial.camera]==1 & strcmp({fTrial.label}','jaw')'); + plot(t, NOSE_Z_Cam1,'.k','MarkerSize',1,'LineWidth',1); + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Nose D-V\nSide (px)')); + xlim(xl); +% ylim([-60,-20]); + num=find([fSession.camera]==1 & strcmp({fSession.label}','nosetip')'); % we set the limits based on tongue tip for simplicity because whiskers are estimaged using 3 fiducials + ylim([ fSession(num).y_min, fSession(num).y_max ]); + + + % Paws, Camera2 + axes('position',[position_x1(1), position_y1(8), panel_width1, panel_height1]); + hold on + plot(t, PAWleft_ML_Cam2,'.r','MarkerSize',1,'LineWidth',1); % + plot(t, PAWleft_AP_Cam2,'.m','MarkerSize',1,'LineWidth',1); % + plot(t, PAWright_ML_Cam2,'.b','MarkerSize',1,'LineWidth',1); % + plot(t, PAWright_AP_Cam2,'.c','MarkerSize',1,'LineWidth',1); % + % xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Paws\nTop (px)')); + xlim(xl); + ylim([-100,100]); + + + % Lickport, Camera 1 + axes('position',[position_x1(1), position_y1(9), panel_width1, panel_height1]); + hold on + num=find([fTrial.camera]==1 & strcmp({fTrial.label}','lickport')'); + plot(t, fTrial(num).y{ii},'.k','MarkerSize',1,'LineWidth',1); + xlabel(sprintf('%s', time_label)); + ylabel(sprintf('Lickport D-V\nSide (px)')); + xlim(xl); + ylim([0,100]); + plot(t(idx_lickport_t_entrance_start), fTrial(num).y{ii}(idx_lickport_t_entrance_start),'or','MarkerSize',5,'LineWidth',1); % lickport camera 1 + plot(t(idx_lickport_t_entrance_end), fTrial(num).y{ii}(idx_lickport_t_entrance_end),'or','MarkerSize',5,'LineWidth',1); % lickport camera 1 + plot(t(idx_lickport_t_exit_start), fTrial(num).y{ii}(idx_lickport_t_exit_start),'or','MarkerSize',5,'LineWidth',1); % lickport camera 1 + plot(t(idx_lickport_t_exit_end), fTrial(num).y{ii}(idx_lickport_t_exit_end),'or','MarkerSize',5,'LineWidth',1); % lickport camera 1 + + + %% 2D tongue trajectories, before Go cue + idx_t_before_go = t<0; + idx_peaks_before_go = t(idx_licks_peak)<0 ; + + % Camera 1 + axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2]); + hold on; + plot(TONGUE_AP_Cam1(idx_t_before_go), TONGUE_Z_Cam1(idx_t_before_go),'.-'); + % plot(interp1(t,AP_Cam1,licks_time_electric),interp1(t,Z_Cam1,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + plot(TONGUE_AP_Cam1(idx_licks_peak(idx_peaks_before_go)),TONGUE_Z_Cam1(idx_licks_peak(idx_peaks_before_go)),'xr','LineWidth',1); + xlabel('A-P axis (px)'); + ylabel('D-V axis (px)'); + title('Side view, before t=0'); + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); + xlim([ fSession(num).x_min , fSession(num).x_max*1.25 ]); + ylim([ fSession(num).y_min, fSession(num).y_max*1.25 ]); + % ylim([0,50]); + % xlim([0,50]); + num=find([fTrial.camera]==1 & strcmp({fTrial.label}','lickport')'); + if ii>=2 + plot(LICKPORT_AP_Cam1_mean(ii-1),LICKPORT_Z_Cam1_mean(ii-1),'o','MarkerSize',20,'LineWidth',3, 'Color',[0.75 0.75 0.75]); % lickport position on previos trial + end + plot(LICKPORT_AP_Cam1_mean(ii),LICKPORT_Z_Cam1_mean(ii),'ok','MarkerSize',20,'LineWidth',3); % lickport + + % Camera 2 + axes('position',[position_x2(2), position_y2(1), panel_width2, panel_height2]); + hold on; + plot(TONGUE_ML_Cam2(idx_t_before_go), TONGUE_AP_Cam2(idx_t_before_go),'.-'); + % plot(interp1(t,ML_Cam2,licks_time_electric),interp1(t,AP_Cam2,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + plot(TONGUE_ML_Cam2(idx_licks_peak(idx_peaks_before_go)),TONGUE_AP_Cam2(idx_licks_peak(idx_peaks_before_go)),'xr','LineWidth',1); + xlabel('M-L axis (px)'); + ylabel('A-P axis (px)'); + title('Top view, before t=0'); + num=find([fSession.camera]==2 & strcmp({fSession.label}','TongueTip')'); + ylim([0,50]); + xlim([-20,20]); + num=find([fTrial.camera]==2 & strcmp({fTrial.label}','lickport')'); + if ii>=2 + plot(LICKPORT_ML_Cam2_mean(ii-1),LICKPORT_AP_Cam2_mean(ii-1),'o','MarkerSize',20,'LineWidth',3, 'Color',[0.75 0.75 0.75]); % lickport position on previos trial + end + plot(LICKPORT_ML_Cam2_mean(ii),LICKPORT_AP_Cam2_mean(ii),'ok','MarkerSize',20,'LineWidth',3); % lickport + + + %% 2D tongue trajectories, after Go cue + idx_t_after_go = t>=0; + idx_peaks_after_go = t(idx_licks_peak)>0; + + % Camera 1 + axes('position',[position_x2(1), position_y2(2), panel_width2, panel_height2]); + hold on; + plot(TONGUE_AP_Cam1(idx_t_after_go), TONGUE_Z_Cam1(idx_t_after_go),'.-'); + plot(interp1(t,TONGUE_AP_Cam1,licks_time_electric),interp1(t,TONGUE_Z_Cam1,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + plot(TONGUE_AP_Cam1(idx_licks_peak(idx_peaks_after_go)),TONGUE_Z_Cam1(idx_licks_peak(idx_peaks_after_go)),'xr','LineWidth',1); + xlabel('A-P axis (px)'); + ylabel('D-V axis (px)'); + title('Side view, after t=0'); + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); + xlim([ fSession(num).x_min , fSession(num).x_max*1.25 ]); + ylim([ fSession(num).y_min, fSession(num).y_max*1.25 ]); + % ylim([0,50]); + % xlim([0,50]); + num=find([fTrial.camera]==1 & strcmp({fTrial.label}','lickport')'); + if ii>=2 + plot(LICKPORT_AP_Cam1_mean(ii-1),LICKPORT_Z_Cam1_mean(ii-1),'o','MarkerSize',20,'LineWidth',3, 'Color',[0.75 0.75 0.75]); % lickport position on previos trial + end + plot(LICKPORT_AP_Cam1_mean(ii),LICKPORT_Z_Cam1_mean(ii),'ok','MarkerSize',20,'LineWidth',3); % lickport + + % Camera 2 + axes('position',[position_x2(2), position_y2(2), panel_width2, panel_height2]); + hold on; + plot(TONGUE_ML_Cam2(idx_t_after_go), TONGUE_AP_Cam2(idx_t_after_go),'.-'); + plot(interp1(t,TONGUE_ML_Cam2,licks_time_electric),interp1(t,TONGUE_AP_Cam2,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + plot(TONGUE_ML_Cam2(idx_licks_peak(idx_peaks_after_go)),TONGUE_AP_Cam2(idx_licks_peak(idx_peaks_after_go)),'xr','LineWidth',1); + xlabel('M-L axis (px)'); + ylabel('A-P axis (px)'); + title('Top view, after t=0'); + % num=find([fSession.camera]==2 & strcmp({fSession.label}','TongueTip')'); + % xlim([ fSession(num).x_min, fSession(num).x_max*1.25 ]); + % xlim([ fSession(num).y_min, fSession(num).y_max*1.25 ]); + ylim([0,50]); + xlim([-20,20]); + num=find([fTrial.camera]==2 & strcmp({fTrial.label}','lickport')'); + if ii>=2 + plot(LICKPORT_ML_Cam2_mean(ii-1),LICKPORT_AP_Cam2_mean(ii-1),'o','MarkerSize',20,'LineWidth',3, 'Color',[0.75 0.75 0.75]); % lickport position on previos trial + end + plot(LICKPORT_ML_Cam2_mean(ii),LICKPORT_AP_Cam2_mean(ii),'ok','MarkerSize',20,'LineWidth',3); % lickport + + + + %% 2D Paw Left and Right, all trial + + % Camera 1 + num1=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawL')'); + num2=find([fTrial.camera]==1 & strcmp({fTrial.label}','PawR')'); + axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(PAWleft_AP_Cam1, PAWleft_Z_Cam1,'.r'); + plot(PAWright_AP_Cam1, PAWright_Z_Cam1,'.b'); + % plot(interp1(t,AP_Cam1,licks_time_electric),interp1(t,Z_Cam1,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + xlabel('A-P axis (px)'); + ylabel('D-V axis (px)'); + title(sprintf('Side view, Front Paws\n %d grooming frames ',num_grooming_frames)); + xl = [-150,150]; + yl=[-150,150]; + xlim(xl); + ylim(yl); + plot([ grooming_x_threshold, grooming_x_threshold],yl,'-k'); + plot(xl, [grooming_y_threshold grooming_y_threshold],'-k'); + % xlim(([min([fSession(num1).x_min, fSession(num2).x_min]), max([fSession(num1).x_max, fSession(num2).x_max])])); + % ylim(([min([fSession(num1).y_min, fSession(num2).y_min]), max([fSession(num1).y_max, fSession(num2).y_max])])); + + + + + % Camera 2 + num1=find([fTrial.camera]==2 & strcmp({fTrial.label}','PawL')'); + num2=find([fTrial.camera]==2 & strcmp({fTrial.label}','PawR')'); + axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(PAWleft_ML_Cam2, PAWleft_AP_Cam2,'.r'); + plot(PAWright_ML_Cam2, PAWright_AP_Cam2,'.b'); + % plot(interp1(t,AP_Cam1,licks_time_electric),interp1(t,Z_Cam1,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + xlabel('M-L axis (px)'); + ylabel('A-P axis (px)'); + title('Top view, Front Paws'); + % ylim([-50,50]); + % xlim([-100,100]); + xlim(([min([fSession(num1).x_min, fSession(num2).x_min])*1.25, max([fSession(num1).x_max, fSession(num2).x_max])*1.25])); + ylim(([min([fSession(num1).y_min, fSession(num2).y_min]), max([fSession(num1).y_max, fSession(num2).y_max])*1.25])); + + + + %% 2D Whiskers + % Camera 1 + axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(WHISKERS_AP_Cam1, WHISKERS_Z_Cam1,'.k'); + % plot(interp1(t,AP_Cam1,licks_time_electric),interp1(t,Z_Cam1,licks_time_electric),'og','Clipping','off','LineWidth',1); + set(gca,'Ydir','reverse') + axis equal + xlabel('A-P axis (px)'); + ylabel('D-V axis (px)'); + title(sprintf('Side view, Whiskers ')); + % ylim([25,75]); + % xlim([-50,50]); + num=find([fSession.camera]==1 & strcmp({fSession.label}','TongueTip')'); % we set the limits based on tongue tip for simplicity because whiskers are estimaged using 3 fiducials + xlim([ -fSession(num).x_max*2 , fSession(num).x_max*2 ]); + ylim([ fSession(num).y_min, fSession(num).y_max*2 ]); + + + %% Save figure + filename = ['trial' num2str(trials(ii)) 'vid' num2str(tracking_datafile_num(ii)) ]; + dir_save_figure_full=[dir_current_fig 'anm' num2str(key.subject_id) '\' [key.session_date 's' num2str(key.session)] '\']; + if isempty(dir(dir_save_figure_full)) + mkdir (dir_save_figure_full) + end + figure_name_out=[dir_save_figure_full filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +% eval(['print ', figure_name_out, ' -painters -dpdf -cmyk -r500']); + + clf; + end + + end + + insert(self,insert_key_licks); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_tongue); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_whiskers); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_PawLeft); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_PawRight); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_JAW); + insert(TRACKING.VideoBodypartTrajectTrial ,insert_key_trajectory_NOSE); + + insert(TRACKING.VideoLickportTrial,insert_key_lickport); + + insert(TRACKING.VideoLickportPositionTrial,insert_key_lickport_position); + + if ~isempty(insert_key_grooming) + insert(TRACKING.VideoGroomingTrial,insert_key_grooming); + end + + end + + end +end + diff --git a/DataJoint/+TRACKING/getSchema.m b/DataJoint/+TRACKING/getSchema.m new file mode 100644 index 0000000..293e3ed --- /dev/null +++ b/DataJoint/+TRACKING/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'TRACKING', 'arseny_learning_tracking'); +end +obj = schemaObject; +end diff --git a/DataJoint/+WC/FPSTHaverage.m b/DataJoint/+WC/FPSTHaverage.m new file mode 100644 index 0000000..b158880 --- /dev/null +++ b/DataJoint/+WC/FPSTHaverage.m @@ -0,0 +1,146 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +-> EXP2.TrialNameType +-> EXP2.Outcome +--- +num_trials_averaged : int # number of trials averaged per condition, for this ROI +psth_avg : longblob # trial-type averaged PSTH aligned to go cue time, expressed as deltaF/F, where F is the baseline flourescene in the beginning of each trial +psth_stem : longblob # standard error of the mean of the above, expressed as deltaF/F +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHaverage < dj.Computed + properties + keySource = ((IMG.FOV & IMG.ROI) * (EXP2.TrialNameType) * EXP2.Outcome)*(EXP2.SessionEpoch & 'session_epoch_type = "behav_only"') & (EXP2.SessionTask & 'task="waterCue"'); + end + methods(Access=protected) + function makeTuples(self, key) + roi_list=fetchn(IMG.ROI & key,'roi_number'); + frame_rate = fetchn(IMG.FOV & key,'imaging_frame_rate'); + + smooth_window=4; %frames for PSTH + + b=fetch((EXP2.BehaviorTrial*EXP2.TrialName) & key,'*','ORDER BY trial'); + if isempty(b) + return; + end + b=struct2table(b); b_trials=[b.trial]; + if isempty(b_trials) + return; + end + + + % for all conditions and trial-types + kk=key; + kk=rmfield(kk,'trial_type_name'); + kk=rmfield(kk,'outcome'); + + bEvent_all=fetch( EXP2.BehaviorTrialEvent*EXP2.BehaviorTrial & kk ,'*','ORDER BY trial'); + + trial_event_time_all = [bEvent_all.trial_event_time]; + trial_event_duration_all = [bEvent_all.duration]; + + typical_time_go = mean(trial_event_time_all (contains({bEvent_all.trial_event_type},'go'))); + typical_time_sample_start =mean(trial_event_time_all (contains({bEvent_all.trial_event_type},'sample')))-typical_time_go; + typical_time_sample_end = typical_time_sample_start + mean(trial_event_duration_all (contains({bEvent_all.trial_event_type},'sample'))); + + + % for this conditions and trial-type combination + bEvent=fetch( EXP2.BehaviorTrialEvent&((EXP2.BehaviorTrial*EXP2.TrialName)& key),'*','ORDER BY trial'); + trial_event_time = [bEvent.trial_event_time]; + trial_event_duration = [bEvent.duration]; + + time_go = trial_event_time (contains({bEvent.trial_event_type},'go')); + time_sample_start =trial_event_time (contains({bEvent.trial_event_type},'sample')); + time_sample_end = trial_event_duration (contains({bEvent.trial_event_type},'sample')); + + + Files=fetch(IMG.FrameStartFile & key,'*','ORDER BY session_epoch_file_num'); + Files=Files(b_trials); + S=fetch(IMG.ROISpikes & key,'*'); + + + for i_tr = 1:1:numel(time_go) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame; + end_file(i_tr)=Files(i_tr).session_epoch_file_end_frame ; + end + + + + + + + + key.roi_number=1; + frames_per_trial=[[Files.session_epoch_file_end_frame]' - [Files.session_epoch_file_start_frame]']+1; + typical_num_frames_per_trial=ceil(mean(frames_per_trial)); + % f_trace_timestamps=fetchn(IMG.ROITrial & key,'f_trace_timestamps','ORDER BY trial'); + % [~,longest_trial_idx] = max(frames_per_trial); + % typical_psth_timestamps = f_trace_timestamps{longest_trial_idx}(1:typical_num_frames_per_trial); + % + % frames_per_trial = frames_per_trial(b_trials); + % f_trace_timestamps = f_trace_timestamps(b_trials); + % + numberTrials = numel(frames_per_trial); + + for iROI = 1:numel(roi_list) + F=zeros(numberTrials,max(frames_per_trial)) + NaN; + + key.roi_number=roi_list(iROI); + + + + spikes=S(iROI).spikes_trace; + + + + key_FPSTHtrial = key; + key_FPSTHtrial = repmat(key_FPSTHtrial,1,numberTrials); + + for iTr=1:1:numberTrials + iTr; + s=spikes(start_file(iTr):end_file(iTr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate - time_go(iTr); + + f_trial=s; + F(iTr,1:frames_per_trial(iTr))=f_trial; + + key_FPSTHtrial(iTr).trial=b_trials(iTr); + key_FPSTHtrial(iTr).psth_trial = f_trial; + this_trial_time_go = time_go (iTr); + key_FPSTHtrial(iTr).psth_timestamps = time; + key_FPSTHtrial(iTr).time_sample_start = time_sample_start(iTr) - this_trial_time_go; + key_FPSTHtrial(iTr).time_sample_end = time_sample_end(iTr)- this_trial_time_go; + key_FPSTHtrial(iTr).plane_num=1; + key_FPSTHtrial(iTr).channel_num=1; + end + + + F=F(:,1:typical_num_frames_per_trial); + psth_avg = nanmean(F,1); + psth_stem = nanstd(F,1)/sqrt(numberTrials); + + key_FPSTHaverage=key; + key_FPSTHaverage.num_trials_averaged=numberTrials; + key_FPSTHaverage.psth_avg=psth_avg; + key_FPSTHaverage.psth_stem=psth_stem; + key_FPSTHaverage.psth_timestamps= (1:1:typical_num_frames_per_trial)/frame_rate -typical_time_go; + key_FPSTHaverage.time_sample_start = typical_time_sample_start; + key_FPSTHaverage.time_sample_end = typical_time_sample_end; + key_FPSTHaverage.channel_num=1; + key_FPSTHaverage.plane_num=1; + + insert(self, key_FPSTHaverage) + insert(WC.FPSTHtrial, key_FPSTHtrial) + + + end + end + end +end \ No newline at end of file diff --git a/DataJoint/+WC/FPSTHtrial.m b/DataJoint/+WC/FPSTHtrial.m new file mode 100644 index 0000000..32a7653 --- /dev/null +++ b/DataJoint/+WC/FPSTHtrial.m @@ -0,0 +1,22 @@ +%{ +# +-> EXP2.SessionEpoch +-> IMG.ROI +-> EXP2.TrialNameType +-> EXP2.Outcome +-> EXP2.SessionTrial +--- +psth_trial : longblob # PSTH aligned to go cue time, expressed as deltaF/F, where F is the baseline flourescene in the beginning of each trial +psth_timestamps : longblob # timestamps of each frame relative to go cue +time_sample_start : double # time of sample start relative to go cue +time_sample_end : double # time of sample end relative to go cue +%} + + +classdef FPSTHtrial < dj.Computed + methods(Access=protected) + function makeTuples(self, key) + + end + end +end \ No newline at end of file diff --git a/DataJoint/+WC/Jobs.m b/DataJoint/+WC/Jobs.m new file mode 100644 index 0000000..d9599a3 --- /dev/null +++ b/DataJoint/+WC/Jobs.m @@ -0,0 +1,16 @@ +%{ +# the job reservation table for +WC +table_name : varchar(255) # className of the table +key_hash : char(32) # key hash +----- +status : enum("reserved","error","ignore") # if tuple is missing, the job is available +key=null : blob # structure containing the key +error_message="" : varchar(1023) # error message returned if failed +error_stack=null : blob # error stack if failed +host="" : varchar(255) # system hostname +pid=0 : int unsigned # system process id +timestamp=CURRENT_TIMESTAMP : timestamp # automatic timestamp +%} + +classdef Jobs < dj.Jobs +end diff --git a/DataJoint/+WC/getSchema.m b/DataJoint/+WC/getSchema.m new file mode 100644 index 0000000..6e8b05c --- /dev/null +++ b/DataJoint/+WC/getSchema.m @@ -0,0 +1,7 @@ +function obj = getSchema +persistent schemaObject +if isempty(schemaObject) + schemaObject = dj.Schema(dj.conn, 'WC', 'arseny_watercue_analysis'); +end +obj = schemaObject; +end diff --git a/DataJoint/SharedVarainceCalc_Ran.m b/DataJoint/SharedVarainceCalc_Ran.m new file mode 100644 index 0000000..fbff775 --- /dev/null +++ b/DataJoint/SharedVarainceCalc_Ran.m @@ -0,0 +1,53 @@ +function SharedVarainceCalc_Ran (F,G) +% F N x T +% G M x T +% Cf=F*F'; Cg=G*G'; F*G' is NxM +M=size(G,1);N=size(F,1); T=size(F,1); +CrosCor=1/size(F,2).*(F*G'); +CrosCorG=1/size(G,2).*(G*G'); +CrosCorF=1/size(F,2).*(F*F'); + + +% [Ufg,Sfg,Vfg]=svd(CrosCor); % S N time X M neurons; % U N X N; V M x M +[Ufg,Sfg,Vfg]=svdecon(single(CrosCor)); % Faster? +z1=Ufg(:,1)'*F; % 1xT- first 'pc' +z2=Ufg(:,2)'*F; % 1xT- first 'pc' +z3=Ufg(:,3)'*F; % 1xT- first 'pc' + +% [Ugg,Sgg,Vgg]=svd(CrosCorG); % S N time X M neurons; % U N X N; V M x M +[Ugg,Sgg,Vgg]=svdecon(single(CrosCorG)); % Faster? + +% [Uff,Sff,Vff]=svd(CrosCorF); % S N time X M neurons; % U N X N; V M x M +[Uff,Sff,Vff]=svdecon(single(CrosCorF)); % Faster? + +sv_fg =diag(Sfg); +sv_ff =diag(Sff); +sv_gg =diag(Sgg); + +figure(10) +subplot(3,1,1) +loglog(sv_fg(1:M));hold all; loglog(sv_ff(1:M)); loglog(sv_gg(1:M)); +legend('fg','ff','gg') +subplot(3,1,2) +loglog(sv_fg(1:M)./(sv_fg(1)));hold all; loglog(sv_ff(1:M)./sv_ff(1)); loglog(sv_gg(1:M)./sv_gg(1)); + +% Fraction of reliable variance: +% denum=(Ufg'*CrosCorF*Ufg+Vfg'*CrosCorG*Vfg)./(2); +pcF=diag(Uff'*CrosCorF*Uff)./T; +pcG=diag(Vgg'*CrosCorG*Vgg)./T; + +denum=(pcF(1:M)+pcG)./(2); +num=sv_fg; +subplot(3,1,3) +loglog(num./denum); +hold on + + +% SV are computed that way: +% sfg=Ufg'*CrosCor*Vfg; +% sff=Uff'*CrosCorF*Vff; +% sgg=Ugg'*CrosCorG*Vgg; + + + + diff --git a/DataJoint/allenDorsalMapSM_Musalletal2019.mat b/DataJoint/allenDorsalMapSM_Musalletal2019.mat new file mode 100644 index 0000000..9ccf7b4 Binary files /dev/null and b/DataJoint/allenDorsalMapSM_Musalletal2019.mat differ diff --git a/DataJoint/fn/SVCA.m b/DataJoint/fn/SVCA.m new file mode 100644 index 0000000..c511f0a --- /dev/null +++ b/DataJoint/fn/SVCA.m @@ -0,0 +1,37 @@ +% computes a cross-validated form of PCA: Shared Variance Component +% Analysis. Components are extracted from the covariance between neuron +% sets "ntrain" and "ntest" on training timepts "itrain". The variance of +% these covariance components is computed on testing timepts "itest". +% This variance is the amount of reliable variance of that component +% (because it's consistent across timepts). +% Why compute it in the covariance space? +% we assume the covariance btw/ neurons is consistent across time +% - we have no other metric to track because we are not presenting stimuli +% INPUTS: +% Ff (neurons x timepts) +% npc (number of PCs to compute) +% ntrain (one half of neurons) +% ntest (other half of neurons) +% itrain (one half of timepts) +% itest (other half of timepts) +% OUTPUTS: +% sneur (shared variance of each covariance component) +% vneur (total variance of each covariance component) +% u (left eigenvectors of covariance matrix btw ntrain and ntest on +% itrain timepts) +% v (right eigenvectors of covariance matrix btw ntrain and ntest on +% itrain timepts) +function [sneur, varneur, u, v, noise] = SVCA(Ff, npc, ntrain, ntest, itrain, itest) + +cov = Ff(ntrain,itrain) * Ff(ntest,itrain)'; +[u,~,v] = svdecon(cov); +u = u(:,1:npc); +v = v(:,1:npc); +s1 = u' * Ff(ntrain,itest); +s2 = v' * Ff(ntest,itest); +sneur = sum(s1 .* s2, 2); +varneur = sum(s1.^2 + s2.^2,2)/2; + + + + diff --git a/DataJoint/fn/fn_POP_bin_pairwise_corr_by_distance.m b/DataJoint/fn/fn_POP_bin_pairwise_corr_by_distance.m new file mode 100644 index 0000000..cbe2ff0 --- /dev/null +++ b/DataJoint/fn/fn_POP_bin_pairwise_corr_by_distance.m @@ -0,0 +1,104 @@ +function key = fn_POP_bin_pairwise_corr_by_distance (key, rho, distance, threshold_for_event_vector, i_th,i_c,corr_histogram_bins, distance_bins,num_svd_components_removed_vector) + +colors=inferno(numel(num_svd_components_removed_vector)); + + +%% Distance dependence +idxnan=isnan(rho); +rho(idxnan)=0; %because logical cannot be NaNs +temp=logical(tril(rho)); +idx_up_triangle=~temp; +rho(idxnan)=NaN; %because logical cannot be NaNs + +all_corr = rho(idx_up_triangle); +all_distance = distance(idx_up_triangle); + +idx_positive_r=all_corr>0; +% all_corr_positive=all_corr(idx_positive_r); +% all_distance_positive=all_distance(idx_positive_r); + +idx_negative_r=all_corr<=0; +% all_corr_negative=all_corr(idx_negative_r); +% all_distance_negative=all_distance(idx_negative_r); + + +r_binned_all=zeros(1,numel(distance_bins)-1); +r_binned_positive=zeros(1,numel(distance_bins)-1); +r_binned_negative=zeros(1,numel(distance_bins)-1); +corr_histogram_per_distance=zeros(numel(distance_bins)-1,numel(corr_histogram_bins)-1); + + +bins_center=zeros(1,numel(distance_bins)-1); +for i_d=1:1:numel(distance_bins)-1 + + [r_binned_all(i_d),r_binned_positive(i_d),r_binned_negative(i_d),corr_hist]= fn_POP_binning_distance_corr(distance_bins,corr_histogram_bins, all_distance, i_d, all_corr, idx_positive_r, idx_negative_r); + corr_histogram_per_distance(i_d,:) = corr_hist; + bins_center(i_d) = (distance_bins(i_d) + distance_bins(i_d+1))/2; + +end + +key.distance_corr_all = r_binned_all; +key.distance_corr_positive = r_binned_positive; +key.distance_corr_negative = r_binned_negative; +key.corr_histogram_per_distance = corr_histogram_per_distance; + +key.corr_histogram =histcounts(all_corr(:),corr_histogram_bins); +key.corr_histogram_bins=corr_histogram_bins; + + + +%% Plot + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +elseif strcmp(session_epoch_type,'spont_photo') + session_epoch_label = 'Spontaneous with Photostimulation'; +end + + +subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+1)) +hold on +if i_c==1 + plot([bins_center(1),bins_center(end)],[0,0],'-r'); +end + +plot(bins_center,r_binned_all,'-','Color',colors(i_c,:)) +plot(bins_center,r_binned_all,'.','Color',colors(i_c,:)) +ylabel(sprintf('Pairwise corr.\n (all)')); +% try +% ylim([min([0,min(r_binned_all)]),max(r_binned_all)]); +% catch +% end +xlim([0 max(all_distance)]); +xlabel('Lateral Distance (\mum)'); + +if i_th==1 + title(sprintf('anm%d session %d %s\n%s %d \n threshold =%.2f', key.subject_id,key.session,session_date,session_epoch_label, key.session_epoch_number, threshold_for_event_vector(i_th))); +else + title(sprintf('Threshold for event = %.2f ',threshold_for_event_vector(i_th))); +end +% ylim([-0.02,0.2]); + + +subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) +hold on +ylabel(sprintf('Pairwise corr.\n (positive)')); +plot(bins_center,r_binned_positive,'-','Color',colors(i_c,:)) +plot(bins_center,r_binned_positive,'.','Color',colors(i_c,:)) +xlabel('Lateral Distance (\mum)'); +xlim([0 max(all_distance)]); + +subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+3)) +hold on +xlabel('Lateral Distance (\mum)'); +xlim([0 max(all_distance)]); +plot(bins_center,r_binned_negative,'-','Color',colors(i_c,:)) +plot(bins_center,r_binned_negative,'.','Color',colors(i_c,:)) +ylabel(sprintf('Pairwise corr.\n (negative)')); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_POP_binning_distance_corr.m b/DataJoint/fn/fn_POP_binning_distance_corr.m new file mode 100644 index 0000000..b36fd8f --- /dev/null +++ b/DataJoint/fn/fn_POP_binning_distance_corr.m @@ -0,0 +1,16 @@ +function [r_binned_all, r_binned_positive, r_binned_negative, corr_histogram_per_distance]= fn_POP_binning_distance_corr(distance_bins,corr_histogram_bins, all_distance, i_d, all_corr, idx_positive_r, idx_negative_r) + +idx_dist_bin=all_distance>=(distance_bins(i_d)) & all_distance<(distance_bins(i_d+1)); + +if sum(idx_dist_bin)>0 + r_binned_all=nanmean(all_corr(idx_dist_bin)); + r_binned_positive=nanmean(all_corr(idx_dist_bin & idx_positive_r)); + r_binned_negative=nanmean(all_corr(idx_dist_bin & idx_negative_r)); + corr_histogram_per_distance = histcounts(all_corr(idx_dist_bin),corr_histogram_bins); +else + r_binned_all=NaN; + r_binned_positive=NaN; + r_binned_negative=NaN; + corr_histogram_per_distance = zeros(1,numel(corr_histogram_bins)-1)+NaN; +end + diff --git a/DataJoint/fn/fn_TRACKING_extract_and_center_fiducials.m b/DataJoint/fn/fn_TRACKING_extract_and_center_fiducials.m new file mode 100644 index 0000000..4cd0fb1 --- /dev/null +++ b/DataJoint/fn/fn_TRACKING_extract_and_center_fiducials.m @@ -0,0 +1,43 @@ +function [fSession,fTrial] = fn_TRACKING_extract_and_center_fiducials (fSession, fTrial, rel_fiducials_session, rel_fiducials_trial, k, num, offset_cam_x, offset_cam_y, reverse_cam_x, reverse_cam_y, camera_num, camera_pixels_to_mm, p_threshold) + +%% Session averages +fSession(num).camera = camera_num; +fSession(num).label = k.video_fiducial_name; + +fSession(num).x_median=(fetchn(rel_fiducials_session& k,'fiduical_x_median_session') - offset_cam_x) * reverse_cam_x * camera_pixels_to_mm; +fSession(num).x_min=(fetchn(rel_fiducials_session& k,'fiduical_x_min_session') - offset_cam_x) * reverse_cam_x * camera_pixels_to_mm; +fSession(num).x_max=(fetchn(rel_fiducials_session& k,'fiduical_x_max_session') - offset_cam_x) * reverse_cam_x * camera_pixels_to_mm; +if reverse_cam_x==-1 + fSession(num).x_min=(fetchn(rel_fiducials_session& k,'fiduical_x_max_session') - offset_cam_x) * reverse_cam_x * camera_pixels_to_mm; + fSession(num).x_max=(fetchn(rel_fiducials_session& k,'fiduical_x_min_session') - offset_cam_x) * reverse_cam_x * camera_pixels_to_mm; +end + +fSession(num).y_median=(fetchn(rel_fiducials_session& k,'fiduical_y_median_session') - offset_cam_y) * reverse_cam_y * camera_pixels_to_mm; +fSession(num).y_min=(fetchn(rel_fiducials_session& k,'fiduical_y_min_session') - offset_cam_y) * reverse_cam_y * camera_pixels_to_mm; +fSession(num).y_max=(fetchn(rel_fiducials_session& k,'fiduical_y_max_session') - offset_cam_y) * reverse_cam_y * camera_pixels_to_mm; +if reverse_cam_y==-1 + fSession(num).y_min=(fetchn(rel_fiducials_session& k,'fiduical_y_max_session') - offset_cam_y) * reverse_cam_y * camera_pixels_to_mm; + fSession(num).y_max=(fetchn(rel_fiducials_session& k,'fiduical_y_min_session') - offset_cam_y) * reverse_cam_y * camera_pixels_to_mm; +end +%% Trials +fTrial(num).camera = camera_num; +fTrial(num).label = k.video_fiducial_name; + +X=(fetchn(rel_fiducials_trial & k,'fiducial_x')')'; +Y=(fetchn(rel_fiducials_trial & k,'fiducial_y')')'; +P = (fetchn(rel_fiducials_trial & k,'fiducial_p')')'; + +for i = 1:1:numel(X) + p = P{i}; + x = X{i}; + x(p=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + Fall(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); +end + + +%% binning in time +bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + +bins_vector=1:bin_size_in_frame:size(Fall,2); +bins_vector=bins_vector(2:1:end); +for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(Fall(:,ix1),2); +end +clear Fall temp_Fall + + +%% Distance between all pairs + +x_all=fetchn(rel_roi &key,'roi_centroid_x','ORDER BY roi_number'); +y_all=fetchn(rel_roi &key,'roi_centroid_y','ORDER BY roi_number'); +z_all=fetchn(rel_roi*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + +x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); +y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + +x_all = x_all + x_pos_relative; x_all = x_all/0.75; +y_all = y_all + y_pos_relative; y_all = y_all/0.5; + + + +dXY=zeros(numel(x_all),numel(x_all)); +% d3D=zeros(numel(x_all),numel(x_all)); +parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um +end + + +%% Thresholding activity and computing SVD and correlations +F_binned = gpuArray(F_binned); +for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + F_thresholded=F_binned; + if threshold>0 + F_thresholded(zscore(F_binned,[],2)<=threshold)=0; + end + + if flag_zscore==0 %only centering the data + F_thresholded = F_thresholded-mean(F_thresholded,2); + else % zscoring the data + F_thresholded=zscore(F_thresholded,[],2); + end + + for i_c = 1:1:numel(num_svd_components_removed_vector) + rho=[]; + if num_svd_components_removed_vector(i_c)>0 + num_comp = num_svd_components_removed_vector(i_c); + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + singular_values =diag(S); + + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + % cumulative_variance_explained=cumsum(variance_explained); + + U=U(:,(1+num_comp):end); + % S=S(1:num_comp,1:num_comp); + V=V(:,(1+num_comp):end); + S = S((1+num_comp):end, (1+num_comp):end); + + F_reconstruct = U*S*V'; + clear U S V + + try + rho=corrcoef(F_reconstruct'); + rho=gather(rho); + catch + F_reconstruct=gather(F_reconstruct); + rho=corrcoef(F_reconstruct'); + end + key.variance_explained_components=gather(variance_explained); + else + try + rho=corrcoef(F_thresholded'); + rho=gather(rho); + catch + F_thresholded=gather(F_thresholded); + rho=corrcoef(F_thresholded'); + end + key.variance_explained_components=NaN; + end + + + key.threshold_for_event = threshold; + key.num_svd_components_removed = num_svd_components_removed_vector(i_c); + % Bin correlation by distance + kk=fn_POP_bin_pairwise_corr_by_distance(key, rho, dXY, threshold_for_event_vector, i_th,i_c, corr_histogram_bins, distance_bins, num_svd_components_removed_vector); + + insert(self,kk); + end +end + + +session_date = fetch1(EXP2.Session & key,'session_date'); +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +elseif strcmp(session_epoch_type,'spont_photo') + session_epoch_label = 'SpontaneousPhotosim'; +end + +filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number)]; +if isempty(dir(dir_save_fig)) + mkdir (dir_save_fig) +end +% +figure_name_out=[ dir_save_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/DataJoint/fn/fn_compute_Lick2D_map.m b/DataJoint/fn/fn_compute_Lick2D_map.m new file mode 100644 index 0000000..1807bd8 --- /dev/null +++ b/DataJoint/fn/fn_compute_Lick2D_map.m @@ -0,0 +1,232 @@ +function fn_computer_Lick2Dselectivity(key,self) + +timespent_min=10; %in trials +time_bin=[-3,3]; %2 sec for PSTH, aligned to lick +fr_interval=[key.fr_interval_start,key.fr_interval_end]/1000; + +smooth_window=1; %frames for PSTH +sigma=1; +hsize=1; + +key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + +%% Rescaling, rotation, and binning +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +x_bins = linspace(-1, 1,key.number_of_bins+1); +x_bins_centers=x_bins(1:end-1)+mean(diff(x_bins))/2; + +z_bins = linspace(-1,1,key.number_of_bins+1); +z_bins_centers=z_bins(1:end-1)+mean(diff(z_bins))/2; + +x_bins(1)= -inf; +x_bins(end)= inf; +z_bins(1)= -inf; +z_bins(end)= inf; + + + +%% Compute maps +[hhhhh, ~, ~, x_idx, z_idx] = histcounts2(pos_x,pos_z,x_bins,z_bins); + +%plot(pos_x,pos_z,'.') + +mat_x=repmat(x_bins_centers,key.number_of_bins,1); +mat_z=repmat(z_bins_centers',1,key.number_of_bins); + + +% go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*'); +% L=fetch(EXP2.ActionEvent & key,'*'); + +S=fetch(IMG.ROISpikes & key,'*'); + +num_trials = numel(pos_x); +[start_file, end_file ] = fn_parse_into_trials (key,Files, frame_rate, time_bin, num_trials); + +idx_response = (~isnan(start_file)); +% idx odd/even +idx_odd = ismember(1:1:num_trials,1:2:num_trials) & idx_response; +idx_even = ismember(1:1:num_trials,2:2:num_trials) & idx_response; + + +for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx_xz {i_z,i_x} = find((x_idx==i_x) & idx_response & (z_idx==i_z)); + end +end + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if idx_response(i_tr)==0 %its an ignore trial + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + % idx = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z)); + idx = idx_xz{i_z,i_x}; + + map_xz_spikes_binned(i_z,i_x) = sum(fr_all(i_roi,idx)); + map_xz_spikes_binned_odd(i_z,i_x) = sum(fr_all(i_roi,idx & idx_odd)); + map_xz_spikes_binned_even(i_z,i_x) = sum(fr_all(i_roi,idx & idx_even)); + + map_xz_timespent_binned(i_z,i_x) = numel(idx); + map_xz_timespent_binned_even(i_z,i_x) = numel(idx & idx_even); + map_xz_timespent_binned_odd(i_z,i_x) = numel(idx & idx_odd); + + if numel(idx)fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + + %% 2D maps + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + % idx = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z)); + idx = idx_xz{i_z,i_x}; + + map_xz_spikes_binned(i_z,i_x) = sum(fr_all(i_roi,idx)); + map_xz_spikes_binned_odd(i_z,i_x) = sum(fr_all(i_roi, ismember([1:1:num_trials],idx) & idx_odd )); + map_xz_spikes_binned_even(i_z,i_x) = sum(fr_all(i_roi, ismember([1:1:num_trials],idx) & idx_even )); + + map_xz_timespent_binned(i_z,i_x) = numel(idx); + map_xz_timespent_binned_odd(i_z,i_x) = sum( ismember([1:1:num_trials],idx) & idx_odd); + map_xz_timespent_binned_even(i_z,i_x) = sum( ismember([1:1:num_trials],idx) & idx_even); + + if numel(idx)3 + idx_preferred = ismember(1:1:num_trials,[idx_xz{I_max(end-1:end)}]); % we take 2 highest bin + else + idx_preferred = ismember(1:1:num_trials,[idx_xz{I_max(end)}]); % we take 1 highest bin + end + % non preferred idx + idx_non_preferred = logical(1:1:num_trials); + idx_non_preferred (idx_preferred | ~idx_response )=0; + + + %% MAP + + key_ROI1(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI1(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI1(i_roi).number_of_bins = key.number_of_bins; + + + + key_ROI1(i_roi).psth_per_position = psth_per_position; + key_ROI1(i_roi).psth_per_position_odd = psth_per_position_odd; + key_ROI1(i_roi).psth_per_position_even = psth_per_position_even; + key_ROI1(i_roi).psthmap_time = time; + key_ROI1(i_roi).lickmap_fr = lickmap_fr; + key_ROI1(i_roi).lickmap_fr_odd = lickmap_fr_odd; + key_ROI1(i_roi).lickmap_fr_even = lickmap_fr_even; + key_ROI1(i_roi).lickmap_odd_even_corr = r_odd_even; + key_ROI1(i_roi).pos_x_bins_centers = x_bins_centers; + key_ROI1(i_roi).pos_z_bins_centers = z_bins_centers; + key_ROI1(i_roi).information_per_spike = information_per_spike; + key_ROI1(i_roi).preferred_bin = preferred_bin_idx; + key_ROI1(i_roi).preferred_radius = preferred_radius; + + + %% Selectivity + key_ROI2(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI2(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI2(i_roi).number_of_bins = key.number_of_bins; + + + key_ROI3(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI3(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI3(i_roi).number_of_bins = key.number_of_bins; + + + + % peaktime_selectivity : double # peak time of the psth + % peaktime_selectivity_odd : double # + % peaktime_selectivity_even : double # + % peaktime_selectivity_first=null : double # first trial in block + % peaktime_selectivity_begin=null : double # trials in the beginning of the block + % peaktime_selectivity_mid=null : double # trials in the middle of the block + % peaktime_selectivity_end=null : double # trials in the end of the block + % peaktime_selectivity_small=null : double # during no rewarded trials + % peaktime_selectivity_regular=null : double # during trials with typical reward + % peaktime_selectivity_large=null : double # during trials with large reward + + + + %preferred bins + psth_preferred = nanmean(cell2mat(psth_all(i_roi, idx_preferred)'),1); + psth_preferred_odd = nanmean(cell2mat(psth_all(i_roi, idx_preferred & idx_odd)'),1); + psth_preferred_even = nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_even)'),1); + + key_ROI2(i_roi).psth_preferred = psth_preferred; + key_ROI2(i_roi).psth_preferred_odd = psth_preferred_odd; + key_ROI2(i_roi).psth_preferred_even = psth_preferred_even; + + + r = corr([psth_preferred_odd(:),psth_preferred_even(:)+eps],'Rows' ,'pairwise'); + key_ROI3(i_roi).psth_preferred_odd_even_corr = r(2); + [~,idx_peak]=max(psth_preferred); + key_ROI3(i_roi).peaktime_preferred = time(idx_peak); + [~,idx_peak]=max(psth_preferred_odd); + key_ROI3(i_roi).peaktime_preferred_odd = time(idx_peak); + [~,idx_peak]=max(psth_preferred_even); + key_ROI3(i_roi).peaktime_preferred_even = time(idx_peak); + + + %non preferred bins + psth_non_preferred = nanmean(cell2mat(psth_all(i_roi, idx_non_preferred)'),1); + psth_non_preferred_odd = nanmean(cell2mat(psth_all(i_roi, idx_non_preferred & idx_odd)'),1); + psth_non_preferred_even = nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_even)'),1); + + key_ROI2(i_roi).psth_non_preferred = psth_non_preferred; + + + % selectivity + selectivity =psth_preferred - psth_non_preferred; + selectivity_odd = psth_preferred_odd - psth_non_preferred_odd; + selectivity_even = psth_preferred_even - psth_non_preferred_even; + + key_ROI2(i_roi).selectivity = selectivity; + key_ROI2(i_roi).selectivity_odd = selectivity_odd; + key_ROI2(i_roi).selectivity_even = selectivity_even; + + r = corr([selectivity_odd(:),selectivity_even(:)],'Rows' ,'pairwise'); + key_ROI3(i_roi).selectivity_odd_even_corr= r(2); + + r = corr([selectivity_odd(:),selectivity_even(:)],'Rows' ,'pairwise'); + key_ROI3(i_roi).selectivity_odd_even_corr = r(2); + [~,idx_peak]=max(selectivity); + key_ROI3(i_roi).peaktime_selectivity = time(idx_peak); + [~,idx_peak]=max(selectivity_odd); + key_ROI3(i_roi).peaktime_selectivity_odd = time(idx_peak); + [~,idx_peak]=max(selectivity_even); + key_ROI3(i_roi).peaktime_selectivity_even = time(idx_peak); + + try + % selectivity blocks + if sum(idx_preferred & idx_small)>timespent_min + selectivity_first = nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_first)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_first)'),1); + else + selectivity_first=time + NaN; + end + + if sum(idx_preferred & idx_regular)>timespent_min + selectivity_begin = nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_begin)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_begin)'),1); + else + selectivity_begin=time + NaN; + end + + if sum(idx_preferred & idx_regular)>timespent_min + selectivity_mid = nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_mid)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_mid)'),1); + else + selectivity_mid=time + NaN; + end + + if sum(idx_preferred & idx_regular)>timespent_min + selectivity_end = nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_end)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_end)'),1); + else + selectivity_end=time + NaN; + end + + + %selectivity reward + if sum(idx_preferred & idx_small)>timespent_min + selectivity_small =nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_small)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_small)'),1); + else + selectivity_small=time + NaN; + end + if sum(idx_preferred & idx_regular)>timespent_min + selectivity_regular =nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_regular)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_regular)'),1); + else + selectivity_regular=time + NaN; + end + if sum(idx_preferred & idx_large)>timespent_min + selectivity_large =nanmean(cell2mat(psth_all(i_roi,idx_preferred & idx_large)'),1) - nanmean(cell2mat(psth_all(i_roi,idx_non_preferred & idx_large)'),1); + else + selectivity_large=time + NaN; + end + + key_ROI2(i_roi).selectivity_first = selectivity_first; + key_ROI2(i_roi).selectivity_begin = selectivity_begin; + key_ROI2(i_roi).selectivity_mid = selectivity_mid; + key_ROI2(i_roi).selectivity_end = selectivity_end; + + key_ROI2(i_roi).selectivity_small = selectivity_small; + key_ROI2(i_roi).selectivity_regular = selectivity_regular; + key_ROI2(i_roi).selectivity_large = selectivity_large; + + [~,idx_peak]=max(selectivity_first); + key_ROI3(i_roi).peaktime_selectivity_first = time(idx_peak); + [~,idx_peak]=max(selectivity_begin); + key_ROI3(i_roi).peaktime_selectivity_begin = time(idx_peak); + [~,idx_peak]=max(selectivity_mid); + key_ROI3(i_roi).peaktime_selectivity_mid = time(idx_peak); + [~,idx_peak]=max(selectivity_end); + key_ROI3(i_roi).peaktime_selectivity_end = time(idx_peak); + + [~,idx_peak]=max(selectivity_small); + key_ROI3(i_roi).peaktime_selectivity_small = time(idx_peak); + [~,idx_peak]=max(selectivity_regular); + key_ROI3(i_roi).peaktime_selectivity_regular = time(idx_peak); + [~,idx_peak]=max(selectivity_large); + key_ROI3(i_roi).peaktime_selectivity_large = time(idx_peak); + + catch + end + + + + + + key_ROI2(i_roi).selectivity_time = time; + + k1=key_ROI1(i_roi); + insert(self, k1); + + k2=key_ROI2(i_roi); + insert(self2, k2); + + k3=key_ROI3(i_roi); + insert(self3, k3); +end \ No newline at end of file diff --git a/DataJoint/fn/fn_compute_Ridge_svd.m b/DataJoint/fn/fn_compute_Ridge_svd.m new file mode 100644 index 0000000..ea403d8 --- /dev/null +++ b/DataJoint/fn/fn_compute_Ridge_svd.m @@ -0,0 +1,112 @@ +function fn_compute_Ridge_svd(key,self,self2, rel_data1,rel_data2,rel_data3,time_shift_vec) +rel_predictor_type = (RIDGE.PredictorType&RIDGE.PredictorTypeUse); + +key_ROI1=fetch(rel_data1 & key,'ORDER BY roi_number'); % +key_ROI2=key_ROI1; % for variance + +U=cell2mat(fetchn(rel_data1 & key,'roi_components','ORDER BY roi_number')); +S=fetch1(rel_data2 & key,'singular_values')'; +VT=cell2mat(fetchn(rel_data3 & key,'temporal_component','ORDER BY component_id')); + +num_comp = size(VT,1); +VT = VT.*S(1:num_comp)'; +VT=VT'; + + +rel_start_frame = IMG.FrameStartTrial & key & RIDGE.Predictors; +TrialsStartFrame=fetchn(rel_start_frame,'session_epoch_trial_start_frame','ORDER BY trial'); +trial_num=fetchn(rel_start_frame, 'trial','ORDER BY trial'); + +if isempty(TrialsStartFrame) % not mesoscope recordings + rel_start_frame = IMG.FrameStartFile & key & RIDGE.Predictors; + TrialsStartFrame=fetchn(rel_start_frame,'session_epoch_file_start_frame','ORDER BY trial'); + trial_num=fetchn(rel_start_frame,'trial','ORDER BY trial'); +end + + + +P=struct2table(fetch(RIDGE.Predictors*rel_predictor_type & key,'*','ORDER BY trial')); + +idx_frames=[]; +for i_tr = 1:1:numel(trial_num) + idx=find(P.trial==trial_num(i_tr),1,'first'); + TrialsEndFrame = TrialsStartFrame(i_tr) + numel(P.trial_predictor{idx}) - TrialsStartFrame(1); + idx_frames = [idx_frames, (TrialsStartFrame(i_tr)- TrialsStartFrame(1)+1):1:TrialsEndFrame]; +end + +predictor_name = fetchn(rel_predictor_type,'predictor_name', 'ORDER BY predictor_name'); +predictor_category = fetchn(rel_predictor_type,'predictor_category', 'ORDER BY predictor_name'); + +for i_p = 1:1:numel(predictor_name) + idx = strcmp(P.predictor_name,predictor_name{i_p}); + temp = cell2mat(P.trial_predictor(idx)'); + temp(isnan(temp)) = nanmedian(temp); + predictor=temp; + if strcmp(predictor_category{i_p},'move') + if strcmp(predictor_name{i_p},'PawFrontLeft') + predictor=predictornanmean(predictor); + end + elseif strcmp(predictor_category{i_p},'lick') + predictor=predictor>=1; + end + predictor_mat(:,i_p) = predictor; + % %% for debug + % clf + % hold on; + % plot(temp) + % plot(predictor+mean(temp)); + % title(predictor_name{i_p}) +end + +% idx_frames +% [predictor_vector,idx_frames] = fn_compute_ridge_predictors (key, frame_rate); + + + +predictor_mat_full=[]; + +for it=1:1:numel(time_shift_vec) + shift=(time_shift_vec(it)); + PM=zeros(size(predictor_mat)); + if shift<=0 + PM (1:end+shift,:) = predictor_mat(abs(shift)+1:end,:); + elseif shift>0 + PM (1+shift:end,:) = predictor_mat(1:end-shift,:); + end + predictor_mat_full=[predictor_mat_full,PM]; +end + + + + + +%% Ridge regression +VT=VT(idx_frames,:); +[~, dimBeta] = ridgeMML(VT, predictor_mat_full, true); %get ridge penalties and beta weights. + +VTr = predictor_mat_full*dimBeta; %temporal components in time reconstructed based on the ridge model +variance_explained =fn_compute_Ridge_svd_variance_explained(VT,VTr,U); + +%% variance of each ROI activity explained by the ridge model +for i_roi=1:1:numel(key_ROI1) + key_ROI2(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI2(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI2(i_roi).variance_explained=variance_explained(i_roi); +end +insert(self2,key_ROI2); + +%% regression coefficient of each predictor for each ROI +X=U*dimBeta'; +num_of_predict = numel(predictor_name); +for it=1:1:numel(time_shift_vec) + parfor i_p = 1:1:num_of_predict + fn_insert_ridge_dj(self,key,key_ROI1,predictor_name,i_p,X,it,num_of_predict,time_shift_vec); + end +end + + +end + + diff --git a/DataJoint/fn/fn_compute_Ridge_svd_variance_explained.m b/DataJoint/fn/fn_compute_Ridge_svd_variance_explained.m new file mode 100644 index 0000000..5e5502a --- /dev/null +++ b/DataJoint/fn/fn_compute_Ridge_svd_variance_explained.m @@ -0,0 +1,15 @@ +function [variance_explained] = fn_compute_Ridge_svd_variance_explained(Vc,Vm,U) +%short code to compute the correlation between lowD data Vc and modeled +%lowD data Vm. Vc and Vm are temporal components, U is the spatial +%components. corrMat is a the correlation between Vc and Vm in each pixel. +Vc=Vc'; +Vm=Vm'; + +covVc = cov(Vc'); % S x S +covVm = cov(Vm'); % S x S +cCovV = bsxfun(@minus, Vm, mean(Vm,2)) * Vc' / (size(Vc, 2) - 1); % S x S +covP = sum((U * cCovV) .* U, 2)'; % 1 x P +varP1 = sum((U * covVc) .* U, 2)'; % 1 x P +varP2 = sum((U * covVm) .* U, 2)'; % 1 x P +stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P +variance_explained = (gather((covP ./ stdPxPy)')).^2; \ No newline at end of file diff --git a/DataJoint/fn/fn_compute_SVD.m b/DataJoint/fn/fn_compute_SVD.m new file mode 100644 index 0000000..cdae10d --- /dev/null +++ b/DataJoint/fn/fn_compute_SVD.m @@ -0,0 +1,109 @@ +function fn_compute_SVD(key, rel_data1, self, self2, self3, flag_zscore,time_bin, threshold_for_event_vector, threshold_variance_explained, num_components_save) + +key.time_bin = time_bin; +try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + imaging_frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end + +roi_list=fetchn(rel_data1 & key,'roi_number','ORDER BY roi_number'); +num_rois=numel(roi_list); +chunk_size=500; +counter=0; +for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + F(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); +end + +%% binning in time +if time_bin>0 + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(F,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F(:,ix1),2); + end +else + F_binned=F; +end + +F_binned = gpuArray(F_binned); +for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + key.threshold_for_event = threshold; + + F_thresholded=F_binned; + if threshold>0 + F_thresholded(zscore(F_binned,[],2)<=threshold)=0; + end + + if flag_zscore==0 %only centering the data + F_thresholded = F_thresholded-mean(F_thresholded,2); + else % zscoring the data + F_thresholded=zscore(F_thresholded,[],2); + end + + [U,S,V]=svd(F_thresholded); % S time X neurons; % U time X time; V neurons x neurons + S= gather(S); + + singular_values =diag(S); + variance_explained=singular_values.^2/sum(singular_values.^2); % a feature of SVD. proportion of variance explained by each component + cumulative_variance_explained=cumsum(variance_explained); + % plot(cumulative_variance_explained); + % xlabel('Component') + % ylabel('Cumulative explained variance'); + + % Dimensionality reduction - taking only the first num_comp that explain variance above threshold_variance_explained. We will then save only num_components_save + num_comp = find(cumulative_variance_explained>threshold_variance_explained,1,'first'); + U=U(:,1:num_comp); + % S=S(1:num_comp,1:num_comp); + VT=V(:,1:num_components_save)'; + clear V; + + U =gather(U); + VT= gather(VT); + + + %% Populating POP.ROISVD + key_ROIs= fetch(rel_data1 & key, 'ORDER BY roi_number'); + parfor i=1:1:size(key_ROIs,1) + key_ROIs(i).roi_components = U(i,:); + key_ROIs(i).time_bin = time_bin; + key_ROIs(i).threshold_for_event = threshold_for_event_vector(i_th); + end + + chunk_size=1000; + for i_chunk=1:chunk_size:num_rois + idx =i_chunk:1:(i_chunk+chunk_size-1); + if idx(end)>num_rois + idx=idx(1):1:num_rois; + end + insert(self,key_ROIs(idx)); + end + + + %% Populating POP.SVDSingularValues + key_singular_values=key; + key_singular_values.singular_values= singular_values; + insert(self2,key_singular_values); + + + %% Populating POP.SVDTemporalComponents + key_temporal= repmat(key,1,num_components_save); + parfor ic = 1:1:num_components_save + key_temporal(ic).component_id=ic; + key_temporal(ic).temporal_component=VT(ic,:); + end + insert(self3,key_temporal); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_compute_SVD_crossvalid.m b/DataJoint/fn/fn_compute_SVD_crossvalid.m new file mode 100644 index 0000000..b119104 --- /dev/null +++ b/DataJoint/fn/fn_compute_SVD_crossvalid.m @@ -0,0 +1,222 @@ +function fn_compute_SVD_crossvalid(key, rel_data1, self, flag_zscore,time_bin, threshold_for_event_vector, threshold_variance_explained, num_components_save) + +key.time_bin = time_bin; +try + imaging_frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + imaging_frame_rate = fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end + +roi_list=fetchn(rel_data1 & key,'roi_number','ORDER BY roi_number'); +num_rois=numel(roi_list); +chunk_size=500; +counter=0; +for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data1 & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + F(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); +end + +%% binning in time +if time_bin>0 + bin_size_in_frame=ceil(time_bin*imaging_frame_rate); + + bins_vector=1:bin_size_in_frame:size(F,2); + bins_vector=bins_vector(2:1:end); + for i= 1:1:numel(bins_vector) + ix1=(bins_vector(i)-bin_size_in_frame):1:(bins_vector(i)-1); + F_binned(:,i)=mean(F(:,ix1),2); + end +else + F_binned=F; +end + + +% for cross validation +cv_chunk = 60; %seconds +cv_chunk_in_bins = (cv_chunk*imaging_frame_rate/bin_size_in_frame); + +% cv_chunk_vector=unique([1:cv_chunk:size(F_binned,2),size(F_binned,2)]); +cv_chunk_vector=1:cv_chunk:size(F_binned,2); + +cv_chunk_vector_odd = cv_chunk_vector(1:2:end); +cv_chunk_vector_even = cv_chunk_vector(2:2:end); +cv_chunk_vector=cv_chunk_vector(2:1:end); + +idx_train =[]; +for i= 1:1:min([numel(cv_chunk_vector_odd),numel(cv_chunk_vector_even)]) + idx_train = [idx_train, cv_chunk_vector_odd(i):1:cv_chunk_vector_even(i)]; +end + +idx_test = setdiff(1:1:cv_chunk_vector(end),idx_train); + +min_length = min(numel(idx_train),numel(idx_test)); +idx_train=idx_train(1:1:min_length); +idx_test=idx_test(1:1:min_length); + + +F_binned = gpuArray(F_binned); + +% F_train = gpuArray(F_binned(:,idx_train)); +% F_test = gpuArray(F_binned(:,idx_test)); + +for i_th = 1:1:numel(threshold_for_event_vector) + threshold= threshold_for_event_vector(i_th); + key.threshold_for_event = threshold; + + F_thresholded=F_binned; + if threshold>0 + F_thresholded(zscore(F_binned,[],2)<=threshold)=0; + end + + if flag_zscore==0 %only centering the data + F_thresholded = F_thresholded-mean(F_thresholded,2); + else % zscoring the data + F_thresholded=zscore(F_thresholded,[],2); + end + + % %trained + % F_thresholded_train=F_train; + % if threshold>0 + % F_thresholded_train(zscore(F_train,[],2)<=threshold)=0; + % end + % + % if flag_zscore==0 %only centering the data + % F_thresholded_train = F_thresholded_train-mean(F_thresholded_train,2); + % else % zscoring the data + % F_thresholded_train=zscore(F_thresholded_train,[],2); + % end + + % %test + % F_thresholded_test=F_test; + % if threshold>0 + % F_thresholded_test(zscore(F_test,[],2)<=threshold)=0; + % end + % + % if flag_zscore==0 %only centering the data + % F_thresholded_test = F_thresholded_test-mean(F_thresholded_test,2); + % else % zscoring the data + % F_thresholded_test=zscore(F_thresholded_test,[],2); + % end + + + % [U,S,V]=svd(F_thresholded_train); % S time X neurons; % U time X time; V neurons x neurons + % S= gather(S); + % singular_values =diag(S); + % V= gather(V); + + + + + % %% PCA example + % D=F_binned(1:10,1:1:1000); + % D=D'; % time (rows) by neurons (columns) + % D = D- mean(D); % centering + % [loadings,PCs,~, ~, explained] = pca(D); + % % PCs: time( rows) by PCs (columns; same as number of neurons) + % % Loadings: neurons( rows) by PCs (columns; same as number of neurons) + % + % % Reconstructing the data from the PCs with dimensionality reduction + % %----------------------------------------------------------- + % FFF_reconstructed=PCs*loadings'; % reconstructing the original matrix from all PCs + % use_pcs=1:5; % take these PCs for dimensionality reduction + % FFF_reconstructed_partial=PCs(:,use_pcs)*loadings(:,use_pcs)'; % reconstructing the original matrix from some of the PCs + % + % % Reconstructing the PCs from the data. + % % -------------------------------------------------- + % % This is useful if we want to use a test set to reconstruct the PCs using loadings fromt he training set, + % % and measure how much variance do the PCs identified in + % % the training set explains in the test set. + % % Training/Test set can also be spontaneous/behavior sessions + % + % PCs_reconstructed = D*loadings; + % PCs_reconstructed_1stPC = D* loadings(:,1); + % + % var_PCs_explained =var(PCs)/sum(var(PCs)); % should be the same as 'explained' - one of the outputs of the PCA function + % + % + + + + + %% PCA cross validation by dividing the data in time into test/train set + %---------------------------------------------------------------------- + D=gather(F_thresholded); + D=D'; % time (rows) by neurons (columns) + + Dtrain = D(idx_train',:); + Dtest = D(idx_test',:); + + Dtrain = Dtrain - mean(Dtrain); + Dtest = Dtest - mean(Dtest); + + [loadings_train,PCs_train,~, ~, explained_train] = pca(Dtrain); + [loadings_test,PCs_test,~, ~, explained_test] = pca(Dtest); + + % PCs: time( rows) by PCs (columns; same as number of neurons) + % Loadings: neurons( rows) by PCs (columns; same as number of neurons) + + % Measuring shared variance + % -------------------------------------------------- + % This is useful if we want to use a test set to reconstruct the PCs using loadings fromt he training set, + % and measure how much variance do the PCs identified in + % the training set explains in the test set. + % Training/Test set can also be spontaneous/behavior sessions + + PCs_reconstructed_test = Dtest* loadings_train; + + var_explained_train =var(PCs_train)/sum(var(PCs_train)); + var_explained_test =var(PCs_test)/sum(var(PCs_test)); + var_explained_test_reconst =var(PCs_reconstructed_test)/sum(var(PCs_reconstructed_test)); + % shared_variance1=var_explained_test./var_explained_train; % proportion of variance explained + +% shared_variance1=var_explained_test./var_explained_train; % proportion of variance explained +% shared_variance2=var_explained_test-var_explained_train; % proportion of variance explained +% shared_variance3= 1 - (var_explained_test-var_explained_train); % proportion of variance explained +% my_shared_variance5= 1- (var_explained_test_reconst)./(var_explained_test_reconst+var_explained_train); % proportion of variance explained +% my_shared_variance= 1 - (var_explained_test_reconst-var_explained_train)./(var_explained_test_reconst+var_explained_train); % proportion of variance explained + + shared_variance6=var_explained_test_reconst./var_explained_test; % proportion of variance explained + + shared_variance7=var(PCs_reconstructed_test)./var(PCs_train); % proportion of variance explained + + + + %% Shared variance explained based on Stringer et al. Science 2019 + + D=F_binned (:,1:max([idx_test,idx_train])); + ntrain=1:2:size(D,1); + ntest=2:2:size(D,1); + itest=idx_test; + itrain=idx_train; + + npc = min([numel(ntrain),numel(ntest)]); %102 + + [sneur, varneur, u, v] = SVCA(D, npc, ntrain, ntest, itrain, itest); + % sneur (shared variance of each covariance component) + % vneur (total variance of each covariance component) +% semilogx(sneur./varneur) + + +SharedVarainceCalc_Ran(D(ntrain,itrain),D(ntest,itest)) + + %% Populating + key_insert=key; + key_insert.shared_variance_stringer= gather(sneur); + key_insert.total_variance_stringer= gather(varneur); + + key_insert.var_explained_train= var_explained_train; + key_insert.var_explained_test= var_explained_test_reconst; + key_insert.my_shared_variance= my_shared_variance; + + + + insert(self,key_insert); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_compute_distance_psth_correlation.m b/DataJoint/fn/fn_compute_distance_psth_correlation.m new file mode 100644 index 0000000..31278be --- /dev/null +++ b/DataJoint/fn/fn_compute_distance_psth_correlation.m @@ -0,0 +1,199 @@ +function fn_compute_distance_psth_correlation(rel_roi, rel_data, key,self, dir_save_fig, goodness_of_fit_vmises_threshold) + +column_radius(1) =50; % microns +column_radius(2) =200; % microns + + + + +DefaultFontSize =12; + +% set(gcf,'DefaultAxesFontSize',6); + +horizontal_dist=0.45; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + + + +lateral_distance_bins=[0,20,30:10:210]; +min_distance_in_xy=5; %to exclude auto-focus flourescence + +session_date = fetch1(EXP2.Session & key,'session_date'); +try + filename = sprintf('anm%d_s%d_%s_threshold%d',key.subject_id,key.session, session_date, 100*key.odd_even_corr_threshold); +catch + filename = sprintf('anm%d_s%d_%s_vnmises%d',key.subject_id,key.session, session_date, 100*goodness_of_fit_vmises_threshold); +end + +%% Loading Data +roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); +chunk_size=500; +counter=0; +for i_chunk=1:chunk_size:roi_list(end) + roi_interval = [i_chunk, i_chunk+chunk_size]; + try + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'psth_quadrants','ORDER BY roi_number')); + catch + try + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'psth','ORDER BY roi_number')); + catch + temp_F=cell2mat(fetchn(rel_data & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'theta_tuning_curve','ORDER BY roi_number')); + end + end + temp_count=(counter+1):1: (counter + size(temp_F,1)); + F(temp_count,:)=temp_F; + counter = counter + size(temp_F,1); +end + + +%% Distance between all pairs + +x_all=fetchn(rel_roi &key,'roi_centroid_x','ORDER BY roi_number'); +y_all=fetchn(rel_roi &key,'roi_centroid_y','ORDER BY roi_number'); +z_all=fetchn(rel_roi*IMG.PlaneCoordinates & key,'z_pos_relative','ORDER BY roi_number'); + +x_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'x_pos_relative','ORDER BY roi_number'); +y_pos_relative=fetchn(rel_roi*IMG.PlaneCoordinates &key,'y_pos_relative','ORDER BY roi_number'); + +x_all = x_all + x_pos_relative; x_all = x_all/0.75; +y_all = y_all + y_pos_relative; y_all = y_all/0.5; + + + +dXY=zeros(numel(x_all),numel(x_all)); +% d3D=zeros(numel(x_all),numel(x_all)); +dZ=zeros(numel(z_all),numel(z_all)); +parfor iROI=1:1:numel(x_all) + x=x_all(iROI); + y=y_all(iROI); + z=z_all(iROI); + dXY(iROI,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(iROI,:)= abs(z_all-z); % in um + % d3D(iROI,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um +end + +axial_distance_bins = unique(dZ)'; +key.axial_distance_bins=axial_distance_bins; + +temp=logical(tril(dXY)); +idx_up_triangle=~temp; +dZ = dZ(idx_up_triangle); +dXY = dXY(idx_up_triangle); + + +%% Computing SVD and correlations +rho=[]; +F = gpuArray((F)); +try + rho=corrcoef(F','rows','pairwise'); + rho=gather(rho); +catch + F=gather(F); + rho=corrcoef(F','rows','pairwise'); +end +rho = rho(idx_up_triangle); + +distance_corr_2d=zeros(numel(axial_distance_bins),numel(lateral_distance_bins)-1); +for i_l=1:1:numel(lateral_distance_bins)-1 + idx_lateral = dXY>lateral_distance_bins(i_l) & dXY<=lateral_distance_bins(i_l+1) & dXY>=min_distance_in_xy; + dz_temp=dZ(idx_lateral); + rho_lateral=rho(idx_lateral); + distance_corr_lateral(i_l)=nanmean(rho_lateral); + parfor i_a=1:1:numel(axial_distance_bins) + idx_axial = dz_temp==axial_distance_bins(i_a); + distance_corr_2d(i_a,i_l)=nanmean(rho_lateral(idx_axial)); + end +end + + +% axial within column +for i_a=1:1:numel(axial_distance_bins) + idx_lateral = dXY<=column_radius(1) & dXY>=min_distance_in_xy; + idx_axial = dZ==axial_distance_bins(i_a); + distance_corr_axial_inside_column(i_a)=nanmean(rho(idx_axial & idx_lateral)); +end + +% axial outside column +for i_a=1:1:numel(axial_distance_bins) + idx_lateral = dXY<=column_radius(2) & dXY>column_radius(1); + idx_axial = dZ==axial_distance_bins(i_a); + distance_corr_axial_outside_column(i_a)=nanmean(rho(idx_axial & idx_lateral)); +end + + + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + +imagesc(lateral_distance_bins(1:1:end-1), axial_distance_bins, distance_corr_2d') +xlabel('Lateral Distance (um)'); +ylabel('Axial Distance (um)'); +% colorbar +colormap(inferno) +c_lim(1)=nanmin(distance_corr_2d(:)); +c_lim(2) = nanmax(distance_corr_2d(:)); +caxis([c_lim]); + +axis tight +axis equal +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[axial_distance_bins],'XTick',[0,50:50:200]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +try + title(sprintf('anm%d s%d %s \nodd even corr threshold = %.2f \n',key.subject_id,key.session, session_date, key.odd_even_corr_threshold)); +catch + title(sprintf('anm%d s%d %s \ngoodness of fit vonmises = %.2f \n',key.subject_id,key.session, session_date, goodness_of_fit_vmises_threshold)); +end + + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.07, panel_width1*0.2, panel_height1*0.45]); +colormap(ax2, inferno) +caxis(c_lim); +cb=colorbar; +text(12, 0.2, ['Correlation'],'Rotation',90); +axis off + + +if isempty(dir(dir_save_fig)) + mkdir (dir_save_fig) +end + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + + + +figure_name_out=[dir_save_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); +clf; + +try + key.goodness_of_fit_vmises = goodness_of_fit_vmises_threshold; +catch +end +key.lateral_distance_bins=lateral_distance_bins; +key.num_cells_included = numel(roi_list); +key.distance_corr_2d=distance_corr_2d; +key.distance_corr_lateral=distance_corr_lateral; +key.distance_corr_axial_inside_column = distance_corr_axial_inside_column; +key.distance_corr_axial_outside_column = distance_corr_axial_outside_column; + +insert(self,key); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_compute_map_dff.m b/DataJoint/fn/fn_compute_map_dff.m new file mode 100644 index 0000000..7de0f18 --- /dev/null +++ b/DataJoint/fn/fn_compute_map_dff.m @@ -0,0 +1,31 @@ +function [map_f_smoothed, map_dff_smoothed] = fn_compute_map_dff (map, smoothing_2D_size, baselineF_2D, z_score_threshold) + + + +%% df/f +map_f_smoothed =zeros(size(map)); +map_dff_smoothed =zeros(size(map)); +map_dff =zeros(size(map)); + +for i_fr=1:1:size(map,3) + f=map(:,:,i_fr); + deltaf=f-baselineF_2D; + z=zscore(deltaf(:)); + idx_remove=abs(z)3; + dff(idx_outliers)=0; % remove any remaining outliers due to division by small numbers + +% map_f_smoothed(:,:,i_fr) = smooth2a(f, smoothing_2D_size, smoothing_2D_size); % +% map_dff_smoothed(:,:,i_fr) = smooth2a(dff, smoothing_2D_size, smoothing_2D_size); %pixel by pixel df/f +map_dff(:,:,i_fr)=dff; +% map_f_smoothed(:,:,i_fr) = smooth2a(f, smoothing_2D_size, smoothing_2D_size); % +% map_dff_smoothed(:,:,i_fr) = smooth2a(dff, smoothing_2D_size, smoothing_2D_size); %pixel by pixel df/f + +end +smoothing_3D_size=5; +map_dff_smoothed = smooth3(map_dff,'gaussian',smoothing_3D_size); %3D smoothing in x-y-z +map_f_smoothed = smooth3(map,'gaussian',smoothing_3D_size); %3D smoothing in x-y-z + diff --git a/DataJoint/fn/fn_compute_map_dff2.m b/DataJoint/fn/fn_compute_map_dff2.m new file mode 100644 index 0000000..5fd1842 --- /dev/null +++ b/DataJoint/fn/fn_compute_map_dff2.m @@ -0,0 +1,35 @@ +function [map_f_smoothed, map_dff_smoothed] = fn_compute_map_dff2 (map, smoothing_3D_size, baselineF_2D, z_score_threshold, blank_idx) + + + +%% df/f +% map_f_smoothed =zeros(size(map)); +% map_dff_smoothed =zeros(size(map)); +map_dff =zeros(size(map)); +map_f =zeros(size(map)); + +for i_fr=1:1:size(map,3) + f=map(:,:,i_fr); + deltaf=f-baselineF_2D; + deltaf(blank_idx)=0; +% z=zscore(deltaf(:)); +% idx_remove=abs(z)10; +% dff(idx_outliers)=0; % remove any remaining outliers due to division by small numbers + + % map_f_smoothed(:,:,i_fr) = smooth2a(f, smoothing_2D_size, smoothing_2D_size); % + % map_dff_smoothed(:,:,i_fr) = smooth2a(dff, smoothing_2D_size, smoothing_2D_size); %pixel by pixel df/f + map_dff(:,:,i_fr)=dff; + % map_f_smoothed(:,:,i_fr) = smooth2a(f, smoothing_2D_size, smoothing_2D_size); % + % map_dff_smoothed(:,:,i_fr) = smooth2a(dff, smoothing_2D_size, smoothing_2D_size); %pixel by pixel df/f + f(blank_idx)=0; + map_f(:,:,i_fr)=f; + +end +% smoothing_3D_size=5; +map_dff_smoothed = smooth3(map_dff,'gaussian',smoothing_3D_size); %3D smoothing in x-y-z +map_f_smoothed = smooth3(map_f,'gaussian',smoothing_3D_size); %3D smoothing in x-y-z + diff --git a/DataJoint/fn/fn_compute_roi_task_significance.m b/DataJoint/fn/fn_compute_roi_task_significance.m new file mode 100644 index 0000000..30559a0 --- /dev/null +++ b/DataJoint/fn/fn_compute_roi_task_significance.m @@ -0,0 +1,37 @@ +function k_insert = fn_compute_roi_task_significance (psth_roi_tr_fr, trials1, trials2, tint1, tint2, psth_t_vector, k_insert) + +k_insert.signif_time1_st = tint1(1); +k_insert.signif_time1_end = tint1(2); +k_insert.signif_time2_st = tint2(1); +k_insert.signif_time2_end = tint2(2); + + +%set 1 - trial average and variance, for the specified time-interval for all units +ix_t = find(psth_t_vector >= tint1(1) & psth_t_vector < tint1(2)); +set1 = squeeze(nanmean(psth_roi_tr_fr( :, trials1, ix_t), 3)); +% set1avg = squeeze(nanmean(set1, 2)); +% set1var = squeeze(nanvar(set1,[], 2)); +% unit_trials1 = sum(~isnan(set1),2); + +%set 2 - trial average and variance, for the specified time-interval for all units +ix_t = find(psth_t_vector >= tint2(1) & psth_t_vector < tint2(2)); +set2 = squeeze(nanmean(psth_roi_tr_fr( :, trials2, ix_t), 3)); +% set2avg = squeeze(nanmean(set2, 2)); +% set2var = squeeze(nanvar(set2,[], 2)); +% unit_trials2 = sum(~isnan(set2),2); + + +k_insert =repmat(k_insert,size(set1,1),1); + +for i_roi = 1:1:size(set1,1) + if ( sum(~isnan(set1(i_roi,:)))==0 || sum(~isnan(set2(i_roi,:)))==0 ) + pVal(i_roi) =NaN; + else + pVal(i_roi) = ranksum(set1(i_roi,:),set2(i_roi,:)); + end + k_insert(i_roi).task_signif_pval = pVal(i_roi) ; + k_insert(i_roi).roi_number = i_roi; + +end + + diff --git a/DataJoint/fn/fn_compute_roi_weights.m b/DataJoint/fn/fn_compute_roi_weights.m new file mode 100644 index 0000000..346bbd1 --- /dev/null +++ b/DataJoint/fn/fn_compute_roi_weights.m @@ -0,0 +1,36 @@ +function [k_insert,weights] = fn_compute_roi_weights (psth_roi_tr_fr, trials1, trials2, tint1, tint2, psth_t_vector, k_insert) + +k_insert.mode_time1_st = tint1(1); +k_insert.mode_time1_end = tint1(2); +k_insert.mode_time2_st = tint2(1); +k_insert.mode_time2_end = tint2(2); + + +%set 1 - trial average and variance, for the specified time-interval for all units +ix_t = find(psth_t_vector >= tint1(1) & psth_t_vector < tint1(2)); +set1 = squeeze(nanmean(psth_roi_tr_fr( :, trials1, ix_t), 3)); +set1avg = squeeze(nanmean(set1, 2)); +set1var = squeeze(nanvar(set1,[], 2)); + +%set 2 - trial average and variance, for the specified time-interval for all units +ix_t = find(psth_t_vector >= tint2(1) & psth_t_vector < tint2(2)); +set2 = squeeze(nanmean(psth_roi_tr_fr( :, trials2, ix_t), 3)); +set2avg = squeeze(nanmean(set2, 2)); +set2var = squeeze(nanvar(set2,[], 2)); + + +k_insert =repmat(k_insert,size(set1,1),1); + +for i_roi = 1:1:size(set1,1) + if ( isnan(set1avg(i_roi)) || isnan(set2avg(i_roi)) || (set1var(i_roi)+set2var(i_roi)<1e-9)) + weights (i_roi) =NaN; + else + weights(i_roi) = (set1avg(i_roi) - set2avg(i_roi))./sqrt(set1var(i_roi)+set2var(i_roi)); +% weights(i_roi) = set1avg(i_roi) - set2avg(i_roi); + + end + k_insert(i_roi).mode_unit_weight = weights(i_roi); + k_insert(i_roi).roi_number = i_roi; +end + + diff --git a/DataJoint/fn/fn_computer_Lick2DLickRate.m b/DataJoint/fn/fn_computer_Lick2DLickRate.m new file mode 100644 index 0000000..b8bd361 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2DLickRate.m @@ -0,0 +1,40 @@ +function fn_computer_Lick2DLickRate(key,self, rel_data,threshold_for_event) +smooth_window=3; + +key_ROI1=fetch(IMG.ROI&key,'ORDER BY roi_number'); % + + +% go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + + +S=fetch(rel_data & key,'*'); +if isfield(S,'spikes_trace') % to be able to run the code both on dff and on deconvulted "spikes" data + [S.dff_trace] = S.spikes_trace; + S = rmfield(S,'spikes_trace'); +end + + +[licks_vector,idx_frames] = fn_compute_corr_with_licking (key, frame_rate, smooth_window); + +threshold_for_event_temp=threshold_for_event; +threshold_for_event_temp(threshold_for_event==0)=-inf; + +for i_thr=1:1:numel(threshold_for_event) + + for i_roi=1:1:size(S,1) + + key_ROI1(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI1(i_roi).session_epoch_number = key.session_epoch_number; + + %% correlation with lick-rate + trace=S(i_roi).dff_trace; + trace(tracefr_interval(1) & time<=fr_interval(2)); + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_tr}=s; + end + + + psth = mean(cell2mat(psth_all(idx_response)'),1); + psth_stem = std(cell2mat(psth_all(idx_response)'),1)/sqrt(sum(idx_response)); + psth_odd = nanmean(cell2mat(psth_all(idx_odd)'),1); + psth_even = nanmean(cell2mat(psth_all(idx_even)'),1); + + key_ROI1(i_roi).psth = psth; + key_ROI1(i_roi).psth_stem = psth_stem; + key_ROI1(i_roi).psth_odd = psth_odd; + key_ROI1(i_roi).psth_even = psth_even; + key_ROI1(i_roi).psth_time = time; + + r = corr([psth_odd(:),psth_even(:)],'Rows' ,'pairwise'); + key_ROI2(i_roi).psth_odd_even_corr = r(2); + + [~,idx_peak_psth]=max(psth); + key_ROI2(i_roi).peaktime_psth = time(idx_peak_psth); + [~,idx_peak]=max(psth_odd); + key_ROI2(i_roi).peaktime_psth_odd = time(idx_peak); + [~,idx_peak]=max(psth_even); + key_ROI2(i_roi).peaktime_psth_even = time(idx_peak); + + + try + + + %% Reward + % psth reward, averaged across trials + psth_small = nanmean(cell2mat(psth_all(idx_small)'),1); + psth_regular = nanmean(cell2mat(psth_all(idx_regular)'),1); + psth_large = nanmean(cell2mat(psth_all(idx_large)'),1); + + key_ROI1(i_roi).psth_small = psth_small; + key_ROI1(i_roi).psth_regular = psth_regular; + key_ROI1(i_roi).psth_large = psth_large; + + [~,idx_peak]=max(psth_small); + key_ROI2(i_roi).peaktime_psth_small = time(idx_peak); + [~,idx_peak]=max(psth_regular); + key_ROI2(i_roi).peaktime_psth_regular = time(idx_peak); + [~,idx_peak]=max(psth_large); + key_ROI2(i_roi).peaktime_psth_large = time(idx_peak); + + % averaged across time, for all trial duration + psth_small = nanmean(cell2mat(psth_all(idx_small)'),2); + psth_regular = nanmean(cell2mat(psth_all(idx_regular)'),2); + psth_large = nanmean(cell2mat(psth_all(idx_large)'),2); + + key_ROI3(i_roi).reward_mean_small = nanmean(psth_small); + key_ROI3(i_roi).reward_mean_regular = nanmean(psth_regular); + key_ROI3(i_roi).reward_mean_large = nanmean(psth_large); + + [p,~] = ranksum(psth_regular,psth_small); + key_ROI3(i_roi).reward_mean_pval_regular_small = p; + [p,~] = ranksum(psth_regular,psth_large); + key_ROI3(i_roi).reward_mean_pval_regular_large = p; + [p,~] = ranksum(psth_small,psth_large); + key_ROI3(i_roi).reward_mean_pval_small_large = p; + + + % at peak response time + psth_small = cell2mat(psth_all(idx_small)'); psth_small = psth_small(:,idx_peak_psth); + psth_regular = cell2mat(psth_all(idx_regular)'); psth_regular = psth_regular(:,idx_peak_psth); + psth_large = cell2mat(psth_all(idx_large)'); psth_large = psth_large(:,idx_peak_psth); + + key_ROI3(i_roi).reward_peak_small = nanmean(psth_small); + key_ROI3(i_roi).reward_peak_regular = nanmean(psth_regular); + key_ROI3(i_roi).reward_peak_large = nanmean(psth_large); + + [p,~] = ranksum(psth_regular,psth_small); + key_ROI3(i_roi).reward_peak_pval_regular_small = p; + [p,~] = ranksum(psth_regular,psth_large); + key_ROI3(i_roi).reward_peak_pval_regular_large = p; + [p,~] = ranksum(psth_small,psth_large); + key_ROI3(i_roi).reward_peak_pval_small_large = p; + + + %% BLOCK + % psth block, averaged across trials + psth_first = nanmean(cell2mat(psth_all(idx_first)'),1); + psth_begin = nanmean(cell2mat(psth_all(idx_begin)'),1); + psth_mid = nanmean(cell2mat(psth_all(idx_mid)'),1); + psth_end = nanmean(cell2mat(psth_all(idx_end)'),1); + + key_ROI1(i_roi).psth_first = psth_first; + key_ROI1(i_roi).psth_begin = psth_begin; + key_ROI1(i_roi).psth_mid = psth_mid; + key_ROI1(i_roi).psth_end = psth_end; + + [~,idx_peak]=max(psth_first); + key_ROI2(i_roi).peaktime_psth_first = time(idx_peak); + [~,idx_peak]=max(psth_begin); + key_ROI2(i_roi).peaktime_psth_begin = time(idx_peak); + [~,idx_peak]=max(psth_mid); + key_ROI2(i_roi).peaktime_psth_mid = time(idx_peak); + [~,idx_peak]=max(psth_end); + key_ROI2(i_roi).peaktime_psth_end = time(idx_peak); + + % averaged across time, for all trial duration + psth_first = nanmean(cell2mat(psth_all(idx_first)'),2); + psth_begin = nanmean(cell2mat(psth_all(idx_begin)'),2); + psth_mid = nanmean(cell2mat(psth_all(idx_mid)'),2); + psth_end = nanmean(cell2mat(psth_all(idx_end)'),2); + + key_ROI4(i_roi).block_mean_first = nanmean(psth_first); + key_ROI4(i_roi).block_mean_begin = nanmean(psth_begin); + key_ROI4(i_roi).block_mean_mid = nanmean(psth_mid); + key_ROI4(i_roi).block_mean_end = nanmean(psth_end); + + [p,~] = ranksum(psth_first,psth_begin); + key_ROI4(i_roi).block_mean_pval_first_begin = p; + [p,~] = ranksum(psth_first,psth_end); + key_ROI4(i_roi).block_mean_pval_first_end = p; + [p,~] = ranksum(psth_begin,psth_end); + key_ROI4(i_roi).block_mean_pval_begin_end = p; + + + % at peak response time + psth_first = cell2mat(psth_all(idx_first)'); psth_first = psth_first(:,idx_peak_psth); + psth_begin = cell2mat(psth_all(idx_begin)'); psth_begin = psth_begin(:,idx_peak_psth); + psth_mid = cell2mat(psth_all(idx_mid)'); psth_mid = psth_mid(:,idx_peak_psth); + psth_end = cell2mat(psth_all(idx_end)'); psth_end = psth_end(:,idx_peak_psth); + + key_ROI4(i_roi).block_peak_first = nanmean(psth_first); + key_ROI4(i_roi).block_peak_begin = nanmean(psth_begin); + key_ROI4(i_roi).block_peak_mid = nanmean(psth_mid); + key_ROI4(i_roi).block_peak_end = nanmean(psth_end); + + [p,~] = ranksum(psth_first,psth_begin); + key_ROI4(i_roi).block_peak_pval_first_begin = p; + [p,~] = ranksum(psth_first,psth_end); + key_ROI4(i_roi).block_peak_pval_first_end = p; + [p,~] = ranksum(psth_begin,psth_end); + key_ROI4(i_roi).block_peak_pval_begin_end = p; + + k2=key_ROI3(i_roi); + insert(self3, k2); + k2=key_ROI4(i_roi); + insert(self4, k2); + + catch + end + + k2=key_ROI1(i_roi); + insert(self, k2); + k2=key_ROI2(i_roi); + insert(self2, k2); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2DPSTH_block.m b/DataJoint/fn/fn_computer_Lick2DPSTH_block.m new file mode 100644 index 0000000..517632a --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2DPSTH_block.m @@ -0,0 +1,97 @@ +function fn_computer_Lick2DPSTH_block(key,self) + +time_bin=[-3,3]; %2 sec for PSTH, aligned to lick +fr_interval1=[key.fr_interval_start1,key.fr_interval_end1]/1000; +fr_interval2=[key.fr_interval_start2,key.fr_interval_end2]/1000; + +smooth_window=1; %frames for PSTH + +key_ROI=fetch((IMG.ROI-IMG.ROIBad)&key,'ORDER BY roi_number'); + +LickPort=fetch(EXP2.TrialLickPort & key,'*'); + +go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*','ORDER BY session_epoch_file_num'); +L=fetch(EXP2.ActionEvent & key,'*','ORDER BY trial'); + +S=fetch(IMG.ROISpikes & key,'*','ORDER BY roi_number'); + + +for i_tr = 1:1:size(LickPort,1) + licks=[L(find([L.trial]==i_tr)).action_event_time]; + licks=licks(licks>go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + +Block=fetch(EXP2.TrialLickBlock & key,'*','ORDER BY trial'); + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:size(LickPort,1) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + psth_all{i_roi,i_tr}=s; + end + idx_first = find( ~isnan(start_file) & ([Block.current_trial_num_in_block]==1)); + idx_begin = find( ~isnan(start_file) & ([Block.current_trial_num_in_block]==2 | [Block.current_trial_num_in_block]==3)); + idx_mid= find(~isnan(start_file) & ([Block.current_trial_num_in_block]==4 | [Block.current_trial_num_in_block]==5)); + idx_end= find(~isnan(start_file) & ([Block.current_trial_num_in_block]==6 | [Block.current_trial_num_in_block]==7)); + +% psth=cell2mat(psth_all(i_roi, idx_begin)'); + psth_averaged_over_all_positions_first = mean(cell2mat(psth_all(i_roi, idx_first)'),1); + psth_averaged_over_all_positions_begin = mean(cell2mat(psth_all(i_roi, idx_begin)'),1); +% psth_stem_over_all_positions_begin = std(psth,1)/sqrt(sum(idx_begin)); + psth_averaged_over_all_positions_mid = mean(cell2mat(psth_all(i_roi, idx_mid)'),1); + psth_averaged_over_all_positions_end = mean(cell2mat(psth_all(i_roi, idx_end)'),1); +% psth_interval1=psth(:,time>fr_interval1(1) & time<=fr_interval1(2)); +% psth_interval2=psth(:,time>fr_interval2(1) & time<=fr_interval2(2)); +% +% pval_psth = ranksum(mean(psth_interval1,2),mean(psth_interval2,2)); + + + + + + + % [~, p_val] = ttest(mean(Fbase,2),mean(Fstim,2)); + + + + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI(i_roi).fr_interval_start1 =key.fr_interval_start1; + key_ROI(i_roi).fr_interval_end1 =key.fr_interval_end1; + key_ROI(i_roi).fr_interval_start2 =key.fr_interval_start2; + key_ROI(i_roi).fr_interval_end2 =key.fr_interval_end2; + + key_ROI(i_roi).psth_averaged_over_all_positions_first = psth_averaged_over_all_positions_first; + key_ROI(i_roi).psth_averaged_over_all_positions_begin = psth_averaged_over_all_positions_begin; +% key_ROI(i_roi).pval_psth = pval_psth; + key_ROI(i_roi).psth_averaged_over_all_positions_mid = psth_averaged_over_all_positions_mid; + key_ROI(i_roi).psth_averaged_over_all_positions_end = psth_averaged_over_all_positions_end; + + + k2=key_ROI(i_roi); + insert(self, k2); +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2DPSTH_reward.m b/DataJoint/fn/fn_computer_Lick2DPSTH_reward.m new file mode 100644 index 0000000..b0ff248 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2DPSTH_reward.m @@ -0,0 +1,98 @@ +function fn_computer_Lick2DPSTH_reward(key,self) + +time_bin=[-3,3]; %2 sec for PSTH, aligned to lick +fr_interval1=[key.fr_interval_start1,key.fr_interval_end1]/1000; +fr_interval2=[key.fr_interval_start2,key.fr_interval_end2]/1000; + +smooth_window=1; %frames for PSTH + +key_ROI=fetch((IMG.ROI-IMG.ROIBad)&key,'ORDER BY roi_number'); + +LickPort=fetch(EXP2.TrialLickPort & key,'*'); + +go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*','ORDER BY session_epoch_file_num'); +L=fetch(EXP2.ActionEvent & key,'*','ORDER BY trial'); + +S=fetch(IMG.ROISpikes & key,'*','ORDER BY roi_number'); + + +for i_tr = 1:1:size(LickPort,1) + licks=[L(find([L.trial]==i_tr)).action_event_time]; + licks=licks(licks>go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + +R=fetch(EXP2.TrialRewardSize & key,'*','ORDER BY trial'); +Block=fetch(EXP2.TrialLickBlock & key,'*','ORDER BY trial'); + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:size(LickPort,1) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + psth_all{i_roi,i_tr}=s; + end + + idx_regular = find( ~isnan(start_file) & strcmp({R.reward_size_type},'regular') & ([Block.current_trial_num_in_block]~=1)); % we don't include the first trial in the block + idx_large= find( ~isnan(start_file) & strcmp({R.reward_size_type},'large') & ([Block.current_trial_num_in_block]~=1)); + idx_small= find( ~isnan(start_file) & strcmp({R.reward_size_type},'omission') & ([Block.current_trial_num_in_block]~=1)); + + % psth=cell2mat(psth_all(i_roi, idx_regular)'); + psth_averaged_over_all_positions_regular = mean(cell2mat(psth_all(i_roi, idx_regular)'),1); + psth_averaged_over_all_positions_large = mean(cell2mat(psth_all(i_roi, idx_large)'),1); + psth_averaged_over_all_positions_small = mean(cell2mat(psth_all(i_roi, idx_small)'),1); + + % psth_stem_over_all_positions_regular = std(psth,1)/sqrt(sum(idx)); + % + % psth_interval1=psth(:,time>fr_interval1(1) & time<=fr_interval1(2)); + % psth_interval2=psth(:,time>fr_interval2(1) & time<=fr_interval2(2)); + + % pval_psth = ranksum(mean(psth_interval1,2),mean(psth_interval2,2)); + + + + % [~, p_val] = ttest(mean(Fbase,2),mean(Fstim,2)); + + + + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI(i_roi).fr_interval_start1 =key.fr_interval_start1; + key_ROI(i_roi).fr_interval_end1 =key.fr_interval_end1; + key_ROI(i_roi).fr_interval_start2 =key.fr_interval_start2; + key_ROI(i_roi).fr_interval_end2 =key.fr_interval_end2; + + + key_ROI(i_roi).psth_averaged_over_all_positions_regular = psth_averaged_over_all_positions_regular; + % key_ROI(i_roi).psth_stem_over_all_positions_regular = psth_stem_over_all_positions_regular; + % key_ROI(i_roi).pval_psth = pval_psth; + + key_ROI(i_roi).psth_averaged_over_all_positions_large = psth_averaged_over_all_positions_large; + key_ROI(i_roi).psth_averaged_over_all_positions_small = psth_averaged_over_all_positions_small; + + + k2=key_ROI(i_roi); + insert(self, k2); +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2DQuadrantsPSTH.m b/DataJoint/fn/fn_computer_Lick2DQuadrantsPSTH.m new file mode 100644 index 0000000..eeef186 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2DQuadrantsPSTH.m @@ -0,0 +1,139 @@ +function fn_computer_Lick2DQuadrantsPSTH(key,self, rel_data, fr_interval,dir_current_fig) + +smooth_window_sec=0.2; %frames for PSTH +radius_threshold = 0.1; + + + +rel_ROI = (IMG.ROI-IMG.ROIBad) & key; +key_ROI1=fetch(rel_ROI,'ORDER BY roi_number'); % LICK2D.ROILick2DPSTH + +rel_data =rel_data & rel_ROI & key; + +session_date = fetch1(EXP2.Session & key,'session_date'); + + +try + frame_rate = fetch1(IMG.FOVEpoch & key,'imaging_frame_rate'); +catch + frame_rate = fetch1(IMG.FOV & key,'imaging_frame_rate'); +end + +smooth_window_frames = ceil(smooth_window_sec*frame_rate); %frames for PSTH + +S=fetch(rel_data,'*'); +if isfield(S,'spikes_trace') % to be able to run the code both on dff and on deconvulted "spikes" data + [S.dff_trace] = S.spikes_trace; + S = rmfield(S,'spikes_trace'); +end + +[start_file, end_file ] = fn_parse_into_trials (key, frame_rate, fr_interval); +num_trials =numel(start_file); + +idx_response = (~isnan(start_file)); +% idx odd/even +idx_odd = ismember(1:1:num_trials,1:2:num_trials) & idx_response; +idx_even = ismember(1:1:num_trials,2:2:num_trials) & idx_response; + + +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + + +[theta, radius] = cart2pol(pos_x,pos_z); +theta=rad2deg(theta); + +%Dividing of the data based on quadrants of the tongue-directin response +idx_Q{1}=(theta>-15 & theta<90 & radius>radius_threshold); % radius threshold ensured that we don't take the central bin in case of a 3x3 arrangment +idx_Q{2}=(theta>=90 & theta<180 & radius>radius_threshold); +idx_Q{3}=((theta>=-180 & theta<-90) | theta==180) & radius>radius_threshold; +idx_Q{4}=(theta>=-90 & theta<=-15 & radius>radius_threshold); + +%% for DEBUG +hold on +plot(pos_x+rand(1,numel(pos_x))/10, pos_z+rand(1,numel(pos_x))/10,'.') +% we assign more trials to the two bottom quadrants, becuase the behavioral coverage is often poorer in bottom quandrants +plot(pos_x(idx_Q{1}),pos_z(idx_Q{1}),'or') +plot(pos_x(idx_Q{2}),pos_z(idx_Q{2}),'og') +plot(pos_x(idx_Q{3}),pos_z(idx_Q{3}),'ob') +plot(pos_x(idx_Q{4}),pos_z(idx_Q{4}),'om') +title(sprintf('anm%d %s session %d',key.subject_id, session_date, key.session),'FontSize',10); + + +for i_roi=1:1:size(S,1) + + key_ROI1(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI1(i_roi).session_epoch_number = key.session_epoch_number; + + key_ROI2(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI2(i_roi).session_epoch_number = key.session_epoch_number; + + + %% PSTH + spikes=S(i_roi).dff_trace; + for i_tr = 1:1:numel(start_file) + if idx_response(i_tr)==0 %its an ignore trial + psth_all{i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window_frames 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + fr_interval(1); + % s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_tr}=s; + end + + psth=[]; + psth_stem=[]; + psth_odd=[]; + psth_even=[]; + + % Contactenated PSTH for the 4 different quadrants + for i_q = 1:1:numel(idx_Q) + current_idx = idx_response & idx_Q{i_q}; + psth = [psth, mean(cell2mat(psth_all(current_idx)'),1)]; + psth_stem = [psth_stem, std(cell2mat(psth_all(current_idx)'),1)/sqrt(sum(current_idx))]; + + psth_odd = [psth_odd, mean(cell2mat(psth_all(current_idx & idx_odd)'),1)]; + psth_even = [psth_even, mean(cell2mat(psth_all(current_idx & idx_even)'),1)]; + + end + + + + key_ROI1(i_roi).psth_quadrants = psth; + key_ROI1(i_roi).psth_quadrants_stem = psth_stem; + key_ROI1(i_roi).psth_quadrants_odd = psth_odd; + key_ROI1(i_roi).psth_quadrants_even = psth_even; + key_ROI1(i_roi).psth_quadrants_time = time; + + r = corr([psth_odd(:),psth_even(:)],'Rows' ,'pairwise'); + key_ROI1(i_roi).psth_quadrants_odd_even_corr = r(2); + + + k2=key_ROI1(i_roi); + insert(self, k2); + + % clf + % hold on; plot(time,nanmean(cell2mat(psth_all(idx_response & idx_Q{1})'),1)) + % hold on; plot(time,nanmean(cell2mat(psth_all(idx_response & idx_Q{2})'),1)) + % hold on; plot(time,nanmean(cell2mat(psth_all(idx_response & idx_Q{3})'),1)) + % hold on; plot(time,nanmean(cell2mat(psth_all(idx_response & idx_Q{4})'),1)) + % title(sprintf('ROI = %d r [odd,even]=%.2f',key_ROI1(i_roi).roi_number,r(2))) + +end + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +filename=[num2str(key.subject_id) '_s' num2str( key.session) '_' num2str(session_date) '_quadrants' ]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); +clf +% eval(['print ', figure_name_out, ' -dpdf -r200']); + diff --git a/DataJoint/fn/fn_computer_Lick2DRidge.m b/DataJoint/fn/fn_computer_Lick2DRidge.m new file mode 100644 index 0000000..2a31326 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2DRidge.m @@ -0,0 +1,43 @@ +function fn_computer_Lick2DRidge(key,self, rel_data,threshold_for_event) +smooth_window=3; + +key_ROI1=fetch(IMG.ROI&key,'ORDER BY roi_number'); % + + +% go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + + +S=fetch(rel_data & key,'*'); +if isfield(S,'spikes_trace') % to be able to run the code both on dff and on deconvulted "spikes" data + [S.dff_trace] = S.spikes_trace; + S = rmfield(S,'spikes_trace'); +end + + +[predictor_vector,idx_frames] = fn_compute_ridge_predictors (key, frame_rate); + +threshold_for_event_temp=threshold_for_event; +threshold_for_event_temp(threshold_for_event==0)=-inf; + +ridge_k_vector = 0:1:10; + +for i_thr=1:1:numel(threshold_for_event) + + for i_roi=1:1:size(S,1) + + key_ROI1(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI1(i_roi).session_epoch_number = key.session_epoch_number; + + %% correlation with lick-rate + trace=S(i_roi).dff_trace; + trace(tracefr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + end + + + for i_theta=1:1:numel(theta_bins_centers) + idx= find( (theta_idx==i_theta) & ~isnan(start_file) & radius>radius_threshold ); + theta_spikes_binned(i_theta) = sum(fr_all(i_roi,idx)); + theta_timespent_binned(i_theta)=numel(idx); + + idx_odd=idx(1:2:end); + idx_even=idx(2:2:end); + + theta_spikes_binned_odd(i_theta) = sum(fr_all(i_roi,idx_odd)); + theta_timespent_binned_odd(i_theta)=numel(idx_odd); + + theta_spikes_binned_even(i_theta) = sum(fr_all(i_roi,idx_even)); + theta_timespent_binned_even(i_theta)=numel(idx_even); + end + + + % to avoid negative "firing rates" + if min(theta_spikes_binned)<0 + theta_spikes_binned = theta_spikes_binned - min(theta_spikes_binned); + end + if min(theta_spikes_binned_odd)<0 + theta_spikes_binned_odd = theta_spikes_binned_odd - min(theta_spikes_binned_odd); + end + if min(theta_spikes_binned_even)<0 + theta_spikes_binned_even = theta_spikes_binned_even - min(theta_spikes_binned_even); + end + + [~, theta_firing_rate_smoothed, preferred_theta,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + [ ~, theta_firing_rate_smoothed_odd, ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_odd, theta_spikes_binned_odd, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + [ ~, theta_firing_rate_smoothed_even, ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_even, theta_spikes_binned_even, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + + + % Von mises fit - with baseline subtraction + % baseline_FR = nanmin(theta_firing_rate_smoothed); + % [~, preferred_direction_vmises, theta_firing_rate_vmises, r2_vmises] ... + % = fn_compute_von_mises (theta_firing_rate_smoothed - baseline_FR, theta_bins_centers+180); + % theta_firing_rate_vmises = theta_firing_rate_vmises+baseline_FR; + + % Von mises fit - without baseline subtraction + [~, preferred_direction_vmises, theta_firing_rate_vmises, r2_vmises] ... + = fn_compute_von_mises (theta_firing_rate_smoothed, theta_bins_centers+180); + + preferred_direction_vmises=preferred_direction_vmises-180; + + r_odd_even=corr([theta_firing_rate_smoothed_odd',theta_firing_rate_smoothed_even'],'Rows' ,'pairwise'); + r_odd_even=r_odd_even(2); + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + + + key_ROI(i_roi).theta_tuning_curve = theta_firing_rate_smoothed; + key_ROI(i_roi).theta_tuning_curve_odd = theta_firing_rate_smoothed_odd; + key_ROI(i_roi).theta_tuning_curve_even = theta_firing_rate_smoothed_even; + + key_ROI(i_roi).theta_bins_centers = theta_bins_centers; + key_ROI(i_roi).preferred_theta = preferred_theta; + key_ROI(i_roi).rayleigh_length = Rayleigh_length; + key_ROI(i_roi).theta_tuning_odd_even_corr = r_odd_even; + + key_ROI(i_roi).theta_tuning_curve_vmises =theta_firing_rate_vmises; + key_ROI(i_roi).preferred_theta_vmises =preferred_direction_vmises; + key_ROI(i_roi).goodness_of_fit_vmises =r2_vmises; + key_ROI(i_roi).number_of_theta_not_nan =sum(~isnan(theta_firing_rate_smoothed)); + + k2=key_ROI(i_roi); + insert(self, k2); + +end + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +filename=[num2str(key.subject_id) '_s' num2str( key.session) '_' num2str(session_date) '_angles' ]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); +close all + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dangle_old.m b/DataJoint/fn/fn_computer_Lick2Dangle_old.m new file mode 100644 index 0000000..2f53744 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dangle_old.m @@ -0,0 +1,141 @@ +function fn_computer_Lick2Dangle_old(key,self) + +time_bin=[-5,5]; %2 sec +fr_interval=[key.fr_interval_start,key.fr_interval_end]/1000; +smooth_window=3; %frames +timespent_min=5; %in trials +smoothing_window_1D=1; + + +key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + + + +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + + +[theta, radius] = cart2pol(pos_x,pos_z); +theta=rad2deg(theta); + +%plot(pos_x,pos_z,'.') + +go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +TrialsStartFrame=fetchn(IMG.FrameStartTrial & key,'session_epoch_trial_start_frame','ORDER BY trial'); +if isempty(TrialsStartFrame) % not mesoscope recordings + TrialsStartFrame=fetchn(IMG.FrameStartFile & key,'session_epoch_file_start_frame', 'ORDER BY session_epoch_file_num'); +end + + +L=fetch(EXP2.ActionEvent & key,'*'); + +S=fetch(IMG.ROISpikes & key,'*'); + +% figure +[hhh_temp,bins_temp,theta_idx_temp] = histcounts(theta,1000); +hhh_temp=[0,hhh_temp,0]; +bins_temp=[bins_temp,bins_temp(end)+mean(diff(bins_temp))]; +[~,idx_peaks]=findpeaks(hhh_temp,'MinPeakDistance',15,'MinPeakHeight',numel(hhh_temp)/50); +% hold on +% plot(bins_temp,hhh_temp,'*'); +% plot(bins_temp(idx_peaks),100,'*r'); + +theta_bins_centers = bins_temp(idx_peaks); +theta_bins = [bins_temp(idx_peaks)-1,180]; +% theta_bins=linspace(-180,180,9); +% theta_bins=linspace(-180,180,13); +% theta_bins=-180:30:180; +% % theta_bins = theta_bins - mean(diff(theta_bins))/2; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; + + +[temp,~,theta_idx] = histcounts(theta,theta_bins); + +% theta_idx(theta_idx==0)=1; + +for i_tr = 1:1:numel(pos_x) + licks=[L(find([L.trial]==i_tr)).action_event_time]; + licks=licks(licks>go_time); + if ~isempty(licks) + start_file(i_tr)=TrialsStartFrame(i_tr) + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_theta=1:1:numel(theta_bins_centers) + idx= find( (theta_idx==i_theta) & ~isnan(start_file) & radius>0.1 ); + theta_spikes_binned(i_theta) = sum(fr_all(i_roi,idx)); + theta_timespent_binned(i_theta)=numel(idx); + + idx_odd=idx(1:2:end); + idx_even=idx(2:2:end); + + theta_spikes_binned_odd(i_theta) = sum(fr_all(i_roi,idx_odd)); + theta_timespent_binned_odd(i_theta)=numel(idx_odd); + + theta_spikes_binned_even(i_theta) = sum(fr_all(i_roi,idx_even)); + theta_timespent_binned_even(i_theta)=numel(idx_even); + end + + [~, theta_firing_rate_smoothed(i_roi,:), preferred_theta(i_roi),Rayleigh_length(i_roi)] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + [ ~, theta_firing_rate_smoothed_odd(i_roi,:), ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_odd, theta_spikes_binned_odd, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + [ ~, theta_firing_rate_smoothed_even(i_roi,:), ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_even, theta_spikes_binned_even, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + + r_odd_even=corr([theta_firing_rate_smoothed_odd(i_roi,:)',theta_firing_rate_smoothed_even(i_roi,:)'],'Rows' ,'pairwise'); + r_odd_even=r_odd_even(2); + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI(i_roi).fr_interval_start =key.fr_interval_start; + key_ROI(i_roi).fr_interval_end =key.fr_interval_end; + + key_ROI(i_roi).theta_tuning_curve = theta_firing_rate_smoothed(i_roi,:); + key_ROI(i_roi).theta_tuning_curve_odd = theta_firing_rate_smoothed_odd(i_roi,:); + key_ROI(i_roi).theta_tuning_curve_even = theta_firing_rate_smoothed_even(i_roi,:); + + key_ROI(i_roi).theta_bins_centers = theta_bins_centers; + key_ROI(i_roi).preferred_theta = preferred_theta(i_roi); + key_ROI(i_roi).rayleigh_length = Rayleigh_length(i_roi); + key_ROI(i_roi).theta_tuning_odd_even_corr = r_odd_even; + + k2=key_ROI(i_roi); + insert(self, k2); + +end +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dangle_shuffle.m b/DataJoint/fn/fn_computer_Lick2Dangle_shuffle.m new file mode 100644 index 0000000..2fb36a8 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dangle_shuffle.m @@ -0,0 +1,114 @@ +function fn_computer_Lick2Dangle_shuffle(key,self) + +num_shuffle=1000; +time_bin=[-3,3]; %2 sec +fr_interval=[key.fr_interval_start,key.fr_interval_end]/1000; +smooth_window=1; %frames +timespent_min=10; %in trials +smoothing_window_1D=3; + + +key_ROI=fetch((IMG.ROI-IMG.ROIBad)&key,'ORDER BY roi_number'); + + +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +[theta, radius] = cart2pol(pos_x,pos_z); +theta=rad2deg(theta); + +%plot(pos_x,pos_z,'.') + +go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*'); +L=fetch(EXP2.ActionEvent & key,'*'); + +S=fetch(IMG.ROISpikes & key,'*'); + +% figure +[hhh_temp,bins_temp,theta_idx_temp] = histcounts(theta,1000); +hhh_temp=[0,hhh_temp,0]; +bins_temp=[bins_temp,bins_temp(end)+mean(diff(bins_temp))]; +[~,idx_peaks]=findpeaks(hhh_temp,'MinPeakDistance',15,'MinPeakHeight',numel(hhh_temp)/50); +% hold on +% plot(bins_temp,hhh_temp,'*'); +% plot(bins_temp(idx_peaks),100,'*r'); + +theta_bins_centers = bins_temp(idx_peaks); +theta_bins = [bins_temp(idx_peaks)-1,180]; +% theta_bins=linspace(-180,180,9); +% theta_bins=linspace(-180,180,13); +% theta_bins=-180:30:180; +% % theta_bins = theta_bins - mean(diff(theta_bins))/2; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; + + +[temp,~,theta_idx] = histcounts(theta,theta_bins); + + +for i_tr = 1:1:numel(pos_x) + licks=[L(find([L.trial]==i_tr)).action_event_time]; + licks=licks(licks>go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + +theta_idx = theta_idx(~isnan(start_file)& radius>0.1); + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + end + + + fr_all = fr_all(:,~isnan(start_file)& radius>0.1 ); + % theta_idx_double=[theta_idx,theta_idx]; + for i_shuffle = 1:1:num_shuffle + % shuffle_step=10 + i_shuffle; + theta_idx_shuffled = theta_idx(randperm(numel(theta_idx))); + % theta_idx_shuffled=theta_idx_double(shuffle_step:shuffle_step+numel(theta_idx)-1); + [RV_shuffle(i_shuffle), r_shuffle(i_shuffle)]= fn_computer_Lick2Dangle_shuffle2(fr_all,theta_idx_shuffled, theta_bins_centers, i_roi, timespent_min, smoothing_window_1D); + end + + [RV, r_odd_even]= fn_computer_Lick2Dangle_shuffle2 (fr_all,theta_idx, theta_bins_centers, i_roi, timespent_min, smoothing_window_1D); + + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI(i_roi).fr_interval_start =key.fr_interval_start; + key_ROI(i_roi).fr_interval_end =key.fr_interval_end; + + key_ROI(i_roi).pval_rayleigh_length = sum(RV<=RV_shuffle)./num_shuffle; + key_ROI(i_roi).pval_theta_tuning_odd_even_corr = sum(r_odd_even<=r_shuffle)./num_shuffle; + + k2=key_ROI(i_roi); + insert(self, k2); + +end +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dangle_shuffle2.m b/DataJoint/fn/fn_computer_Lick2Dangle_shuffle2.m new file mode 100644 index 0000000..a0c0cc1 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dangle_shuffle2.m @@ -0,0 +1,30 @@ +function [Rayleigh_length, r_odd_even]=fn_computer_Lick2Dangle_shuffle2(fr_all,theta_idx, theta_bins_centers, i_roi, timespent_min, smoothing_window_1D) + +for i_theta=1:1:numel(theta_bins_centers) + idx= find( (theta_idx==i_theta) ); + theta_spikes_binned(i_theta) = sum(fr_all(i_roi,idx)); + theta_timespent_binned(i_theta)=numel(idx); + + idx_odd=idx(1:2:end); + idx_even=idx(2:2:end); + + theta_spikes_binned_odd(i_theta) = sum(fr_all(i_roi,idx_odd)); + theta_timespent_binned_odd(i_theta)=numel(idx_odd); + + theta_spikes_binned_even(i_theta) = sum(fr_all(i_roi,idx_even)); + theta_timespent_binned_even(i_theta)=numel(idx_even); +end + +[~, ~, ~,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + +[ ~, theta_firing_rate_smoothed_odd, ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_odd, theta_spikes_binned_odd, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + +[ ~, theta_firing_rate_smoothed_even, ~ ,~] = fn_compute_generic_1D_tuning2 ... + (theta_timespent_binned_even, theta_spikes_binned_even, theta_bins_centers, timespent_min, smoothing_window_1D, 1, 1); + +r_odd_even=corr([theta_firing_rate_smoothed_odd',theta_firing_rate_smoothed_even'],'Rows' ,'pairwise'); +r_odd_even=r_odd_even(2); + +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dmap.m b/DataJoint/fn/fn_computer_Lick2Dmap.m new file mode 100644 index 0000000..33aa10d --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dmap.m @@ -0,0 +1,195 @@ +function fn_computer_Lick2Dmap(key,self) + +timespent_min=10; %in trials +time_bin=[-3,3]; %2 sec for PSTH, aligned to lick +fr_interval=[key.fr_interval_start,key.fr_interval_end]/1000; + +smooth_window=1; %frames for PSTH +sigma=1; +hsize=1; + +key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + +%% Rescaling, rotation, and binning +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +x_bins = linspace(-1, 1,key.number_of_bins+1); +x_bins_centers=x_bins(1:end-1)+mean(diff(x_bins))/2; + +z_bins = linspace(-1,1,key.number_of_bins+1); +z_bins_centers=z_bins(1:end-1)+mean(diff(z_bins))/2; + +x_bins(1)= -inf; +x_bins(end)= inf; +z_bins(1)= -inf; +z_bins(end)= inf; + + + +%% Compute maps +[hhhhh, ~, ~, x_idx, z_idx] = histcounts2(pos_x,pos_z,x_bins,z_bins); + +%plot(pos_x,pos_z,'.') + +mat_x=repmat(x_bins_centers,key.number_of_bins,1); +mat_z=repmat(z_bins_centers',1,key.number_of_bins); + + +go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*'); +L=fetch(EXP2.ActionEvent & key,'*'); + +S=fetch(IMG.ROISpikes & key,'*'); + + +for i_tr = 1:1:numel(pos_x) + licks=[L(find([L.trial]==i_tr)).action_event_time]; + licks=licks(licks>go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z)); + idx_odd=idx(1:2:end); + idx_even=idx(2:2:end); + map_xz_spikes_binned(i_z,i_x) = sum(fr_all(i_roi,idx)); + map_xz_spikes_binned_odd(i_z,i_x) = sum(fr_all(i_roi,idx_odd)); + map_xz_spikes_binned_even(i_z,i_x) = sum(fr_all(i_roi,idx_even)); + + map_xz_timespent_binned(i_z,i_x) = numel(idx); + map_xz_timespent_binned_even(i_z,i_x) = numel(idx_even); + map_xz_timespent_binned_odd(i_z,i_x) = numel(idx_odd); + + if numel(idx)go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx_begin = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & ([Block.current_trial_num_in_block]==2 | [Block.current_trial_num_in_block]==3) ); + idx_mid= find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & ([Block.current_trial_num_in_block]==3 | [Block.current_trial_num_in_block]==4) ); + idx_end= find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & ([Block.current_trial_num_in_block]==5 | [Block.current_trial_num_in_block]==6) ); + + map_xz_spikes_binned_begin(i_x,i_z) = sum(fr_all(i_roi,idx_begin)); + map_xz_spikes_binned_end(i_x,i_z) = sum(fr_all(i_roi,idx_end)); + map_xz_spikes_binned_mid(i_x,i_z) = sum(fr_all(i_roi,idx_mid)); + + map_xz_timespent_binned_begin(i_x,i_z) = numel(idx_begin); + map_xz_timespent_binned_end(i_x,i_z) = numel(idx_end); + map_xz_timespent_binned_mid(i_x,i_z) = numel(idx_mid); + + + psth_per_position_begin{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx_begin)]'),1)); + psth_per_position_end{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx_end)]'),1)); + psth_per_position_mid{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx_mid)]'),1)); + + if numel(idx_begin)go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & strcmp({R.reward_size_type},'regular')); + idx_large= find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & strcmp({R.reward_size_type},'large')); + idx_small= find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z) & strcmp({R.reward_size_type},'omission')); + map_xz_spikes_binned(i_x,i_z) = sum(fr_all(i_roi,idx)); + map_xz_spikes_binned_large(i_x,i_z) = sum(fr_all(i_roi,idx_large)); + map_xz_spikes_binned_small(i_x,i_z) = sum(fr_all(i_roi,idx_small)); + + map_xz_timespent_binned(i_x,i_z) = numel(idx); + map_xz_timespent_binned_large(i_x,i_z) = numel(idx_large); + map_xz_timespent_binned_small(i_x,i_z) = numel(idx_small); + + + psth_per_position{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx)]'),1)); + psth_per_position_large{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx_large)]'),1)); + psth_per_position_small{i_x,i_z}= double(mean(cell2mat([psth_all(i_roi,idx_small)]'),1)); + + if numel(idx)go_time); + if ~isempty(licks) + start_file(i_tr)=Files(i_tr).session_epoch_file_start_frame + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+ceil([time_bin(2)-time_bin(1)]*frame_rate); + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end + +x_idx = x_idx(~isnan(start_file)); +z_idx = z_idx(~isnan(start_file)); + + + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if isnan(start_file(i_tr)) + fr_all(i_roi,i_tr)=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + end + + + + + fr_all = fr_all(:,~isnan(start_file)); + for i_shuffle = 1:1:num_shuffle + x_idx_shuffled = x_idx(randperm(numel(x_idx))); + z_idx_shuffled = z_idx(randperm(numel(z_idx))); + [r_odd_even_shuffled(i_shuffle), information_per_spike_shuffled(i_shuffle)] = fn_computer_Lick2Dmap_shuffle2(fr_all,x_bins_centers,z_bins_centers,x_bins,z_bins, x_idx_shuffled, z_idx_shuffled, i_roi, sigma, hsize, timespent_min); + end + + [r_odd_even, information_per_spike] = fn_computer_Lick2Dmap_shuffle2(fr_all,x_bins_centers,z_bins_centers,x_bins,z_bins, x_idx, z_idx, i_roi, sigma, hsize, timespent_min); + + + key_ROI(i_roi).session_epoch_type = key.session_epoch_type; + key_ROI(i_roi).session_epoch_number = key.session_epoch_number; + key_ROI(i_roi).number_of_bins = key.number_of_bins; + key_ROI(i_roi).fr_interval_start =key.fr_interval_start; + key_ROI(i_roi).fr_interval_end =key.fr_interval_end; + + key_ROI(i_roi).pval_lickmap_odd_even_corr = sum(r_odd_even<=r_odd_even_shuffled)./num_shuffle; + key_ROI(i_roi).pval_information_per_spike =sum(information_per_spike<=information_per_spike_shuffled)./num_shuffle; + + + k2=key_ROI(i_roi); + insert(self, k2); +end \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dmap_shuffle2.m b/DataJoint/fn/fn_computer_Lick2Dmap_shuffle2.m new file mode 100644 index 0000000..f26269a --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dmap_shuffle2.m @@ -0,0 +1,34 @@ +function [r_odd_even, information_per_spike]=fn_computer_Lick2Dmap_shuffle2(fr_all,x_bins_centers,z_bins_centers,x_bins,z_bins, x_idx, z_idx, i_roi, sigma, hsize, timespent_min); + +for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx = find((x_idx==i_x) & (z_idx==i_z)); + idx_odd=idx(1:2:end); + idx_even=idx(2:2:end); + map_xz_spikes_binned(i_x,i_z) = sum(fr_all(i_roi,idx)); + map_xz_spikes_binned_odd(i_x,i_z) = sum(fr_all(i_roi,idx_odd)); + map_xz_spikes_binned_even(i_x,i_z) = sum(fr_all(i_roi,idx_even)); + + map_xz_timespent_binned(i_x,i_z) = numel(idx); + map_xz_timespent_binned_even(i_x,i_z) = numel(idx_odd); + map_xz_timespent_binned_odd(i_x,i_z) = numel(idx_even); + + end +end + + +[~, ~, ~, information_per_spike, ~, ~, ~, ~] ... + = fn_compute_generic_2D_field2 ... + (x_bins, z_bins, map_xz_timespent_binned, map_xz_spikes_binned, timespent_min, sigma, hsize, 0); + + +[~, lickmap_fr_odd, ~, ~, ~, ~, ~, ~] ... + = fn_compute_generic_2D_field2 ... + (x_bins, z_bins, map_xz_timespent_binned_odd, map_xz_spikes_binned_odd, timespent_min, sigma, hsize, 0); + +[~, lickmap_fr_even, ~, ~, ~, ~, ~, ~] ... + = fn_compute_generic_2D_field2 ... + (x_bins, z_bins, map_xz_timespent_binned_even, map_xz_spikes_binned_even, timespent_min, sigma, hsize, 0); + +r_odd_even=corr([lickmap_fr_odd(:),lickmap_fr_even(:)],'Rows' ,'pairwise'); +r_odd_even=r_odd_even(2); \ No newline at end of file diff --git a/DataJoint/fn/fn_computer_Lick2Dselectivity.m b/DataJoint/fn/fn_computer_Lick2Dselectivity.m new file mode 100644 index 0000000..e36a766 --- /dev/null +++ b/DataJoint/fn/fn_computer_Lick2Dselectivity.m @@ -0,0 +1,174 @@ +function fn_computer_Lick2Dselectivity(key,self) + +timespent_min=10; %in trials +time_bin=[-3,3]; %2 sec for PSTH, aligned to lick +fr_interval=[key.fr_interval_start,key.fr_interval_end]/1000; + +smooth_window=1; %frames for PSTH +sigma=1; +hsize=1; + +key_ROI=fetch(IMG.ROI&key,'ORDER BY roi_number'); + +%% Rescaling, rotation, and binning +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +x_bins = linspace(-1, 1,key.number_of_bins+1); +x_bins_centers=x_bins(1:end-1)+mean(diff(x_bins))/2; + +z_bins = linspace(-1,1,key.number_of_bins+1); +z_bins_centers=z_bins(1:end-1)+mean(diff(z_bins))/2; + +x_bins(1)= -inf; +x_bins(end)= inf; +z_bins(1)= -inf; +z_bins(end)= inf; + + + +%% Compute maps +[hhhhh, ~, ~, x_idx, z_idx] = histcounts2(pos_x,pos_z,x_bins,z_bins); + +%plot(pos_x,pos_z,'.') + +mat_x=repmat(x_bins_centers,key.number_of_bins,1); +mat_z=repmat(z_bins_centers',1,key.number_of_bins); + + +% go_time=fetchn(EXP2.BehaviorTrialEvent & key & 'trial_event_type="go"','trial_event_time','LIMIT 1'); +frame_rate = fetchn(IMG.FOVEpoch & key,'imaging_frame_rate'); + +Files=fetch(IMG.FrameStartFile & key,'*'); +% L=fetch(EXP2.ActionEvent & key,'*'); + +S=fetch(IMG.ROISpikes & key,'*'); + +num_trials = numel(pos_x); +[start_file, end_file ] = fn_parse_into_trials (key,Files, frame_rate, time_bin, num_trials); + +idx_response = (~isnan(start_file)); + +for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx_xz {i_z,i_x} = find((x_idx==i_x) & idx_response & (z_idx==i_z)); + end +end + +for i_roi=1:1:size(S,1) + + spikes=S(i_roi).spikes_trace; + for i_tr = 1:1:numel(pos_x) + if idx_response(i_tr)==0 %its an ignore trial + fr_all(i_roi,i_tr)=NaN; + psth_all{i_roi,i_tr}=NaN; + continue + end + s=spikes(start_file(i_tr):end_file(i_tr)); + s=movmean(s,[smooth_window 0],'omitnan','Endpoints','shrink'); + time=(1:1:numel(s))/frame_rate + time_bin(1); + s_interval=s(time>fr_interval(1) & time<=fr_interval(2)); + fr_all(i_roi,i_tr)= sum(s_interval)/numel(s_interval); %taking mean fr + % fr_all(i_roi,i_tr)= max(s_interval); %taking the max + psth_all{i_roi,i_tr}=s; + end + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + % idx = find((x_idx==i_x) & ~isnan(start_file) & (z_idx==i_z)); + idx = idx_xz{i_z,i_x}; + map_xz_spikes_binned(i_z,i_x) = sum(fr_all(i_roi,idx)); + map_xz_timespent_binned(i_z,i_x) = numel(idx); + if numel(idx)= time_tracking(1) & time_2pimaging<=time_tracking(end) ; + + time_2pimaging =time_2pimaging(idx_overlaping); + current_idx_2pimaging_frames =current_idx_2pimaging_frames(idx_overlaping); + + idx_2pimaging_frames= [idx_2pimaging_frames, current_idx_2pimaging_frames]; + + current_body_vector_smoothed =smooth(current_body_vector,smooth_body_window); %to interploate and eliminate NaNs + + time_2pimaging=[0,time_2pimaging]; + current_body_vector_resampled=[]; + for ii=1:1:numel(time_2pimaging)-1 + idx_b = time_tracking>=time_2pimaging(ii) & time_tracking =time_resampled(ii) & time =min_video_samples_without_NaN_in_bin + video_resampled(ii) = nanmean(video(idx_b)); %downsampling, to match the imaging frame rate. We do downsampling by taking the mean value of the datapoints within each time bin + else + video_resampled(ii) = NaN; + end +end +time_resampled=time_resampled(1:end-1); + +%interpolation and extrapolation of missing (NaN) values using nearest neighbors +if sum(~isnan(video_resampled))>=2 %we do interpolation/extrapolation only if there are enough data points +video_resampled_interp = interp1(time_resampled(~isnan(video_resampled)),video_resampled(~isnan(video_resampled)),time_resampled,'nearest','extrap'); %we interpolate missing values (that had NaNs in them) +else + video_resampled_interp=video_resampled; +end + +%% Dor debug +% clf +% hold on +% plot(time, video,'-k') +% plot(time_resampled, video_resampled_interp,'-b') +% plot(time_resampled, video_resampled,'-r') + + diff --git a/DataJoint/fn/fn_predictors_task.m b/DataJoint/fn/fn_predictors_task.m new file mode 100644 index 0000000..745f965 --- /dev/null +++ b/DataJoint/fn/fn_predictors_task.m @@ -0,0 +1,68 @@ +function [event_vector]= fn_predictors_task(key, sampling_rate_2p, predictor_name, num_resampled_frames) + +rel_lickport = TRACKING.VideoLickportTrial & key; +rel_lick = TRACKING.VideoNthLickTrial & key; +rel_trial = EXP2.TrialRewardSize*EXP2.TrialLickBlock & key; +rel_trial_reward_time = EXP2.BehaviorTrialEvent & 'trial_event_type="reward"'& key; + +event=[]; +switch predictor_name + case 'LickPortEntrance' + event= fetch1(rel_lickport ,'lickport_t_entrance_relative_to_trial_start'); + case 'LickPortExit' + event= fetch1(rel_lickport.proj('lickport_t_entrance_relative_to_trial_start + lickport_lickable_duration -> t_exit'),'t_exit'); + case 'Lick' + event= fetchn(rel_lick,'lick_time_onset_relative_to_trial_start','ORDER BY LICK_NUMBER');% + case 'LickTouch' + event= fetchn(rel_lick & 'lick_touch_number>0', 'lick_time_onset_relative_to_trial_start','ORDER BY LICK_NUMBER');% + case 'LickNoTouch' + event= fetchn(rel_lick & 'lick_touch_number=-1', 'lick_time_onset_relative_to_trial_start','ORDER BY LICK_NUMBER');% + case 'LickTouchReward' + event= fetchn(rel_lick & 'lick_touch_number>0' & 'lick_number_with_touch_relative_to_reward>0', 'lick_time_onset_relative_to_trial_start','ORDER BY LICK_NUMBER');% + case 'LickTouchNoReward' + event= fetchn(rel_lick & 'lick_touch_number>0' & 'lick_number_with_touch_relative_to_reward=-1', 'lick_time_onset_relative_to_trial_start', 'ORDER BY LICK_NUMBER');% + case 'LickTouchNoRewardOmitted' + if ~isempty(fetchn(rel_trial & 'reward_size_type="omission"','reward_size_type')) + event= fetchn(rel_lick & 'lick_touch_number>0' & 'lick_number_with_touch_relative_to_reward>0', 'lick_time_onset_relative_to_trial_start', 'ORDER BY LICK_NUMBER');% + end + case 'FirstLickTouch' + event= fetchn(rel_lick & 'lick_touch_number=1', 'lick_time_onset_relative_to_trial_start' ,'ORDER BY LICK_NUMBER');% + case 'FirstLickReward' + event= fetchn(rel_lick & 'lick_number_with_touch_relative_to_reward=1','lick_time_onset_relative_to_trial_start' ,'ORDER BY LICK_NUMBER');% + case 'RewardDelivery' + event= fetchn(rel_trial_reward_time ,'trial_event_time');% + case 'RewardSize' + event= fetchn(rel_trial & 'reward_size_type="large"','reward_size_type'); + if ~isempty(event) + event= fetchn(rel_trial_reward_time ,'trial_event_time'); + end + case 'RewardOmission' + event= fetchn(rel_trial & 'reward_size_type="omission"','reward_size_type'); + if ~isempty(event) + event= fetchn(rel_trial_reward_time ,'trial_event_time'); + end + case 'LickPortBlockStart' + event= fetchn(rel_trial & 'current_trial_num_in_block=1','current_trial_num_in_block');% + if ~isempty(event) + event= fetch1(rel_lickport ,'lickport_t_entrance_relative_to_trial_start'); + end + case 'AutoWater' + event= fetchn(rel_trial & 'flag_auto_water_curret_trial=1','flag_auto_water_curret_trial');% + if ~isempty(event) + event= fetchn(rel_trial_reward_time ,'trial_event_time');% + end +end + +time_resampled = (0:1:num_resampled_frames)/sampling_rate_2p; + +if isempty(event) + event_vector = time_resampled(2:1:end)*0; + return +end + +for ii=1:1:numel(time_resampled)-1 + idx_b = event>=time_resampled(ii) & event current_minor_clusters) = cl_id(cl_id>current_minor_clusters) -1; + % cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/size(PTSH_RLconcat,1); + minor_clusters(1) = []; + minor_clusters=minor_clusters-1; + cluster_percent=100*histcounts(cl_id,1:1:(numel(unique(cl_id))+1))/size(PTSH,1); + + clust_mean_corr(1) = []; + + + % minor_clusters = find(cluster_percent 2 + V = X'*U; + s = sqrt(d); + V = bsxfun(@(x,c)x./c, V, s'); + S = diag(s); + end +else + C = X'*X; + [V,D] = eig(C); + clear C; + + [d,ix] = sort(abs(diag(D)),'descend'); + V = V(:,ix); + + U = X*V; % convert evecs from X'*X to X*X'. the evals are the same. + %s = sqrt(sum(U.^2,1))'; + s = sqrt(d); + U = bsxfun(@(x,c)x./c, U, s'); + S = diag(s); +end diff --git a/DataJoint/fn_analysis/Lick2D_DistanceAngle.m b/DataJoint/fn_analysis/Lick2D_DistanceAngle.m new file mode 100644 index 0000000..70ce184 --- /dev/null +++ b/DataJoint/fn_analysis/Lick2D_DistanceAngle.m @@ -0,0 +1,222 @@ +function [key]=Lick2D_DistanceAngle(key, flag_spikes, goodness_of_fit_vmises_threshold, column_radius) + + +% column_radius = 20; %in um +min_num_cells = 5; + +if flag_spikes==1 + rel_data=LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2Dangle; +end + +% rel_rois= IMG.ROIGood & (rel_data & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5' & 'rayleigh_length>0.1'); +rel_rois= IMG.ROIGood & (rel_data & key & sprintf('goodness_of_fit_vmises>%.2f',goodness_of_fit_vmises_threshold)); + + +rel = rel_data*IMG.PlaneCoordinates*IMG.ROI & rel_rois; + +% lateral_distance_bins = [0:20:200,inf]; % in microns +lateral_distance_bins = [0:20:200,inf]; % in microns + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + +M=fetch(rel ,'*'); +M=struct2table(M); + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta_vmises; +z_all=M.z_pos_relative; + +dXY=zeros(numel(theta_all),numel(theta_all)); +dZ=zeros(numel(theta_all),numel(theta_all)); +% d3D=zeros(numel(theta_all),numel(theta_all)); +dtheta=zeros(numel(theta_all),numel(theta_all)); + +parfor ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um +% d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + theta = M.preferred_theta_vmises(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +end + + +dXY=dXY(:); +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +% d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +% idx_valid_bins = [N>=min_num_cells,1]>0; +% lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +% [N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + if N(i)>=min_num_cells + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); +% dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + else + dtheta_XYdist_mean(i)=NaN; + end +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + if N(i)>=min_num_cells + dtheta_XYdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + else + dtheta_XYdist_mean_shuffled(i)=NaN; + end +end + +% ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean_shuffled,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Preferred Direction \nLateral distance')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence + +axial_distance_bins=[]; +dtheta_Zdist_mean=[]; +dtheta_Zdist_mean_shuffled=[]; + +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtheta_column = dtheta(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta_column(:))); + dtheta_column_shuffled = dtheta_shuffled(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); + end + +% ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Preferred Direction \nAxial distance')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +end + + + +%% +% axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +% theta_bins=-180:40:180; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +% a=histogram(M.preferred_theta_vmises,theta_bins); +% BinCounts=a.BinCounts; +% polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +% title(sprintf('Preferred direction \nof tuned neurons')); +% ax=gca; +% ax.ThetaTick = [0 90 180 270]; +% ax.ThetaTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; +% +% axes('position',[position_x2(4)+0.15, position_y2(1)-0.2, panel_width2, panel_height2]); +% histogram(M.preferred_theta_vmises); +% title(sprintf('Preferred direction \nbased on VM fit')); +% xlabel('Direction deg') +% ylabel('Counts'); + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.theta_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + + + +key.theta_lateral_distance = dtheta_XYdist_mean; +key.theta_lateral_distance_shuffled = dtheta_XYdist_mean_shuffled; +key.bins_lateral_distance = lateral_distance_bins; + +key.theta_axial_distance = dtheta_Zdist_mean; +key.theta_axial_distance_shuffled = dtheta_Zdist_mean_shuffled; +key.bins_axial_distance = axial_distance_bins; + + +key.vn_mises_correlation_treshold = goodness_of_fit_vmises_threshold; +key.column_radius = column_radius; + diff --git a/DataJoint/fn_analysis/PLOTS_Cells2DTuning.m b/DataJoint/fn_analysis/PLOTS_Cells2DTuning.m new file mode 100644 index 0000000..1a1001d --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Cells2DTuning.m @@ -0,0 +1,333 @@ +function PLOTS_Cells2DTuning(key, dir_current_fig, flag_spikes, plot_one_in_x_cell) +close all; + + +% rel_rois= IMG.ROIGood & (LICK2D.ROILick2DangleSpikes*LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DmapSpikes & key & 'psth_odd_even_corr>0.5' & 'theta_tuning_odd_even_corr>0.5' & 'lickmap_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5'); +if flag_spikes==0 % if based on dff + rel_rois= (IMG.ROI - IMG.ROIBad) & (LICK2D.ROILick2DQuadrantsSpikes & key & 'psth_quadrants_odd_even_corr<=0.25'); + rel_map_and_psth = LICK2D.ROILick2DmapSpikes * LICK2D.ROILick2DSelectivitySpikes * LICK2D.ROILick2DPSTHSpikes * LICK2D.ROILick2DQuadrants & rel_rois; + rel_angle = LICK2D.ROILick2DangleSpikes & rel_rois; + rel_stats = LICK2D.ROILick2DPSTHStatsSpikes *LICK2D.ROILick2DSelectivityStatsSpikes & rel_rois; +else % if based on spikes + % rel_rois= IMG.ROIGood & (LICK2D.ROILick2DangleSpikes*LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DmapSpikes & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5'); + % rel_map_and_psth = LICK2D.ROILick2DmapSpikes * LICK2D.ROILick2DSelectivitySpikes * LICK2D.ROILick2DPSTHSpikes * rel_rois; + % rel_angle = LICK2D.ROILick2DangleSpikes * rel_rois; + % rel_stats = LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DSelectivityStatsSpikes * rel_rois; + rel_rois= (IMG.ROI - IMG.ROIBad) & (LICK2D.ROILick2DQuadrantsSpikes & key & 'psth_quadrants_odd_even_corr<=0.25'); + rel_map_and_psth = LICK2D.ROILick2DmapSpikes * LICK2D.ROILick2DSelectivitySpikes * LICK2D.ROILick2DPSTHSpikes * LICK2D.ROILick2DQuadrantsSpikes & rel_rois; + rel_angle = LICK2D.ROILick2DangleSpikes & rel_rois; + rel_stats = LICK2D.ROILick2DPSTHStatsSpikes *LICK2D.ROILick2DSelectivityStatsSpikes & rel_rois; + +end + +session_date = fetch1(EXP2.Session & key,'session_date'); +filename_prefix = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +psthmap_time =fetch1(rel_map_and_psth & key,'psthmap_time','LIMIT 1'); +psth_time =fetch1(rel_map_and_psth & key,'psth_time','LIMIT 1'); +number_of_bins =fetch1(rel_map_and_psth & key,'number_of_bins','LIMIT 1'); +psth_quadrants_time=fetch1(rel_map_and_psth & key,'psth_quadrants_time','LIMIT 1'); + +roi_number=fetchn(rel_rois & key,'roi_number','ORDER BY roi_number'); +pos_x_bins_centers =fetch1(rel_map_and_psth & key,'pos_x_bins_centers','LIMIT 1'); + + + + +time_bin=[-1,3]; %2 sec +smooth_bin = 1; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +M.psth_stem=[fetchn(rel_map_and_psth,'psth_stem','ORDER BY roi_number')]; +M.psth=[fetchn(rel_map_and_psth,'psth','ORDER BY roi_number')]; +M.psth_per_position =[fetchn(rel_map_and_psth,'psth_per_position','ORDER BY roi_number')]; +M.psth_per_position_odd=[fetchn(rel_map_and_psth,'psth_per_position_odd','ORDER BY roi_number')]; +M.psth_per_position_even=[fetchn(rel_map_and_psth,'psth_per_position_even','ORDER BY roi_number')]; +M.psth_averaged_over_all_positions=[fetchn(rel_map_and_psth,'psth','ORDER BY roi_number')]; +M.psth_per_position_even=[fetchn(rel_map_and_psth,'psth_per_position_even','ORDER BY roi_number')]; +M.psth_preferred=[fetchn(rel_map_and_psth,'psth_preferred','ORDER BY roi_number')]; +M.psth_non_preferred=[fetchn(rel_map_and_psth,'psth_non_preferred','ORDER BY roi_number')]; +M.selectivity=[fetchn(rel_map_and_psth,'selectivity','ORDER BY roi_number')]; +M.lickmap_fr=[fetchn(rel_map_and_psth,'lickmap_fr','ORDER BY roi_number')]; +M.lickmap_fr_odd=[fetchn(rel_map_and_psth,'lickmap_fr_odd','ORDER BY roi_number')]; +M.lickmap_fr_even=[fetchn(rel_map_and_psth,'lickmap_fr_even','ORDER BY roi_number')]; +M.lickmap_odd_even_corr=[fetchn(rel_map_and_psth,'lickmap_odd_even_corr','ORDER BY roi_number')]; +M.information_per_spike=fetchn(rel_map_and_psth,'information_per_spike','ORDER BY roi_number'); +M.psth_odd_even_corr=[fetchn(rel_stats,'psth_odd_even_corr','ORDER BY roi_number')]; +M.preferred_odd_even_corr=[fetchn(rel_stats,'psth_preferred_odd_even_corr','ORDER BY roi_number')]; +M.selectivity_odd_even_corr=[fetchn(rel_stats,'selectivity_odd_even_corr','ORDER BY roi_number')]; +M.psth_quadrants=[fetchn(rel_map_and_psth,'psth_quadrants','ORDER BY roi_number')]; +M.psth_quadrants_odd_even_corr=[fetchn(rel_map_and_psth,'psth_quadrants_odd_even_corr','ORDER BY roi_number')]; + + +M = struct2table(M); + +M_angle=fetch(rel_angle,'*','ORDER BY roi_number'); + + + +for i_roi=1:plot_one_in_x_cell:numel(roi_number) + % kkkroi.roi_number=roi_number(i_roi); + % M=fetch(rel & kkkroi,'*'); + + % i_roi=1; +% i_roi + xl = [floor(psthmap_time(1)) ceil(psthmap_time(end))]; + + psth_max= cell2mat(reshape(M.psth_per_position{i_roi},[number_of_bins^2,1])); +% psth_max= psth_max(:,psthmap_time>-2 & psthmap_time<=3); + + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(psthmap_time,smooth(M.psth_per_position{i_roi}{i_l}./psth_max,smooth_bin),'-r','LineWidth',2); + try + plot(psthmap_time,smooth(M.psth_per_position_odd{i_roi}{i_l}./psth_max,smooth_bin),'-','Color',[0 0 0]); + plot(psthmap_time,smooth(M.psth_per_position_even{i_roi}{i_l}./psth_max,smooth_bin),'-','Color',[0.5 0.5 0.5]); + end + ylims=[0,1+eps]; + ylim(ylims); + xlim(xl); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Normalized response', 'FontSize',14); + set(gca,'XTick',[xl(1),0,xl(2)],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[xl(1),0,xl(2)],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + + % PSTH averaged across all positions + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + xl = [floor(psth_time(1)) ceil(psth_time(end))]; + xlim(xl); + psth_m= smooth(M.psth{i_roi},smooth_bin); + max_psth = nanmax(psth_m); + psth_m=psth_m/max_psth; + psth_stem = smooth(M.psth_stem{i_roi},smooth_bin)/max_psth; + shadedErrorBar(psth_time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + ylim([0, 1]); + title(sprintf('All positions \n odd even r = %.2f ', M.psth_odd_even_corr(i_roi)), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Normalized response', 'FontSize',10); + set(gca,'XTick',[xl(1),0,xl(end)],'Ytick',[0, 1],'TickLength',[0.05,0], 'FontSize',10); + + % PSTH by quadrants + axes('position',[position_x2(2),position_y2(1), panel_width2, panel_height2]) + hold on; + % psth_quadrants= smooth(M.psth_quadrants{i_roi},smooth_bin)'; + psth_quadrants= M.psth_quadrants{i_roi}; + psth_quadrants = psth_quadrants/nanmax(psth_quadrants); + tttt=numel(psth_quadrants)/4; + psth_q1 = smooth(psth_quadrants(1:tttt),smooth_bin)'; + psth_q2 = smooth(psth_quadrants(tttt +1 :tttt*2),smooth_bin)'; + psth_q3 = smooth(psth_quadrants(tttt*2 +1 :tttt*3),smooth_bin)'; + psth_q4 = smooth(psth_quadrants(tttt*3 +1 :tttt*4),smooth_bin)'; + + plot(psth_quadrants_time,psth_q1,'-b'); + plot(psth_quadrants_time,psth_q2,'-r'); + plot(psth_quadrants_time,psth_q3,'-g'); + plot(psth_quadrants_time,psth_q4,'-k'); + + xl = [floor(psth_quadrants_time(1)) ceil(psth_quadrants_time(end))]; + xlim(xl); + ylim([0, 1]); + title(sprintf('PSTH per Quadrant \n odd even r = %.2f ', M.psth_quadrants_odd_even_corr(i_roi)), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Normalized response', 'FontSize',10); + set(gca,'XTick',[xl(1),0,xl(end)],'Ytick',[0, 1],'TickLength',[0.05,0], 'FontSize',10); + + + % % Preferred, non-preferred and selectivity + % axes('position',[position_x2(2),position_y2(1), panel_width2, panel_height2]) + % hold on; + % psth_preferred= smooth(M.psth_preferred{i_roi},smooth_bin)'; + % psth_non_preferred= smooth(M.psth_non_preferred{i_roi},smooth_bin)'; + % selectivity = smooth(M.selectivity{i_roi},smooth_bin)'; + % plot(psthmap_time,psth_preferred,'-b'); + % plot(psthmap_time,psth_non_preferred,'-r'); + % plot(psthmap_time,selectivity,'-g'); + % xlim(time_bin); + % ylim([0, (nanmax([psth_preferred,psth_non_preferred]))]); + % title(sprintf('Preferred position \n versus all others \n preferred r = %.2f ', M.preferred_odd_even_corr(i_roi)), 'FontSize',10); + % xlabel('Time to lick (s)', 'FontSize',10); + % ylabel('Spikes/s', 'FontSize',10); + % set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',[0, (nanmax([psth_preferred,psth_non_preferred]))],'TickLength',[0.05,0], 'FontSize',10); + + %% Angular tuning + axes('position',[position_x2(3),position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M_angle(i_roi).theta_bins_centers; + yyy=M_angle(i_roi).theta_tuning_curve; + yyy_max = nanmax(yyy); + yyy=yyy./yyy_max; + yyy_vnmises=(M_angle(i_roi).theta_tuning_curve_vmises)/yyy_max; + plot([-180:1:179],yyy_vnmises,'-g','LineWidth',2); + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M_angle(i_roi).theta_tuning_curve_odd/yyy_max,'-','Color',[0 0 0]); + plot(xxx,M_angle(i_roi).theta_tuning_curve_even/yyy_max,'-','Color',[0.5 0.5 0.5]); + + % try + % title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f \n theta = %d thetaVM = %d deg',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr, floor(M(i_roi).preferred_theta), floor(M(i_roi).preferred_theta_vmises)), 'FontSize',10); + % catch + title(sprintf('Directional tuning \n RV = %.2f\n r = %.2f r^2 fit VM = %.2f \n theta = %d VM = %d deg',M_angle(i_roi).rayleigh_length, M_angle(i_roi).theta_tuning_odd_even_corr, M_angle(i_roi).goodness_of_fit_vmises, floor(M_angle(i_roi).preferred_theta), floor(M_angle(i_roi).preferred_theta_vmises)), 'FontSize',10); + % end + xlim([-180,180]) + ylim([0, 1]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, 1], 'FontSize',10,'TickLength',[0.05,0]); + + %% Maps + axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + mmm=M.lickmap_fr{i_roi}; + mmm=mmm./nanmax(mmm(:)); + imagescnan(pos_x_bins_centers, pos_x_bins_centers, mmm) + max_map=max(mmm(:)); + + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + try + title(sprintf('ROI %d anm%d s%d\n%s \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id,key.session, session_date, M.information_per_spike{i_roi}, M.pval_information_per_spike{i_roi} ), 'FontSize',10); + catch + title(sprintf('ROI %d anm%d s%d\n%s \n Positional (2D) tuning \n I = %.2f bits/spike \n ',roi_number(i_roi),key.subject_id,key.session, session_date, M.information_per_spike(i_roi)), 'FontSize',10); + end + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3)-0.05, panel_width2*1.5, panel_height2*1.5]) + mmm=M.lickmap_fr_odd{i_roi}; + mmm=mmm./nanmax(mmm(:)); + imagescnan(pos_x_bins_centers, pos_x_bins_centers, mmm) + max_map=max(mmm(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + try + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + catch + title(sprintf('Stability r = %.2f \n\n \n Odd trials', M.lickmap_odd_even_corr(i_roi)), 'FontSize',10); + end + axis xy + axis equal; + axis tight + set(gca,'YDir','normal'); + colorbar + + axes('position',[position_x2(4),position_y2(4)-0.05, panel_width2*1.5, panel_height2*1.5]) + mmm=M.lickmap_fr_even{i_roi}; + mmm=mmm./nanmax(mmm(:)); + imagescnan(pos_x_bins_centers, pos_x_bins_centers, mmm) + max_map=max(mmm(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight; + set(gca,'YDir','normal'); + colorbar + + + % x_bins=M(i_roi).pos_x_bins_centers; + % z_bins =M(i_roi).pos_z_bins_centers; + % counter=1; + % for ix=1:1:numel(x_bins) + % for iz=1:1:numel(z_bins) + % pos_x(counter) = x_bins(ix); + % pos_z(counter) = z_bins(iz); + % counter=counter+1; + % end + % end + % [theta, radius] = cart2pol(pos_x,pos_z); + % theta=rad2deg(theta); + % theta_bins=linspace(-180,180,9); + % theta_bins = theta_bins - mean(diff(theta_bins))/2; + % theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; + % + % + % [temp,~,theta_idx] = histcounts(theta,theta_bins); + % + % theta_idx(theta_idx==0)=1; + % + % map=M(i_roi).lickmap_fr; + % + % for i_theta=1:1:numel(theta_bins_centers) + % idx= find( (theta_idx==i_theta)); + % theta_spikes_binned(i_theta) = sum(map(idx)); + % theta_timespent_binned(i_theta)=numel(idx); + % end + % + % [~, theta_firing_rate_smoothed, preferred_theta,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... + % (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, 1, 1, 1, 1); + % plot(theta_bins_centers,theta_firing_rate_smoothed,'-r') + % + + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=[filename_prefix 'roi_' num2str(roi_number(i_roi))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DBlock.m b/DataJoint/fn_analysis/PLOTS_Maps2DBlock.m new file mode 100644 index 0000000..ea745f4 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DBlock.m @@ -0,0 +1,635 @@ +function PLOTS_Maps2DBlock(key, dir_current_fig,flag_spikes, flag_block) +close all; +% clf; + +%directionl tuning criteria +threshold_theta_tuning_odd_even_corr=0.5; +threshold_goodness_of_fit_vmises=0.5; +threshold_rayleigh_length=0.1; + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\psth_distance_meso\']; + + +end + + +if flag_spikes==1 +% rel_data=LICK2D.ROILick2DPSTHStatsSpikes; +% rel_stats=LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2DPSTH; + rel_stats=LICK2D.ROILick2DBlockStats*LICK2D.ROILick2DPSTHStats*LICK2D.ROILick2Dangle; +end + + +switch flag_block + case 0 %first versus begin + rel_rois= IMG.ROIGood & (rel_stats & key & 'block_mean_pval_first_begin<0.05'); + filename_suffix = 'FirstVsBegin'; + case 1 %regular first versus end + rel_rois= IMG.ROIGood & (rel_stats & key & 'block_mean_pval_first_end<0.05'); + filename_suffix = 'FirstVsEnd'; + case 2 %regular begin versus end + rel_rois= IMG.ROIGood & (rel_stats & key & 'block_mean_pval_begin_end<0.05'); + filename_suffix = 'BeginVsEnd'; +end + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date filename_suffix]; + +rel = rel_stats*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + + +psth_time =fetch1(rel_data & key,'psth_time','LIMIT 1'); +rel_psth = rel_data & rel_rois; + + +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x3(1)=0.05; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; + + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +position_y3(1)=0.2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; + +%Graphics +%--------------------------------- +fig=figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +left_color=[0 0 0]; +right_color=[0 0 0]; +set(fig,'defaultAxesColorOrder',[left_color; right_color]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and time +switch flag_block + case 0 %first versus begin + x=M.block_mean_begin; + y=M.block_mean_first; + case 1 %regular first versus end + x=M.block_mean_end; + y=M.block_mean_first; + case 2 %regular begin versus end + x=M.block_mean_end; + y=M.block_mean_begin; +end + + + +change_mean = 100*((y./x)-1); + +% time_all_neuropil =M_neuropil.peaktime_psth; + +%% cells vs neuropil +% dtime_cells_vs_neuropil= circ_dist(deg2rad(time_all),deg2rad(time_all_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_cells_vs_neuropil = abs(rad2deg(dtime_cells_vs_neuropil)); +% % histogram(time_all) +% % histogram(time_all_neuropil) +% histogram(dtime_cells_vs_neuropil) +% % plot(time_all,time_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.time_tuning_odd_even_corr-M_neuropil.time_tuning_odd_even_corr) +% +% % plot(M.time_tuning_odd_even_corr,M_neuropil.time_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +%{ +for ii=1:1:numel(time_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + time = M.peaktime_psth(ii); + dtime(ii,:) = abs(time_all-time); + % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); + +% time_neuropil = time_all_neuropil(ii); +% dtime_temp_neuropil = circ_dist(deg2rad(time_all_neuropil),deg2rad(time_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_neuropil(ii,:) = abs(rad2deg(dtime_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtime=dtime(idx_not_self); +% dtime_neuropil =dtime_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_mean(i) = mean(dtime(idx)); +% dtime_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + +% dtime_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_neuropil(idx)))); +% dtime_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtime(:))); +dtime_shuffled = dtime(idx_shuffled); +% dtime_shuffled_neuropil = dtime_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_shuffled(i) = mean(dtime_shuffled(idx)); +% dtime_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled,'-k') +ylim([0,5]); +xlabel('Lateral distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtime_column = dtime(idx_within_column); + dtime_column_neuropil = dtime_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean(i) = mean(dtime_column(idx)); + dtime_Zdist_var(i) = var(dtime_column(idx))/sqrt(sum(idx)); + +% dtime_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_neuropil(idx)))); +% dtime_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtime_column(:))); + dtime_column_shuffled = dtime_shuffled(idx_within_column); +% dtime_column_shuffled_neuropil = dtime_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean_shuffled(i) = mean(dtime_column_shuffled(idx)); +% dtime_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_shuffled_neuropil(idx)))); + + % dtime_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtime_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled,'.-k') + ylim([0,5]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtime(idx)))); + % dtime_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtime(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_shuffled = dtime(idx_shuffled); + % dtime_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\time (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end +%} + + + + + +%% + +% ax=gca; +% ax.timeTick = [0 90 180 270]; +% ax.timeTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.time_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.time_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) +% +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtime_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\time(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map of In-block order response +bins1 = [-inf,-100:1:100,inf]; +[N,edges,bin]=histcounts(change_mean,bins1); +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(numel(bins1)); +% my_colormap=plasma(numel(time_bins1)); + +for i_roi=1:1:size(M_all_all,1) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +end + +for i_roi=1:1:size(M,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date filename_suffix]); +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + + + +%% In block order preference histogram + +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +step=20; +bins2 = [-inf,-80:step:80,inf]; +bins2_centers=[bins2(2)-step/2, bins2(2:end-1)+step/2]; + +yyaxis left +a=histogram(change_mean,bins2); +y =100*a.BinCounts/rel_all.count; +bar(bins2_centers,y,'FaceColor',[0.5 0.5 0.5],'EdgeColor',[0.5 0.5 0.5]); +% title(sprintf('Response time of tuned neurons')); +% ylim([0 ceil(max(y))]); +ylabel(sprintf('Order-modulated\n neurons (%%)'),'Color',[0.5 0.5 0.5]); +xlabel(sprintf('In block order modulation, primacy (%% increase)')); + +%% of directionally tuned cells as a function of preferred PSTH time +% axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); + idx_directional = M.theta_tuning_odd_even_corr>threshold_theta_tuning_odd_even_corr & M.goodness_of_fit_vmises>threshold_goodness_of_fit_vmises & M.rayleigh_length>threshold_rayleigh_length; +for ib = 1:1:numel(bins2)-1 + idx_change_bin = change_mean>=bins2(ib) & change_mean5 % to avoid spurious values + tuned_in_change_bins(ib) =100*sum(idx_change_bin&idx_directional)/sum(idx_change_bin); + else + tuned_in_change_bins(ib)=NaN; + end +end +yyaxis right + +plot(bins2_centers,tuned_in_change_bins,'.-','LineWidth',2,'MarkerSize',15) +% xlabel(sprintf('Response time of neurons\n relative to first lickport contact (s)')); +ylabel(sprintf('Directionally tuned\n neurons (%%)')); +set(gca,'Xtick',[-100,0,100],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([-100,100]); +ylim([0 ceil(max(tuned_in_change_bins))]); + + + +%% Preferred time histogram, for block-order increasing or decreasing cells +axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); +time_bins=floor(psth_time(1)):1:ceil(psth_time(end)); +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; + +yyaxis left +idx = change_mean>=0; +a=histogram(M.peaktime_psth(idx),time_bins); +y =100*a.BinCounts/sum(a.BinCounts); +bar(time_bins_centers,y,'FaceColor',[1 0 0],'EdgeColor',[1 0 0]); +% title(sprintf('Response time of tuned neurons')); +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(y))]); +ylabel(sprintf('Primacy-enhanced\n neurons (%%)'),'Color',[1 0 0]); + +yyaxis right +idx = change_mean<0; +a=histogram(M.peaktime_psth(idx),time_bins); +y =100*a.BinCounts/sum(a.BinCounts); +bar(time_bins_centers,y,'FaceColor','none','EdgeColor',[0 0 1]); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Peak response time of neurons\n relative to first lickport contact (s)')); +ylabel(sprintf('Primacy-suppressed\n neurons (%%)'),'Color',[0 0 1]); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(y))]); + + + + + +%% PSTHs all +smooth_bins=1; % one element backward, current element, and one element forward + +switch flag_block + case 0 %first versus begin +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_begin', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_first', 'ORDER BY roi_number')); + case 1 %regular first versus end +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_end', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_first', 'ORDER BY roi_number')); + case 2 %regular begin versus end +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_end', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_begin', 'ORDER BY roi_number')); +end + + + + +ax1=axes('position',[position_x3(1), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH = cell2mat(fetchn(rel_psth, 'psth', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH_norm = PSTH./nanmax(PSTH,[],2); +[~,idx]=max(PSTH_norm,[],2); +[~,idxs]=sort(idx); +imagesc(psth_time,1:1:numel(idxs),PSTH_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n all trials')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax2=axes('position',[position_x3(2), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH2_norm = PSTH2./nanmax(PSTH2,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH2_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n later trial in block')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax3=axes('position',[position_x3(3), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH3_norm = PSTH3./nanmax(PSTH2,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH3_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n eaelier trial in block')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax4=axes('position',[position_x3(4), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH4 = PSTH3_norm-PSTH2_norm; +% PSTH4 = PSTH4./nanmax(PSTH4,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH4(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Larger-Smaller responses')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DLickRate.m b/DataJoint/fn_analysis/PLOTS_Maps2DLickRate.m new file mode 100644 index 0000000..1bc5029 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DLickRate.m @@ -0,0 +1,182 @@ +function PLOTS_Maps2DLickRate(key, dir_current_fig,flag_spikes) +close all; +% clf; + +if flag_spikes==1 +else + rel_data=LICK2D.ROILick2DLickRate; +end + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; +rel_data = rel_data & IMG.ROIGood & key; + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + + + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x3(1)=0.05; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; + + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +position_y3(1)=0.2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + +R = fetchn(rel_data,'corr_with_licks','ORDER BY roi_number'); + + +M=fetch(rel_all ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + + + +%% Map with preferred time +upper=prctile(R(:),95); +lower=prctile(R(:),5); +bounds = max([abs(lower), abs(upper)]); + +hist_bins1 = [-1,-upper:step:upper,1]; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(numel(hist_bins1)-1); +% my_colormap=plasma(numel(time_bins1)); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end + + +[~,~,idx_bin] = histcounts(R,hist_bins1); + +for i_roi=1:1:size(M,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(idx_bin(i_roi),:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date]); +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + +%Preferred time histogram +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +a=histogram(R,hist_bins1); +hist_bins1(1)=-upper-step; +hist_bins1(end)=upper+step; +bins_centers=hist_bins1(1:end-1)+mean(diff(hist_bins1))/2; +y =100*a.BinCounts/rel_all.count; +% y =100*a.BinCounts/sum(a.BinCounts); +% BinCounts=a.BinCounts; +% yyaxis left +bar(bins_centers,y); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Correlation with\n lick rate')); +ylabel(sprintf('Neurons (%%)')); +set(gca,'Xtick',[hist_bins1(1),0,hist_bins1(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([hist_bins1(1),hist_bins1(end)]); +ylim([0 ceil(max(y))]); +title(sprintf('Threshold for event %.2f', key.threshold_for_event)); + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end + + +filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DPSTH.m b/DataJoint/fn_analysis/PLOTS_Maps2DPSTH.m new file mode 100644 index 0000000..075e8d4 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DPSTH.m @@ -0,0 +1,582 @@ +function PLOTS_Maps2DPSTH(key, dir_current_fig,flag_spikes) +close all; +% clf; + +%directionl tuning criteria +threshold_theta_tuning_odd_even_corr=0.5; +threshold_goodness_of_fit_vmises=0.5; +threshold_rayleigh_length=0.1; + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\psth_distance_meso\']; + + +end + + +if flag_spikes==1 + rel_data=LICK2D.ROILick2DPSTHSpikes; + rel_stats=LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2DPSTH; + rel_stats=LICK2D.ROILick2DPSTHStats*LICK2D.ROILick2Dangle; +end + + + +rel_rois= IMG.ROIGood & (rel_stats & key & 'psth_odd_even_corr>0.75'); +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +rel = rel_stats*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + + +psth_time =fetch1(rel_data & key,'psth_time','LIMIT 1'); +rel_psth = rel_data & rel_rois; + + +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x3(1)=0.05; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; + + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +position_y3(1)=0.2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and time +time_all = M.peaktime_psth; + +% time_all_neuropil =M_neuropil.peaktime_psth; + +%% cells vs neuropil +% dtime_cells_vs_neuropil= circ_dist(deg2rad(time_all),deg2rad(time_all_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_cells_vs_neuropil = abs(rad2deg(dtime_cells_vs_neuropil)); +% % histogram(time_all) +% % histogram(time_all_neuropil) +% histogram(dtime_cells_vs_neuropil) +% % plot(time_all,time_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.time_tuning_odd_even_corr-M_neuropil.time_tuning_odd_even_corr) +% +% % plot(M.time_tuning_odd_even_corr,M_neuropil.time_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +%{ +for ii=1:1:numel(time_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + time = M.peaktime_psth(ii); + dtime(ii,:) = abs(time_all-time); + % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); + +% time_neuropil = time_all_neuropil(ii); +% dtime_temp_neuropil = circ_dist(deg2rad(time_all_neuropil),deg2rad(time_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_neuropil(ii,:) = abs(rad2deg(dtime_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtime=dtime(idx_not_self); +% dtime_neuropil =dtime_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_mean(i) = mean(dtime(idx)); +% dtime_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + +% dtime_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_neuropil(idx)))); +% dtime_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtime(:))); +dtime_shuffled = dtime(idx_shuffled); +% dtime_shuffled_neuropil = dtime_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_shuffled(i) = mean(dtime_shuffled(idx)); +% dtime_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled,'-k') +ylim([0,5]); +xlabel('Lateral distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtime_column = dtime(idx_within_column); + dtime_column_neuropil = dtime_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean(i) = mean(dtime_column(idx)); + dtime_Zdist_var(i) = var(dtime_column(idx))/sqrt(sum(idx)); + +% dtime_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_neuropil(idx)))); +% dtime_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtime_column(:))); + dtime_column_shuffled = dtime_shuffled(idx_within_column); +% dtime_column_shuffled_neuropil = dtime_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean_shuffled(i) = mean(dtime_column_shuffled(idx)); +% dtime_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_shuffled_neuropil(idx)))); + + % dtime_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtime_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled,'.-k') + ylim([0,5]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtime(idx)))); + % dtime_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtime(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_shuffled = dtime(idx_shuffled); + % dtime_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\time (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end +%} + + + + + +%% + +% ax=gca; +% ax.timeTick = [0 90 180 270]; +% ax.timeTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.time_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.time_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) +% +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtime_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\time(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map with preferred time + +time_bins1 = floor(psth_time(1)):0.5:ceil(psth_time(end)); +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(numel(time_bins1)-1); +% my_colormap=plasma(numel(time_bins1)); + +for i_roi=1:1:size(M_all_all,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end + + +[~,~,idx_bin] = histcounts(time_all,time_bins1); + +for i_roi=1:1:size(M,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(idx_bin(i_roi),:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date]); +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + +%Preferred time histogram +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +time_bins=time_bins1(1):0.5:time_bins1(end); +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; +a=histogram(M.peaktime_psth,time_bins); +y =100*a.BinCounts/rel_all.count; +% y =100*a.BinCounts/sum(a.BinCounts); +% BinCounts=a.BinCounts; +yyaxis left +bar(time_bins_centers,y); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Peak response time of neurons\n relative to first lick ,\nafter lickport move (s)')); + +ylabel(sprintf('Temporally tuned\n neurons (%%)')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(y))]); + +%% of directionally tuned cells as a function of preferred PSTH time +% axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); + idx_directional = M.theta_tuning_odd_even_corr>threshold_theta_tuning_odd_even_corr & M.goodness_of_fit_vmises>threshold_goodness_of_fit_vmises & M.rayleigh_length>threshold_rayleigh_length; +for ib = 1:1:numel(time_bins)-1 + idx_time_bin = M.peaktime_psth>=time_bins(ib) & M.peaktime_psth1 % if there are less than 1% of total cells in the bin we set it to NaN, to avoid spurious values + tuned_in_time_bins(ib) =100*sum(idx_time_bin&idx_directional)/sum(idx_time_bin); + else + tuned_in_time_bins(ib)=NaN; + end +end +yyaxis right + +time_bins=time_bins1(1):0.5:time_bins1(end); +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; +plot(time_bins_centers,tuned_in_time_bins,'.-','LineWidth',2,'MarkerSize',15) +% xlabel(sprintf('Response time of neurons\n relative to first lickport contact (s)')); +ylabel(sprintf('Directionally tuned\n neurons (%%)')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(tuned_in_time_bins))]); + +%% PSTHs all +ax1=axes('position',[position_x3(1), position_y3(1), panel_width2, panel_height2*1.5]); +smooth_bins=0; % one element backward, current element, and one element forward +PSTH = cell2mat(fetchn(rel_psth, 'psth', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH = PSTH./nanmax(PSTH,[],2); +[~,idx]=max(PSTH,[],2); +[~,idxs]=sort(idx); +imagesc(psth_time,1:1:numel(idxs),PSTH(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n all trials')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +%% PSTHs odd +ax2=axes('position',[position_x3(2), position_y3(1), panel_width2, panel_height2*1.5]); +smooth_bins=0; % one element backward, current element, and one element forward +PSTH = cell2mat(fetchn(rel_psth, 'psth_odd', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH = PSTH./nanmax(PSTH,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n odd trials')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +%% PSTHs odd +ax3=axes('position',[position_x3(3), position_y3(1), panel_width2, panel_height2*1.5]); +smooth_bins=0; % one element backward, current element, and one element forward +PSTH = cell2mat(fetchn(rel_psth, 'psth_even', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH = PSTH./nanmax(PSTH,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n even trials')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + + +%% Behavioral stats +axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); +licks= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key)-TRACKING.VideoGroomingTrial,'lick_time_onset_relative_firstlick_after_lickportentrance'); +time_bins=time_bins1(1):0.1:time_bins1(end); +histogram(licks,time_bins) +xlabel(sprintf('Lick-time of all licks \nrelative to first lick after lickport move (s)')); +ylabel('Licks'); + + +axes('position',[position_x2(4)+0.15, position_y2(3), panel_width2, panel_height2]); +lick_onset= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key)-TRACKING.VideoGroomingTrial & 'lick_number_relative_to_lickport_entrance=0','lick_time_onset'); +histogram(lick_onset) +xlabel(sprintf('Lick-time of first lick\nrelative to lickport move(s)')); +ylabel('Licks'); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DPSTHpreferred.m b/DataJoint/fn_analysis/PLOTS_Maps2DPSTHpreferred.m new file mode 100644 index 0000000..c1dc55a --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DPSTHpreferred.m @@ -0,0 +1,478 @@ +function PLOTS_Maps2DPSTHpreferred(key, dir_current_fig) +close all; +% clf; + + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\psth_preferred_distance_meso\']; + + +end + + + +rel_rois= IMG.ROIGood & (LICK2D.ROILick2DSelectivityStats & key & 'psth_preferred_odd_even_corr>0.75'); +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +rel = LICK2D.ROILick2DSelectivityStats*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + + + + +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.65; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.7; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and time +time_all = M.peaktime_preferred; + +% time_all_neuropil =M_neuropil.peaktime_selectivity; + +%% cells vs neuropil +% dtime_cells_vs_neuropil= circ_dist(deg2rad(time_all),deg2rad(time_all_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_cells_vs_neuropil = abs(rad2deg(dtime_cells_vs_neuropil)); +% % histogram(time_all) +% % histogram(time_all_neuropil) +% histogram(dtime_cells_vs_neuropil) +% % plot(time_all,time_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.time_tuning_odd_even_corr-M_neuropil.time_tuning_odd_even_corr) +% +% % plot(M.time_tuning_odd_even_corr,M_neuropil.time_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +%{ +for ii=1:1:numel(time_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + time = M.peaktime_selectivity(ii); + dtime(ii,:) = abs(time_all-time); + % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); + +% time_neuropil = time_all_neuropil(ii); +% dtime_temp_neuropil = circ_dist(deg2rad(time_all_neuropil),deg2rad(time_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_neuropil(ii,:) = abs(rad2deg(dtime_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtime=dtime(idx_not_self); +% dtime_neuropil =dtime_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_mean(i) = mean(dtime(idx)); +% dtime_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + +% dtime_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_neuropil(idx)))); +% dtime_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtime(:))); +dtime_shuffled = dtime(idx_shuffled); +% dtime_shuffled_neuropil = dtime_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_shuffled(i) = mean(dtime_shuffled(idx)); +% dtime_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled,'-k') +ylim([0,5]); +xlabel('Lateral distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtime_column = dtime(idx_within_column); + dtime_column_neuropil = dtime_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean(i) = mean(dtime_column(idx)); + dtime_Zdist_var(i) = var(dtime_column(idx))/sqrt(sum(idx)); + +% dtime_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_neuropil(idx)))); +% dtime_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtime_column(:))); + dtime_column_shuffled = dtime_shuffled(idx_within_column); +% dtime_column_shuffled_neuropil = dtime_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean_shuffled(i) = mean(dtime_column_shuffled(idx)); +% dtime_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_shuffled_neuropil(idx)))); + + % dtime_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtime_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled,'.-k') + ylim([0,5]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtime(idx)))); + % dtime_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtime(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_shuffled = dtime(idx_shuffled); + % dtime_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\time (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end +%} + + + + + +%% + +% ax=gca; +% ax.timeTick = [0 90 180 270]; +% ax.timeTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.time_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.time_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) +% +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtime_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\time(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map with preferred orientations + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(11); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end + +for i_roi=1:1:size(M,1) + + preferred_time=ceil(time_all(i_roi)+5); + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(preferred_time,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + +%Preferred time histogram +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +time_bins=-3:0.5:4; +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; +a=histogram(M.peaktime_preferred,time_bins); +% BinCounts=a.BinCounts; +bar(time_bins_centers,a.BinCounts); +title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Time (s)\n relative to first lickport contact')); +ylabel('Neurons'); + +%% PSTHs +ax1=axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2*1.5]); +rel_psth = LICK2D.ROILick2DSelectivity & rel_rois; +psth_time =fetch1(LICK2D.ROILick2DSelectivity & key,'selectivity_time','LIMIT 1'); +smooth_bins=0; % one element backward, current element, and one element forward +PSTH = cell2mat(fetchn(rel_psth, 'psth_preferred', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH = PSTH./nanmax(PSTH,[],2); +[~,idx]=max(PSTH,[],2); +[~,idxs]=sort(idx); +imagesc(psth_time,1:1:numel(idxs),PSTH(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title('Normalized responses'); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DReward.m b/DataJoint/fn_analysis/PLOTS_Maps2DReward.m new file mode 100644 index 0000000..9260595 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DReward.m @@ -0,0 +1,634 @@ +function PLOTS_Maps2DReward(key, dir_current_fig,flag_spikes, flag_reward) +close all; +% clf; + +%directionl tuning criteria +threshold_theta_tuning_odd_even_corr=0.5; +threshold_goodness_of_fit_vmises=0.5; +threshold_rayleigh_length=0.1; + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\psth_distance_meso\']; + + +end + + +if flag_spikes==1 +% rel_data=LICK2D.ROILick2DPSTHStatsSpikes; +% rel_stats=LICK2D.ROILick2DPSTHStatsSpikes*LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2DPSTH; + rel_stats=LICK2D.ROILick2DRewardStats*LICK2D.ROILick2DPSTHStats*LICK2D.ROILick2Dangle; +end + + +switch flag_reward + case 0 %regular versus large + rel_rois= IMG.ROIGood & (rel_stats & key & 'reward_mean_pval_regular_large<0.05'); + filename_suffix = 'RegularVsLarge'; + case 1 %regular versus large + rel_rois= IMG.ROIGood & (rel_stats & key & 'reward_mean_pval_regular_small<0.05'); + filename_suffix = 'RegularVsSmall'; + case 2 %regular versus large + rel_rois= IMG.ROIGood & (rel_stats & key & 'reward_mean_pval_small_large<0.05'); + filename_suffix = 'SmallVsLarge'; +end + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date filename_suffix]; + +rel = rel_stats*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + + +psth_time =fetch1(rel_data & key,'psth_time','LIMIT 1'); +rel_psth = rel_data & rel_rois; + + +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x3(1)=0.05; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; + + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +position_y3(1)=0.2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; + +%Graphics +%--------------------------------- +fig=figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +left_color=[0 0 0]; +right_color=[0 0 0]; +set(fig,'defaultAxesColorOrder',[left_color; right_color]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and time +switch flag_reward + case 0 %regular versus large + x=M.reward_mean_regular; + y=M.reward_mean_large; + case 1 %regular versus large + x=M.reward_mean_small; + y=M.reward_mean_regular; + case 2 %regular versus large + x=M.reward_mean_small; + y=M.reward_mean_large; +end + + + +change_mean = 100*((y./x)-1); + +% time_all_neuropil =M_neuropil.peaktime_psth; + +%% cells vs neuropil +% dtime_cells_vs_neuropil= circ_dist(deg2rad(time_all),deg2rad(time_all_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_cells_vs_neuropil = abs(rad2deg(dtime_cells_vs_neuropil)); +% % histogram(time_all) +% % histogram(time_all_neuropil) +% histogram(dtime_cells_vs_neuropil) +% % plot(time_all,time_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.time_tuning_odd_even_corr-M_neuropil.time_tuning_odd_even_corr) +% +% % plot(M.time_tuning_odd_even_corr,M_neuropil.time_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +%{ +for ii=1:1:numel(time_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + time = M.peaktime_psth(ii); + dtime(ii,:) = abs(time_all-time); + % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); + +% time_neuropil = time_all_neuropil(ii); +% dtime_temp_neuropil = circ_dist(deg2rad(time_all_neuropil),deg2rad(time_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_neuropil(ii,:) = abs(rad2deg(dtime_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtime=dtime(idx_not_self); +% dtime_neuropil =dtime_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_mean(i) = mean(dtime(idx)); +% dtime_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + +% dtime_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_neuropil(idx)))); +% dtime_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtime(:))); +dtime_shuffled = dtime(idx_shuffled); +% dtime_shuffled_neuropil = dtime_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_shuffled(i) = mean(dtime_shuffled(idx)); +% dtime_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled,'-k') +ylim([0,5]); +xlabel('Lateral distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtime_column = dtime(idx_within_column); + dtime_column_neuropil = dtime_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean(i) = mean(dtime_column(idx)); + dtime_Zdist_var(i) = var(dtime_column(idx))/sqrt(sum(idx)); + +% dtime_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_neuropil(idx)))); +% dtime_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtime_column(:))); + dtime_column_shuffled = dtime_shuffled(idx_within_column); +% dtime_column_shuffled_neuropil = dtime_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean_shuffled(i) = mean(dtime_column_shuffled(idx)); +% dtime_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_shuffled_neuropil(idx)))); + + % dtime_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtime_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled,'.-k') + ylim([0,5]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtime(idx)))); + % dtime_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtime(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_shuffled = dtime(idx_shuffled); + % dtime_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\time (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end +%} + + + + + +%% + +% ax=gca; +% ax.timeTick = [0 90 180 270]; +% ax.timeTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.time_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.time_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) +% +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtime_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\time(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map of reward response +bins1 = [-inf,-100:1:100,inf]; +[N,edges,bin]=histcounts(change_mean,bins1); +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(numel(bins1)); +% my_colormap=plasma(numel(time_bins1)); + +for i_roi=1:1:size(M_all_all,1) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +end + +for i_roi=1:1:size(M,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date filename_suffix]); +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + + + +%% Reward preference histogram + +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +step=20; +bins2 = [-inf,-80:step:80,inf]; +bins2_centers=[bins2(2)-step/2, bins2(2:end-1)+step/2]; + +yyaxis left +a=histogram(change_mean,bins2); +y =100*a.BinCounts/rel_all.count; +bar(bins2_centers,y,'FaceColor',[0.5 0.5 0.5],'EdgeColor',[0.5 0.5 0.5]); +% title(sprintf('Response time of tuned neurons')); +% ylim([0 ceil(max(y))]); +ylabel(sprintf('Reward-modulated\n neurons (%%)'),'Color',[0.5 0.5 0.5]); +xlabel(sprintf('Reward-modulation (%% increase)')); + +%% of directionally tuned cells as a function of preferred PSTH time +% axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); + idx_directional = M.theta_tuning_odd_even_corr>threshold_theta_tuning_odd_even_corr & M.goodness_of_fit_vmises>threshold_goodness_of_fit_vmises & M.rayleigh_length>threshold_rayleigh_length; +for ib = 1:1:numel(bins2)-1 + idx_change_bin = change_mean>=bins2(ib) & change_mean5 % to avoid spurious values + tuned_in_change_bins(ib) =100*sum(idx_change_bin&idx_directional)/sum(idx_change_bin); + else + tuned_in_change_bins(ib)=NaN; + end +end +yyaxis right + +plot(bins2_centers,tuned_in_change_bins,'.-','LineWidth',2,'MarkerSize',15) +% xlabel(sprintf('Response time of neurons\n relative to first lickport contact (s)')); +ylabel(sprintf('Directionally tuned\n neurons (%%)')); +set(gca,'Xtick',[-100,0,100],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([-100,100]); +ylim([0 ceil(max(tuned_in_change_bins))]); + + + +%% Preferred time histogram, for reward increasing or reward decreasing cells +axes('position',[position_x2(4)+0.15, position_y2(2), panel_width2, panel_height2]); +time_bins=floor(psth_time(1)):1:ceil(psth_time(end)); +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; + +yyaxis left +idx = change_mean>=0; +a=histogram(M.peaktime_psth(idx),time_bins); +y =100*a.BinCounts/sum(a.BinCounts); +bar(time_bins_centers,y,'FaceColor',[1 0 0],'EdgeColor',[1 0 0]); +% title(sprintf('Response time of tuned neurons')); +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(y))]); +ylabel(sprintf('Reward-enhanced\n neurons (%%)'),'Color',[1 0 0]); + +yyaxis right +idx = change_mean<0; +a=histogram(M.peaktime_psth(idx),time_bins); +y =100*a.BinCounts/sum(a.BinCounts); +bar(time_bins_centers,y,'FaceColor','none','EdgeColor',[0 0 1]); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Peak response time of neurons\n relative to first lickport contact (s)')); +ylabel(sprintf('Reward-suppressed\n neurons (%%)'),'Color',[0 0 1]); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([time_bins(1),time_bins(end)]); +ylim([0 ceil(max(y))]); + + + + + +%% PSTHs all +smooth_bins=1; % one element backward, current element, and one element forward + +switch flag_reward + case 0 %regular versus large +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_regular', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_large', 'ORDER BY roi_number')); + case 1 %regular versus large +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_small', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_regular', 'ORDER BY roi_number')); + + case 2 %regular versus large +PSTH2 = cell2mat(fetchn(rel_psth, 'psth_small', 'ORDER BY roi_number')); +PSTH3 = cell2mat(fetchn(rel_psth, 'psth_large', 'ORDER BY roi_number')); +end + + +ax1=axes('position',[position_x3(1), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH = cell2mat(fetchn(rel_psth, 'psth', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH_norm = PSTH./nanmax(PSTH,[],2); +[~,idx]=max(PSTH_norm,[],2); +[~,idxs]=sort(idx); +imagesc(psth_time,1:1:numel(idxs),PSTH_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n all trials')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax2=axes('position',[position_x3(2), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH2_norm = PSTH2./nanmax(PSTH2,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH2_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n smaller reward')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax3=axes('position',[position_x3(3), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH3_norm = PSTH3./nanmax(PSTH2,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH3_norm(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Normalized responses\n larger reward')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + +ax4=axes('position',[position_x3(4), position_y3(1), panel_width2, panel_height2*1.5]); +PSTH4 = PSTH3_norm-PSTH2_norm; +% PSTH4 = PSTH4./nanmax(PSTH4,[],2); +imagesc(psth_time,1:1:numel(idxs),PSTH4(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title(sprintf('Larger-Smaller responses')); +set(gca,'Xtick',[time_bins(1),0,time_bins(end)],'TickLength',[0.05,0.05],'TickDir','out'); + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2DSelectivity.m b/DataJoint/fn_analysis/PLOTS_Maps2DSelectivity.m new file mode 100644 index 0000000..77977db --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2DSelectivity.m @@ -0,0 +1,478 @@ +function PLOTS_Maps2DSelectivity(key, dir_current_fig) +close all; +% clf; + + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\selectivity_distance_meso\']; + + +end + + + +rel_rois= IMG.ROIGood & (LICK2D.ROILick2DSelectivityStats & key & 'selectivity_odd_even_corr>0.5'); +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +rel = LICK2D.ROILick2DSelectivityStats*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; + + + + +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.65; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.7; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and time +time_all = M.peaktime_selectivity; + +% time_all_neuropil =M_neuropil.peaktime_selectivity; + +%% cells vs neuropil +% dtime_cells_vs_neuropil= circ_dist(deg2rad(time_all),deg2rad(time_all_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_cells_vs_neuropil = abs(rad2deg(dtime_cells_vs_neuropil)); +% % histogram(time_all) +% % histogram(time_all_neuropil) +% histogram(dtime_cells_vs_neuropil) +% % plot(time_all,time_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.time_tuning_odd_even_corr-M_neuropil.time_tuning_odd_even_corr) +% +% % plot(M.time_tuning_odd_even_corr,M_neuropil.time_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +%{ +for ii=1:1:numel(time_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + time = M.peaktime_selectivity(ii); + dtime(ii,:) = abs(time_all-time); + % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); + +% time_neuropil = time_all_neuropil(ii); +% dtime_temp_neuropil = circ_dist(deg2rad(time_all_neuropil),deg2rad(time_neuropil)); +% % dtime_temp = dtime_temp - 2*180*floor( (dtime_temp+180)/(2*180) ); +% dtime_neuropil(ii,:) = abs(rad2deg(dtime_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtime=dtime(idx_not_self); +% dtime_neuropil =dtime_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_mean(i) = mean(dtime(idx)); +% dtime_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + +% dtime_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_neuropil(idx)))); +% dtime_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtime(:))); +dtime_shuffled = dtime(idx_shuffled); +% dtime_shuffled_neuropil = dtime_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtime_XYdist_shuffled(i) = mean(dtime_shuffled(idx)); +% dtime_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled,'-k') +ylim([0,5]); +xlabel('Lateral distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtime_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtime_column = dtime(idx_within_column); + dtime_column_neuropil = dtime_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean(i) = mean(dtime_column(idx)); + dtime_Zdist_var(i) = var(dtime_column(idx))/sqrt(sum(idx)); + +% dtime_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_neuropil(idx)))); +% dtime_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtime_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtime_column(:))); + dtime_column_shuffled = dtime_shuffled(idx_within_column); +% dtime_column_shuffled_neuropil = dtime_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtime_Zdist_mean_shuffled(i) = mean(dtime_column_shuffled(idx)); +% dtime_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtime_column_shuffled_neuropil(idx)))); + + % dtime_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtime_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled,'.-k') + ylim([0,5]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta Time (s)'); + title(sprintf('Response Time \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0,5]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtime_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\time (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtime(idx)))); + % dtime_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtime(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtime(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtime_shuffled = dtime(idx_shuffled); + % dtime_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtime_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtime_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\time (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end +%} + + + + + +%% + +% ax=gca; +% ax.timeTick = [0 90 180 270]; +% ax.timeTickLabel = [0 90 180 -90]; +% ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.time_tuning_odd_even_corr,10); +% title(sprintf('Directional-tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) +% +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.time_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +% axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +% b1=histogram(M.rayleigh_length,10); +% title(sprintf('Directional tuning \n')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) +% +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtime_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\time(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map with preferred orientations + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(11); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end + +for i_roi=1:1:size(M,1) + + preferred_time=ceil(time_all(i_roi)+5); + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(preferred_time,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + +%Preferred time histogram +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +time_bins=-3:0.5:4; +time_bins_centers=time_bins(1:end-1)+mean(diff(time_bins))/2; +a=histogram(M.peaktime_selectivity,time_bins); +% BinCounts=a.BinCounts; +bar(time_bins_centers,a.BinCounts); +title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Time (s)\n relative to first lickport contact')); +ylabel('Neurons'); + +%% PSTHs +ax1=axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2*1.5]); +rel_psth = LICK2D.ROILick2DSelectivity & rel_rois; +psth_time =fetch1(LICK2D.ROILick2DSelectivity & key,'selectivity_time','LIMIT 1'); +smooth_bins=0; % one element backward, current element, and one element forward +PSTH = cell2mat(fetchn(rel_psth, 'selectivity', 'ORDER BY roi_number')); +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH=PSTH(:,time_idx); +PSTH = PSTH./nanmax(PSTH,[],2); +[~,idx]=max(PSTH,[],2); +[~,idxs]=sort(idx); +imagesc(psth_time,1:1:numel(idxs),PSTH(idxs,:)); +xlabel('Time (s)'); +ylabel('Neurons'); +title('Normalized responses'); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2Dtheta.m b/DataJoint/fn_analysis/PLOTS_Maps2Dtheta.m new file mode 100644 index 0000000..9130320 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2Dtheta.m @@ -0,0 +1,520 @@ +function PLOTS_Maps2Dtheta(key, dir_current_fig, flag_spikes) +close all; +% clf; + + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\theta_distance_meso_neuropil\']; + + +end + + + + +if flag_spikes==1 + rel_data=LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2Dangle; +end + +% rel_rois= IMG.ROIGood & (rel_data & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5' & 'rayleigh_length>0.1'); + rel_rois= IMG.ROIGood & (rel_data & key & 'goodness_of_fit_vmises>0.5'); + + dir_current_fig=[dir_current_fig 'signif_2Dlick\']; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +rel = rel_data*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; +% session_date = fetch1(EXP2.Session & key,'session_date'); +% +% filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] +% +% rel = rel & (LICK2D.IncludeROI & 'number_of_events>=50'); +% rel_all_good_cells= LICK2D.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key & (LICK2D.IncludeROI & 'number_of_events>=50'); + +% rel = rel & 'information_per_spike>=0.05' & 'plane_num=1'; +% rel = rel & 'information_per_spike>=0.1'; +% rel = rel & 'plane_num=4'; +% & 'pval_information_per_spike<=0.01' + +% lateral_distance_bins = [0:20:500,inf]; % in microns +% euclidean_distance_bins = [10:20:500]; + +lateral_distance_bins = [0:20:200,inf]; % in microns +euclidean_distance_bins = [10:20:200]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.65; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.7; + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta_vmises; + +% theta_all_neuropil =M_neuropil.preferred_theta_vmises; + +% %% cells vs neuropil +% dtheta_cells_vs_neuropil= circ_dist(deg2rad(theta_all),deg2rad(theta_all_neuropil)); +% % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +% dtheta_cells_vs_neuropil = abs(rad2deg(dtheta_cells_vs_neuropil)); +% +% +% % % histogram(theta_all) +% % % histogram(theta_all_neuropil) +% % histogram(dtheta_cells_vs_neuropil) +% % % plot(theta_all,theta_all_neuropil,'.') +% % +% % % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% % histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% % histogram(M.theta_tuning_odd_even_corr-M_neuropil.theta_tuning_odd_even_corr) +% % +% % % plot(M.theta_tuning_odd_even_corr,M_neuropil.theta_tuning_odd_even_corr,'.') +% + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +dXY=zeros(numel(theta_all),numel(theta_all)); +dZ=zeros(numel(theta_all),numel(theta_all)); +d3D=zeros(numel(theta_all),numel(theta_all)); +dtheta=zeros(numel(theta_all),numel(theta_all)); + +parfor ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um +% d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + + theta = M.preferred_theta_vmises(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); + % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +% theta_neuropil = theta_all_neuropil(ii); +% dtheta_temp_neuropil = circ_dist(deg2rad(theta_all_neuropil),deg2rad(theta_neuropil)); +% % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +% dtheta_neuropil(ii,:) = abs(rad2deg(dtheta_temp_neuropil)); + +end + + +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); +% dtheta_neuropil =dtheta_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + +% dtheta_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_neuropil(idx)))); +% dtheta_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +% dtheta_shuffled_neuropil = dtheta_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); +% dtheta_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +ylim([0,110]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtheta_column = dtheta(idx_within_column); +% dtheta_column_neuropil = dtheta_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); + +% dtheta_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_neuropil(idx)))); +% dtheta_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta_column(:))); + dtheta_column_shuffled = dtheta_shuffled(idx_within_column); +% dtheta_column_shuffled_neuropil = dtheta_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); +% dtheta_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled_neuropil(idx)))); + + % dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') + ylim([0,110]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Preferred Direction \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + % dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtheta(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_shuffled = dtheta(idx_shuffled); + % dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\theta (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end + + +%% +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta_vmises,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; + +axes('position',[position_x2(4)+0.15, position_y2(1)-0.2, panel_width2, panel_height2]); +histogram(M.preferred_theta_vmises); +title(sprintf('Preferred direction \nbased on VM fit')); +xlabel('Direction deg') +ylabel('Counts'); + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Directional-tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.theta_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtheta_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\theta(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) + + +%% Map with preferred orientations + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +% +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); + +% %%up down +% my_colormap(1:1:180,:)=repmat([1 0 0],180,1); +% my_colormap(180:1:end,:)=repmat([0 0 1],181,1); + +% % 4 directions +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([0 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 1 0],90,1); + +% % left right +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([1 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 0 1],90,1); + + + + +preferred_theta =M.preferred_theta_vmises; +% idx_rand = randperm(numel(x)); +% preferred_theta=preferred_theta(idx_rand); +for i_roi=1:1:size(M_all_all,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end + +for i_roi=1:1:size(M,1) + + prefered_angle=floor(preferred_theta(i_roi)+180)+1; + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[0.75, 0.6, panel_width1, panel_height1]); +colormap(ax2,my_colormap) +cb1 = colorbar(ax2,'Position',[0.72, 0.6 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_Maps2Dtheta_distance.m b/DataJoint/fn_analysis/PLOTS_Maps2Dtheta_distance.m new file mode 100644 index 0000000..47d7968 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_Maps2Dtheta_distance.m @@ -0,0 +1,453 @@ +function PLOTS_Maps2Dtheta_distance(key, dir_current_fig, rel_data ) +close all; +% clf; +rel_roi = (IMG.ROI-IMG.ROIBad) & key; + +column_radius = 20; %in um +min_num_cells = 5; + +rel_rois_selected= rel_roi & (rel_data & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0' & 'rayleigh_length>0'); +dir_current_fig=[dir_current_fig 'signif_2Dlick\']; + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +rel = (rel_data& rel_rois_selected)*IMG.PlaneCoordinates*IMG.ROI ; +% rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois_selected; + +rel_all = rel_roi*IMG.PlaneCoordinates; + +% lateral_distance_bins = [0:20:500,inf]; % in microns +lateral_distance_bins = [0:20:200,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.65; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.7; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; +z_all=M.z_pos_relative; + +x_all=x_all; +y_all=y_all; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all; +y_all_all=y_all_all; + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta_vmises; + +% theta_all_neuropil =M_neuropil.preferred_theta_vmises; + +%% cells vs neuropil +% dtheta_cells_vs_neuropil= circ_dist(deg2rad(theta_all),deg2rad(theta_all_neuropil)); +% dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +% dtheta_cells_vs_neuropil = abs(rad2deg(dtheta_cells_vs_neuropil)); +% % histogram(theta_all) +% % histogram(theta_all_neuropil) +% histogram(dtheta_cells_vs_neuropil) +% % plot(theta_all,theta_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.theta_tuning_odd_even_corr-M_neuropil.theta_tuning_odd_even_corr) +% +% % plot(M.theta_tuning_odd_even_corr,M_neuropil.theta_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +for ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + + theta = M.preferred_theta_vmises(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); + % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +% theta_neuropil = theta_all_neuropil(ii); +% dtheta_temp_neuropil = circ_dist(deg2rad(theta_all_neuropil),deg2rad(theta_neuropil)); +% % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +% dtheta_neuropil(ii,:) = abs(rad2deg(dtheta_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); +% dtheta_neuropil =dtheta_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + +% dtheta_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_neuropil(idx)))); +% dtheta_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +% dtheta_shuffled_neuropil = dtheta_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); +% dtheta_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +% ylim([0,110]); +ylim([60,90]); + +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + +% ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean_neuropil,'-r') +% plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled_neuropil,'-k') +% ylim([0,110]); +% xlabel('Lateral distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtheta_column = dtheta(idx_within_column); +% dtheta_column_neuropil = dtheta_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); + +% dtheta_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_neuropil(idx)))); +% dtheta_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta_column(:))); + dtheta_column_shuffled = dtheta_shuffled(idx_within_column); +% dtheta_column_shuffled_neuropil = dtheta_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); +% dtheta_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled_neuropil(idx)))); + + % dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') + ylim([0,110]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Preferred Direction \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); + +% ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +% hold on; +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_neuropil,'.-r') +% plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled_neuropil,'.-k') +% ylim([0,110]); +% xlabel('Axial distance (\mum)'); +% ylabel('\Delta\theta (\circ)'); +% title(sprintf('Neuropil')); +% xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[0, 45, 90]); +% + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + % dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtheta(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_shuffled = dtheta(idx_shuffled); + % dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\theta (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end + + +%% +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta_vmises,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; + +axes('position',[position_x2(4)+0.15, position_y2(1)-0.2, panel_width2, panel_height2]); +histogram(M.preferred_theta_vmises); + + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Directional-tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +% axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.theta_tuning_odd_even_corr,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(M_neuropil.rayleigh_length,10); +% title(sprintf('Neuropil')); +% xlabel(sprintf('Rayleigh vector length')); +% ylabel('Counts') +% box off; +% xlim([0,b1.BinLimits(2)]) + +% axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +% b2=histogram(dtheta_cells_vs_neuropil,18); +% title(sprintf('Neurons vs. Neuropil')); +% xlabel('Neurons vs Neuropil \Delta\theta(\circ)'); +% ylabel('Counts') +% box off; +% xlim([0,180]) +% + +%% Map with preferred orientations + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +% +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); + +% %%up down +% my_colormap(1:1:180,:)=repmat([1 0 0],180,1); +% my_colormap(180:1:end,:)=repmat([0 0 1],181,1); + +% % 4 directions +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([0 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 1 0],90,1); + +% % left right +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([1 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 0 1],90,1); + + + + +preferred_theta =M.preferred_theta_vmises; +% idx_rand = randperm(numel(x)); +% preferred_theta=preferred_theta(idx_rand); +for i_roi=1:1:size(M_all_all,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end + +for i_roi=1:1:size(M,1) + + prefered_angle=floor(preferred_theta(i_roi)+180)+1; + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[0.75, 0.6, panel_width1, panel_height1]); +colormap(ax2,my_colormap) +cb1 = colorbar(ax2,'Position',[0.72, 0.6 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_MapsBodypartCorr.m b/DataJoint/fn_analysis/PLOTS_MapsBodypartCorr.m new file mode 100644 index 0000000..aa5861a --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsBodypartCorr.m @@ -0,0 +1,181 @@ +function PLOTS_MapsBodypartCorr(key, dir_current_fig,flag_spikes) +close all; +% clf; + +if flag_spikes==1 +else + rel_data=LICK2D.ROIBodypartCorr; +end + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; +rel_data = rel_data & IMG.ROIGood & key; + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + + + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x3(1)=0.05; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; +position_x3(end+1)=position_x3(end)+horizontal_dist2; + + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +position_y3(1)=0.2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; +position_y3(end+1)=position_y3(end)-vertical_dist2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + +R = fetchn(rel_data,'corr_with_bodypart','ORDER BY roi_number'); + + +M=fetch(rel_all ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +% M_neuropil=fetch(rel_neuropil ,'*'); +% M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + + + +%% Map with preferred time +upper=prctile(R,98); +lower=prctile(R,2); +bounds = max([abs(lower), abs(upper)]); +v = linspace(-bounds,bounds,20); +step =mean(diff(v)); +hist_bins1 = [-1,-bounds:step:bounds,1]; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +hold on; +my_colormap=jet(numel(hist_bins1)-1); +% my_colormap=plasma(numel(time_bins1)); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end + + +[~,~,idx_bin] = histcounts(R,hist_bins1); + +for i_roi=1:1:size(M,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(idx_bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date ' Correlation with ' key.bodypart_name]); +% Colorbar +ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + +%Preferred time histogram +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +a=histogram(R,hist_bins1); +hist_bins1(1)=-bounds-step; +hist_bins1(end)=bounds+step; +bins_centers=hist_bins1(1:end-1)+mean(diff(hist_bins1))/2; +y =100*a.BinCounts/rel_all.count; +% y =100*a.BinCounts/sum(a.BinCounts); +% BinCounts=a.BinCounts; +% yyaxis left +bar(bins_centers,y); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('Correlation with\n %s',key.bodypart_name)); +ylabel(sprintf('Neurons (%%)')); +set(gca,'Xtick',[hist_bins1(1),0,hist_bins1(end)],'TickLength',[0.05,0.05],'TickDir','out'); +box off +xlim([hist_bins1(1),hist_bins1(end)]); +ylim([0 ceil(max(y))]); +title(sprintf('Threshold for event %.2f', key.threshold_for_event)); + +dir_current_fig = [dir_current_fig key.bodypart_name '\']; +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end + + +filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_MapsClusterCorr.m b/DataJoint/fn_analysis/PLOTS_MapsClusterCorr.m new file mode 100644 index 0000000..e416bb5 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsClusterCorr.m @@ -0,0 +1,362 @@ +function PLOTS_MapsClusterCorr(key, flag_plot_clusters_individually, n_clust, M_all) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\brain_maps\clusters_corr\']; +rel = IMG.ROI & ((POP.ROIClusterCorr& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorr*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s %d\n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.session_epoch_number, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD.m b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD.m new file mode 100644 index 0000000..1a8aad1 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD.m @@ -0,0 +1,341 @@ +function PLOTS_MapsClusterCorrSVD(key, flag_plot_clusters_individually, M_all, dir_current_fig) +close all; + +n_clust = key.n_clust; +threshold_for_event= key.threshold_for_event; +if isfield(key,'num_svd_components_removed') + svd_removed = key.num_svd_components_removed; +else + svd_removed=0; +end + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; + +rel = IMG.ROI & ((POP.ROIClusterCorrSVD& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; +rel1 = ((IMG.ROI*POP.ROIClusterCorrSVD*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; + + +rel2 = LICK2D.ROILick2DPSTH * LICK2D.ROILick2DSelectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust) sprintf('threshold%.0f', 100*threshold_for_event) sprintf('_SVDsremoved%d',svd_removed)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +parfor i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s %d\n anm%d session %d, Total planes = %d\nsplits = %d, threshold =%.2f %.1f%% cells shown\n%d SVD components removed', session_epoch_label, key.session_epoch_number, key.subject_id,key.session, number_of_planes, n_clust, threshold_for_event, percent_clustered,svd_removed)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD_CCF.m b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD_CCF.m new file mode 100644 index 0000000..0a9c3db --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrSVD_CCF.m @@ -0,0 +1,394 @@ +function PLOTS_MapsClusterCorrSVD_CCF(key, flag_plot_clusters_individually, M_all, dir_current_fig) +close all; + +n_clust = key.n_clust; +threshold_for_event= key.threshold_for_event; +if isfield(key,'num_svd_components_removed') + svd_removed = key.num_svd_components_removed; +else + svd_removed=0; +end + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; + +rel_roi = (IMG.ROI-IMG.ROIBad) & key; + +rel = rel_roi & ((POP.ROIClusterCorrSVD& key) & 'heirar_cluster_percent>=1'); +rel1 = ((rel_roi*POP.ROIClusterCorrSVD*IMG.PlaneCoordinates) & key) & 'heirar_cluster_percent>=1'; + + +rel2 = LICK2D.ROILick2DPSTH * LICK2D.ROILick2DSelectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust) sprintf('threshold%.0f', 100*threshold_for_event) sprintf('_SVDsremoved%d',svd_removed)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.2; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(end+1,:)=[1 0 0]; +my_colormap(end+1,:)=[0 0 1]; +my_colormap(end+1,:)=[0 0.8 0]; +my_colormap(end+1,:)=[0.94 0.9 0]; +my_colormap(end+1,:)=[0 0.8 0.8]; +my_colormap(end+1,:)=[1 0 1]; +my_colormap(end+1,:)=[0.9100 0.4100 0.1700]; +my_colormap(end+1,:)=[0 1 1]; +my_colormap(end+1,:)=[0.2 0.2 0.2]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +x = M.roi_centroid_x + M.x_pos_relative; +y = M.roi_centroid_y + M.y_pos_relative; +x=x/0.75; +y=y/0.5; + + +% aligning relative to bregma +bregma_x_mm=1000*fetchn(IMG.Bregma & key,'bregma_x_cm'); +if ~isempty(bregma_x_mm) + bregma_y_mm=1000*fetchn(IMG.Bregma & key,'bregma_y_cm'); + x_all_max= max(x_all); + y_all_min= min(y_all); + + x_all=x_all-[x_all_max - bregma_x_mm]; % anterior posterior + y_all=y_all-y_all_min+bregma_y_mm; % medial lateral + + x=x-[x_all_max - bregma_x_mm]; % anterior posterior + y=y-y_all_min+bregma_y_mm; % medial lateral + +end + + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Posterior - Anterior (\mum)'); + ylabel('Medial - Lateral (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s %d\n anm%d session %d, Total planes = %d\nsplits = %d, threshold =%.2f %.1f%% cells shown\n%d SVD components removed\n', session_epoch_label, key.session_epoch_number, key.subject_id,key.session, number_of_planes, n_clust, threshold_for_event, percent_clustered,svd_removed)); + + + % % Plot Plane frames + % fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + % for i_f = 1:1:numel(fov_num) + % keyfov.fov_num = fov_num(i_f); + % ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + % x1=ROI_rect.x_pos_relative/0.75; + % x2=ROI_rect.fov_x_size/0.75 + x1; + % y1=ROI_rect.y_pos_relative/0.5; + % y2=ROI_rect.fov_y_size/0.5 + y1; + % plot([x1,x1],[y1,y2],'-k'); + % end + + + %% PLOT ALLEN MAP + allen2mm=1000*3.2/160; + if ~isempty(bregma_x_mm) + allenDorsalMapSM_Musalletal2019 = load('allenDorsalMapSM_Musalletal2019.mat'); + edgeOutline = allenDorsalMapSM_Musalletal2019.dorsalMaps.edgeOutline; + + bregma_x_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(2); + bregma_y_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(1); + for i_a = 1:1:numel(edgeOutline) + hold on + xxx = -1*([edgeOutline{i_a}(:,1)]-bregma_x_allen); + yyy= [edgeOutline{i_a}(:,2)]-bregma_y_allen; + + xxx=xxx*allen2mm; + yyy=yyy*allen2mm; + plot(xxx, yyy,'.','Color', [0 0 0], 'MarkerSize', 5) + % plot(0,0 ,'*') + end + end + xlim([min(x),3300]); + % xlim([min(x),max(x)]); + ylim([0,max(y)]); + set(gca,'Ytick', [0:1000:max(y)]) +% %% Plot clusters +% try +% psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); +% PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); +% PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); +% PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); +% +% +% PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH1_before_scaling=PSTH1; +% PSTH1 = PSTH1./nanmax(PSTH1,[],2); +% +% PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH2 = PSTH2./nanmax(PSTH2,[],2); +% +% PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); +% +% xl=[-2,3]; %xlimit +% for ic=1:1:min([numel(unique_cluster_id),10]) +% +% %Preferred +% axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); +% psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% hold on; +% plot([0 0],[0,1],'-k'); +% plot(psth_time(1,:),psth_cluster(ic,:)) +% title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) +% yl = [0, 1]; +% ylim(yl); +% xlim(xl); +% if ic ==1 +% ylabel('Preferred'); +% set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); +% else +% set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); +% end +% +% %Non-preferred +% axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); +% psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% hold on; +% plot([0 0],[0,1],'-k'); +% plot(psth_time(1,:),psth_cluster(ic,:)) +% % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) +% yl = [0, 1]; +% ylim(yl); +% xlim(xl); +% if ic ==1 +% ylabel('Non-prefer.'); +% set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); +% else +% set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); +% end +% +% %Selectivity +% axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); +% psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% hold on; +% plot([0 0],[0,1],'-k'); +% plot(psth_time(1,:),psth_cluster(ic,:)) +% % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) +% yl = [0, 0.5]; +% ylim(yl); +% xlim(xl); +% if ic ==1 +% ylabel('Selectivity'); +% xlabel('Time to Lick (s)'); +% set(gca,'YTick',yl,'XTick',[-2,0,2]); +% +% else +% set(gca,'YTick',[],'XTick',[-2,0,2]); +% end +% end +% +% catch +% disp('No behavioral data'); +% end + +set(gca, 'FontSize', 16) + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/DataJoint/fn_analysis/PLOTS_MapsClusterCorrThresholded.m b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrThresholded.m new file mode 100644 index 0000000..d93c90e --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsClusterCorrThresholded.m @@ -0,0 +1,346 @@ +function PLOTS_MapsClusterCorrThresholded(key, flag_plot_clusters_individually, M_all, dir_current_fig) +close all; + +n_clust = key.n_clust; +threshold_for_event= key.threshold_for_event; +if isfield(key,'num_svd_components_removed') + svd_removed = key.num_svd_components_removed; +else + svd_removed=0; +end + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; + +if threshold_for_event==0 + rel = IMG.ROI & ((POP.ROIClusterCorr& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + rel1 = ((IMG.ROI*POP.ROIClusterCorr*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +else + rel = IMG.ROI & ((POP.ROIClusterCorrThresholded& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + rel1 = ((IMG.ROI*POP.ROIClusterCorrThresholded*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +end + + +rel2 = LICK2D.ROILick2DPSTH * LICK2D.ROILick2DSelectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust) sprintf('threshold%.0f', 100*threshold_for_event) sprintf('_SVDsremoved%d',svd_removed)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s %d\n anm%d session %d, Total planes = %d\nsplits = %d, threshold =%.2f %.1f%% cells shown\n%d SVD components removed', session_epoch_label, key.session_epoch_number, key.subject_id,key.session, number_of_planes, n_clust, threshold_for_event, percent_clustered,svd_removed)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/DataJoint/fn_analysis/PLOTS_MapsRidge.m b/DataJoint/fn_analysis/PLOTS_MapsRidge.m new file mode 100644 index 0000000..d6ecf24 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsRidge.m @@ -0,0 +1,134 @@ +function PLOTS_MapsRidge(key, dir_current_fig, rel_data,tt, bounds, M, R, time_shift) +key.time_shift=time_shift; + +close all; +% clf; + +sampling_rate_2p = fetch1(IMG.FOVEpoch & key,'imaging_frame_rate','LIMIT 1'); %we assume that all epochs have the same frame rate + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.6; +panel_height1=0.6; +position_x1(1)=0.14; +position_y1(1)=0.25; + + +panel_width2=0.13; +panel_height2=0.15; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.83; +position_y2(1)=0.7; + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 15 10]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + +M=struct2table(M); +roi_number=M.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + + + + + +%% Map with regression beta +v = linspace(-bounds,bounds,20); +step =mean(diff(v)); +hist_bins1 = [-inf,-bounds:step:bounds,inf]; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +hold on; +my_colormap=redblue(numel(hist_bins1)-1); +my_colormap=flip(my_colormap); +% my_colormap=plasma(numel(time_bins1)); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end +[~,~,idx_bin] = histcounts(R,hist_bins1); + +for i_roi=1:1:size(M,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(idx_bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d s%d %s \n %s Regression beta \n t = %.2f s relative to event', key.subject_id, key.session, session_date, key.predictor_name, ((key.time_shift-1)/sampling_rate_2p) )); + +%% Colorbar +colormap(ax1,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax1,'Position',[position_x2(1), position_y2(1)+0.2, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); + + + + +%% Beta histogram +axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2]); +a=histogram(R,hist_bins1); +hist_bins1(1)=-bounds-step; +hist_bins1(end)=bounds+step; +bins_centers=hist_bins1(1:end-1)+mean(diff(hist_bins1))/2; +y =100*a.BinCounts/numel(M); +% y =100*a.BinCounts/sum(a.BinCounts); +% BinCounts=a.BinCounts; +% yyaxis left +bar(bins_centers,y); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('\nRegression Beta\n %s',key.predictor_name)); +ylabel(sprintf('Neurons (%%)')); +try +set(gca,'Xtick',[hist_bins1(1),0,hist_bins1(end)],'TickLength',[0.05,0.05],'TickDir','out'); +xlim([hist_bins1(1),hist_bins1(end)]); +catch +end +box off +ylim([0 ceil(max(y))]); +% title(sprintf('Threshold for event %.2f', key.threshold_for_flourescence_event)); + +% dir_current_fig = [dir_current_fig key.predictor_name '\']; +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end + +filename =[filename '_' sprintf('%s_threshold%d_t%d',key.predictor_name,floor(100*(key.threshold_for_flourescence_event)),tt)]; + +% filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_MapsRidgeVarianceExplained.m b/DataJoint/fn_analysis/PLOTS_MapsRidgeVarianceExplained.m new file mode 100644 index 0000000..a411dcb --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsRidgeVarianceExplained.m @@ -0,0 +1,132 @@ +function PLOTS_MapsRidgeVarianceExplained(key, dir_current_fig, rel_data) + +close all; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key & rel_data; +rel_data = rel_data & IMG.ROIGood & key; +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.6; +panel_height1=0.6; +position_x1(1)=0.14; +position_y1(1)=0.25; + + +panel_width2=0.13; +panel_height2=0.15; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.83; +position_y2(1)=0.7; + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 15 10]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + +R = fetchn(rel_data,'variance_explained','ORDER BY roi_number'); +M=fetch(rel_all ,'*'); + + +M=struct2table(M); +roi_number=M.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + + + + + +%% Map with regression beta +bounds=prctile(R,98); +v = linspace(0,bounds,20); +step =mean(diff(v)); +hist_bins1 = [0:step:bounds,inf]; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +hold on; +my_colormap=jet(numel(hist_bins1)-1); +% my_colormap=plasma(numel(time_bins1)); + +% for i_roi=1:1:size(M_all_all,1) +% % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) +% plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) +% % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +% end +[~,~,idx_bin] = histcounts(R,hist_bins1); + +for i_roi=1:1:size(M,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(idx_bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d s%d %s\n Variance explained by Ridge Regression Model', key.subject_id, key.session, session_date)); + +%% Colorbar +colormap(ax1,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax1,'Position',[position_x2(1), position_y2(1)+0.2, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); + + + + +%% Beta histogram +axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2]); +a=histogram(R,hist_bins1); +hist_bins1(end)=bounds+step; +bins_centers=hist_bins1(1:end-1)+mean(diff(hist_bins1))/2; +y =100*a.BinCounts/numel(M); +% y =100*a.BinCounts/sum(a.BinCounts); +% BinCounts=a.BinCounts; +% yyaxis left +bar(bins_centers,y); +% title(sprintf('Response time of tuned neurons')); +xlabel(sprintf('\nVariance Explained')); +ylabel(sprintf('Neurons (%%)')); + set(gca,'Xtick',[0,hist_bins1(end)],'TickLength',[0.05,0.05],'TickDir','out'); + xlim([0,hist_bins1(end)]); +box off +ylim([0 ceil(max(y))]); +% title(sprintf('Threshold for event %.2f', key.threshold_for_flourescence_event)); + +% dir_current_fig = [dir_current_fig key.predictor_name '\']; +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end + +filename =[filename]; + +% filename =[filename '_' sprintf('threshold%d',floor(100*(key.threshold_for_event)))]; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_MapsSVD.m b/DataJoint/fn_analysis/PLOTS_MapsSVD.m new file mode 100644 index 0000000..f39dbdd --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsSVD.m @@ -0,0 +1,169 @@ +function PLOTS_MapsSVD(key, dir_current_fig, W, x_all, y_all, components_2plot , rd_distance, distance_bins_centers, distance_tau) +close all; +% clf; + +if contains(key.session_epoch_type,'spont') + session_epoch_label = 'Spontaneous'; +elseif contains(key.session_epoch_type,'behav') + session_epoch_label = 'Behavior'; +end + +filename =[session_epoch_label '_PC' num2str(components_2plot)]; + +session_date = fetch1(EXP2.Session & key,'session_date'); + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.7; +panel_height1=0.7; + +position_x1(1)=0.27; +position_y1(1)=0.14; + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.35; + +position_x2(1)=0.06; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 15]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +%% Map +bins_colormap = prctile(W,[2:2:98]); +max_abs = max( [ abs(prctile(W,2)), abs(prctile(W,98)) ] ); +bins_colormap = linspace(-max_abs,max_abs,50); +bins_colormap(1) = -inf; +bins_colormap(end) = inf; + + + +[N,edges,bin]=histcounts(W,bins_colormap); +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +my_colormap=jet(numel(bins_colormap)); +hold on; + +for i_roi=1:1:size(W,1) + plot(x_all(i_roi), y_all(i_roi),'.','Color',my_colormap(bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date newline session_epoch_label ' session' ' PC = ' num2str(components_2plot) newline]); + +%% PLOT ALLEN MAP +allen2mm=1000*3.2/160; +bregma_x_mm=1000*fetchn(IMG.Bregma & key,'bregma_x_cm'); +if ~isempty(bregma_x_mm) + allenDorsalMapSM_Musalletal2019 = load('allenDorsalMapSM_Musalletal2019.mat'); + edgeOutline = allenDorsalMapSM_Musalletal2019.dorsalMaps.edgeOutline; + + bregma_x_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(2); + bregma_y_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(1); + for i_a = 1:1:numel(edgeOutline) + hold on + xxx = -1*([edgeOutline{i_a}(:,1)]-bregma_x_allen); + yyy= [edgeOutline{i_a}(:,2)]-bregma_y_allen; + + xxx=xxx*allen2mm; + yyy=yyy*allen2mm; + plot(xxx, yyy,'.','Color', [0 0 0], 'MarkerSize', 5) + % plot(0,0 ,'*') + end +end +xlim([min(x_all),3300]); +% xlim([min(x),max(x)]); +ylim([0,max(y_all)]); +set(gca,'Ytick', [0:1000:max(y_all)]) +set(gca, 'FontSize', 16) + + + +%% Colorbar +ax2=axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2/4]); +colormap(ax2,my_colormap) +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[-5,0,5],'Location','NorthOutside'); +cb1 = colorbar(ax2,'Position',[position_x2(1), position_y2(1)+0.15, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... + 'TickLabels',[],'Location','NorthOutside'); +axis off; + + + + + + +%% Histogram +axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2]); +bins_histogram = linspace(-max_abs,max_abs,50); +bins_histogram_centers=bins_histogram(1:end-1) + diff(bins_histogram)/2; +counts=histogram(W,bins_histogram); +counts = counts.Values/numel(W); +bar(bins_histogram_centers,counts,'FaceColor',[0.5 0.5 0.5],'EdgeColor',[0.5 0.5 0.5]); +hold on +plot([0,0], [0, max(counts)], '-k'); +% title(sprintf('Response time of tuned neurons')); +% ylim([0 ceil(max(y))]); +xlabel(sprintf('\nPC coefficients')); +ylabel(sprintf('Probability')); +title(sprintf('PC = %d', components_2plot),'Color',[0.5 0.5 0.5]); +set(gca,'Xtick', [-max_abs, 0, max_abs]) +box off + + + +% Spatial scale +axes('position',[position_x2(1), position_y2(2), panel_width2, panel_height2]); +semilogx([distance_bins_centers(1),distance_bins_centers(end)],[0,0],'-','Color',[0.5 0.5 0.5]); +hold on; +semilogx (distance_bins_centers, rd_distance,'-k'); +xlabel(['Lateral Distance' newline '(\mum)']); +ylabel(sprintf('Similarity Index')); +title([sprintf('Spatial scale \n = %d', distance_tau) ' (\mum)' newline]); +xlim([0, max(distance_bins_centers)]); +set(gca,'Xtick', [25, 250, 2500]) +box off + +% Spatial scale +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +semilogx([distance_bins_centers(1),distance_bins_centers(end)],[0,0],'-','Color',[0.5 0.5 0.5]); +hold on; +semilogx (distance_bins_centers, rd_distance,'-k'); +xlabel(['Lateral Distance' newline '(\mum)']); +ylabel(sprintf('Similarity Index')); +title([sprintf('Spatial scale \n = %d', distance_tau) ' (\mum)' newline]); +xlim([0, max(distance_bins_centers)]); +set(gca,'Xtick', [25, 250, 2500],'Ylim', [0 max(rd_distance)]) +box off + +dir_current_fig =[dir_current_fig '\' 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '\']; +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/DataJoint/fn_analysis/PLOTS_MapsSpontVsBeharDeltaMeanDFF.m b/DataJoint/fn_analysis/PLOTS_MapsSpontVsBeharDeltaMeanDFF.m new file mode 100644 index 0000000..956b256 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_MapsSpontVsBeharDeltaMeanDFF.m @@ -0,0 +1,114 @@ +function PLOTS_MapsSpontVsBeharDeltaMeanDFF(key, dir_current_fig, flag_contrast_index) +close all; + +rel_spont = (IMG.ROI* IMG.ROIdeltaFMean*IMG.PlaneCoordinates & key & 'session_epoch_type="spont_only"') - EXP2.SessionEpochSomatotopy; + +rel_behav = IMG.ROI* IMG.ROIdeltaFMean*IMG.PlaneCoordinates & key & 'session_epoch_type="behav_only"'; + +if rel_behav.count==0 || rel_spont.count==0 + return +end +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel_behav ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + +M2=fetch(rel_spont ,'*'); +M2=struct2table(M2); + +x1 = M.mean_dff; +x2 = M2.mean_dff; +if flag_contrast_index==0 + number_of_events=(x1 - x2); +else + number_of_events=(x1 - x2)./(x1 + x2); +end +bins = [-inf,linspace(prctile(number_of_events,5),prctile(number_of_events,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +number_of_events(isnan(number_of_events))=0; + +[~,~,bins_idx]=histcounts(number_of_events,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',8) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n Behavior-Spontaneous meandFF\n Total planes = %d ', key.subject_id, key.session, number_of_planes)); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaFiringRate.m b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaFiringRate.m new file mode 100644 index 0000000..e2c6b17 --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaFiringRate.m @@ -0,0 +1,130 @@ +function PLOTS_SomatotopyDeltaFiringRate(key) +close all; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +dir_current_fig = [dir_base '\Lick2D\brain_maps\somatotopy\delta_firing_rate\']; +dir_current_fig = [dir_current_fig sprintf('%.2f',key.threshold_for_event) '\']; + +rel = IMG.ROI* IMG.ROIdeltaFPeak*IMG.PlaneCoordinates & key; + +epoch_duration = fetchn(EXP2.SessionEpoch & key,'session_epoch_end_time') - fetchn(EXP2.SessionEpoch & key,'session_epoch_start_time'); + + +key2 = rmfield(key,'session_epoch_number'); +rel_control = IMG.ROI* IMG.ROIdeltaFPeak*IMG.PlaneCoordinates & key2 & (EXP2.SessionEpochSomatotopy & 'sensory_stimulation_area="control"'); +rel_control_duration = EXP2.SessionEpoch & key2 & (EXP2.SessionEpochSomatotopy & 'sensory_stimulation_area="control"'); +epoch_duration_control= fetchn(rel_control_duration,'session_epoch_end_time') - fetchn(rel_control_duration,'session_epoch_start_time'); + +if rel_control.count ==0 + rel_control = (IMG.ROI* IMG.ROIdeltaFPeak*IMG.PlaneCoordinates & key2) - EXP2.SessionEpochSomatotopy; + rel_control_duration = (EXP2.SessionEpoch & key2) - EXP2.SessionEpochSomatotopy; + epoch_duration_control= fetchn(rel_control_duration,'session_epoch_end_time') - fetchn(rel_control_duration,'session_epoch_start_time'); +end + +session_date = fetch1(EXP2.Session & key,'session_date'); +session_epoch_label=fetch1(EXP2.SessionEpochSomatotopy & key,'sensory_stimulation_area'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label]; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + +M2=fetch(rel_control ,'*'); +M2=struct2table(M2); + +x1 = M.number_of_events./epoch_duration; +x2 = M2.number_of_events./epoch_duration_control; +% number_of_events=(x1 - x2)./(x1 + x2); +number_of_events=(x1 - x2); + +bins = [-inf,linspace(prctile(number_of_events,5),prctile(number_of_events,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +number_of_events(isnan(number_of_events))=0; + +[~,~,bins_idx]=histcounts(number_of_events,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s\n Total planes = %d ', key.subject_id, key.session, session_epoch_label, number_of_planes)); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMean.m b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMean.m new file mode 100644 index 0000000..6c18a9c --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMean.m @@ -0,0 +1,156 @@ +function PLOTS_SomatotopyDeltaMean(key, dir_current_fig, rel_data) +close all; +rel_roi = (IMG.ROI - IMG.ROIBad) & key; + +rel = rel_roi* rel_data*IMG.PlaneCoordinates & key; + + + +key2 = rmfield(key,'session_epoch_number'); +rel_control = rel_roi* rel_data*IMG.PlaneCoordinates & key2 & (EXP2.SessionEpochSomatotopy & 'sensory_stimulation_area="control"'); + +if rel_control.count ==0 + rel_control = (rel_roi* rel_data*IMG.PlaneCoordinates & key2) - EXP2.SessionEpochSomatotopy; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); +session_epoch_label=fetch1(EXP2.SessionEpochSomatotopy & key,'sensory_stimulation_area'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label] + +%Graphics +%--------------------------------- +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 11 8]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.8; +panel_height1=0.8; + +position_x1(1)=0.15; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.15; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + +M2=fetch(rel_control ,'*'); +M2=struct2table(M2); + +x1 = M.mean_dff; +x2 = M2.mean_dff; +number_of_events=(x1 - x2)./(x1 + x2); +bins = [-inf,linspace(prctile(number_of_events,5),prctile(number_of_events,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +number_of_events(isnan(number_of_events))=0; + +[~,~,bins_idx]=histcounts(number_of_events,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + + +% aligning relative to bregma +bregma_x_mm=1000*fetchn(IMG.Bregma & key,'bregma_x_cm'); +if ~isempty(bregma_x_mm) + bregma_y_mm=1000*fetchn(IMG.Bregma & key,'bregma_y_cm'); + + x=x-[max(x) - bregma_x_mm]; % anterior posterior + y=y-min(y)+bregma_y_mm; % medial lateral + +end + + + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',5) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d %s', key.subject_id, key.session, session_epoch_label)); + + +%% PLOT ALLEN MAP +allen2mm=1000*3.2/160; +if ~isempty(bregma_x_mm) + allenDorsalMapSM_Musalletal2019 = load('allenDorsalMapSM_Musalletal2019.mat'); + edgeOutline = allenDorsalMapSM_Musalletal2019.dorsalMaps.edgeOutline; + + bregma_x_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(2); + bregma_y_allen = allenDorsalMapSM_Musalletal2019.dorsalMaps.bregmaScaled(1); + for i_a = 1:1:numel(edgeOutline) + hold on + % pgon = polyshape(-1*([edgeOutline{i_a}(:,1)]-bregma_y_allen),[edgeOutline{i_a}(:,2)]-bregma_x_allen); + xxx = -1*([edgeOutline{i_a}(:,1)]-bregma_x_allen); + yyy= [edgeOutline{i_a}(:,2)]-bregma_y_allen; + + xxx=xxx*allen2mm; + yyy=yyy*allen2mm; + plot(xxx, yyy,'.') + % plot(0,0 ,'*') + end +end +xlim([min(x),3500]); +% xlim([min(x),max(x)]); +ylim([0,max(y)]); + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMeanFlourescence.m b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMeanFlourescence.m new file mode 100644 index 0000000..71bd71c --- /dev/null +++ b/DataJoint/fn_analysis/PLOTS_SomatotopyDeltaMeanFlourescence.m @@ -0,0 +1,127 @@ +function PLOTS_SomatotopyDeltaMeanFlourescence(key) +close all; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +dir_current_fig = [dir_base '\Lick2D\brain_maps\somatotopy\delta_mean_flourescnce\']; + +rel = IMG.ROI* IMG.ROIFMean*IMG.PlaneCoordinates & key; + + + +key2 = rmfield(key,'session_epoch_number'); +rel_control = IMG.ROI* IMG.ROIFMean*IMG.PlaneCoordinates & key2 & (EXP2.SessionEpochSomatotopy & 'sensory_stimulation_area="control"'); + +if rel_control.count ==0 + rel_control = (IMG.ROI* IMG.ROIFMean*IMG.PlaneCoordinates & key2) - EXP2.SessionEpochSomatotopy; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); +session_epoch_label=fetch1(EXP2.SessionEpochSomatotopy & key,'sensory_stimulation_area'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label] + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + +M2=fetch(rel_control ,'*'); +M2=struct2table(M2); + +x1 = M.mean_f; +x2 = M2.mean_f; +number_of_events=(x1 - x2)./(x1 + x2); +bins = [-inf,linspace(prctile(number_of_events,5),prctile(number_of_events,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +number_of_events(isnan(number_of_events))=0; + +[~,~,bins_idx]=histcounts(number_of_events,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +marker_size=8; +if number_of_planes>1 + marker_size=7; +end + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',marker_size) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s\n Total planes = %d ', key.subject_id, key.session, session_epoch_label, number_of_planes)); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response.m b/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response.m new file mode 100644 index 0000000..365650d --- /dev/null +++ b/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response.m @@ -0,0 +1,252 @@ +function key =STIMANAL_fn_distance_binning_coupled_response(rel, key,DATA_all,rel_group_targets, p_val, distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials, flag_normalize_by_total,flag_divide_by_std) +rel = rel & key; +if flag_withold_trials==0 + rel = rel & ['response_p_value1<=' num2str(p_val)]; +else + rel = rel & ['response_p_value1_odd<=' num2str(p_val)]; +end + + +% DATA=fetch((rel & rel_group_targets) & 'num_of_baseline_trials_used>0' & 'num_of_target_trials_used>0','*'); % we take all the cell pairs except those within 20 micron of stimulation laterally (regardless of depth) +DATA=fetch((rel & rel_group_targets) & 'num_of_target_trials_used>0','*'); % we take all the cell pairs except those within 20 micron of stimulation laterally (regardless of depth) + +if flag_divide_by_std==0 + F_mean=[DATA.response_mean]'; + F_mean_odd=[DATA.response_mean_odd]'; + F_mean_even=[DATA.response_mean_even]'; +elseif flag_divide_by_std==1 + F_mean=[DATA.response_mean_over_std]'; + F_mean_odd=[DATA.response_mean_over_std_odd]'; % to fix it later + F_mean_even=[DATA.response_mean_over_std_even]'; % to fix it later +end + +if flag_withold_trials==0 + ix_excit= F_mean>0; + ix_inhbit= F_mean<0; + F_data = F_mean; +else + ix_excit= F_mean_odd>0; + ix_inhbit= F_mean_odd<0; + F_data = F_mean_even; +end + +distance_lateral=[DATA.response_distance_lateral_um]'; +distance_axial=[DATA.response_distance_axial_um]'; + +distance_axial_bins = unique(distance_axial); +if numel(distance_axial_bins)>0 + key.is_volumetric=true; +else + key.is_volumetric=false; +end + + + + +distance_lateral_all=[DATA_all.response_distance_lateral_um]'; +distance_axial_all=[DATA_all.response_distance_axial_um]'; + + +%% Lateral binning +for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = distance_lateral>=distance_lateral_bins(i_l) & distance_lateral=distance_lateral_bins(i_l) & distance_lateral_all0 + key.response_lateral(i_l) =single(nansum(F_data(ix_l))/normalize_all); + key.response_lateral_absolute(i_l) = single(nansum(abs(F_data(ix_l)))/normalize_all); + else + key.response_lateral(i_l) =NaN; + key.response_lateral_absolute(i_l) = NaN; + end + if sum(ix_l & ix_excit)>0 + key.response_lateral_excitation(i_l) =single(nansum(F_data(ix_l & ix_excit))/normalize_excitatory); + else + key.response_lateral_excitation(i_l) =NaN; + end + if sum(ix_l & ix_inhbit)>0 + key.response_lateral_inhibition(i_l) =single(nansum(F_data(ix_l & ix_inhbit))/normalize_inhibitory); + else + key.response_lateral_inhibition(i_l) =NaN; + end + + % key.counts_lateral(i_l)=single(sum(ix_l)); + % key.counts_lateral_excitation(i_l) =single(sum(ix_l & ix_excit)); + % key.counts_lateral_inhibition(i_l) =single(sum(ix_l & ix_inhbit)); + + %% 2D lateral X axial binning + for i_a = 1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + + if flag_normalize_by_total==1 + normalize_all=sum(ix_l_all & ix_a_all); + normalize_excitatory=sum(ix_l_all & ix_a_all); + normalize_inhibitory=sum(ix_l_all & ix_a_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_l & ix_a); + normalize_excitatory=sum(ix_l & ix_a & ix_excit); + normalize_inhibitory=sum(ix_l & ix_a & ix_inhbit); + end + + if sum(ix_l & ix_a)>0 + key.response_2d(i_a,i_l) =single(nansum(F_data(ix_l & ix_a))/normalize_all); + key.response_2d_absolute(i_a,i_l) = single(nansum(abs(F_data(ix_l & ix_a)))/normalize_all); + else + key.response_2d(i_a,i_l) =NaN; + key.response_2d_absolute(i_a,i_l) = NaN; + end + if sum(ix_l & ix_a & ix_excit)>0 + key.response_2d_excitation(i_a,i_l) =single(nansum(F_data(ix_l & ix_a & ix_excit))/normalize_excitatory); + else + key.response_2d_excitation(i_a,i_l) =NaN; + end + if sum(ix_l & ix_a & ix_inhbit)>0 + key.response_2d_inhibition(i_a,i_l) =single(nansum(F_data(ix_l & ix_a & ix_inhbit))/normalize_inhibitory); + else + key.response_2d_inhibition(i_a,i_l) =NaN; + end + + key.counts_2d(i_a,i_l)=single(sum(ix_l & ix_a)); + key.counts_2d_excitation(i_a,i_l) =single(sum(ix_l & ix_a & ix_excit)); + key.counts_2d_inhibition(i_a,i_l) =single(sum(ix_l & ix_a & ix_inhbit)); + + end +end + +%% Axial binning +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + + if flag_normalize_by_total==1 + normalize_all=sum(ix_a_all); + normalize_excitatory=sum(ix_a_all); + normalize_inhibitory=sum(ix_a_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_a); + normalize_excitatory=sum(ix_a & ix_excit); + normalize_inhibitory=sum(ix_a & ix_inhbit); + end + + + if sum(ix_a)>0 + key.response_axial(i_a) =single(nansum(F_data(ix_a))/normalize_all); + key.response_axial_absolute(i_a) = single(nansum(abs(F_data(ix_a)))/normalize_all); + else + key.response_axial(i_a) =NaN; + key.response_axial_absolute(i_a) = NaN; + end + if sum(ix_a & ix_excit)>0 + key.response_axial_excitation(i_a) =single(nansum(F_data(ix_a & ix_excit))/normalize_excitatory); + else + key.response_axial_excitation(i_a) =NaN; + end + if sum(ix_a & ix_inhbit)>0 + key.response_axial_inhibition(i_a) =single(nansum(F_data(ix_a & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_inhibition(i_a) =NaN; + end + % key.counts_axial(i_a)=single(sum(ix_a)); + % key.counts_axial_excitation(i_a) =single(sum(ix_a & ix_excit)); + % key.counts_axial_inhibition(i_a) =single(sum(ix_a & ix_inhbit)); +end + + +%% Axial binning within a column +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + ix_column_in = distance_lateral>=minimal_distance & distance_lateral<=column_radius(1) & ix_a; + ix_column_in_all = distance_lateral_all>=minimal_distance & distance_lateral_all<=column_radius(1) & ix_a_all; + + if flag_normalize_by_total==1 + normalize_all=sum(ix_column_in_all); + normalize_excitatory=sum(ix_column_in_all); + normalize_inhibitory=sum(ix_column_in_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_column_in); + normalize_excitatory=sum(ix_column_in & ix_excit); + normalize_inhibitory=sum(ix_column_in & ix_inhbit); + end + + + if sum(ix_column_in)>0 + key.response_axial_in_column(i_a) =single(nansum(F_data(ix_column_in))/normalize_all); + key.response_axial_in_column_absolute(i_a) = single(nansum(abs(F_data(ix_column_in)))/normalize_all); + else + key.response_axial_in_column(i_a) =NaN; + key.response_axial_in_column_absolute(i_a) = NaN; + end + if sum(ix_column_in & ix_excit)>0 + key.response_axial_in_column_excitation(i_a) =single(nansum(F_data(ix_column_in & ix_excit))/normalize_excitatory); + else + key.response_axial_in_column_excitation(i_a) =NaN; + end + if sum(ix_column_in & ix_inhbit)>0 + key.response_axial_in_column_inhibition(i_a) =single(nansum(F_data(ix_column_in & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_in_column_inhibition(i_a) =NaN; + end +end + + + +%% Axial binning outside of a column +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + ix_column_out = distance_lateral>column_radius(1) & distance_lateral<=column_radius(2) & ix_a; + ix_column_out_all = distance_lateral_all>column_radius(1) & distance_lateral_all<=column_radius(2) & ix_a_all; + + if flag_normalize_by_total==1 + normalize_all=sum(ix_column_out_all); + normalize_excitatory=sum(ix_column_out_all); + normalize_inhibitory=sum(ix_column_out_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_column_out); + normalize_excitatory=sum(ix_column_out & ix_excit); + normalize_inhibitory=sum(ix_column_out & ix_inhbit); + end + + if sum(ix_column_out)>0 + key.response_axial_out_column(i_a) =single(nansum(F_data(ix_column_out))/normalize_all); + key.response_axial_out_column_absolute(i_a) = single(nansum(abs(F_data(ix_column_out)))/normalize_all); + else + key.response_axial_out_column(i_a) =NaN; + key.response_axial_out_column_absolute(i_a) = NaN; + end + if sum(ix_column_out & ix_excit)>0 + key.response_axial_out_column_excitation(i_a) =single(nansum(F_data(ix_column_out & ix_excit))/normalize_excitatory); + else + key.response_axial_out_column_excitation(i_a) =NaN; + end + if sum(ix_column_out & ix_inhbit)>0 + key.response_axial_out_column_inhibition(i_a) =single(nansum(F_data(ix_column_out & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_out_column_inhibition(i_a) =NaN; + end +end + +% fff=fetch1(IMG.PhotostimDATfile & key,'dat_file') +key.response_p_val=p_val; +key.num_pairs = numel(F_data); +key.distance_lateral_bins = distance_lateral_bins; +key.distance_axial_bins = distance_axial_bins; +key.num_targets=rel_group_targets.count; + + + + diff --git a/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response3.m b/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response3.m new file mode 100644 index 0000000..992e7c9 --- /dev/null +++ b/DataJoint/fn_analysis/STIMANAL_fn_distance_binning_coupled_response3.m @@ -0,0 +1,271 @@ +function key =STIMANAL_fn_distance_binning_coupled_response3(rel, key,DATA_all,rel_group_targets, p_val, distance_lateral_bins, column_radius,minimal_distance, flag_withold_trials, flag_normalize_by_total,flag_divide_by_std, flag_prominent) +rel = rel & key; +if flag_withold_trials==0 + rel = rel & ['response_p_value1<=' num2str(p_val)]; +else + rel = rel & ['response_p_value1_odd<=' num2str(p_val)]; +end + + +DATA=fetch((rel & rel_group_targets) ,'*'); % we take all the cell pairs except those within 20 micron of stimulation laterally (regardless of depth) + +F_mean_odd=[DATA.response_mean_odd]'; +if flag_prominent==1 + factor=0.5; + ix_prominent = (([DATA.response_max_odd] > factor*[DATA.non_response_max_odd])' & F_mean_odd>0) | (([DATA.response_min_odd] < factor*[DATA.non_response_min_odd])' & F_mean_odd<0); + DATA=DATA(ix_prominent); +elseif flag_prominent==2 + factor=0.75; + ix_prominent = (([DATA.response_max_odd] > factor*[DATA.non_response_max_odd])' & F_mean_odd>0) | (([DATA.response_min_odd] < factor*[DATA.non_response_min_odd])' & F_mean_odd<0); + DATA=DATA(ix_prominent); +elseif flag_prominent==3 + factor=1; + ix_prominent = (([DATA.response_max_odd] > factor*[DATA.non_response_max_odd])' & F_mean_odd>0) | (([DATA.response_min_odd] < factor*[DATA.non_response_min_odd])' & F_mean_odd<0); + DATA=DATA(ix_prominent); +end + + + +% if flag_divide_by_std==0 +F_mean=[DATA.response_mean]'; +F_mean_odd=[DATA.response_mean_odd]'; +F_mean_even=[DATA.response_mean_even]'; +% elseif flag_divide_by_std==1 +% F_mean=[DATA.response_mean_over_std]'; +% F_mean_odd=[DATA.response_mean_over_std_odd]'; % to fix it later +% F_mean_even=[DATA.response_mean_over_std_even]'; % to fix it later +% end + +if flag_withold_trials==0 + ix_excit= F_mean>0; + ix_inhbit= F_mean<0; + F_data = F_mean; +else + ix_excit= F_mean_odd>0; + ix_inhbit= F_mean_odd<0; + + F_data = F_mean_even; +end + + + +distance_lateral=[DATA.response_distance_lateral_um]'; +distance_axial=[DATA.response_distance_axial_um]'; + +distance_axial_bins = unique(distance_axial); +if numel(distance_axial_bins)>0 + key.is_volumetric=true; +else + key.is_volumetric=false; +end + + + + +distance_lateral_all=[DATA_all.response_distance_lateral_um]'; +distance_axial_all=[DATA_all.response_distance_axial_um]'; + + +%% Lateral binning +for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = distance_lateral>=distance_lateral_bins(i_l) & distance_lateral=distance_lateral_bins(i_l) & distance_lateral_all0 + key.response_lateral(i_l) =single(nansum(F_data(ix_l))/normalize_all); + key.response_lateral_absolute(i_l) = single(nansum(abs(F_data(ix_l)))/normalize_all); + else + key.response_lateral(i_l) =NaN; + key.response_lateral_absolute(i_l) = NaN; + end + if sum(ix_l & ix_excit)>0 + key.response_lateral_excitation(i_l) =single(nansum(F_data(ix_l & ix_excit))/normalize_excitatory); + else + key.response_lateral_excitation(i_l) =NaN; + end + if sum(ix_l & ix_inhbit)>0 + key.response_lateral_inhibition(i_l) =single(nansum(F_data(ix_l & ix_inhbit))/normalize_inhibitory); + else + key.response_lateral_inhibition(i_l) =NaN; + end + + % key.counts_lateral(i_l)=single(sum(ix_l)); + % key.counts_lateral_excitation(i_l) =single(sum(ix_l & ix_excit)); + % key.counts_lateral_inhibition(i_l) =single(sum(ix_l & ix_inhbit)); + + %% 2D lateral X axial binning + for i_a = 1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + + if flag_normalize_by_total==1 + normalize_all=sum(ix_l_all & ix_a_all); + normalize_excitatory=sum(ix_l_all & ix_a_all); + normalize_inhibitory=sum(ix_l_all & ix_a_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_l & ix_a); + normalize_excitatory=sum(ix_l & ix_a & ix_excit); + normalize_inhibitory=sum(ix_l & ix_a & ix_inhbit); + end + + if sum(ix_l & ix_a)>0 + key.response_2d(i_a,i_l) =single(nansum(F_data(ix_l & ix_a))/normalize_all); + key.response_2d_absolute(i_a,i_l) = single(nansum(abs(F_data(ix_l & ix_a)))/normalize_all); + else + key.response_2d(i_a,i_l) =NaN; + key.response_2d_absolute(i_a,i_l) = NaN; + end + if sum(ix_l & ix_a & ix_excit)>0 + key.response_2d_excitation(i_a,i_l) =single(nansum(F_data(ix_l & ix_a & ix_excit))/normalize_excitatory); + else + key.response_2d_excitation(i_a,i_l) =NaN; + end + if sum(ix_l & ix_a & ix_inhbit)>0 + key.response_2d_inhibition(i_a,i_l) =single(nansum(F_data(ix_l & ix_a & ix_inhbit))/normalize_inhibitory); + else + key.response_2d_inhibition(i_a,i_l) =NaN; + end + + key.counts_2d(i_a,i_l)=single(sum(ix_l & ix_a)); + key.counts_2d_excitation(i_a,i_l) =single(sum(ix_l & ix_a & ix_excit)); + key.counts_2d_inhibition(i_a,i_l) =single(sum(ix_l & ix_a & ix_inhbit)); + + end +end + +%% Axial binning +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + + if flag_normalize_by_total==1 + normalize_all=sum(ix_a_all); + normalize_excitatory=sum(ix_a_all); + normalize_inhibitory=sum(ix_a_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_a); + normalize_excitatory=sum(ix_a & ix_excit); + normalize_inhibitory=sum(ix_a & ix_inhbit); + end + + + if sum(ix_a)>0 + key.response_axial(i_a) =single(nansum(F_data(ix_a))/normalize_all); + key.response_axial_absolute(i_a) = single(nansum(abs(F_data(ix_a)))/normalize_all); + else + key.response_axial(i_a) =NaN; + key.response_axial_absolute(i_a) = NaN; + end + if sum(ix_a & ix_excit)>0 + key.response_axial_excitation(i_a) =single(nansum(F_data(ix_a & ix_excit))/normalize_excitatory); + else + key.response_axial_excitation(i_a) =NaN; + end + if sum(ix_a & ix_inhbit)>0 + key.response_axial_inhibition(i_a) =single(nansum(F_data(ix_a & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_inhibition(i_a) =NaN; + end + % key.counts_axial(i_a)=single(sum(ix_a)); + % key.counts_axial_excitation(i_a) =single(sum(ix_a & ix_excit)); + % key.counts_axial_inhibition(i_a) =single(sum(ix_a & ix_inhbit)); +end + + +%% Axial binning within a column +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + ix_column_in = distance_lateral>=minimal_distance & distance_lateral<=column_radius(1) & ix_a; + ix_column_in_all = distance_lateral_all>=minimal_distance & distance_lateral_all<=column_radius(1) & ix_a_all; + + if flag_normalize_by_total==1 + normalize_all=sum(ix_column_in_all); + normalize_excitatory=sum(ix_column_in_all); + normalize_inhibitory=sum(ix_column_in_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_column_in); + normalize_excitatory=sum(ix_column_in & ix_excit); + normalize_inhibitory=sum(ix_column_in & ix_inhbit); + end + + + if sum(ix_column_in)>0 + key.response_axial_in_column(i_a) =single(nansum(F_data(ix_column_in))/normalize_all); + key.response_axial_in_column_absolute(i_a) = single(nansum(abs(F_data(ix_column_in)))/normalize_all); + else + key.response_axial_in_column(i_a) =NaN; + key.response_axial_in_column_absolute(i_a) = NaN; + end + if sum(ix_column_in & ix_excit)>0 + key.response_axial_in_column_excitation(i_a) =single(nansum(F_data(ix_column_in & ix_excit))/normalize_excitatory); + else + key.response_axial_in_column_excitation(i_a) =NaN; + end + if sum(ix_column_in & ix_inhbit)>0 + key.response_axial_in_column_inhibition(i_a) =single(nansum(F_data(ix_column_in & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_in_column_inhibition(i_a) =NaN; + end +end + + + +%% Axial binning outside of a column +for i_a=1:1:numel(distance_axial_bins) + ix_a = distance_axial==distance_axial_bins(i_a); + ix_a_all = distance_axial_all==distance_axial_bins(i_a); + ix_column_out = distance_lateral>column_radius(1) & distance_lateral<=column_radius(2) & ix_a; + ix_column_out_all = distance_lateral_all>column_radius(1) & distance_lateral_all<=column_radius(2) & ix_a_all; + + if flag_normalize_by_total==1 + normalize_all=sum(ix_column_out_all); + normalize_excitatory=sum(ix_column_out_all); + normalize_inhibitory=sum(ix_column_out_all); + elseif flag_normalize_by_total==0 + normalize_all=sum(ix_column_out); + normalize_excitatory=sum(ix_column_out & ix_excit); + normalize_inhibitory=sum(ix_column_out & ix_inhbit); + end + + if sum(ix_column_out)>0 + key.response_axial_out_column(i_a) =single(nansum(F_data(ix_column_out))/normalize_all); + key.response_axial_out_column_absolute(i_a) = single(nansum(abs(F_data(ix_column_out)))/normalize_all); + else + key.response_axial_out_column(i_a) =NaN; + key.response_axial_out_column_absolute(i_a) = NaN; + end + if sum(ix_column_out & ix_excit)>0 + key.response_axial_out_column_excitation(i_a) =single(nansum(F_data(ix_column_out & ix_excit))/normalize_excitatory); + else + key.response_axial_out_column_excitation(i_a) =NaN; + end + if sum(ix_column_out & ix_inhbit)>0 + key.response_axial_out_column_inhibition(i_a) =single(nansum(F_data(ix_column_out & ix_inhbit))/normalize_inhibitory); + else + key.response_axial_out_column_inhibition(i_a) =NaN; + end +end + +% fff=fetch1(IMG.PhotostimDATfile & key,'dat_file') +key.response_p_val=p_val; +key.num_pairs = numel(F_data); +key.distance_lateral_bins = distance_lateral_bins; +key.distance_axial_bins = distance_axial_bins; +key.num_targets=rel_group_targets.count; + + + + diff --git a/DataJoint/run_with_delay.m b/DataJoint/run_with_delay.m new file mode 100644 index 0000000..caf000d --- /dev/null +++ b/DataJoint/run_with_delay.m @@ -0,0 +1,9 @@ +for i=1:1:10000 + try + DJconnect + populate(POP.ROISVDDistanceScaleSpikes) + catch + pause(60) + end + +end \ No newline at end of file diff --git a/Untitled.m b/Untitled.m new file mode 100644 index 0000000..50e12ce --- /dev/null +++ b/Untitled.m @@ -0,0 +1,61 @@ + + +rel_group = IMG.PhotostimGroup & STIM.ROIResponseDirect & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') & IMG.Volumetric; +group = fetch(rel_group); + +for i = 1:1: rel_group.count + rel_group_current = group(i); + response(i) = fetch1(STIM.ROIResponseDirect & rel_group_current,'response_mean'); + + rel_current = (STIM.ROIInfluence & rel_group_current) & 'num_svd_components_removed' & 'response_p_value1<=0.05' & 'response_mean>0' & 'response_distance_lateral_um>25'; + out_degree(i)= rel_current.count; + + rel_current_near = (STIM.ROIInfluence & rel_group_current) & 'num_svd_components_removed' & 'response_p_value1<=0.05' & 'response_mean>0' & 'response_distance_lateral_um>25' & 'response_distance_lateral_um<=100'; + out_degree_near(i)= rel_current_near.count; + +end + +histogram(out_degree) +histogram(out_degree_near) +histogram(response) + +plot(response, out_degree_near,'.') + +network_k=out_degree_near; + + + + +figure +subplot(2,2,1) +hold on +hist_bins = linspace(0,max(network_k),15); +[k_prob]=histcounts(network_k,hist_bins); +k_prob=k_prob./length(network_k); +plot(hist_bins_centers,k_prob,'.-b') + +poisson_k = poissrnd(mean(network_k),10*numel(network_k),1); +% hist_bins_poisson = linspace(0,max(poisson_k),30); +% hist_bins_poisson_centers = hist_bins_poisson(1:end-1) + mean(diff(hist_bins_poisson)); +[poisson_prob]=histcounts(poisson_k,hist_bins); +poisson_prob=poisson_prob./(10*numel(network_k)); +plot(hist_bins_centers,poisson_prob,'-' ,'Color',[0.5 0.5 0.5]) + +xlabel('Network degree of photostimulated neurons') +ylabel('Probability') + + +subplot(2,2,2) +hold on +loglog(log10(hist_bins_centers),log10(k_prob),'.-b'); +% plot(log10(hist_bins_centers),log10(k_prob)) + +%poisson +loglog(log10(hist_bins_centers),log10(poisson_prob),'-','Color',[0.5 0.5 0.5]); + +xlabel('Network degree of photostimulated neurons') +ylabel('Probability') +text(0,0,'Observed','Color',[0 0 1]); +text(0,-0.25,'Random Network (Erdos-Renye)','Color',[0.5 0.5 0.5]); + +% set(gca,'FontSize',12); \ No newline at end of file diff --git a/analysis/Figure_clustering_based_on_correlations.m b/analysis/Figure_clustering_based_on_correlations.m new file mode 100644 index 0000000..c19e0f4 --- /dev/null +++ b/analysis/Figure_clustering_based_on_correlations.m @@ -0,0 +1,191 @@ +function Figure_clustering_based_on_correlations() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_ensemble_extraction_avg_maps\AF09_anm437545\']; +set(gcf,'color',[1 1 1]); + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.05; +panel_height=0.065; +horizontal_distance=0.075; +vertical_distance=0.31; + +position_x(1)=0.13; + +position_y(1)=0.8; +position_y(2)=position_y(1)-vertical_distance; + + +columns2plot=12; +min_cluster_percent=2.5; + + + +% % fetch Param +Param = struct2table(fetch (ANL.Parameters,'*')); +% time = Param.parameter_value{(strcmp('psth_t_vector',Param.parameter_name))}; +% psth_time_bin = Param.parameter_value{(strcmp('psth_time_bin',Param.parameter_name))}; +% smooth_time = Param.parameter_value{(strcmp('smooth_time_cell_psth_for_clustering',Param.parameter_name))}; +% smooth_bins=ceil(smooth_time/psth_time_bin); + + +for i_session=1:1:12 + key.session = i_session; + + rel_cluster=ANLI.ROICluster & key; + + rel_PSTH=ANLI.FPSTHaverage & rel_cluster; + + %hit + L.PSTH{1} =cell2mat(fetchn(rel_PSTH & 'trial_type_name="l"' & 'outcome="hit"', 'psth_avg', 'ORDER BY roi_number')); + R.PSTH{1} =cell2mat(fetchn(rel_PSTH & 'trial_type_name="r"' & 'outcome="hit"', 'psth_avg', 'ORDER BY roi_number')); + + %miss + L.PSTH{2} =cell2mat(fetchn(rel_PSTH & 'trial_type_name="l"' & 'outcome="miss"', 'psth_avg', 'ORDER BY roi_number')); + R.PSTH{2} =cell2mat(fetchn(rel_PSTH & 'trial_type_name="r"' & 'outcome="miss"', 'psth_avg', 'ORDER BY roi_number')); + + % L.num_trials{1} = (fetchn(rel & 'trial_type_name="l"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % R.num_trials{1} = (fetchn(rel & 'trial_type_name="r"', 'num_trials_averaged', 'ORDER BY unit_uid')); + + peak_LR_hit_units = nanmax([L.PSTH{1},R.PSTH{1},L.PSTH{2},R.PSTH{2},],[],2); + + + cl_id = fetchn(rel_cluster, 'roi_cluster_id', 'ORDER BY roi_number'); + + typical_psth_timestamps =fetch1(ANLI.FPSTHMatrix & rel_PSTH , 'typical_psth_timestamps'); + idx_time2plot = (typical_psth_timestamps>= -3 & (typical_psth_timestamps<=2)); + + time2plot = typical_psth_timestamps(idx_time2plot); + + + + % rel_unit=(EPHYS.Unit); + % rel_cluster = (ANL.UnitHierarCluster3 * rel_unit.proj('unit_quality->temp','unit_uid')) & k; + % key_cluster = fetch(rel_cluster); + % UnitCluster = struct2table(fetch(rel_cluster,'*', 'ORDER BY unit_uid')); + % key_cluster = rmfield(key_cluster,{'hemisphere','brain_area','cell_type','unit_quality','training_type','heirar_cluster_time_st','heirar_cluster_time_end'}); + % % idx_time2plot = (time>= UnitCluster.heirar_cluster_time_st(1)) & (time<=UnitCluster.heirar_cluster_time_end(1)); + % + % time2plot = time(idx_time2plot); + % %fetch Unit + % Unit = struct2table(fetch((EPHYS.Unit * EPHYS.UnitPosition * EXP.SessionTraining * EXP.SessionID * ANL.IncludeSession- ANL.ExcludeSession) & key_cluster & ANL.IncludeUnit ,'*', 'ORDER BY unit_uid')); + % session_uid = unique(Unit.session_uid); + % + % L.labels = {'hit','miss','ignore'}; + % R.labels = {'hit','miss','ignore'}; + % + % %% Hit + % % fetch and smooth PSTH + % rel= ((ANL.PSTHAdaptiveAverage * EPHYS.Unit) & key_cluster & ANL.IncludeUnit * ANL.IncludeSession- ANL.ExcludeSession) & 'outcome="hit"' ; + % L.PSTH{1} = movmean(cell2mat(fetchn(rel & 'trial_type_name="l"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % R.PSTH{1} = movmean(cell2mat(fetchn(rel & 'trial_type_name="r"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % + % L.num_trials{1} = (fetchn(rel & 'trial_type_name="l"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % R.num_trials{1} = (fetchn(rel & 'trial_type_name="r"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % + % peak_LR_hit_units = nanmax([L.PSTH{1},R.PSTH{1}],[],2); + % + % %% Miss + % % fetch and smooth PSTH + % rel= ((ANL.PSTHAverageLR * EPHYS.Unit) & key_cluster & ANL.IncludeUnit * ANL.IncludeSession- ANL.ExcludeSession) & 'outcome="miss"'; + % L.PSTH{2} = movmean(cell2mat(fetchn(rel & 'trial_type_name="l"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % R.PSTH{2} = movmean(cell2mat(fetchn(rel & 'trial_type_name="r"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % L.num_trials{2} = (fetchn(rel & 'trial_type_name="l"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % R.num_trials{2} = (fetchn(rel & 'trial_type_name="r"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % + % + % % %% Ignore + % % % fetch and smooth PSTH + % % rel= ((ANL.PSTHAdaptiveAverage * EPHYS.Unit) & key_cluster) & 'outcome="ignore"'; + % % L.PSTH{3} = movmean(cell2mat(fetchn(rel & 'trial_type_name="l"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % % R.PSTH{3} = movmean(cell2mat(fetchn(rel & 'trial_type_name="r"', 'psth_avg', 'ORDER BY unit_uid')) ,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + % % L.num_trials{3} = (fetchn(rel & 'trial_type_name="l"', 'num_trials_averaged', 'ORDER BY unit_uid')); + % % R.num_trials{3} = (fetchn(rel & 'trial_type_name="r"', 'num_trials_averaged', 'ORDER BY unit_uid')); + + + + % Select cluster to plot + % cl_id=UnitCluster.heirar_cluster_id; + cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/numel(cl_id); + clusters_2plot = find(cluster_percent>=min_cluster_percent); + [~,cluster_order] = sort (cluster_percent(clusters_2plot),'descend'); + cluster_order=cluster_order(1:min([numel(clusters_2plot),columns2plot*2])); + + axes('position',[position_x(1), 0.93, panel_width, panel_height]); + percent_of_all = sum(cluster_percent(clusters_2plot)); + % text( 0,0 , sprintf('%s %s side Training: %s CellQuality: %s Cell-type: %s \n \n Includes: %d units, %.1f %% in these clusters:' ,... + % key.brain_area, key.hemisphere, key.training_type, key.unit_quality, key.cell_type, size(UnitCluster,1), percent_of_all),'HorizontalAlignment','Left','FontSize', 10); + axis off; + box off; + + plot_counter=0; + for ii = cluster_order + i = clusters_2plot(ii); + idx2plot = find(cl_id==i); + + + axes('position',[position_x(1)+horizontal_distance*(mod(plot_counter,columns2plot)), position_y(1)+0.02, panel_width, panel_height*0.6]); + title(sprintf('Cluster %d \n %.1f %% cells\n',plot_counter+1, cluster_percent(i) ),'FontSize',8); + axis off; box off; + xl=([0 3]); + xlim(xl); + yl=[0 1]; + ylim(yl); + if mod(plot_counter,columns2plot)==0 + text(xl(1)-diff(xl)*0.75, yl(1)+diff(yl)*1.9, 'a', ... + 'fontsize', 12, 'fontname', 'helvetica', 'fontweight', 'bold'); + % text(xl(1)-diff(xl)*1.05, yl(1)-diff(yl)*0.9, 'b', ... + % 'fontsize', 12, 'fontname', 'helvetica', 'fontweight', 'bold'); + % text(xl(1)+diff(xl)*0.7, yl(1)+diff(yl)*1.1, 'Delay', ... + % 'fontsize', 6, 'fontname', 'helvetica','HorizontalAlignment','Center'); + end + + %% Cluster Pure L vs Pure R PSTH + axes('position',[position_x(1)+horizontal_distance*(mod(plot_counter,columns2plot)), position_y(floor(plot_counter/columns2plot)+1), panel_width, panel_height]); + flag_xlabel=0; + ylab='Correct'; num=1; + legend_flag=1; + [peak_FR] = fn_plotCluster (plot_counter, columns2plot, Param,time2plot, idx2plot, idx_time2plot, L, R, num, [], flag_xlabel, peak_LR_hit_units,ylab, legend_flag); + + axes('position',[position_x(1)+horizontal_distance*(mod(plot_counter,columns2plot)), position_y(floor(plot_counter/columns2plot)+1)-0.1, panel_width, panel_height]); + flag_xlabel=1; + ylab='Error'; num=2; + legend_flag=1; + [~] = fn_plotCluster (plot_counter, columns2plot, Param,time2plot, idx2plot, idx_time2plot, L, R, num, [], flag_xlabel, peak_LR_hit_units,ylab, legend_flag); + + % axes('position',[position_x(1)+horizontal_distance*(mod(plot_counter,columns2plot)), position_y(floor(plot_counter/columns2plot)+1)-0.2, panel_width, panel_height]); + % flag_xlabel=1; + % ylab='No lick'; num=3; + % legend_flag=1; + % [~] = fn_plotCluster (plot_counter, columns2plot, Param,time2plot, idx2plot, idx_time2plot, L, R, num, peak_FR,flag_xlabel, peak_LR_hit_units,ylab, legend_flag); + + plot_counter = plot_counter +1; + + end + + + + + + + filename = ['clusters_session' num2str(key.session)]; + + + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r300']); +% eval(['print ', figure_name_out, ' -painters -dpdf -cmyk -r200']); + clf +end + +end \ No newline at end of file diff --git a/analysis/WaterCue/fn_plot_imaging_psthWC.m b/analysis/WaterCue/fn_plot_imaging_psthWC.m new file mode 100644 index 0000000..9b78394 --- /dev/null +++ b/analysis/WaterCue/fn_plot_imaging_psthWC.m @@ -0,0 +1,111 @@ +function fn_plot_imaging_psthWC () +close all + + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\WaterCue\PSTH\']; + +% key.subject_id = 445980; +% key.session =2; + +key.subject_id = 447990; +key.session =7; + +% +% key.subject_id = 447991; +% key.session =8; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\' session_date '\']; + +roi_list=fetchn(IMG.ROI & IMG.ROIGood & key,'roi_number', 'ORDER BY roi_number'); + + +panel_width1=0.2; +panel_height1=0.2; +horizontal_distance1=0.8; +vertical_distance1=0.35; + + +position_x1(1)=0.06; + +position_y1(1)=0.6; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; + + + +for iROI = 1:numel(roi_list) %15,49,34,25 + + + position_x1(end+1)=position_x1(end)+horizontal_distance1; + + key.roi_number=roi_list(iROI); + + F=fetch(WC.FPSTHaverage & key,'*'); + + + + time_sample_start = F(1).time_sample_start; + time_sample_end = F(1).time_sample_end; + + % Signif=fetch(ANLI.TaskSignifROI & key,'*', 'ORDER BY task_signif_name_uid'); + + % Hit + axes('position',[position_x1(1) position_y1(1) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + idx2=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'r')); + shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + % title(sprintf('Session %d\nCorrect\n p S=%.7f \nD=%.7f\n M=%.7f \nR=%.7f',multiple_session_list(i_s), Signif(1).task_signif_pval, Signif(2).task_signif_pval, Signif(3).task_signif_pval, Signif(4).task_signif_pval)); + ylabel('Spikes/s'); + title(sprintf('ROI %d\nSession %d\nCorrect',roi_list(iROI),key.session)); + xlim([-3,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + % Miss + axes('position',[position_x1(1) position_y1(2) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + idx2=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'r')); + shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + % title(sprintf('Session %d\nCorrect\n p S=%.7f \nD=%.7f\n M=%.7f \nR=%.7f',multiple_session_list(i_s), Signif(1).task_signif_pval, Signif(2).task_signif_pval, Signif(3).task_signif_pval, Signif(4).task_signif_pval)); + ylabel('Spikes/s'); + title(sprintf('Error',roi_list(iROI),key.session)); + xlim([-3,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + + + + dir_save_figure = [dir_current_fig]; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['ROI_' num2str(roi_list(iROI))]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; + +end diff --git a/analysis/correlations/PLOT_CorrPairwiseAxialDistance.m b/analysis/correlations/PLOT_CorrPairwiseAxialDistance.m new file mode 100644 index 0000000..703095c --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseAxialDistance.m @@ -0,0 +1,140 @@ +function PLOT_CorrPairwiseAxialDistance() +close all; +figure +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +% key.subject_id=464725; +rel_data = POP.CorrPairwiseDistanceSVDVolumetric; +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +threshold_for_event_vector = unique([fetchn(rel_data, 'threshold_for_event')]); +threshold_for_event_vector=threshold_for_event_vector(1:1:end-1); +column_radius_vector = fetch1(rel_data,'column_radius_vector','LIMIT 1'); + + + + + + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=200 +% min_x=3; max_x=8; + +key.session_epoch_type= 'behav_only'; +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_th=1:1:numel(threshold_for_event_vector) + key.threshold_for_event = threshold_for_event_vector(i_th); + D=fetch(rel_data&key,'*'); + +x=D(2).axial_distance_bins(1:end-1); +mm=D(2).column_distance_corr_all; +mm(1,1)=NaN; +imagesc(x,column_radius_vector,mm) +axis equal +% subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+1)) +% hold on +% if i_th==1 && i_c==1 +% plot([x(1),x(end)],[0,0],'-k'); +% end +% y = cell2mat({D.distance_corr_all}'); +% ymean=nanmean(y,1); +% ystem=nanstd(y,1)/sqrt(size(y,1)); +% shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) +% % ylim([0,max(ymean+ystem)]) +% ylabel(sprintf('Pairwise corr.\n (all)')); +% xlim([min_x max_x]); +% xlabel('Lateral Distance (\mum)'); +% % if i_th==1 +% % title(sprintf('anm%d session %d %s\n%s %d \n threshold =%.2f rois=%d', key.subject_id,key.session,session_date,session_epoch_label, key.session_epoch_number, threshold_for_event_vector(i_th), key.num_of_rois)); +% % else +% % title(sprintf('Threshold for event = %.2f rois=%d',threshold_for_event_vector(i_th), key.num_of_rois)); +% % end +% +% subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) +% mmm=zeros(size(D(1).corr_histogram_per_distance)); +% for i=1:1:numel(D) +% mmm=[mmm + D(i).corr_histogram_per_distance./max(D(i).corr_histogram_per_distance,[],2)]; +% end +% mmm=mmm./numel(D) +% hold on +% imagesc(x,xh,mmm') +% +% % subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) +% hold on +% y = cell2mat({D.distance_corr_positive}'); +% ymean=nanmean(y,1); +% ystem=nanstd(y,1)/sqrt(size(y,1)); +% shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) +% % ylim([0,max(y1mean+y1stem)]) +% ylabel(sprintf('Pairwise corr.\n (positive)')); +% xlim([min_x max_x]); +% xlabel('Lateral Distance (\mum)'); +% % +% % subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+3)) +% y = cell2mat({D.distance_corr_negative}'); +% ymean=nanmean(y,1); +% ystem=nanstd(y,1)/sqrt(size(y,1)); +% shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) +% % ylim([0,max(y2mean+y2stem)]) +% ylabel(sprintf('Pairwise corr.\n (negative)')); +% xlim([min_x max_x]); +% xlabel('Lateral Distance (\mum)'); +% ylim([-0.1,0.1]) + end +end + +colors=jet(numel(num_svd_components_removed_vector)+2); + +key.session_epoch_type= 'spont_only'; +for i_th=1:1:numel(threshold_for_event_vector) + key.threshold_for_event = threshold_for_event_vector(i_th); + D=fetch(rel_data&key,'*'); + + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+1)) + hold on + if i_th==1 && i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise corr.\n (all)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + + % if i_th==1 + % title(sprintf('anm%d session %d %s\n%s %d \n threshold =%.2f rois=%d', key.subject_id,key.session,session_date,session_epoch_label, key.session_epoch_number, threshold_for_event_vector(i_th), key.num_of_rois)); + % else + % title(sprintf('Threshold for event = %.2f rois=%d',threshold_for_event_vector(i_th), key.num_of_rois)); + % end + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) + hold on + y = cell2mat({D.distance_corr_positive}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y1mean+y1stem)]) + ylabel(sprintf('Pairwise corr.\n (positive)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+3)) + y = cell2mat({D.distance_corr_negative}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y2mean+y2stem)]) + ylabel(sprintf('Pairwise corr.\n (negative)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + +end +a=1; diff --git a/analysis/correlations/PLOT_CorrPairwiseDistance.m b/analysis/correlations/PLOT_CorrPairwiseDistance.m new file mode 100644 index 0000000..9fe177e --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistance.m @@ -0,0 +1,139 @@ +function PLOT_CorrPairwiseDistance() +close all; +figure +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +% key.subject_id=464725; +rel_data = POP.CorrPairwiseDistanceSVD-IMG.Volumetric; +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +threshold_for_event_vector = unique([fetchn(rel_data, 'threshold_for_event')]); +threshold_for_event_vector=threshold_for_event_vector(1:1:end-1); +distance_bins = fetch1(rel_data,'distance_bins','LIMIT 1'); + +x=distance_bins(1:end-1)+diff(distance_bins)/2; +% x=log(x); + +corr_histogram_bins = fetch1(rel_data,'corr_histogram_bins','LIMIT 1'); +xh= corr_histogram_bins; +xh=xh(1:end-1)+diff(xh)/2; + + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=4000; +% min_x=3; max_x=8; + +key.session_epoch_type= 'behav_only'; +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_th=1:1:numel(threshold_for_event_vector) + key.threshold_for_event = threshold_for_event_vector(i_th); + D=fetch(rel_data&key,'*'); + + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+1)) + hold on + if i_th==1 && i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise corr.\n (all)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + % if i_th==1 + % title(sprintf('anm%d session %d %s\n%s %d \n threshold =%.2f rois=%d', key.subject_id,key.session,session_date,session_epoch_label, key.session_epoch_number, threshold_for_event_vector(i_th), key.num_of_rois)); + % else + % title(sprintf('Threshold for event = %.2f rois=%d',threshold_for_event_vector(i_th), key.num_of_rois)); + % end + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) + mmm=zeros(size(D(1).corr_histogram_per_distance)); + for i=1:1:numel(D) + mmm=[mmm + D(i).corr_histogram_per_distance./max(D(i).corr_histogram_per_distance,[],2)]; + end + mmm=mmm./numel(D) + hold on + imagesc(x,xh,mmm') + +% subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) + hold on + y = cell2mat({D.distance_corr_positive}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y1mean+y1stem)]) + ylabel(sprintf('Pairwise corr.\n (positive)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); +% +% subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+3)) + y = cell2mat({D.distance_corr_negative}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y2mean+y2stem)]) + ylabel(sprintf('Pairwise corr.\n (negative)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + ylim([-0.1,0.1]) + end +end + +colors=jet(numel(num_svd_components_removed_vector)+2); + +key.session_epoch_type= 'spont_only'; +for i_th=1:1:numel(threshold_for_event_vector) + key.threshold_for_event = threshold_for_event_vector(i_th); + D=fetch(rel_data&key,'*'); + + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+1)) + hold on + if i_th==1 && i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise corr.\n (all)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + + % if i_th==1 + % title(sprintf('anm%d session %d %s\n%s %d \n threshold =%.2f rois=%d', key.subject_id,key.session,session_date,session_epoch_label, key.session_epoch_number, threshold_for_event_vector(i_th), key.num_of_rois)); + % else + % title(sprintf('Threshold for event = %.2f rois=%d',threshold_for_event_vector(i_th), key.num_of_rois)); + % end + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+2)) + hold on + y = cell2mat({D.distance_corr_positive}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y1mean+y1stem)]) + ylabel(sprintf('Pairwise corr.\n (positive)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + + subplot(numel(threshold_for_event_vector),3,((i_th-1)*3+3)) + y = cell2mat({D.distance_corr_negative}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(y2mean+y2stem)]) + ylabel(sprintf('Pairwise corr.\n (negative)')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + +end +a=1; diff --git a/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes.m b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes.m new file mode 100644 index 0000000..371f94c --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes.m @@ -0,0 +1,149 @@ +function PLOT_CorrPairwiseDistanceSpikes() +close all; + + +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +DefaultFontSize=16; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +rel_data = (POP.CorrPairwiseDistanceSVDSpikes-IMG.Volumetric) & IMG.Mesoscope; +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +threshold_for_event_vector = 0; +distance_bins = fetch1(rel_data,'distance_bins','LIMIT 1'); + +x=distance_bins(1:end-1)+diff(distance_bins)/2; +% x=log(x); + +corr_histogram_bins = fetch1(rel_data,'corr_histogram_bins','LIMIT 1'); +xh= corr_histogram_bins; +xh=xh(1:end-1)+diff(xh)/2; + + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); +% colors=jet(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=4000; + +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + + %% Spontaneous activity + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + + subplot(2,3,1) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + title(sprintf('Spontaneous activity\n')); + ylim([-0.005 0.05]); + + %zoom in + subplot(2,3,4) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Behavior activity + + key.session_epoch_type= 'behav_only'; + D=fetch(rel_data&key,'*'); + subplot(2,3,2) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('Behavior\n')); + ylim([-0.005 0.05]); + + + % zoom in + subplot(2,3,5) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Spontaneous minus Behavior + key=rmfield(key,'session_epoch_type'); + D=fetch(rel_data&key & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"') & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"')),'*'); + subplot(2,3,3) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + D1=D(strcmp({D.session_epoch_type}','spont_only')); + D2=D(strcmp({D.session_epoch_type}','behav_only')); + y1 = cell2mat({D1.distance_corr_all}'); + y2= cell2mat({D2.distance_corr_all}'); + y=y1-y2; + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('\n')); + ylim([-0.005 0.01]); + +end + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) diff --git a/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoSinglePlane.m b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoSinglePlane.m new file mode 100644 index 0000000..05cc807 --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoSinglePlane.m @@ -0,0 +1,142 @@ +function PLOT_CorrPairwiseDistanceSpikes_MesoSinglePlane() +close all; + + +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +DefaultFontSize=16; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +rel_data = (POP.CorrPairwiseDistanceSVD & 'threshold_for_event=0') & (IMG.Mesoscope - IMG.Volumetric); +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +distance_bins = fetch1(rel_data,'distance_bins','LIMIT 1'); + +x=distance_bins(1:end-1)+diff(distance_bins)/2; + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); +% colors=jet(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=4000; + +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + + %% Spontaneous activity + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + + subplot(2,3,1) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + title(sprintf('Spontaneous activity\n')); + ylim([-0.005 0.05]); + + %zoom in + subplot(2,3,4) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Behavior activity + + key.session_epoch_type= 'behav_only'; + D=fetch(rel_data&key,'*'); + subplot(2,3,2) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('Behavior\n')); + ylim([-0.005 0.05]); + + + % zoom in + subplot(2,3,5) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Spontaneous minus Behavior + key=rmfield(key,'session_epoch_type'); + D=fetch(rel_data&key & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"') & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"')),'*'); + subplot(2,3,3) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + D1=D(strcmp({D.session_epoch_type}','spont_only')); + D2=D(strcmp({D.session_epoch_type}','behav_only')); + y1 = cell2mat({D1.distance_corr_all}'); + y2= cell2mat({D2.distance_corr_all}'); + y=y1-y2; + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('\n')); + ylim([-0.005 0.01]); + +end + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) diff --git a/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoVolumetric.m b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoVolumetric.m new file mode 100644 index 0000000..ffbb444 --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_MesoVolumetric.m @@ -0,0 +1,149 @@ +function PLOT_CorrPairwiseDistanceSpikes_MesoVolumetric() +close all; + + +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +DefaultFontSize=16; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +rel_data = (POP.CorrPairwiseDistanceSVD & 'threshold_for_event=0') & IMG.Volumetric & IMG.Mesoscope; +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +threshold_for_event_vector = 0; +distance_bins = fetch1(rel_data,'distance_bins','LIMIT 1'); + +x=distance_bins(1:end-1)+diff(distance_bins)/2; +% x=log(x); + +corr_histogram_bins = fetch1(rel_data,'corr_histogram_bins','LIMIT 1'); +xh= corr_histogram_bins; +xh=xh(1:end-1)+diff(xh)/2; + + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); +% colors=jet(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=2000; + +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + + %% Spontaneous activity + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + + subplot(2,3,1) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + title(sprintf('Spontaneous activity\n')); + ylim([-0.005 0.05]); + + %zoom in + subplot(2,3,4) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Behavior activity + + key.session_epoch_type= 'behav_only'; + D=fetch(rel_data&key,'*'); + subplot(2,3,2) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('Behavior\n')); + ylim([-0.005 0.05]); + + + % zoom in + subplot(2,3,5) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.001 0.001]); + title(sprintf('Zoom in\n')); + + + %% Spontaneous minus Behavior + key=rmfield(key,'session_epoch_type'); + D=fetch(rel_data&key & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"') & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"')),'*'); + subplot(2,3,3) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + D1=D(strcmp({D.session_epoch_type}','spont_only')); + D2=D(strcmp({D.session_epoch_type}','behav_only')); + y1 = cell2mat({D1.distance_corr_all}'); + y2= cell2mat({D2.distance_corr_all}'); + y=y1-y2; + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('\n')); + ylim([-0.005 0.01]); + +end + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) diff --git a/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_PhotoRigVolumetric.m b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_PhotoRigVolumetric.m new file mode 100644 index 0000000..9cc6cc1 --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistanceSpikes_PhotoRigVolumetric.m @@ -0,0 +1,149 @@ +function PLOT_CorrPairwiseDistanceSpikes_PhotoRigVolumetric() +close all; + + +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +DefaultFontSize=16; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +rel_data = (POP.CorrPairwiseDistanceSVD & 'threshold_for_event=0') & (IMG.Volumetric - IMG.Mesoscope); +num_svd_components_removed_vector = [0, 1, 10, 100]; + +threshold_for_event_vector = 0; +distance_bins = fetch1(rel_data,'distance_bins','LIMIT 1'); + +x=distance_bins(1:end-1)+diff(distance_bins)/2; +% x=log(x); + +corr_histogram_bins = fetch1(rel_data,'corr_histogram_bins','LIMIT 1'); +xh= corr_histogram_bins; +xh=xh(1:end-1)+diff(xh)/2; + + +colors=fake_parula(numel(num_svd_components_removed_vector)+2); +% colors=jet(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=500; + +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + + %% Spontaneous activity + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + + subplot(2,3,1) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + title(sprintf('Spontaneous activity\n')); + ylim([-0.005 0.1]); + + %zoom in + subplot(2,3,4) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.005 0.005]); + title(sprintf('Zoom in\n')); + + + %% Behavior activity + + key.session_epoch_type= 'behav_only'; + D=fetch(rel_data&key,'*'); + subplot(2,3,2) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + title(sprintf('Behavior\n')); + ylim([-0.005 0.1]); + + + % zoom in + subplot(2,3,5) + hold on + if i_c==1 + plot([x(1),x(end)],[0,0],'-k'); + end + y = cell2mat({D.distance_corr_all}'); + ymean=nanmean(y,1); + ystem=nanstd(y,1)/sqrt(size(y,1)); + shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) + % ylim([0,max(ymean+ystem)]) + ylabel(sprintf('Pairwise Correlation')); + xlim([min_x max_x]); + xlabel('Lateral Distance (\mum)'); + key.session_epoch_type= 'spont_only'; + D=fetch(rel_data&key,'*'); + ylim([-0.005 0.005]); + title(sprintf('Zoom in\n')); + + +% %% Spontaneous minus Behavior +% key=rmfield(key,'session_epoch_type'); +% D=fetch(rel_data&key & (EXP2.Session & (EXP2.SessionEpoch & 'session_epoch_type="spont_only"' & 'session_epoch_number=1') & (EXP2.SessionEpoch & 'session_epoch_type="behav_only"')),'*'); +% subplot(2,3,3) +% hold on +% if i_c==1 +% plot([x(1),x(end)],[0,0],'-k'); +% end +% D1=D(strcmp({D.session_epoch_type}','spont_only')); +% D2=D(strcmp({D.session_epoch_type}','behav_only')); +% y1 = cell2mat({D1.distance_corr_all}'); +% y2= cell2mat({D2.distance_corr_all}'); +% y=y1-y2; +% ymean=nanmean(y,1); +% ystem=nanstd(y,1)/sqrt(size(y,1)); +% shadedErrorBar(x,ymean,ystem,'lineprops',{'-','Color',colors(i_c,:)}) +% % ylim([0,max(ymean+ystem)]) +% ylabel(sprintf('Pairwise Correlation')); +% xlim([min_x max_x]); +% xlabel('Lateral Distance (\mum)'); +% title(sprintf('\n')); +% ylim([-0.005 0.01]); + +end + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) diff --git a/analysis/correlations/PLOT_CorrPairwiseDistanceVoxels.m b/analysis/correlations/PLOT_CorrPairwiseDistanceVoxels.m new file mode 100644 index 0000000..c378467 --- /dev/null +++ b/analysis/correlations/PLOT_CorrPairwiseDistanceVoxels.m @@ -0,0 +1,188 @@ +function PLOT_CorrPairwiseDistanceVoxels() +close all; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\corr_distance_pop\']; + + +% key.subject_id=463190; +rel_data = POP.CorrPairwiseDistanceSVDVoxels; +num_svd_components_removed_vector = [0, 1, 10, 100, 500]; + +threshold_for_event_vector = unique([fetchn(rel_data, 'threshold_for_event')]); +threshold_for_event_vector=[0]; +lateral_distance_bins = fetch1(rel_data,'lateral_distance_bins','LIMIT 1'); +x=lateral_distance_bins(1:end-1)+diff(lateral_distance_bins)/2; + +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.5; +vertical_dist=0.15; + +panel_width1=0.4; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.75; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +colors=viridis(numel(num_svd_components_removed_vector)+2); + +min_x=0; max_x=1000; +% min_x=3; max_x=8; + +key.session_epoch_type= 'behav_only'; +for i_c=1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed=num_svd_components_removed_vector(i_c); + + for i_th=1:1:numel(threshold_for_event_vector) + key.threshold_for_event = threshold_for_event_vector(i_th); + D=fetch(rel_data&key,'*'); + for i=1:1:numel(D) + idx_same_bins(i) = sum(D(i).axial_distance_bins==35); + axial_distance_bins_size(i)=numel(D(i).axial_distance_bins); + end + + idx_same_bins=find(idx_same_bins); + [max_axial_distance,idxidx]=max(axial_distance_bins_size(idx_same_bins)); + xx=D(idxidx). axial_distance_bins; + + map=zeros(numel(lateral_distance_bins)-1,max_axial_distance); + for i=1:1:numel(idx_same_bins) + current_map = D(i).distance_corr_all; + map(:,1:size(current_map,2))=[map(:,1:size(current_map,2)) + current_map]; + % map(size(current_map) = map + end + max_axials=axial_distance_bins_size(idx_same_bins); + for i=1:1:max_axials + divide_factor (i) = sum((axial_distance_bins_size(idx_same_bins)>=i)); + end + map=map./divide_factor; + + + ax(i_c)=axes('position',[position_x1(1), position_y1(i_c), panel_width1, panel_height1]); + % xx=D.axial_distance_bins(1:end); + % map=D.distance_corr_all; + maxv=prctile(map(:),99); + minv=min([prctile(map(:),0),0]); + %rescaling + map(map>maxv)=maxv; + map(mapmaxv)=maxv; + % map(mapmaxv)=maxv; + % % map(map=0; +all_corr_positive=all_corr(idx_positive_r); +all_distance_positive=all_distance(idx_positive_r); + +idx_negative_r=all_corr<0; +all_corr_negative=all_corr(idx_negative_r); +all_distance_negative=all_distance(idx_negative_r); + + +distance_bins_positive=[prctile(all_distance_positive,[0:1:100])]; +distance_bins_negative=[prctile(all_distance_negative,[0:1:100])]; + +for i_d=1:1:numel(distance_bins_positive)-1 + idx=all_distance_positive>=(distance_bins_positive(i_d)) & all_distance_positive<(distance_bins_positive(i_d+1)); + r_binned_positive(i_d)=median(all_corr_positive(idx)); + bins_center_positive(i_d) = (distance_bins_positive(i_d) + distance_bins_positive(i_d+1))/2; + + idx=all_distance_negative>=(distance_bins_negative(i_d)) & all_distance_negative<(distance_bins_negative(i_d+1)); + r_binned_negative(i_d)=median(all_corr_negative(idx)); + bins_center_negative(i_d) = (distance_bins_negative(i_d) + distance_bins_negative(i_d+1))/2; + +end + +hold on +plot(bins_center_positive,r_binned_positive,'.r') +plot(bins_center_negative,r_binned_negative,'.b') + +% histogram(mean_corr,8); + diff --git a/analysis/fn_ClusterPVtrials.m b/analysis/fn_ClusterPVtrials.m new file mode 100644 index 0000000..83e41f2 --- /dev/null +++ b/analysis/fn_ClusterPVtrials.m @@ -0,0 +1,193 @@ +function [cl_id, mat, order]=fn_ClusterPVtrials(data) + +% if size(data,1)<20 +% n_clust =10; +% elseif size(data,1)<50 +% n_clust =20; +% elseif size(data,1)<100 +% n_clust =50; +% elseif size(data,1)>100 +% n_clust =100; +% end + +if size(data,1)<20 + n_clust =10; +elseif size(data,1)<100 + n_clust =20; +elseif size(data,1)>100 + n_clust =100; +end + +agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them +min_cluster_percent =5; +corr_thresh_for_merging = 0.7; %won't merge clusters that has correlation value below that + + +%% Hierarchical cluster analysis. +% Get distances. +d = pdist(data,'correlation'); +d_sq = squareform(d); + +% Linkage. +link = linkage(d,'average'); + +% Cluster. +cl_id = cluster(link,'MaxClust',n_clust); +% temp=inconsistent(link); +% nanmax(temp(:,4)) +% cl_id = cluster(link,'cutoff',1.15); + +% Cophenetic correlation. +corr_cop = cophenet(link,d) + +%Plot Clusters dengrogram and pairwise distance +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + +panel_width=0.3; +panel_height=0.3; +horizontal_distance=0.75; +vertical_distance=0.6; + +position_x(1)=0.05; +position_x(2)=position_x(1)+horizontal_distance; +position_y(1)=0.7; +position_y(2)=position_y(1)-vertical_distance; + +% % Figure Title +% axes('position',[position_x(1), position_y(1)+0.1, panel_width, panel_height*0.25]); +% yl = ylim(); xl = xlim(); +% % text(xl(1) + diff(xl)*0.0, yl(2)*1.8, sprintf('%s Cell-type: %s Contains: %s units' , P.anatomy, P.unit_quality, P.Pyr_FS),'HorizontalAlignment','Left','FontSize', 10); +% axis off; + +% plot dengrogram +axes('position',[position_x(1), position_y(1), 0.75, 0.2]); +[h_dend b order] = dendrogram(link,0); +set(gca,'xticklabel',[],'yticklabel',[],'xtick',[],'ytick',[]) +axis off; + +% Heatmap of pairwise distances. +axes('position',[position_x(1), position_y(2), 0.75, 0.6]); +mat=1-d_sq(order,order); +imagesc(mat); hold on +set(gca,'xtick',[],'ytick',[]) +xlabel('Trials, Pairwise distance') +ylabel('Trials, Pairwise distance') + +% Agregate clusters +cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/size(data,1); +minor_clusters = find(cluster_percentcurrent_minor_clusters) = cl_id(cl_id>current_minor_clusters) -1; + cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/size(data,1); + minor_clusters = find(cluster_percent=min_cluster_percent); +% n_clust_2plot = numel (clusters_2plot); +% +% [~,cluster_order] = sort (cluster_percent(clusters_2plot),'descend'); +% for ii = 1:1:n_clust_2plot +% i = clusters_2plot(ii); +% i2plot = find(cl_id==i); +% subplot(ceil(n_clust_2plot/sqrt(n_clust_2plot)),ceil(n_clust_2plot/sqrt(n_clust_2plot)),find(ii == cluster_order)) +% clust_mean = nanmean(PTSH_RLconcat(i2plot,:),1); +% +% for j = 1:length(i2plot) +% hold on; +% plot(t1,PTSH_RLconcat(i2plot(j),ix1),'color',[0.7 0.7 1]); hold on +% plot(t2,PTSH_RLconcat(i2plot(j),ix2),'color',[1 0.7 0.7]); hold on +% end +% r = corr([clust_mean',PTSH_RLconcat(i2plot,:)']); +% clust_mean_corr = mean(r(2:end)); %correlation of each cell to the cluster average +% plot(t1,clust_mean(ix1),'color',[0 0 1],'linewidth',2); hold on +% plot(t2,clust_mean(ix2),'color',[1 0 0],'linewidth',2); hold on +% +% title(sprintf('%.1f of cells \n r = %.2f ',cluster_percent(i),clust_mean_corr),'FontSize',8); +% +% axis tight; +% box off; +% end +% +% % Figure Title +% ax1=axes('position',[0.3 0.9, panel_width, panel_height*0.25]); +% yl = ylim(); xl = xlim(); +% percent_of_all = sum(cluster_percent(clusters_2plot)); +% text(xl(1) + diff(xl)*0.0, yl(2), sprintf('%s %s side Training: %s CellQuality: %s Cell-type: %s \n [%.2f %.2f] s Includes: %d units %.1f %% of total units clustered' ,... +% key.brain_area, key.hemisphere, key.training_type, key.unit_quality, key.cell_type, key.heirar_cluster_time_st, key.heirar_cluster_time_end, size(PTSH_RLconcat,1), percent_of_all),'HorizontalAlignment','Left','FontSize', 10); +% axis off; +% +% +% +% % Saving the figure +% %-------------------------------------------------------------------------- +% if isempty(dir(dir_save_figure)) +% mkdir (dir_save_figure) +% end +% +% filename =[sprintf('%s%s_Training_%s_UnitQuality_%s_Type_%s__clusters' ,key.brain_area, key.hemisphere, key.training_type, key.unit_quality, key.cell_type)]; +% +% figure_name_out=[dir_save_figure filename]; +% eval(['print ', figure_name_out, ' -dtiff -cmyk -r300']); +% clf; \ No newline at end of file diff --git a/analysis/fn_mode_cluster_corr_days.m b/analysis/fn_mode_cluster_corr_days.m new file mode 100644 index 0000000..0a66c87 --- /dev/null +++ b/analysis/fn_mode_cluster_corr_days.m @@ -0,0 +1,47 @@ +function fn_mode_cluster_corr_days(key, first_date, dir_save_figure) + +k=key; +k.session_date=first_date; + +k=fetch(EXP.Session & k); +key.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & k,'multiple_sessions_uid'); + +session = fetchn(IMG.FOVmultiSessions & key, 'session', 'ORDER BY session'); + +trial_name_list ={'l','r'}; +epoch_list=fetchn(ANLI.EpochName,'trial_epoch_name'); +counter=0; +for i_tname =1:1:numel(trial_name_list) + for i_e =1:1:numel(epoch_list) + w=[]; + for i_s =1:1:numel(session) + key.session = session(i_s); + key.trial_type_name = trial_name_list{i_tname}; + key.trial_epoch_name = epoch_list{i_e}; + % w(:,i_s)=fetchn(ANLI.Mode & key & ANLI.IncludeROImultiSession,'mode_unit_weight', 'ORDER BY roi_number') + % w(:,i_s)=fetchn(ANLI.Mode & key , 'mode_unit_weight', 'ORDER BY roi_number') + w(:,i_s)=abs(fetchn((ANLI.ModeClustering & ANLI.IncludeROImultiSession2intersect) & key ,'mode_unit_weight', 'ORDER BY roi_number')); + end + counter=counter+1; + + r=corr(w, 'rows', 'pairwise'); + + subplot(2,2,counter) + diag_nan=[1:1:size(r,1)]+NaN; + diag_m = diag(diag_nan,0); + imagescnan(r+diag_m,[0 1]); + colormap(jet); + colorbar; + title(sprintf('Clustering based\n on %s, lick %s',epoch_list{i_e},trial_name_list{i_tname})); + end +end + +dir_save_figure = [dir_save_figure '\']; +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['from' first_date ]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +clf; diff --git a/analysis/fn_mode_corr_days.m b/analysis/fn_mode_corr_days.m new file mode 100644 index 0000000..b9f5cd4 --- /dev/null +++ b/analysis/fn_mode_corr_days.m @@ -0,0 +1,45 @@ +function fn_mode_corr_days(key, first_date, dir_save_figure) + +k=key; +k.session_date=first_date; + +k=fetch(EXP.Session & k); +key.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & k,'multiple_sessions_uid'); + +session = fetchn(IMG.FOVmultiSessions & key, 'session', 'ORDER BY session'); + +mode_names= {'LateDelay','Movement','Ramping'}; +for i_m = 1:1:numel (mode_names) + w=[]; + for i_s =1:1:numel(session) + key.session = session(i_s); + key.mode_type_name = mode_names{i_m} +% w(:,i_s)=fetchn(ANLI.Mode & key & ANLI.IncludeROImultiSession,'mode_unit_weight', 'ORDER BY roi_number') +% w(:,i_s)=fetchn(ANLI.Mode & key , 'mode_unit_weight', 'ORDER BY roi_number') + w(:,i_s)=fetchn((ANLI.Mode& ANLI.IncludeROImultiSession2intersect) & key ,'mode_unit_weight', 'ORDER BY roi_number'); + + end + +% w(w>0)=1; +% w(w<=0)=-1; + + r=corr(w, 'rows', 'pairwise'); + + subplot(2,2,i_m) + diag_nan=[1:1:size(r,1)]+NaN; + diag_m = diag(diag_nan,0); + imagescnan(r+diag_m,[0 1]); + colormap(jet); + colorbar; + title(sprintf('%s Mode',mode_names{i_m})); +end + +dir_save_figure = [dir_save_figure '\']; +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['from' first_date ]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +clf; diff --git a/analysis/fn_plotCluster.m b/analysis/fn_plotCluster.m new file mode 100644 index 0000000..ef4bf8f --- /dev/null +++ b/analysis/fn_plotCluster.m @@ -0,0 +1,61 @@ +function [peak_FR]=fn_plotCluster (plot_counter, columns2plot, Param,time2plot,idx2plot, idx_time2plot, L, R, num, peak_FR, flag_xlabel, peak_LR_hit_units, ylab,legend_flag) +peak_FR=[]; + +t_go = 0; +t_chirp1 = -3; +t_chirp2 = -2; + +if isempty(idx2plot) + return +end +PSTH_L = L.PSTH{num}; +PSTH_R= R.PSTH{num}; + +% PSTH_L = PSTH_L./peak_LR_hit_units; +% PSTH_R = PSTH_R./peak_LR_hit_units; + + +L_clu.m=nanmean(PSTH_L(idx2plot,idx_time2plot),1); +L_clu.stem=nanstd(PSTH_L(idx2plot,idx_time2plot),1)./sqrt(numel(idx2plot)); +R_clu.m=nanmean(PSTH_R(idx2plot,idx_time2plot),1); +R_clu.stem=nanstd(PSTH_R(idx2plot,idx_time2plot),1)./sqrt(numel(idx2plot)); + +if numel(idx2plot)==1 + L_clu.stem = L_clu.m*0; + R_clu.stem = R_clu.m*0; +end + +if isempty(peak_FR) + peak_FR = nanmax([L_clu.m+L_clu.stem,R_clu.m+R_clu.stem]); +end + +% xlim([time2plot(1), time2plot(end)]); +xl=([time2plot(1) time2plot(end)]); +xlim(xl); +yl=([0,peak_FR*1.0]); +% ylim([0,1]); +ylim(yl); + +hold on; +plot([t_go t_go], [yl(1) yl(2)*1.8], 'k-','LineWidth',0.5); +plot([t_chirp1 t_chirp1], [yl(1) yl(2)*1.8], 'k-','LineWidth',0.5); +plot([t_chirp2 t_chirp2], [yl(1) yl(2)*1.8], 'k-','LineWidth',0.5); +if mod(plot_counter,columns2plot)==0 + % ylabel(sprintf('%s\nNormalized\nResponse',ylab)); + text(xl(1)-diff(xl)*0.6, yl(1)+diff(yl)*0.5,sprintf('%s\ndf/F normalized',ylab), 'FontSize',7,'HorizontalAlignment','center','Rotation',90); + + if flag_xlabel==1 + xlabel(sprintf('Time (s)\n'), 'FontSize',7,'HorizontalAlignment','center'); + end +end +shadedErrorBar(time2plot,L_clu.m,L_clu.stem,'lineprops',{'r-','markerfacecolor','r','linewidth',1}); +shadedErrorBar(time2plot,R_clu.m,R_clu.stem,'lineprops',{'b-','markerfacecolor','b','linewidth',1},'transparent',1); + +if plot_counter==0 + text(xl(1)+diff(xl)*0.65, yl(1)+diff(yl)*1, 'Delay', ... + 'fontsize', 6, 'fontname', 'helvetica','HorizontalAlignment','Center'); +end +% sum(cluster_percent(clusters_2plot)) +set(gca,'xtick',[-4, -2, 0],'ytick',[0 1],'tickdir','out','ticklength',[.04 .04],'fontsize',7) + +box off; \ No newline at end of file diff --git a/analysis/fn_plot_cluster_hist.m b/analysis/fn_plot_cluster_hist.m new file mode 100644 index 0000000..4c885e7 --- /dev/null +++ b/analysis/fn_plot_cluster_hist.m @@ -0,0 +1,24 @@ +function []=fn_plot_cluster_hist(cl_id, mat, order, data) +hold on; + +[y,bins]=hist(cl_id,[min(cl_id):max(cl_id)]); +bar(bins,y*(size(data,1)/max(y)),'FaceColor','none'); + + +% Labels for cluster identity on distance matrix. +n_clust_after_merging = numel(unique(cl_id)); +col2plot = hsv(n_clust_after_merging); +col2plot_dark = col2plot./2; +for i = 1:n_clust_after_merging + ind_plot = find(cl_id(order)==i); + plot(i*ones(1,length(ind_plot)),size(data,1)-ind_plot,'.','color',col2plot(i,:)); hold on +end +set(gca,'xtick',[],'ytick',[]); +xlim([-1 n_clust_after_merging+1]); +ylim([0 size(data,1)]); +% axes('position',[position_x1(1+subplot_shift)+0.15 position_y1(2) panel_width1/2 panel_height1]); +axis off; +box off; + + + diff --git a/analysis/fn_plot_cluster_mat.m b/analysis/fn_plot_cluster_mat.m new file mode 100644 index 0000000..db436fc --- /dev/null +++ b/analysis/fn_plot_cluster_mat.m @@ -0,0 +1,17 @@ +function []=fn_plot_cluster_mat(mat) + +imagesc(mat,[0,1]); +colormap(jet); +% if size (mat,1)<500 +% set(gca,'xtick',[1,100:100:size(mat,1)],'ytick',100:100:size(mat,2)) +% elseif size(mat,1)>500 && size (mat,1)<=1000 +% set(gca,'xtick',[1,200:200:size(mat,1)],'ytick',200:200:size(mat,2)) +% elseif size(mat,1)>1000 +% set(gca,'xtick',[1,500:500:size(mat,1)],'ytick',500:500:size(mat,2)) +% end +xlabel('Clustered','FontSize',8) +ylabel('Clustered','FontSize',8) +title('Pairwise distance','FontSize',8); + axis equal + axis tight; +% colorbar; diff --git a/analysis/fn_plot_proj_cluster.m b/analysis/fn_plot_proj_cluster.m new file mode 100644 index 0000000..6aaf3d6 --- /dev/null +++ b/analysis/fn_plot_proj_cluster.m @@ -0,0 +1,27 @@ +function fn_plot_proj_cluster (F, trial_epoch_name, trial_type_name, time_sample_start, time_sample_end) + +if strcmp(trial_type_name,'l')==1 + clr{2}=[0.7 0 0]; + clr{1}=[1 0.5 0.5]; + +elseif strcmp(trial_type_name,'r')==1 + clr{2}=[0 0 0.7]; + clr{1}=[0.5 0.5 1]; +end + +hold on; +idx1=find(strcmp({F.trial_epoch_name},trial_epoch_name) & strcmp({F.trial_type_name},trial_type_name) & [F.trial_cluster_group]==2 ); +t=F(idx1).psth_timestamps; +idx_t=(t<3); +plot(t(idx_t) ,F(idx1).proj_average(idx_t),'Color',clr{1}); +idx2=find(strcmp({F.trial_epoch_name},trial_epoch_name) & strcmp({F.trial_type_name},trial_type_name) & [F.trial_cluster_group]==1 ); +plot(t(idx_t) ,F(idx2).proj_average(idx_t),'Color',clr{2}); +plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); +plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); +plot([0,0],[-1000,1000],'-k'); +yl=( [nanmin([F(idx1).proj_average(idx_t),F(idx2).proj_average(idx_t),0]) , nanmax([F(idx1).proj_average(idx_t),F(idx2).proj_average(idx_t),0])+eps]); + +xlim([-3,3]); +ylim(yl); +xlabel('Time (s)'); +set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); \ No newline at end of file diff --git a/analysis/fn_plot_psth.m b/analysis/fn_plot_psth.m new file mode 100644 index 0000000..2a979f2 --- /dev/null +++ b/analysis/fn_plot_psth.m @@ -0,0 +1,19 @@ +function fn_plot_psth (F, outcome, time_sample_start, time_sample_end) + + +hold on; +idx1=find(strcmp({F.outcome},outcome) & strcmp({F.trial_type_name},'l')); +t=F(idx1).psth_timestamps; +idx_t=(t<3); +shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); +idx2=find(strcmp({F.outcome},outcome) & strcmp({F.trial_type_name},'r')); +shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); +plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); +plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); +plot([0,0],[-1000,1000],'-k'); +yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + +xlim([-3,3]); +ylim(yl); +xlabel('Time (s)'); +set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); \ No newline at end of file diff --git a/analysis/fn_plot_psth_cluster.m b/analysis/fn_plot_psth_cluster.m new file mode 100644 index 0000000..ee45370 --- /dev/null +++ b/analysis/fn_plot_psth_cluster.m @@ -0,0 +1,27 @@ +function fn_plot_psth_cluster (F, trial_epoch_name, trial_type_name, time_sample_start, time_sample_end) + +if strcmp(trial_type_name,'l')==1 + clr{2}=[0.7 0 0]; + clr{1}=[1 0.5 0.5]; + +elseif strcmp(trial_type_name,'r')==1 + clr{2}=[0 0 0.7]; + clr{1}=[0.5 0.5 1]; +end + +hold on; +idx1=find(strcmp({F.trial_epoch_name},trial_epoch_name) & strcmp({F.trial_type_name},trial_type_name) & [F.trial_cluster_group]==2 ); +t=F(idx1).psth_timestamps; +idx_t=(t<3); +shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color',clr{1},'markeredgecolor',clr{1}/3,'markerfacecolor',clr{1}/3,'linewidth',1}); +idx2=find(strcmp({F.trial_epoch_name},trial_epoch_name) & strcmp({F.trial_type_name},trial_type_name) & [F.trial_cluster_group]==1 ); +shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color',clr{2},'markeredgecolor',clr{2}/3,'markerfacecolor',clr{2}/3,'linewidth',1}); +plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); +plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); +plot([0,0],[-1000,1000],'-k'); +yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + +xlim([-3,3]); +ylim(yl); +xlabel('Time (s)'); +set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); \ No newline at end of file diff --git a/analysis/fn_populate_imaging_psth_cluster.m b/analysis/fn_populate_imaging_psth_cluster.m new file mode 100644 index 0000000..c7edce4 --- /dev/null +++ b/analysis/fn_populate_imaging_psth_cluster.m @@ -0,0 +1,108 @@ +function fn_populate_imaging_psth_cluster (k, first_date, dir_save_figure_base, rel_inclusion) + + +k.session_date=first_date; +key=fetch(EXP.Session & k); +roi_list=fetchn(IMG.ROI & rel_inclusion & key,'roi_number', 'ORDER BY roi_number'); + +kk.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +multiple_session_list = fetchn(IMG.FOVmultiSessions & kk,'session'); + + +panel_width1=0.07; +panel_height1=0.1; + +horizontal_distance1=0.13; + +vertical_distance1=0.13; + + +position_x1(1)=0.07; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; +position_x1(5)=position_x1(4)+horizontal_distance1; +position_x1(6)=position_x1(5)+horizontal_distance1; +position_x1(7)=position_x1(6)+horizontal_distance1; + +position_y1(1)=0.85; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; +position_y1(7)=position_y1(6)-vertical_distance1; + +panel_width3=0.075; +panel_height2=0.03; +vertical_distance2=0.03; +position_y2(1)=0; +position_y2(2)=position_y2(1)+vertical_distance2; +position_y2(3)=position_y2(2)+vertical_distance2; +position_y2(4)=position_y2(3)+vertical_distance2; +position_y2(5)=position_y2(4)+vertical_distance2; + + +fov_name = fetchn(IMG.FOV & key, 'fov_name'); +trial_type_name_list={'l','r'}; +trial_color{1}=[1 0 0]; +trial_color{2}=[0 0 1]; + +for iROI = 1:numel(roi_list) + for i_s = 1:1:numel(multiple_session_list) + + key.session = multiple_session_list(i_s); + key.roi_number=roi_list(iROI); + + F=fetch(ANLI.FPSTHaverage & key,'*'); + time_sample_start = F(1).time_sample_start; + time_sample_end = F(1).time_sample_end; + + FCluster=fetch(ANLI.FPSTHaverageClusterbased & key,'*'); + + + + % Hit + axes('position',[position_x1(1) position_y1(i_s) panel_width1 panel_height1]); + outcome='hit'; + fn_plot_psth (F,outcome, time_sample_start, time_sample_end); + if i_s==1 + title(sprintf('ROI %d\nCorrect',roi_list(iROI))); + end + ylabel([sprintf('Session %d\n',multiple_session_list(i_s)), '\DeltaF/F' ]); + + + + trial_name_list ={'l','r'}; + epoch_list=fetchn(ANLI.EpochName,'trial_epoch_name'); + counter=1; + for i_tname =1:1:numel(trial_name_list) + for i_e =1:1:numel(epoch_list) + axes('position',[position_x1(counter+1) position_y1(i_s) panel_width1 panel_height1]); + trial_epoch_name=epoch_list{i_e}; + trial_type_name=trial_name_list{i_tname}; + fn_plot_psth_cluster (FCluster, trial_epoch_name, trial_type_name ,time_sample_start, time_sample_end); + if i_s==1 + title(sprintf('Clustering based\n on %s',trial_epoch_name)); + end + counter=counter+1; + end + end + + + + end + + + dir_save_figure = [dir_save_figure_base fov_name{1} 'from' first_date '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['ROI_' num2str(roi_list(iROI))]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; +end +end diff --git a/analysis/fn_proj_across_days.m b/analysis/fn_proj_across_days.m new file mode 100644 index 0000000..6ad5987 --- /dev/null +++ b/analysis/fn_proj_across_days.m @@ -0,0 +1,107 @@ +function fn_proj_across_days (k, first_date, dir_save_figure_base) + + +k.session_date=first_date; +key=fetch(EXP.Session & k); +roi_list=fetchn(IMG.ROI & key,'roi_number', 'ORDER BY roi_number'); + +kk.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +multiple_session_list = fetchn(IMG.FOVmultiSessions & kk,'session'); + + +panel_width1=0.6/numel(multiple_session_list); +panel_height1=0.11; +horizontal_distance1=0.8/numel(multiple_session_list); +vertical_distance1=0.17; + + +position_x1(1)=0.06; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; + + + + +fov_name = fetchn(IMG.FOV & key, 'fov_name'); + +mode_names= {'Stimulus','LateDelay','Movement','Ramping'}; + +for i_m= 1:numel(mode_names) + key.mode_type_name = mode_names{i_m}; + for i_s = 1:1:numel(multiple_session_list) + + position_x1(end+1)=position_x1(end)+horizontal_distance1; + + key.session = multiple_session_list(i_s); + F=fetch(ANLI.ProjTrialAverage & key,'*'); + + + + time_sample_start = F(1).time_sample_start; + time_sample_end = F(1).time_sample_end; + +% Signif=fetch(ANLI.TaskSignifROI & key,'*', 'ORDER BY task_signif_name_uid'); + + % Hit + axes('position',[position_x1(i_s) position_y1(1) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + plot(t(idx_t) ,F(idx1).proj_average(idx_t),'-r'); + idx2=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'r')); + plot(t(idx_t) ,F(idx2).proj_average(idx_t),'-b'); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).proj_average(idx_t),F(idx2).proj_average(idx_t),0]) , nanmax([F(idx1).proj_average(idx_t), F(idx2).proj_average(idx_t),0])+eps]); + title(sprintf('Session %d\nCorrect\n',multiple_session_list(i_s))); + if i_s==1 + ylabel('Proj. (a.u.)'); + title(sprintf('%s mode\nSession %d\nCorrect\n', mode_names{i_m} ,multiple_session_list(i_s))); + end + xlim([-4,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + % Miss %a(i_s)= + axes('position',[position_x1(i_s) position_y1(2) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + plot(t(idx_t) ,F(idx1).proj_average(idx_t),'-r'); + idx2=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'r')); + plot(t(idx_t) ,F(idx2).proj_average(idx_t),'-b'); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).proj_average(idx_t),F(idx2).proj_average(idx_t),0]) , nanmax([F(idx1).proj_average(idx_t), F(idx2).proj_average(idx_t),0])+eps]); + title(sprintf('Error')); + if i_s==1 + ylabel('Proj. (a.u.)'); + end + xlim([-4,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + end + + + dir_save_figure = [dir_save_figure_base fov_name{1} 'from' first_date '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['Mode_' mode_names{i_m}]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; + +end diff --git a/analysis/fn_proj_across_days_cluster.m b/analysis/fn_proj_across_days_cluster.m new file mode 100644 index 0000000..154e3a2 --- /dev/null +++ b/analysis/fn_proj_across_days_cluster.m @@ -0,0 +1,88 @@ +function fn_proj_across_days_cluster (k, first_date, dir_save_figure_base) + + +k.session_date=first_date; +key=fetch(EXP.Session & k); +roi_list=fetchn(IMG.ROI & key,'roi_number', 'ORDER BY roi_number'); + +kk.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +multiple_session_list = fetchn(IMG.FOVmultiSessions & kk,'session'); + + +panel_width1=0.12; +panel_height1=0.1; + +horizontal_distance1=0.2; + +vertical_distance1=0.13; + + +position_x1(1)=0.07; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; +position_x1(5)=position_x1(4)+horizontal_distance1; +position_x1(6)=position_x1(5)+horizontal_distance1; +position_x1(7)=position_x1(6)+horizontal_distance1; + +position_y1(1)=0.85; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; +position_y1(7)=position_y1(6)-vertical_distance1; + + + +fov_name = fetchn(IMG.FOV & key, 'fov_name'); + +mode_names= {'Stimulus','LateDelay','Movement','Ramping'}; + + +for i_s = 1:1:numel(multiple_session_list) + + + key.session = multiple_session_list(i_s); + % F=fetch(ANLI.ProjTrialAverage & key,'*'); + FCluster=fetch(ANLI.ProjClusterTrialAverage & key,'*'); + time_sample_start = FCluster(1).time_sample_start; + time_sample_end = FCluster(1).time_sample_end; + + + trial_name_list ={'l','r'}; + epoch_list=fetchn(ANLI.EpochName,'trial_epoch_name'); + counter=1; + for i_tname =1:1:numel(trial_name_list) + for i_e =1:1:numel(epoch_list) + axes('position',[position_x1(counter) position_y1(i_s) panel_width1 panel_height1]); + trial_epoch_name=epoch_list{i_e}; + trial_type_name=trial_name_list{i_tname}; + fn_plot_proj_cluster (FCluster, trial_epoch_name, trial_type_name ,time_sample_start, time_sample_end); + if i_s==1 + title(sprintf('Clustering based\n on %s',trial_epoch_name)); + end + if counter==1 + ylabel(sprintf('Session %d\n Proj. (a.u.)' ,multiple_session_list(i_s))); + end + counter=counter+1; + end + end + + + +end + + +dir_save_figure = [dir_save_figure_base '\']; +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['from' first_date ]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +clf; + + diff --git a/analysis/fn_psth_corr_days.m b/analysis/fn_psth_corr_days.m new file mode 100644 index 0000000..2a2546a --- /dev/null +++ b/analysis/fn_psth_corr_days.m @@ -0,0 +1,53 @@ +function fn_psth_corr_days(k, first_date) + + +k.session_date=first_date{1}; + +key=fetch(EXP.Session & k); +multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +% key=fetch(IMG.FOVmultiSessions & key); +roi_number_list = fetchn(IMG.ROI & key, 'roi_number', 'ORDER BY roi_number'); +numberROI = numel(roi_number_list); + +for iROI=1:1:numberROI + key.roi_number = iROI; + + roi_number_uid = (fetchn(IMG.ROI & key,'roi_number_uid')); + + key_roi_uid.roi_number_uid=roi_number_uid; + key_roi_uid.outcome='hit'; + key_roi_uid.trial_type_name='l'; + psth_l = (fetchn(IMG.ROI*ANLI.FPSTHaverage & key_roi_uid,'psth_avg', 'ORDER BY roi_number')); + psth_t_l = (fetchn(IMG.ROI*ANLI.FPSTHaverage & key_roi_uid,'psth_timestamps', 'ORDER BY roi_number')); + + key_roi_uid.trial_type_name='r'; + psth_r = (fetchn(IMG.ROI*ANLI.FPSTHaverage & key_roi_uid,'psth_avg', 'ORDER BY roi_number')); + psth_t_r = (fetchn(IMG.ROI*ANLI.FPSTHaverage & key_roi_uid,'psth_timestamps', 'ORDER BY roi_number')); + + for i_s=1:1:numel(psth_t_l) + t_idx=psth_t_l{i_s}<3; + psth_m_l(i_s,:) = psth_l{i_s}(t_idx); %works only if trial-duration is the same across sessions + end + + for i_s=1:1:numel(psth_t_r) + t_idx=psth_t_r{i_s}<3; + psth_m_r(i_s,:) = psth_r{i_s}(t_idx); %works only if trial-duration is the same across sessions + end + + psth=[psth_m_l,psth_m_r]; + + r(iROI,:,:)=corr(psth', 'rows', 'pairwise'); + % diag_nan=[1:1:numel(dates)]+NaN; + % diag_m = diag(diag_nan,0) + % imagescnan(r+diag_m,[0 1]) + % colorbar +end + +r_mean=squeeze(nanmean(r,1)); +diag_nan=[1:1:size(r_mean,1)]+NaN; +diag_m = diag(diag_nan,0); +imagescnan(r_mean+diag_m,[0 1]); +colormap(jet); +colorbar; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr.m b/analysis/fn_pv_corr.m new file mode 100644 index 0000000..cefe94d --- /dev/null +++ b/analysis/fn_pv_corr.m @@ -0,0 +1,231 @@ +function fn_pv_corr(k, date, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP.Session & k); + +b=fetch(EXP.BehaviorTrial & (EXP.Session & key),'*','ORDER BY trial'); +b=struct2table(b); +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(1).lick_direction='left'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & ~contains(b.outcome,'ignore')); +% trials(1).lick_direction='all'; + + +% trials(1).tr = find(([contains(b.trial_instruction,'left') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'right') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(1).lick_direction='left'; +% trials(2).tr = find(([contains(b.trial_instruction,'right') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'left') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(2).lick_direction='right'; + + +for i_condition = 1:numel(trials) + PV =[]; + r =[]; + + current_trials=trials(i_condition).tr; + for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & rel & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); + end + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1:1:numel(PV.epoch) + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + + + % correlation matrix of the PV across trials + r.epoch{i_epoch}=corr(PV.epoch{i_epoch}', 'rows', 'pairwise'); + r_mat = r.epoch{i_epoch}; +% % blanking the diagonal +% diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); +% r_mat = r.epoch{i_epoch} + diag_mat; +% +% r_blanked = r.epoch{i_epoch}; + + % PV histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + mask = tril(true(size(r_mat)),-1); + histogram(r.epoch{i_epoch}(mask)); + title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + xlabel('P.V. corr across trials','FontSize',8); + ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagesc(1:1:size(r_mat,1),1:1:size(r_mat,1),r_mat,[0,1]); + colormap(jet); + if size (r_mat,1)<500 + set(gca,'xtick',[1,100:100:size(r_mat,1)],'ytick',100:100:size(r_mat,1)) + elseif size(r_mat,1)>500 && size (r_mat,1)<=1000 + set(gca,'xtick',[1,200:200:size(r_mat,1)],'ytick',200:200:size(r_mat,1)) + elseif size(r_mat,1)>1000 + set(gca,'xtick',[1,500:500:size(r_mat,1)],'ytick',500:500:size(r_mat,1)) + end + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('P.V. correlation','FontSize',8); +% axis equal +% axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id, cluster_mat, order]=fn_ClusterPVtrials(r_mat); + fn_plot_cluster_mat(cluster_mat); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id, cluster_mat, order, r_mat); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + +% % Cell by Trials PV matrix (not correlation) +% PVzscore= rescale(PV.epoch{i_epoch},'InputMin',0,'InputMax',1); +% +% +% % if size (r_mat,1)<500 +% % set(gca,'xtick',[1,100:100:size(r_mat,1)],'ytick',100:100:size(r_mat,1)) +% % elseif size(r_mat,1)>500 && size (r_mat,1)<=1000 +% % set(gca,'xtick',[1,200:200:size(r_mat,1)],'ytick',200:200:size(r_mat,1)) +% % elseif size(r_mat,1)>1000 +% % set(gca,'xtick',[1,500:500:size(r_mat,1)],'ytick',500:500:size(r_mat,1)) +% % end +% +% % colorbar +% % cluster pairwise distance of Cell by Trials PV matrix (not correlation) +% axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); +% [cl_id2, cluster_mat2, order2]=fn_ClusterPVtrials(PVzscore); +% fn_plot_cluster_mat(cluster_mat2); +% % colorbar +% +% +% axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); +% +% PV_reordered= PVzscore(order2,order); +% imagesc(PV_reordered); +% colormap(jet); +% xlabel('Trials','FontSize',8); +% ylabel('Neurons','FontSize',8); +% title('P.V.','FontSize',8); +% +% + + if flag_update_cluster_group_table~=0 + + + % updating the cluster Table + key_TrialCluster=[]; + key_TrialCluster = fetch(EXP.Session &key); + key_TrialCluster.clustering_option_name = clustering_option_name; + key_TrialCluster.trial_epoch_name = PV.epoch_label{i_epoch}; + key_TrialCluster = repmat(key_TrialCluster,numel(current_trials),1); + count =hist(cl_id, 1:max(cl_id)); + [~,idx_sort_count] = sort(count,'descend'); + + + for j_tr=1:1:numel(current_trials) + key_TrialCluster(j_tr).trial = current_trials(j_tr); + key_TrialCluster(j_tr).trial_cluster_id = cl_id(j_tr); + key_TrialCluster(j_tr).trial_cluster_group = find(idx_sort_count==cl_id(j_tr)); % group 1 - largest cluster, group 2 - second largest cluster etc. + end + + %deleting entries in case of duplicates to be able to overwrite + rel=fetch(ANLI.TrialCluster & key_TrialCluster); + if ~isempty(rel) + del(ANLI.TrialCluster&key_TrialCluster); + end + insert(ANLI.TrialCluster,key_TrialCluster); + end + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_2bin.m b/analysis/fn_pv_corr_2bin.m new file mode 100644 index 0000000..72c9fb0 --- /dev/null +++ b/analysis/fn_pv_corr_2bin.m @@ -0,0 +1,185 @@ +function fn_pv_corr_2bin(k, date, dir_save_figure, flag_signif, clustering_option_name) + + + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP2.Session & k); + +if flag_signif==1 + roi_delay = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); + roi_response = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +elseif flag_signif==2 + roi_delay1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); + roi_delay2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); + roi_delay = unique([roi_delay1;roi_delay2],'sorted'); + roi_response1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); + roi_response2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); + roi_response = unique([roi_response1;roi_response2],'sorted'); +elseif flag_signif==3 + roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); + roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); + elseif flag_signif==4 + roi.epoch= fetchn((ANLI.TaskSignifROIsomeEpoch2 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); + +end + + +b=fetch(EXP2.BehaviorTrial & (EXP2.Session & key),'*','ORDER BY trial'); +b=struct2table(b); +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(1).lick_direction='left'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(2).lick_direction='right'; + +for i_condition = 1:numel(trials) + PV1 =[]; + PV2 =[]; + + + current_trials=trials(i_condition).tr; + for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV1(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV2(:,iTr)= mean(psth_trial(:,t_response_idx),2); + end + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + + + subplot_shift2=0; + + + if flag_signif>0 + PV1=PV1(roi.epoch,:); + PV2=PV2(roi.epoch,:); + end + PV=[PV1;PV2]; + % correlation matrix of the r across trials + r=corr(PV, 'rows', 'pairwise'); + % blanking the diagonal + diag_nan=[1:1:size(r,1)]+NaN; diag_mat = diag(diag_nan,0); + r_blanked = r + diag_mat; + + % r histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + mask = tril(true(size(r)),-1); + histogram(r(mask)); + title(sprintf('Lick %s \n',trials(i_condition).lick_direction),'FontSize',8); + xlabel('P.V. corr across trials','FontSize',8); + ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagescnan(r,[0,1]); + colormap(jet); + set(gca,'xtick',1:100:size(r,1),'ytick',1:100:size(r,1)) + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('P.V. correlation','FontSize',8); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id, mat, order]=fn_ClusterPVtrials(r); + fn_plot_cluster_mat(mat); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id, mat, order, r); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + +% % updating the cluster Table +% key_TrialCluster=[]; +% key_TrialCluster = fetch(EXP2.Session &key); +% key_TrialCluster.clustering_option_name = clustering_option_name; +% key_TrialCluster.trial_epoch_name = r.epoch_label{i_epoch}; +% key_TrialCluster = repmat(key_TrialCluster,numel(current_trials),1); +% count =hist(cl_id, 1:max(cl_id)); +% [~,idx_sort_count] = sort(count,'descend'); +% +% +% for j_tr=1:1:numel(current_trials) +% key_TrialCluster(j_tr).trial = current_trials(j_tr); +% key_TrialCluster(j_tr).trial_cluster_id = cl_id(j_tr); +% key_TrialCluster(j_tr).trial_cluster_group = find(idx_sort_count==cl_id(j_tr)); % group 1 - largest cluster, group 2 - second largest cluster etc. +% end +% +% %deleting entries in case of duplicates to be able to overwrite +% rel=fetch(ANLI.TrialCluster & key_TrialCluster); +% if ~isempty(rel) +% del(ANLI.TrialCluster&key_TrialCluster); +% end +% insert(ANLI.TrialCluster,key_TrialCluster); + + end + + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_all_sessions.m b/analysis/fn_pv_corr_all_sessions.m new file mode 100644 index 0000000..b09d763 --- /dev/null +++ b/analysis/fn_pv_corr_all_sessions.m @@ -0,0 +1,248 @@ +function fn_pv_corr_all_sessions(k, first_date, dir_save_figure, rel) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; + + + +key=k; + +key_first.session_date=first_date; +key_first=fetch(EXP2.Session & key_first); + +key.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key_first,'multiple_sessions_uid'); + +% if flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% end + + + +% k.session_date=date; +% +% key=fetch(EXP2.Session & k); +% +% if flag_signif==1 +% roi_delay = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==2 +% roi_delay1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_delay2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_delay = unique([roi_delay1;roi_delay2],'sorted'); +% roi_response1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_response = unique([roi_response1;roi_response2],'sorted'); +% elseif flag_signif==3 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==4 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==5 +% roi.epoch{1}= fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% +% end + + +b=fetch(EXP2.BehaviorTrial*EXP2.SessionTrial & (IMG.FOVmultiSessions & key),'*','ORDER BY trial_uid'); +b=struct2table(b); +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(1).lick_direction='left'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(2).lick_direction='right'; + +for i_condition = 1:numel(trials) + PV =[]; + + + current_trials=trials(i_condition).tr; + for iTr=1:1:numel(current_trials) + key.trial_uid = b.trial_uid(current_trials(iTr)); + key_trial = fetch((IMG.FOVmultiSessions*EXP2.SessionTrial & key)); + CTr = fetch(ANLI.FPSTHtrial & rel & key_trial,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); + end + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1:1:numel(PV.epoch) + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + +% if flag_signif>0 +% PV.epoch{i_epoch} = PV.epoch{i_epoch} (roi.epoch{i_epoch},:); +% end + + % correlation matrix of the PV across trials + r.epoch{i_epoch}=corr(PV.epoch{i_epoch}', 'rows', 'pairwise'); + % blanking the diagonal + diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + r_blanked = r.epoch{i_epoch} + diag_mat; + + % PV histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + mask = tril(true(size(r.epoch{i_epoch})),-1); + histogram(r.epoch{i_epoch}(mask)); + title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + xlabel('P.V. corr across trials','FontSize',8); + ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagescnan(r_blanked,[0,1]); + colormap(jet); + if size (r_blanked,1)<500 + set(gca,'xtick',[1,100:100:size(r_blanked,1)],'ytick',100:100:size(r_blanked,1)) +elseif size(r_blanked,1)>500 && size (r_blanked,1)<=1000 + set(gca,'xtick',[1,200:200:size(r_blanked,1)],'ytick',200:200:size(r_blanked,1)) +elseif size(r_blanked,1)>1000 + set(gca,'xtick',[1,500:500:size(r_blanked,1)],'ytick',500:500:size(r_blanked,1)) +end + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('P.V. correlation','FontSize',8); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id, mat, order]=fn_ClusterPVtrials(r.epoch{i_epoch}); + fn_plot_cluster_mat(mat); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id, mat, order, r.epoch{i_epoch}); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + +% % Cell by Trials PV matrix (not correlation) +% PVzscore= rescale(PV.epoch{i_epoch},'InputMin',0,'InputMax',1); +% +% +% % if size (r_mat,1)<500 +% % set(gca,'xtick',[1,100:100:size(r_mat,1)],'ytick',100:100:size(r_mat,1)) +% % elseif size(r_mat,1)>500 && size (r_mat,1)<=1000 +% % set(gca,'xtick',[1,200:200:size(r_mat,1)],'ytick',200:200:size(r_mat,1)) +% % elseif size(r_mat,1)>1000 +% % set(gca,'xtick',[1,500:500:size(r_mat,1)],'ytick',500:500:size(r_mat,1)) +% % end +% +% % colorbar +% % cluster pairwise distance of Cell by Trials PV matrix (not correlation) +% axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); +% [cl_id2, cluster_mat2, order2]=fn_ClusterPVtrials(PVzscore); +% fn_plot_cluster_mat(cluster_mat2); +% % colorbar +% +% +% axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); +% +% PV_reordered= PVzscore(order2,order); +% imagesc(PV_reordered); +% colormap(jet); +% xlabel('Trials','FontSize',8); +% ylabel('Neurons','FontSize',8); +% title('P.V.','FontSize',8); +% + + +% % updating the cluster Table +% key_TrialCluster=[]; +% key_TrialCluster = fetch(EXP2.Session &key); +% key_TrialCluster.clustering_option_name = clustering_option_name; +% key_TrialCluster.trial_epoch_name = PV.epoch_label{i_epoch}; +% key_TrialCluster = repmat(key_TrialCluster,numel(current_trials),1); +% count =hist(cl_id, 1:max(cl_id)); +% [~,idx_sort_count] = sort(count,'descend'); +% +% +% for j_tr=1:1:numel(current_trials) +% key_TrialCluster(j_tr).trial = current_trials(j_tr); +% key_TrialCluster(j_tr).trial_cluster_id = cl_id(j_tr); +% key_TrialCluster(j_tr).trial_cluster_group = find(idx_sort_count==cl_id(j_tr)); % group 1 - largest cluster, group 2 - second largest cluster etc. +% end +% +% %deleting entries in case of duplicates to be able to overwrite +% rel=fetch(ANLI.TrialCluster & key_TrialCluster); +% if ~isempty(rel) +% del(ANLI.TrialCluster&key_TrialCluster); +% end +% insert(ANLI.TrialCluster,key_TrialCluster); + + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' first_date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff']); +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_all_sessions_ensemble.m b/analysis/fn_pv_corr_all_sessions_ensemble.m new file mode 100644 index 0000000..5c77cdf --- /dev/null +++ b/analysis/fn_pv_corr_all_sessions_ensemble.m @@ -0,0 +1,273 @@ +function fn_pv_corr_all_sessions_ensemble(k, first_date, dir_save_figure, rel) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; + + + +key=k; + +key_first.session_date=first_date; +key_first=fetch(EXP2.Session & key_first); + +key.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key_first,'multiple_sessions_uid'); + +% if flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% end + + + +% k.session_date=date; +% +% key=fetch(EXP2.Session & k); +% +% if flag_signif==1 +% roi_delay = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==2 +% roi_delay1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_delay2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_delay = unique([roi_delay1;roi_delay2],'sorted'); +% roi_response1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_response = unique([roi_response1;roi_response2],'sorted'); +% elseif flag_signif==3 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==4 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==5 +% roi.epoch{1}= fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% +% end + + +b=fetch(EXP2.BehaviorTrial*EXP2.SessionTrial & (IMG.FOVmultiSessions & key) & 'early_lick="no early"' & 'outcome="hit"','*','ORDER BY trial_uid'); +b=struct2table(b); +% trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(1).lick_direction='left'; +% trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + + +% trials(1).tr = find( contains(b.early_lick,'no early')); +% trials(1).lick_direction='all'; + +% trials(1).tr + +PV =[]; + + +% current_trials=trials(i_condition).tr; +current_trials=[b.trial]; + for iTr=1:1:numel(current_trials) + key.trial_uid = b.trial_uid(current_trials(iTr)); + key_trial = fetch((IMG.FOVmultiSessions*EXP2.SessionTrial & key)); + CTr = fetch(ANLI.FPSTHtrial & rel & key_trial,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); + end + +for i_condition = 1%1:numel(trials) + PV_current=[]; + r =[]; + r_mat_trials=[]; + r_mat_cells=[]; + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1%:1:numel(PV.epoch) + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + + % correlation matrix of the PV across trials +% PV_current =PV.epoch{i_epoch}; + PV_current = [PV.epoch{1},PV.epoch{2}]; + + for i_c=1:1:size(PV_current,1) + z=zscore( PV_current(i_c,:)); + PV_current(i_c,:)= z>1; %binarizing + end + + +% PV_current= PV_current(:,trials(i_condition).tr); + + r_mat_trials=corr(PV_current, 'rows', 'pairwise'); + r_mat_cells=corr(PV_current', 'rows', 'pairwise'); + + r_mat_trials(isnan(r_mat_trials))=0; + r_mat_cells(isnan(r_mat_cells))=0; + + % % blanking the diagonal + % diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + % r_mat = r.epoch{i_epoch} + diag_mat; + % + % r_blanked = r.epoch{i_epoch}; + + %% Clustering Cells + + % % PV histogram + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + % mask = tril(true(size(r_mat_trials)),-1); + % histogram(r_mat_trials(mask)); + % title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + % xlabel('Trial correlations between cell pairs','FontSize',8); + % ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagesc(r_mat_cells,[0,1]); + colormap(jet); + xlabel('Cells','FontSize',8); + ylabel('Cells','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id_cells, cluster_mat_cells, order_cells]=fn_ClusterPVtrials(r_mat_cells); + fn_plot_cluster_mat(cluster_mat_cells); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_cells, cluster_mat_cells, order_cells, r_mat_cells); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + %% Clustering trials + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); + imagesc(r_mat_trials,[0,1]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(4)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); + [cl_id_trials, cluster_mat_trials, order_trials]=fn_ClusterPVtrials(r_mat_trials); + fn_plot_cluster_mat(cluster_mat_trials); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(5) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_trials, cluster_mat_trials, order_trials, r_mat_trials); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(5)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + PV_reordered= PV_current(order_cells,order_trials); + imagesc(PV_reordered,[0,2]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Cells','FontSize',8); + title('P.V. clustered','FontSize',8); + + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' first_date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff']); +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_all_sessions_xWeights.m b/analysis/fn_pv_corr_all_sessions_xWeights.m new file mode 100644 index 0000000..36d5fd7 --- /dev/null +++ b/analysis/fn_pv_corr_all_sessions_xWeights.m @@ -0,0 +1,221 @@ +function fn_pv_corr_all_sessions_xWeights(k, first_date, dir_save_figure, rel ,mode_name) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; + + + +key=k; + +key_first.session_date=first_date; +key_first=fetch(EXP2.Session & key_first); + +key.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key_first,'multiple_sessions_uid'); + +% if flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key_first, 'roi_number', 'ORDER BY roi_number'); +% end + + + +% k.session_date=date; +% +% key=fetch(EXP2.Session & k); +% +% if flag_signif==1 +% roi_delay = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==2 +% roi_delay1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="LateDelay"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_delay2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_delay = unique([roi_delay1;roi_delay2],'sorted'); +% roi_response1 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Movement"' & 'task_signif_pval <=0.05', 'roi_number', 'ORDER BY roi_number'); +% roi_response2 = fetchn((ANLI.TaskSignifROI- IMG.ExcludeROI) & key & 'task_signif_name="Ramping"' & 'task_signif_pval <=0.0001', 'roi_number', 'ORDER BY roi_number'); +% roi_response = unique([roi_response1;roi_response2],'sorted'); +% elseif flag_signif==3 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==4 +% roi.epoch{1}= fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn((ANLI.TaskSignifROIsomeEpoch3 - IMG.ExcludeROI) & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==5 +% roi.epoch{1}= fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROI2 & key, 'roi_number', 'ORDER BY roi_number'); +% elseif flag_signif==6 +% roi.epoch{1}= fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% roi.epoch{2} = fetchn(ANLI.IncludeROImultiSession2intersect & key, 'roi_number', 'ORDER BY roi_number'); +% +% end + + +b=fetch(EXP2.BehaviorTrial*EXP2.SessionTrial & (IMG.FOVmultiSessions & key),'*','ORDER BY trial_uid'); +b=struct2table(b); +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(1).lick_direction='left'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(2).lick_direction='right'; + +for i_condition = 1:numel(trials) + PV =[]; + + + current_trials=trials(i_condition).tr; + for iTr=1:1:numel(current_trials) + key.trial_uid = b.trial_uid(current_trials(iTr)); + key_trial = fetch((IMG.FOVmultiSessions*EXP2.SessionTrial & key)); + CTr = fetch(ANLI.FPSTHtrial & rel & key_trial,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + + key_mode=fetch(EXP2.SessionTrial & key); + key_mode.mode_type_name = mode_name; + w=fetchn(ANLI.Mode & rel & key_mode,'mode_unit_weight', 'ORDER BY roi_number'); + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2).*abs(w); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2).*abs(w); + + end + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1:1:numel(PV.epoch) + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + +% if flag_signif>0 +% PV.epoch{i_epoch} = PV.epoch{i_epoch} (roi.epoch{i_epoch},:); +% end + + % correlation matrix of the PV across trials + r.epoch{i_epoch}=corr(PV.epoch{i_epoch}, 'rows', 'pairwise'); + % blanking the diagonal + diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + r_blanked = r.epoch{i_epoch} + diag_mat; + + % PV histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + mask = tril(true(size(r.epoch{i_epoch})),-1); + histogram(r.epoch{i_epoch}(mask)); + title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + xlabel('P.V. corr across trials','FontSize',8); + ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagescnan(r_blanked,[0,1]); + colormap(jet); + if size (r_blanked,1)<500 + set(gca,'xtick',[1,100:100:size(r_blanked,1)],'ytick',100:100:size(r_blanked,1)) +elseif size(r_blanked,1)>500 && size (r_blanked,1)<=1000 + set(gca,'xtick',[1,200:200:size(r_blanked,1)],'ytick',200:200:size(r_blanked,1)) +elseif size(r_blanked,1)>1000 + set(gca,'xtick',[1,500:500:size(r_blanked,1)],'ytick',500:500:size(r_blanked,1)) +end + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('P.V. correlation','FontSize',8); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id, mat, order]=fn_ClusterPVtrials(r.epoch{i_epoch}); + fn_plot_cluster_mat(mat); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id, mat, order, r.epoch{i_epoch}); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + +% % updating the cluster Table +% key_TrialCluster=[]; +% key_TrialCluster = fetch(EXP2.Session &key); +% key_TrialCluster.clustering_option_name = clustering_option_name; +% key_TrialCluster.trial_epoch_name = PV.epoch_label{i_epoch}; +% key_TrialCluster = repmat(key_TrialCluster,numel(current_trials),1); +% count =hist(cl_id, 1:max(cl_id)); +% [~,idx_sort_count] = sort(count,'descend'); +% +% +% for j_tr=1:1:numel(current_trials) +% key_TrialCluster(j_tr).trial = current_trials(j_tr); +% key_TrialCluster(j_tr).trial_cluster_id = cl_id(j_tr); +% key_TrialCluster(j_tr).trial_cluster_group = find(idx_sort_count==cl_id(j_tr)); % group 1 - largest cluster, group 2 - second largest cluster etc. +% end +% +% %deleting entries in case of duplicates to be able to overwrite +% rel=fetch(ANLI.TrialCluster & key_TrialCluster); +% if ~isempty(rel) +% del(ANLI.TrialCluster&key_TrialCluster); +% end +% insert(ANLI.TrialCluster,key_TrialCluster); + + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' first_date '_' mode_name]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_ensemble.m b/analysis/fn_pv_corr_ensemble.m new file mode 100644 index 0000000..7fc35f0 --- /dev/null +++ b/analysis/fn_pv_corr_ensemble.m @@ -0,0 +1,319 @@ +function fn_pv_corr_ensemble(k, date, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP.Session & k); + +b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); +b=struct2table(b); +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(1).lick_direction='left'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early')); +% trials(1).lick_direction='all'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & ~contains(b.outcome,'ignore')); +% trials(1).lick_direction='all'; + + +% trials(1).tr = find(([contains(b.trial_instruction,'left') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'right') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(1).lick_direction='left'; +% trials(2).tr = find(([contains(b.trial_instruction,'right') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'left') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(2).lick_direction='right'; + + +PV =[]; + + +% current_trials=trials(i_condition).tr; +current_trials=[b.trial]; +for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & rel & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); +end + + +for i_condition = 1:numel(trials) + PV_current=[]; + r =[]; + r_mat_trials=[]; + r_mat_cells=[]; + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1:1:numel(PV.epoch) + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + + + % correlation matrix of the PV across trials + PV_current =PV.epoch{i_epoch}; + % mean_response = mean(PV_current,2); + % for i_c=1:1:size(PV_current,1) + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + % end + % PV_current= rescale(PV_current,'InputMin',0,'InputMax',1); + + + % mean_response = mean(PV_current,2); + for i_c=1:1:size(PV_current,1) + z=zscore( PV_current(i_c,:)); + PV_current(i_c,:)= z>1; %binarizing + + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + end + + + PV_current= PV_current(:,trials(i_condition).tr); + + r_mat_trials=corr(PV_current, 'rows', 'pairwise'); + r_mat_cells=corr(PV_current', 'rows', 'pairwise'); + + r_mat_trials(isnan(r_mat_trials))=0; + r_mat_cells(isnan(r_mat_cells))=0; + + % % blanking the diagonal + % diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + % r_mat = r.epoch{i_epoch} + diag_mat; + % + % r_blanked = r.epoch{i_epoch}; + + %% Clustering Cells + + % % PV histogram + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + % mask = tril(true(size(r_mat_trials)),-1); + % histogram(r_mat_trials(mask)); + % title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + % xlabel('Trial correlations between cell pairs','FontSize',8); + % ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagesc(r_mat_cells,[0,1]); + colormap(jet); + xlabel('Cells','FontSize',8); + ylabel('Cells','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id_cells, cluster_mat_cells, order_cells]=fn_ClusterPVtrials(r_mat_cells); + fn_plot_cluster_mat(cluster_mat_cells); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_cells, cluster_mat_cells, order_cells, r_mat_cells); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + %% Clustering trials + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); + imagesc(r_mat_trials,[0,1]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(4)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); + [cl_id_trials, cluster_mat_trials, order_trials]=fn_ClusterPVtrials(r_mat_trials); + fn_plot_cluster_mat(cluster_mat_trials); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(5) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_trials, cluster_mat_trials, order_trials, r_mat_trials); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(5)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + % mean_response = mean(PV_current,2); + % for i_c=1:1:size(PV_current,1) + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + % end + + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + PV_reordered= PV_current(order_cells,order_trials); + imagesc(PV_reordered,[0 2]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Cells','FontSize',8); + title('P.V. clustered','FontSize',8); + + + % % Cell by Trials PV matrix (not correlation) + % PVzscore= rescale(PV.epoch{i_epoch},'InputMin',0,'InputMax',1); + + + % if size (r_mat,1)<500 + % set(gca,'xtick',[1,100:100:size(r_mat,1)],'ytick',100:100:size(r_mat,1)) + % elseif size(r_mat,1)>500 && size (r_mat,1)<=1000 + % set(gca,'xtick',[1,200:200:size(r_mat,1)],'ytick',200:200:size(r_mat,1)) + % elseif size(r_mat,1)>1000 + % set(gca,'xtick',[1,500:500:size(r_mat,1)],'ytick',500:500:size(r_mat,1)) + % end + % + % % colorbar + % % cluster pairwise distance of Cell by Trials PV matrix (not correlation) + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); + % [cl_id2, cluster_mat2, order2]=fn_ClusterPVtrials(PVzscore); + % fn_plot_cluster_mat(cluster_mat2); + % % colorbar + % + % + % r_trials=corr(PV.epoch{i_epoch}, 'rows', 'pairwise'); + % [~, ~, order_trials]=fn_ClusterPVtrials(r_trials); + % + % + % + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); + % + % PV_reordered= PVzscore(order,order_trials); + % imagesc(PV_reordered); + % colormap(jet); + % xlabel('Trials','FontSize',8); + % ylabel('Neurons','FontSize',8); + % title('P.V.','FontSize',8); + % + + + if flag_update_cluster_group_table~=0 + + + % updating the cluster Table + key_TrialCluster=[]; + key_TrialCluster = fetch(EXP.Session &key); + key_TrialCluster.clustering_option_name = clustering_option_name; + key_TrialCluster.trial_epoch_name = PV.epoch_label{i_epoch}; + key_TrialCluster = repmat(key_TrialCluster,numel(current_trials),1); + count =hist(cl_id, 1:max(cl_id)); + [~,idx_sort_count] = sort(count,'descend'); + + + for j_tr=1:1:numel(current_trials) + key_TrialCluster(j_tr).trial = current_trials(j_tr); + key_TrialCluster(j_tr).trial_cluster_id = cl_id(j_tr); + key_TrialCluster(j_tr).trial_cluster_group = find(idx_sort_count==cl_id(j_tr)); % group 1 - largest cluster, group 2 - second largest cluster etc. + end + + %deleting entries in case of duplicates to be able to overwrite + rel=fetch(ANLI.TrialCluster & key_TrialCluster); + if ~isempty(rel) + del(ANLI.TrialCluster&key_TrialCluster); + end + insert(ANLI.TrialCluster,key_TrialCluster); + end + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -r600']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_ensemble_extraction.m b/analysis/fn_pv_corr_ensemble_extraction.m new file mode 100644 index 0000000..c1b0ec2 --- /dev/null +++ b/analysis/fn_pv_corr_ensemble_extraction.m @@ -0,0 +1,322 @@ +function fn_pv_corr_ensemble_extraction(k, date, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.12; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.23; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP.Session & k); + +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"' & 'outcome="hit"','*','ORDER BY trial'); +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); +b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"' & 'outcome="hit"' & 'trial_instruction="right"' ,'*','ORDER BY trial'); + +b=struct2table(b); +% trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(1).lick_direction='left'; +% trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early')); +% trials(1).lick_direction='all'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & ~contains(b.outcome,'ignore')); +% trials(1).lick_direction='all'; + + +% trials(1).tr = find(([contains(b.trial_instruction,'left') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'right') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(1).lick_direction='left'; +% trials(2).tr = find(([contains(b.trial_instruction,'right') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'left') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(2).lick_direction='right'; + + +PV =[]; + +roi_list = fetchn(IMG.ROI & rel & key, 'roi_number', 'ORDER BY roi_number'); +% current_trials=trials(i_condition).tr; +current_trials=[b.trial]; +for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & rel & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); +end + + +for i_condition = 1%1:1:numel(trials) + PV_current=[]; + r =[]; + r_mat_trials=[]; + r_mat_cells=[]; + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + + for i_epoch=1 +% PV.epoch_label{i_epoch} = epoch_label{i_epoch}; +% PV.epoch_label{i_epoch} = epoch_label{i_epoch}; + + subplot_shift2=0; + if i_epoch == 2 + subplot_shift2=2; + end + + + % correlation matrix of the PV across trials + PV_current = [PV.epoch{1},PV.epoch{2}]; + + + % mean_response = mean(PV_current,2); + % for i_c=1:1:size(PV_current,1) + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + % end + % PV_current= rescale(PV_current,'InputMin',0,'InputMax',1); + + + % mean_response = mean(PV_current,2); + for i_c=1:1:size(PV_current,1) + z=zscore( PV_current(i_c,:)); + PV_current(i_c,:)= z>1; %binarizing + + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + end + + +% PV_current= PV_current(:,trials(i_condition).tr); + + r_mat_trials=corr(PV_current, 'rows', 'pairwise'); + r_mat_cells=corr(PV_current', 'rows', 'pairwise'); + + r_mat_trials(isnan(r_mat_trials))=0; + r_mat_cells(isnan(r_mat_cells))=0; + + % % blanking the diagonal + % diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + % r_mat = r.epoch{i_epoch} + diag_mat; + % + % r_blanked = r.epoch{i_epoch}; + + %% Clustering Cells + + % % PV histogram + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + % mask = tril(true(size(r_mat_trials)),-1); + % histogram(r_mat_trials(mask)); + % title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + % xlabel('Trial correlations between cell pairs','FontSize',8); + % ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(2) panel_width1 panel_height1]); + imagesc(r_mat_cells,[0,1]); + colormap(jet); + xlabel('Cells','FontSize',8); + ylabel('Cells','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(3) panel_width1 panel_height1]); + [cl_id_cells, cluster_mat_cells, order_cells]=fn_ClusterPVtrials(r_mat_cells); + fn_plot_cluster_mat(cluster_mat_cells); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(3) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_cells, cluster_mat_cells, order_cells, r_mat_cells); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + %% Clustering trials + + % correlation matrix + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); + imagesc(r_mat_trials,[0,1]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(4)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); + [cl_id_trials, cluster_mat_trials, order_trials]=fn_ClusterPVtrials(r_mat_trials); + fn_plot_cluster_mat(cluster_mat_trials); + + + % cluster pairwise histogram + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.12 position_y1(5) panel_width1/2.5 panel_height1]); + fn_plot_cluster_hist(cl_id_trials, cluster_mat_trials, order_trials, r_mat_trials); + + %colorbar + if i_condition==1 + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2)+0.13 position_y1(5)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + % mean_response = mean(PV_current,2); + % for i_c=1:1:size(PV_current,1) + % PV_current(i_c,:)= PV_current(i_c,:)>=mean_response(i_c); %binarizing + % end + + axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + PV_reordered= PV_current(order_cells,order_trials); + imagesc(PV_reordered,[0 2]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Cells','FontSize',8); + title('P.V. clustered','FontSize',8); + + + % % Cell by Trials PV matrix (not correlation) + % PVzscore= rescale(PV.epoch{i_epoch},'InputMin',0,'InputMax',1); + + + % if size (r_mat,1)<500 + % set(gca,'xtick',[1,100:100:size(r_mat,1)],'ytick',100:100:size(r_mat,1)) + % elseif size(r_mat,1)>500 && size (r_mat,1)<=1000 + % set(gca,'xtick',[1,200:200:size(r_mat,1)],'ytick',200:200:size(r_mat,1)) + % elseif size(r_mat,1)>1000 + % set(gca,'xtick',[1,500:500:size(r_mat,1)],'ytick',500:500:size(r_mat,1)) + % end + % + % % colorbar + % % cluster pairwise distance of Cell by Trials PV matrix (not correlation) + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(5) panel_width1 panel_height1]); + % [cl_id2, cluster_mat2, order2]=fn_ClusterPVtrials(PVzscore); + % fn_plot_cluster_mat(cluster_mat2); + % % colorbar + % + % + % r_trials=corr(PV.epoch{i_epoch}, 'rows', 'pairwise'); + % [~, ~, order_trials]=fn_ClusterPVtrials(r_trials); + % + % + % + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(4) panel_width1 panel_height1]); + % + % PV_reordered= PVzscore(order,order_trials); + % imagesc(PV_reordered); + % colormap(jet); + % xlabel('Trials','FontSize',8); + % ylabel('Neurons','FontSize',8); + % title('P.V.','FontSize',8); + % + + + if flag_update_cluster_group_table~=0 + + + % updating the cluster Table + key_ROICluster=[]; + key_ROICluster = fetch(IMG.FOV &key); + key_ROICluster.trial_epoch_name ='delay and response'; + key_ROICluster.clustering_option_name=clustering_option_name; + key_ROICluster = repmat(key_ROICluster,numel(roi_list),1); + + + + for j_c=1:1:numel(roi_list) + key_ROICluster(j_c).roi_number = roi_list(j_c); + key_ROICluster(j_c).roi_cluster_id = cl_id_cells(j_c); + end + + %deleting entries in case of duplicates to be able to overwrite + rel=fetch(ANLI.ROICluster & key_ROICluster); + if ~isempty(rel) + del(ANLI.ROICluster&key_ROICluster); + end + insert(ANLI.ROICluster,key_ROICluster); + end + end +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -r600']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_ensemble_extraction_avg_correlation_mps.m b/analysis/fn_pv_corr_ensemble_extraction_avg_correlation_mps.m new file mode 100644 index 0000000..f0164c8 --- /dev/null +++ b/analysis/fn_pv_corr_ensemble_extraction_avg_correlation_mps.m @@ -0,0 +1,285 @@ +function fn_pv_corr_ensemble_extraction_avg_correlation_mps(k, date, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.1; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.2; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; +position_x1(5)=position_x1(4)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP.Session & k); + +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"' & 'outcome="hit"','*','ORDER BY trial'); +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); +b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); + +b=struct2table(b); + +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit')); +trials(1).label='left hit'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit')); +trials(2).label='right hit'; +trials(3).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'miss')); +trials(3).label='left miss'; +trials(4).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'miss')); +trials(4).label='right miss'; + + +% trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(1).lick_direction='left'; +% trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early')); +% trials(1).lick_direction='all'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & ~contains(b.outcome,'ignore')); +% trials(1).lick_direction='all'; + + +% trials(1).tr = find(([contains(b.trial_instruction,'left') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'right') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(1).lick_direction='left'; +% trials(2).tr = find(([contains(b.trial_instruction,'right') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'left') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(2).lick_direction='right'; + + +PV =[]; + +roi_list = fetchn(IMG.ROI & rel & key, 'roi_number', 'ORDER BY roi_number'); +% current_trials=trials(i_condition).tr; +current_trials=[b.trial]; +for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & rel & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); +end + +PV_all = [PV.epoch{1},PV.epoch{2}]; + for i_c=1:1:size(PV_all,1) + z=zscore( PV_all(i_c,:)); + PV_all(i_c,:)= z>1; %binarizing +end + +for i_condition = 1:1:(numel(trials)+1) + PV_current=[]; + r =[]; + r_mat_trials=[]; + r_mat_cells=[]; + + subplot_shift1=0; + if i_condition == 2 + subplot_shift1=1; + end + + + if i_condition<=numel(trials) + + PV_current = [PV_all(:,trials(i_condition).tr),PV_all(:,trials(i_condition).tr+size(PV.epoch{2},2))]; + r_mat_cells=corr(PV_current', 'rows', 'pairwise'); + + else + PV_current =PV_all; + r_mat_cells = squeeze(mean(r_mat_cells_conditions,1)); + end + + % correlation matrix of the PV across trials + + + + r_mat_trials=corr(PV_current, 'rows', 'pairwise'); + + r_mat_trials(isnan(r_mat_trials))=0; + r_mat_cells(isnan(r_mat_cells))=0; + + % % blanking the diagonal + % diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + % r_mat = r.epoch{i_epoch} + diag_mat; + % + % r_blanked = r.epoch{i_epoch}; + + %% Clustering Cells + + % % PV histogram + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + % mask = tril(true(size(r_mat_trials)),-1); + % histogram(r_mat_trials(mask)); + % title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + % xlabel('Trial correlations between cell pairs','FontSize',8); + % ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(i_condition) position_y1(2) panel_width1 panel_height1]); + imagesc(r_mat_cells,[0,1]); + colormap(jet); + xlabel('Cells','FontSize',8); + ylabel('Cells','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(i_condition)+0.09 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(i_condition) position_y1(3) panel_width1 panel_height1]); + [cl_id_cells, cluster_mat_cells, order_cells]=fn_ClusterPVtrials(r_mat_cells); + fn_plot_cluster_mat(cluster_mat_cells); + + + % cluster pairwise histogram + axes('position',[position_x1(i_condition)+0.09 position_y1(3) panel_width1/3 panel_height1]); + fn_plot_cluster_hist(cl_id_cells, cluster_mat_cells, order_cells, r_mat_cells); + + %colorbar + if i_condition==1 + axes('position',[position_x1(i_condition)+0.09 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + %% Clustering trials + + % correlation matrix + axes('position',[position_x1(i_condition) position_y1(4) panel_width1 panel_height1]); + imagesc(r_mat_trials,[0,1]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(i_condition)+0.09 position_y1(4)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(i_condition) position_y1(5) panel_width1 panel_height1]); + [cl_id_trials, cluster_mat_trials, order_trials]=fn_ClusterPVtrials(r_mat_trials); + fn_plot_cluster_mat(cluster_mat_trials); + + + % cluster pairwise histogram + axes('position',[position_x1(i_condition)+0.09 position_y1(5) panel_width1/3 panel_height1]); + fn_plot_cluster_hist(cl_id_trials, cluster_mat_trials, order_trials, r_mat_trials); + + %colorbar + if i_condition==1 + axes('position',[position_x1(i_condition)+0.09 position_y1(5)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + axes('position',[position_x1(i_condition) position_y1(1) panel_width1 panel_height1]); + PV_reordered= PV_current(order_cells,order_trials); + imagesc(PV_reordered,[0 2]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Cells','FontSize',8); + if i_condition>numel(trials) + title(sprintf('P.V. clustered \n all trials\n avg correlations'),'FontSize',8); + else + title(sprintf('P.V. clustered \n%s',trials(i_condition).label),'FontSize',8); + end + + r_mat_cells_conditions(i_condition,:,:) = r_mat_cells; + + + if flag_update_cluster_group_table~=0 && i_condition>numel(trials) + + + % updating the cluster Table + key_ROICluster=[]; + key_ROICluster = fetch(IMG.FOV &key); + key_ROICluster.trial_epoch_name ='delay and response'; + key_ROICluster.clustering_option_name=clustering_option_name; + key_ROICluster = repmat(key_ROICluster,numel(roi_list),1); + + + + for j_c=1:1:numel(roi_list) + key_ROICluster(j_c).roi_number = roi_list(j_c); + key_ROICluster(j_c).roi_cluster_id = cl_id_cells(j_c); + end + + %deleting entries in case of duplicates to be able to overwrite + rel=fetch(ANLI.ROICluster & key_ROICluster); + if ~isempty(rel) + del(ANLI.ROICluster&key_ROICluster); + end + insert(ANLI.ROICluster,key_ROICluster); + end +end + + + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -r600']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + +clf; +end \ No newline at end of file diff --git a/analysis/fn_pv_corr_ensemble_extraction_avg_mps_conditions.m b/analysis/fn_pv_corr_ensemble_extraction_avg_mps_conditions.m new file mode 100644 index 0000000..cd90fc6 --- /dev/null +++ b/analysis/fn_pv_corr_ensemble_extraction_avg_mps_conditions.m @@ -0,0 +1,302 @@ +function fn_pv_corr_ensemble_extraction_avg_mps_conditions(k, date, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) + + +epoch_label={'delay','response'}; + +% FIGURE +%-------------------------------------------------------------------------- +% Some WYSIWYG options: +figure; + +set(gcf,'DefaultAxesFontSize',7); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0.5 0.5 21 29.7]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[0 0 0 0]); + +panel_width1=0.06; +panel_height1=panel_width1*0.7071; +horizontal_distance1=0.1; +vertical_distance1=0.15; + + +position_x1(1)=0.06; +position_x1(2)=position_x1(1)+horizontal_distance1; +position_x1(3)=position_x1(2)+horizontal_distance1; +position_x1(4)=position_x1(3)+horizontal_distance1; +position_x1(5)=position_x1(4)+horizontal_distance1; +position_x1(6)=position_x1(5)+horizontal_distance1; +position_x1(7)=position_x1(6)+horizontal_distance1; +position_x1(8)=position_x1(7)+horizontal_distance1; +position_x1(9)=position_x1(8)+horizontal_distance1; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; + + + +k.session_date=date; + +key=fetch(EXP.Session & k); + +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"' & 'outcome="hit"','*','ORDER BY trial'); +% b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); +b=fetch(EXP.BehaviorTrial & (EXP.Session & key) & 'early_lick="no early"','*','ORDER BY trial'); + +b=struct2table(b); + +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit')); +trials(1).label='left hit'; +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit')); +trials(2).label='right hit'; +trials(3).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'miss')); +trials(3).label='left miss'; +trials(4).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'miss')); +trials(4).label='right miss'; + + +% trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(1).lick_direction='left'; +% trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit') & contains(b.early_lick,'no early')); +% trials(2).lick_direction='right'; + +% trials(1).tr = find( contains(b.early_lick,'no early')); +% trials(1).lick_direction='all'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & contains(b.outcome,'hit')); +% trials(1).lick_direction='hit'; +% trials(2).tr = find(contains(b.early_lick,'no early') & contains(b.outcome,'miss')); +% trials(2).lick_direction='miss'; + +% trials(1).tr = find( contains(b.early_lick,'no early') & ~contains(b.outcome,'ignore')); +% trials(1).lick_direction='all'; + + +% trials(1).tr = find(([contains(b.trial_instruction,'left') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'right') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(1).lick_direction='left'; +% trials(2).tr = find(([contains(b.trial_instruction,'right') & contains(b.outcome,'hit')] | [contains(b.trial_instruction,'left') & contains(b.outcome,'miss')]) & contains(b.early_lick,'no early') ); +% trials(2).lick_direction='right'; + + +PV =[]; + +roi_list = fetchn(IMG.ROI & rel & key, 'roi_number', 'ORDER BY roi_number'); +% current_trials=trials(i_condition).tr; +current_trials=[b.trial]; +for iTr=1:1:numel(current_trials) + key.trial = current_trials(iTr); + CTr = fetch(ANLI.FPSTHtrial & rel & key,'*', 'ORDER BY roi_number'); + CTr=struct2table(CTr); + t=CTr.psth_timestamps(1,:); + time_sample_end= CTr.time_sample_end(1); + t_delay_idx= t>=time_sample_end & t<0; + t_response_idx= t>=0 & t<2; + psth_trial =CTr.psth_trial; + PV.epoch{1}(:,iTr)= mean(psth_trial(:,t_delay_idx),2); + PV.epoch{2}(:,iTr)= mean(psth_trial(:,t_response_idx),2); +end + +PV_all = [PV.epoch{1},PV.epoch{2}]; +for i_c=1:1:size(PV_all,1) + z=zscore( PV_all(i_c,:)); + PV_all(i_c,:)= z>1; %binarizing +end + +PV.epoch{1}=PV_all(:,1:size(PV.epoch{1},2)); +PV.epoch{2}=PV_all(:,size(PV.epoch{1},2)+1:size(PV_all,2)); + + + +counter=1; +for i_epoch = 1:1:(numel(epoch_label)+1) + for i_condition = 1:1:numel(trials) + + if (counter - numel(trials)*numel(epoch_label))>1 + continue + end + + PV_current=[]; + r =[]; + r_mat_trials=[]; + r_mat_cells=[]; + + + if (counter - numel(trials)*numel(epoch_label))<=0 + + PV_current =PV.epoch{i_epoch}(:,trials(i_condition).tr); + r_mat_cells=corr(PV_current', 'rows', 'pairwise'); + + elseif (counter - numel(trials)*numel(epoch_label))>=1 + PV_current =PV_all; + r_mat_cells = squeeze(mean(r_mat_cells_conditions,1)); + end + + % correlation matrix of the PV across trials + + + + r_mat_trials=corr(PV_current, 'rows', 'pairwise'); + + r_mat_trials(isnan(r_mat_trials))=0; + r_mat_cells(isnan(r_mat_cells))=0; + + % % blanking the diagonal + % diag_nan=[1:1:size(r.epoch{i_epoch},1)]+NaN; diag_mat = diag(diag_nan,0); + % r_mat = r.epoch{i_epoch} + diag_mat; + % + % r_blanked = r.epoch{i_epoch}; + + %% Clustering Cells + + % % PV histogram + % axes('position',[position_x1(1+subplot_shift1 + subplot_shift2) position_y1(1) panel_width1 panel_height1]); + % mask = tril(true(size(r_mat_trials)),-1); + % histogram(r_mat_trials(mask)); + % title(sprintf('Lick %s \n %s',trials(i_condition).lick_direction, PV.epoch_label{i_epoch}),'FontSize',8); + % xlabel('Trial correlations between cell pairs','FontSize',8); + % ylabel('Counts','FontSize',8); + + % correlation matrix + axes('position',[position_x1(counter) position_y1(2) panel_width1 panel_height1]); + imagesc(r_mat_cells,[0,1]); + colormap(jet); + xlabel('Cells','FontSize',8); + ylabel('Cells','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(counter)+0.05 position_y1(2)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(counter) position_y1(3) panel_width1 panel_height1]); + [cl_id_cells, cluster_mat_cells, order_cells]=fn_ClusterPVtrials(r_mat_cells); + fn_plot_cluster_mat(cluster_mat_cells); + + + % cluster pairwise histogram + axes('position',[position_x1(counter)+0.05 position_y1(3) panel_width1/3 panel_height1]); + fn_plot_cluster_hist(cl_id_cells, cluster_mat_cells, order_cells, r_mat_cells); + + %colorbar + if i_condition==1 + axes('position',[position_x1(counter)+0.05 position_y1(3)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + %% Clustering trials + + % correlation matrix + axes('position',[position_x1(counter) position_y1(4) panel_width1 panel_height1]); + imagesc(r_mat_trials,[0,1]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Trials','FontSize',8); + title('Correlation','FontSize',8); + axis equal + axis tight; + + %colorbar + if i_condition==1 + axes('position',[position_x1(counter)+0.05 position_y1(4)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + % cluster pairwise distance + axes('position',[position_x1(counter) position_y1(5) panel_width1 panel_height1]); + [cl_id_trials, cluster_mat_trials, order_trials]=fn_ClusterPVtrials(r_mat_trials); + fn_plot_cluster_mat(cluster_mat_trials); + + + % cluster pairwise histogram + axes('position',[position_x1(counter)+0.05 position_y1(5) panel_width1/3 panel_height1]); + fn_plot_cluster_hist(cl_id_trials, cluster_mat_trials, order_trials, r_mat_trials); + + %colorbar + if i_condition==1 + axes('position',[position_x1(counter)+0.05 position_y1(5)-0.05 panel_width1/3 panel_height1]); + c=colorbar; + set(c,'Location','southoutside'); + axis off; + box off; + end + + + axes('position',[position_x1(counter) position_y1(1) panel_width1 panel_height1]); + PV_reordered= PV_current(order_cells,order_trials); + imagesc(PV_reordered,[0 2]); + colormap(jet); + xlabel('Trials','FontSize',8); + ylabel('Cells','FontSize',8); + if (counter - numel(trials)*numel(epoch_label))>=1 + title(sprintf('P.V. clustered \n all trials \navg correlations'),'FontSize',8); + else + title(sprintf('P.V. clustered \n%s\n%s',epoch_label{i_epoch},trials(i_condition).label),'FontSize',8); + end + + r_mat_cells_conditions(counter,:,:) = r_mat_cells; + + + + + if flag_update_cluster_group_table~=0 && (counter - numel(trials)*numel(epoch_label))>=1 + + + % updating the cluster Table + key_ROICluster=[]; + key_ROICluster = fetch(IMG.FOV &key); + key_ROICluster.trial_epoch_name ='delay and response'; + key_ROICluster.clustering_option_name=clustering_option_name; + key_ROICluster = repmat(key_ROICluster,numel(roi_list),1); + + + + for j_c=1:1:numel(roi_list) + key_ROICluster(j_c).roi_number = roi_list(j_c); + key_ROICluster(j_c).roi_cluster_id = cl_id_cells(j_c); + end + + %deleting entries in case of duplicates to be able to overwrite + rel=fetch(ANLI.ROICluster & key_ROICluster); + if ~isempty(rel) + del(ANLI.ROICluster&key_ROICluster); + end + insert(ANLI.ROICluster,key_ROICluster); + end + + + counter=counter+1; + + end + +end + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['pv_' date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -r600']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + +clf; +end \ No newline at end of file diff --git a/analysis/graph/graph_analysis.m b/analysis/graph/graph_analysis.m new file mode 100644 index 0000000..73cfa3d --- /dev/null +++ b/analysis/graph/graph_analysis.m @@ -0,0 +1,173 @@ +function graph_analysis() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\graph_analysis\']; + +key.subject_id = 445105; +key.session =3; +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +key.session_epoch_number = epoch_list(end); % to take the photostim groups from +rel=STIM.ROIResponse50; + +GRAPH=fetch(STIM.ROIGraph2 & key,'*'); + + +p_val_threshold =0.001; +minimal_distance =30; %in microns + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +minimal_distance = minimal_distance/pix2dist; % in pixels + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.12; +panel_height=0.12; +horizontal_distance=0.18; +vertical_distance=0.18; + +position_x(1)=0.07; +position_x(end+1)=position_x(end) + horizontal_distance+0.19; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.8; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['graph_stats' num2str(key.session) '_' session_date ]; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +% Creating a Graph +M=GRAPH.mat_response_mean; + +M = M - diag(diag(M)); %setting diagonal values to 0 +M(GRAPH.mat_response_pval>p_val_threshold)=0; +M(GRAPH.mat_distance<=minimal_distance)=0; + +G = digraph(M); +LWidths = 5*abs(G.Edges.Weight)/max(abs(G.Edges.Weight)); + +%% Out degree +subplot(2,2,1); +hold on +D = outdegree(G); + +hist_bins = linspace(0,max(D),7); +hist_bins_centers = hist_bins(1:end-1) + mean(diff(hist_bins))/2; + +[D_prob]=histcounts(D,hist_bins); +D_prob=D_prob./length(D); +loglog(log10(hist_bins_centers),log10(D_prob),'.-b'); +xlabel('Log (In Degree)') +ylabel('Log (Probability)') + + +D_poisson = poissrnd(mean(D),1000*numel(D),1); +[poisson_prob]=histcounts(D_poisson,hist_bins); +poisson_prob=poisson_prob./(1000*numel(D)); +loglog(log10(hist_bins_centers),log10(poisson_prob),'.-g'); +text(0,0,'ALM','Color',[0 0 1]); +text(0,-0.25,'Random Network (Erdos-Renye)','Color',[0 1 0]); +set(gca,'FontSize',12); + +%% In degree +subplot(2,2,2); +hold on +D = indegree(G); + +hist_bins = linspace(0,max(D),7); +hist_bins_centers = hist_bins(1:end-1) + mean(diff(hist_bins))/2; + +[D_prob]=histcounts(D,hist_bins); +D_prob=D_prob./length(D); +loglog(log10(hist_bins_centers),log10(D_prob),'.-b'); +xlabel('Log (In Degree)') +ylabel('Log (Probability)') + +D_poisson = poissrnd(mean(D),1000*numel(D),1); +[poisson_prob]=histcounts(D_poisson,hist_bins); +poisson_prob=poisson_prob./(1000*numel(D)); +loglog(log10(hist_bins_centers),log10(poisson_prob),'.-g'); +set(gca,'FontSize',12); + + +%% In vs out degree +subplot(2,2,3); +Din = indegree(G); +Dout = outdegree(G); + +plot(Dout+rand(size(Dout)),Din+rand(size(Din)),'.') +r=corr([Dout,Din]) +r=r(2); +xlabel('Out Degree') +ylabel('In Degree') +title(sprintf('r = %.2f',r)); +set(gca,'FontSize',12); + +% %% cluster coeff +% subplot(2,2,4) +% [C1,C2, C] = clustCoeff(M); +% % loglog(log10(Dout),log10(C+abs(rand(size(Dout))/1000)),'.b'); +% plot(Dout+rand(size(Dout)),C+rand(size(Dout))/1000,'.') + + + +% %% out degree all neurons +% subplot(2,2,4) +% hold on +% group_list = fetchn(IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.38') & key,'photostim_group_num','ORDER BY photostim_group_num'); +% rel=STIM.ROIResponse50 & 'response_p_value<=0.001' & 'response_distance_pixels>30' & key; +% S=fetch(rel ,'*'); +% network_k=[]; +% for i_g=1:1:numel(group_list) +% idx=[S.photostim_group_num] ==i_g; +% network_k(i_g)=numel(S(idx)); +% end +% +% +% D = network_k; +% +% hist_bins = linspace(0,max(D),7); +% hist_bins_centers = hist_bins(1:end-1) + mean(diff(hist_bins))/2; +% +% [D_prob]=histcounts(D,hist_bins); +% D_prob=D_prob./length(D); +% loglog(log10(hist_bins_centers),log10(D_prob),'.-b'); +% xlabel('Log (In Degree)') +% ylabel('Log (Probability)') +% +% +% D_poisson = poissrnd(mean(D),1000*numel(D),1); +% [poisson_prob]=histcounts(D_poisson,hist_bins); +% poisson_prob=poisson_prob./(1000*numel(D)); +% loglog(log10(hist_bins_centers),log10(poisson_prob),'.-g'); +% text(0,0,'ALM','Color',[0 0 1]); +% text(0,-0.25,'Random Network (Erdos-Renye)','Color',[0 1 0]); +% set(gca,'FontSize',12); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/graph/network_degree.m b/analysis/graph/network_degree.m new file mode 100644 index 0000000..ab6c29c --- /dev/null +++ b/analysis/graph/network_degree.m @@ -0,0 +1,36 @@ +function network_degree() + +% close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim_traces\coupled3']; + +key.session=3; +key.session_epoch_number = 2; + +group_list = fetchn(IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.38') & key,'photostim_group_num','ORDER BY photostim_group_num'); + + S=fetch(STIM.ROIResponse1 & key & 'response_p_value<0.0001','*'); +network_k=[]; +for i_g=1:1:numel(group_list) + idx=[S.photostim_group_num] ==i_g; + network_k(i_g)=numel(S(idx)); +end + +figure +subplot(2,2,1) +hist_bins = linspace(0,max(network_k),7); +hist_bins_centers = hist_bins(1:end-1) + mean(diff(hist_bins)); +[k_prob]=histcounts(network_k,hist_bins); +k_prob=k_prob./length(network_k); +plot(hist_bins_centers,k_prob,'.-') +xlabel('Network degree of photostimulated neurons') +ylabel('Probability') + + +subplot(2,2,2) +loglog(log10(hist_bins_centers),log10(k_prob),'.-'); +% plot(log10(hist_bins_centers),log10(k_prob)) +xlabel('p k out') +ylabel('k out') + +end diff --git a/analysis/lick2D/ANALYSIS_LICK2D.m b/analysis/lick2D/ANALYSIS_LICK2D.m new file mode 100644 index 0000000..7142107 --- /dev/null +++ b/analysis/lick2D/ANALYSIS_LICK2D.m @@ -0,0 +1,22 @@ + + + + + +lick2D_map_onFOV_corr +lick2D_map_onFOV_angles +lick2D_map_onFOV_clusters +lick2D_map_onFOV_clusters_selectivity +lick2D_map_onFOV_clusters_shapeandselectivity +lick2D_map +lick2D_map_meso +lick2D_map_photostim + +lick2D_behaviorperform +lick2D_map_onFOV_clusters_shapeandselectivity_meso +lick2D_map_onFOV_clusters_shape_meso +lick2D_map_onFOV_clusters_selectivity_meso + +lick2D_local_corr_map +lick2D_map_onFOV_angles__meso +lick2D_map_onFOV_angles__meso_neuropil diff --git a/analysis/lick2D/fn_ClusterROI.m b/analysis/lick2D/fn_ClusterROI.m new file mode 100644 index 0000000..38f645a --- /dev/null +++ b/analysis/lick2D/fn_ClusterROI.m @@ -0,0 +1,180 @@ +function [cl_id, cluster_percent]=fn_ClusterROI(PTSH_RLconcat, time, key) + + +%% Load data. +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_save_figure = [dir_root 'Lick2D\Clustering\']; + +n_clust=50; + +agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them +min_cluster_percent =1; +min_cluster_agregate =10; + +corr_thresh_for_merging = 0.9; %won't merge clusters that has correlation value below that + +metric='correlation'; %euclidean or correlation +%% Hierarchical cluster analysis. +% Get distances. +d = pdist(PTSH_RLconcat,metric); + +d_sq = squareform(d); + +% Linkage. +link = linkage(d,'average'); + +% Cluster. +cl_id = cluster(link,'MaxClust',n_clust); +% temp=inconsistent(link); +% nanmax(temp(:,4)) +% cl_id = cluster(link,'cutoff',1.15); + +% Cophenetic correlation. +corr_cop = cophenet(link,d) + +% Plot Clusters dengrogram and pairwise distance +% figure; +% set(gcf,'DefaultAxesFontName','helvetica'); +% set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); +% set(gcf,'PaperOrientation','portrait'); +% set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + +panel_width=0.3; +panel_height=0.3; +horizontal_distance=0.75; +vertical_distance=0.6; + +position_x(1)=0.05; +position_x(2)=position_x(1)+horizontal_distance; +position_y(1)=0.7; +position_y(2)=position_y(1)-vertical_distance; + +% Figure Title +axes('position',[position_x(1), position_y(1)+0.1, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +% text(xl(1) + diff(xl)*0.0, yl(2)*1.8, sprintf('%s Cell-type: %s Contains: %s units' , P.anatomy, P.unit_quality, P.Pyr_FS),'HorizontalAlignment','Left','FontSize', 10); +axis off; + +% plot dengrogram +axes('position',[position_x(1), position_y(1), 0.75, 0.2]); +[h_dend bar order] = dendrogram(link,0); +set(gca,'xticklabel',[],'yticklabel',[],'xtick',[],'ytick',[]) +axis off; + +% Heatmap of pairwise distances. +axes('position',[position_x(1), position_y(2), 0.75, 0.6]); +imagesc(1-d_sq(order,order)); hold on +set(gca,'xtick',[],'ytick',[]) +xlabel('Neurons, Pairwise distance') +ylabel('Neurons, Pairwise distance') + +% Agregate clusters +cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/size(PTSH_RLconcat,1); +minor_clusters = find(cluster_percentcurrent_minor_clusters) = cl_id(cl_id>current_minor_clusters) -1; + cluster_percent=100*histcounts(cl_id,1:1:numel(unique(cl_id))+1)/size(PTSH_RLconcat,1); + minor_clusters = find(cluster_percent=min_cluster_percent); +n_clust_2plot = numel (clusters_2plot); + +[~,cluster_order] = sort (cluster_percent(clusters_2plot),'descend'); +for ii = 1:1:n_clust_2plot + i = clusters_2plot(ii); + i2plot = find(cl_id==i); + subplot(ceil(n_clust_2plot/sqrt(n_clust_2plot)),ceil(n_clust_2plot/sqrt(n_clust_2plot)),find(ii == cluster_order)); + hold on; + clust_mean(ii,:) = nanmean(PTSH_RLconcat(i2plot,:),1); + + for j = 1:length(i2plot) + hold on; + plot(time,PTSH_RLconcat(i2plot(j),:),'color',[0.7 0.7 1]); hold on + end + r = corr([clust_mean(ii,:)',PTSH_RLconcat(i2plot,:)']); + clust_mean_corr = mean(r(2:end)); %correlation of each cell to the cluster average + plot(time,clust_mean(ii,:),'color',[0 0 1],'linewidth',2); hold on + plot([0 0],[0 1],'-k'); + +% title(sprintf('Cluster order %d %d \n%.1f of cells \n r = %.2f ',find(ii == cluster_order), ii, cluster_percent(i),clust_mean_corr),'FontSize',8); + title(sprintf('%.1f%% r=%.2f ',cluster_percent(i),clust_mean_corr),'FontSize',8); + + axis tight; + box off; +end + +% Figure Title +ax1=axes('position',[0.3 0.9, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +percent_of_all = sum(cluster_percent(clusters_2plot)); +text(xl(1) + diff(xl)*0.0, yl(2), sprintf(' \n [%.2f %.2f] s Includes: %d units %.1f %% of total units clustered' ,... + key.heirar_cluster_time_st, key.heirar_cluster_time_end, size(PTSH_RLconcat,1), percent_of_all),'HorizontalAlignment','Left','FontSize', 10); +axis off; + + + +% Saving the figure +%-------------------------------------------------------------------------- +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' metric]; + +figure_name_out=[dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r300']); +clf; \ No newline at end of file diff --git a/analysis/lick2D/fn_ClusterROI2.m b/analysis/lick2D/fn_ClusterROI2.m new file mode 100644 index 0000000..22666d7 --- /dev/null +++ b/analysis/lick2D/fn_ClusterROI2.m @@ -0,0 +1,218 @@ +function [cl_id, cluster_percent]=fn_ClusterROI2(PTSH, time, key, clusterparam, dir_save_figure) + + + +min_cluster_percent =1; +min_cluster_agregate =100; + +if nargin>3 + n_clust = clusterparam.n_clust; + agregate_clusters_flag = clusterparam.agregate_clusters_flag; + corr_thresh_across_clusters_for_merging = clusterparam.corr_thresh_across_clusters_for_merging; + corr_thresh_within_cluster_origin = clusterparam.corr_thresh_within_cluster_origin; + corr_thresh_within_cluster_target = clusterparam.corr_thresh_within_cluster_target; + metric = clusterparam.metric; +else + n_clust=2000; + agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that + corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + corr_thresh_within_cluster_target = 0.8; + metric='euclidean'; %euclidean or correlation +end + +if nargin<5 +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_save_figure = [dir_base 'Lick2D\ClusteringSelectivityAndShape\']; +end + +% +% corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster = 0.75; %won't merge clusters that has correlation value below that + +% n_clust=200; +% agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them +% min_cluster_percent =1; +% min_cluster_agregate =100; + +% corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_origin = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_target = 0.8; + +% corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_target = 0.8; + +%% Hierarchical cluster analysis. +% Get distances. +d = pdist(PTSH,metric); + +d_sq = squareform(d); + +% Linkage. +link = linkage(d,'average'); + +% Cluster. +cl_id = cluster(link,'MaxClust',n_clust); +% temp=inconsistent(link); +% nanmax(temp(:,4)) +% cl_id = cluster(link,'cutoff',1.15); + +% Cophenetic correlation. +corr_cop = cophenet(link,d) + +% Plot Clusters dengrogram and pairwise distance +% figure; +% set(gcf,'DefaultAxesFontName','helvetica'); +% set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); +% set(gcf,'PaperOrientation','portrait'); +% set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + +panel_width=0.3; +panel_height=0.3; +horizontal_distance=0.75; +vertical_distance=0.6; + +position_x(1)=0.05; +position_x(2)=position_x(1)+horizontal_distance; +position_y(1)=0.7; +position_y(2)=position_y(1)-vertical_distance; + +% Figure Title +axes('position',[position_x(1), position_y(1)+0.1, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +% text(xl(1) + diff(xl)*0.0, yl(2)*1.8, sprintf('%s Cell-type: %s Contains: %s units' , P.anatomy, P.unit_quality, P.Pyr_FS),'HorizontalAlignment','Left','FontSize', 10); +axis off; + +% plot dengrogram +axes('position',[position_x(1), position_y(1), 0.75, 0.2]); +[h_dend bar order] = dendrogram(link,0); +set(gca,'xticklabel',[],'yticklabel',[],'xtick',[],'ytick',[]) +axis off; + +% Heatmap of pairwise distances. +axes('position',[position_x(1), position_y(2), 0.75, 0.6]); +imagesc(1-d_sq(order,order)); hold on +set(gca,'xtick',[],'ytick',[]) +xlabel('Neurons, Pairwise distance') +ylabel('Neurons, Pairwise distance') + + + + +%% agregate clusters + +if agregate_clusters_flag ==1 + n_clust_before_merging=1; + n_clust_after_merging=0; + while n_clust_before_merging> n_clust_after_merging + n_clust_before_merging = numel(unique(cl_id)); %before agregation + [cl_id] = function_agregate_clusters(PTSH, cl_id, min_cluster_agregate, corr_thresh_across_clusters_for_merging, corr_thresh_within_cluster_origin, corr_thresh_within_cluster_target); + n_clust_after_merging = numel(unique(cl_id)); %after agregation + end +end +n_clust_after_merging= numel(unique(cl_id)); %after agregationl +% Resort clusters from large to small +cluster_percent=100*histcounts(cl_id,1:1:(numel(unique(cl_id))+1))/size(PTSH,1); +[B,I] = sort(cluster_percent,'descend'); + +cl_id_new = cl_id; +for ii = 1:1:numel(I) + idxxx = find(cl_id==I(ii)); + cl_id_new(idxxx)=ii; +end +cl_id=cl_id_new; + +cluster_percent=100*histcounts(cl_id,1:1:(numel(unique(cl_id))+1))/size(PTSH,1); +clust_mean=[]; +clust_mean_corr=[]; +for ii = 1:1:numel(unique(cl_id)) + idxxx = find(cl_id==ii); + clust_mean(ii,:) = nanmean(PTSH(idxxx,:),1); + r = corr([clust_mean(ii,:)',PTSH(idxxx,:)']); + clust_mean_corr(ii) = mean(r(1,2:end)); %correlation of each cell to the cluster average +end + + + + +% Labels for cluster identity on distance matrix. + +col2plot = hsv(n_clust_after_merging); +col2plot_dark = col2plot./2; +axes('position',[position_x(2), position_y(2), 0.2, 0.6]); +for i = 1:n_clust_after_merging + ind_plot = find(cl_id(order)==i); + plot(i*ones(1,length(ind_plot)),size(PTSH,1)-ind_plot,'o','color',col2plot(i,:)); hold on +end +set(gca,'xtick',[],'ytick',[]); +xlim([-1 n_clust_after_merging+1]); +ylim([0 size(PTSH,1)]); + +% Figure Title +ax1=axes('position',[0.3 0.9, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +text(xl(1) + diff(xl)*0.0, yl(2), sprintf('[%.2f %.2f] s Includes: %d units clustered\n Cophenetic correlation = %.2f' ,... + key.heirar_cluster_time_st, key.heirar_cluster_time_end, size(PTSH,1), corr_cop),'HorizontalAlignment','Left','FontSize', 10); +axis off; + + + +% % Saving the figure +% %-------------------------------------------------------------------------- +% if isempty(dir(dir_save_figure)) +% mkdir (dir_save_figure) +% end +% filename =[sprintf('%s%s_Training_%s_UnitQuality_%s_Type_%s__metrics' ,key.brain_area, key.hemisphere, key.training_type, key.unit_quality, key.cell_type)]; +% figure_name_out=[dir_save_figure filename]; +% eval(['print ', figure_name_out, ' -dtiff -cmyk -r300']); +clf; + +%% Plot original data, partitioned by cluster. + +clusters_2plot = find(cluster_percent>=min_cluster_percent); +n_clust_2plot = numel (clusters_2plot); +[~,cluster_order] = sort (cluster_percent(clusters_2plot),'descend'); +for ii = 1:1:n_clust_2plot + i = clusters_2plot(ii); + i2plot = find(cl_id==i); + subplot(ceil(n_clust_2plot/sqrt(n_clust_2plot)),ceil(n_clust_2plot/sqrt(n_clust_2plot)),find(ii == cluster_order)); + hold on; + + % for j = 1:length(i2plot) + % hold on; + % plot(time,PTSH_RLconcat(i2plot(j),:),'color',[0.7 0.7 1]); hold on + % end + plot(time,clust_mean(i,:),'color',[0 0 1],'linewidth',2); hold on + plot([0 0],[0 1],'-k'); + + title(sprintf('Cluster order %d %d \n%.1f of cells \n r = %.3f ',find(ii == cluster_order), ii, cluster_percent(i),clust_mean_corr(i)),'FontSize',8); + % title(sprintf('%.1f%% r=%.2f ',cluster_percent(i),clust_mean_corr),'FontSize',8); + + axis tight; + box off; +end + +% Figure Title +ax1=axes('position',[0.3 0.9, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +percent_of_all = sum(cluster_percent(clusters_2plot)); +text(xl(1) + diff(xl)*0.0, yl(2), sprintf(' \n [%.2f %.2f] s Includes: %d units %.1f %% of total units clustered' ,... + key.heirar_cluster_time_st, key.heirar_cluster_time_end, size(PTSH,1), percent_of_all),'HorizontalAlignment','Left','FontSize', 10); +axis off; + + + +% Saving the figure +%-------------------------------------------------------------------------- +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end +if isfield(key,'subject_id') + filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' metric '_agregate' num2str(agregate_clusters_flag)]; +else + filename = ['all_' metric '_agregate' num2str(agregate_clusters_flag)]; +end +figure_name_out=[dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r300']); +clf; \ No newline at end of file diff --git a/analysis/lick2D/fn_ClusterROI_corr.m b/analysis/lick2D/fn_ClusterROI_corr.m new file mode 100644 index 0000000..591c09a --- /dev/null +++ b/analysis/lick2D/fn_ClusterROI_corr.m @@ -0,0 +1,206 @@ +function [cl_id, cluster_percent]=fn_ClusterROI_corr(M, key, clusterparam, dir_save_figure, flag_plot) + + + +min_cluster_percent =1; +min_cluster_agregate =100; + +if nargin>3 + n_clust = clusterparam.n_clust; + agregate_clusters_flag = clusterparam.agregate_clusters_flag; + corr_thresh_across_clusters_for_merging = clusterparam.corr_thresh_across_clusters_for_merging; + corr_thresh_within_cluster_origin = clusterparam.corr_thresh_within_cluster_origin; + corr_thresh_within_cluster_target = clusterparam.corr_thresh_within_cluster_target; + metric = clusterparam.metric; +else + n_clust=2000; + agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them + corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that + corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that + corr_thresh_within_cluster_target = 0.8; + metric='euclidean'; %euclidean or correlation +end + + +% +% corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster = 0.75; %won't merge clusters that has correlation value below that + +% n_clust=200; +% agregate_clusters_flag = 1; %itiratively agregate clusters smaller than min_cluster_percent by merging them to clusters with higest correlation to them +% min_cluster_percent =1; +% min_cluster_agregate =100; + +% corr_thresh_across_clusters_for_merging = 0.8; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_origin = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_target = 0.8; + +% corr_thresh_across_clusters_for_merging = 0.9; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_origin = 0.8; %won't merge clusters that has correlation value below that +% corr_thresh_within_cluster_target = 0.8; + +%% Hierarchical cluster analysis. +try + M = gpuArray(M); + d = pdist(M,metric); + M=gather(M); + d_sq = squareform(d); + + d=gather(d); + d_sq=gather(d_sq); +catch %in case GPU is out of memory + M=gather(M); + d = pdist(M,metric); + d_sq = squareform(d); + disp('GPU out of memory'); +end + + + +% d = pdist(M,metric); +% d_sq = squareform(d); + + +% Linkage. +link = linkage(d,'average'); + +% Cluster. +cl_id = cluster(link,'MaxClust',n_clust); +% temp=inconsistent(link); +% nanmax(temp(:,4)) +% cl_id = cluster(link,'cutoff',1.15); + +% Cophenetic correlation. +corr_cop = cophenet(link,d) + +% Plot Clusters dengrogram and pairwise distance +fff = figure("Visible",false); +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 20 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); + +panel_width=0.3; +panel_height=0.3; +horizontal_distance=0.75; +vertical_distance=0.6; + +position_x(1)=0.05; +position_x(2)=position_x(1)+horizontal_distance; +position_y(1)=0.7; +position_y(2)=position_y(1)-vertical_distance; + +% Figure Title +axes('position',[position_x(1), position_y(1)+0.1, panel_width, panel_height*0.25]); +yl = ylim(); xl = xlim(); +% text(xl(1) + diff(xl)*0.0, yl(2)*1.8, sprintf('%s Cell-type: %s Contains: %s units' , P.anatomy, P.unit_quality, P.Pyr_FS),'HorizontalAlignment','Left','FontSize', 10); +axis off; + +% plot dengrogram +axes('position',[position_x(1), position_y(1), 0.75, 0.2]); +[h_dend bar order] = dendrogram(link,0); +set(gca,'xticklabel',[],'yticklabel',[],'xtick',[],'ytick',[]) +axis off; + +% Heatmap of pairwise distances. +axes('position',[position_x(1), position_y(2), 0.75, 0.6]); +imagesc(1-d_sq(order,order)); hold on +set(gca,'xtick',[],'ytick',[]) +xlabel('Neurons, Pairwise distance') +ylabel('Neurons, Pairwise distance') + + + + +%% agregate clusters + +if agregate_clusters_flag ==1 + n_clust_before_merging=1; + n_clust_after_merging=0; + while n_clust_before_merging> n_clust_after_merging + n_clust_before_merging = numel(unique(cl_id)); %before agregation + [cl_id] = function_agregate_clusters(M, cl_id, min_cluster_agregate, corr_thresh_across_clusters_for_merging, corr_thresh_within_cluster_origin, corr_thresh_within_cluster_target); + n_clust_after_merging = numel(unique(cl_id)); %after agregation + end +end +n_clust_after_merging= numel(unique(cl_id)); %after agregationl +% Resort clusters from large to small +cluster_percent=100*histcounts(cl_id,1:1:(numel(unique(cl_id))+1))/size(M,1); +[B,I] = sort(cluster_percent,'descend'); + +cl_id_new = cl_id; +for ii = 1:1:numel(I) + idxxx = find(cl_id==I(ii)); + cl_id_new(idxxx)=ii; +end +cl_id=cl_id_new; + +cluster_percent=100*histcounts(cl_id,1:1:(numel(unique(cl_id))+1))/size(M,1); + +if flag_plot==1 + + clust_mean=zeros(numel(unique(cl_id)),size(M,1)); + clust_mean_corr=zeros(numel(unique(cl_id)),1); + parfor ii = 1:1:numel(unique(cl_id)) + idxxx = find(cl_id==ii); + clust_mean(ii,:) = nanmean(M(idxxx,:),1); + r = corr([clust_mean(ii,:)',M(idxxx,:)']); + clust_mean_corr(ii) = mean(r(1,2:end)); %correlation of each cell to the cluster average + end + + + + + % Labels for cluster identity on distance matrix. + + col2plot = hsv(n_clust_after_merging); + col2plot_dark = col2plot./2; + axes('position',[position_x(2), position_y(2), 0.2, 0.6]); + for i = 1:n_clust_after_merging + ind_plot = find(cl_id(order)==i); + plot(i*ones(1,length(ind_plot)),size(M,1)-ind_plot,'o','color',col2plot(i,:)); hold on + end + set(gca,'xtick',[],'ytick',[]); + xlim([-1 n_clust_after_merging+1]); + ylim([0 size(M,1)]); + + % Figure Title + ax1=axes('position',[0.3 0.9, panel_width, panel_height*0.25]); + yl = ylim(); xl = xlim(); + if isfield(key,'heirar_cluster_id') + text(xl(1) + diff(xl)*0.0, yl(2), sprintf('Includes: %d units clustered\n Cophenetic correlation = %.2f, splits = %d \n Cluster = %d splits subclust = %d' ,... + size(M,1), corr_cop, key.n_clust, key.heirar_cluster_id, n_clust),'HorizontalAlignment','Left','FontSize', 10); + else + text(xl(1) + diff(xl)*0.0, yl(2), sprintf('Includes: %d units clustered\n Cophenetic correlation = %.2f, splits = %d' ,... + size(M,1), corr_cop, key.n_clust),'HorizontalAlignment','Left','FontSize', 10); + end + + axis off; + + + + if strcmp(key.session_epoch_type,'spont_only') + session_epoch_label = 'Spont'; + elseif strcmp(key.session_epoch_type,'behav_only') + session_epoch_label = 'Behav'; + end + + % Saving the figure + %-------------------------------------------------------------------------- + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + if isfield(key,'subject_id') + if isfield(key,'heirar_cluster_id') + filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_epoch_label '_' metric(1:4) '_agregate' num2str(agregate_clusters_flag) '_splits' num2str(key.n_clust) 'cluster' num2str(key.heirar_cluster_id) '_splits_subclust' num2str(n_clust)]; + else + filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_epoch_label '_' metric(1:4) '_agregate' num2str(agregate_clusters_flag) '_splits' num2str(n_clust)]; + + end + else + filename = ['all_' metric '_agregate' num2str(agregate_clusters_flag)]; + end + figure_name_out=[dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); +end +close all; \ No newline at end of file diff --git a/analysis/lick2D/fn_compute_corr_with_bodypart.m b/analysis/lick2D/fn_compute_corr_with_bodypart.m new file mode 100644 index 0000000..a62c2f7 --- /dev/null +++ b/analysis/lick2D/fn_compute_corr_with_bodypart.m @@ -0,0 +1,61 @@ +function [body_vector, idx_2pimaging_frames] = fn_compute_corr_with_bodypart (key, frame_rate_2pimaging) +smooth_body_window = 3; %video tracking frames, before downsampling + +TrialsStartFrame=fetchn((IMG.FrameStartTrial & key) - TRACKING.VideoGroomingTrial,'session_epoch_trial_start_frame','ORDER BY trial'); +trial_num=fetchn((IMG.FrameStartTrial & key) - TRACKING.VideoGroomingTrial,'trial','ORDER BY trial'); +if isempty(TrialsStartFrame) % not mesoscope recordings + TrialsStartFrame=fetchn((IMG.FrameStartFile & key) - TRACKING.VideoGroomingTrial,'session_epoch_file_start_frame', 'ORDER BY session_epoch_file_num'); + trial_num=fetchn((IMG.FrameStartFile & key) - TRACKING.VideoGroomingTrial,'trial','ORDER BY trial'); +end + +%We first try to align based on video, if it exists. We align to the first video-detected lick after lickport movement +rel_video = (TRACKING.VideoBodypartTrajectTrial*TRACKING.VideoLickportTrial & key) - TRACKING.VideoGroomingTrial; + +switch key.bodypart_name + case 'pawfrontleft' %front view + VIDEO= fetchn(rel_video,'traj_x','ORDER BY trial');% + k.tracking_device_id=4; + case 'pawfrontright' %front view + VIDEO= fetchn(rel_video,'traj_x','ORDER BY trial');% + k.tracking_device_id=4; + case 'whiskers' %front view + VIDEO= fetchn(rel_video,'traj_y1','ORDER BY trial');% + k.tracking_device_id=4; +end +trial_num_video = fetchn(rel_video,'trial','ORDER BY trial'); +t_first_video_frame = fetchn(rel_video,'time_first_frame','ORDER BY trial') + fetchn(rel_video,'lickport_t_entrance_relative_to_trial_start','ORDER BY trial'); % relative to trial start +tracking_sampling_rate_trials =fetchn(rel_video*TRACKING.TrackingTrial & k,'tracking_sampling_rate','ORDER BY trial'); + +%If there is no video, we align based on electric lickport contact. We align to the first electric-lickport detected lick after Go cue (there is some lag between GO cue and lickport movement) +body_vector=[]; +idx_2pimaging_frames=[]; +for i_tr = 1:1:numel(trial_num)-1 + nnnn=find(trial_num_video==trial_num(i_tr)); + if isempty(nnnn) + continue + end + current_body_vector=VIDEO{nnnn}; + + time_tracking = [0:1:numel(current_body_vector)-1]/tracking_sampling_rate_trials(nnnn) + t_first_video_frame(trial_num_video==trial_num(i_tr)); + + current_idx_2pimaging_frames = [TrialsStartFrame(i_tr):1: (TrialsStartFrame(i_tr+1)-1)]; + time_2pimaging = (current_idx_2pimaging_frames-current_idx_2pimaging_frames(1))/frame_rate_2pimaging; + idx_overlaping = time_2pimaging>= time_tracking(1) & time_2pimaging<=time_tracking(end) ; + + time_2pimaging =time_2pimaging(idx_overlaping); + current_idx_2pimaging_frames =current_idx_2pimaging_frames(idx_overlaping); + + idx_2pimaging_frames= [idx_2pimaging_frames, current_idx_2pimaging_frames]; + + current_body_vector =smooth(current_body_vector,smooth_body_window); %to interploate and eliminate NaNs + + time_2pimaging=[0,time_2pimaging]; + current_body_vector_resampled=[]; + for ii=1:1:numel(time_2pimaging)-1 + idx_b = time_tracking>=time_2pimaging(ii) & time_tracking 1 % in case there are any cells in the neighborhood + idx_current_cell =find(idx_within_radius==iROI); + % [rho,pval]=corr(Fall(idx_to_use,:)'); + [rho]=corrcoef(F(idx_within_radius,:)'); + + idx_other_cells = true(size(idx_within_radius)); + idx_other_cells(idx_current_cell)=0; + + idx_other_cells_without_inner_ring =idx_other_cells; + idx_other_cells_without_inner_ring (idx_within_inner_ring)=0; + + corr_local = mean(rho(idx_current_cell,idx_other_cells)); + key_ROI(iROI).corr_local = corr_local; + + % if there are cells in the vinicity, even after removing the inner ring + if sum(idx_other_cells_without_inner_ring)>0 + key_ROI(iROI).corr_local_without_inner_ring = mean(rho(idx_current_cell,idx_other_cells_without_inner_ring)); + else + key_ROI(iROI).corr_local_without_inner_ring =NaN; + end + key_ROI(iROI).num_neurons_in_radius = numel(idx_within_radius); + key_ROI(iROI).num_neurons_in_radius_without_inner_ring = numel(idx_other_cells_without_inner_ring); + + + + else % if there are no cells in the vicinity + key_ROI(iROI).corr_local =NaN; + key_ROI(iROI).corr_local_without_inner_ring =NaN; + key_ROI(iROI).num_neurons_in_radius =0; + key_ROI(iROI).num_neurons_in_radius_without_inner_ring = 0; + + end + + key_ROI(iROI).session_epoch_type = key.session_epoch_type; + key_ROI(iROI).session_epoch_number = key.session_epoch_number; + key_ROI(iROI).radius_size = radius_size; + key_ROI(iROI).num_svd_components_removed=key.num_svd_components_removed; + +end + +insert(self,key_ROI); \ No newline at end of file diff --git a/analysis/lick2D/fn_local_similarity_space.m b/analysis/lick2D/fn_local_similarity_space.m new file mode 100644 index 0000000..3f572c5 --- /dev/null +++ b/analysis/lick2D/fn_local_similarity_space.m @@ -0,0 +1,39 @@ +function [similarity_local,similarity_local_shuffled] = fn_local_similarity_space(ROI_WEIGHTS,x_all, y_all, radius_size, min_lateral_distance ) + +similarity_local = cell(size(ROI_WEIGHTS,1),1); +similarity_local_shuffled = cell(size(ROI_WEIGHTS,1),1); +parfor iROI=1:1:size(ROI_WEIGHTS,1) + + x=x_all(iROI); + y=y_all(iROI); + % z=z_all(ii); + % dZ(ii,:)= abs(z_all - z); % in um + % d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + dXY= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + idx_within_outer_radius = find(dXY<=radius_size); + current_dXY = dXY(idx_within_outer_radius); + idx_within_inner_radius = find(current_dXYgo_time); + end + + if ~isempty(licks) + start_file(i_tr)=TrialsStartFrame(i_tr) + floor(licks(1)*frame_rate) + floor(time_bin(1)*frame_rate); + end_file(i_tr)=start_file(i_tr)+floor([time_bin(2)-time_bin(1)]*frame_rate)-1; + if start_file(i_tr)<=0 + start_file(i_tr)=NaN; + + end_file(i_tr)=NaN; + end + else + start_file(i_tr)=NaN; + end_file(i_tr)=NaN; + end +end \ No newline at end of file diff --git a/analysis/lick2D/fn_spatial_scale.m b/analysis/lick2D/fn_spatial_scale.m new file mode 100644 index 0000000..c20056a --- /dev/null +++ b/analysis/lick2D/fn_spatial_scale.m @@ -0,0 +1,39 @@ +function [distance_tau, rd_distance_components] = fn_spatial_scale(ROI_WEIGHTS,DISTANCE_IDX,idx_up_triangle, distance_bins_centers, num_components) + +distance_tau = zeros(num_components,1); +rd_distance_components=zeros(num_components,size(DISTANCE_IDX,2)); + +parfor i_c = 1:1:num_components + + W = ROI_WEIGHTS(:,i_c); + + Wdiff_mat= abs((W - W'))./max(abs(W),abs(W)'); + Wdiff_mat = Wdiff_mat(idx_up_triangle); + + %shuffled + W_shuffled = W(randperm(size(W,1))); + Wdiff_mat_shuffled= abs((W_shuffled - W_shuffled'))./max(abs(W_shuffled),abs(W_shuffled)'); + Wdiff_mat_shuffled = Wdiff_mat_shuffled(idx_up_triangle); + + RD_shuffled = nanmean(Wdiff_mat_shuffled); + RD_distance=zeros(1,size(DISTANCE_IDX,2)); + for i_d = 1:1:size(DISTANCE_IDX,2) + RD_distance(i_d) = RD_shuffled - nanmean(Wdiff_mat(DISTANCE_IDX{i_d})); %relative difference + end + + % plot(distance_bins_centers, RD_distance_components) + idx_distance = find(RD_distance<=0,1,'first'); + + rd_distance_components(i_c,:) = RD_distance; + + if ~isempty(idx_distance) + distance_tau(i_c) = distance_bins_centers(idx_distance); + else + distance_tau(i_c) = distance_bins_centers(end-1); + end + + +end + +% + diff --git a/analysis/lick2D/lick2D_FiringRate_map.m b/analysis/lick2D/lick2D_FiringRate_map.m new file mode 100644 index 0000000..3db1a51 --- /dev/null +++ b/analysis/lick2D/lick2D_FiringRate_map.m @@ -0,0 +1,113 @@ +function lick2D_FiringRate_map(key) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +dir_current_fig = [dir_base '\Lick2D\brain_maps\firing_rate\']; + + +rel = IMG.ROI* IMG.ROIdeltaFPeak*IMG.PlaneCoordinates & key; +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(num2str(key.session_epoch_number))] + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + + +number_of_events=M.number_of_events; +bins = [linspace(0,prctile(number_of_events,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +number_of_events(isnan(number_of_events))=0; + +[~,~,bins_idx]=histcounts(number_of_events,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s %d\n Total planes = %d ', key.subject_id, key.session, session_epoch_label,key.session_epoch_number, number_of_planes)); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/lick2D/lick2D_MeanFiringRate_map.m b/analysis/lick2D/lick2D_MeanFiringRate_map.m new file mode 100644 index 0000000..732c0bb --- /dev/null +++ b/analysis/lick2D/lick2D_MeanFiringRate_map.m @@ -0,0 +1,113 @@ +function lick2D_FiringRate_map(key) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +dir_current_fig = [dir_base '\Lick2D\brain_maps\mean_firing_rate\']; + + +rel = IMG.ROI* IMG.ROIdeltaFMean*IMG.PlaneCoordinates & key; +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(num2str(key.session_epoch_number))] + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = numel(unique(M.plane_num)); + + +mean_dff=M.mean_dff; +bins = [-inf,linspace(prctile(mean_dff,5),prctile(mean_dff,95),100),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +mean_dff(isnan(mean_dff))=0; + +[~,~,bins_idx]=histcounts(mean_dff,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s %d\n Total planes = %d ', key.subject_id, key.session, session_epoch_label,key.session_epoch_number, number_of_planes)); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/lick2D/lick2D_behaviorperform.m b/analysis/lick2D/lick2D_behaviorperform.m new file mode 100644 index 0000000..690b483 --- /dev/null +++ b/analysis/lick2D/lick2D_behaviorperform.m @@ -0,0 +1,109 @@ +function lick2D_behaviorperform() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +% key.subject_id = 463195; +% key.session =3; + +key.subject_id = 463190; +key.session =4; + +key.number_of_bins=4; + +rel = EXP2.BehaviorTrial*EXP2.TrialLickBlock*EXP2.TrialLickPort & key; + +B=fetch(rel, '*'); +%% Rescaling, rotation, and binning +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +x_bins = linspace(-1, 1,key.number_of_bins+1); +x_bins_centers=x_bins(1:end-1)+mean(diff(x_bins))/2; + +z_bins = linspace(-1,1,key.number_of_bins+1); +z_bins_centers=z_bins(1:end-1)+mean(diff(z_bins))/2; + +x_bins(1)= -inf; +x_bins(end)= inf; +z_bins(1)= -inf; +z_bins(end)= inf; + + + +%% Compute maps +[hhhhh, ~, ~, x_idx, z_idx] = histcounts2(pos_x,pos_z,x_bins,z_bins); + +outcome ={B.outcome}; + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx = find((x_idx==i_x) & (z_idx==i_z)); + percent_ignore = 100*sum(contains(outcome(idx),'ignore'))./numel(idx); + + map_xz_percent_response(i_z,i_x) = 100-percent_ignore; + num_response(i_z,i_x) = sum(~contains(outcome(idx),'ignore')); + num_trials(i_z,i_x) = numel(idx); + +end +end + + + %% Maps +subplot(2,2,1) +imagescnan(x_bins_centers, z_bins_centers, map_xz_percent_response) + max_map=max(map_xz_percent_response(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) +% title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + title('% responded'); + + + + subplot(2,2,2) + + % axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(x_bins_centers, z_bins_centers, num_response) + max_map=max(num_response(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) +% title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + title('number of responses'); + + + subplot(2,2,3) + + % axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(x_bins_centers, z_bins_centers, num_trials) + max_map=max(num_trials(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) +% title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + title('number of trials'); + diff --git a/analysis/lick2D/lick2D_clusters_block.m b/analysis/lick2D/lick2D_clusters_block.m new file mode 100644 index 0000000..ae91da2 --- /dev/null +++ b/analysis/lick2D/lick2D_clusters_block.m @@ -0,0 +1,300 @@ +function lick2D_clusters_block() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +% +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462455; +% key.session =2; + +% key.subject_id = 462458; +% key.session =12; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; + +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +% session_date = fetch1(EXP2.Session & key,'session_date'); + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_plot_rois =1; % 1 to plot ROIs on top of the image plane, 0 not to plot + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\clusters_nlock\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dselectivity * ANLI.ROILick2DPSTH*ANLI.ROILick2DPSTHReward *ANLI.ROILick2DPSTHBlock * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dselectivity * ANLI.ROILick2DPSTH*ANLI.ROILick2DPSTHReward *ANLI.ROILick2DPSTHBlock * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key * IMG.ROI & IMG.ROIGood & key & 'lickmap_odd_even_corr>0.5'; + filename=['signif_2Dlick']; +end + +try +session_date = fetch1(EXP2.Session & key,'session_date'); +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] +catch + filename = ['all']; + +end + +if flag_plot_rois==0 + filename=[filename '_norois']; +end +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.7; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.1; +vertical_dist2=0.15; + +panel_width2=0.07; +panel_height2=0.1; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + + +position_y2(1)=0.82; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + + + +M=fetch(rel ,'*'); +M=struct2table(M); + +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end +my_colormap=hsv(numel(unique_cluster_id)); +% my_colormap(4,:)=my_colormap(5,:); +% my_colormap(3,:)=my_colormap(2,:); +% my_colormap(6,:)=my_colormap(4,:); + + + +%% Plot clusters + +PSTH1= M.psth_averaged_over_all_positions; +PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +PSTH1_before_scaling=PSTH1; +PSTH1 = PSTH1./nanmax(PSTH1,[],2); + +Select1= M.selectivity; +Select1 = movmean(Select1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +Select1 = Select1./nanmax(PSTH1_before_scaling,[],2); + +Select2= M.selectivity_first; +Select2 = movmean(Select2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +Select2 = Select2./nanmax(PSTH1_before_scaling,[],2); + +Select3= M.selectivity_begin; +Select3 = movmean(Select3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +Select3 = Select3./nanmax(PSTH1_before_scaling,[],2); + +Select4= M.selectivity_mid; +Select4 = movmean(Select4 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +Select4 = Select4./nanmax(PSTH1_before_scaling,[],2); + +Select5= M.selectivity_end; +Select5 = movmean(Select5 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +Select5 = Select5./nanmax(PSTH1_before_scaling,[],2); + +SelectRew1= M.selectivity_small; +SelectRew1 = movmean(SelectRew1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +SelectRew1 = SelectRew1./nanmax(PSTH1_before_scaling,[],2); + +SelectRew2= M.selectivity_regular; +SelectRew2 = movmean(SelectRew2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +SelectRew2 = SelectRew2./nanmax(PSTH1_before_scaling,[],2); + +SelectRew3= M.selectivity_large; +SelectRew3 = movmean(SelectRew3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +SelectRew3 = SelectRew3./nanmax(PSTH1_before_scaling,[],2); + + + +% Block0= M.psth_averaged_over_all_positions_first; +% Block0 = movmean(Block0 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Block0 = Block0./nanmax(PSTH1_before_scaling,[],2); +% +% Block1= M.psth_averaged_over_all_positions_begin; +% Block1 = movmean(Block1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Block1 = Block1./nanmax(PSTH1_before_scaling,[],2); +% +% Block2 = M.psth_averaged_over_all_positions_mid; +% Block2 = movmean(Block2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Block2 = Block2./nanmax(PSTH1_before_scaling,[],2); +% +% Block3= M.psth_averaged_over_all_positions_end; +% Block3 = movmean(Block3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Block3 = Block3./nanmax(PSTH1_before_scaling,[],2); +% +% Reward0= M.psth_averaged_over_all_positions_small; +% Reward0 = movmean(Reward0 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Reward0 = Reward0./nanmax(PSTH1_before_scaling,[],2); +% +% Reward1= M.psth_averaged_over_all_positions_regular; +% Reward1 = movmean(Reward1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Reward1 = Reward1./nanmax(PSTH1_before_scaling,[],2); +% +% Reward2= M.psth_averaged_over_all_positions_large; +% Reward2 = movmean(Reward2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +% Reward2 = Reward2./nanmax(PSTH1_before_scaling,[],2); + + +for ic=1:1:numel(unique_cluster_id) + psth_cluster(ic,:)=nanmean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(1), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.time_psth(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-1.5,2.5]); + +% axes('position',[position_x2(ic), position_y2(2), panel_width2, panel_height2]); +% hold on; +% plot([0 0],[0,1],'-k'); +% psth_cluster(ic,:)=nanmean(Block0(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 0]) +% psth_cluster(ic,:)=nanmean(Block1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[1 0 0]) +% psth_cluster(ic,:)=nanmean(Block2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 1 0]) +% psth_cluster(ic,:)=nanmean(Block3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 1]) +% % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) +% % ylim([0, 1]); +% +% axes('position',[position_x2(ic), position_y2(3), panel_width2, panel_height2]); +% hold on; +% plot([0 0],[0,1],'-k'); +% psth_cluster(ic,:)=nanmean(Reward0(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 0]) +% psth_cluster(ic,:)=nanmean(Reward1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[1 0 0]) +% psth_cluster(ic,:)=nanmean(Reward2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); +% plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 1]) + + + axes('position',[position_x2(ic), position_y2(2), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + psth_cluster(ic,:)=nanmean(Select1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:)) +% title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + xlim([-1.5,2.5]); + + + + axes('position',[position_x2(ic), position_y2(3), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + psth_cluster(ic,:)=nanmean(Select2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 0]) + psth_cluster(ic,:)=nanmean(Select3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[1 0 0]) + psth_cluster(ic,:)=nanmean(Select4(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 1 0]) + psth_cluster(ic,:)=nanmean(Select5(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 1]) + xlim([-1.5,2.5]); + + + axes('position',[position_x2(ic), position_y2(4), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + psth_cluster(ic,:)=nanmean(SelectRew1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 0]) + psth_cluster(ic,:)=nanmean(SelectRew2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[1 0 0]) + psth_cluster(ic,:)=nanmean(SelectRew3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + plot(M.time_psth(1,:),psth_cluster(ic,:),'Color',[0 0 1]) + xlim([-1.5,2.5]); +end + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_local_corr_map.m b/analysis/lick2D/lick2D_local_corr_map.m new file mode 100644 index 0000000..d1ba7a9 --- /dev/null +++ b/analysis/lick2D/lick2D_local_corr_map.m @@ -0,0 +1,123 @@ +function lick2D_local_corr_map(key, radius_size, dir_current_fig) +close all; +prctile_threshold = 100; %90 + +if nargin<3 + % key.subject_id = 463189; +% key.session = 6; +% key.session_epoch_number = 1; +key.radius_size = 100; +else + key.radius_size = radius_size; + dir_current_fig = [dir_current_fig '\radius\']; +end + + +rel = IMG.ROI* POP.ROICorrLocal*IMG.PlaneCoordinates & key; +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); + + +corr_local=M.corr_local; +bins = [-inf,linspace(min(corr_local), prctile(corr_local,prctile_threshold),1000),inf]; + +cmap = jet(length(bins)); +colormap (cmap); +corr_local(isnan(corr_local))=0; + +[~,~,bins_idx]=histcounts(corr_local,bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s, Corr radius=%d \n Total planes = %d ', key.subject_id, key.session, session_epoch_label,key.radius_size, number_of_planes)); + + + +filename = [filename session_epoch_label '_radius' num2str(key.radius_size)]; + + +colorbar +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/lick2D/lick2D_local_corr_map_spont_vs_behav.m b/analysis/lick2D/lick2D_local_corr_map_spont_vs_behav.m new file mode 100644 index 0000000..1288479 --- /dev/null +++ b/analysis/lick2D/lick2D_local_corr_map_spont_vs_behav.m @@ -0,0 +1,141 @@ +function lick2D_local_corr_map_spont_vs_behav(key, radius_size, dir_current_fig) +close all; +prctile_threshold = 99; %90 + +if nargin<3 + % key.subject_id = 463189; +% key.session = 6; +% key.session_epoch_number = 1; +key.radius_size = 100; +else + key.radius_size = radius_size; + dir_current_fig = [dir_current_fig '\radius\']; +end + + +rel_spont = IMG.ROI* POP.ROICorrLocal*IMG.PlaneCoordinates & key & 'session_epoch_type="spont_only"'; +rel_behav = IMG.ROI* POP.ROICorrLocal*IMG.PlaneCoordinates & key & 'session_epoch_type="behav_only"'; + +if rel_spont.count ==0 || rel_behav.count==0 + return +end +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel_spont ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); +corr_local_spont=M.corr_local; + + +Mbehav=fetch(rel_behav ,'*'); +Mbehav=struct2table(Mbehav); +corr_local_behav=Mbehav.corr_local; + + +corr_local=corr_local_spont - corr_local_behav; +range_corr = max([abs(prctile(corr_local,1)), abs(prctile(corr_local,prctile_threshold))]); +bins = [-inf,linspace(-range_corr,range_corr,500),inf]; +nun_bins =numel(bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); +% colormap jet(502) +% redblue +cmap = flip(redblue(nun_bins)); +colormap (cmap); + +% colormap(bluewhitered(502)) +% bluewhitered; +% my_map=bluewhitered(length(bins)); +% cmap = my_map; +% colormap (cmap); +% colormap(bluewhitered(length(bins))); +corr_local(isnan(corr_local))=0; + +[~,~,bins_idx]=histcounts(corr_local,bins); +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n Spontaneous-Behavior, Corr radius=%d \n Total planes = %d ', key.subject_id, key.session ,key.radius_size, number_of_planes)); + +c=colorbar; +c.Ticks=[0,0.5,1]; +c.TickLabels={sprintf('%.2f', -range_corr),0,sprintf('%.2f', range_corr)}; +c.Label.String = 'Local Corr, Spontaneous - Behavior'; + +filename = [filename '_radius' num2str(key.radius_size)]; + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/lick2D/lick2D_map.m b/analysis/lick2D/lick2D_map.m new file mode 100644 index 0000000..f8a70d4 --- /dev/null +++ b/analysis/lick2D/lick2D_map.m @@ -0,0 +1,264 @@ +function lick2D_map() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +flag_all_or_signif=0; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462458; +% key.session =11; + +% key.subject_id = 462455; +% key.session =3; + +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 447990; +% key.session =8; + key.subject_id =463190; +key.session =3; + +% key.session_epoch_number = 1; +key.number_of_bins=4; +% key.fr_interval_start=-2000; +% key.fr_interval_end=0; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +session_date = fetch1(EXP2.Session & key,'session_date'); +if flag_all_or_signif ==0 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DPSTH & IMG.ROIGood & key; +elseif flag_all_or_signif ==1 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key; +elseif flag_all_or_signif ==2 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH) & IMG.ROIGood & key & 'lickmap_odd_even_corr>=0.5'; +elseif flag_all_or_signif ==3 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_motor\' ]; + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH) & IMG.ROIGood & key & 'pval_psth<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.01'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.05' & 'pval_lickmap_odd_even_corr<=0.05' ; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_rayleigh_length<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'rayleigh_length>=1'; +end + + +% rel= rel & 'information_per_spike>0.05'; +dir_current_fig = [dir_current_fig 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' 'bins' num2str(key.number_of_bins) '\' ]; + +M=fetch(rel ,'*'); +roi_number=[M.roi_number]; + +time=M.psth_time; +time_bin=[-3,3]; %2 sec +smooth_bin = 3; +number_of_bins = M.number_of_bins; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +for i_roi=1:1:size(M,1) + + psth_max= cell2mat(reshape(M(i_roi).psth_per_position,[number_of_bins^2,1])); + psth_max= psth_max(:,time>-2 & time<=3); + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(time,smooth(M(i_roi).psth_per_position{i_l},smooth_bin),'-r','LineWidth',2); + try + plot(time,smooth(M(i_roi).psth_per_position_odd{i_l},smooth_bin),'-','Color',[0 0 0]); + plot(time,smooth(M(i_roi).psth_per_position_even{i_l},smooth_bin),'-','Color',[0.5 0.5 0.5]); + end + ylims=[0,ceil(psth_max)+eps]; + ylim(ylims); + xlim(time_bin); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Spikes/s', 'FontSize',14); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_m= smooth(M(i_roi).psth_averaged_over_all_positions,smooth_bin); + psth_stem = smooth(M(i_roi).psth_stem_over_all_positions,smooth_bin); + shadedErrorBar(time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + xlim(time_bin); + ylim([0, ceil(nanmax(psth_m))]); + title(sprintf('All positions \n p-val = %.4f ', M(i_roi).pval_psth), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',[0, ceil(nanmax(psth_m))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(2),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_preferred= smooth(M(i_roi).psth_preferred,smooth_bin)'; + psth_non_preferred= smooth(M(i_roi).psth_non_preferred,smooth_bin)'; + plot(time,psth_preferred,'-b'); + plot(time,psth_non_preferred,'-r'); + xlim(time_bin); + ylim([0, ceil(nanmax([psth_preferred,psth_non_preferred]))]); + title(sprintf('Preferred position \n versus all others '), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',[0, ceil(nanmax([psth_preferred,psth_non_preferred]))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(3),position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M(i_roi).theta_bins_centers; + yyy=M(i_roi).theta_tuning_curve; + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M(i_roi).theta_tuning_curve_odd,'-','Color',[0 0 0]); + plot(xxx,M(i_roi).theta_tuning_curve_even,'-','Color',[0.5 0.5 0.5]); + title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f \n theta = %d deg',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr, floor(M(i_roi).preferred_theta)), 'FontSize',10); + xlim([-180,180]) + ylim([0, ceil(nanmax(yyy))]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, ceil(nanmax(yyy))-eps], 'FontSize',10,'TickLength',[0.05,0]); + + %% Maps + axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr) + max_map=max(M(i_roi).lickmap_fr(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_odd) + max_map=max(M(i_roi).lickmap_fr_odd(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + axis xy + axis equal; + axis tight + set(gca,'YDir','normal'); + colorbar + + axes('position',[position_x2(4),position_y2(4)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_even) + max_map=max(M(i_roi).lickmap_fr_even(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight; + set(gca,'YDir','normal'); + colorbar + + +% x_bins=M(i_roi).pos_x_bins_centers; +% z_bins =M(i_roi).pos_z_bins_centers; +% counter=1; +% for ix=1:1:numel(x_bins) +% for iz=1:1:numel(z_bins) +% pos_x(counter) = x_bins(ix); +% pos_z(counter) = z_bins(iz); +% counter=counter+1; +% end +% end +% [theta, radius] = cart2pol(pos_x,pos_z); +% theta=rad2deg(theta); +% theta_bins=linspace(-180,180,9); +% theta_bins = theta_bins - mean(diff(theta_bins))/2; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +% +% +% [temp,~,theta_idx] = histcounts(theta,theta_bins); +% +% theta_idx(theta_idx==0)=1; +% +% map=M(i_roi).lickmap_fr; +% +% for i_theta=1:1:numel(theta_bins_centers) +% idx= find( (theta_idx==i_theta)); +% theta_spikes_binned(i_theta) = sum(map(idx)); +% theta_timespent_binned(i_theta)=numel(idx); +% end +% +% [~, theta_firing_rate_smoothed, preferred_theta,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... +% (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, 1, 1, 1, 1); +% plot(theta_bins_centers,theta_firing_rate_smoothed,'-r') +% + + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['roi_' num2str(roi_number(i_roi))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/analysis/lick2D/lick2D_map_behaviorperform.asv b/analysis/lick2D/lick2D_map_behaviorperform.asv new file mode 100644 index 0000000..7ab6810 --- /dev/null +++ b/analysis/lick2D/lick2D_map_behaviorperform.asv @@ -0,0 +1,46 @@ +function lick2D_map_behaviorperform() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +key.subject_id = 463195; +key.session =3; +key.number_of_bins=4; + +rel = EXP2.BehaviorTrial*EXP2.TrialLickBlock*EXP2.TrialLickPort & key; + +B=fetch(rel, '*'); +%% Rescaling, rotation, and binning +[POS] = fn_rescale_and_rotate_lickport_pos (key); +pos_x = POS.pos_x; +pos_z = POS.pos_z; + +x_bins = linspace(-1, 1,key.number_of_bins+1); +x_bins_centers=x_bins(1:end-1)+mean(diff(x_bins))/2; + +z_bins = linspace(-1,1,key.number_of_bins+1); +z_bins_centers=z_bins(1:end-1)+mean(diff(z_bins))/2; + +x_bins(1)= -inf; +x_bins(end)= inf; +z_bins(1)= -inf; +z_bins(end)= inf; + + + +%% Compute maps +[hhhhh, ~, ~, x_idx, z_idx] = histcounts2(pos_x,pos_z,x_bins,z_bins); + +outcome ={B.outcome}; + + + for i_x=1:1:numel(x_bins_centers) + for i_z=1:1:numel(z_bins_centers) + idx = find((x_idx==i_x) & (z_idx==i_z)); + + map_xz_spikes_binned(i_z,i_x) = sum(fr_all(i_roi,idx)); + + + +end +end \ No newline at end of file diff --git a/analysis/lick2D/lick2D_map_block_order.m b/analysis/lick2D/lick2D_map_block_order.m new file mode 100644 index 0000000..e12d530 --- /dev/null +++ b/analysis/lick2D/lick2D_map_block_order.m @@ -0,0 +1,216 @@ +function lick2D_map_block_order() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +key.subject_id = 463195; +key.session =3; + + +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 447990; +% key.session =8; + +% key.session_epoch_number = 1; +key.number_of_bins=4; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +key.fr_interval_start=0; +key.fr_interval_end=2000; +session_date = fetch1(EXP2.Session & key,'session_date'); + +if flag_all_or_signif ==1 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= ANLI.ROILick2DmapBlock * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHBlock & IMG.ROIGood & key; +elseif flag_all_or_signif ==2 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; + rel= (ANLI.ROILick2DmapBlock * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHBlock) & IMG.ROIGood & key & 'pval_information_per_spike<=0.001'; +elseif flag_all_or_signif ==3 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_motor\' ]; + rel= (ANLI.ROILick2DmapBlock * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHBlock) & IMG.ROIGood & key & 'pval_psth<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.01'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.05' & 'pval_lickmap_odd_even_corr<=0.05' ; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_rayleigh_length<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'rayleigh_length>=1'; +end + + +% rel= rel & 'information_per_spike>0.05'; +rel= rel & 'information_per_spike>0.1'; + +dir_current_fig = [dir_current_fig 'supersignif\' 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' 'bins' num2str(key.number_of_bins) '\' 'block_order\']; + +M=fetch(rel ,'*'); +roi_number=[M.roi_number]; + +time=M.psth_time; +time_bin=[-2,3]; %2 sec + +number_of_bins = M.number_of_bins; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +for i_roi=1:1:size(M,1) + + psth_max= cell2mat(reshape(M(i_roi).psth_per_position,[number_of_bins^2,1])); + psth_max= psth_max(:,time>0 & time<=2); + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(time,M(i_roi).psth_per_position{i_l},'-r','LineWidth',1); + try + plot(time,M(i_roi).psth_per_position_odd{i_l},'-','Color',[0 0 1],'LineWidth',1); + plot(time,M(i_roi).psth_per_position_even{i_l},'-','Color',[0 1 0],'LineWidth',1); + end + ylims=[0,ceil(psth_max)+eps]; + ylim(ylims); + xlim(time_bin); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Spikes/s', 'FontSize',14); + set(gca,'XTick',[-2,0,2],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[-2,0,2],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_m_begin= M(i_roi).psth_averaged_over_all_positions_begin; + psth_m_mid= M(i_roi).psth_averaged_over_all_positions_mid; + psth_m_end= M(i_roi).psth_averaged_over_all_positions_end; + +plot(time,psth_m_begin,'-r'); +plot(time,psth_m_mid,'-g'); +plot(time,psth_m_end,'-b'); + +% psth_stem = M(i_roi).psth_stem_over_all_positions; +% shadedErrorBar(time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + xlim(time_bin); + ylim([0, ceil(nanmax([psth_m_begin,psth_m_end,psth_m_mid]))]); + title(sprintf('All positions \n p-val = %.4f ', M(i_roi).pval_psth), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-2,0,2],'Ytick',[0, ceil(nanmax([psth_m_begin,psth_m_end,psth_m_mid]))],'TickLength',[0.05,0], 'FontSize',10); + + + + axes('position',[position_x2(2),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr) + max_map=max(M(i_roi).lickmap_fr(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); +set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3), panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_odd) + max_map=max(M(i_roi).lickmap_fr_odd(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + axis xy + axis equal; + axis tight + axis tight +set(gca,'YDir','normal'); + colorbar + + axes('position',[position_x2(4),position_y2(4), panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_even) + max_map=max(M(i_roi).lickmap_fr_even(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight; +set(gca,'YDir','normal'); + colorbar + + + axes('position',[position_x2(3)+0.02,position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M(i_roi).theta_bins_centers; + yyy=M(i_roi).theta_tuning_curve; + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M(i_roi).theta_tuning_curve_odd,'-','Color',[0 0 0]); + plot(xxx,M(i_roi).theta_tuning_curve_even,'-','Color',[0.5 0.5 0.5]); + title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr ), 'FontSize',10); + xlim([-180,180]) + ylim([0, ceil(nanmax(yyy))]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, ceil(nanmax(yyy))-eps], 'FontSize',10,'TickLength',[0.05,0]); + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['roi_' num2str(roi_number(i_roi))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/analysis/lick2D/lick2D_map_distance_dependence.m b/analysis/lick2D/lick2D_map_distance_dependence.m new file mode 100644 index 0000000..b908b36 --- /dev/null +++ b/analysis/lick2D/lick2D_map_distance_dependence.m @@ -0,0 +1,208 @@ +function lick2D_map_distance_dependence() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +% +key.subject_id = 463195; +key.session =3; + +% key.subject_id = 462455; +% key.session =2; + +% key.subject_id = 462458; +% key.session =5; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +% session_date = fetch1(EXP2.Session & key,'session_date'); + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_plot_rois =1; % 1 to plot ROIs on top of the image plane, 0 not to plot + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_theta_distance\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarCluster * ANLI.ROILick2Dangle)* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarCluster * ANLI.ROILick2Dangle)* IMG.ROI & IMG.ROIGood & key & 'rayleigh_length>0.0' & 'theta_tuning_odd_even_corr>0.5'; + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +if flag_plot_rois==0 + filename=[filename '_norois']; +end +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +rel = rel & 'heirar_cluster_percent>2' ; + + +distance_bins = [5:10:205,inf]; % in microns + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.7; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.12; +vertical_dist2=0.12; + +panel_width2=0.08; +panel_height2=0.08; + + + +position_x2(1)=0.35; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(1); +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + + +%% MAPS +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +M=fetch(rel ,'*'); +M=struct2table(M); + +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend') +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end +my_colormap=hsv(numel(unique_cluster_id)); + +for i_roi=1:1:size(M,1) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm%d session %d\nAll planes', key.subject_id,key.session)); + + + + + theta_all = M.preferred_theta; +x_all=M.roi_centroid_x*pix2dist; +y_all=M.roi_centroid_y*pix2dist; + +for ii=1:1:numel(roi_cluster_id) + + x=M.roi_centroid_x(ii)*pix2dist; + y=M.roi_centroid_y(ii)*pix2dist; + d(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); + + theta = M.preferred_theta(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); +% dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + + +end +d=d(:); +dtheta=dtheta(:); + +[N,edges,bin] = histcounts(d(:),distance_bins); + +for i=1:1:numel(distance_bins)-1 +idx = (bin ==i); + dtheta_dist(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + +end + +ax1=axes('position',[position_x1(2), position_y1(1), panel_width1, panel_height1]); +plot(distance_bins(1:1:end-1),dtheta_dist) +ylim([0,90]); +xlabel('Distance (\mum)'); +ylabel('\Delta\theta (\circ)'); + + +% figure +% plot(d(:),dtheta(:),'.') + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_meso.m b/analysis/lick2D/lick2D_map_meso.m new file mode 100644 index 0000000..110e768 --- /dev/null +++ b/analysis/lick2D/lick2D_map_meso.m @@ -0,0 +1,294 @@ +function lick2D_map_meso() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462458; +% key.session =11; + +% key.subject_id = 462455; +% key.session =3; + +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 447990; +% key.session =8; +% key.subject_id =463190; +% key.session =8; +% key.subject_id =463189; +% key.session =2; + + key.subject_id =464724; +key.session =2; + + +% key.session_epoch_number = 1; +% key.number_of_bins=4; +% key.fr_interval_start=-2000; +% key.fr_interval_end=0; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +session_date = fetch1(EXP2.Session & key,'session_date'); +if flag_all_or_signif ==0 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= LICK2D.ROILick2Dmap * LICK2D.ROILick2Dselectivity* LICK2D.ROILick2Dangle * LICK2D.ROILick2DPSTH & IMG.ROIGood & key; +elseif flag_all_or_signif ==1 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= LICK2D.ROILick2Dmap* LICK2D.ROILick2Dselectivity * LICK2D.ROILick2Dangle * LICK2D.ROILick2DangleShuffle * LICK2D.ROILick2DmapShuffle * LICK2D.ROILick2DPSTH & IMG.ROIGood & key; +% elseif flag_all_or_signif ==2 +% dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; +% rel= (ANLI.ROILick2Dmap* ANLI.ROILick2Dselectivity * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH) & IMG.ROIGood & key & 'lickmap_odd_even_corr>=0.5'; +elseif flag_all_or_signif ==2 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; + rel= LICK2D.ROILick2Dmap * LICK2D.ROILick2Dselectivity* LICK2D.ROILick2Dangle * LICK2D.ROILick2DPSTH & IMG.ROIGood & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5'; +elseif flag_all_or_signif ==3 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_motor\' ]; + rel= (LICK2D.ROILick2Dmap* LICK2D.ROILick2Dselectivity * LICK2D.ROILick2Dangle * LICK2D.ROILick2DangleShuffle * LICK2D.ROILick2DmapShuffle * LICK2D.ROILick2DPSTH) & IMG.ROIGood & key & 'pval_psth<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.01'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.05' & 'pval_lickmap_odd_even_corr<=0.05' ; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_rayleigh_length<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'rayleigh_length>=1'; +end + +roi_number=fetchn(rel,'roi_number','ORDER BY roi_number'); + +% rel= rel & 'information_per_spike>0.05'; +% dir_current_fig = [dir_current_fig 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' 'bins' num2str(key.number_of_bins) '\' ]; +dir_current_fig = [dir_current_fig 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' ]; + +number_of_bins = 3; + + + +time_bin=[-3,4]; %2 sec +smooth_bin = 3; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +for i_roi2=1:1:numel(roi_number) + kkkroi.roi_number=roi_number(i_roi2); + M=fetch(rel & kkkroi,'*'); + + i_roi=1; +time=M.psth_time; + + psth_max= cell2mat(reshape(M(i_roi).psth_per_position,[number_of_bins^2,1])); + psth_max= psth_max(:,time>-2 & time<=3); + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(time,smooth(M(i_roi).psth_per_position{i_l},smooth_bin),'-r','LineWidth',2); + try + plot(time,smooth(M(i_roi).psth_per_position_odd{i_l},smooth_bin),'-','Color',[0 0 0]); + plot(time,smooth(M(i_roi).psth_per_position_even{i_l},smooth_bin),'-','Color',[0.5 0.5 0.5]); + end + ylims=[0,ceil(psth_max)+eps]; + ylim(ylims); + xlim(time_bin); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Spikes/s', 'FontSize',14); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_m= smooth(M(i_roi).psth_averaged_over_all_positions,smooth_bin); + psth_stem = smooth(M(i_roi).psth_stem_over_all_positions,smooth_bin); + shadedErrorBar(time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + xlim(time_bin); + ylim([0, ceil(nanmax(psth_m))]); + title(sprintf('All positions \n p-val = %.4f ', M(i_roi).pval_psth), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',[0, ceil(nanmax(psth_m))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(2),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_preferred= smooth(M(i_roi).psth_preferred,smooth_bin)'; + psth_non_preferred= smooth(M(i_roi).psth_non_preferred,smooth_bin)'; + plot(time,psth_preferred,'-b'); + plot(time,psth_non_preferred,'-r'); + xlim(time_bin); + ylim([0, ceil(nanmax([psth_preferred,psth_non_preferred]))]); + title(sprintf('Preferred position \n versus all others '), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[time_bin(1),0,time_bin(2)],'Ytick',[0, ceil(nanmax([psth_preferred,psth_non_preferred]))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(3),position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M(i_roi).theta_bins_centers; + yyy=M(i_roi).theta_tuning_curve; + yyy_vnmises=M(i_roi).theta_tuning_curve_vmises; + plot([-180:1:179],yyy_vnmises,'-g','LineWidth',2); + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M(i_roi).theta_tuning_curve_odd,'-','Color',[0 0 0]); + plot(xxx,M(i_roi).theta_tuning_curve_even,'-','Color',[0.5 0.5 0.5]); + + try + title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f \n theta = %d thetaVM = %d deg',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr, floor(M(i_roi).preferred_theta), floor(M(i_roi).preferred_theta_vmises)), 'FontSize',10); + catch + title(sprintf('Directional tuning \n RV = %.2f\n r = %.2f r^2 fit VM = %.2f \n theta = %d VM = %d deg',M(i_roi).rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).goodness_of_fit_vmises, floor(M(i_roi).preferred_theta), floor(M(i_roi).preferred_theta_vmises)), 'FontSize',10); + end + xlim([-180,180]) + ylim([0, ceil(nanmax([yyy,yyy_vnmises]))]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, ceil(nanmax([yyy,yyy_vnmises]))-eps], 'FontSize',10,'TickLength',[0.05,0]); + + %% Maps + axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr) + max_map=max(M(i_roi).lickmap_fr(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + try + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi2),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + catch + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n ',roi_number(i_roi2),key.subject_id, session_date, M(i_roi).information_per_spike), 'FontSize',10); + end + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_odd) + max_map=max(M(i_roi).lickmap_fr_odd(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + try + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + catch + title(sprintf('Stability r = %.2f \n\n \n Odd trials', M(i_roi).lickmap_odd_even_corr), 'FontSize',10); + end + axis xy + axis equal; + axis tight + set(gca,'YDir','normal'); + colorbar + + axes('position',[position_x2(4),position_y2(4)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_even) + max_map=max(M(i_roi).lickmap_fr_even(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight; + set(gca,'YDir','normal'); + colorbar + + +% x_bins=M(i_roi).pos_x_bins_centers; +% z_bins =M(i_roi).pos_z_bins_centers; +% counter=1; +% for ix=1:1:numel(x_bins) +% for iz=1:1:numel(z_bins) +% pos_x(counter) = x_bins(ix); +% pos_z(counter) = z_bins(iz); +% counter=counter+1; +% end +% end +% [theta, radius] = cart2pol(pos_x,pos_z); +% theta=rad2deg(theta); +% theta_bins=linspace(-180,180,9); +% theta_bins = theta_bins - mean(diff(theta_bins))/2; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +% +% +% [temp,~,theta_idx] = histcounts(theta,theta_bins); +% +% theta_idx(theta_idx==0)=1; +% +% map=M(i_roi).lickmap_fr; +% +% for i_theta=1:1:numel(theta_bins_centers) +% idx= find( (theta_idx==i_theta)); +% theta_spikes_binned(i_theta) = sum(map(idx)); +% theta_timespent_binned(i_theta)=numel(idx); +% end +% +% [~, theta_firing_rate_smoothed, preferred_theta,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... +% (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, 1, 1, 1, 1); +% plot(theta_bins_centers,theta_firing_rate_smoothed,'-r') +% + + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['roi_' num2str(roi_number(i_roi2))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_angles.m b/analysis/lick2D/lick2D_map_onFOV_angles.m new file mode 100644 index 0000000..6bd84a9 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_angles.m @@ -0,0 +1,343 @@ +function lick2D_map_onFOV_angles() +close all; +% clf; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +column_radius = 15; %in um +min_num_cells = 5; +% key.subject_id =447991; +% key.subject_id = 445978; +% key.subject_9id = 443627; +% key.subject_id = 447990; +% key.session =3; +% key.subject_id = 445980; +% key.session =7; +% +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462458; +% key.session =12; + +key.subject_id = 462455; +key.session =3; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + + +dir_current_fig = [dir_base '\Lick2D\population\onFOV_theta_distance\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI*IMG.ROIdepth & IMG.ROIGood & key & 'lickmap_odd_even_corr>-1' & 'rayleigh_length>0' & 'theta_tuning_odd_even_corr>-1' & 'pval_rayleigh_length<0.05'; + dir_current_fig=[dir_current_fig 'signif_2Dlick\']; +elseif flag_all_or_signif ==3 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI*IMG.ROIdepth & IMG.ROIGood & key & 'pval_psth<=0.01'; + dir_current_fig=[dir_current_fig 'signif_motor\']; +end + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +% rel = rel & (ANLI.IncludeROI & 'number_of_events>=50'); +% rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=50'); + +% rel = rel & 'information_per_spike>=0.05' & 'plane_num=1'; +% rel = rel & 'information_per_spike>=0.1'; +% rel = rel & 'plane_num=4'; +% & 'pval_information_per_spike<=0.01' +rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key ; +lateral_distance_bins = [0:10:120,inf]; % in microns +euclidean_distance_bins = [10:10:120]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.6; +position_x1(1)=0.06; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.12; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.77; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*1.2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + +M=fetch(rel ,'*'); +M=struct2table(M); +roi_number=M.roi_number; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); +% hmap(1:360,1) = linspace(0,1,360); +% hmap(:,[2 3]) = 0.8; %brightness +% huemap = hsv2rgb(hmap); +% my_colormap=huemap; + + +for i_roi=1:1:size(M,1) + prefered_angle=floor((M.preferred_theta(i_roi)+180)); +% plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',15) +% text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +colormap(ax2,hsv) +cb1 = colorbar(ax2,'Position',[position_x1(1)+panel_width1*1.1 position_y1(1) 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta; + +x_all=M.roi_centroid_x*pix2dist; +y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +for ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + + theta = M.preferred_theta(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); +% dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); + + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 +idx = (bin ==i); + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +for i=1:1:numel(lateral_distance_bins)-1 +idx = (bin ==i); + dtheta_XYdist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +ylim([0,110]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + + +%% Axial Distance dependence + +idx_within_column = dXY<=column_radius; + +dtheta_column = dtheta(idx_within_column); +dZ_column = dZ(idx_within_column); +axial_distance_bins = unique(dZ_column)'; +axial_distance_bins=[axial_distance_bins,inf]; +[N,edges,bin] = histcounts(dZ_column,axial_distance_bins); +for i=1:1:numel(axial_distance_bins)-1 +idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta_column(:))); +dtheta_column_shuffled = dtheta_shuffled(idx_within_column); +for i=1:1:numel(axial_distance_bins)-1 +idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); +% dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); +end + +ax1=axes('position',[position_x2(4), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') +plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') +ylim([0,110]); +xlabel('Axial distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nAxial distance')); +xlim([0,axial_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + + +%% 3D Distance dependence +% euclidean_distance_bins = lateral_distance_bins(2:end); +[N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); +for i=1:1:numel(euclidean_distance_bins)-1 +idx = (bin ==i); + dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +for i=1:1:numel(euclidean_distance_bins)-1 +idx = (bin ==i); +dtheta_shuffled = dtheta(idx_shuffled); + dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); +end + +ax1=axes('position',[position_x2(5), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') +plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') +ylim([0,110]); +xlabel('Euclidean (3D) distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nEuclidean (3D) distance')); +xlim([0,euclidean_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + + + +%% +axes('position',[position_x2(3)-0.02, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; +axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +b=histogram(M.preferred_radius,4); +title(sprintf('Preferred amplitude \nof tuned neurons\n')); +xlabel('Radial distance (normalized)') +ylabel('Counts') +box off; +xlim([0,b.BinEdges(end)]) + +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.lickmap_odd_even_corr,10); +title(sprintf('2D MAP Tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Direction tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + + + +axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.information_per_spike,10); +title(sprintf('Positional (2D) tuning \n')); +xlabel(sprintf('Information (bits/spike)')); +ylabel('Counts') +box off; +% xlim([-1,1]) + +axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b.BinLimits(2)]) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_angles__meso.m b/analysis/lick2D/lick2D_map_onFOV_angles__meso.m new file mode 100644 index 0000000..5097310 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_angles__meso.m @@ -0,0 +1,503 @@ +function lick2D_map_onFOV_angles__meso(key, dir_current_fig, flag_spikes) +close all; +% clf; + + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + + % key.subject_id = 464725; + % key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + dir_current_fig = [dir_base '\Lick2D\population\theta_distance_meso_neuropil\']; + + +end + + + + +if flag_spikes==1 + rel_data=LICK2D.ROILick2DangleSpikes; +else + rel_data=LICK2D.ROILick2Dangle; +end + + rel_rois= IMG.ROIGood & (rel_data & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5' & 'rayleigh_length<0.2'); + dir_current_fig=[dir_current_fig 'signif_2Dlick\']; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +rel = rel_data*IMG.PlaneCoordinates*IMG.ROI & rel_rois; +rel_neuropil = LICK2D.ROILick2DangleNeuropil*IMG.PlaneCoordinates & rel_rois; + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; +% session_date = fetch1(EXP2.Session & key,'session_date'); +% +% filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] +% +% rel = rel & (LICK2D.IncludeROI & 'number_of_events>=50'); +% rel_all_good_cells= LICK2D.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key & (LICK2D.IncludeROI & 'number_of_events>=50'); + +% rel = rel & 'information_per_spike>=0.05' & 'plane_num=1'; +% rel = rel & 'information_per_spike>=0.1'; +% rel = rel & 'plane_num=4'; +% & 'pval_information_per_spike<=0.01' +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.38; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.08; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.65; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.9; +position_y2(end+1)=position_y2(end)-vertical_dist2*0.7; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; + + + + + +M=fetch(rel ,'*'); + +M=struct2table(M); +roi_number=M.roi_number; + +M_neuropil=fetch(rel_neuropil ,'*'); +M_neuropil=struct2table(M_neuropil); + + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta_vmises; + +theta_all_neuropil =M_neuropil.preferred_theta_vmises; + +%% cells vs neuropil +dtheta_cells_vs_neuropil= circ_dist(deg2rad(theta_all),deg2rad(theta_all_neuropil)); +% dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +dtheta_cells_vs_neuropil = abs(rad2deg(dtheta_cells_vs_neuropil)); +% % histogram(theta_all) +% % histogram(theta_all_neuropil) +% histogram(dtheta_cells_vs_neuropil) +% % plot(theta_all,theta_all_neuropil,'.') +% +% % plot(M.rayleigh_length,M_neuropil.rayleigh_length,'.') +% histogram(M.rayleigh_length-M_neuropil.rayleigh_length) +% histogram(M.theta_tuning_odd_even_corr-M_neuropil.theta_tuning_odd_even_corr) +% +% % plot(M.theta_tuning_odd_even_corr,M_neuropil.theta_tuning_odd_even_corr,'.') + + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +for ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + + theta = M.preferred_theta_vmises(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); + % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + + theta_neuropil = theta_all_neuropil(ii); + dtheta_temp_neuropil = circ_dist(deg2rad(theta_all_neuropil),deg2rad(theta_neuropil)); + % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta_neuropil(ii,:) = abs(rad2deg(dtheta_temp_neuropil)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); +dtheta_neuropil =dtheta_neuropil(idx_not_self); + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + + dtheta_XYdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_neuropil(idx)))); + dtheta_XYdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_neuropil(idx))))/sqrt(sum(idx)); + +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +dtheta_shuffled_neuropil = dtheta_neuropil(idx_shuffled); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + dtheta_XYdist_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled_neuropil(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +ylim([0,110]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + +ax1=axes('position',[position_x2(3), position_y2(4), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean_neuropil,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled_neuropil,'-k') +ylim([0,110]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Neuropil')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtheta_column = dtheta(idx_within_column); + dtheta_column_neuropil = dtheta_neuropil(idx_within_column); + + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); + + dtheta_Zdist_mean_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_neuropil(idx)))); + dtheta_Zdist_var_neuropil(i) = rad2deg(circ_var(deg2rad(dtheta_column_neuropil(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta_column(:))); + dtheta_column_shuffled = dtheta_shuffled(idx_within_column); + dtheta_column_shuffled_neuropil = dtheta_shuffled_neuropil(idx_within_column); + + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); + dtheta_Zdist_mean_shuffled_neuropil(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled_neuropil(idx)))); + + % dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') + ylim([0,110]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Preferred Direction \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); + + ax1=axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_neuropil,'.-r') + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled_neuropil,'.-k') + ylim([0,110]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Neuropil')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); + + % %% 3D Distance dependence + % % euclidean_distance_bins = lateral_distance_bins(2:end); + % [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + % dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + % end + % + % %shuffled + % idx_shuffled = randperm(numel(dtheta(:))); + % for i=1:1:numel(euclidean_distance_bins)-1 + % idx = (bin ==i); + % dtheta_shuffled = dtheta(idx_shuffled); + % dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + % end + % + % ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + % hold on; + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') + % plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') + % ylim([0,110]); + % xlabel('Euclidean (3D) distance (\mum)'); + % ylabel('\Delta\theta (\circ)'); + % title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + % xlim([0,euclidean_distance_bins(end-1)]); + % set(gca,'YTick',[0, 45, 90]); +end + + +%% +axes('position',[position_x2(4)+0.15, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta_vmises,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; + +axes('position',[position_x2(4)+0.15, position_y2(1)-0.2, panel_width2, panel_height2]); +histogram(M.preferred_theta_vmises); + + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Directional-tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +axes('position',[position_x2(1), position_y2(4), panel_width2, panel_height2]); +b2=histogram(M_neuropil.theta_tuning_odd_even_corr,10); +title(sprintf('Neuropil')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +b1=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b1.BinLimits(2)]) + +axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +b2=histogram(M_neuropil.rayleigh_length,10); +title(sprintf('Neuropil')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b1.BinLimits(2)]) + +axes('position',[position_x2(5), position_y2(4), panel_width2, panel_height2]); +b2=histogram(dtheta_cells_vs_neuropil,18); +title(sprintf('Neurons vs. Neuropil')); +xlabel('Neurons vs Neuropil \Delta\theta(\circ)'); +ylabel('Counts') +box off; +xlim([0,180]) + + +%% Map with preferred orientations + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +% +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); + +% %%up down +% my_colormap(1:1:180,:)=repmat([1 0 0],180,1); +% my_colormap(180:1:end,:)=repmat([0 0 1],181,1); + +% % 4 directions +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([0 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 1 0],90,1); + +% % left right +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([1 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 0 1],90,1); + + + + +preferred_theta =M.preferred_theta_vmises; +% idx_rand = randperm(numel(x)); +% preferred_theta=preferred_theta(idx_rand); +for i_roi=1:1:size(M_all_all,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end + +for i_roi=1:1:size(M,1) + + prefered_angle=floor(preferred_theta(i_roi)+180)+1; + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[0.75, 0.6, panel_width1, panel_height1]); +colormap(ax2,my_colormap) +cb1 = colorbar(ax2,'Position',[0.72, 0.6 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_angles__meso_neuropil.m b/analysis/lick2D/lick2D_map_onFOV_angles__meso_neuropil.m new file mode 100644 index 0000000..7028ef6 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_angles__meso_neuropil.m @@ -0,0 +1,401 @@ +function lick2D_map_onFOV_angles__meso_neuropil(key) +close all; +% clf; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Lick2D\population\theta_distance_meso_neuropil\']; + + +column_radius = 20; %in um +min_num_cells = 5; +if nargin<1 + + % key.subject_id =447991; + % key.subject_id = 445978; + % key.subject_9id = 443627; + % key.subject_id = 447990; + % key.session =3; + % key.subject_id = 445980; + % key.session =7; + % + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462458; + % key.session =12; + + % key.subject_id = 463190; + % key.session =8; + key.subject_id = 463189; + key.session =5; + +% key.subject_id = 464725; +% key.session =10; + % + % key.fr_interval_start=-1000; + % key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + +else +end + + + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + + +if flag_all_or_signif ==2 + rel= (ANLI.ROILick2DangleNeuropil)* IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key & 'theta_tuning_odd_even_corr>0.5' & 'goodness_of_fit_vmises>0.5' & 'rayleigh_length>0.1'; + dir_current_fig=[dir_current_fig 'signif_2Dlick\']; +elseif flag_all_or_signif ==3 + rel= (ANLI.ROILick2DangleNeuropil)* IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key & 'pval_psth<=0.01'; + dir_current_fig=[dir_current_fig 'signif_motor\']; +end +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [ 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + + +rel_all = IMG.ROI*IMG.PlaneCoordinates & IMG.ROIGood & key; +% session_date = fetch1(EXP2.Session & key,'session_date'); +% +% filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] +% +% rel = rel & (ANLI.IncludeROI & 'number_of_events>=50'); +% rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=50'); + +% rel = rel & 'information_per_spike>=0.05' & 'plane_num=1'; +% rel = rel & 'information_per_spike>=0.1'; +% rel = rel & 'plane_num=4'; +% & 'pval_information_per_spike<=0.01' +lateral_distance_bins = [0:20:500,inf]; % in microns +euclidean_distance_bins = [10:20:500]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.45; +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.12; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.77; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*1.2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key &'fov_num=1', 'fov_x_size'); +pix2dist=1; +M=fetch(rel ,'*'); +M=struct2table(M); +roi_number=M.roi_number; + + +M_all_all=fetch(rel_all ,'*'); +M_all_all=struct2table(M_all_all); +roi_number_all=M_all_all.roi_number; + + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +% +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); + +% %%up down +% my_colormap(1:1:180,:)=repmat([1 0 0],180,1); +% my_colormap(180:1:end,:)=repmat([0 0 1],181,1); + +% % 4 directions +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([0 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 1 0],90,1); + +% % left right +% my_colormap(1:1:90,:)=repmat([1 0 0],90,1); +% my_colormap(91:1:180,:)=repmat([0 0 1],90,1); +% my_colormap(181:1:270,:)=repmat([1 0 0],90,1); +% my_colormap(271:1:360,:)=repmat([0 0 1],90,1); + + + +x_all = M.roi_centroid_x + M.x_pos_relative; +y_all = M.roi_centroid_y + M.y_pos_relative; + +x_all=x_all/0.75; +y_all=y_all/0.5; + +x_all_all = M_all_all.roi_centroid_x + M_all_all.x_pos_relative; +y_all_all = M_all_all.roi_centroid_y + M_all_all.y_pos_relative; + + +x_all_all=x_all_all/0.75; +y_all_all=y_all_all/0.5; + +preferred_theta =M.preferred_theta_vmises; +% idx_rand = randperm(numel(x)); +% preferred_theta=preferred_theta(idx_rand); +for i_roi=1:1:size(M_all_all,1) + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all_all(i_roi)*pix2dist, y_all_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end + +for i_roi=1:1:size(M,1) + + prefered_angle=floor(preferred_theta(i_roi)+180)+1; + % plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',7) + % text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[0.75, 0.6, panel_width1, panel_height1]); +colormap(ax2,my_colormap) +cb1 = colorbar(ax2,'Position',[0.72, 0.6 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta_vmises; + +% x_all=M.roi_centroid_x*pix2dist; +% y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +for ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + + theta = M.preferred_theta_vmises(ii); + dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); + % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); + dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +dtheta=dtheta(idx_not_self); + + +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_XYdist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +for i=1:1:numel(lateral_distance_bins)-1 + idx = (bin ==i); + dtheta_XYdist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +ylim([0,110]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +set(gca,'YTick',[0, 45, 90]); + + +%% Axial Distance dependence +if max(dZ)>0 + idx_within_column = dXY<=column_radius; + + dtheta_column = dtheta(idx_within_column); + dZ_column = dZ(idx_within_column); + axial_distance_bins = unique(dZ_column)'; + axial_distance_bins=[axial_distance_bins,inf]; + [N,edges,bin] = histcounts(dZ_column,axial_distance_bins); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta_column(idx)))); + dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_column(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta_column(:))); + dtheta_column_shuffled = dtheta_shuffled(idx_within_column); + for i=1:1:numel(axial_distance_bins)-1 + idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_column_shuffled(idx)))); + % dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); + end + + ax1=axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') + plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') + ylim([0,110]); + xlabel('Axial distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Preferred Direction \nAxial distance')); + xlim([0,axial_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); + + + %% 3D Distance dependence + % euclidean_distance_bins = lateral_distance_bins(2:end); + [N,~,bin] = histcounts(d3D(:),euclidean_distance_bins); + for i=1:1:numel(euclidean_distance_bins)-1 + idx = (bin ==i); + dtheta_3Ddist_mean(i) = rad2deg(circ_mean(deg2rad(dtheta(idx)))); + dtheta_3Ddist_var(i) = rad2deg(circ_var(deg2rad(dtheta(idx))))/sqrt(sum(idx)); + end + + %shuffled + idx_shuffled = randperm(numel(dtheta(:))); + for i=1:1:numel(euclidean_distance_bins)-1 + idx = (bin ==i); + dtheta_shuffled = dtheta(idx_shuffled); + dtheta_3Ddist_shuffled(i) = rad2deg(circ_mean(deg2rad(dtheta_shuffled(idx)))); + end + + ax1=axes('position',[position_x2(5), position_y2(3), panel_width2, panel_height2]); + hold on; + plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') + plot(euclidean_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') + ylim([0,110]); + xlabel('Euclidean (3D) distance (\mum)'); + ylabel('\Delta\theta (\circ)'); + title(sprintf('Preferred Direction \nEuclidean (3D) distance')); + xlim([0,euclidean_distance_bins(end-1)]); + set(gca,'YTick',[0, 45, 90]); +end + + +%% Preferred orientations circular plot +axes('position',[position_x2(4)+0.12, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta_vmises,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; + +% axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +% b=histogram(M.preferred_radius,4); +% title(sprintf('Preferred amplitude \nof tuned neurons\n')); +% xlabel('Radial distance (normalized)') +% ylabel('Counts') +% box off; +% xlim([0,b.BinEdges(end)]) +% +% axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.lickmap_odd_even_corr,10); +% title(sprintf('2D MAP Tuning stability \n')); +% xlabel(sprintf('Correlation (odd,even) trials')); +% ylabel('Counts') +% box off; +% xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(4), panel_width2, panel_height2]); +b=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Direction tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + + + +% axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +% b=histogram(M.information_per_spike,10); +% title(sprintf('Positional (2D) tuning \n')); +% xlabel(sprintf('Information (bits/spike)')); +% ylabel('Counts') +% box off; +% % xlim([-1,1]) + +axes('position',[position_x2(4), position_y2(4), panel_width2, panel_height2]); +b=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; +xlim([0,b.BinLimits(2)]) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters.m b/analysis/lick2D/lick2D_map_onFOV_clusters.m new file mode 100644 index 0000000..6a243d1 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters.m @@ -0,0 +1,338 @@ +function lick2D_map_onFOV_clusters() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +% +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462455; +% key.session =3; + +key.subject_id = 462458; +key.session =10; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +% session_date = fetch1(EXP2.Session & key,'session_date'); + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_plot_rois =1; % 1 to plot ROIs on top of the image plane, 0 not to plot + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarCluster )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarCluster )* IMG.ROI & IMG.ROIGood & key * IMG.ROI & IMG.ROIGood & key & 'lickmap_odd_even_corr>0.5'; + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +if flag_plot_rois==0 + filename=[filename '_norois']; +end +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +rel = rel & 'heirar_cluster_percent>2' ; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.7; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.12; +vertical_dist2=0.12; + +panel_width2=0.08; +panel_height2=0.08; + + + +position_x2(1)=0.35; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(1); +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + + +%% MAPS +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +M=fetch(rel ,'*'); +M=struct2table(M); + +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend') +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(4,:)=my_colormap(5,:); +my_colormap(3,:)=my_colormap(2,:); +my_colormap(1,:)=my_colormap(4,:); + +for i_roi=1:1:size(M,1) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm%d session %d\nAll planes', key.subject_id,key.session)); + + +%% First plane + +ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=1; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax2,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Second plane + +ax3=axes('position',[position_x1(2), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=2; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax3,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Third plane + +ax4=axes('position',[position_x1(1), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=3; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax4,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Fourth plane + +ax5=axes('position',[position_x1(2), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=4; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax5,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Plot clusters +PSTH= M.psth_averaged_over_all_positions; +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + +PSTH = PSTH./nanmax(PSTH,[],2); +for ic=1:1:numel(unique_cluster_id) + psth_cluster(ic,:)=mean(PSTH(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.time_psth(1,:),psth_cluster(ic,:)) + title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); +end + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso.m b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso.m new file mode 100644 index 0000000..f4c66bd --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso.m @@ -0,0 +1,360 @@ +function lick2D_map_onFOV_clusters_corr_meso(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig) +close all; + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +rel = IMG.ROI & ((POP.ROIClusterCorr& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorr*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = LICK2D.ROILick2DPSTH * LICK2D.ROILick2DSelectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s %d %s\n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.session_epoch_number,session_date, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso2.m b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso2.m new file mode 100644 index 0000000..3f57870 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso2.m @@ -0,0 +1,347 @@ +function lick2D_map_onFOV_clusters_corr_meso2(key, flag_plot_clusters_individually, n_clust, M_all) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\brain_maps\clusters_corr2\']; +rel = IMG.ROI & ((POP.ROIClusterCorr2& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorr2*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s \n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + + + %% Plot clusters + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso3.m b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso3.m new file mode 100644 index 0000000..7ef96e1 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso3.m @@ -0,0 +1,347 @@ +function lick2D_map_onFOV_clusters_corr_meso3(key, flag_plot_clusters_individually, n_clust, M_all) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\brain_maps\clusters_corrDiscrete\']; +rel = IMG.ROI & ((POP.ROIClusterCorrDiscrete& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorrDiscrete*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('%s \n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + + + %% Plot clusters + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil.m b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil.m new file mode 100644 index 0000000..b95686e --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil.m @@ -0,0 +1,360 @@ +function lick2D_map_onFOV_clusters_corr_meso_neuropil(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig) +close all; + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +rel = IMG.ROI & ((POP.ROIClusterCorr& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorrNeuropil*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = LICK2D.ROILick2DPSTH * LICK2D.ROILick2DSelectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('Neuropil \n%s %d %s\n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.session_epoch_number,session_date, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil_subtr.m b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil_subtr.m new file mode 100644 index 0000000..b2e1b67 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_corr_meso_neuropil_subtr.m @@ -0,0 +1,360 @@ +function lick2D_map_onFOV_clusters_corr_meso_neuropil_subtr(key, flag_plot_clusters_individually, n_clust, M_all, dir_current_fig) +close all; + + +key.n_clust = n_clust; +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +rel = IMG.ROI & ((POP.ROIClusterCorr& key) & 'heirar_cluster_percent>=1') & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROIClusterCorrNeuropilSubtr*IMG.PlaneCoordinates) & IMG.ROIGood & key) & 'heirar_cluster_percent>=1'; +rel2 = ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date '_' session_epoch_label num2str(key.session_epoch_number) '_nsplits' num2str(n_clust)] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.09; +vertical_dist2=0.12; + +panel_width2=0.07; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +roi_cluster_id_original = roi_cluster_id; + +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end +% +% roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; +% my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=7; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=7; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*numel(roi_cluster_id)/size(M_all,1); + title(sprintf('Neuropil \n%s %d %s\n anm%d session %d, Total planes = %d\nsplits = %d %.1f%% cells shown', session_epoch_label, key.session_epoch_number,session_date, key.subject_id,key.session, number_of_planes, n_clust, percent_clustered)); + + + % Plot Plane frames + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + xl=[-2,3]; %xlimit + for ic=1:1:min([numel(unique_cluster_id),10]) + + %Preferred + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Preferred'); + set(gca,'YTick',yl ,'XTick',[-2,0,2], 'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Non-preferred + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 1]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Non-prefer.'); + set(gca,'YTick',yl,'XTick',[-2,0,2] ,'XTickLabel',[]); + else + set(gca,'YTick',[],'XTick',[-2,0,2] ,'XTickLabel',[]); + end + + %Selectivity + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + yl = [0, 0.5]; + ylim(yl); + xlim(xl); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + set(gca,'YTick',yl,'XTick',[-2,0,2]); + + else + set(gca,'YTick',[],'XTick',[-2,0,2]); + end + end + + catch + disp('No behavioral data'); + end + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_preferred_non_preferred_meso.m b/analysis/lick2D/lick2D_map_onFOV_clusters_preferred_non_preferred_meso.m new file mode 100644 index 0000000..eb87ae5 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_preferred_non_preferred_meso.m @@ -0,0 +1,293 @@ +function lick2D_map_onFOV_clusters_preferred_non_preferred_meso(key, flag_plot_clusters_individually) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_preferred_non_preferred_meso\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + % rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + rel= (IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; + + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end + +roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; + + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_renumbered=roi_cluster_renumbered_original; + if flag_plot_clusters_individually==1 + roi_cluster_renumbered(roi_cluster_renumbered~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + % All planes + ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',7) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + title(sprintf('anm%d session %d, Total planes = %d \nCluster #%d', key.subject_id,key.session, number_of_planes, i_clus)); + + + + + %% Plot clusters + + PSTH1= M.psth_preferred; + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2= M.psth_non_preferred; + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3= M.selectivity; + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + + for ic=1:1:min([numel(unique_cluster_id),10]) + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-2,5]); + + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.12, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + + psth_cluster(ic,:)=mean(PSTH3(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.25, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity.m b/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity.m new file mode 100644 index 0000000..966766d --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity.m @@ -0,0 +1,339 @@ +function lick2D_map_onFOV_clusters_selectivity() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +% +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462455; +% key.session =3; + +key.subject_id = 462458; +key.session =7; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +% session_date = fetch1(EXP2.Session & key,'session_date'); + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_plot_rois =1; % 1 to plot ROIs on top of the image plane, 0 not to plot + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_selectivity\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarClusterSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROIHierarClusterSelectivity )* IMG.ROI & IMG.ROIGood & key * IMG.ROI & IMG.ROIGood & key & 'lickmap_odd_even_corr>0.5'; + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +if flag_plot_rois==0 + filename=[filename '_norois']; +end +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=2'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.7; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.12; +vertical_dist2=0.12; + +panel_width2=0.08; +panel_height2=0.08; + + + +position_x2(1)=0.35; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(1); +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + + +%% MAPS +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); + + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +M=fetch(rel ,'*'); +M=struct2table(M); + +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end +my_colormap=hsv(numel(unique_cluster_id)); +% my_colormap(4,:)=my_colormap(5,:); +% my_colormap(3,:)=my_colormap(2,:); +my_colormap(6,:)=my_colormap(4,:); + +for i_roi=1:1:size(M,1) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm%d session %d\nAll planes', key.subject_id,key.session)); + + +%% First plane + +ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=1; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax2,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Second plane + +ax3=axes('position',[position_x1(2), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=2; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax3,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Third plane + +ax4=axes('position',[position_x1(1), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=3; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax4,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Fourth plane + +ax5=axes('position',[position_x1(2), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=4; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax5,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',10) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Plot clusters +PSTH= M.selectivity; +PSTH = movmean(PSTH ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + +PSTH = PSTH./nanmax(PSTH,[],2); +for ic=1:1:numel(unique_cluster_id) + psth_cluster(ic,:)=mean(PSTH(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.time_psth(1,:),psth_cluster(ic,:)) + title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); +end + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity_meso.m b/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity_meso.m new file mode 100644 index 0000000..1e597c9 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_selectivity_meso.m @@ -0,0 +1,279 @@ +function lick2D_map_onFOV_clusters_selectivity_meso(key, flag_plot_clusters_individually) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_selectivity_meso\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + % rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + rel= (IMG.PlaneCoordinates * ANLI.ROIHierarClusterSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; + + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end + +roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0.8 0.8 0]; +my_colormap(5,:)=[0 0.7 0]; +my_colormap(6,:)=[0 0 1]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; + +my_colormap(100,:)=[0.93 0.93 0.93]; + + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_renumbered=roi_cluster_renumbered_original; + if flag_plot_clusters_individually==1 + roi_cluster_renumbered(roi_cluster_renumbered~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + % All planes + ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',7) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + title(sprintf('anm%d session %d, Total planes = %d \nCluster #%d', key.subject_id,key.session, number_of_planes, i_clus)); + + + + + %% Plot clusters + + PSTH1= M.psth_averaged_over_all_positions; + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2= M.selectivity; + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); + + for ic=1:1:min([numel(unique_cluster_id),10]) + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-2,5]); + + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.15, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_shape_meso.m b/analysis/lick2D/lick2D_map_onFOV_clusters_shape_meso.m new file mode 100644 index 0000000..2efd0e5 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_shape_meso.m @@ -0,0 +1,279 @@ +function lick2D_map_onFOV_clusters_shape_meso(key, flag_plot_clusters_individually) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + + +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + + + % key.subject_id = 463190; + % key.session =1; + + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_shape_meso\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2DPSTH *IMG.PlaneCoordinates * ANLI.ROIHierarClusterShape )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + % rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + rel= (IMG.PlaneCoordinates * ANLI.ROIHierarClusterShape )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; + + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end + +roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0.8 0.8 0]; +my_colormap(5,:)=[0 0.7 0]; +my_colormap(6,:)=[0 0 1]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; + +my_colormap(100,:)=[0.93 0.93 0.93]; + + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_renumbered=roi_cluster_renumbered_original; + if flag_plot_clusters_individually==1 + roi_cluster_renumbered(roi_cluster_renumbered~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + % All planes + ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',7) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + title(sprintf('anm%d session %d, Total planes = %d \nCluster #%d', key.subject_id,key.session, number_of_planes, i_clus)); + + + + + %% Plot clusters + + PSTH1= M.psth_averaged_over_all_positions; + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + % PSTH2= M.selectivity; + % PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + % PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); + + for ic=1:1:min([numel(unique_cluster_id),10]) + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-2,5]); + + % psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + % axes('position',[position_x2(ic), position_y2(ic)-0.15, panel_width2, panel_height2]); + % hold on; + % plot([0 0],[0,1],'-k'); + % plot(M.psth_time(1,:),psth_cluster(ic,:)) + % % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % % ylim([0, 1]); + % xlim([-2,5]); + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity.m b/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity.m new file mode 100644 index 0000000..318fdf8 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity.m @@ -0,0 +1,374 @@ +function lick2D_map_onFOV_clusters_shapeandselectivity() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +% +% key.subject_id = 463195; +% key.session =3; + +key.subject_id = 462455; +key.session =2; + +% key.subject_id = 462458; +% key.session =12; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +% session_date = fetch1(EXP2.Session & key,'session_date'); + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_plot_rois =1; % 1 to plot ROIs on top of the image plane, 0 not to plot + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_shapeandselectivity\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key * IMG.ROI & IMG.ROIGood & key & 'lickmap_odd_even_corr>0.5'; + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +if flag_plot_rois==0 + filename=[filename '_norois']; +end +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.7; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +position_x2(1)=0.35; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_x2(end+1)=position_x2(1); +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.8; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + + +%% MAPS +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + + +% All planes +ax1=axes('position',[position_x1(3), position_y1(3), panel_width1*2, panel_height1*2]); + + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +M=fetch(rel ,'*'); +M=struct2table(M); + +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0 0 0]; +my_colormap(2,:)=[1 0 0]; +my_colormap(3,:)=[1 1 0]; +my_colormap(4,:)=[0 1 0]; +my_colormap(5,:)=my_colormap(4,:); +my_colormap(9,:)=my_colormap(4,:); +my_colormap(6,:)=[0 1 1]; +my_colormap(8,:)=[1 0 1]; + +for i_roi=1:1:size(M,1) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',15) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm%d session %d\nAll planes', key.subject_id,key.session)); + + +%% First plane + +ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=1; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax2,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Second plane + +ax3=axes('position',[position_x1(2), position_y1(2), panel_width1, panel_height1]); + +key_plane.plane_num=2; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax3,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +% xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + +%% Third plane + +ax4=axes('position',[position_x1(1), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=3; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax4,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Fourth plane + +ax5=axes('position',[position_x1(2), position_y1(3), panel_width1, panel_height1]); + +key_plane.plane_num=4; +mean_img_enhanced = fetch1(IMG.Plane & key & key_plane,'mean_img_enhanced'); + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax5,gray); +hold on; + +if flag_plot_rois==1 + MPlane=fetch(rel & key_plane,'*'); + MPlane=struct2table(MPlane); + + roi_cluster_id = MPlane.heirar_cluster_id; + for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); + end + + for i_roi=1:1:size(MPlane,1) + plot(MPlane.roi_centroid_x(i_roi)*pix2dist, MPlane.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',5) + end +end + +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('Plane %d', key_plane.plane_num)); + + +%% Plot clusters + + +PSTH1= M.psth_averaged_over_all_positions; +PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +PSTH1_before_scaling=PSTH1; +PSTH1 = PSTH1./nanmax(PSTH1,[],2); + +PSTH2= M.selectivity; +PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); +PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); + +for ic=1:1:numel(unique_cluster_id) + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.time_psth(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.15, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.time_psth(1,:),psth_cluster(ic,:)) +% title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); +end + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity_meso.m b/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity_meso.m new file mode 100644 index 0000000..cd906e7 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_clusters_shapeandselectivity_meso.m @@ -0,0 +1,279 @@ +function lick2D_map_onFOV_clusters_shapeandselectivity_meso(key, flag_plot_clusters_individually) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=4; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses +filename=[]; +dir_current_fig = [dir_base '\Lick2D\population\onFOV_clusters_shapeandselectivity_meso\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==1 + rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key ; +elseif flag_all_or_signif ==2 + % rel= (ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity*IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + rel= (IMG.PlaneCoordinates * ANLI.ROIHierarClusterShapeAndSelectivity )* IMG.ROI & IMG.ROIGood & key & (ANLI.ROILick2Dmap & 'lickmap_odd_even_corr>=-1'); + + filename=['signif_2Dlick']; +end + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = [filename 'anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; + + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; +rel = rel & 'heirar_cluster_percent>=1'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.08; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel ,'*'); +M=struct2table(M); +number_of_planes = unique(M.plane_num); +roi_cluster_id = M.heirar_cluster_id; +heirar_cluster_percent = M.heirar_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); +heirar_cluster_percent = heirar_cluster_percent(ia); +[B,I] = sort(heirar_cluster_percent,'descend'); +heirar_cluster_percent = heirar_cluster_percent(I); +unique_cluster_id = unique_cluster_id(I); +for ic=1:1:numel(roi_cluster_id) + roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +end + +roi_cluster_renumbered_original = roi_cluster_renumbered; + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; + +my_colormap(100,:)=[0.94 0.93 0.93]; + + +for i_clus = 1:1:min([numel(unique_cluster_id),10]) + roi_cluster_renumbered=roi_cluster_renumbered_original; + if flag_plot_clusters_individually==1 + roi_cluster_renumbered(roi_cluster_renumbered~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + % All planes + ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_renumbered(i_roi),:),'MarkerSize',7) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + title(sprintf('anm%d session %d, Total planes = %d \nCluster #%d', key.subject_id,key.session, number_of_planes, i_clus)); + + + + + %% Plot clusters + + PSTH1= M.psth_averaged_over_all_positions; + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2= M.selectivity; + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH1_before_scaling,[],2); + + for ic=1:1:min([numel(unique_cluster_id),10]) + psth_cluster(ic,:)=mean(PSTH1(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-2,5]); + + psth_cluster(ic,:)=mean(PSTH2(M.heirar_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.15, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(M.psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_map_onFOV_corr.m b/analysis/lick2D/lick2D_map_onFOV_corr.m new file mode 100644 index 0000000..c10e152 --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_corr.m @@ -0,0 +1,342 @@ +function lick2D_map_onFOV_corr() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +column_radius = 20; %in um +min_num_cells = 10; +% key.subject_id =447991; +% key.subject_id = 445978; +% key.subject_9id = 443627; +% key.subject_id = 447990; +% key.session =3; +% key.subject_id = 445980; +% key.session =7; + +% key.subject_id = 463195; +% key.session =3; + +key.subject_id = 462458; +key.session =11; + +% key.subject_id = 462455; +% key.session =2; + + +key.number_of_bins=4; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + + +dir_current_fig = [dir_base '\Lick2D\population\onFOV_corr_distance\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI*IMG.ROIdepth & IMG.ROIGood & key & 'lickmap_odd_even_corr>-1' & 'rayleigh_length>=0' & 'theta_tuning_odd_even_corr>-1' & 'pval_rayleigh_length>=0'; + dir_current_fig=[dir_current_fig 'signif_2Dlick\']; +elseif flag_all_or_signif ==3 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI*IMG.ROIdepth & IMG.ROIGood & key & 'pval_psth<=0.01'; + dir_current_fig=[dir_current_fig 'signif_motor\']; +end + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +filename = ['anm' num2str(key.subject_id) '_s' num2str(key.session) '_' session_date] + +% rel = rel & (ANLI.IncludeROI & 'number_of_events>=50'); +% rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key & (ANLI.IncludeROI & 'number_of_events>=50'); + +% rel = rel & 'information_per_spike>=0.05' & 'plane_num=1'; +% rel = rel & 'information_per_spike>=0.1'; +% rel = rel & 'plane_num=4'; +% & 'pval_information_per_spike<=0.01' +rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key ; +lateral_distance_bins = [0:10:150,inf]; % in microns +eucledian_distance_bins = [10:10:150]; + +horizontal_dist=0.25; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.3; +position_y1(1)=0.6; +position_x1(1)=0.06; +position_x1(end+1)=position_x1(end)+horizontal_dist*1.5; + + +panel_width2=0.09; +panel_height2=0.12; +horizontal_dist2=0.16; +vertical_dist2=0.21; + +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2*1.5; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + + +position_y2(1)=0.77; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2*1.2; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + +M=fetch(rel ,'*'); +M=struct2table(M); +roi_number=M.roi_number; + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; + +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(ax1,gray); +hold on; + +my_colormap=hsv(360); +% hmap(1:360,1) = linspace(0,1,360); +% hmap(:,[2 3]) = 0.8; %brightness +% huemap = hsv2rgb(hmap); +% my_colormap=huemap; + + +for i_roi=1:1:size(M,1) + prefered_angle=floor((M.preferred_theta(i_roi)+180)); +% plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'o','Color',my_colormap(prefered_angle,:),'MarkerSize',10*M.rayleigh_length(i_roi)) + plot(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(prefered_angle,:),'MarkerSize',15) +% text(M.roi_centroid_x(i_roi)*pix2dist, M.roi_centroid_y(i_roi)*pix2dist,'\rightarrow','Rotation',prefered_angle-180,'FontSize',ceil(20*(M.preferred_radius(i_roi))),'Color',my_colormap(prefered_angle,:),'HorizontalAlignment','left','VerticalAlignment','middle'); +end +axis xy +set(gca,'YDir','reverse') +title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); + +ax2=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +colormap(ax2,hsv) +cb1 = colorbar(ax2,'Position',[position_x1(1)+panel_width1*1.1 position_y1(1) 0.01 panel_height1], 'Ticks',[0,0.25, 0.5, 0.75, 1],... + 'TickLabels',[-180,-90,0,90,180]); +axis off; + + +%% Distance (lateral, axial) and theta +theta_all = M.preferred_theta; + +x_all=M.roi_centroid_x*pix2dist; +y_all=M.roi_centroid_y*pix2dist; +z_all=M.z_pos_relative; +% dx = g_x - R_x(i_r); +% dy = g_y - R_y(i_r); +% distance = sqrt(dx.^2 + dy.^2); %pixels +% distance3D = sqrt( (dx*pix2dist).^2 + (dy*pix2dist).^2 + roi_z(i_r).^2); %um + +for ii=1:1:numel(theta_all) + + x=x_all(ii); + y=y_all(ii); + z=z_all(ii); + + dXY(ii,:)= sqrt((x_all-x).^2 + (y_all-y).^2); % in um + dZ(ii,:)= abs(z_all - z); % in um + d3D(ii,:) = sqrt((x_all-x).^2 + (y_all-y).^2 + (z_all-z).^2); % in um + + + +% theta = M.preferred_theta(ii); +% dtheta_temp = circ_dist(deg2rad(theta_all),deg2rad(theta)); +% % dtheta_temp = dtheta_temp - 2*180*floor( (dtheta_temp+180)/(2*180) ); +% dtheta(ii,:) = abs(rad2deg(dtheta_temp)); + +end +dXY=dXY(:); + +idx_not_self = dXY>0; +dXY=dXY(idx_not_self); + +dZ=dZ(idx_not_self); +d3D=d3D(idx_not_self); +% dtheta=dtheta(idx_not_self); + +r = corr(M.psth_averaged_over_all_positions'); +r = r(idx_not_self); +dtheta=r; +%% Lateral distance + +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); +idx_valid_bins = [N>=min_num_cells,1]>0; +lateral_distance_bins=lateral_distance_bins(idx_valid_bins); +[N,~,bin] = histcounts(dXY(:),lateral_distance_bins); + +for i=1:1:numel(lateral_distance_bins)-1 +idx = (bin ==i); + dtheta_XYdist_mean(i) = (mean((dtheta(idx)))); + dtheta_XYdist_var(i) = (std((dtheta(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +dtheta_shuffled = dtheta(idx_shuffled); +for i=1:1:numel(lateral_distance_bins)-1 +idx = (bin ==i); + dtheta_XYdist_shuffled(i) = (mean((dtheta_shuffled(idx)))); +end + +ax1=axes('position',[position_x2(3), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_mean,'-r') +plot(lateral_distance_bins(1:1:end-1),dtheta_XYdist_shuffled,'-k') +ylim([-0.1,1]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nLateral distance')); +xlim([0,lateral_distance_bins(end-1)]); +% set(gca,'YTick',[-1 0 1]); + + +%% Axial Distance dependence + +idx_within_column = dXY<=column_radius; + +dtheta_column = dtheta(idx_within_column); +dZ_column = dZ(idx_within_column); +axial_distance_bins = unique(dZ_column)'; +axial_distance_bins=[axial_distance_bins,inf]; +[N,edges,bin] = histcounts(dZ_column,axial_distance_bins); +for i=1:1:numel(axial_distance_bins)-1 +idx = (bin ==i); + dtheta_Zdist_mean(i) = (mean((dtheta_column(idx)))); + dtheta_Zdist_var(i) = (std((dtheta_column(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta_column(:))); +dtheta_column_shuffled = dtheta_shuffled(idx_within_column); +for i=1:1:numel(axial_distance_bins)-1 +idx = (bin ==i); + dtheta_Zdist_mean_shuffled(i) = (mean((dtheta_column_shuffled(idx)))); +% dtheta_Zdist_var(i) = rad2deg(circ_var(deg2rad(dtheta_shuffled(idx))))/sqrt(sum(idx)); +end + +ax1=axes('position',[position_x2(4), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean,'.-r') +plot(axial_distance_bins(1:1:end-1),dtheta_Zdist_mean_shuffled,'.-k') +ylim([-0.1,1]); +xlabel('Axial distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nAxial distance')); +xlim([0,axial_distance_bins(end-1)]); +% set(gca,'YTick',[-1 0 1]); + + +%% 3D Distance dependence +% eucledian_distance_bins = lateral_distance_bins(2:end); +[N,~,bin] = histcounts(d3D(:),eucledian_distance_bins); +for i=1:1:numel(eucledian_distance_bins)-1 +idx = (bin ==i); + dtheta_3Ddist_mean(i) = (mean((dtheta(idx)))); + dtheta_3Ddist_var(i) = (std((dtheta(idx))))/sqrt(sum(idx)); +end + +%shuffled +idx_shuffled = randperm(numel(dtheta(:))); +for i=1:1:numel(eucledian_distance_bins)-1 +idx = (bin ==i); +dtheta_shuffled = dtheta(idx_shuffled); + dtheta_3Ddist_shuffled(i) = (mean((dtheta_shuffled(idx)))); +end + +ax1=axes('position',[position_x2(5), position_y2(2), panel_width2, panel_height2]); +hold on; +plot(eucledian_distance_bins(1:1:end-1),dtheta_3Ddist_mean,'-r') +plot(eucledian_distance_bins(1:1:end-1),dtheta_3Ddist_shuffled,'-k') +ylim([-0.1,1]); +xlabel('Eucledian (3D) distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction \nEucledian (3D) distance')); +xlim([0,eucledian_distance_bins(end-1)]); +% set(gca,'YTick',[-1 0 1]); + + + +%% +axes('position',[position_x2(3)-0.02, position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:40:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +title(sprintf('Preferred direction \nof tuned neurons')); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +ax.RTick=[max(BinCounts)]; +axes('position',[position_x2(4)-0.02, position_y2(1), panel_width2, panel_height2]); +b=histogram(M.preferred_radius,4); +title(sprintf('Preferred amplitude \nof tuned neurons\n')); +xlabel('Radial distance (normalized)') +ylabel('Counts') +box off; +xlim([0,b.BinEdges(end)]) + +axes('position',[position_x2(1), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.lickmap_odd_even_corr,10); +title(sprintf('2D MAP Tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.theta_tuning_odd_even_corr,10); +title(sprintf('Direction tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + + + +axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.information_per_spike,10); +title(sprintf('Positional (2D) tuning \n')); +xlabel(sprintf('Information (bits/spike)')); +ylabel('Counts') +box off; +% xlim([-1,1]) + +axes('position',[position_x2(4), position_y2(3), panel_width2, panel_height2]); +b=histogram(M.rayleigh_length,10); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_onFOV_multiple_sessions.m b/analysis/lick2D/lick2D_map_onFOV_multiple_sessions.m new file mode 100644 index 0000000..bce182a --- /dev/null +++ b/analysis/lick2D/lick2D_map_onFOV_multiple_sessions.m @@ -0,0 +1,115 @@ +function lick2D_map_onFOV_multiple_sessions() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +% key.subject_id =442411; +% key.subject_id = 445978; +% key.subject_id = 443627; +% key.session =1; +% key.session_epoch_number = 2; +key.number_of_bins=5; +key.fr_interval_start=0; +key.fr_interval_end=1000; + +flag_all_or_signif=2; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +dir_current_fig = [dir_base '\Lick2D\population\bins' num2str(key.number_of_bins) '\']; +if flag_all_or_signif ==2 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI & IMG.ROIGood & key & 'pval_information_per_spike<=0.001'; + filename=['signif_2Dlick']; +elseif flag_all_or_signif ==3 + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH)* IMG.ROI & IMG.ROIGood & key & 'pval_psth<=0.01'; + filename=['signif_motor']; +end + +rel = rel & 'information_per_spike>=0.05'; +rel_all_good_cells= ANLI.ROILick2Dmap * IMG.ROI & IMG.ROIGood & key ; + + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width2=0.15; +panel_height2=0.15; + +position_x2(1)=0.07; +position_x2(end+1)=position_x2(end)+horizontal_dist; +position_x2(end+1)=position_x2(end)+horizontal_dist; +position_x2(end+1)=position_x2(end)+horizontal_dist; + + +position_y2(1)=0.7; +position_y2(end+1)=position_y2(end)-vertical_dist; +position_y2(end+1)=position_y2(end)-vertical_dist; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +M=fetch(rel ,'*'); +M=struct2table(M); + + +axes('position',[position_x2(1), position_y2(1), panel_width2, panel_height2]); +theta_bins=-180:30:180; +theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +a=histogram(M.preferred_theta,theta_bins); +BinCounts=a.BinCounts; +polarplot(deg2rad([theta_bins_centers,theta_bins_centers(1)]),[BinCounts, BinCounts(1)]); +ax=gca; +ax.ThetaTick = [0 90 180 270]; +ax.ThetaTickLabel = [0 90 180 -90]; +title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n \n Preferred direction \nof tuned neurons',size(M,1), 100*size(M,1)/rel_all_good_cells.count)); + +axes('position',[position_x2(2), position_y2(1), panel_width2, panel_height2]); +b=histogram(M.preferred_radius,4); +title(sprintf('Preferred amplitude \nof tuned neurons\n')); +xlabel('Radial distance (normalized)') +ylabel('Counts') +box off; +xlim([0,b.BinEdges(end)]) + +axes('position',[position_x2(1), position_y2(2), panel_width2, panel_height2]); +b=histogram(M.lickmap_odd_even_corr,20); +title(sprintf('Tuning stability \n')); +xlabel(sprintf('Correlation (odd,even) trials')); +ylabel('Counts') +box off; +xlim([-1,1]) + +axes('position',[position_x2(2), position_y2(2), panel_width2, panel_height2]); +b=histogram(M.information_per_spike,20); +title(sprintf('Positional (2D) tuning \n')); +xlabel(sprintf('Information (bits/spike)')); +ylabel('Counts') +box off; +% xlim([-1,1]) + +axes('position',[position_x2(3), position_y2(2), panel_width2, panel_height2]); +b=histogram(M.rayleigh_length,20); +title(sprintf('Directional tuning \n')); +xlabel(sprintf('Rayleigh vector length')); +ylabel('Counts') +box off; + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +filename=['population_multiple_session']; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + diff --git a/analysis/lick2D/lick2D_map_pca.m b/analysis/lick2D/lick2D_map_pca.m new file mode 100644 index 0000000..769f2c1 --- /dev/null +++ b/analysis/lick2D/lick2D_map_pca.m @@ -0,0 +1,131 @@ +function lick2D_map_pca(key, M) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + + + +filename=[]; +dir_current_fig = [dir_base '\Lick2D\brain_maps\pca_coeff\']; +rel =POP.ROIPCA & IMG.ROIGood & key; + + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_epoch_label '_pca' num2str(key.component_id)]; + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +roi_coeff=fetchn(rel ,'roi_coeff', 'ORDER BY roi_number'); + +range_corr = max([abs(prctile(roi_coeff,1)), abs(prctile(roi_coeff,99))]); +bins = [-inf,linspace(-range_corr,range_corr,500),inf]; +num_bins =numel(bins); + + +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*4, panel_height1*3]); +cmap = jet(num_bins); +% cmap = flip(redblue(nun_bins)); +colormap (cmap); + +% colormap(bluewhitered(502)) +% bluewhitered; +% my_map=bluewhitered(length(bins)); +% cmap = my_map; +% colormap (cmap); +% colormap(bluewhitered(length(bins))); +roi_coeff(isnan(roi_coeff))=0; + +[~,~,bins_idx]=histcounts(roi_coeff,bins); +% imagesc(x_dim, y_dim, mean_img_enhanced); +% colormap(ax1,gray); +% hold on; +number_of_planes = unique(M.plane_num); + +x = M.roi_centroid_x + M.x_pos_relative; +x=x/0.75; +y = M.roi_centroid_y + M.y_pos_relative; +y=y/0.5; + +hold on; +for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',cmap(bins_idx(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis tight +axis equal +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +title(sprintf('anm %d session %d \n %s \n Total planes = %d \nPCA=%d', key.subject_id, key.session,session_epoch_label, number_of_planes ,key.component_id)); +c=colorbar; +c.Ticks=[0,0.5,1]; +c.TickLabels={sprintf('%.2f', -range_corr),0,sprintf('%.2f', range_corr)}; +c.Label.String = 'PC Coefficient'; + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r150']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + +end + diff --git a/analysis/lick2D/lick2D_map_photostim.m b/analysis/lick2D/lick2D_map_photostim.m new file mode 100644 index 0000000..cd46e2e --- /dev/null +++ b/analysis/lick2D/lick2D_map_photostim.m @@ -0,0 +1,271 @@ +function lick2D_map_photostim() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +% key.subject_id = 463195; +% key.session =3; + +% key.subject_id = 462458; +% key.session =12; + +key.subject_id = 462455; +key.session =3; + +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +k_photo.session_epoch_number = epoch_list(1); % to take the photostim groups from +roi_photostim=fetchn((STIM.ROIResponseDirect & key & k_photo & 'response_p_value<0.01'),'roi_number'); + +% rel_photostim = (STIM.ROIResponseDirect & key & k_photo & 'response_p_value<0.01'); +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 447990; +% key.session =8; + +% key.session_epoch_number = 1; +key.number_of_bins=4; +% key.fr_interval_start=-2000; +% key.fr_interval_end=0; +key.fr_interval_start=-1000; +key.fr_interval_end=2000; +session_date = fetch1(EXP2.Session & key,'session_date'); + +if flag_all_or_signif ==1 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key; +elseif flag_all_or_signif ==2 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH) & IMG.ROIGood & key & 'lickmap_odd_even_corr>=0.5'; +elseif flag_all_or_signif ==3 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_motor\' ]; + rel= (ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH) & IMG.ROIGood & key & 'pval_psth<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.01'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.05' & 'pval_lickmap_odd_even_corr<=0.05' ; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_rayleigh_length<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'rayleigh_length>=1'; +end + +rel= rel; + +% rel= rel & 'information_per_spike>0.05'; +dir_current_fig = [dir_current_fig 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' 'bins' num2str(key.number_of_bins) '\' ]; +dir_current_fig = [dir_current_fig '\photostim_direct\']; + +M=fetch(rel ,'*'); +roi_number=[M.roi_number]; +idx_photo =ismember(roi_number,roi_photostim); + +M = M(idx_photo); +roi_number=[M.roi_number]; + +time=M.psth_time; +time_bin=[-3,3]; %2 sec + +number_of_bins = M.number_of_bins; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +for i_roi=1:1:size(M,1) + + psth_max= cell2mat(reshape(M(i_roi).psth_per_position,[number_of_bins^2,1])); + psth_max= psth_max(:,time>-2 & time<=3); + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(time,M(i_roi).psth_per_position{i_l},'-r','LineWidth',2); + try + plot(time,M(i_roi).psth_per_position_odd{i_l},'-','Color',[0 0 0]); + plot(time,M(i_roi).psth_per_position_even{i_l},'-','Color',[0.5 0.5 0.5]); + end + ylims=[0,ceil(psth_max)+eps]; + ylim(ylims); + xlim(time_bin); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Spikes/s', 'FontSize',14); + set(gca,'XTick',[-2,0,2],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[-2,0,2],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_m= M(i_roi).psth_averaged_over_all_positions; + psth_stem = M(i_roi).psth_stem_over_all_positions; + shadedErrorBar(time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + xlim(time_bin); + ylim([0, ceil(nanmax(psth_m))]); + title(sprintf('All positions \n p-val = %.4f ', M(i_roi).pval_psth), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-2,0,2],'Ytick',[0, ceil(nanmax(psth_m))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(2),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_preferred= M(i_roi).psth_preferred; + psth_non_preferred= M(i_roi).psth_non_preferred; + plot(time,psth_preferred,'-b'); + plot(time,psth_non_preferred,'-r'); + xlim(time_bin); + ylim([0, ceil(nanmax([psth_preferred,psth_non_preferred]))]); + title(sprintf('Preferred position \n versus all others '), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-2,0,2],'Ytick',[0, ceil(nanmax([psth_preferred,psth_non_preferred]))],'TickLength',[0.05,0], 'FontSize',10); + + + axes('position',[position_x2(3),position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M(i_roi).theta_bins_centers; + yyy=M(i_roi).theta_tuning_curve; + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M(i_roi).theta_tuning_curve_odd,'-','Color',[0 0 0]); + plot(xxx,M(i_roi).theta_tuning_curve_even,'-','Color',[0.5 0.5 0.5]); + title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f \n theta = %d deg',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr, floor(M(i_roi).preferred_theta)), 'FontSize',10); + xlim([-180,180]) + ylim([0, ceil(nanmax(yyy))]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, ceil(nanmax(yyy))-eps], 'FontSize',10,'TickLength',[0.05,0]); + + %% Maps + axes('position',[position_x2(4),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr) + max_map=max(M(i_roi).lickmap_fr(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal'); + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_odd) + max_map=max(M(i_roi).lickmap_fr_odd(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + axis xy + axis equal; + axis tight + set(gca,'YDir','normal'); + colorbar + + axes('position',[position_x2(4),position_y2(4)-0.05, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_even) + max_map=max(M(i_roi).lickmap_fr_even(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight; + set(gca,'YDir','normal'); + colorbar + + +% x_bins=M(i_roi).pos_x_bins_centers; +% z_bins =M(i_roi).pos_z_bins_centers; +% counter=1; +% for ix=1:1:numel(x_bins) +% for iz=1:1:numel(z_bins) +% pos_x(counter) = x_bins(ix); +% pos_z(counter) = z_bins(iz); +% counter=counter+1; +% end +% end +% [theta, radius] = cart2pol(pos_x,pos_z); +% theta=rad2deg(theta); +% theta_bins=linspace(-180,180,9); +% theta_bins = theta_bins - mean(diff(theta_bins))/2; +% theta_bins_centers=theta_bins(1:end-1)+mean(diff(theta_bins))/2; +% +% +% [temp,~,theta_idx] = histcounts(theta,theta_bins); +% +% theta_idx(theta_idx==0)=1; +% +% map=M(i_roi).lickmap_fr; +% +% for i_theta=1:1:numel(theta_bins_centers) +% idx= find( (theta_idx==i_theta)); +% theta_spikes_binned(i_theta) = sum(map(idx)); +% theta_timespent_binned(i_theta)=numel(idx); +% end +% +% [~, theta_firing_rate_smoothed, preferred_theta,Rayleigh_length] = fn_compute_generic_1D_tuning2 ... +% (theta_timespent_binned, theta_spikes_binned, theta_bins_centers, 1, 1, 1, 1); +% plot(theta_bins_centers,theta_firing_rate_smoothed,'-r') +% + + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['roi_' num2str(roi_number(i_roi))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/analysis/lick2D/lick2D_map_reward.m b/analysis/lick2D/lick2D_map_reward.m new file mode 100644 index 0000000..02d6b5e --- /dev/null +++ b/analysis/lick2D/lick2D_map_reward.m @@ -0,0 +1,216 @@ +function lick2D_map_reward() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + +flag_all_or_signif=1; % 1 all cells, 2 signif cells in 2D lick maps, 3 signf cells in PSTH motor responses + +key.subject_id = 463195; +key.session =3; + + +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 447990; +% key.session =8; + +% key.session_epoch_number = 1; +key.number_of_bins=4; +% key.fr_interval_start=-1000; +% key.fr_interval_end=0; +key.fr_interval_start=0; +key.fr_interval_end=2000; +session_date = fetch1(EXP2.Session & key,'session_date'); + +if flag_all_or_signif ==1 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_all\' ]; + rel= ANLI.ROILick2DmapReward * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHReward & IMG.ROIGood & key; +elseif flag_all_or_signif ==2 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_2Dlick\']; + rel= (ANLI.ROILick2DmapReward * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHReward) & IMG.ROIGood & key & 'pval_information_per_spike<=0.001'; +elseif flag_all_or_signif ==3 + dir_current_fig = [dir_base '\Lick2D\anm' num2str(key.subject_id) '\' session_date '\cells_signif_motor\' ]; + rel= (ANLI.ROILick2DmapReward * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTHReward) & IMG.ROIGood & key & 'pval_psth<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.01'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_information_per_spike<=0.05' & 'pval_lickmap_odd_even_corr<=0.05' ; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'pval_rayleigh_length<=0.05'; + % rel= ANLI.ROILick2Dmap * ANLI.ROILick2Dangle * ANLI.ROILick2DangleShuffle * ANLI.ROILick2DmapShuffle * ANLI.ROILick2DPSTH & IMG.ROIGood & key & 'rayleigh_length>=1'; +end + + +% rel= rel & 'information_per_spike>0.05'; +rel= rel & 'information_per_spike>0.1'; + +dir_current_fig = [dir_current_fig 'supersignif\' 'time' num2str(key.fr_interval_start) '-' num2str(key.fr_interval_end) '\' 'bins' num2str(key.number_of_bins) '\' 'reward\']; + +M=fetch(rel ,'*'); +roi_number=[M.roi_number]; + +time=M.psth_time; +time_bin=[-2,3]; %2 sec + +number_of_bins = M.number_of_bins; + + +horizontal_dist1=(1/(number_of_bins+2))*0.7; +vertical_dist1=(1/(number_of_bins+2))*0.6; +panel_width1=(1/(number_of_bins+6))*0.8; +panel_height1=(1/(number_of_bins+6))*0.7; +position_x1(1)=0.1; +position_y1(1)=0.2; +for i=1:1:number_of_bins-1 + position_x1(end+1)=position_x1(end)+horizontal_dist1; + position_y1(end+1)=position_y1(end)+vertical_dist1; +end + +plots_order_mat_x=repmat([1:1:number_of_bins],number_of_bins,1); +plots_order_mat_y=repmat([1:1:number_of_bins]',1,number_of_bins); + +horizontal_dist2=(1/(number_of_bins+2))*1.2; +vertical_dist2=(1/(number_of_bins+2)); +panel_width2=(1/(number_of_bins+5)); +panel_height2=(1/(number_of_bins+5)); +position_x2(1)=0.1; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.73; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; +position_y2(end+1)=position_y2(end)-vertical_dist2; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +for i_roi=1:1:size(M,1) + + psth_max= cell2mat(reshape(M(i_roi).psth_per_position,[number_of_bins^2,1])); + psth_max= psth_max(:,time>0 & time<=2); + psth_max=max(psth_max(:)); + for i_l=1:1:number_of_bins^2 + + + axes('position',[position_x1(plots_order_mat_x(i_l)), position_y1(plots_order_mat_y(i_l)), panel_width1, panel_height1]); + hold on; + + plot(time,M(i_roi).psth_per_position{i_l},'-r','LineWidth',1); + try + plot(time,M(i_roi).psth_per_position_odd{i_l},'-','Color',[0 0 1],'LineWidth',1); + plot(time,M(i_roi).psth_per_position_even{i_l},'-','Color',[0 1 0],'LineWidth',1); + end + ylims=[0,ceil(psth_max)+eps]; + ylim(ylims); + xlim(time_bin); + if i_l ==1 + xlabel('Time to lick (s)', 'FontSize',14); + ylabel('Spikes/s', 'FontSize',14); + set(gca,'XTick',[-2,0,2],'Ytick',ylims, 'FontSize',10,'TickLength',[0.05,0]); + else + set(gca,'XTick',[-2,0,2],'Ytick',ylims,'YtickLabel',[], 'FontSize',10,'TickLength',[0.05,0]); + end + % title(num2str(plots_order(i_l))) + end + + axes('position',[position_x2(1),position_y2(1), panel_width2, panel_height2]) + hold on; + psth_m_regular= M(i_roi).psth_averaged_over_all_positions_regular; + psth_m_large= M(i_roi).psth_averaged_over_all_positions_large; + psth_m_small= M(i_roi).psth_averaged_over_all_positions_small; + + plot(time,psth_m_regular,'-r'); + plot(time,psth_m_large,'-b'); + plot(time,psth_m_small,'-g'); + + % psth_stem = M(i_roi).psth_stem_over_all_positions; + % shadedErrorBar(time,psth_m, psth_stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + xlim(time_bin); + ylim([0, ceil(nanmax([psth_m_regular,psth_m_small,psth_m_large]))]); + title(sprintf('All positions \n p-val = %.4f ', M(i_roi).pval_psth), 'FontSize',10); + xlabel('Time to lick (s)', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-2,0,2],'Ytick',[0, ceil(nanmax([psth_m_regular,psth_m_small,psth_m_large]))],'TickLength',[0.05,0], 'FontSize',10); + + + + axes('position',[position_x2(2),position_y2(1)-0.03, panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr) + max_map=max(M(i_roi).lickmap_fr(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('ROI %d anm%d %s\n \n Positional (2D) tuning \n I = %.2f bits/spike \n p-val = %.4f ',roi_number(i_roi),key.subject_id, session_date, M(i_roi).information_per_spike, M(i_roi).pval_information_per_spike ), 'FontSize',10); + axis xy + axis equal; + axis tight + colorbar + xlabel(sprintf('Lickport X-pos \n(normalized)'), 'FontSize',10); + ylabel(sprintf('Lickport Z-pos '), 'FontSize',10); + set(gca,'YDir','normal') + set(gca, 'FontSize',10); + + axes('position',[position_x2(4),position_y2(3), panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_odd) + max_map=max(M(i_roi).lickmap_fr_odd(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('Stability r = %.2f \n p-val = %.4f \n \n Odd trials', M(i_roi).lickmap_odd_even_corr, M(i_roi).pval_lickmap_odd_even_corr ), 'FontSize',10); + axis xy + axis equal; + axis tight + axis tight + set(gca,'YDir','normal') + colorbar + + axes('position',[position_x2(4),position_y2(4), panel_width2*1.5, panel_height2*1.5]) + imagescnan(M(i_roi).pos_x_bins_centers, M(i_roi).pos_x_bins_centers, M(i_roi).lickmap_fr_even) + max_map=max(M(i_roi).lickmap_fr_even(:)); + caxis([0 max_map]); % Scale the lowest value (deep blue) to 0 + colormap(parula) + title(sprintf('\n \n Even trials '), 'FontSize',10); + axis xy + axis equal; + axis tight + set(gca,'YDir','normal') + colorbar + + + axes('position',[position_x2(3)+0.02,position_y2(1), panel_width2, panel_height2]) + hold on; + xxx=M(i_roi).theta_bins_centers; + yyy=M(i_roi).theta_tuning_curve; + plot(xxx,yyy,'-b','LineWidth',2); + plot(xxx,M(i_roi).theta_tuning_curve_odd,'-','Color',[0 0 0]); + plot(xxx,M(i_roi).theta_tuning_curve_even,'-','Color',[0.5 0.5 0.5]); + title(sprintf('Directional tuning \n RV = %.2f p-val = %.2f \n r = %.2f p-val = %.4f',M(i_roi).rayleigh_length,M(i_roi).pval_rayleigh_length, M(i_roi).theta_tuning_odd_even_corr, M(i_roi).pval_theta_tuning_odd_even_corr ), 'FontSize',10); + xlim([-180,180]) + ylim([0, ceil(nanmax(yyy))]) + xlabel('Direction ({\circ})', 'FontSize',10); + ylabel('Spikes/s', 'FontSize',10); + set(gca,'XTick',[-180,0,180],'Ytick',[0, ceil(nanmax(yyy))-eps], 'FontSize',10,'TickLength',[0.05,0]); + + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['roi_' num2str(roi_number(i_roi))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r200']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + + clf +end + diff --git a/analysis/lick2D/lick2D_map_sub_clusters_corr_meso.m b/analysis/lick2D/lick2D_map_sub_clusters_corr_meso.m new file mode 100644 index 0000000..8fddf62 --- /dev/null +++ b/analysis/lick2D/lick2D_map_sub_clusters_corr_meso.m @@ -0,0 +1,348 @@ +function lick2D_map_sub_clusters_corr_meso(key, flag_plot_clusters_individually, M_all) +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); + + +if nargin<2 + flag_plot_clusters_individually=0; + % key.subject_id = 463195; + % key.session =3; + + % key.subject_id = 462455; + % key.session =2; + + % key.subject_id = 462458; + % key.session =12; + key.subject_id = 463189; + key.session =4; + + % key.subject_id = 463190; + % key.session =1; + + key.number_of_bins=3; + key.fr_interval_start=-1000; + key.fr_interval_end=2000; + % key.fr_interval_start=-1000; + % key.fr_interval_end=0; + % session_date = fetch1(EXP2.Session & key,'session_date'); +end + + + +smooth_bins=1; % one element backward, current element, and one element forward + +filename=[]; +dir_current_fig = [dir_base '\Lick2D\brain_maps\clusters_sub_corr\']; +rel = IMG.ROI & (POP.ROISubClusterCorr & key) & IMG.ROIGood ; + + +rel1 = ((IMG.ROI*POP.ROISubClusterCorr*IMG.PlaneCoordinates) & IMG.ROIGood & key); +rel2 = ANLI.ROILick2DPSTH * ANLI.ROILick2Dselectivity & rel; + + +session_date = fetch1(EXP2.Session & key,'session_date'); + +session_epoch_type = fetch1(EXP2.SessionEpoch & key, 'session_epoch_type'); +if strcmp(session_epoch_type,'spont_only') + session_epoch_label = 'Spontaneous'; +elseif strcmp(session_epoch_type,'behav_only') + session_epoch_label = 'Behavior'; +end + +filename =['anm' num2str(key.subject_id) 's' num2str(key.session) '_' session_epoch_label '_splits' num2str(key.n_clust) '_Cluster' num2str(key.heirar_cluster_id) '_subsplits' num2str(key.n_sub_clust)]; + + + +dir_current_fig_original = dir_current_fig; +filename_original = filename; +filename_original = [filename_original ]; + +% rel = rel & 'heirar_cluster_percent>2' & (ANLI.IncludeROI4 & 'number_of_events>25'); +% rel = rel & 'heirar_cluster_percent>2' & 'psth_selectivity_odd_even_corr>0.5'; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.25; +vertical_dist=0.25; + +panel_width1=0.2; +panel_height1=0.2; + +position_x1(1)=0.1; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.05; +position_y1(end+1)=position_y1(end)-vertical_dist*1.1; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +horizontal_dist2=0.07; +vertical_dist2=0.12; + +panel_width2=0.05; +panel_height2=0.06; + + + +position_x2(1)=0.05; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; +position_x2(end+1)=position_x2(end)+horizontal_dist2; + +position_y2(1)=0.85; +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); +position_y2(end+1)=position_y2(1); + +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; +position_y2(end+1)=position_y2(1)-vertical_dist2; + + +% pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); +pix2dist=1; + +%% MAPS +% mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +% x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +% y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +M=fetch(rel1 ,'*', 'ORDER BY roi_number'); +if isempty(M) + key + disp('No data'); + return +end +M=struct2table(M); +number_of_planes = max(M.plane_num); +roi_cluster_id = M.heirar_sub_cluster_id; +heirar_cluster_percent = M.heirar_sub_cluster_percent; +[unique_cluster_id,ia,ic] = unique(roi_cluster_id); + +roi_cluster_id_original = roi_cluster_id; +heirar_cluster_percent = heirar_cluster_percent(ia); +% [B,I] = sort(heirar_cluster_percent,'descend'); +% heirar_cluster_percent = heirar_cluster_percent(I); +% unique_cluster_id = unique_cluster_id(I); +% for ic=1:1:numel(roi_cluster_id) +% roi_cluster_renumbered(ic) = find(unique_cluster_id ==roi_cluster_id(ic)); +% end + + +my_colormap=hsv(numel(unique_cluster_id)); +my_colormap(1,:)=[0.5 0.5 0.5]; +my_colormap(2,:)=[0 0 0]; +my_colormap(3,:)=[1 0 0]; +my_colormap(4,:)=[0 0 1]; +my_colormap(5,:)=[0 0.8 0]; +my_colormap(6,:)=[0.94 0.9 0]; +my_colormap(7,:)=[0 0.8 0.8]; +my_colormap(8,:)=[1 0 1]; +my_colormap(9,:)=[0.9100 0.4100 0.1700]; +my_colormap(10,:)=[0 1 1]; + +my_colormap(11:end,:)=repmat([0.94 0.93 0.93], numel(unique_cluster_id)-10,1); + +x_all = [M_all.roi_centroid_x]' + [M_all.x_pos_relative]'; +y_all = [M_all.roi_centroid_y]' + [M_all.y_pos_relative]'; +x_all=x_all/0.75; +y_all=y_all/0.5; + +marker_size=10; +factor_axis=1; +if number_of_planes>1 + factor_axis = 1.3; + marker_size=9; +end +% All planes +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*3/factor_axis, panel_height1*3/factor_axis]); +hold on +for i_roi=1:1:size(M_all,1) + plot(x_all(i_roi)*pix2dist, y_all(i_roi)*pix2dist,'.','Color',[0.9 0.9 0.9],'MarkerSize',marker_size) +end + +num_clust_2_plot = min([numel(unique_cluster_id),10]); +for i_clus = 1:1:num_clust_2_plot + roi_cluster_id=roi_cluster_id_original; + if flag_plot_clusters_individually==1 + roi_cluster_id(roi_cluster_id~=i_clus)=100; + + dir_current_fig = dir_current_fig_original; + filename = filename_original; + end + + + % imagesc(x_dim, y_dim, mean_img_enhanced); + % colormap(ax1,gray); + % hold on; + + x = M.roi_centroid_x + M.x_pos_relative; + y = M.roi_centroid_y + M.y_pos_relative; + x=x/0.75; + y=y/0.5; + + hold on; + for i_roi=1:1:size(M,1) + plot(x(i_roi)*pix2dist, y(i_roi)*pix2dist,'.','Color',my_colormap(roi_cluster_id(i_roi),:),'MarkerSize',marker_size) + end + axis xy + set(gca,'YDir','reverse') + % title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); + % set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') + axis tight + axis equal + xlabel('Anterior - Posterior (\mum)'); + ylabel('Lateral - Medial (\mum)'); + percent_clustered = 100*sum(roi_cluster_id<=num_clust_2_plot)/size(M_all,1); + title(sprintf('%s \n anm%d session %d, Total planes = %d\nsplits = %d Cluster %d nsubsplits = %d\n%.1f%% cells shown', session_epoch_label, key.subject_id,key.session, number_of_planes, key.n_clust, key.heirar_cluster_id ,key.n_sub_clust, percent_clustered)); + + fov_num = unique(fetchn(IMG.FOV & key,'fov_num')); + + + for i_f = 1:1:numel(fov_num) + keyfov.fov_num = fov_num(i_f); + ROI_rect= fetch(IMG.FOV*IMG.PlaneCoordinates & key & keyfov,'*','LIMIT 1'); + x1=ROI_rect.x_pos_relative/0.75; + x2=ROI_rect.fov_x_size/0.75 + x1; + y1=ROI_rect.y_pos_relative/0.5; + y2=ROI_rect.fov_y_size/0.5 + y1; + plot([x1,x1],[y1,y2],'-k'); + end + + + %% Plot clusters + try + psth_time = fetch1(rel2, 'psth_time', 'LIMIT 1'); + PSTH1=cell2mat(fetchn(rel2 ,'psth_preferred', 'ORDER BY roi_number')); + PSTH2=cell2mat(fetchn(rel2 ,'psth_non_preferred', 'ORDER BY roi_number')); + PSTH3=cell2mat(fetchn(rel2 ,'selectivity', 'ORDER BY roi_number')); + + + PSTH1 = movmean(PSTH1 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH1_before_scaling=PSTH1; + PSTH1 = PSTH1./nanmax(PSTH1,[],2); + + PSTH2 = movmean(PSTH2 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH2 = PSTH2./nanmax(PSTH2,[],2); + + PSTH3 = movmean(PSTH3 ,[smooth_bins smooth_bins], 2,'omitnan', 'Endpoints','shrink'); + PSTH3 = PSTH3./nanmax(PSTH1_before_scaling,[],2); + + + for ic=1:1:num_clust_2_plot + psth_cluster(ic,:)=mean(PSTH1(roi_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic), panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + title(sprintf('C%d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + ylim([0, 1]); + xlim([-2,5]); + if ic ==1 + ylabel('Preferred'); + end + + psth_cluster(ic,:)=mean(PSTH2(roi_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.08, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + if ic ==1 + ylabel('Non-prefer.'); + end + + psth_cluster(ic,:)=mean(PSTH3(roi_cluster_id == unique_cluster_id(ic),:),1); + axes('position',[position_x2(ic), position_y2(ic)-0.16, panel_width2, panel_height2]); + hold on; + plot([0 0],[0,1],'-k'); + plot(psth_time(1,:),psth_cluster(ic,:)) + % title(sprintf('Cluster %d %.1f %%',ic, heirar_cluster_percent(ic)),'Color',my_colormap(ic,:)) + % ylim([0, 1]); + xlim([-2,5]); + if ic ==1 + ylabel('Selectivity'); + xlabel('Time to Lick (s)'); + + end + end + catch + disp('No behavioral data'); + end + + + if flag_plot_clusters_individually==1 + dir_current_fig = [dir_current_fig 'indiv_clusters\']; + filename = [filename '_cluster' num2str(i_clus)]; + else + dir_current_fig = [dir_current_fig 'all_clusters_superimposed\']; + end + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r150']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + if flag_plot_clusters_individually==1 + clf + else + break; + end + +end + diff --git a/analysis/lick2D/lick2D_video_licking_stats.m b/analysis/lick2D/lick2D_video_licking_stats.m new file mode 100644 index 0000000..c266b03 --- /dev/null +++ b/analysis/lick2D/lick2D_video_licking_stats.m @@ -0,0 +1,68 @@ +%% Behavioral stats +function lick2D_video_licking_stats() +close all +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Lick2D\behavior\']; + +subplot(2,2,1) +time_bins=-2:0.1:5; +licks= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock )-TRACKING.VideoGroomingTrial,'lick_time_onset'); +histogram(licks,time_bins) +xlabel(sprintf('Time of all licks \nrelative to spout enntrance (s)')); +ylabel('Licks'); + + +subplot(2,2,2); +time_bins=0:0.1:3; +lick_onset= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock)-TRACKING.VideoGroomingTrial & 'lick_number_relative_to_firsttouch=1','lick_time_onset'); +histogram(lick_onset,time_bins) +xlabel(sprintf('Time of first lick with contact\nrelative to spout enntrance (s)')); +ylabel('Licks'); +xlim([0,3]); + +subplot(2,2,4); +time_bins=0:0.1:3; +lick_onset= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock)-TRACKING.VideoGroomingTrial & 'lick_number_with_touch_relative_to_reward=1','lick_time_onset'); +histogram(lick_onset,time_bins) +xlabel(sprintf('Time of first rewarded lick\nrelative to spout enntrance (s)')); +ylabel('Licks'); +xlim([0,3]); + + +filename='Lick2D_behavior_stats'; +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); + +% subplot(2,2,3) +% licks= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock )-TRACKING.VideoGroomingTrial,'lick_time_onset_relative_firstlick_after_lickportentrance'); +% histogram(licks,time_bins) +% xlabel(sprintf('Time of all licks \nrelative to first lick after spout enntrance (s)')); +% ylabel('Licks'); +% +% subplot(2,2,2); +% time_bins=0:0.1:3; +% lick_onset= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock)-TRACKING.VideoGroomingTrial & 'lick_number_relative_to_lickport_entrance=0','lick_time_onset'); +% histogram(lick_onset,time_bins) +% xlabel(sprintf('Time of first lick\nrelative to spout enntrance (s)')); +% ylabel('Licks'); +% xlim([0,3]); + + + +% subplot(2,2,3) +% licks= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock )-TRACKING.VideoGroomingTrial,'lick_time_onset_relative_firstlick_after_lickportentrance'); +% histogram(licks,time_bins) +% xlabel(sprintf('Time of all licks \nrelative to first lick after spout enntrance (s)')); +% ylabel('Licks'); +% +% subplot(2,2,2); +% time_bins=0:0.1:3; +% lick_onset= fetchn((TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock)-TRACKING.VideoGroomingTrial & 'lick_number_relative_to_lickport_entrance=0','lick_time_onset'); +% histogram(lick_onset,time_bins) +% xlabel(sprintf('Time of first lick\nrelative to spout enntrance (s)')); +% ylabel('Licks'); +% xlim([0,3]); +% diff --git a/analysis/lick2D/lick2D_video_yawmemory_across_blocks.m b/analysis/lick2D/lick2D_video_yawmemory_across_blocks.m new file mode 100644 index 0000000..0f6c1a9 --- /dev/null +++ b/analysis/lick2D/lick2D_video_yawmemory_across_blocks.m @@ -0,0 +1,77 @@ + +function lick2D_video_yawmemory_across_blocks() + close all + key=[]; + key.subject_id = 463190; + +% key.subject_id = 463190; + key.session =4; + +z= fetchn(TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key & 'session>0','lick_peak_z'); +histogram(z(~isnan(z))) +% lick_peak_z + +T= fetch(TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key & 'session>0' & 'lick_number=1' & 'flag_trial_has_licks_after_lickport_entrance=1' & 'flag_auto_water_settings=0','*'); + +%% After lickport entrance +subplot(2,2,1); + +diff_first_previous=[]; +diff_first_next=[]; +diff_all_previous=[]; +for i=2:1:numel(T)-1 + if T(i).current_trial_num_in_block==1 + diff_first_previous(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_after_lickportentrance - T(i-1).lick_peak_yaw_avg_across_licks_after_lickportentrance); %lick_yaw_lickbout_avg_for_licks_with_touch + diff_first_next(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_after_lickportentrance - T(i+1).lick_peak_yaw_avg_across_licks_after_lickportentrance); + elseif T(i).current_trial_num_in_block>=3 + diff_all_previous(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_after_lickportentrance - T(i-1).lick_peak_yaw_avg_across_licks_after_lickportentrance); + end +end + +hold on +histogram(diff_first_previous(~isnan(diff_first_previous)),[0:3:30],'Normalization','probability') +histogram(diff_first_next(~isnan(diff_first_next)),[0:3:30],'Normalization','probability') + + + +%% Before lickport entrance +subplot(2,2,2); + +diff_first_previous=[]; +diff_first_next=[]; +diff_all_previous=[]; +for i=2:1:numel(T)-1 + if T(i).current_trial_num_in_block==1 + diff_first_previous(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_before_lickportentrance - T(i-1).lick_peak_yaw_avg_across_licks_before_lickportentrance); %lick_yaw_lickbout_avg_for_licks_with_touch + diff_first_next(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_before_lickportentrance - T(i+1).lick_peak_yaw_avg_across_licks_before_lickportentrance); + elseif T(i).current_trial_num_in_block>=3 + diff_all_previous(end+1) = abs(T(i).lick_peak_yaw_avg_across_licks_before_lickportentrance - T(i-1).lick_peak_yaw_avg_across_licks_before_lickportentrance); + end +end + +hold on +histogram(diff_first_previous(~isnan(diff_first_previous)),[0:3:30],'Normalization','probability') +histogram(diff_first_next(~isnan(diff_first_next)),[0:3:30],'Normalization','probability') +[h,p]=ttest(diff_first_previous,diff_first_next); + + +% T= fetch(TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key & 'session>1' & 'lick_number_relative_to_lickport_entrance=-2' & 'flag_trial_has_licks_after_lickport_entrance=1' ,'*') +% % T= fetch(TRACKING.VideoNthLickTrial*EXP2.SessionTrial*EXP2.TrialLickBlock & key & 'lick_number_relative_to_firsttouch=-1' & 'flag_trial_has_licks_after_lickport_entrance=1' & 'flag_auto_water_settings=0','*') +% lick_peak_yaw_avg_across_licks_before_lickportentrance +% diff_first_previous=[]; +% diff_first_next=[]; +% diff_all_previous=[]; +% diff_all_next=[]; +% for i=2:1:numel(T)-1 +% if T(i).current_trial_num_in_block==1 +% diff_first_previous(end+1) = abs(T(i).lick_yaw_lickbout_avg - T(i-1).lick_yaw_lickbout_avg); %lick_peak_yaw +% diff_first_next(end+1) = abs(T(i).lick_yaw_lickbout_avg - T(i+1).lick_yaw_lickbout_avg); +% elseif T(i).current_trial_num_in_block>=3 +% diff_all_previous(end+1) = abs(T(i).lick_yaw_lickbout_avg - T(i-1).lick_yaw_lickbout_avg); +% end +% end + +% hold on +% histogram(diff_first_previous,[0:3:30],'Normalization','probability') +% histogram(diff_first_next,[0:3:30],'Normalization','probability') +% histogram(diff_all_previous,[0:1:30],'Normalization','probability') diff --git a/analysis/lick2D/population/ANALYSIS_DISTANCE.m b/analysis/lick2D/population/ANALYSIS_DISTANCE.m new file mode 100644 index 0000000..0c9527f --- /dev/null +++ b/analysis/lick2D/population/ANALYSIS_DISTANCE.m @@ -0,0 +1,8 @@ +function ANALYSIS_DISTANCE() + +populate(LICK2D.DistancePSTHCorrVolumetricSpikes) +populate(LICK2D.DistanceQuadrantsCorrVolumetricSpikes) +populate(LICK2D.DistanceAngularTuningCorrVolumetricSpikes) +populate(LICK2D.DistanceAngleSpikes) + +population_DistanceTuning \ No newline at end of file diff --git a/analysis/lick2D/population/population_DistanceTuning.m b/analysis/lick2D/population/population_DistanceTuning.m new file mode 100644 index 0000000..544a438 --- /dev/null +++ b/analysis/lick2D/population/population_DistanceTuning.m @@ -0,0 +1,112 @@ +function population_DistanceTuning +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Lick2D\population\distance_dependence\']; +filename = 'population_summary'; + + + +subplot(2,2,1) +rel_data= LICK2D.DistancePSTHCorrVolumetricSpikes *EXP2.SessionID; +key.odd_even_corr_threshold=0.75; + +D=fetch(rel_data & key,'*'); +bins_lateral_distance=D(1).lateral_distance_bins; + +for i_s=1:1:size(D,1) + distance_lateral_all(i_s,:) = mean( [D(i_s).distance_corr_2d],1); +end + +d_lateral_mean = mean(distance_lateral_all,1); +d_lateral_stem = std(distance_lateral_all,1)/sqrt(size(D,1)); + +shadedErrorBar(bins_lateral_distance(1:1:end-1),d_lateral_mean,d_lateral_stem,'lineprops',{'-','Color',[0 0 0]}) +xlabel('Lateral Distance (um)'); +ylabel ('PSTH (correlation)'); +box off +title('Temporal tuning'); + + +subplot(2,2,2) +rel_data= LICK2D.DistanceQuadrantsCorrVolumetricSpikes*EXP2.SessionID; +key.odd_even_corr_threshold=0.75; + +D=fetch(rel_data & key,'*'); +bins_lateral_distance=D(1).lateral_distance_bins; + +for i_s=1:1:size(D,1) + distance_lateral_all(i_s,:) = mean( [D(i_s).distance_corr_2d],1); +end + +d_lateral_mean = mean(distance_lateral_all,1); +d_lateral_stem = std(distance_lateral_all,1)/sqrt(size(D,1)); + +shadedErrorBar(bins_lateral_distance(1:1:end-1),d_lateral_mean,d_lateral_stem,'lineprops',{'-','Color',[0 0 0]}) +xlabel('Lateral Distance (um)'); +ylabel ('PSTH qudrants (correlation)'); +box off +title('Temporal and Directional tuning'); + + +subplot(2,2,3) +rel_data= LICK2D.DistanceAngularTuningCorrVolumetricSpikes *EXP2.SessionID; +key.odd_even_corr_threshold=0.75; + +D=fetch(rel_data & key,'*'); +bins_lateral_distance=D(1).lateral_distance_bins; + +for i_s=1:1:size(D,1) + distance_lateral_all(i_s,:) = mean( [D(i_s).distance_corr_2d],1); +end + +d_lateral_mean = mean(distance_lateral_all,1); +d_lateral_stem = std(distance_lateral_all,1)/sqrt(size(D,1)); + +shadedErrorBar(bins_lateral_distance(1:1:end-1),d_lateral_mean,d_lateral_stem,'lineprops',{'-','Color',[0 0 0]}) +xlabel('Lateral Distance (um)'); +ylabel ('Angular tuning (correlation)'); +title('Directional tuning'); +box off + + +subplot(2,2,4) +rel_data= LICK2D.DistanceAngleSpikes*EXP2.SessionID; + +key.vn_mises_correlation_treshold=0.75; +key.column_radius=50; + +D=fetch(LICK2D.DistanceAngleSpikes & key,'*'); +bins_lateral_distance=D(1).bins_lateral_distance; + +theta_lateral_distance=(cell2mat(fetchn(rel_data & key,'theta_lateral_distance', 'ORDER BY session_uid'))); +theta_lateral_distance_shuffled=(cell2mat(fetchn(rel_data & key,'theta_lateral_distance_shuffled', 'ORDER BY session_uid'))); + +% theta_distance_sessions=theta_lateral_distance_shuffled - theta_lateral_distance; +% theta_distance_mean=mean(theta_distance_sessions); + +theta_distance_mean = mean(theta_lateral_distance); +theta_distance_mean_stem = std(theta_lateral_distance,1)/sqrt(size(theta_lateral_distance,1)); + +% ax1=axes('position',[position_x2(3), position_y2(3), panel_width2, panel_height2]); +hold on; +shadedErrorBar(bins_lateral_distance(1:1:end-1),theta_distance_mean,theta_distance_mean_stem,'lineprops',{'-','Color',[0 0 0]}) + +% plot(bins_lateral_distance(1:1:end-1),theta_lateral_distance_shuffled,'-k') +ylim([60,90]); +xlabel('Lateral distance (\mum)'); +ylabel('\Delta\theta (\circ)'); +title(sprintf('Preferred Direction')); +xlim([0,bins_lateral_distance(end-1)]); +set(gca,'YTick',[45,60,75, 90]); + + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/maps_activity_and_selectivity/create_movies_activity.m b/analysis/maps_activity_and_selectivity/create_movies_activity.m new file mode 100644 index 0000000..99153bf --- /dev/null +++ b/analysis/maps_activity_and_selectivity/create_movies_activity.m @@ -0,0 +1,41 @@ +function create_movies_activity +close all +dir_save_fig_base = ['Z:\users\Arseny\Projects\Learning\imaging2p\Results\Movies\' 'anm' '\']; + + +blank_percentile=10; % blanking dark spots in the video (for display in movies only, not for savign in DJ) +smoothing_3D_size=3; %in x-y pixel and time(z) (for display in movies only, not for savign in DJ) +video_quality=50; + +sessions = unique(fetchn(IMG.FOVRegisteredMovie,'session')); + +for i_s = 1:1:numel(sessions) + k=[]; + + k.session = sessions(i_s); + subject_id = unique(fetchn(IMG.FOVRegisteredMovie & k,'subject_id')); + dir_save_fig = [dir_save_fig_base num2str(subject_id) '\']; + + outcomes=unique(fetchn(IMG.FOVRegisteredMovie & k,'outcome')); + trial_type_names=unique(fetchn(IMG.FOVRegisteredMovie & k,'trial_type_name')); + for i_o=1:1:numel(outcomes) + for i_tr_types=1:1:numel(trial_type_names) + k.outcome = outcomes{i_o}; + k.trial_type_name = trial_type_names{i_tr_types}; + + M_avg = fetchn(IMG.FOVRegisteredMovieFrame & k,'fov_movie_trial_avg','ORDER BY movie_frame_number'); + frame_rate = fetch1(IMG.FOVRegisteredMovie & k,'movie_frame_rate'); + + filename_prefix = ['s' num2str(k.session) '_' k.trial_type_name '_' k.outcome]; + + % saving videos f and deltaf/f + fn_save_movies_fov (M_avg,blank_percentile, smoothing_3D_size, video_quality, frame_rate, dir_save_fig_base, filename_prefix) + + %saving slowed down videos + dir_save_fig_base = [dir_save_fig_base '\slow5X\']; + fn_save_movies_fov (M_avg,blank_percentile, smoothing_3D_size, video_quality, frame_rate/5, dir_save_fig_base, filename_prefix) + + end + end +end +end \ No newline at end of file diff --git a/analysis/maps_activity_and_selectivity/fn_plot_map.m b/analysis/maps_activity_and_selectivity/fn_plot_map.m new file mode 100644 index 0000000..0fea0a7 --- /dev/null +++ b/analysis/maps_activity_and_selectivity/fn_plot_map.m @@ -0,0 +1,8 @@ +function fn_plot_map(map,cmp,label,k) + +amax=prctile(map(:),99); +amin=prctile(map(:),1); +map_scaled = size(cmp,1)*mat2gray(map,[amin amax]); +colormap(cmp); +imagesc(map_scaled); +title(sprintf('Trial Epoch: %s\n %s',k.trial_epoch_name, label)); diff --git a/analysis/maps_activity_and_selectivity/fn_plot_map2.m b/analysis/maps_activity_and_selectivity/fn_plot_map2.m new file mode 100644 index 0000000..efcdcef --- /dev/null +++ b/analysis/maps_activity_and_selectivity/fn_plot_map2.m @@ -0,0 +1,8 @@ +function fn_plot_map2(map,cmp,label,k, ax) + +amax=prctile(map(:),99.9); +amin=prctile(map(:),0.1); +map_scaled = size(cmp,1)*mat2gray(map,[amin amax]); +imagesc(map_scaled); +colormap(ax, cmp); +title(sprintf('Trial Epoch: %s\n %s',k.trial_epoch_name, label)); diff --git a/analysis/maps_activity_and_selectivity/fn_plot_map3.m b/analysis/maps_activity_and_selectivity/fn_plot_map3.m new file mode 100644 index 0000000..f96d655 --- /dev/null +++ b/analysis/maps_activity_and_selectivity/fn_plot_map3.m @@ -0,0 +1,31 @@ +function cmp = fn_plot_map3(map, label, k, colorbar_label) + +maxv=prctile(map(:),99); +minv=prctile(map(:),1); + +%rescaling +map(map>maxv)=maxv; +map(mapmaxv)=maxv; +map(map=30') ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=0' & 'num_targets>=30')); + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 1; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=0.05; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); + +rel_all = rel_data & key & sprintf('response_p_val=1'); + +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +D1_all=fetch(rel_all,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_ConnectionProbabilityDistance_averaging(D1,D1_all,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,400]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(2048); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.05, panel_width1/5, panel_height1/2]); +cmp = bluewhitered(512); % +colormap(ax2, cmp) +caxis([OUT1.minv OUT1.maxv]); +colorbar +axis off +text(8, 0.1, sprintf('Connection \n Probability'),'Rotation',90); + + + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); +rel_control_all = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=1'); + +D2=fetch(rel_control,'*'); % response p-value for inclusion. 1 means we take all pairs +D2_all=fetch(rel_control_all,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_ConnectionProbabilityDistance_averaging(D2,D2_all,distance_axial_bins,flag_response); + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +% ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + + + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.18, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +% ylim(yl) +set(gca,'XTick',[],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel(sprintf('Connection \nProbability ')); +% set(gca,'YTick',[0,0.5]); + +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(1)+0.06, position_y1(1)+0.25, panel_width1*0.5, panel_height1*0.5]); +% hold on +% plot(xl, [0 0],'-k') +% shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +% shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% % yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% % yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl=[-0.0075 0.0075]; +% ylim(yl) +% set(gca,'XLim',xl); +% box off +% set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +% text(150,0.0065,'Neuron targets','Color',[1 0 1]); +% text(150,0.004,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); +% + + + +% %% Marginal distribution - axial NEAR +% axm=axes('position',[position_x1(1), position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +% hold on +% plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +% shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +% shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +% axm.View = [90 90] +% xlabel([sprintf('Axial \nDistance ') '(\mum)']); +% ylabel([sprintf(' Connection Probability')]); +% set(gca,'XTick',[0 60 120]); +% title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +% %% Marginal distribution - axial FAR +% axm=axes('position',[position_x1(1)+0.12, position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +% hold on +% plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +% shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +% shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +% axm.View = [90 90] +% % xlabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'XTick',[0 60 120],'XTickLabel',[]); +% title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_ConnectionProbabilityDistance3.m b/analysis/photostim/PLOT_ConnectionProbabilityDistance3.m new file mode 100644 index 0000000..33ea8af --- /dev/null +++ b/analysis/photostim/PLOT_ConnectionProbabilityDistance3.m @@ -0,0 +1,173 @@ +function PLOT_ConnectionProbabilityDistance3() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; +clf; + +DefaultFontSize =8; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance3 & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30')); + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 2; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=0.001; +flag_prominent=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val) & sprintf('flag_prominent=%d',flag_prominent); + +rel_all = rel_data & key & sprintf('response_p_val=1') & 'flag_prominent=0'; + +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +D1_all=fetch(rel_all,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_ConnectionProbabilityDistance_averaging(D1,D1_all,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,400]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(2048); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val) & sprintf('flag_prominent=%d',flag_prominent); +rel_control_all = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=1') & 'flag_prominent=0'; + + +D2=fetch(rel_control,'*'); % response p-value for inclusion. 1 means we take all pairs +D2_all=fetch(rel_control_all,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_ConnectionProbabilityDistance_averaging(D2,D2_all,distance_axial_bins,flag_response); + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% caxis([OUT1.minv OUT1.maxv]); +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +% ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.18, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +% ylim(yl) +set(gca,'XTick',[],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel(sprintf(' Response (z-score)')); +% set(gca,'YTick',[0,0.5]); + +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(1)+0.06, position_y1(1)+0.25, panel_width1*0.5, panel_height1*0.5]); +% hold on +% plot(xl, [0 0],'-k') +% shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +% shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% % yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% % yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl=[-0.0075 0.0075]; +% ylim(yl) +% set(gca,'XLim',xl); +% box off +% set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +% text(150,0.0065,'Neuron targets','Color',[1 0 1]); +% text(150,0.004,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); +% + + + +%% Marginal distribution - axial NEAR +axm=axes('position',[position_x1(1), position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +xlabel([sprintf('Axial \nDistance ') '(\mum)']); +ylabel([sprintf(' Response (z-score)')]); +set(gca,'XTick',[0 60 120]); +title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +%% Marginal distribution - axial FAR +axm=axes('position',[position_x1(1)+0.12, position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +% xlabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'XTick',[0 60 120],'XTickLabel',[]); +title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/photostim/PLOT_InfluenceDistance.m b/analysis/photostim/PLOT_InfluenceDistance.m new file mode 100644 index 0000000..ea43e8b --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistance.m @@ -0,0 +1,169 @@ +function PLOT_InfluenceDistance() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; +clf; + +DefaultFontSize =8; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +% rel_data = (STIMANAL.InfluenceDistance2 & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... +% & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... +% & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30')); + + + +rel_data= (STIMANAL.InfluenceDistance & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1'); + +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 0; %0 all, 1 excitation, 2 inhibition, 3 absolute +key.num_svd_components_removed=0; +response_p_val=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,400]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(2048); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); +D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_CoupledResponseDistance_averaging(D2,distance_axial_bins,flag_response); + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% caxis([OUT1.minv OUT1.maxv]); +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +% ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.18, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +ylim(yl) +set(gca,'XTick',[],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel(sprintf(' Response (z-score)')); +set(gca,'YTick',[0,0.5]); + +% Marginal distribution - lateral (zoom) +axes('position',[position_x1(1)+0.06, position_y1(1)+0.25, panel_width1*0.5, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl=[-0.0075 0.0075]; +ylim(yl) +set(gca,'XLim',xl); +box off +set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +text(150,0.0065,'Neuron targets','Color',[1 0 1]); +text(150,0.004,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + + + +%% Marginal distribution - axial NEAR +axm=axes('position',[position_x1(1), position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +xlabel([sprintf('Axial \nDistance ') '(\mum)']); +ylabel([sprintf(' Response (z-score)')]); +set(gca,'XTick',[0 60 120]); +title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +%% Marginal distribution - axial FAR +axm=axes('position',[position_x1(1)+0.12, position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +% xlabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'XTick',[0 60 120],'XTickLabel',[]); +title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/photostim/PLOT_InfluenceDistance5.m b/analysis/photostim/PLOT_InfluenceDistance5.m new file mode 100644 index 0000000..48e9539 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistance5.m @@ -0,0 +1,188 @@ +function PLOT_InfluenceDistance5() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'Distance_Influence'; + +clf; + +DefaultFontSize =12; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.45; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance55 & 'flag_divide_by_std=0' & 'flag_withold_trials=0' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1' & 'num_targets>=10') ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=0' & 'num_targets>=10')); + + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 0; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,500]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(512); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.07, panel_width1*0.2, panel_height1*0.35]); +% imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) + +cmp = bluewhitered(512); % +colormap(ax2, cmp) +caxis([OUT1.minv OUT1.maxv]); +colorbar +text(8, 0.1, ['Influence' newline '(\Delta Activity)'],'Rotation',90); +axis off + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); +D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_CoupledResponseDistance_averaging(D2,distance_axial_bins,flag_response); + + + + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% caxis([OUT1.minv OUT1.maxv]); +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +% ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.25, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +ylim(yl) +set(gca,'XTick',[25,100:100:500],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel (['Influence' newline '(\Delta Activity)']); +set(gca,'YTick',[0,0.5]); +xlabel([sprintf('Lateral Distance ') '(\mum)']); + +% Marginal distribution - lateral (zoom) +axes('position',[position_x1(1)+0.06, position_y1(1)+0.3, panel_width1*0.75, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl=[-0.005 0.005]; +ylim(yl) +set(gca,'XLim',xl); +box off +set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +text(150,0.005,'Neuron targets','Color',[1 0 1]); +text(150,0.003,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + + + +%% Marginal distribution - axial NEAR +axm=axes('position',[position_x1(2), position_y1(1)+0.05, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +xlabel([sprintf('Axial \nDistance ') '(\mum)']); +ylabel([' Influence (\Delta Activity)']); +set(gca,'XTick',[0 60 120]); +title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +%% Marginal distribution - axial FAR +axm=axes('position',[position_x1(2)+0.12, position_y1(1)+0.05, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +% xlabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'XTick',[0 60 120],'XTickLabel',[]); +title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceDistance5_with_blue_colorbar.m b/analysis/photostim/PLOT_InfluenceDistance5_with_blue_colorbar.m new file mode 100644 index 0000000..dee878e --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistance5_with_blue_colorbar.m @@ -0,0 +1,99 @@ +function PLOT_InfluenceDistance5_with_blue_colorbar() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'Distance_Influence_with_blue_colorbar'; + +clf; + +DefaultFontSize =12; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.45; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance55 & 'flag_divide_by_std=0' & 'flag_withold_trials=0' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1' & 'num_targets>=10') ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=0' & 'num_targets>=10')); + + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 0; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,500]; +M = OUT1.map; + +M(M>=0)=0; +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, M) +axis tight +axis equal +cmp = bluewhitered(512); % +colormap(ax1, cmp) +caxis([OUT1.minv 0]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + + + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.07, panel_width1*0.2, panel_height1*0.35]); +% imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) + +% cmp = bluewhitered(512); % +colormap(ax2, cmp) +caxis([OUT1.minv 0]); +colorbar +text(8, 0.1, ['Influence' newline '(\Delta Activity)'],'Rotation',90); +axis off + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceDistance5_with_control_sites.m b/analysis/photostim/PLOT_InfluenceDistance5_with_control_sites.m new file mode 100644 index 0000000..588eb14 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistance5_with_control_sites.m @@ -0,0 +1,188 @@ +function PLOT_InfluenceDistance5_with_control_sites() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'Distance_Influence'; + +clf; + +DefaultFontSize =12; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.45; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance55 & 'flag_divide_by_std=0' & 'flag_withold_trials=0' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1' & 'num_targets>=10') ... + & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=0' & 'num_targets>=10')); + + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 0; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,500]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(512); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.07, panel_width1*0.2, panel_height1*0.35]); +% imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) + +cmp = bluewhitered(512); % +colormap(ax2, cmp) +caxis([OUT1.minv OUT1.maxv]); +colorbar +text(8, 0.1, ['Influence' newline '(\Delta Activity)'],'Rotation',90); +axis off + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); +D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_CoupledResponseDistance_averaging(D2,distance_axial_bins,flag_response); + + + + +ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +axis tight +axis equal +colormap(ax2,cmp) +% colorbar +caxis([OUT1.minv OUT1.maxv]); +xlabel([sprintf('Lateral Distance ') '(\mum)']); +ylabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.25, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +ylim(yl) +set(gca,'XTick',[25,100:100:500],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel (['Influence' newline '(\Delta Activity)']); +set(gca,'YTick',[0,0.5]); +xlabel([sprintf('Lateral Distance ') '(\mum)']); + +% Marginal distribution - lateral (zoom) +axes('position',[position_x1(1)+0.06, position_y1(1)+0.3, panel_width1*0.75, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl=[-0.005 0.005]; +ylim(yl) +set(gca,'XLim',xl); +box off +set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +text(150,0.005,'Neuron targets','Color',[1 0 1]); +text(150,0.003,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + + + +%% Marginal distribution - axial NEAR +axm=axes('position',[position_x1(2), position_y1(1)+0.05, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +xlabel([sprintf('Axial \nDistance ') '(\mum)']); +ylabel([' Influence (\Delta Activity)']); +set(gca,'XTick',[0 60 120]); +title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +%% Marginal distribution - axial FAR +axm=axes('position',[position_x1(2)+0.12, position_y1(1)+0.05, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +% xlabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'XTick',[0 60 120],'XTickLabel',[]); +title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceDistance7.m b/analysis/photostim/PLOT_InfluenceDistance7.m new file mode 100644 index 0000000..8bd1176 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistance7.m @@ -0,0 +1,178 @@ +function PLOT_InfluenceDistance7() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; +clf; + +DefaultFontSize =16; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance7 & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded& IMG.Volumetric & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=3' ... + & (STIMANAL.NeuronOrControl7 & 'neurons_or_control=1' & 'num_targets>=10') ... + & (STIMANAL.NeuronOrControl7 & 'neurons_or_control=0' & 'num_targets>=10')); + + +key.num_svd_components_removed=0; +key.is_volumetric =1; % 1 volumetric, 1 single plane +distance_axial_bins=[0,60,90,120]; +distance_axial_bins_plot=[0,30,60,90,120]; +% key.session_epoch_number=2; +flag_response= 2; %0 all, 1 excitation, 2 inhibition, 3 absolute +response_p_val=0.05; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +%% 2D plots - Neurons +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistance_averaging(D1,distance_axial_bins,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +xl=[0,500]; + +imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +axis tight +axis equal +cmp = bluewhitered(512); % +colormap(ax1, cmp) +caxis([OUT1.minv OUT1.maxv]); +% set(gca,'XTick',OUT1.distance_lateral_bins_centers) +xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% colorbar +% set(gca,'YTick',[],'XTick',[20,100:100:500]); +set(gca,'YTick',[0 60 120],'XTick',[25,100:100:500]); +ylabel([sprintf('Axial \nDistance ') '(\mum) ']); +xlim(xl) + +ax2=axes('position',[position_x1(1)+0.2, position_y1(1)+0.05, panel_width1/5, panel_height1/2]); +% imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) + +cmp = bluewhitered(512); % +colormap(ax2, cmp) +caxis([OUT1.minv OUT1.maxv]); +colorbar +text(8, 0.1, sprintf('Response \n(z-score)'),'Rotation',90); +axis off + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); +D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_CoupledResponseDistance_averaging(D2,distance_axial_bins,flag_response); + + + + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% caxis([OUT1.minv OUT1.maxv]); +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[0 60 90 120],'XTick',[25,100:100:500]); +% ylabel([sprintf('Axial \nDistance\n ') '(\mum)']); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.18, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +% yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(1)=-0.05; +yl(2)=0.5; +ylim(yl) +set(gca,'XTick',[],'XLim',xl); +box off +% ylabel([sprintf(' Response\n') ' (z-score)']); +ylabel(sprintf(' Response (z-score)')); +set(gca,'YTick',[0,0.5]); + +% Marginal distribution - lateral (zoom) +axes('position',[position_x1(1)+0.06, position_y1(1)+0.25, panel_width1*0.5, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 1]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +% yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +% yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl=[-0.005 0.005]; +ylim(yl) +set(gca,'XLim',xl); +box off +set(gca,'YTick',[-0.005 0 0.005],'XTick',[100 200 400],'XTickLabel',{'100' ' 200' '400'},'TickLength',[0.05 0.05]); +text(150,0.005,'Neuron targets','Color',[1 0 1]); +text(150,0.003,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + + + +%% Marginal distribution - axial NEAR +axm=axes('position',[position_x1(1), position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_in_column_mean,OUT1.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_in_column_mean,OUT2.marginal_axial_in_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +xlabel([sprintf('Axial \nDistance ') '(\mum)']); +ylabel([sprintf(' Response (z-score)')]); +set(gca,'XTick',[0 60 120]); +title([sprintf('25< Lateral <100 \n') '(\mum)'],'FontSize',6) + +%% Marginal distribution - axial FAR +axm=axes('position',[position_x1(1)+0.12, position_y1(1)-0.18, panel_width1*0.4, panel_height1*0.4]); +hold on +plot([distance_axial_bins(1),distance_axial_bins(end)],[0 0],'-k') +shadedErrorBar(distance_axial_bins,OUT1.marginal_axial_out_column_mean,OUT1.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[1 0 1]}) +shadedErrorBar(distance_axial_bins,OUT2.marginal_axial_out_column_mean,OUT2.marginal_axial_out_column_stem,'lineprops',{'.-','Color',[0.5 0.5 0.5]}) +axm.View = [90 90] +% xlabel([sprintf('Axial Distance ') '(\mum)']); +set(gca,'XTick',[0 60 120],'XTickLabel',[]); +title([sprintf(' 100< Lateral <200\n ') '(\mum)'],'FontSize',6) + +% plot( distance_axial_bins_plot, OUT1.marginal_axial_mean, '-b') +% plot( distance_axial_bins_plot, OUT2.marginal_axial_mean,'-m') +% set(gca,'Ydir','reverse') +% % Marginal distribution - lateral (zoom) +% axes('position',[position_x1(2), position_y1(1)+0.2, panel_width1, panel_height1/2]); +% hold on +% plot([0,OUT1.distance_lateral_bins_centers(end)], [0 0],'-k') +% plot(OUT1.distance_lateral_bins_centers, OUT1.lateral_marginal,'-b') +% plot(OUT2.distance_lateral_bins_centers, OUT2.lateral_marginal,'-m') +% yl(1)=min([OUT1.lateral_marginal,OUT2.lateral_marginal]); +% yl(2)=2*abs(min([OUT1.lateral_marginal,OUT2.lateral_marginal])); +% ylim(yl) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/photostim/PLOT_InfluenceDistanceLateral.m b/analysis/photostim/PLOT_InfluenceDistanceLateral.m new file mode 100644 index 0000000..5a7af9a --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceDistanceLateral.m @@ -0,0 +1,104 @@ +function PLOT_InfluenceDistanceLateral() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; +clf; + +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 15 10]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +rel_data = (STIMANAL.InfluenceDistance & 'flag_divide_by_std=0' & 'flag_withold_trials=1' & 'flag_normalize_by_total=1') ... + & (STIMANAL.SessionEpochsIncluded & 'stimpower_percent=15' & 'flag_include=1' & 'session_epoch_number<=8' ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30') ... + & (STIMANAL.NeuronOrControl & 'neurons_or_control=0' & 'num_targets>=30')); + +% key.session_epoch_number=2; +flag_response= 0; %0 all, 1 excitation, 2 inhibition, 3 absolute +key.num_svd_components_removed=0; +response_p_val=1; + + +key.neurons_or_control =1; % 1 neurons, 0 control sites +rel_neurons = rel_data & key & sprintf('response_p_val=%.3f',response_p_val); +rel_sessions_neurons= EXP2.SessionEpoch & rel_neurons; % only includes sessions with responsive neurons + + + +% %% 2D plots - Neurons +% ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +D1=fetch(rel_neurons,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT1=fn_PLOT_CoupledResponseDistanceLateral_averaging(D1,flag_response); + +xl=[OUT1.distance_lateral_bins_centers(1),OUT1.distance_lateral_bins_centers(end)]; +% imagesc(OUT1.distance_lateral_bins_centers, distance_axial_bins_plot, OUT1.map) +% axis tight +% axis equal +% cmp = bluewhitered(2048); % +% colormap(ax1, cmp) +% caxis([OUT1.minv OUT1.maxv]); +% % set(gca,'XTick',OUT1.distance_lateral_bins_centers) +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% % ylabel([sprintf('Axial Distance ') '(\mum)']); +% % colorbar +% % set(gca,'YTick',[],'XTick',[20,100:100:500]); +% set(gca,'YTick',[],'XTick',[25,100:100:500]); +% + +%% 2D plots - Control sites +key.neurons_or_control =0; % 1 neurons, 0 control sites +rel_control = rel_data & rel_sessions_neurons & key & sprintf('response_p_val=%.3f',response_p_val); + +% ax2=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +D2=fetch(rel_control ,'*'); % response p-value for inclusion. 1 means we take all pairs +OUT2=fn_PLOT_CoupledResponseDistanceLateral_averaging(D2,flag_response); +% imagesc(OUT2.distance_lateral_bins_centers, distance_axial_bins_plot, OUT2.map) +% axis tight +% axis equal +% colormap(ax2,cmp) +% % colorbar +% caxis([OUT1.minv OUT1.maxv]); +% xlabel([sprintf('Lateral Distance ') '(\mum)']); +% ylabel([sprintf('Axial Distance ') '(\mum)']); +% set(gca,'YTick',[],'XTick',[25,100:100:500]); + +%% Marginal distribution - lateral +axes('position',[position_x1(1), position_y1(1)+0.17, panel_width1, panel_height1*0.5]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 0]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +yl(1)=-2*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +yl(2)=abs(max([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +ylim(yl) +set(gca,'XTick',[],'XLim',xl); +box off +ylabel([sprintf('Response\n') '(z-score)']); +set(gca,'YTick',[0,0.1]); + +% Marginal distribution - lateral (zoom) +axes('position',[position_x1(1)+0.06, position_y1(1)+0.22, panel_width1*0.7, panel_height1*0.4]); +hold on +plot(xl, [0 0],'-k') +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT1.marginal_lateral_mean,OUT1.marginal_lateral_stem,'lineprops',{'-','Color',[1 0 0]}) +shadedErrorBar(OUT1.distance_lateral_bins_centers,OUT2.marginal_lateral_mean,OUT2.marginal_lateral_stem,'lineprops',{'-','Color',[0.5 0.5 0.5]}) +yl(1)=1.2*min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean]); +yl(2)=1.21*abs(min([OUT1.marginal_lateral_mean,OUT2.marginal_lateral_mean])); +ylim(yl) +set(gca,'XLim',xl); +box off +set(gca,'YTick',[-0.01 0 0.01]); + diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngle.m b/analysis/photostim/PLOT_InfluenceVsCorrAngle.m new file mode 100644 index 0000000..08308c5 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngle.m @@ -0,0 +1,71 @@ +function PLOT_InfluenceVsCorrAngle() +close all + +rel_data = STIMANAL.InfluenceVsCorrAngle & 'session_epoch_number<3'; +rel_shuffled = STIMANAL.InfluenceVsCorrAngleShuffled & 'session_epoch_number<3'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges); + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges); + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Residual Correlation, r'); + ylabel ('Influence (delta zscore)'); +end diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngle2.m b/analysis/photostim/PLOT_InfluenceVsCorrAngle2.m new file mode 100644 index 0000000..69960e5 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngle2.m @@ -0,0 +1,91 @@ +function PLOT_InfluenceVsCorrAngle2() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_angular_not_difference'; + +% rel_data = STIMANAL.InfluenceVsCorrAngle2 & 'session_epoch_number<7' & 'num_targets>=10' & 'num_pairs>=1000' ; +% rel_shuffled = STIMANAL.InfluenceVsCorrAngleShuffled2 & 'session_epoch_number<7' & 'num_targets>=10' & 'num_pairs>=1000'; +rel_data = STIMANAL.InfluenceVsCorrAngle2 & 'session_epoch_number<3' & 'num_targets>=5' & 'num_pairs>=100' ; +rel_shuffled = STIMANAL.InfluenceVsCorrAngleShuffled2 & 'session_epoch_number<3' & 'num_targets>=5' & 'num_pairs>=100'; + +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Delta Angle (deg)'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Delta Angle (deg)'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Delta Angle (deg)'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Delta Angle (deg)'); + ylabel ('Influence (delta zscore)'); +end + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngle2ShuffledDiff.m b/analysis/photostim/PLOT_InfluenceVsCorrAngle2ShuffledDiff.m new file mode 100644 index 0000000..f12d8cd --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngle2ShuffledDiff.m @@ -0,0 +1,77 @@ +function PLOT_InfluenceVsCorrAngle2ShuffledDiff() +close all + + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_angle'; + + +rel_data = STIMANAL.InfluenceVsCorrAngle2 & 'session_epoch_number<3' & 'num_targets>=5' & 'num_pairs>=100' ; +rel_shuffled = STIMANAL.InfluenceVsCorrAngleShuffled2 & 'session_epoch_number<3' & 'num_targets>=5' & 'num_pairs>=100'; + +key.neurons_or_control=1; +key.response_p_val=1; + +a=fetch(rel_data & key,'*') + +num_svd_components_removed_vector_corr =[0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Delta Angle (deg)'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Delta Angle (deg)'); + ylabel ('Influence (delta zscore)'); + box off + +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngleShuffledDiff.m b/analysis/photostim/PLOT_InfluenceVsCorrAngleShuffledDiff.m new file mode 100644 index 0000000..8a4ca3b --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngleShuffledDiff.m @@ -0,0 +1,60 @@ +function PLOT_InfluenceVsCorrAngleShuffledDiff() +close all + +rel_data = STIMANAL.InfluenceVsCorrAngle & 'session_epoch_number<7' & 'num_targets>30'; +rel_shuffled = STIMANAL.InfluenceVsCorrAngleShuffled & 'session_epoch_number<7' & 'num_targets>30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + + + +num_svd_components_removed_vector_corr =[0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngularTuning.m b/analysis/photostim/PLOT_InfluenceVsCorrAngularTuning.m new file mode 100644 index 0000000..2f8cc4d --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngularTuning.m @@ -0,0 +1,87 @@ +function PLOT_InfluenceVsCorrAngularTuning() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_angular_tuning_not_difference'; + +rel_data = STIMANAL.InfluenceVsCorrAngularTuning & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' ; +rel_shuffled = STIMANAL.InfluenceVsCorrAngularTuningShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0,1,5]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges); + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Signal Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Signal Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); \ No newline at end of file diff --git a/analysis/photostim/PLOT_InfluenceVsCorrAngularTuningShuffledDiff.m b/analysis/photostim/PLOT_InfluenceVsCorrAngularTuningShuffledDiff.m new file mode 100644 index 0000000..5f81d7b --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrAngularTuningShuffledDiff.m @@ -0,0 +1,79 @@ +function PLOT_InfluenceVsCorrAngularTuningShuffledDiff() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_angular_tuning'; + + +rel_data = STIMANAL.InfluenceVsCorrAngleTuning & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' ; +rel_shuffled = STIMANAL.InfluenceVsCorrAngleTuningShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + +a=fetch(rel_data & key,'*'); + +num_svd_components_removed_vector_corr =[0]; +% colormap=viridis(numel(num_svd_components_removed_vector_corr)); +colormap=[0 0 1]; + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Signal Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceVsCorrPSTH.m b/analysis/photostim/PLOT_InfluenceVsCorrPSTH.m new file mode 100644 index 0000000..d78809b --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrPSTH.m @@ -0,0 +1,75 @@ +function PLOT_InfluenceVsCorrPSTH() +close all + +rel_data = STIMANAL.InfluenceVsCorrPSTH & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=5000'; +rel_shuffled = STIMANAL.InfluenceVsCorrPSTHShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=5000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Residual Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); +end diff --git a/analysis/photostim/PLOT_InfluenceVsCorrPSTHShuffledDiff.m b/analysis/photostim/PLOT_InfluenceVsCorrPSTHShuffledDiff.m new file mode 100644 index 0000000..e516313 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrPSTHShuffledDiff.m @@ -0,0 +1,80 @@ +function PLOT_InfluenceVsCorrPSTHShuffledDiff() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_psth'; + + +rel_data = STIMANAL.InfluenceVsCorrPSTH & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=5000' ; +rel_shuffled = STIMANAL.InfluenceVsCorrPSTHShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=5000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + +a=fetch(rel_data & key,'*') + +num_svd_components_removed_vector_corr =[0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Signal Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + diff --git a/analysis/photostim/PLOT_InfluenceVsCorrQuadrants.m b/analysis/photostim/PLOT_InfluenceVsCorrQuadrants.m new file mode 100644 index 0000000..863a59e --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrQuadrants.m @@ -0,0 +1,75 @@ +function PLOT_InfluenceVsCorrQuadrants() +close all + +rel_data = STIMANAL.InfluenceVsCorrQuadrants & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' ; +rel_shuffled = STIMANAL.InfluenceVsCorrQuadrantsShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0,1,5]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges); + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Signal Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Signal Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); +end diff --git a/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsResidual.m b/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsResidual.m new file mode 100644 index 0000000..58793bf --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsResidual.m @@ -0,0 +1,92 @@ +function PLOT_InfluenceVsCorrQuadrantsResidual() +% close all +clf; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\influence_vs_corr\populations_plots\']; +filename = 'InfluenceVsCorrQuadrantsResidual' + +key.num_svd_components_removed_corr=0; + +rel_data_neurons_residual = STIMANAL.InfluenceVsCorrQuadrantsResidual & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' & 'neurons_or_control=1' & key; +rel_data_control_residual = STIMANAL.InfluenceVsCorrQuadrantsResidual & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' & 'neurons_or_control=0' & key; + +% rel_data_neurons_raw = STIMANAL.InfluenceVsCorrTraceSpont & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=1' & key; +% rel_data_neurons_shuffled = STIMANAL.InfluenceVsCorrTraceSpontShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=1' & key; + + +DefaultFontSize =16; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + + + +DATA_neurons_residual=struct2table(fetch(rel_data_neurons_residual,'*')); +DATA_control_residual=struct2table(fetch(rel_data_control_residual,'*')); +% DATA_neurons_raw=struct2table(fetch(rel_data_neurons_raw,'*')); +% DATA_neurons_shuffled=struct2table(fetch(rel_data_neurons_shuffled,'*')); + + +bins_corr_edges = DATA_neurons_residual.bins_corr_edges(1,:); +if bins_corr_edges(1)==-inf + bins_corr_edges(1)=bins_corr_edges(2) - (bins_corr_edges(3) - bins_corr_edges(2)); +end +if bins_corr_edges(end)==inf + bins_corr_edges(end)=bins_corr_edges(end-1) + (bins_corr_edges(end-2) - bins_corr_edges(end-3)); +end +bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + +bins_influence_edges = DATA_neurons_residual.bins_influence_edges(1,:); +if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); +end +if bins_influence_edges(end)==inf + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); +end +bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + +subplot(3,3,1) +yl =[-0.1, 1.5]; +hold on +y=DATA_neurons_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_neurons_residual,1)); +plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); +plot([0,0],yl,'-k'); +xlim([bins_corr_edges(1), bins_corr_edges(end)]); +ylim(yl); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[1 0 1], 'LineWidth',1}) +y=DATA_control_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_control_residual,1)); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[0.5 0.5 0.5], 'LineWidth',1}) +xlabel('Residual Correlation'); +% ylabel ('Influence (\Delta Activity)'); +box off +title(sprintf('Noise correlations,\n Spontaneous')); +text(0.01,1.4,'Neuron targets','Color',[1 0 1]); +text(0.01,1.2,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsShuffledDiff.m b/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsShuffledDiff.m new file mode 100644 index 0000000..7b6a578 --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrQuadrantsShuffledDiff.m @@ -0,0 +1,79 @@ +function PLOT_InfluenceVsCorrQuadrantsShuffledDiff() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'infleunce_vs_psth_quadrant'; + +rel_data = STIMANAL.InfluenceVsCorrQuadrants & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000' ; +rel_shuffled = STIMANAL.InfluenceVsCorrQuadrantsShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'num_pairs>=2000'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + +a=fetch(rel_data & key,'*'); + +num_svd_components_removed_vector_corr =[0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Signal Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Signal Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + diff --git a/analysis/photostim/PLOT_InfluenceVsCorrTraceSpontResidual.m b/analysis/photostim/PLOT_InfluenceVsCorrTraceSpontResidual.m new file mode 100644 index 0000000..ec58f3c --- /dev/null +++ b/analysis/photostim/PLOT_InfluenceVsCorrTraceSpontResidual.m @@ -0,0 +1,139 @@ +function PLOT_InfluenceVsCorrTraceSpontResidual() +% close all +clf; + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\influence_vs_corr\populations_plots\']; +filename = 'InfluenceVsCorrTraceSpontResidual' + +key.num_svd_components_removed_corr=0; + +rel_data_neurons_residual = STIMANAL.InfluenceVsCorrTraceSpontResidual & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=1' & key; +rel_data_control_residual = STIMANAL.InfluenceVsCorrTraceSpontResidual & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=0' & key; + +rel_data_neurons_raw = STIMANAL.InfluenceVsCorrTraceSpont & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=1' & key; +rel_data_neurons_shuffled = STIMANAL.InfluenceVsCorrTraceSpontShuffled & 'session_epoch_number<3' & 'num_targets>=30' & 'neurons_or_control=1' & key; + + +DefaultFontSize =16; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + + + +DATA_neurons_residual=struct2table(fetch(rel_data_neurons_residual,'*')); +DATA_control_residual=struct2table(fetch(rel_data_control_residual,'*')); +DATA_neurons_raw=struct2table(fetch(rel_data_neurons_raw,'*')); +DATA_neurons_shuffled=struct2table(fetch(rel_data_neurons_shuffled,'*')); + + +bins_corr_edges = DATA_neurons_residual.bins_corr_edges(1,:); +if bins_corr_edges(1)==-inf + bins_corr_edges(1)=bins_corr_edges(2) - (bins_corr_edges(3) - bins_corr_edges(2)); +end +if bins_corr_edges(end)==inf + bins_corr_edges(end)=bins_corr_edges(end-1) + (bins_corr_edges(end-2) - bins_corr_edges(end-3)); +end +bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + +bins_influence_edges = DATA_neurons_residual.bins_influence_edges(1,:); +if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); +end +if bins_influence_edges(end)==inf + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); +end +bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + +subplot(3,3,1) +yl =[-0.1, 1.5]; +hold on +y=DATA_neurons_raw.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_neurons_raw,1)); +plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); +plot([0,0],yl,'-k'); +xlim([bins_corr_edges(1), bins_corr_edges(end)]); +ylim(yl); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[1 0 1], 'LineWidth',1}) + +y=DATA_neurons_shuffled.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_neurons_shuffled,1)); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[1 0.7 0.5], 'LineWidth',1}) +% plot(bins_corr_centers,y_mean,'-','Color',[0.8 0 0.8]) +xlabel('Correlation'); +ylabel ('Influence (\Delta Activity)'); +box off +title(sprintf('Noise Correlations,\n Spontaneous')); + +text(0.01,1.4,'Neuron targets','Color',[1 0 1]); +text(0.01,1.2,sprintf('Shuffled'),'Color',[1 0.7 0.5]); + + + +subplot(3,3,2) +yl =[-0.1, 1.5]; +hold on +y=DATA_neurons_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_neurons_residual,1)); +plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); +plot([0,0],yl,'-k'); +xlim([bins_corr_edges(1), bins_corr_edges(end)]); +ylim(yl); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[1 0 1], 'LineWidth',1}) +y=DATA_control_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_control_residual,1)); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[0.5 0.5 0.5], 'LineWidth',1}) +xlabel('Residual Correlation'); +% ylabel ('Influence (\Delta Activity)'); +box off +title(sprintf('Noise correlations,\n Spontaneous')); +text(0.01,1.4,'Neuron targets','Color',[1 0 1]); +text(0.01,1.2,sprintf('Control targets'),'Color',[0.5 0.5 0.5]); + + +subplot(3,3,3) +yl =[-0.01, 0.02]; +xl = [-0.07, 0.07]; +hold on +y=DATA_neurons_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_neurons_residual,1)); +plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); +plot([0,0],yl,'-k'); +xlim(xl); +ylim(yl); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[1 0 1], 'LineWidth',1}) +y=DATA_control_residual.influence_binned_by_corr; +y_mean = nanmean(y,1); +y_stem = nanstd(y,1)./sqrt(size(DATA_control_residual,1)); +shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',[0.5 0.5 0.5], 'LineWidth',1}) +xlabel('Residual Correlation'); +% ylabel ('Influence (\Delta Activity)'); +box off +title('Zoom in'); + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_Network_Degree.m b/analysis/photostim/PLOT_Network_Degree.m new file mode 100644 index 0000000..6249dc1 --- /dev/null +++ b/analysis/photostim/PLOT_Network_Degree.m @@ -0,0 +1,267 @@ +function PLOT_Network_Degree() +clf + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'network_degree_vs_correlations'; + +k_degree.max_distance_lateral =200; +k_degree.session_epoch_number=2; +k_degree.num_svd_components_removed=0; +k_degree.p_val = 0.05; +k_neurons_or_control.neurons_or_control=1; + +k_corr_local.radius_size=200; +k_corr_local.session_epoch_type = 'spont_only'; % behav_only spont_only +k_corr_local.num_svd_components_removed=0; +rel_session = EXP2.Session & (STIMANAL.OutDegree & IMG.Volumetric) & (EXP2.SessionEpoch& 'session_epoch_type="spont_only"') & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1' & 'num_targets>=30'); + + +%Graphics +%--------------------------------- + +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +left_color=[0 0 0]; +right_color=[0 0 0]; +set(gcf,'defaultAxesColorOrder',[left_color; right_color]); + + +horizontal_dist=0.25; +vertical_dist=0.3; + +panel_width1=0.15; +panel_height1=0.15; + +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.75; +position_y1(end+1)=position_x1(end)-vertical_dist; +position_y1(end+1)=position_x1(end)-vertical_dist; +position_y1(end+1)=position_x1(end)-vertical_dist; + + +sessions = fetch(rel_session); + +DATA_DEGREE_ALL=[]; +DATA_CORR_ALL=[]; + +for i_s = 1:1:rel_session.count + k_s = sessions(i_s); + i_s; + rel_degree = STIMANAL.OutDegree*STIM.ROIResponseDirect5 & (STIMANAL.NeuronOrControl5 & k_neurons_or_control) & k_degree & k_s; + DATA_DEGREE = struct2table(fetch(rel_degree, '*')); + % numel(unique(DATA_DEGREE.roi_number)) + + key_epoch = fetch(EXP2.SessionEpoch & k_s & k_corr_local); + rel_corr_local = POP.ROICorrLocalPhoto & k_s & k_corr_local & key_epoch; + + max_degree_session_excit(i_s)=max([DATA_DEGREE.out_degree_excitatory]); + mean_degree_session_excit(i_s)=mean([DATA_DEGREE.out_degree_excitatory]); + + max_degree_session_inhibit(i_s)=max([DATA_DEGREE.out_degree_inhibitory]); + mean_degree_session_inhibit(i_s)=mean([DATA_DEGREE.out_degree_inhibitory]); + + +% if max_degree_session_excit(i_s)<30 +% continue +% end + + if rel_corr_local.count==0 + continue + end + rel_corr_local = rel_corr_local& key_epoch(1); + + DATA_CORR = struct2table(fetch(rel_corr_local, '*')); + + + idx=[]; + for i_r=1:1:size(DATA_DEGREE,1) + idx(i_r) = find(DATA_CORR.roi_number == DATA_DEGREE.roi_number(i_r)); + end + DATA_CORR_ALL =[DATA_CORR_ALL; DATA_CORR(idx,:)]; + DATA_DEGREE_ALL =[DATA_DEGREE_ALL; DATA_DEGREE]; +end + +num_neurons_in_radius = DATA_CORR_ALL.num_neurons_in_radius; + +% if flag_response==0 +% out_degree = DATA_DEGREE_ALL.out_degree_all1; +% elseif flag_response==1 +% out_degree = DATA_DEGREE_ALL.out_degree_excitatory; +% elseif flag_response==2 +% out_degree = DATA_DEGREE_ALL.out_degree_inhibitory; +% end + +% out_degree=(out_degree./num_neurons_in_radius)*mean(num_neurons_in_radius); + +corr_local = DATA_CORR_ALL.corr_local_without_inner_ring; +response_mean = DATA_DEGREE_ALL.response_mean; + +out_degree_excitatory = DATA_DEGREE_ALL.out_degree_excitatory; +out_degree_inhibitory= DATA_DEGREE_ALL.out_degree_inhibitory; + +out_degree_excitatory = (out_degree_excitatory./num_neurons_in_radius)*mean(num_neurons_in_radius); +out_degree_inhibitory= (out_degree_inhibitory./num_neurons_in_radius)*mean(num_neurons_in_radius); + + + + + +% subplot(2,3,1) +% plot(out_degree,corr_local,'.') +% r=corr(out_degree,corr_local); +% xlabel('Number of connections') +% ylabel('Local correlation') +% title(sprintf('r = %.2f',r)); + + + + +% subplot(2,3,2) +% plot(out_degree,num_neurons_in_radius,'.') +% r=corr(out_degree,num_neurons_in_radius); +% xlabel('Number of connections') +% ylabel('Number of neurons in radius') +% title(sprintf('r = %.2f',r)); + +% subplot(2,3,6) +% plot(out_degree_excitatory,out_degree_inhibitory,'.') +% r=corr(out_degree_excitatory,out_degree_inhibitory); +% xlabel('Number of connections, excitatory') +% ylabel('Number of connections, inhibitory') +% title(sprintf('r = %.2f',r)); + + +% subplot(2,3,3) +% plot(out_degree,response_mean,'.') +% r=corr(out_degree,response_mean); +% xlabel('Number of connections') +% ylabel('Response, z-score') +% title(sprintf('r = %.2f',r)); + + + + +%% Excitatory connections, versus Random Network +k=out_degree_excitatory; +hist_bins = linspace(0,max(k),10); %14 +hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +hist_bins_centers=round(hist_bins_centers); + +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +hold on +[k_prob]=histcounts(k,hist_bins); +k_prob=k_prob./length(k); +plot(hist_bins_centers,k_prob,'.-r') +% poisson +poisson_prob_at_bins = poisspdf(hist_bins_centers,mean(k)); +poisson_prob_continuous = poisspdf(hist_bins_centers(1):1:hist_bins_centers(end),mean(k)); +poisson_prob = poisson_prob_continuous./sum(poisson_prob_at_bins); +plot(hist_bins_centers(1):1:hist_bins_centers(end),poisson_prob,'-' ,'Color',[0.5 0.5 0.5]) +xlabel('Effective Connections') +ylabel('Probability') +title('Excitatory connections', 'Color',[1 0 0]); +text(35,0.2,'Observed','Color',[1 0 0]); +text(25,0.7,sprintf('Random Network \n(Erdos-Renyi)'),'Color',[0.5 0.5 0.5]); + +%log scale +ax1=axes('position',[position_x1(1), position_y1(2), panel_width1, panel_height1]); +loglog((hist_bins_centers),(k_prob),'.-r'); +hold on +%poisson +loglog(hist_bins_centers(1):1:hist_bins_centers(end),poisson_prob,'-','Color',[0.5 0.5 0.5]); +xlabel('Effective Connections') +ylabel('Probability') +box off; +set(gca,'Xtick',[1,10,100], 'Ytick',[0.001, 0.01, 0.1, 1]) +ylim([10^-3.2, 1]); +xlim([4 100]); + + + +%% Inhibitory connections, versus Random Network +k=out_degree_inhibitory; +hist_bins = linspace(0,max(k),10); %14 +hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +hist_bins_centers=round(hist_bins_centers); + +ax1=axes('position',[position_x1(2), position_y1(1), panel_width1, panel_height1]); +hold on +[k_prob]=histcounts(k,hist_bins); +k_prob=k_prob./length(k); +plot(hist_bins_centers,k_prob,'.-b') +% poisson +poisson_prob_at_bins = poisspdf(hist_bins_centers,mean(k)); +poisson_prob_continuous = poisspdf(hist_bins_centers(1):1:hist_bins_centers(end),mean(k)); +poisson_prob = poisson_prob_continuous./sum(poisson_prob_at_bins); +plot(hist_bins_centers(1):1:hist_bins_centers(end),poisson_prob,'-' ,'Color',[0.5 0.5 0.5]) +xlabel('Effective Connections') +ylabel('Probability') +title('Inhibitory connections','Color', [0 0 1]); +text(75,0.2,'Observed','Color',[0 0 1]); + +%log scale +ax1=axes('position',[position_x1(2), position_y1(2), panel_width1, panel_height1]); +loglog((hist_bins_centers),(k_prob),'.-b'); +hold on +%poisson +loglog(hist_bins_centers(1):1:hist_bins_centers(end),poisson_prob,'-','Color',[0.5 0.5 0.5]); +xlabel('Effective Connections') +ylabel('Probability') +k_prob(k_prob==0)=NaN; +% set(gca,'FontSize',12); +ylim([10^-3.2, 1]); +box off; +set(gca,'Xtick',[1,10,100], 'Ytick',[0.001, 0.01, 0.1, 1]) +xlim([4 150]); + +%% Local correlations +ax1=axes('position',[position_x1(3), position_y1(1), panel_width1, panel_height1]); +hold on + +% % inhibitory +% k =out_degree_inhibitory; +% hist_bins = prctile(k,linspace(0,100,12)); +% hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +% x=k; +% y=corr_local; +% [y_binned_mean, y_binned_stem]= fn_bin_data(x,y,hist_bins); +% +% shadedErrorBar(hist_bins_centers,y_binned_mean,y_binned_stem,'lineprops',{'.-','Color',[0 0 1]}) +% xlabel('Effective Connections') +% ylim([0,max(y_binned_mean+y_binned_stem)]) +% + +% excitatory +k =out_degree_excitatory; +hist_bins = prctile(k,linspace(0,100,12)); +hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +x=k; +y=corr_local; +[y_binned_mean, y_binned_stem]= fn_bin_data(x,y,hist_bins); +shadedErrorBar(hist_bins_centers,y_binned_mean,y_binned_stem,'lineprops',{'.-','Color',[1 0 0]}) +xlabel('Effective Connections') +ylabel('Correlation') +title(sprintf('Trace correlation with \nneighboring neurons')) +% ylim([0,max(y_binned_mean+y_binned_stem)]) +ylim([0.02,max(y_binned_mean+y_binned_stem)]) + +box off; +% text(15,0.01,'Inhibitory','Color',[0 0 1]); +% text(15,0.03,'Excitatory','Color',[1 0 0]); + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/PLOT_Network_Degree_ON_LOCAL_CORR_MAP.m b/analysis/photostim/PLOT_Network_Degree_ON_LOCAL_CORR_MAP.m new file mode 100644 index 0000000..aa55682 --- /dev/null +++ b/analysis/photostim/PLOT_Network_Degree_ON_LOCAL_CORR_MAP.m @@ -0,0 +1,114 @@ +function PLOT_Network_Degree_ON_LOCAL_CORR_MAP() +flag_response= 1; %0 all, 1 excitation, 2 inhibition + +k_degree.max_distance_lateral =200; +k_degree.session_epoch_number=2; +k_degree.num_svd_components_removed=0; +k_degree.p_val = single(0.05); + +k_corr_local.radius_size=200; +k_corr_local.session_epoch_type = 'behav_only'; % behav_only spont_only +k_corr_local.num_svd_components_removed=1; +rel_session = EXP2.Session & (STIMANAL.DirectOutDegree & IMG.Volumetric) & (EXP2.SessionEpoch& 'session_epoch_type="behav_only"') & (STIMANAL.NeuronOrControl & 'neurons_or_control=1' & 'num_targets>=30'); + + +sessions = fetch(rel_session); + +DATA_DEGREE_ALL=[]; +DATA_CORR_ALL=[]; + +for i_s = 1:1:rel_session.count + clf + + k_s = sessions(i_s); + i_s; + rel_degree = STIMANAL.DirectOutDegree*STIM.ROIResponseDirect & (STIMANAL.NeuronOrControl & 'neurons_or_control=1') & k_degree & k_s; + DATA_DEGREE = struct2table(fetch(rel_degree, '*')); + % numel(unique(DATA_DEGREE.roi_number)) + + key_epoch = fetch(EXP2.SessionEpoch & k_s & k_corr_local); + rel_corr_local = POP.ROICorrLocalPhoto & k_s & k_corr_local & key_epoch; + + max_degree_session(i_s)=max([DATA_DEGREE.out_degree_excitatory1]); + mean_degree_session(i_s)=mean([DATA_DEGREE.out_degree_excitatory1]); + + if max_degree_session(i_s)<50 + continue + end + + if rel_corr_local.count==0 + continue + end + rel_corr_local = rel_corr_local*IMG.ROI& key_epoch(1) & 'plane_num=1'; + + DATA_CORR = struct2table(fetch(rel_corr_local, '*')); + + + idx=[]; + for i_r=1:1:size(DATA_DEGREE,1) + idx(i_r) = find(DATA_CORR.roi_number == DATA_DEGREE.roi_number(i_r)); + end + DATA_CORR_ALL =[DATA_CORR_ALL; DATA_CORR(idx,:)]; + DATA_DEGREE_ALL =[DATA_DEGREE_ALL; DATA_DEGREE]; + +% DATA = struct2table(fetch(POP.ROICorrLocalPhoto*IMG.ROI & k_corr_local & key_epoch(1),'*')); +pix2dist=1; + +bins1 = prctile(DATA_CORR.corr_local_without_inner_ring, [0:5:100]); + +%% MAP +[N,edges,bin]=histcounts(DATA_CORR.corr_local_without_inner_ring,bins1); +% ax1=axes('position',[position_x1(1), position_y1(1), panel_width1*2, panel_height1*2]); +my_colormap=jet(numel(bins1)); +% my_colormap=plasma(numel(time_bins1)); + +subplot(3,3,[1,2,4,5]) +hold on; + +for i_roi=1:1:size(DATA_CORR,1) + plot(DATA_CORR.roi_centroid_x(i_roi)*pix2dist, DATA_CORR.roi_centroid_y(i_roi)*pix2dist,'.','Color',my_colormap(bin(i_roi),:),'MarkerSize',7) +end +axis xy +set(gca,'YDir','reverse') +% title(sprintf('Motor map, left ALM\n n = %d tuned neurons (%.1f%%) \n',size(M,1), 100*size(M,1)/rel_all_good_cells.count )); +% set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, 800], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,800],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +% title([ 'anm' num2str(key.subject_id) ' s' num2str(key.session) ' ' session_date filename_suffix]); + + +idx = find(DATA_DEGREE.out_degree_excitatory1>prctile(DATA_DEGREE.out_degree_excitatory1,95)); +idx_corr_roi=[]; +for i=1:1:numel(idx) + current_roi = DATA_DEGREE.roi_number(idx(i)); + idx_corr_roi(i) = find(DATA_CORR.roi_number == current_roi); + plot(DATA_CORR.roi_centroid_x(idx_corr_roi(i) )*pix2dist, DATA_CORR.roi_centroid_y(idx_corr_roi(i) )*pix2dist,'o','Color',my_colormap(bin(idx_corr_roi(i) ),:),'MarkerSize',DATA_DEGREE.out_degree_excitatory1(idx(i))/5) +end +mean(DATA_CORR.corr_local_without_inner_ring(idx_corr_roi)) + +idx = find(DATA_DEGREE.out_degree_excitatory1<=prctile(DATA_DEGREE.out_degree_excitatory1,5)); +idx_corr_roi=[]; +for i=1:1:numel(idx) + current_roi = DATA_DEGREE.roi_number(idx(i)); + idx_corr_roi(i) = find(DATA_CORR.roi_number == current_roi); + plot(DATA_CORR.roi_centroid_x(idx_corr_roi(i) )*pix2dist, DATA_CORR.roi_centroid_y(idx_corr_roi(i) )*pix2dist,'d','Color',my_colormap(bin(idx_corr_roi(i) ),:),'MarkerSize',7) +end +mean(DATA_CORR.corr_local_without_inner_ring(idx_corr_roi)) + +% Colorbar +% ax2=axes('position',[position_x2(4)+0.15, position_y2(1)+0.08, panel_width2, panel_height2/4]); +% colormap(ax2,my_colormap) +% % cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% % 'TickLabels',[-5,0,5],'Location','NorthOutside'); +% cb1 = colorbar(ax2,'Position',[position_x2(4)+0.15, position_y2(1)+0.1, panel_width2, panel_height2/4], 'Ticks',[0, 0.5, 1],... +% 'TickLabels',[],'Location','NorthOutside'); +% axis off; + +subplot(3,3,9) +mean_img_enhanced = fetch1(IMG.Plane & k_s & 'plane_num=1','mean_img_enhanced'); +imagesc(mean_img_enhanced) +colormap(bone) +end +a=1 \ No newline at end of file diff --git a/analysis/photostim/PLOT_Network_Degree_vs_tuning.m b/analysis/photostim/PLOT_Network_Degree_vs_tuning.m new file mode 100644 index 0000000..ef0e9c4 --- /dev/null +++ b/analysis/photostim/PLOT_Network_Degree_vs_tuning.m @@ -0,0 +1,177 @@ +function PLOT_Network_Degree_vs_tuning() +clf + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'network_degree_vs_tuning'; + +k_degree.max_distance_lateral =100; +k_degree.session_epoch_number=2; +k_degree.num_svd_components_removed=0; +k_degree.p_val = 0.05; +k_neurons_or_control.neurons_or_control=1; + +k_corr_local.radius_size=100; +k_corr_local.session_epoch_type = 'behav_only'; % behav_only spont_only +k_corr_local.num_svd_components_removed=0; +rel_session = EXP2.Session & (STIMANAL.OutDegree & IMG.Volumetric) & (EXP2.SessionEpoch& 'session_epoch_type="spont_only"') & (STIMANAL.NeuronOrControl5 & 'neurons_or_control=1' & 'num_targets>=30'); + + +%Graphics +%--------------------------------- + +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); +left_color=[0 0 0]; +right_color=[0 0 0]; +set(gcf,'defaultAxesColorOrder',[left_color; right_color]); + + +horizontal_dist=0.25; +vertical_dist=0.2; + +panel_width1=0.15; +panel_height1=0.15; + +position_x1(1)=0.07; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.75; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; +position_y1(end+1)=position_y1(end)-vertical_dist; + + +sessions = fetch(rel_session); + +DATA_DEGREE_ALL=[]; +DATA_CORR_ALL=[]; + +DATA_SIGNAL_ALL1=[]; +DATA_SIGNAL_ALL2=[]; +DATA_SIGNAL_ALL3=[]; + +for i_s = 1:1:rel_session.count + k_s = sessions(i_s); + i_s; + rel_degree = STIMANAL.OutDegree*STIM.ROIResponseDirect5 & (STIMANAL.NeuronOrControl5 & k_neurons_or_control) & k_degree & k_s; + DATA_DEGREE = struct2table(fetch(rel_degree, '*')); + % numel(unique(DATA_DEGREE.roi_number)) + + key_epoch = fetch(EXP2.SessionEpoch & k_s & k_corr_local); + rel_signal1 = LICK2D.ROILick2DangleSpikes & k_s & key_epoch; + rel_signal3 = LICK2D.ROILick2DPSTHStatsSpikes & k_s & key_epoch; + + rel_corr_local = POP.ROICorrLocalPhoto & k_s & k_corr_local & key_epoch; + + max_degree_session_excit(i_s)=max([DATA_DEGREE.out_degree_excitatory]); + mean_degree_session_excit(i_s)=mean([DATA_DEGREE.out_degree_excitatory]); + + max_degree_session_inhibit(i_s)=max([DATA_DEGREE.out_degree_inhibitory]); + mean_degree_session_inhibit(i_s)=mean([DATA_DEGREE.out_degree_inhibitory]); + + +% if max_degree_session_excit(i_s)<30 +% continue +% end + + if rel_corr_local.count==0 + continue + end + rel_corr_local = rel_corr_local& key_epoch(1); + + + DATA_SIGNAL1 = struct2table(fetch(rel_signal1, 'goodness_of_fit_vmises')); + DATA_SIGNAL3 = struct2table(fetch(rel_signal3, 'psth_odd_even_corr')); + + + DATA_CORR = struct2table(fetch(rel_corr_local, '*')); + + + idx=[]; + for i_r=1:1:size(DATA_DEGREE,1) + idx(i_r) = find(DATA_CORR.roi_number == DATA_DEGREE.roi_number(i_r)); + end + DATA_CORR_ALL =[DATA_CORR_ALL; DATA_CORR(idx,:)]; + DATA_DEGREE_ALL =[DATA_DEGREE_ALL; DATA_DEGREE]; + + DATA_SIGNAL_ALL1 =[DATA_SIGNAL_ALL1; DATA_SIGNAL1(idx,:)]; + DATA_SIGNAL_ALL3 =[DATA_SIGNAL_ALL3; DATA_SIGNAL3(idx,:)]; + +end + +num_neurons_in_radius = DATA_CORR_ALL.num_neurons_in_radius; + +% if flag_response==0 +% out_degree = DATA_DEGREE_ALL.out_degree_all1; +% elseif flag_response==1 +% out_degree = DATA_DEGREE_ALL.out_degree_excitatory; +% elseif flag_response==2 +% out_degree = DATA_DEGREE_ALL.out_degree_inhibitory; +% end + +% out_degree=(out_degree./num_neurons_in_radius)*mean(num_neurons_in_radius); + +signal1 = DATA_SIGNAL_ALL1.goodness_of_fit_vmises; +signal3 = DATA_SIGNAL_ALL3.psth_odd_even_corr; + +out_degree_excitatory = DATA_DEGREE_ALL.out_degree_excitatory; +out_degree_inhibitory= DATA_DEGREE_ALL.out_degree_inhibitory; + +out_degree_excitatory = (out_degree_excitatory./num_neurons_in_radius)*mean(num_neurons_in_radius); +out_degree_inhibitory= (out_degree_inhibitory./num_neurons_in_radius)*mean(num_neurons_in_radius); + + + + +%% Local correlations +ax1=axes('position',[position_x1(1), position_y1(1), panel_width1, panel_height1]); +hold on +% excitatory +k =out_degree_excitatory; +hist_bins = prctile(k,linspace(0,100,12)); +hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +x=k; +y=signal1; +[y_binned_mean, y_binned_stem]= fn_bin_data(x,y,hist_bins); +shadedErrorBar(hist_bins_centers,y_binned_mean,y_binned_stem,'lineprops',{'.-','Color',[0 0 1]}) +xlabel('Effective Connections') +ylabel('Directional tuning') +ylim([min(y_binned_mean-y_binned_stem),max(y_binned_mean+y_binned_stem)]) +box off; +% text(15,0.01,'Inhibitory','Color',[0 0 1]); +% text(15,0.03,'Excitatory','Color',[1 0 0]); + + + +%% Local correlations +ax1=axes('position',[position_x1(2), position_y1(1), panel_width1, panel_height1]); +hold on +% excitatory +k =out_degree_excitatory; +hist_bins = prctile(k,linspace(0,100,12)); +hist_bins_centers = hist_bins(1:end-1) + diff(hist_bins)/2; +x=k; +y=signal3; +[y_binned_mean, y_binned_stem]= fn_bin_data(x,y,hist_bins); +shadedErrorBar(hist_bins_centers,y_binned_mean,y_binned_stem,'lineprops',{'.-','Color',[1 0 0]}) +xlabel('Effective Connections') +ylabel('Temporal tuning') +ylim([min(y_binned_mean-y_binned_stem),max(y_binned_mean+y_binned_stem)]) +box off; +% text(15,0.01,'Inhibitory','Color',[0 0 1]); +% text(15,0.03,'Excitatory','Color',[1 0 0]); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r300']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + diff --git a/analysis/photostim/PLOT_NumSignifResponseCellsSVD.m b/analysis/photostim/PLOT_NumSignifResponseCellsSVD.m new file mode 100644 index 0000000..3d38d98 --- /dev/null +++ b/analysis/photostim/PLOT_NumSignifResponseCellsSVD.m @@ -0,0 +1,50 @@ +function PLOT_NumSignifResponseCellsSVD() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\']; +clf; + +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 15 10]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.3; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +% key.is_volumetric =1; % 1 volumetric, 1 single plane +% distance_axial_bins=[0,60,90,120]; +% % key.session_epoch_number=2; +% rel = STIM.ROIResponseSVD; +% flag_response=0 ; %0 all, 1 excitation, 2 inhibition, 3 absolute +% key.num_svd_components_removed=0; +% response_p_val=0.05; + + +%% Direct response +num_svd_components_removed_vector = [0, 1,10]; +key.neurons_or_control=1; +for i_c = 1:1:numel(num_svd_components_removed_vector) + key.num_svd_components_removed = num_svd_components_removed_vector(i_c); + rel = STIM.ROIResponseDirect & (STIMANAL.NeuronOrControl & key); + D=struct2table(fetch(rel,'*')); + plot(D.response_mean_odd,D.response_mean_even,'.') + plot( -log10(D.response_p_value2_odd), -log10(D.response_p_value2_even),'.') + plot( -log10(D.response_p_value1), -log10(D.response_p_value2),'.') + plot( -log10(D.response_p_value1), -log10(D.response_p_value3),'.') + + +end + + diff --git a/analysis/photostim/PLOT_prepost_synaptic_correlation.m b/analysis/photostim/PLOT_prepost_synaptic_correlation.m new file mode 100644 index 0000000..e023b7e --- /dev/null +++ b/analysis/photostim/PLOT_prepost_synaptic_correlation.m @@ -0,0 +1,60 @@ +function PLOT_prepost_synaptic_correlation() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Connectivity\']; +filename = 'pre_post_synaptic_correlation'; + +clf; + +DefaultFontSize =24; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.45; +vertical_dist=0.35; + +panel_width=0.4; +panel_height=0.4; +position_x(1)=0.2; +position_x(end+1)=position_x(end)+horizontal_dist; + +position_y(1)=0.5; +position_y(end+1)=position_y(end)-vertical_dist; + + +%% Correlation +r_all=fetchn(STIMANAL.ROIInfluenceVariability,'pre_post_synaptic_response_correlation'); + + +ax1=axes('position',[position_x(1), position_y(1), panel_width, panel_height/2]); +hold on +hist_bins=linspace(-1,1,15); +hhh=histogram(r_all,hist_bins,'FaceColor',[0.5 0.5 0.5]); +% xlabel([sprintf('''Pre-synaptic'' response \n peak ') ('(\Delta F/F)')]); + +ylabel(sprintf('Counts (pairs)')); +set(gca,'FontSize',24); +xlabel(sprintf(' Correlation, r\n '),'FontSize',24); + +title(sprintf(' Response correlation \n r = %.2f',nanmean(r_all)),'FontSize',24) + + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/photostim/distance_dependence.m b/analysis/photostim/distance_dependence.m new file mode 100644 index 0000000..ac9c8c2 --- /dev/null +++ b/analysis/photostim/distance_dependence.m @@ -0,0 +1,226 @@ +function distance_dependence() +close all; +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +% key.subject_id = 447990; +% key.session =8; + +% key.subject_id = 445980; +% key.session =7; + +% key.subject_id = 445873; +% key.session =5; + +% key.subject_id = 462458; +% key.session =12; + +% key.subject_id = 463195; +% key.session =4; + + +% key.subject_id = 462455; +% key.session =3; + +key.subject_id = 463192; +key.session =3; + +% key.subject_id = 464728; +% key.session =2; + +flag_distance_flag =0; % 0 lateral distance; 1 axial distance; 2 3d distance + +if flag_distance_flag==0 % lateral distance + distance_type_name = 'Lateral'; +elseif flag_distance_flag==1 % axial distance (depth) + distance_type_name = 'Axial'; +elseif flag_distance_flag==2 % 3D distance in a volume + distance_type_name = '3D'; +end + + +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +key.session_epoch_number = epoch_list(1); % to take the photostim groups from +% epoch_list=epoch_list(1:end-1); + +rel=STIM.ROIResponse; + +% distance_to_closest_neuron=35; % in microns +% response_p_value=0.001; +% min_distance_to_closest_neuron=15; % in microns to be considered target neurons (versus contro sites) +response_p_value=0.01; % for signficance + +% distance_bins = [0:10:120,inf]; % in microns +distance_bins = [0:10:150]; % in microns + + +zoom =fetch1(IMG.FOVEpoch & key,'zoom'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + +% min_distance_to_closest_neuron = min_distance_to_closest_neuron/pix2dist; % in pixels + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.09; +panel_height=0.1; +horizontal_distance=0.15; +vertical_distance=0.18; + +position_x(1)=0.07; +position_x(end+1)=position_x(end) + horizontal_distance+0.19; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.8; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['distance_session_' num2str(key.session) '_' session_date ]; +filename = [filename distance_type_name]; + + +% G_controls=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=0' & sprintf('distance_to_closest_neuron > %d', min_distance_to_closest_neuron),'*'); +G_controls=(IMG.PhotostimGroupROI -STIM.ROIResponseDirect) & key; +G_controls = fetch(G_controls,'*'); +% G_neurons=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=1' & sprintf('distance_to_closest_neuron <= %d', distance_to_closest_neuron),'*'); +G_neurons=fetch(IMG.PhotostimGroupROI & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & key & 'response_p_value<0.01')) ,'*'); + + + + + +for i_epoch=1:1:numel(epoch_list) + k1=key; + k1.session_epoch_number = epoch_list(i_epoch); + + + %% Neural sites + axes('position',[position_x(2), position_y(end), panel_width, panel_height]); + line_color=[1 0 1]; + hold on; + % rel_group_neurons= rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & 'flag_neuron_or_control=1' & sprintf('distance_to_closest_neuron <= %d', distance_to_closest_neuron) & k1)) ; + + % rel_target_neurons = IMG.PhotostimGroup &(STIM.ROIResponseDirect & k1 & 'response_p_value<=0.05'); + rel_target_neurons = IMG.PhotostimGroup &(STIM.ROIResponseDirect & k1 & 'response_p_value<=0.01'); + + number_of_target_neurons = rel_target_neurons.count; + rel_group_neurons= rel & rel_target_neurons; + + [distance_bins_neurons,y_neurons, N_signif_neurons,N_all_neurons, idx_nonempty_bins_neurons] = fn_plot_distance_dependence(rel_group_neurons, distance_bins, flag_distance_flag, response_p_value,line_color); + title(sprintf('Neuronal targets \nn = %d',(number_of_target_neurons)),'Color',line_color); + xlabel([sprintf(' %s distance from nearest target',distance_type_name) ' (\mum)']); + ylabel('\Delta F/F'); + xlim([0,max(distance_bins)]) + set(gca,'Xtick',[0,50,100,150]); + + %% Control sites + axes('position',[position_x(3), position_y(end), panel_width, panel_height]); + line_color = [0 0 1]; + hold on; + % rel_target_controls = (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & 'flag_neuron_or_control=0' & sprintf('distance_to_closest_neuron > %d', min_distance_to_closest_neuron) & k1)); + % rel_target_controls= IMG.PhotostimGroup &((IMG.PhotostimGroupROI -STIM.ROIResponseDirect)& k1) ; + rel_target_controls = IMG.PhotostimGroup &(STIM.ROIResponseDirect & k1 & 'response_p_value>0.1'); + + number_of_target_controls = rel_target_controls.count; + rel_group_controls= rel & rel_target_controls; + + [distance_bins_control,y_control, N_signif_control,N_all_control, idx_nonempty_bins_control] = fn_plot_distance_dependence(rel_group_controls, distance_bins, flag_distance_flag, response_p_value,line_color); + + title(sprintf('Control targets \nn = %d',(number_of_target_controls)),'Color',line_color); + + xlim([0,max(distance_bins)]) + set(gca,'Xtick',[0,50,100,150]); + + + distance_bins_neurons = distance_bins_neurons(2:1:end); + distance_bins_control = distance_bins_control(2:1:end); + + %% Connection probability normalized to number of photostim sites + axes('position',[position_x(4), position_y(end), panel_width, panel_height]); + hold on; + plot(distance_bins_neurons(idx_nonempty_bins_neurons),N_signif_neurons(idx_nonempty_bins_neurons)/number_of_target_neurons,'Color',[1 0 1],'LineWidth',2); + plot(distance_bins_control(idx_nonempty_bins_control),N_signif_control(idx_nonempty_bins_control)/number_of_target_controls,'Color',[0 0 1],'LineWidth',2); + xlim([0,max(distance_bins)]) + set(gca,'Xtick',[0,50,100,150]); + ylabel('Connections per target'); + xlabel([sprintf(' %s distance from nearest target',distance_type_name) ' (\mum)']); + + %% Connection probability normalized to number of pairs at that distance bin + axes('position',[position_x(5), position_y(end), panel_width, panel_height]); + hold on; + plot(distance_bins_neurons(idx_nonempty_bins_neurons),N_signif_neurons(idx_nonempty_bins_neurons)./N_all_neurons(idx_nonempty_bins_neurons),'Color',[1 0 1],'LineWidth',2); + plot(distance_bins_control(idx_nonempty_bins_control),N_signif_control(idx_nonempty_bins_control)./N_all_control(idx_nonempty_bins_control),'Color',[0 0 1],'LineWidth',2); + xlim([0,max(distance_bins)]) + set(gca,'Xtick',[0,50,100,150]); + ylabel('Connection probability'); +% xlabel(' Distance from nearest target (\mum)'); + % ylim([0,0.2]) + + position_y(end+1)=position_y(end) -vertical_distance; + +end +% & sprintf('duration > %d', duration) + +axes('position',[position_x(1), 0.7, 0.25, 0.25]); + +% R=fetch((IMG.ROI&IMG.ROIGood) & key & 'plane_num=1','*'); +R=fetch((IMG.ROI&IMG.ROIGood) & key,'*'); +mean_img_enhanced = fetch1(IMG.Plane & key & 'plane_num=1','mean_img_enhanced'); +x_dim = [0:1:(size(mean_img_enhanced,1)-1)]*pix2dist; +y_dim = [0:1:(size(mean_img_enhanced,2)-1)]*pix2dist; +imagesc(x_dim, y_dim, mean_img_enhanced); +colormap(gray) +hold on +% plot ROIS +for i_f=1:1:numel(R) + x=R(i_f).roi_centroid_x*pix2dist; + y=R(i_f).roi_centroid_y*pix2dist; + plot(x,y,'og','MarkerSize',3) +end + +% plot neuron targets +for i_f=1:1:numel(G_neurons) + x=G_neurons(i_f).photostim_center_x*pix2dist; + y=G_neurons(i_f).photostim_center_y*pix2dist; + plot(x,y,'.m','MarkerSize',10) +end + +% plot control targets +for i_f=1:1:numel(G_controls) + x=G_controls(i_f).photostim_center_x*pix2dist; + y=G_controls(i_f).photostim_center_y*pix2dist; + plot(x,y,'.b','MarkerSize',10) +end + +axis xy +set(gca,'YDir','reverse') +set(gca,'Xlim',[min(x_dim),max(x_dim)],'Xtick',[0, ceil(max(x_dim))], 'Ylim',[min(y_dim),max(y_dim)],'Ytick',[0,ceil(max(y_dim))],'TickLength',[0.01,0],'TickDir','out') +axis equal +axis tight +xlabel('Anterior - Posterior (\mum)'); +ylabel('Lateral - Medial (\mum)'); +plane_num = numel(fetchn(IMG.Plane & key,'plane_num')); +title(sprintf('ROIs from %d planes',plane_num)); + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + + + + + diff --git a/analysis/photostim/fn/fn_PLOT_ConnectionProbabilityDistance_averaging.m b/analysis/photostim/fn/fn_PLOT_ConnectionProbabilityDistance_averaging.m new file mode 100644 index 0000000..22b5a10 --- /dev/null +++ b/analysis/photostim/fn/fn_PLOT_ConnectionProbabilityDistance_averaging.m @@ -0,0 +1,112 @@ +function OUT=fn_PLOT_ConnectionProbabilityDistance_averaging(D,D_all,distance_axial_bins, flag_response, maxv, minv) +OUT=[]; + +distance_lateral_bins=D(1).distance_lateral_bins; +distance_lateral_bins_centers= distance_lateral_bins(1:end-1)+diff(distance_lateral_bins)/2; + +% choosing sessions with the same number of axial bins +counter=0; +for j=1:1:numel(D) + if~(numel(intersect(distance_axial_bins,D(j).distance_axial_bins'))==numel(distance_axial_bins)) + continue + end + counter=counter+1; + idx_sessions(counter) = j; +end + +% idx_sessions=1:1:numel(D); +if counter==0 + return +end +map=zeros(numel(distance_axial_bins), numel(distance_lateral_bins_centers),numel(idx_sessions))+NaN; +axial_marginal=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; +axial_marginal_in_column=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; +axial_marginal_out_column=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; + + +num_pairs=0; +for j=1:1:numel(idx_sessions) + ii= idx_sessions(j); + num_pairs=num_pairs+D(j).num_pairs; + switch flag_response + case 0 %all + current_map = D(ii).counts_2d./D_all(ii).counts_2d; + current_lateral = D(ii).response_lateral; + current_axial = D(ii).response_axial'; + current_axial_in_column = D(ii).response_axial_in_column'; + current_axial_out_column = D(ii).response_axial_out_column'; + case 1 %excitation + current_map = D(ii).counts_2d_excitation./D_all(ii).counts_2d; + current_lateral = sum(D(ii).counts_2d_excitation,1)./sum(D_all(ii).counts_2d,1); + current_axial =sum(D(ii).counts_2d_excitation,2)./sum(D_all(ii).counts_2d,2); + current_axial_in_column =sum(D(ii).counts_2d_excitation,2)./sum(D_all(ii).counts_2d,2); + current_axial_out_column = sum(D(ii).counts_2d_excitation,2)./sum(D_all(ii).counts_2d,2); + case 2 %inhibition + current_map = D(ii).counts_2d_inhibition./D_all(ii).counts_2d; + current_lateral = sum(D(ii).counts_2d_inhibition,1)./sum(D_all(ii).counts_2d,1); + current_axial =(sum(D(ii).counts_2d_inhibition,2)./sum(D_all(ii).counts_2d,2)); + current_axial_in_column =sum(D(ii).counts_2d_inhibition,2)./sum(D_all(ii).counts_2d,2); + current_axial_out_column = sum(D(ii).counts_2d_inhibition,2)./sum(D_all(ii).counts_2d,2); + + case 3 %absolute + current_map = D(ii).response_2d_absolute; + current_lateral = D(ii).response_lateral_absolute; + current_axial = D(ii).response_axial_absolute'; + current_axial_in_column = D(ii).response_axial_in_column_absolute'; + current_axial_out_column = D(ii).response_axial_out_column_absolute'; + end + + % current_map_without_NaN = current_map; current_map_without_NaN(isnan(current_map))=0; + % current_axial_without_NaN = current_axial; current_axial_without_NaN(isnan(current_axial))=0; + + lateral_marginal(j,:) = current_lateral; + + + current_axial_bins = D(j).distance_axial_bins; + for i_d=1:1:numel(current_axial_bins) + idx_d=find(current_axial_bins(i_d)==distance_axial_bins); + % temp=~isnan(current_map(i_d,:)); + % session_counts(distance_axial_bins==current_axial_bins(i_d),:)= session_counts(distance_axial_bins==current_axial_bins(i_d),:)+temp; + if ~isempty(idx_d) + map(idx_d,:,j) = current_map(i_d,:); + axial_marginal(j,idx_d) = current_axial(i_d,:); + axial_marginal_in_column(j,idx_d) = current_axial_in_column(i_d,:); + axial_marginal_out_column(j,idx_d) = current_axial_out_column(i_d,:); + + end + end +end + +map=squeeze(nanmean(map,3)); + +if nargin<5 % if the scaling values were not provided as inputs + maxv=prctile(map(:),99); + minv=min([prctile(map(:),1),0]); +end + +%rescaling +map(map>=maxv)=maxv; +map(map<=minv)=minv; + +OUT.distance_lateral_bins_centers=distance_lateral_bins_centers; +OUT.maxv=maxv; +OUT.minv=minv; +OUT.num_pairs=num_pairs; + +OUT.map=map; %map averaged across sessions +OUT.map(2:5,:)=OUT.map; +OUT.marginal_lateral_mean=nanmean(lateral_marginal,1); +OUT.marginal_lateral_stem=nanstd(lateral_marginal,1)./sqrt(sum(~isnan(lateral_marginal))); + +OUT.marginal_axial_mean=nanmean(axial_marginal,1); +OUT.marginal_axial_stem=nanstd(axial_marginal,1)./sqrt(sum(~isnan(axial_marginal))); + +OUT.marginal_axial_in_column_mean=nanmean(axial_marginal_in_column,1); +OUT.marginal_axial_in_column_stem=nanstd(axial_marginal_in_column,1)./sqrt(sum(~isnan(axial_marginal_in_column))); + +OUT.marginal_axial_out_column_mean=nanmean(axial_marginal_out_column,1); +OUT.marginal_axial_out_column_stem=nanstd(axial_marginal_out_column,1)./sqrt(sum(~isnan(axial_marginal_out_column))); + + + + diff --git a/analysis/photostim/fn/fn_PLOT_CoupledResponseDistanceLateral_averaging.m b/analysis/photostim/fn/fn_PLOT_CoupledResponseDistanceLateral_averaging.m new file mode 100644 index 0000000..e9e2d20 --- /dev/null +++ b/analysis/photostim/fn/fn_PLOT_CoupledResponseDistanceLateral_averaging.m @@ -0,0 +1,33 @@ +function OUT=fn_PLOT_CoupledResponseDistanceLateral_averaging(D, flag_response) +OUT=[]; + +distance_lateral_bins=D(1).distance_lateral_bins; +distance_lateral_bins_centers= distance_lateral_bins(1:end-1)+diff(distance_lateral_bins)/2; + + +num_pairs=0; +for ii=1:1:numel(D) + num_pairs=num_pairs+D(ii).num_pairs; + switch flag_response + case 0 %all + current_lateral = D(ii).response_lateral; + case 1 %excitation + current_lateral = D(ii).response_lateral_excitation; + case 2 %inhibition + current_lateral = D(ii).response_lateral_inhibition; + case 3 %absolute + current_lateral = D(ii).response_lateral_absolute; + end + + + lateral_marginal(ii,:) = current_lateral; + +end + +OUT.distance_lateral_bins_centers=distance_lateral_bins_centers; +OUT.num_pairs=num_pairs; + +OUT.marginal_lateral_mean=nanmean(lateral_marginal,1); +OUT.marginal_lateral_stem=nanstd(lateral_marginal,1)./sqrt(sum(~isnan(lateral_marginal))); + + diff --git a/analysis/photostim/fn/fn_PLOT_CoupledResponseDistance_averaging.m b/analysis/photostim/fn/fn_PLOT_CoupledResponseDistance_averaging.m new file mode 100644 index 0000000..cf67e84 --- /dev/null +++ b/analysis/photostim/fn/fn_PLOT_CoupledResponseDistance_averaging.m @@ -0,0 +1,111 @@ +function OUT=fn_PLOT_CoupledResponseDistance_averaging(D,distance_axial_bins, flag_response, maxv, minv) +OUT=[]; + +distance_lateral_bins=D(1).distance_lateral_bins; +distance_lateral_bins_centers= distance_lateral_bins(1:end-1)+diff(distance_lateral_bins)/2; + +% choosing sessions with the same number of axial bins +counter=0; +for j=1:1:numel(D) + if~(numel(intersect(distance_axial_bins,D(j).distance_axial_bins'))==numel(distance_axial_bins)) + continue + end + counter=counter+1; + idx_sessions(counter) = j; +end + +% idx_sessions=1:1:numel(D); +if counter==0 + return +end +map=zeros(numel(distance_axial_bins), numel(distance_lateral_bins_centers),numel(idx_sessions))+NaN; +axial_marginal=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; +axial_marginal_in_column=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; +axial_marginal_out_column=zeros(numel(idx_sessions),numel(distance_axial_bins))+NaN; + + +num_pairs=0; +for j=1:1:numel(idx_sessions) + ii= idx_sessions(j); + num_pairs=num_pairs+D(j).num_pairs; + switch flag_response + case 0 %all + current_map = D(ii).response_2d; + current_lateral = D(ii).response_lateral; + current_axial = D(ii).response_axial'; + current_axial_in_column = D(ii).response_axial_in_column'; + current_axial_out_column = D(ii).response_axial_out_column'; + case 1 %excitation + current_map = D(ii).response_2d_excitation; + current_lateral = D(ii).response_lateral_excitation; + current_axial = D(ii).response_axial_excitation'; + current_axial_in_column = D(ii).response_axial_in_column_excitation'; + current_axial_out_column = D(ii).response_axial_out_column_excitation'; + case 2 %inhibition + current_map = D(ii).response_2d_inhibition; + current_lateral = D(ii).response_lateral_inhibition; + current_axial = D(ii).response_axial_inhibition'; + current_axial_in_column = D(ii).response_axial_in_column_inhibition'; + current_axial_out_column = D(ii).response_axial_out_column_inhibition'; + case 3 %absolute + current_map = D(ii).response_2d_absolute; + current_lateral = D(ii).response_lateral_absolute; + current_axial = D(ii).response_axial_absolute'; + current_axial_in_column = D(ii).response_axial_in_column_absolute'; + current_axial_out_column = D(ii).response_axial_out_column_absolute'; + end + + % current_map_without_NaN = current_map; current_map_without_NaN(isnan(current_map))=0; + % current_axial_without_NaN = current_axial; current_axial_without_NaN(isnan(current_axial))=0; + + lateral_marginal(j,:) = current_lateral; + + + current_axial_bins = D(j).distance_axial_bins; + for i_d=1:1:numel(current_axial_bins) + idx_d=find(current_axial_bins(i_d)==distance_axial_bins); + % temp=~isnan(current_map(i_d,:)); + % session_counts(distance_axial_bins==current_axial_bins(i_d),:)= session_counts(distance_axial_bins==current_axial_bins(i_d),:)+temp; + if ~isempty(idx_d) + map(idx_d,:,j) = current_map(i_d,:); + axial_marginal(j,idx_d) = current_axial(i_d,:); + axial_marginal_in_column(j,idx_d) = current_axial_in_column(i_d,:); + axial_marginal_out_column(j,idx_d) = current_axial_out_column(i_d,:); + + end + end +end + +map=squeeze(nanmean(map,3)); + +if nargin<4 % if the scaling values were not provided as inputs + maxv=prctile(map(:),99); + minv=min([prctile(map(:),1),0]); +end + +%rescaling +map(map>=maxv)=maxv; +map(map<=minv)=minv; + +OUT.distance_lateral_bins_centers=distance_lateral_bins_centers; +OUT.maxv=maxv; +OUT.minv=minv; +OUT.num_pairs=num_pairs; + +OUT.map=map; %map averaged across sessions +OUT.map(2:5,:)=OUT.map; +OUT.marginal_lateral_mean=nanmean(lateral_marginal,1); +OUT.marginal_lateral_stem=nanstd(lateral_marginal,1)./sqrt(sum(~isnan(lateral_marginal))); + +OUT.marginal_axial_mean=nanmean(axial_marginal,1); +OUT.marginal_axial_stem=nanstd(axial_marginal,1)./sqrt(sum(~isnan(axial_marginal))); + +OUT.marginal_axial_in_column_mean=nanmean(axial_marginal_in_column,1); +OUT.marginal_axial_in_column_stem=nanstd(axial_marginal_in_column,1)./sqrt(sum(~isnan(axial_marginal_in_column))); + +OUT.marginal_axial_out_column_mean=nanmean(axial_marginal_out_column,1); +OUT.marginal_axial_out_column_stem=nanstd(axial_marginal_out_column,1)./sqrt(sum(~isnan(axial_marginal_out_column))); + + + + diff --git a/analysis/photostim/fn/fn_bin_data.m b/analysis/photostim/fn/fn_bin_data.m new file mode 100644 index 0000000..cde0440 --- /dev/null +++ b/analysis/photostim/fn/fn_bin_data.m @@ -0,0 +1,10 @@ +function [y_binned_mean, y_binned_stem]= fn_bin_data(x,y,bins) + +for i_b = 1:1:numel(bins)-1 + idx_cor_bin = x>=bins(i_b) & x0.1')) & k1; +end + + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>10')& k1); + DATA=fetch(rel_group_targets,'*'); + F_mean=[DATA.response_mean]'; + if flag_distance_flag==0 % lateral distance + distance=[DATA.response_distance_pixels]'; + distance=pix2dist*distance; + elseif flag_distance_flag==1 % axial distance + distance=[DATA.response_distance_axial_um]'; + elseif flag_distance_flag==2 % 3D distance + distance=[DATA.response_distance_3d_um]'; + end + + ix_excit= F_mean>0; + ix_inhbit= F_mean<0; + num_roi_bin_all =[]; + num_roi_bin_excit =[]; + num_roi_bin_inhibit =[]; + + for i_d=1:1:numel(distance_bins_microns)-1 + ix_d = distance>=distance_bins_microns(i_d) & distance0.1')) & k1; +end + + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>10')& k1); + DATA=fetch(rel_group_targets,'*'); + F_mean=[DATA.response_mean]'; + distance_lateral=[DATA.response_distance_pixels]'; + distance_lateral=pix2dist*distance_lateral; + distance_axial=[DATA.response_distance_axial_um]'; + + distance_axial_bins = unique(distance_axial); + + + ix_excit= F_mean>0; + ix_inhbit= F_mean<0; + num_roi_bin_all =[]; + num_roi_bin_excit =[]; + num_roi_bin_inhibit =[]; + + for i_l=1:1:numel(distance_lateral_bins)-1 + ix_l = distance_lateral>=distance_lateral_bins(i_l) & distance_lateral=0); +photostim_start_frame=photostim_start_frame((photostim_start_frame-num_frames_pre>0) & (photostim_start_frame+num_frames_post<=numel(f_trace))); +F=zeros(numel(photostim_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + F(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +% toc +num_trials_used = numel(photostim_start_frame); +idx_trials = 1:1:num_trials_used; + +% idx_1half_trials=idx_trials(1:1:(ceil(num_trials_used/2))); +% idx_2half_trials=idx_trials((ceil(num_trials_used/2)+1):1:end); +idx_odd_trials=idx_trials(1:2:end); +idx_even_trials=idx_trials(2:2:end); + + +%control sites +% tic +num_frames_pre = sum(time<0); +num_frames_post = sum(time>=0); +baseline_start_frame=baseline_start_frame((baseline_start_frame-num_frames_pre>0) & (baseline_start_frame+num_frames_post<=numel(f_trace))); +F_baseline=zeros(numel(baseline_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(baseline_start_frame) + s_fr = baseline_start_frame(i_stim); + F_baseline(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +F_baseline_mean = mean(F_baseline,1); +% toc + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +idx_not_response = 1:1:numel(time); +idx_not_response(idx_response) = []; + + +% idx_response=idx_response+1; + + +delta_trace_trials = single(F -F_baseline_mean); +delta_response_trials=single(mean(delta_trace_trials(:, idx_response(1):idx_response(2)),2)); + +F_response_trials = single(mean(F(:, idx_response(1):idx_response(2)),2)); +F_baseline_trials = single(mean(F_baseline(:, idx_response(1):idx_response(2)),2)); + + + +% delta_response_trials_1half = delta_response_trials(idx_1half_trials); +% delta_response_trials_2half = delta_response_trials(idx_2half_trials); +delta_response_trials_odd = delta_response_trials(idx_odd_trials); +delta_response_trials_even = delta_response_trials(idx_even_trials); + +StimStat.response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.non_response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); +StimStat.non_response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); + + + +%% Statistics, all trials +StimStat.response_mean = mean(delta_response_trials); +StimStat.response_max = max(delta_response_trials); +StimStat.response_min = min(delta_response_trials); +StimStat.response_std = std(delta_response_trials); +StimStat.response_mean_over_std = mean(delta_response_trials)/std(f_trace); +StimStat.response_stem= StimStat.response_std/sqrt(numel(delta_response_trials)); +StimStat.response_coefvar = StimStat.response_std/(StimStat.response_mean + eps); % coefficient of variation +StimStat.response_fanofactor= var(delta_response_trials)/(StimStat.response_mean + eps); % fano factor +% [~, StimStat.response_p_value,~, stats] = ttest2(baseline_trials,response_trials); +[~, StimStat.response_p_value1,~, stats] = ttest(delta_response_trials); +StimStat.response_tstat = stats.tstat; + + +[StimStat.response_p_value2] = ranksum(F_response_trials,F_baseline_trials); +[StimStat.response_p_value2_odd] = ranksum(F_response_trials(idx_odd_trials),F_baseline_trials); +[StimStat.response_p_value2_even] = ranksum(F_response_trials(idx_even_trials),F_baseline_trials); + + +% % Statistics 1st half of the trials +% StimStat.response_mean_1half = mean(delta_response_trials_1half); +% [~, StimStat.response_p_value1_1half] = ttest(delta_response_trials(idx_1half_trials)); +% % [~, StimStat.response_p_value2_1half] = ttest(delta_baseline_trials1(idx_1half_trials)); +% % [~, StimStat.response_p_value3_1half] = ttest(delta_baseline_trials2(idx_1half_trials)); +% +% % Statistics 2nd half of the trials +% StimStat.response_mean_2half = mean(delta_response_trials_2half); +% [~, StimStat.response_p_value1_2half] = ttest(delta_response_trials(idx_2half_trials)); +% % [~, StimStat.response_p_value2_2half] =ttest(delta_baseline_trials1(idx_2half_trials)); +% % [~, StimStat.response_p_value3_2half] = ttest(delta_baseline_trials2(idx_2half_trials)); + +% Statistics odd trials +StimStat.response_mean_odd = mean(delta_response_trials_odd); +StimStat.response_mean_over_std_odd = mean(delta_response_trials_odd)/std(f_trace); +[~, StimStat.response_p_value1_odd] = ttest(delta_response_trials(idx_odd_trials)); +% [~, StimStat.response_p_value2_odd] = ttest(delta_baseline_trials1(idx_odd_trials)); +% [~, StimStat.response_p_value3_odd] =ttest(delta_baseline_trials2(idx_odd_trials)); + +% Statistics even trials +StimStat.response_mean_even = mean(delta_response_trials_even); +StimStat.response_mean_over_std_even = mean(delta_response_trials_even)/std(f_trace); +[~, StimStat.response_p_value1_even] = ttest(delta_response_trials(idx_even_trials)); +% [~, StimStat.response_p_value2_even] = ttest(delta_baseline_trials1(idx_even_trials)); +% [~, StimStat.response_p_value3_even] = ttest(delta_baseline_trials2(idx_even_trials)); + + + +% StimTrace.F_trials = single(F); +StimTrace.response_trace_mean = single(mean(delta_trace_trials,1)); +% StimTrace.response_trace_stem = single(std(delta_trace_trials,1)./sqrt(size(delta_trace_trials,1))); +StimTrace.response_trace_mean_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)); +StimTrace.response_trace_mean_even = single(mean(delta_trace_trials(idx_even_trials,:),1)); + +% StimTrace.response_trace_mean_over_std = single(mean(delta_trace_trials,1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_even = single(mean(delta_trace_trials(idx_even_trials,:),1)/std(f_trace)); + +% StimTrace.baseline_trace_mean = single(F_baseline_mean); +% StimTrace.responseraw_trace_mean = single(mean(F,1)); + + + + + +% clf +% subplot(2,2,1:2) +% hold on +% plot([1:1:numel(f_trace)],f_trace,'-k'); +% % plot(baseline_start_frame,f_trace(baseline_start_frame),'.b') +% plot(photostim_start_frame,f_trace(photostim_start_frame),'or'); +% plot(photostim_start_frame+1,f_trace(photostim_start_frame+1),'og'); +% plot(photostim_start_frame+2,f_trace(photostim_start_frame+2),'ob'); +% plot(photostim_start_frame+3,f_trace(photostim_start_frame+2),'oy'); +% +% +% mean(f_trace(baseline_start_frame)); +% +% subplot(2,2,3) +% hold on +% plot(time, single(mean(delta_trace_trials,1))) +% +% subplot(2,2,4) +% hold on +% plot(time, F_baseline_mean,'-k') +% % plot(time, mean(F,1),'-g') +% plot(time, mean(F(idx_odd_trials,:),1),'-r') +% plot(time, mean(F(idx_even_trials,:),1),'-b') +% +% +% % if StimStat.response_p_value1_odd<=0.01 & (StimStat.response_min_oddStimStat.non_response_max_odd) +% if StimStat.response_p_value1_odd<=0.01 & StimStat.response_mean_odd>0 %& (StimStat.response_min_odd=0); +photostim_start_frame=photostim_start_frame((photostim_start_frame-num_frames_pre>0) & (photostim_start_frame+num_frames_post<=numel(f_trace))); +F=zeros(numel(photostim_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + F(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +% toc +num_trials_used = numel(photostim_start_frame); +idx_trials = 1:1:num_trials_used; + +% idx_1half_trials=idx_trials(1:1:(ceil(num_trials_used/2))); +% idx_2half_trials=idx_trials((ceil(num_trials_used/2)+1):1:end); +idx_odd_trials=idx_trials(1:2:end); +idx_even_trials=idx_trials(2:2:end); + + +%control sites +% tic +num_frames_pre = sum(time<0); +num_frames_post = sum(time>=0); +baseline_start_frame=baseline_start_frame((baseline_start_frame-num_frames_pre>0) & (baseline_start_frame+num_frames_post<=numel(f_trace))); +F_baseline=zeros(numel(baseline_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(baseline_start_frame) + s_fr = baseline_start_frame(i_stim); + F_baseline(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +F_baseline_mean = mean(F_baseline,1); +% toc + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +idx_not_response = 1:1:numel(time); +idx_not_response(idx_response) = []; + + +% idx_response=idx_response+1; + + +delta_trace_trials = single(F -F_baseline_mean); +delta_response_trials=single(mean(delta_trace_trials(:, idx_response(1):idx_response(2)),2)); + +F_response_trials = single(mean(F(:, idx_response(1):idx_response(2)),2)); +F_baseline_trials = single(mean(F_baseline(:, idx_response(1):idx_response(2)),2)); + + + +% delta_response_trials_1half = delta_response_trials(idx_1half_trials); +% delta_response_trials_2half = delta_response_trials(idx_2half_trials); +delta_response_trials_odd = delta_response_trials(idx_odd_trials); +delta_response_trials_even = delta_response_trials(idx_even_trials); + +StimStat.response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.non_response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); +StimStat.non_response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); + + + +%% Statistics, all trials +StimStat.response_mean = mean(delta_response_trials); +StimStat.response_max = max(delta_response_trials); +StimStat.response_min = min(delta_response_trials); +StimStat.response_std = std(delta_response_trials); +StimStat.response_mean_over_std = mean(delta_response_trials)/std(f_trace); +StimStat.response_stem= StimStat.response_std/sqrt(numel(delta_response_trials)); +StimStat.response_coefvar = StimStat.response_std/(StimStat.response_mean + eps); % coefficient of variation +StimStat.response_fanofactor= var(delta_response_trials)/(StimStat.response_mean + eps); % fano factor +% [~, StimStat.response_p_value,~, stats] = ttest2(baseline_trials,response_trials); +[~, StimStat.response_p_value1,~, stats] = ttest(delta_response_trials); +StimStat.response_tstat = stats.tstat; + + +[StimStat.response_p_value2] = ranksum(F_response_trials,F_baseline_trials); +[StimStat.response_p_value2_odd] = ranksum(F_response_trials(idx_odd_trials),F_baseline_trials); +[StimStat.response_p_value2_even] = ranksum(F_response_trials(idx_even_trials),F_baseline_trials); + + +% % Statistics 1st half of the trials +% StimStat.response_mean_1half = mean(delta_response_trials_1half); +% [~, StimStat.response_p_value1_1half] = ttest(delta_response_trials(idx_1half_trials)); +% % [~, StimStat.response_p_value2_1half] = ttest(delta_baseline_trials1(idx_1half_trials)); +% % [~, StimStat.response_p_value3_1half] = ttest(delta_baseline_trials2(idx_1half_trials)); +% +% % Statistics 2nd half of the trials +% StimStat.response_mean_2half = mean(delta_response_trials_2half); +% [~, StimStat.response_p_value1_2half] = ttest(delta_response_trials(idx_2half_trials)); +% % [~, StimStat.response_p_value2_2half] =ttest(delta_baseline_trials1(idx_2half_trials)); +% % [~, StimStat.response_p_value3_2half] = ttest(delta_baseline_trials2(idx_2half_trials)); + +% Statistics odd trials +StimStat.response_mean_odd = mean(delta_response_trials_odd); +StimStat.response_mean_over_std_odd = mean(delta_response_trials_odd)/std(f_trace); +[~, StimStat.response_p_value1_odd] = ttest(delta_response_trials(idx_odd_trials)); +% [~, StimStat.response_p_value2_odd] = ttest(delta_baseline_trials1(idx_odd_trials)); +% [~, StimStat.response_p_value3_odd] =ttest(delta_baseline_trials2(idx_odd_trials)); + +% Statistics even trials +StimStat.response_mean_even = mean(delta_response_trials_even); +StimStat.response_mean_over_std_even = mean(delta_response_trials_even)/std(f_trace); +[~, StimStat.response_p_value1_even] = ttest(delta_response_trials(idx_even_trials)); +% [~, StimStat.response_p_value2_even] = ttest(delta_baseline_trials1(idx_even_trials)); +% [~, StimStat.response_p_value3_even] = ttest(delta_baseline_trials2(idx_even_trials)); + + + +% StimTrace.F_trials = single(F); +StimTrace.response_trace_mean = single(mean(delta_trace_trials,1)); +% StimTrace.response_trace_stem = single(std(delta_trace_trials,1)./sqrt(size(delta_trace_trials,1))); +StimTrace.response_trace_mean_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)); +StimTrace.response_trace_mean_even = single(mean(delta_trace_trials(idx_even_trials,:),1)); + +% StimTrace.response_trace_mean_over_std = single(mean(delta_trace_trials,1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_even = single(mean(delta_trace_trials(idx_even_trials,:),1)/std(f_trace)); + +% StimTrace.baseline_trace_mean = single(F_baseline_mean); +% StimTrace.responseraw_trace_mean = single(mean(F,1)); + + + + + +% clf +% subplot(2,2,1:2) +% hold on +% plot([1:1:numel(f_trace)],f_trace,'-k'); +% % plot(baseline_start_frame,f_trace(baseline_start_frame),'.b') +% % plot(photostim_start_frame,f_trace(photostim_start_frame),'or'); +% plot(photostim_start_frame+1,f_trace(photostim_start_frame+1),'og'); +% plot(photostim_start_frame+2,f_trace(photostim_start_frame+2),'ob'); +% % plot(photostim_start_frame+3,f_trace(photostim_start_frame+3),'oy'); +% +% +% mean(f_trace(baseline_start_frame)); +% +% subplot(2,2,3) +% hold on +% plot(time, single(mean(delta_trace_trials,1))) +% +% subplot(2,2,4) +% hold on +% plot(time, F_baseline_mean,'-k') +% % plot(time, mean(F,1),'-g') +% plot(time, mean(F(idx_odd_trials,:),1),'-r') +% plot(time, mean(F(idx_even_trials,:),1),'-b') +% +% +% % if StimStat.response_p_value1_odd<=0.01 & (StimStat.response_min_oddStimStat.non_response_max_odd) +% if StimStat.response_p_value1_odd<=0.01 & StimStat.response_mean_odd>0 %& StimStat.response_p_value1<0.01 %& (StimStat.response_min_odd=0); +photostim_start_frame=photostim_start_frame((photostim_start_frame-num_frames_pre>0) & (photostim_start_frame+num_frames_post<=numel(f_trace))); +F=zeros(numel(photostim_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + F(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +% toc +num_trials_used = numel(photostim_start_frame); +idx_trials = 1:1:num_trials_used; + +% idx_1half_trials=idx_trials(1:1:(ceil(num_trials_used/2))); +% idx_2half_trials=idx_trials((ceil(num_trials_used/2)+1):1:end); +idx_odd_trials=idx_trials(1:2:end); +idx_even_trials=idx_trials(2:2:end); + + +%control sites +% tic +num_frames_pre = sum(time<0); +num_frames_post = sum(time>=0); +baseline_start_frame=baseline_start_frame((baseline_start_frame-num_frames_pre>0) & (baseline_start_frame+num_frames_post<=numel(f_trace))); +F_baseline=zeros(numel(baseline_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(baseline_start_frame) + s_fr = baseline_start_frame(i_stim); + F_baseline(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +F_baseline_mean = mean(F_baseline,1); +% toc + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +% idx_not_response = 1:1:numel(time); +% idx_not_response(idx_response) = []; + + +% idx_response=idx_response+1; + + +delta_trace_trials = single(F -F_baseline_mean); +delta_response_trials=single(mean(delta_trace_trials(:, idx_response(1):idx_response(2)),2)); + +% F_response_trials = single(mean(F(:, idx_response(1):idx_response(2)),2)); +% F_baseline_trials = single(mean(F_baseline(:, idx_response(1):idx_response(2)),2)); + + + +% delta_response_trials_1half = delta_response_trials(idx_1half_trials); +% delta_response_trials_2half = delta_response_trials(idx_2half_trials); +delta_response_trials_odd = delta_response_trials(idx_odd_trials); +delta_response_trials_even = delta_response_trials(idx_even_trials); + +% StimStat.response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +% StimStat.response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +% StimStat.non_response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); +% StimStat.non_response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); + + + +%% Statistics, all trials +StimStat.response_mean = mean(delta_response_trials); +StimStat.response_max = max(delta_response_trials); +StimStat.response_min = min(delta_response_trials); +StimStat.response_std = std(delta_response_trials); +StimStat.response_mean_over_std = mean(delta_response_trials)/std(f_trace); +StimStat.response_stem= StimStat.response_std/sqrt(numel(delta_response_trials)); +StimStat.response_coefvar = StimStat.response_std/(StimStat.response_mean + eps); % coefficient of variation +StimStat.response_fanofactor= var(delta_response_trials)/(StimStat.response_mean + eps); % fano factor +% [~, StimStat.response_p_value,~, stats] = ttest2(baseline_trials,response_trials); +[~, StimStat.response_p_value1,~, stats] = ttest(delta_response_trials); +StimStat.response_tstat = stats.tstat; + + +% [StimStat.response_p_value2] = ranksum(F_response_trials,F_baseline_trials); +% [StimStat.response_p_value2_odd] = ranksum(F_response_trials(idx_odd_trials),F_baseline_trials); +% [StimStat.response_p_value2_even] = ranksum(F_response_trials(idx_even_trials),F_baseline_trials); + + +% % Statistics 1st half of the trials +% StimStat.response_mean_1half = mean(delta_response_trials_1half); +% [~, StimStat.response_p_value1_1half] = ttest(delta_response_trials(idx_1half_trials)); +% % [~, StimStat.response_p_value2_1half] = ttest(delta_baseline_trials1(idx_1half_trials)); +% % [~, StimStat.response_p_value3_1half] = ttest(delta_baseline_trials2(idx_1half_trials)); +% +% % Statistics 2nd half of the trials +% StimStat.response_mean_2half = mean(delta_response_trials_2half); +% [~, StimStat.response_p_value1_2half] = ttest(delta_response_trials(idx_2half_trials)); +% % [~, StimStat.response_p_value2_2half] =ttest(delta_baseline_trials1(idx_2half_trials)); +% % [~, StimStat.response_p_value3_2half] = ttest(delta_baseline_trials2(idx_2half_trials)); + +% Statistics odd trials +StimStat.response_mean_odd = mean(delta_response_trials_odd); +StimStat.response_mean_over_std_odd = mean(delta_response_trials_odd)/std(f_trace); +[~, StimStat.response_p_value1_odd] = ttest(delta_response_trials(idx_odd_trials)); +% [~, StimStat.response_p_value2_odd] = ttest(delta_baseline_trials1(idx_odd_trials)); +% [~, StimStat.response_p_value3_odd] =ttest(delta_baseline_trials2(idx_odd_trials)); + +% Statistics even trials +StimStat.response_mean_even = mean(delta_response_trials_even); +StimStat.response_mean_over_std_even = mean(delta_response_trials_even)/std(f_trace); +[~, StimStat.response_p_value1_even] = ttest(delta_response_trials(idx_even_trials)); +% [~, StimStat.response_p_value2_even] = ttest(delta_baseline_trials1(idx_even_trials)); +% [~, StimStat.response_p_value3_even] = ttest(delta_baseline_trials2(idx_even_trials)); + + + +% % StimTrace.F_trials = single(F); +% StimTrace.response_trace_mean = single(mean(delta_trace_trials,1)); +% % StimTrace.response_trace_stem = single(std(delta_trace_trials,1)./sqrt(size(delta_trace_trials,1))); +% StimTrace.response_trace_mean_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)); +% StimTrace.response_trace_mean_even = single(mean(delta_trace_trials(idx_even_trials,:),1)); + +% StimTrace.response_trace_mean_over_std = single(mean(delta_trace_trials,1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_even = single(mean(delta_trace_trials(idx_even_trials,:),1)/std(f_trace)); + +% StimTrace.baseline_trace_mean = single(F_baseline_mean); +% StimTrace.responseraw_trace_mean = single(mean(F,1)); + + + + + +% clf +% subplot(2,2,1:2) +% hold on +% plot([1:1:numel(f_trace)],f_trace,'-k'); +% % plot(baseline_start_frame,f_trace(baseline_start_frame),'.b') +% % plot(photostim_start_frame,f_trace(photostim_start_frame),'or'); +% plot(photostim_start_frame+1,f_trace(photostim_start_frame+1),'og'); +% plot(photostim_start_frame+2,f_trace(photostim_start_frame+2),'ob'); +% % plot(photostim_start_frame+3,f_trace(photostim_start_frame+3),'oy'); +% +% +% mean(f_trace(baseline_start_frame)); +% +% subplot(2,2,3) +% hold on +% plot(time, single(mean(delta_trace_trials,1))) +% +% subplot(2,2,4) +% hold on +% plot(time, F_baseline_mean,'-k') +% % plot(time, mean(F,1),'-g') +% plot(time, mean(F(idx_odd_trials,:),1),'-r') +% plot(time, mean(F(idx_even_trials,:),1),'-b') +% +% +% % if StimStat.response_p_value1_odd<=0.01 & (StimStat.response_min_oddStimStat.non_response_max_odd) +% if StimStat.response_p_value1_odd<=0.01 & StimStat.response_mean_odd>0 %& StimStat.response_p_value1<0.01 %& (StimStat.response_min_odd=0); +photostim_start_frame=photostim_start_frame((photostim_start_frame-num_frames_pre>0) & (photostim_start_frame+num_frames_post<=numel(f_trace))); +F=zeros(numel(photostim_start_frame),(num_frames_pre+num_frames_post)); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + F(i_stim,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); +end +% toc +num_trials_used = numel(photostim_start_frame); +idx_trials = 1:1:num_trials_used; + +% idx_1half_trials=idx_trials(1:1:(ceil(num_trials_used/2))); +% idx_2half_trials=idx_trials((ceil(num_trials_used/2)+1):1:end); +idx_odd_trials=idx_trials(1:2:end); +idx_even_trials=idx_trials(2:2:end); + + + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +idx_not_response = 1:1:numel(time); +idx_not_response(idx_response) = []; + + +% idx_response=idx_response+1; + + +delta_trace_trials = single(F -baseline_fixed); +delta_response_trials=single(mean(delta_trace_trials(:, idx_response(1):idx_response(2)),2)); + + +% delta_response_trials_1half = delta_response_trials(idx_1half_trials); +% delta_response_trials_2half = delta_response_trials(idx_2half_trials); +delta_response_trials_odd = delta_response_trials(idx_odd_trials); +delta_response_trials_even = delta_response_trials(idx_even_trials); + +StimStat.response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_response),1)); +StimStat.non_response_min_odd = min(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); +StimStat.non_response_max_odd = max(mean(delta_trace_trials(idx_odd_trials,idx_not_response),1)); + + + +%% Statistics, all trials +StimStat.response_mean = mean(delta_response_trials); +StimStat.response_max = max(delta_response_trials); +StimStat.response_min = min(delta_response_trials); +StimStat.response_std = std(delta_response_trials); +StimStat.response_mean_over_std = mean(delta_response_trials)/std(f_trace); +StimStat.response_stem= StimStat.response_std/sqrt(numel(delta_response_trials)); +StimStat.response_coefvar = StimStat.response_std/(StimStat.response_mean + eps); % coefficient of variation +StimStat.response_fanofactor= var(delta_response_trials)/(StimStat.response_mean + eps); % fano factor +% [~, StimStat.response_p_value,~, stats] = ttest2(baseline_trials,response_trials); +[~, StimStat.response_p_value1,~, stats] = ttest(delta_response_trials); +StimStat.response_tstat = stats.tstat; + + +% [StimStat.response_p_value2] = ranksum(F_response_trials,F_baseline_trials); +% [StimStat.response_p_value2_odd] = ranksum(F_response_trials(idx_odd_trials),F_baseline_trials); +% [StimStat.response_p_value2_even] = ranksum(F_response_trials(idx_even_trials),F_baseline_trials); + + +% % Statistics 1st half of the trials +% StimStat.response_mean_1half = mean(delta_response_trials_1half); +% [~, StimStat.response_p_value1_1half] = ttest(delta_response_trials(idx_1half_trials)); +% % [~, StimStat.response_p_value2_1half] = ttest(delta_baseline_trials1(idx_1half_trials)); +% % [~, StimStat.response_p_value3_1half] = ttest(delta_baseline_trials2(idx_1half_trials)); +% +% % Statistics 2nd half of the trials +% StimStat.response_mean_2half = mean(delta_response_trials_2half); +% [~, StimStat.response_p_value1_2half] = ttest(delta_response_trials(idx_2half_trials)); +% % [~, StimStat.response_p_value2_2half] =ttest(delta_baseline_trials1(idx_2half_trials)); +% % [~, StimStat.response_p_value3_2half] = ttest(delta_baseline_trials2(idx_2half_trials)); + +% Statistics odd trials +StimStat.response_mean_odd = mean(delta_response_trials_odd); +StimStat.response_mean_over_std_odd = mean(delta_response_trials_odd)/std(f_trace); +[~, StimStat.response_p_value1_odd] = ttest(delta_response_trials(idx_odd_trials)); +% [~, StimStat.response_p_value2_odd] = ttest(delta_baseline_trials1(idx_odd_trials)); +% [~, StimStat.response_p_value3_odd] =ttest(delta_baseline_trials2(idx_odd_trials)); + +% Statistics even trials +StimStat.response_mean_even = mean(delta_response_trials_even); +StimStat.response_mean_over_std_even = mean(delta_response_trials_even)/std(f_trace); +[~, StimStat.response_p_value1_even] = ttest(delta_response_trials(idx_even_trials)); +% [~, StimStat.response_p_value2_even] = ttest(delta_baseline_trials1(idx_even_trials)); +% [~, StimStat.response_p_value3_even] = ttest(delta_baseline_trials2(idx_even_trials)); + + + +% StimTrace.F_trials = single(F); +StimTrace.response_trace_mean = single(mean(delta_trace_trials,1)); +% StimTrace.response_trace_stem = single(std(delta_trace_trials,1)./sqrt(size(delta_trace_trials,1))); +StimTrace.response_trace_mean_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)); +StimTrace.response_trace_mean_even = single(mean(delta_trace_trials(idx_even_trials,:),1)); + +% StimTrace.response_trace_mean_over_std = single(mean(delta_trace_trials,1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_odd = single(mean(delta_trace_trials(idx_odd_trials,:),1)/std(f_trace)); +% StimTrace.response_trace_mean_over_std_even = single(mean(delta_trace_trials(idx_even_trials,:),1)/std(f_trace)); + +% StimTrace.baseline_trace_mean = single(F_baseline_mean); +% StimTrace.responseraw_trace_mean = single(mean(F,1)); + + + + +% +% clf +% subplot(2,2,1:2) +% hold on +% plot([1:1:numel(f_trace)],f_trace,'-k'); +% % plot(baseline_start_frame,f_trace(baseline_start_frame),'.b') +% % plot(photostim_start_frame,f_trace(photostim_start_frame),'or'); +% plot(photostim_start_frame+1,f_trace(photostim_start_frame+1),'og'); +% plot(photostim_start_frame+2,f_trace(photostim_start_frame+2),'ob'); +% % plot(photostim_start_frame+3,f_trace(photostim_start_frame+3),'oy'); +% +% +% +% subplot(2,2,3) +% hold on +% plot(time, single(mean(delta_trace_trials,1))) +% +% subplot(2,2,4) +% hold on +% plot(time, 0,'-k') +% plot(time, mean(delta_trace_trials(idx_odd_trials,:),1),'-r') +% plot(time, mean(delta_trace_trials(idx_even_trials,:),1),'-b') +% +% % if StimStat.response_p_value1_odd<=0.01 & (StimStat.response_min_oddStimStat.non_response_max_odd) +% if StimStat.response_p_value1_odd<=0.05 & StimStat.response_mean_odd>0 %& StimStat.response_p_value1<0.01 %& (StimStat.response_min_odd0); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + if (s_fr-num_frames_pre)>0 && (s_fr+num_frames_post)<=length(f_trace) % if the time window is within the full trace + counter = counter+1; + F(counter,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); + end +end +idx_include=1:1:counter; +idx_1half_trials=idx_include(1:1:(ceil(counter/2))); +idx_2half_trials=idx_include((ceil(counter/2)+1):1:end); +idx_odd_trials=idx_include(1:2:end); +idx_even_trials=idx_include(2:2:end); + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +idx_baseline1(1)=find(time0); +for i_stim=1:1:numel(photostim_start_frame) + s_fr = photostim_start_frame(i_stim); + if (s_fr-num_frames_pre)>0 && (s_fr+num_frames_post)<=length(f_trace) % if the time window is within the full trace + counter = counter+1; + F(counter,:)=f_trace(s_fr- num_frames_pre :1:s_fr+num_frames_post-1); + end +end +idx_include=1:1:counter; +idx_1half_trials=idx_include(1:1:(ceil(counter/2))); +idx_2half_trials=idx_include((ceil(counter/2)+1):1:end); +idx_odd_trials=idx_include(1:2:end); +idx_even_trials=idx_include(2:2:end); + + +idx_response(1)=find(time>(timewind_response(1)),1,'first'); +idx_response(2)=find(time<=(timewind_response(2)),1,'last'); + +idx_baseline1(1)=find(time<=timewind_baseline1(1),1,'last'); +idx_baseline1(2)=find(time=30'; +rel_shuffled = STIMANAL.InfluenceVsCorrTraceBehavShuffled & 'session_epoch_number<3' & 'num_targets>=30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0,1,3]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges); + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges); + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Noise Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Noise Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); +end diff --git a/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavResidual_old.m b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavResidual_old.m new file mode 100644 index 0000000..f59c9d9 --- /dev/null +++ b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavResidual_old.m @@ -0,0 +1,77 @@ +function PLOT_InfluenceVsCorrTraceBehavResidual_old() +% close all +clf; +rel_data = STIMANAL.InfluenceVsCorrTraceBehavResidual & 'session_epoch_number<3' & 'num_targets>=30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + + + +% num_svd_components_removed_vector_corr =[0,1,3,5]; +num_svd_components_removed_vector_corr =[0]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + + + + bins_corr_edges = DATA.bins_corr_edges(1,:); + if bins_corr_edges(1)==-inf + bins_corr_edges(1)=bins_corr_edges(2) - (bins_corr_edges(3) - bins_corr_edges(2)); + end + if bins_corr_edges(end)==inf + bins_corr_edges(end)=bins_corr_edges(end-1) + (bins_corr_edges(end-2) - bins_corr_edges(end-3)); + end + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + + bins_influence_edges = DATA.bins_influence_edges(1,:); + if bins_influence_edges(1)==-inf + bins_influence_edges(1)=bins_influence_edges(2) - (bins_influence_edges(3) - bins_influence_edges(2)); + end + if bins_influence_edges(end)==inf + bins_influence_edges(end)=bins_influence_edges(end-1) + (bins_influence_edges(end-2) - bins_influence_edges(end-3)); + end + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (\Delta Activity)'); + ylabel('Residual Correlation'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Correlation'); + ylabel ('Influence (\Delta Activity)'); + box off + +end diff --git a/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavShuffledDiff.m b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavShuffledDiff.m new file mode 100644 index 0000000..4342b49 --- /dev/null +++ b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceBehavShuffledDiff.m @@ -0,0 +1,60 @@ +function PLOT_InfluenceVsCorrTraceBehavShuffledDiff() +close all + +rel_data = STIMANAL.InfluenceVsCorrTraceBehav2 & 'session_epoch_number<3' & 'num_targets>=30'; +rel_shuffled = STIMANAL.InfluenceVsCorrTraceBehavShuffled2 & 'session_epoch_number<3' & 'num_targets>=30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + + + +num_svd_components_removed_vector_corr =[0,1,3]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Noise Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end diff --git a/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpont.m b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpont.m new file mode 100644 index 0000000..0069551 --- /dev/null +++ b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpont.m @@ -0,0 +1,71 @@ +function PLOT_InfluenceVsCorrTraceSpont() +close all + +rel_data = STIMANAL.InfluenceVsCorrTraceSpont& 'session_epoch_number<3' & 'num_targets>=30'; +rel_shuffled = STIMANAL.InfluenceVsCorrTraceSpontShuffled & 'session_epoch_number<3' & 'num_targets>=30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +k.response_p_val=1; + + + +num_svd_components_removed_vector_corr = [0,1,5]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key & k,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges); + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges); + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + y=DATA.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Noise Correlation, r'); + title('Observed'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+1) + y=DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Noise Correlation, r'); + title(' Shuffled influence, within the same lateral-axial distance'); + + + + idx_subplot = 0; + subplot(2,2,idx_subplot+2) + y=DATA.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); + + idx_subplot = 2; + subplot(2,2,idx_subplot+2) + y=DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA_SHUFFLED,1)); + hold on + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'.','Color',colormap(i_c,:)}) + xlabel('Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); +end diff --git a/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpontShuffledDiff.m b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpontShuffledDiff.m new file mode 100644 index 0000000..0fedec9 --- /dev/null +++ b/analysis/photostim/old/PLOT_InfluenceVsCorrTraceSpontShuffledDiff.m @@ -0,0 +1,60 @@ +function PLOT_InfluenceVsCorrTraceSpontShuffledDiff() +close all + +rel_data = STIMANAL.InfluenceVsCorrTraceSpont & 'session_epoch_number<3' & 'num_targets>=30'; +rel_shuffled = STIMANAL.InfluenceVsCorrTraceSpontShuffled & 'session_epoch_number<3' & 'num_targets>=30'; +% rel_data = STIMANAL.InfluenceVsCorr & 'session_epoch_number<3'; +% rel_shuffled = STIMANAL.InfluenceVsCorrShuffled & 'session_epoch_number<3'; +key.neurons_or_control=1; +key.response_p_val=1; + + + +num_svd_components_removed_vector_corr =[0,1,3]; +colormap=viridis(numel(num_svd_components_removed_vector_corr)); + +for i_c = 1:1:numel(num_svd_components_removed_vector_corr) + key.num_svd_components_removed_corr=num_svd_components_removed_vector_corr(i_c); + num_comp = num_svd_components_removed_vector_corr(i_c); + DATA=struct2table(fetch(rel_data & key,'*')); + DATA_SHUFFLED=struct2table(fetch(rel_shuffled & key,'*')); + + bins_corr_edges = DATA.bins_corr_edges(1,:); + bins_corr_centers = bins_corr_edges(1:1:end-1) + diff(bins_corr_edges)/2; + + bins_influence_edges = DATA.bins_influence_edges(1,:); + bins_influence_centers = bins_influence_edges(1:1:end-1) + diff(bins_influence_edges)/2; + + + idx_subplot = 0; + subplot(2,2,idx_subplot+1) + hold on + y=DATA.corr_binned_by_influence - DATA_SHUFFLED.corr_binned_by_influence; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_influence_centers(1),bins_influence_centers(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + end + shadedErrorBar(bins_influence_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel ('Influence (delta zscore)'); + ylabel('Residual Noise Correlation, r'); + box off + xlim([bins_influence_edges(1), bins_influence_edges(end)]); + + subplot(2,2,idx_subplot+2) + hold on + y=DATA.influence_binned_by_corr - DATA_SHUFFLED.influence_binned_by_corr; + y_mean = nanmean(y,1); + y_stem = nanstd(y,1)./sqrt(size(DATA,1)); + if i_c ==1 + plot([bins_corr_edges(1),bins_corr_edges(end)],[0,0],'-k'); + plot([0,0],[min(y_mean-y_stem),max(y_mean+y_stem)],'-k'); + xlim([bins_corr_edges(1), bins_corr_edges(end)]); + end + shadedErrorBar(bins_corr_centers,y_mean,y_stem,'lineprops',{'-','Color',colormap(i_c,:)}) + xlabel('Residual Noise Correlation, r'); + ylabel ('Influence (delta zscore)'); + box off + +end diff --git a/analysis/photostim/photostim_allpairs_distance_binning.m b/analysis/photostim/photostim_allpairs_distance_binning.m new file mode 100644 index 0000000..5162dea --- /dev/null +++ b/analysis/photostim/photostim_allpairs_distance_binning.m @@ -0,0 +1,239 @@ +function photostim_allpairs_distance_binning() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +close all; +% frame_window_short=[40,40]; +% frame_window_long=[100,100]; + + + +% +% key.subject_id = 447990; +% key.session =8; + +% key.subject_id = 445980; +% key.session =5; +% key.subject_id = 445873; +% key.session =5; +% key.subject_id = 462458; +% key.session =3; + +key.subject_id = 463195; +key.session =2; + +neurons_or_control_flag =0; % 0 neurons, 1 control sites +flag_distance_flag = 0; % 0 lateral distance; 1 axial distance; 3d distance + +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +epoch_list=epoch_list(1:1:3); + +% epoch_list = [1]; +% rel=STIM.ROIResponse3 & 'response_p_value<=0.02'; +rel=STIM.ROIResponse & 'response_p_value<=0.05'; + +flag_baseline_trial_or_avg = 0; + +smooth_bins=1; %10 + +zoom =fetch1(IMG.FOVEpoch & key,'zoom','LIMIT 1'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x','LIMIT 1') / fetch1(IMG.FOV & key, 'fov_x_size','LIMIT 1'); + + +kkkk.session_epoch_number=epoch_list(end); +frame_rate= fetch1(IMG.FOVEpoch & key & kkkk, 'imaging_frame_rate'); +timewind_stim=[0.25,1.5]; + +timewind_baseline = [-15,-5]; +time = [-30: (1/frame_rate): 10]; + +xlims = [-5, 10]; +ylims = [-0.1,0.4]; + +% distance_bins_microns = [0,25,50,75,100,125,150,200,500]; +% distance_bins_microns = [0,25,50,75,100,125,175,250,500]; +% distance_bins_microns = [0,25,50,75,100,150,300,600]; +% distance_bins_microns = [0,25,50,75,150,300,500]; +% distance_bins_microns = [0,30,60,90,120,200,300,400,500,600]; +distance_bins_microns = [0:25:100,150,200:100:500]; +% distance_bins_microns = [0,25:25:275,300,400,500,600]; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.04; +panel_height=0.06; +horizontal_distance=0.07; +vertical_distance=0.25; +position_x(1)=0.07; + +position_y(1)=0.85; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['distance_binned_session_' num2str(key.session) '_' session_date ]; +if flag_distance_flag==0 % lateral distance + distance_type_name = 'lateral'; +elseif flag_distance_flag==1 % axial distance (depth) + distance_type_name = 'axial'; +elseif flag_distance_flag==2 % 3D distance in a volume + distance_type_name = '3D'; +end +filename = [filename distance_type_name]; + + + + +% rel=(IMG.PhotostimGroupROI & STIM.ROIResponseDirect & key & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.25'); +% G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>17.25','*'); + + +line_color=copper(numel(epoch_list)); +% time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_epoch=1:1:numel(epoch_list) + k1=key; + k1.session_epoch_number = epoch_list(i_epoch); + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<10')& k1); +if neurons_or_control_flag == 0 +% rel_group_targets=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & (STIM.ROIResponseDirect &'response_p_value<0.01'))& k1); + rel_group_targets = rel & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & k1 & 'response_p_value<=0.001')) & k1; + + elseif neurons_or_control_flag == 1 + rel_group_targets = rel & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & k1 & 'response_p_value>0.1')) & k1; +end + + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>10')& k1); + + DATA=fetch(rel_group_targets,'*'); + + F=zeros(size(DATA,1),212); + F_mean=zeros(size(DATA)); + + parfor i_r=1:1:numel(DATA) + i_r + k2=DATA(i_r,:); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k2,'photostim_start_frame'); + f_trace = fetch1(IMG.ROITrace & k2,'f_trace'); + global_baseline=mean( f_trace); + + [StimStat,StimTrace] = fn_compute_photostim_response (f_trace, photostim_start_frame, timewind_stim, timewind_baseline, flag_baseline_trial_or_avg,global_baseline, time); + + % [StimStat,StimTrace] = fn_compute_photostim_response (f_trace , photostim_start_frame, frame_window_short,frame_window_long, flag_baseline_trial_or_avg, global_baseline, time); + F(i_r,:)=StimTrace.dFoverF_mean; + F_mean(i_r)=StimStat.Fstim_mean; + + end + + if flag_distance_flag==0 % lateral distance + distance=[DATA.response_distance_pixels]'; + distance=pix2dist*distance; + elseif flag_distance_flag==1 % axial distance + distance=[DATA.response_distance_axial_um]'; + elseif flag_distance_flag==2 % 3D distance + distance=[DATA.response_distance_3d_um]'; + end + + ix_excit= F_mean>=0; + ix_inhbit= F_mean<0; + num_roi_bin_all =[]; + num_roi_bin_excit =[]; + num_roi_bin_inhibit =[]; + + for i_d=1:1:numel(distance_bins_microns)-1 + ix_d = distance>=distance_bins_microns(i_d) & distance0 + % Positive + axes('position',[position_x(i_d), position_y(i_epoch), panel_width, panel_height]); + y_m = trace_mean_by_distance_all(i_d,:); + % y_smooth= y_m; + y_smooth= movmean(y_m,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + position_x(end+1)=position_x(end) +horizontal_distance; + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % max_epoch(i_d)=max(y_smooth); + % min_epoch(i_d)=min(y_smooth); + % ylims = [ min([-0.05, floor(10*min_epoch(i_d))/10]), max([0.1, ceil(10*max_epoch(i_d))/10])]; + title(sprintf('[%d %d] um\n %d cells',distance_bins_microns(i_d),distance_bins_microns(i_d+1),num_roi_bin_all(i_d)),'FontSize',10); + + set(gca, 'YLim',ylims,'YTick', []) + if i_d==1 + % xlabel(' Time(s)'); + ylabel('\Delta F/F'); + set(gca,'YLim',ylims,'YTick', [0, ylims(2)],'YTickLabels',[0, ylims(2)]); + end + set(gca,'FontSize',10, 'Xlim', xlims, 'XTick', [xlims(1),0,xlims(2)]); + % end + + % if num_roi_bin_inhibit(i_d)>0 + % Negative + axes('position',[position_x(i_d), position_y(i_epoch)-0.1, panel_width, panel_height]); + y_m = trace_mean_by_distance_inhibit(i_d,:); + % y_smooth= y_m; + y_smooth= movmean(y_m,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % max_epoch(i_d)=max(y_smooth); + % min_epoch(i_d)=min(y_smooth); + % ylims = [ min([-0.05, floor(10*min_epoch(i_d))/10]), max([0.1, ceil(10*max_epoch(i_d))/10])]; + title(sprintf('%d cells',num_roi_bin_inhibit(i_d)),'FontSize',10); + + set(gca, 'YLim',ylims,'YTick', []) + if i_d==1 + xlabel(' Time (s)'); + ylabel('\Delta F/F'); + text(-20,diff(ylims)/2,' Inhibition','Rotation',90); + set(gca,'YLim',ylims,'YTick', [0, ylims(2)],'YTickLabels',[0, ylims(2)]); + + end + set(gca,'FontSize',10, 'Xlim', xlims, 'XTick', [xlims(1),0,xlims(2)]); + % end + + position_x(end+1)=position_x(end) +horizontal_distance; + + end + + + + % hold on; + % plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % + % + % xlabel('Time (s)'); + % ylabel('\Delta F/F'); + % + position_y(end+1)=position_y(end) -vertical_distance; + + +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); diff --git a/analysis/photostim/photostim_allpairs_distance_binning_mean.m b/analysis/photostim/photostim_allpairs_distance_binning_mean.m new file mode 100644 index 0000000..37b106d --- /dev/null +++ b/analysis/photostim/photostim_allpairs_distance_binning_mean.m @@ -0,0 +1,149 @@ +function photostim_allpairs_distance_binning_mean() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +close all; +% frame_window_short=[40,40]; +% frame_window_long=[100,100]; + + + +% +% key.subject_id = 447990; +% key.session =8; + +% key.subject_id = 445980; +% key.session =5; +% key.subject_id = 445873; +% key.session =5; +% key.subject_id = 462458; +% key.session =5; + +key.subject_id = 463195; +key.session =2; + +neurons_or_control_flag =1; % 1 neurons, 0 control sites +flag_distance_flag = 0; % 0 lateral distance; 1 axial distance; 3d distance + +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +epoch_list=epoch_list(1); +% epoch_list=epoch_list(1:1:3); + +% epoch_list = [1]; +% rel=STIM.ROIResponse3 & 'response_p_value<=0.02'; +rel=STIM.ROIResponse & 'response_p_value<=0.05'; + +flag_baseline_trial_or_avg = 0; + +smooth_bins=1; %10 + +zoom =fetch1(IMG.FOVEpoch & key,'zoom','LIMIT 1'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x','LIMIT 1') / fetch1(IMG.FOV & key, 'fov_x_size','LIMIT 1'); + + +kkkk.session_epoch_number=epoch_list(end); +frame_rate= fetch1(IMG.FOVEpoch & key & kkkk, 'imaging_frame_rate'); +timewind_stim=[0.25,1.5]; + +timewind_baseline = [-15,-5]; +time = [-30: (1/frame_rate): 10]; + +xlims = [-5, 10]; +ylims = [-0.1,0.4]; + +% distance_bins_microns = [0,25,50,75,100,125,150,200,500]; +% distance_bins_microns = [0,25,50,75,100,125,175,250,500]; +% distance_bins_microns = [0,25,50,75,100,150,300,600]; +% distance_bins_microns = [0,25,50,75,150,300,500]; +% distance_bins_microns = [0,30,60,90,120,200,300,400,500,600]; +% distance_bins_microns = [0,25:25:275,300,400,500,600]; + +% distance_bins_microns = [0:25:100,150,200:100:500]; +% distance_bins_microns = [0:25:500]; +distance_bins_microns = [0:25:200,250:50:500]; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.04; +panel_height=0.06; +horizontal_distance=0.07; +vertical_distance=0.25; +position_x(1)=0.07; + +position_y(1)=0.85; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['distance_binned_session_' num2str(key.session) '_' session_date ]; +if flag_distance_flag==0 % lateral distance + distance_type_name = 'lateral'; +elseif flag_distance_flag==1 % axial distance (depth) + distance_type_name = 'axial'; +elseif flag_distance_flag==2 % 3D distance in a volume + distance_type_name = '3D'; +end +filename = [filename distance_type_name]; + + + + +% rel=(IMG.PhotostimGroupROI & STIM.ROIResponseDirect & key & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.25'); +% G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>17.25','*'); + + +line_color=copper(numel(epoch_list)); +% time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_epoch=1:1:numel(epoch_list) + k1=key; + k1.session_epoch_number = epoch_list(i_epoch); + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<10')& k1); + + hold on; + plot([distance_bins_microns(2),distance_bins_microns(end)],[0,0],'-k'); + + neurons_or_control_flag=0; % neurons + OUTPUT =fn_bin_stimresponse_distance(rel, k1, neurons_or_control_flag,flag_distance_flag, pix2dist, distance_bins_microns); + plot(distance_bins_microns(2:end),OUTPUT.mean_by_distance,'-b') + OUTPUT2D =fn_bin_stimresponse_distance_2D(rel, k1, neurons_or_control_flag,pix2dist, distance_bins_microns); + +% neurons_or_control_flag=1; % control +% OUTPUT =fn_bin_stimresponse_distance(rel, k1, neurons_or_control_flag,flag_distance_flag, pix2dist, distance_bins_microns); +% plot(distance_bins_microns(2:end),OUTPUT.mean_by_distance,'-r') +% mean(F_mean(distance>25)) +figure + map=OUTPUT2D.mean_by_distance'; + maxv=prctile(map(:),99); + minv=min([prctile(map(:),0),0]); + %rescaling + map(map>maxv)=maxv; + map(map%.2f', min_distance_to_closest_target_pixels) & 'response_mean>0'; + +if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; +elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; +elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; +end +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\']; + + + +smooth_bins=1; + + + + + + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.2; +panel_height=0.25; +horizontal_distance=0.2; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.7; + + +G=fetch(IMG.PhotostimGroupROI & key,'*'); + +group_list=[G.photostim_group_num]; + + +line_color=copper(numel(epoch_list)); %bright - later epoch +% line_color=flip(line_color); + +time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; +% signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); +% response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); +% response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); +% response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels +% response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; +% flag_distance_flag=5 +% if flag_distance_flag==0 % lateral distance +% distance=[DATA.response_distance_pixels]; +% distance=pix2dist*distance; +% elseif flag_distance_flag==1 % axial distance +% distance=[DATA.response_distance_axial_um]; +% elseif flag_distance_flag==2 % 3D distance +% distance=[DATA.response_distance_3d_um]; +% end + + + + for i_r = 1:1:numel(signif_roi) + k2=k1; + k2.roi_number = signif_roi(i_r); + + + for i_epoch=1:1:numel(epoch_list) + + k2.session_epoch_number = epoch_list(i_epoch); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k2,'photostim_start_frame'); + + f_trace_direct{i_epoch} = fetch1(IMG.ROITrace & k2,'f_trace'); + + global_baseline=mean( f_trace_direct{i_epoch}); + + timewind_response = [ 0 2]; + timewind_baseline1 = [ -3 0]; + timewind_baseline2 = [-3 0] ; + timewind_baseline3 = [ -3 0]; + [~,StimTrace] = fn_compute_photostim_response (f_trace_direct{i_epoch} , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + + y=StimTrace.response_trace_mean; + y_smooth= movmean(y,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=StimTrace.response_trace_stem; + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch(i_epoch)=max(y_smooth); + min_epoch(i_epoch)=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',line_color(i_epoch,:)); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + + end + ylim ([min([-0.2,min_epoch]),max([0.5 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F') +% title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + + +% title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + set(gca,'FontSize',60); + title(sprintf('anm %d, session %d \n Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n \n \n',k2.subject_id,k2.session, G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + set(gca,'Ytick',[-0.2, 0, 0.5]); + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + +% %% save figure +% % dir_current_fig2 = [dir_current_fig '\group_' num2str(group_list(i_g)) '\']; +% dir_current_fig2 = [dir_current_fig '\']; +% +% if isempty(dir(dir_current_fig2)) +% mkdir (dir_current_fig2) +% end +% % +% filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; +% figure_name_out=[ dir_current_fig2 filename]; +% eval(['print ', figure_name_out, ' -dtiff -r100']); +% % eval(['print ', figure_name_out, ' -dpdf -r200']); +% +% clf; + + end +end + + + + +end diff --git a/analysis/photostim/photostim_coupled__new.m b/analysis/photostim/photostim_coupled__new.m new file mode 100644 index 0000000..03c1103 --- /dev/null +++ b/analysis/photostim/photostim_coupled__new.m @@ -0,0 +1,183 @@ +function photostim_coupled__new() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_traces\coupled\']; + + +% key.subject_id = 447991; +% key.session =10; +key.subject_id = 462458; +key.session =1; +% key.subject_id = 445980; +% key.session =2; +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +% key.session_epoch_number = epoch_list(end); % to take the photostim groups from +key.session_epoch_number = epoch_list(3); % to take the photostim groups from +epoch_list=epoch_list(1:1:3); + +min_distance_to_closest_target=25; % in microns + +close all; +frame_window_short=[40,40]/4; +frame_window_long=[200,100]/2; +flag_baseline_trial_or_avg=0; %1 baseline per trial, 0 - baseline averaged across trials + + +zoom =fetch1(IMG.FOVEpoch & key,'zoom'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); +try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end +min_distance_to_closest_target_pixels=min_distance_to_closest_target/pix2dist; + +rel=STIM.ROIResponse & 'response_p_value<=0.05' & sprintf('response_distance_pixels >%.2f', min_distance_to_closest_target_pixels); + +if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; +elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; +elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; +end +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\']; + + + +smooth_bins=1; + + + + + + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.2; +panel_height=0.25; +horizontal_distance=0.2; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.7; + + +G=fetch(IMG.PhotostimGroupROI & key,'*'); + +group_list=[G.photostim_group_num]; + + +line_color=copper(numel(epoch_list)); %bright - later epoch +% line_color=flip(line_color); + +time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; +% signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); +% response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); +% response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); +% response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels +% response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; +% flag_distance_flag=5 +% if flag_distance_flag==0 % lateral distance +% distance=[DATA.response_distance_pixels]; +% distance=pix2dist*distance; +% elseif flag_distance_flag==1 % axial distance +% distance=[DATA.response_distance_axial_um]; +% elseif flag_distance_flag==2 % 3D distance +% distance=[DATA.response_distance_3d_um]; +% end + + + + for i_r = 1:1:numel(signif_roi) + k2=k1; + k2.roi_number = signif_roi(i_r); + + + for i_epoch=1:1:numel(epoch_list) + + k2.session_epoch_number = epoch_list(i_epoch); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k2,'photostim_start_frame'); + + f_trace_direct{i_epoch} = fetch1(IMG.ROITrace & k2,'f_trace'); + + global_baseline=mean( f_trace_direct{i_epoch}); + + + [~,StimTrace] = fn_compute_photostim_response (f_trace_direct{i_epoch} , photostim_start_frame, frame_window_short,frame_window_long, flag_baseline_trial_or_avg, global_baseline, time); + dFoverF_mean=StimTrace.dFoverF_mean; + + y=dFoverF_mean; + y_smooth= movmean(y,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + max_epoch(i_epoch)=max(y_smooth); + min_epoch(i_epoch)=min(y_smooth); + hold on; + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + end + ylim ([min([-0.1,min_epoch]),max([0.5 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F') +% title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + + +% title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + set(gca,'FontSize',12); + + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + +% %% save figure +% % dir_current_fig2 = [dir_current_fig '\group_' num2str(group_list(i_g)) '\']; +% dir_current_fig2 = [dir_current_fig '\']; +% +% if isempty(dir(dir_current_fig2)) +% mkdir (dir_current_fig2) +% end +% % +% filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; +% figure_name_out=[ dir_current_fig2 filename]; +% eval(['print ', figure_name_out, ' -dtiff -r100']); +% % eval(['print ', figure_name_out, ' -dpdf -r200']); +% +% clf; + + end +end + + + + +end diff --git a/analysis/photostim/photostim_coupled_distance_binning.m b/analysis/photostim/photostim_coupled_distance_binning.m new file mode 100644 index 0000000..da2f04b --- /dev/null +++ b/analysis/photostim/photostim_coupled_distance_binning.m @@ -0,0 +1,234 @@ +function photostim_coupled_distance_binning() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +close all; +% frame_window_short=[40,40]; +% frame_window_long=[100,100]; + + + +% +% key.subject_id = 447990; +% key.session =8; + +% key.subject_id = 445980; +% key.session =5; +% key.subject_id = 445873; +% key.session =5; +% key.subject_id = 462458; +% key.session =3; + +key.subject_id = 463195; +key.session =2; + +neurons_or_control_flag =0; % 0 neurons, 1 control sites +flag_distance_flag = 0; % 0 lateral distance; 1 axial distance; 3d distance + +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +epoch_list=epoch_list(1:1:3); + +% epoch_list = [1]; +% rel=STIM.ROIResponse3 & 'response_p_value<=0.02'; +rel=STIM.ROIResponse & 'response_p_value<=0.001'; + +flag_baseline_trial_or_avg = 0; + +smooth_bins=1; %10 + +zoom =fetch1(IMG.FOVEpoch & key,'zoom','LIMIT 1'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x','LIMIT 1') / fetch1(IMG.FOV & key, 'fov_x_size','LIMIT 1'); + + +kkkk.session_epoch_number=epoch_list(end); +frame_rate= fetch1(IMG.FOVEpoch & key & kkkk, 'imaging_frame_rate'); +timewind_stim=[0.25,1.5]; + +timewind_baseline = [-15,-5]; +time = [-30: (1/frame_rate): 10]; + +xlims = [-5, 10]; +ylims = [-0.1,0.4]; + +% distance_bins_microns = [0,25,50,75,100,125,150,200,500]; +% distance_bins_microns = [0,25,50,75,100,125,175,250,500]; +% distance_bins_microns = [0,25,50,75,100,150,300,600]; +% distance_bins_microns = [0,25,50,75,150,300,500]; +distance_bins_microns = [0,30,60,90,120,200,300,600]; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.07; +panel_height=0.06; +horizontal_distance=0.11; +vertical_distance=0.25; +position_x(1)=0.07; + +position_y(1)=0.85; + + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['distance_binned_session_' num2str(key.session) '_' session_date ]; +if flag_distance_flag==0 % lateral distance + distance_type_name = 'lateral'; +elseif flag_distance_flag==1 % axial distance (depth) + distance_type_name = 'axial'; +elseif flag_distance_flag==2 % 3D distance in a volume + distance_type_name = '3D'; +end +filename = [filename distance_type_name]; + + + + +% rel=(IMG.PhotostimGroupROI & STIM.ROIResponseDirect & key & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.25'); +% G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>17.25','*'); + + +line_color=copper(numel(epoch_list)); +% time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_epoch=1:1:numel(epoch_list) + k1=key; + k1.session_epoch_number = epoch_list(i_epoch); + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<10')& k1); +if neurons_or_control_flag == 0 +% rel_group_targets=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & (STIM.ROIResponseDirect &'response_p_value<0.01'))& k1); + rel_group_targets = rel & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & k1 & 'response_p_value<=0.01')) & k1; + + elseif neurons_or_control_flag == 1 + rel_group_targets = rel & (IMG.PhotostimGroup & (STIM.ROIResponseDirect & k1 & 'response_p_value>0.1')) & k1; +end + + % rel_group_neurons=rel & (IMG.PhotostimGroup & (IMG.PhotostimGroupROI & STIM.ROIResponseDirect & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>10')& k1); + + DATA=fetch(rel_group_targets,'*'); + + F=[]; + F_mean=[]; + for i_r=1:1:numel(DATA) + k2=DATA(i_r,:); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k2,'photostim_start_frame'); + f_trace = fetch1(IMG.ROITrace & k2,'f_trace'); + global_baseline=mean( f_trace); + + [StimStat,StimTrace] = fn_compute_photostim_response (f_trace, photostim_start_frame, timewind_stim, timewind_baseline, flag_baseline_trial_or_avg,global_baseline, time); + + % [StimStat,StimTrace] = fn_compute_photostim_response (f_trace , photostim_start_frame, frame_window_short,frame_window_long, flag_baseline_trial_or_avg, global_baseline, time); + F(i_r,:)=StimTrace.dFoverF_mean; + F_mean(i_r)=StimStat.Fstim_mean; + + end + + if flag_distance_flag==0 % lateral distance + distance=[DATA.response_distance_pixels]; + distance=pix2dist*distance; + elseif flag_distance_flag==1 % axial distance + distance=[DATA.response_distance_axial_um]; + elseif flag_distance_flag==2 % 3D distance + distance=[DATA.response_distance_3d_um]; + end + + ix_excit= F_mean>=0; + ix_inhbit= F_mean<0; + num_roi_bin_all =[]; + num_roi_bin_excit =[]; + num_roi_bin_inhibit =[]; + + for i_d=1:1:numel(distance_bins_microns)-1 + ix_d = distance>=distance_bins_microns(i_d) & distance0 + % Positive + axes('position',[position_x(i_d), position_y(i_epoch), panel_width, panel_height]); + y_m = trace_mean_by_distance_excit(i_d,:); + % y_smooth= y_m; + y_smooth= movmean(y_m,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + position_x(end+1)=position_x(end) +horizontal_distance; + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % max_epoch(i_d)=max(y_smooth); + % min_epoch(i_d)=min(y_smooth); + % ylims = [ min([-0.05, floor(10*min_epoch(i_d))/10]), max([0.1, ceil(10*max_epoch(i_d))/10])]; + title(sprintf('[%d %d] um\n %d cells',distance_bins_microns(i_d),distance_bins_microns(i_d+1),num_roi_bin_excit(i_d)),'FontSize',10); + + set(gca, 'YLim',ylims,'YTick', []) + if i_d==1 + % xlabel(' Time(s)'); + ylabel('\Delta F/F'); + set(gca,'YLim',ylims,'YTick', [0, ylims(2)],'YTickLabels',[0, ylims(2)]); + end + set(gca,'FontSize',10, 'Xlim', xlims, 'XTick', [xlims(1),0,xlims(2)]); + % end + + % if num_roi_bin_inhibit(i_d)>0 + % Negative + axes('position',[position_x(i_d), position_y(i_epoch)-0.1, panel_width, panel_height]); + y_m = trace_mean_by_distance_inhibit(i_d,:); + % y_smooth= y_m; + y_smooth= movmean(y_m,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % max_epoch(i_d)=max(y_smooth); + % min_epoch(i_d)=min(y_smooth); + % ylims = [ min([-0.05, floor(10*min_epoch(i_d))/10]), max([0.1, ceil(10*max_epoch(i_d))/10])]; + title(sprintf('%d cells',num_roi_bin_inhibit(i_d)),'FontSize',10); + + set(gca, 'YLim',ylims,'YTick', []) + if i_d==1 + xlabel(' Time (s)'); + ylabel('\Delta F/F'); + text(-20,diff(ylims)/2,' Inhibition','Rotation',90); + set(gca,'YLim',ylims,'YTick', [0, ylims(2)],'YTickLabels',[0, ylims(2)]); + + end + set(gca,'FontSize',10, 'Xlim', xlims, 'XTick', [xlims(1),0,xlims(2)]); + % end + + position_x(end+1)=position_x(end) +horizontal_distance; + + end + + + + % hold on; + % plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + % + % + % xlabel('Time (s)'); + % ylabel('\Delta F/F'); + % + position_y(end+1)=position_y(end) -vertical_distance; + + +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); diff --git a/analysis/photostim/photostim_coupled_odd_even_etc.m b/analysis/photostim/photostim_coupled_odd_even_etc.m new file mode 100644 index 0000000..ef64045 --- /dev/null +++ b/analysis/photostim/photostim_coupled_odd_even_etc.m @@ -0,0 +1,80 @@ +function photostim_coupled_odd_even_etc() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim_traces\coupled3']; + +close all; +frame_rate=20; +frame_window=200; +key.session_epoch_number = 2; + +group_list = fetchn(IMG.PhotostimGroup & key,'photostim_group_num','ORDER BY photostim_group_num'); + + +line_color{1}=[0.5 0 0]; +line_color{2}=[1 0 0]; +epoch_list = [2:3]; + +x=(-frame_window:1:frame_window)/frame_rate; + + +for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + for i_epoch=1:1:1%numel(epoch_list) + k1=key; + k1.session_epoch_number = epoch_list(i_epoch); + signif_roi = fetchn(IMG.ROICoupled & k1 & 'coupling_p_value<=0.005','roi_number','ORDER BY roi_number'); + coupling_p_value = fetchn(IMG.ROICoupled & k1 & 'coupling_p_value<=0.005','coupling_p_value','ORDER BY roi_number'); + coupling_distance_pixels = fetchn(IMG.ROICoupled & k1 & 'coupling_p_value<=0.005','coupling_distance_pixels','ORDER BY roi_number'); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + + + + for i_r = 1:1:numel(signif_roi) + k2=k1; + k2.roi_number = signif_roi(i_r); + f_trace = fetch1(IMG.ROITrace & k2,'f_trace','ORDER BY roi_number'); + + + F=[]; + for i_stim=1:1:numel(photostim_start_frame)-1 + s_fr = photostim_start_frame(i_stim); + F(i_stim,:)=f_trace(s_fr-frame_window:1:s_fr+frame_window); + end + + + + + mF = mean(F,1); + baseline= mean(mF(1:frame_window-1)); + mdFoverF=(mF - baseline)/baseline; + hold on; + smth=smooth(mdFoverF,10); + plot(x(5:1:end-5),smth(5:1:end-5),'Color',line_color{i_epoch}); + + + title(sprintf('Photostim group=%d ROI=%d p=%.6f distance = %.1f (pixels)',group_list(i_g), signif_roi(i_r), coupling_p_value(i_r), coupling_distance_pixels(i_r))); + + + %% save figure + % dir_current_fig2 = [dir_current_fig '\group_' num2str(group_list(i_g)) '\']; + dir_current_fig2 = [dir_current_fig '\']; + + if isempty(dir(dir_current_fig2)) + mkdir (dir_current_fig2) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig2 filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + + end + end + + + + +end diff --git a/analysis/photostim/photostim_coupled_when_presenypatic_responded.m b/analysis/photostim/photostim_coupled_when_presenypatic_responded.m new file mode 100644 index 0000000..58080b9 --- /dev/null +++ b/analysis/photostim/photostim_coupled_when_presenypatic_responded.m @@ -0,0 +1,198 @@ +function photostim_coupled_when_presenypatic_responded() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_traces\coupled_when_presynaptic_responded']; + +% key.subject_id = 462458; +% key.session =12; + +key.subject_id = 462455; +key.session =2; + +% key.subject_id = 447991; +% key.session =10; +% key.subject_id = 462458; +% key.session =1; +% key.subject_id = 445980; +% key.session =2; +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +% key.session_epoch_number = epoch_list(end); % to take the photostim groups from +% key.session_epoch_number = epoch_list(3); % to take the photostim groups from +% epoch_list=epoch_list(1:1:3); +key.session_epoch_number = epoch_list(1); % to take the photostim groups from +epoch_list=epoch_list(1); +min_distance_to_closest_target=50; % in microns + +close all; +frame_window_short=[40,40]/4; +frame_window_long=[50,100]/2; +flag_baseline_trial_or_avg=0; %1 baseline per trial, 0 - baseline averaged across trials + + +zoom =fetch1(IMG.FOVEpoch & key,'zoom'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); +try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end +min_distance_to_closest_target_pixels=min_distance_to_closest_target/pix2dist; + +rel=STIM.ROIInfluence5 & 'response_p_value1<=0.01' & sprintf('response_distance_lateral_um >%.2f', min_distance_to_closest_target_pixels) & 'response_mean>0'; + +if flag_baseline_trial_or_avg==0 %baseline averaged across trials + dir_suffix= 'baseline_avg'; +elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; +elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; +end +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\']; + + + +smooth_bins=1; + + + + + + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.2; +panel_height=0.25; +horizontal_distance=0.2; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.7; + + +G=fetch(IMG.PhotostimGroupROI & key,'*'); + +group_list=[G.photostim_group_num]; + + +line_color=copper(numel(epoch_list)); %bright - later epoch +% line_color=flip(line_color); + +time=(-frame_window_long(1):1:frame_window_long(2)-1)/frame_rate; + + + +for i_g=1:1:numel(group_list) + key.photostim_group_num = group_list(i_g); + + + k1=key; + signif_roi=[]; +% signif_roi = fetchn(rel & k1 ,'roi_number','ORDER BY roi_number'); +% response_p_value = fetchn(rel & k1 ,'response_p_value','ORDER BY roi_number'); +% response_mean = fetchn(rel & k1 ,'response_mean','ORDER BY roi_number'); +% response_distance_pixels = fetchn(rel & k1 ,'response_distance_pixels','ORDER BY roi_number'); % in pixels +% response_distance_pixels = response_distance_pixels * pix2dist; % in microns + DATA =fetch(rel & k1 ,'*','ORDER BY roi_number'); + signif_roi = [DATA.roi_number]; +% flag_distance_flag=5 +% if flag_distance_flag==0 % lateral distance +% distance=[DATA.response_distance_pixels]; +% distance=pix2dist*distance; +% elseif flag_distance_flag==1 % axial distance +% distance=[DATA.response_distance_axial_um]; +% elseif flag_distance_flag==2 % 3D distance +% distance=[DATA.response_distance_3d_um]; +% end + + + + for i_r = 1:1:numel(signif_roi) + k2=k1; + k2.roi_number = signif_roi(i_r); + + + for i_epoch=1:1:numel(epoch_list) + + k2.session_epoch_number = epoch_list(i_epoch); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k2,'photostim_start_frame'); + + f_trace_direct{i_epoch} = fetch1(IMG.ROITrace & k2,'f_trace'); + + global_baseline=mean( f_trace_direct{i_epoch}); + + timewind_response = [ 0 2]; + timewind_baseline1 = [ -3 0]; + timewind_baseline2 = [-3 0] ; + timewind_baseline3 = [ -3 0]; + [~,StimTrace] = fn_compute_photostim_response (f_trace_direct{i_epoch} , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + + y=StimTrace.response_trace_mean; + y_smooth= movmean(y,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=StimTrace.response_trace_stem; + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch(i_epoch)=max(y_smooth); + min_epoch(i_epoch)=min(y_smooth); + hold on; + plot(time(1:end-1),y_smooth,'Color',line_color(i_epoch,:)); + shadedErrorBar(time(1:end-1),y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + + end + ylim ([min([-0.2,min_epoch]),max([0.5 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F') +% title(sprintf('Coupled responses \n Target # %d ROI=%d \n Distance = %.1f (um), Amplitude %.2f, p-val=%.6f \n',G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_pixels * pix2dist, DATA(i_r).response_mean, DATA(i_r).response_p_value)); + + +% title(sprintf('Photostim group=%d ROI=%d \n p=%.6f distance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k2.roi_number, response_p_value(i_r), response_distance_pixels(i_r), response_mean(i_r))); + set(gca,'FontSize',60); + title(sprintf('anm %d, session %d \n Coupled responses \n Target # %d ROI=%d \n Distance lateral = %.1f (um) \n Distance axial = %.1f (um) \n Distance 3D = %.1f (um)\n Amplitude %.2f, p-val=%.6f \n \n \n',k2.subject_id,k2.session, G(i_g).photostim_group_num, k2.roi_number, DATA(i_r).response_distance_lateral_um, DATA(i_r).response_distance_axial_um, DATA(i_r).response_distance_3d_um, DATA(i_r).response_mean, DATA(i_r).response_p_value1),'FontSize',10); + + set(gca,'Ytick',[-0.2, 0, 0.5]); + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r100']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + +% %% save figure +% % dir_current_fig2 = [dir_current_fig '\group_' num2str(group_list(i_g)) '\']; +% dir_current_fig2 = [dir_current_fig '\']; +% +% if isempty(dir(dir_current_fig2)) +% mkdir (dir_current_fig2) +% end +% % +% filename=['photostim_group_' num2str(group_list(i_g)) '_roi_' num2str(signif_roi(i_r))]; +% figure_name_out=[ dir_current_fig2 filename]; +% eval(['print ', figure_name_out, ' -dtiff -r100']); +% % eval(['print ', figure_name_out, ' -dpdf -r200']); +% +% clf; + + end +end + + + + +end diff --git a/analysis/photostim/photostim_direct.m b/analysis/photostim/photostim_direct.m new file mode 100644 index 0000000..2c0cd9f --- /dev/null +++ b/analysis/photostim/photostim_direct.m @@ -0,0 +1,269 @@ +function photostim_direct() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_traces\']; + +close all; +% key.subject_id = 447990; +% key.session =8; +% key.subject_id = 462458; +% key.session =3; +% key.subject_id = 447991; +% key.session = 11; + +% key.subject_id = 445873; +% key.session =5; + + +% key.subject_id = 462458; +% key.session =12; + +% key.subject_id = 463195; +% key.session =4; + +% key.subject_id = 462455; +% key.session =1; + +% key.subject_id = 462455; +% key.session =3; + +key.subject_id = 463192; +key.session =3; + +% key.subject_id = 464728; +% key.session =2; + +% Take photostim groups from here: +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +take_phtostim_groups_epoch = 1; +key.session_epoch_number = epoch_list(take_phtostim_groups_epoch); % to take the photostim groups from +epoch_list=epoch_list(); +flag_baseline_trial_or_avg=2; %0 - baseline averaged across trials, 1 baseline per trial, 2 global baseline - mean of roi across the entire session epoch + + +% frame_window_short=[40,40]/4; +% frame_window_long=[200,100]/2; +% frame_window_short=[40,40]; +% frame_window_long=[100,200]; +smooth_bins=1; %2 + +if flag_baseline_trial_or_avg==0 % baseline averaged across trials + dir_suffix= 'baseline_avg'; +elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; +elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; +end +% dir_current_fig=[dir_current_fig dir_suffix '_' num2str(frame_window_short(1)) 'frames\']; + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\']; + + +zoom =fetch1(IMG.FOVEpoch & key,'zoom'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + +try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end + +timewind_stim=[0.25,1.5]; +% timewind_baseline=[0.25,1.5]-10; +timewind_baseline = [-15,-5]; +time = [-20: (1/frame_rate): 10]; + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.15; +panel_height=0.2; +horizontal_distance=0.25; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.65; +position_y(end+1)=position_y(end) - vertical_distance*0.7; +position_y(end+1)=position_y(end) - vertical_distance; + + + +G=fetch(IMG.PhotostimGroupROI & key,'*'); + + + +roi_list_direct=[G.roi_number]; +distance=[G.distance_to_closest_neuron]*pix2dist; + + +line_color=copper(numel(epoch_list)); +% line_color=flip(line_color); + + +for i_g=1:1:numel(roi_list_direct) + key.photostim_group_num = G(i_g).photostim_group_num; + + k1=key; + k1.roi_number = roi_list_direct(i_g); + + k2=key; + + + for i_epoch=1:1:numel(epoch_list) + k1.session_epoch_number = epoch_list(i_epoch); + + f_trace = fetch1(IMG.ROITrace & k1,'f_trace'); + f_trace_epoch{i_epoch} = f_trace; + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + % global_baseline=mean(movmin(f_trace_direct(i_epoch,:),1009)); + global_baseline=mean( f_trace); + + + [StimStat, StimTrace] = fn_compute_photostim_response (f_trace, photostim_start_frame, timewind_stim, timewind_baseline, flag_baseline_trial_or_avg,global_baseline, time); + pval(i_epoch)=StimStat.p_val; + Fstim_mean(i_epoch)=StimStat.Fstim_mean; + Fstim_coefvar(i_epoch) = StimStat.Fstim_coefvar; + Fstim_meanwind_trials{i_epoch} = StimStat.Fstim_meanwind_trials; + Fbase_control_meanwind_trials{i_epoch} = StimStat.Fbase_control_meanwind_trials; + + % Fstim_maxwind_trials{i_epoch} =StimStat.Fstim_maxwind_trials; + % Fbase_control_maxwind_trials{i_epoch} = StimStat.Fbase_control_maxwind_trials; + + dFoverF_mean=StimTrace.dFoverF_mean; + y_temp=dFoverF_mean; + y_temp= movmean(y_temp,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + y(i_epoch,:) = y_temp; + idx_stim(1)=find(time>(timewind_stim(1)),1,'first'); + idx_stim(2)=find(time<=(timewind_stim(2)),1,'last'); + y_norm(i_epoch,:) = y_temp./max(y_temp(idx_stim(1):idx_stim(2))); + + end + + % Plot response + axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + for i_epoch=1:1:numel(epoch_list) + hold on; + plot(time(2:end-1),y(i_epoch,2:end-1),'Color',line_color(i_epoch,:)); + ylim ([min([-0.1,min(y(:))]),max([0.5 ,max(y(:))])]); + xlabel('Time from photostim (s)'); + ylabel('\Delta F/F'); + end + % title(sprintf('Photostim group=%d ROI=%d p=%.6f \ndistance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k1.roi_number, pval(1), distance(i_g),Fstim_mean(1))); + title(sprintf('Direct photostimulation \n Target # %d ROI=%d \n Distance = %.1f um \nResponse %.2f dF/F \n p-val=%.6f \n',G(i_g).photostim_group_num, k1.roi_number, distance(i_g), Fstim_mean(take_phtostim_groups_epoch), pval(take_phtostim_groups_epoch))); + set(gca,'FontSize',10) + xlim([-7.5,7.5]); + + + % Plot normalized response + axes('position',[position_x(2), position_y(1), panel_width, panel_height]); + for i_epoch=1:1:numel(epoch_list) + hold on; + plot(time(2:end-1),y_norm(i_epoch, 2:end-1),'Color',line_color(i_epoch,:)); + % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); + ylim ([ nanmin([-0.1,nanmin(y_norm(:))]) , nanmax([nanmax(y_norm(:)),0.1]) ]); + xlabel('Time from photostim (s)'); + ylabel('\Delta F/F, normalized'); + + end + set(gca,'FontSize',10) + xlim([-7.5,7.5]); + + % Plot response variability across trials + for i_epoch=1:1:numel(epoch_list) + axes('position',[position_x(i_epoch), position_y(2), panel_width, panel_height/2]); + + hold on; + % xxx = Fstim_maxwind_trials{i_epoch}; + % yyy = Fbase_control_maxwind_trials{i_epoch}; + xxx = Fstim_meanwind_trials{i_epoch}; + yyy = Fbase_control_meanwind_trials{i_epoch}; + bins = linspace(min([xxx;yyy]),max([xxx;yyy]),25); + + h1=histogram(xxx,bins); + h1.FaceColor=[0 0 1]; + h1.Normalization = 'probability'; + h1.EdgeColor='none'; + % + % h2=histogram(yyy,bins); + % h2.Normalization = 'probability'; + % h2.FaceColor=[0.5 .5 .5]; + % h2.EdgeColor='none'; + + + % plot(time(2:end-1),y_norm(i_epoch, 2:end-1),'Color',line_color(i_epoch,:)); + % % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); + % ylim ([ nanmin([-0.1,nanmin(y_norm(:))]) , nanmax([nanmax(y_norm(:)),0.1]) ]); + % xlabel('Time (s)'); + % ylabel('\Delta F/F, normalized'); + set(gca,'FontSize',10); + if i_epoch==1 + xlabel((' Response \Delta F/F (mean over response window)')); + ylabel('Percentage'); + end + title(sprintf('Session epoch #%d\nCV = %.1f',i_epoch, Fstim_coefvar(i_epoch))); + end + + + % Plot Baseline Fluourescene fluctutation. This is not the same "baseline" used for computing the photostim response + axes('position',[position_x(1), position_y(3), panel_width, panel_height]); + for i_epoch=1:1:numel(epoch_list) + hold on; + moving_minimum=movmin(f_trace_epoch{i_epoch},frame_rate*60); + % smooth_b=smooth(smooth_b,100,'sgolay',3); + % plot(f_trace_direct(i_epoch,:),'Color','k'); + plot([1:1:numel(moving_minimum)]/frame_rate, moving_minimum,'Color',line_color(i_epoch,:)); + % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); + end + set(gca,'FontSize',10) + title('Baseline Flourescence') + ylabel('F'); + xlabel('Time (s)') + + + % k2.session_epoch_number = epoch_list(i_epoch); + + % roi_coupled=fetchn(STIM.ROIResponse & k2 & 'response_p_value<=0.05' & 'response_distance_pixels<=100','roi_number', 'ORDER BY response_mean'); + % if ~isempty(roi_coupled) + % roi_coupled=roi_coupled(end); + % + % k3=k2; + % k3.roi_number = roi_coupled; + % f_trace_coupled = fetch1(IMG.ROITrace & k3,'f_trace'); + % [~,StimTrace] = fn_compute_photostim_response (f_trace_coupled, photostim_start_frame, frame_window); + % dFoverF_mean=StimTrace.dFoverF_mean; + % subplot(2,2,2+i_epoch) + % hold on; + % plot(time,dFoverF_mean,'Color',line_color{i_epoch}); + % C=fetch(STIM.ROIResponse & k3,'*'); + % + % title(sprintf('Maximally coupled ROI=%d \ndistance=%.2f pval = %.4f', C.roi_number, C.response_distance_pixels, C.response_p_value)); + % + % end + % + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(G(i_g).photostim_group_num)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + + +end diff --git a/analysis/photostim/photostim_direct_mean.m b/analysis/photostim/photostim_direct_mean.m new file mode 100644 index 0000000..21493a2 --- /dev/null +++ b/analysis/photostim/photostim_direct_mean.m @@ -0,0 +1,98 @@ +function photostim_direct_mean() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim_traces\mean_direct_20190426\']; + +close all; +frame_rate=20; +frame_window=[200,200]; + +key.subject_id = 445105; +key.session =2; +key.session_epoch_number = 2; +epoch_list = [5,4,3,2,1]; +% epoch_list = [2]; +smooth_bins=10; + +pix2dist= fetch1(IMG.Parameters & 'parameter_name="fov_size_microns_z1.1"', 'parameter_value')/fetch1(IMG.FOV & key, 'fov_x_size'); + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.4; +panel_height=0.4; +horizontal_distance=0.2; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.5; + + + + + + + +G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<17.25','*'); +% G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=0' & 'distance_to_closest_neuron>17.25','*'); + +roi_list_direct=[G.roi_number]; +distance=[G.distance_to_closest_neuron]; + + +line_color=copper(numel(epoch_list)); +line_color=flip(line_color); +time=(-frame_window(1):1:frame_window(2)-1)/frame_rate; + + +axes('position',[position_x(1), position_y(1), panel_width, panel_height]); + +for i_epoch=1:1:numel(epoch_list) + + for i_g=1:1:numel(roi_list_direct) + key.photostim_group_num = G(i_g).photostim_group_num; + + k1=key; + k1.roi_number = roi_list_direct(i_g); + k1.session_epoch_number = epoch_list(i_epoch); + + f_trace_direct = fetch1(IMG.ROITrace & k1,'f_trace'); + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + + [~,StimTrace] = fn_compute_photostim_response2 (f_trace_direct, photostim_start_frame, frame_window); + dFoverF_mean=StimTrace.dFoverF_mean; + y(i_g,:)=dFoverF_mean; + + end + y_m = mean(y); + y_smooth= movmean(y_m,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch(i_epoch)=max(y_smooth); + min_epoch(i_epoch)=min(y_smooth); + hold on; + plot(time(2:end-1),y_smooth(2:end-1),'Color',line_color(i_epoch,:)); + + + ylim ([min([-0.1,min_epoch]),max([0.5 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F'); + +end + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +filename=['control']; +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r100']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); + diff --git a/analysis/photostim/photostim_direct_new.m b/analysis/photostim/photostim_direct_new.m new file mode 100644 index 0000000..ababe16 --- /dev/null +++ b/analysis/photostim/photostim_direct_new.m @@ -0,0 +1,306 @@ +function photostim_direct_new() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_traces\new\']; + +close all; +% key.subject_id = 447990; +% key.session =8; +% key.subject_id = 462458; +% key.session =3; +% key.subject_id = 447991; +% key.session = 11; + +% key.subject_id = 445873; +% key.session =5; + + +% key.subject_id = 462458; +% key.session =12; + +% key.subject_id = 463195; +% key.session =4; + +% key.subject_id = 462455; +% key.session =1; + +% key.subject_id = 462455; +% key.session =3; + +% key.subject_id = 463192; +% key.session =3; + +key.subject_id = 462458; +key.session =12; + + +% key.subject_id = 464728; +% key.session =2; + +% Take photostim groups from here: +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +take_phtostim_groups_epoch = 1; +key.session_epoch_number = epoch_list(take_phtostim_groups_epoch); % to take the photostim groups from +epoch_list=epoch_list(); +flag_baseline_trial_or_avg=2; %0 - baseline averaged across trials, 1 baseline per trial, 2 global baseline - mean of roi across the entire session epoch + + +% frame_window_short=[40,40]/4; +% frame_window_long=[200,100]/2; +% frame_window_short=[40,40]; +% frame_window_long=[100,200]; +smooth_bins=1; %2 + +if flag_baseline_trial_or_avg==0 % baseline averaged across trials + dir_suffix= 'baseline_avg'; +elseif flag_baseline_trial_or_avg==1 % baseline per trial + dir_suffix= 'baseline_trial'; +elseif flag_baseline_trial_or_avg==2 % global baseline + dir_suffix= 'baseline_global'; +end +% dir_current_fig=[dir_current_fig dir_suffix '_' num2str(frame_window_short(1)) 'frames\']; + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\session_' num2str(key.session) '_' session_date '\']; + + +zoom =fetch1(IMG.FOVEpoch & key,'zoom'); +kkk.scanimage_zoom = zoom; +pix2dist= fetch1(IMG.Zoom2Microns & kkk,'fov_microns_size_x') / fetch1(IMG.FOV & key, 'fov_x_size'); + +try + frame_rate= fetch1(IMG.FOVEpoch & key, 'imaging_frame_rate'); +catch + frame_rate= fetch1(IMG.FOV & key, 'imaging_frame_rate'); +end + +timewind_stim=[0.25,1.5]; +% timewind_baseline=[0.25,1.5]-10; +% timewind_baseline = [-15,-5]; +% time = [-20: (1/frame_rate): 10]; + +timewind_baseline = [-5,0]; +time = [-5: (1/frame_rate): 11]; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +panel_width=0.15; +panel_height=0.2; +horizontal_distance=0.25; +vertical_distance=0.3; + +position_x(1)=0.13; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; +position_x(end+1)=position_x(end) + horizontal_distance; + +position_y(1)=0.65; +position_y(end+1)=position_y(end) - vertical_distance*0.7; +position_y(end+1)=position_y(end) - vertical_distance; + + + +G=fetch(IMG.PhotostimGroupROI & key,'*'); + + + +roi_list_direct=[G.roi_number]; +distance=[G.distance_to_closest_neuron]*pix2dist; + + +line_color=copper(numel(epoch_list)); +% line_color=flip(line_color); + + +for i_g=1:1:numel(roi_list_direct) + key.photostim_group_num = G(i_g).photostim_group_num; + + k1=key; + k1.roi_number = roi_list_direct(i_g); + + k2=key; + + + for i_epoch=1:1:numel(epoch_list) + k1.session_epoch_number = epoch_list(i_epoch); + + f_trace = fetch1(IMG.ROITrace & k1,'f_trace'); + f_trace_epoch{i_epoch} = f_trace; + photostim_start_frame = fetch1(IMG.PhotostimGroup & k1,'photostim_start_frame'); + % global_baseline=mean(movmin(f_trace_direct(i_epoch,:),1009)); + global_baseline=mean( f_trace); + + timewind_response = [ 0 2]; + timewind_baseline1 = [ -3 0]; + timewind_baseline2 = [-3 0] ; + timewind_baseline3 = [ -3 0]; + [~,StimTrace] = fn_compute_photostim_response (f_trace_epoch{i_epoch} , photostim_start_frame, timewind_response, timewind_baseline1,timewind_baseline2,timewind_baseline3, flag_baseline_trial_or_avg, global_baseline, time); + + + y=StimTrace.response_trace_mean; + y_smooth= movmean(y,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + ystem=StimTrace.response_trace_stem; + ystem_smooth= movmean(ystem,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); + + max_epoch(i_epoch)=max(y_smooth); + min_epoch(i_epoch)=min(y_smooth); + hold on; + plot(time,y_smooth,'Color',line_color(i_epoch,:)); + shadedErrorBar(time,y_smooth,ystem_smooth,'lineprops',{'-','Color',[0 0 0]}) + + end + ylim ([min([-0.2,min_epoch]),max([1 ,max_epoch])]); + xlabel('Time (s)'); + ylabel('\Delta F/F') + + + set(gca,'FontSize',60); + + + set(gca,'Ytick',[-0.2, 0, 1],'Xtick',[ 0, 5, 10]); + + title(sprintf('anm %d, session %d \n Direct photostimulation \n Target # %d \n Distance = %.1f um \n \n \n',k2.subject_id,k2.session,G(i_g).photostim_group_num, distance(i_g)),'FontSize',12); + + + +% pval(i_epoch)=StimStat.p_val; +% Fstim_mean(i_epoch)=StimStat.Fstim_mean; +% Fstim_coefvar(i_epoch) = StimStat.Fstim_coefvar; +% Fstim_meanwind_trials{i_epoch} = StimStat.Fstim_meanwind_trials; +% Fbase_control_meanwind_trials{i_epoch} = StimStat.Fbase_control_meanwind_trials; +% +% % Fstim_maxwind_trials{i_epoch} =StimStat.Fstim_maxwind_trials; +% % Fbase_control_maxwind_trials{i_epoch} = StimStat.Fbase_control_maxwind_trials; +% +% dFoverF_mean=StimTrace.dFoverF_mean; +% y_temp=dFoverF_mean; +% y_temp= movmean(y_temp,[smooth_bins 0], 2, 'omitnan','Endpoints','shrink'); +% y(i_epoch,:) = y_temp; +% idx_stim(1)=find(time>(timewind_stim(1)),1,'first'); +% idx_stim(2)=find(time<=(timewind_stim(2)),1,'last'); +% y_norm(i_epoch,:) = y_temp./max(y_temp(idx_stim(1):idx_stim(2))); +% +% end +% +% % Plot response +% axes('position',[position_x(1), position_y(1), panel_width, panel_height]); +% for i_epoch=1:1:numel(epoch_list) +% hold on; +% plot(time(2:end-1),y(i_epoch,2:end-1),'Color',line_color(i_epoch,:)); +% ylim ([min([-0.1,min(y(:))]),max([0.5 ,max(y(:))])]); +% xlabel('Time from photostim (s)'); +% ylabel('\Delta F/F'); +% end +% % title(sprintf('Photostim group=%d ROI=%d p=%.6f \ndistance = %.1f (pixels) response mean %.2f',G(i_g).photostim_group_num, k1.roi_number, pval(1), distance(i_g),Fstim_mean(1))); +% title(sprintf('Direct photostimulation \n Target # %d ROI=%d \n Distance = %.1f um \nResponse %.2f dF/F \n p-val=%.6f \n',G(i_g).photostim_group_num, k1.roi_number, distance(i_g), Fstim_mean(take_phtostim_groups_epoch), pval(take_phtostim_groups_epoch))); +% set(gca,'FontSize',10) +% xlim([-7.5,7.5]); + + +% % Plot normalized response +% axes('position',[position_x(2), position_y(1), panel_width, panel_height]); +% for i_epoch=1:1:numel(epoch_list) +% hold on; +% plot(time(2:end-1),y_norm(i_epoch, 2:end-1),'Color',line_color(i_epoch,:)); +% % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); +% ylim ([ nanmin([-0.1,nanmin(y_norm(:))]) , nanmax([nanmax(y_norm(:)),0.1]) ]); +% xlabel('Time from photostim (s)'); +% ylabel('\Delta F/F, normalized'); +% +% end +% set(gca,'FontSize',10) +% xlim([-7.5,7.5]); + +% % Plot response variability across trials +% for i_epoch=1:1:numel(epoch_list) +% axes('position',[position_x(i_epoch), position_y(2), panel_width, panel_height/2]); +% +% hold on; +% % xxx = Fstim_maxwind_trials{i_epoch}; +% % yyy = Fbase_control_maxwind_trials{i_epoch}; +% xxx = Fstim_meanwind_trials{i_epoch}; +% yyy = Fbase_control_meanwind_trials{i_epoch}; +% bins = linspace(min([xxx;yyy]),max([xxx;yyy]),25); +% +% h1=histogram(xxx,bins); +% h1.FaceColor=[0 0 1]; +% h1.Normalization = 'probability'; +% h1.EdgeColor='none'; +% % +% % h2=histogram(yyy,bins); +% % h2.Normalization = 'probability'; +% % h2.FaceColor=[0.5 .5 .5]; +% % h2.EdgeColor='none'; +% +% +% % plot(time(2:end-1),y_norm(i_epoch, 2:end-1),'Color',line_color(i_epoch,:)); +% % % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); +% % ylim ([ nanmin([-0.1,nanmin(y_norm(:))]) , nanmax([nanmax(y_norm(:)),0.1]) ]); +% % xlabel('Time (s)'); +% % ylabel('\Delta F/F, normalized'); +% set(gca,'FontSize',10); +% if i_epoch==1 +% xlabel((' Response \Delta F/F (mean over response window)')); +% ylabel('Percentage'); +% end +% title(sprintf('Session epoch #%d\nCV = %.1f',i_epoch, Fstim_coefvar(i_epoch))); +% end +% +% +% % Plot Baseline Fluourescene fluctutation. This is not the same "baseline" used for computing the photostim response +% axes('position',[position_x(1), position_y(3), panel_width, panel_height]); +% for i_epoch=1:1:numel(epoch_list) +% hold on; +% moving_minimum=movmin(f_trace_epoch{i_epoch},frame_rate*60); +% % smooth_b=smooth(smooth_b,100,'sgolay',3); +% % plot(f_trace_direct(i_epoch,:),'Color','k'); +% plot([1:1:numel(moving_minimum)]/frame_rate, moving_minimum,'Color',line_color(i_epoch,:)); +% % title(sprintf('Group=%d ROI=%d \ndistance=%.1f um',G(i_g).photostim_group_num, roi_list_direct(i_g), distance(i_g)*pix2dist)); +% end +% set(gca,'FontSize',10) +% title('Baseline Flourescence') +% ylabel('F'); +% xlabel('Time (s)') +% +% +% % k2.session_epoch_number = epoch_list(i_epoch); +% +% % roi_coupled=fetchn(STIM.ROIResponse & k2 & 'response_p_value<=0.05' & 'response_distance_pixels<=100','roi_number', 'ORDER BY response_mean'); +% % if ~isempty(roi_coupled) +% % roi_coupled=roi_coupled(end); +% % +% % k3=k2; +% % k3.roi_number = roi_coupled; +% % f_trace_coupled = fetch1(IMG.ROITrace & k3,'f_trace'); +% % [~,StimTrace] = fn_compute_photostim_response (f_trace_coupled, photostim_start_frame, frame_window); +% % dFoverF_mean=StimTrace.dFoverF_mean; +% % subplot(2,2,2+i_epoch) +% % hold on; +% % plot(time,dFoverF_mean,'Color',line_color{i_epoch}); +% % C=fetch(STIM.ROIResponse & k3,'*'); +% % +% % title(sprintf('Maximally coupled ROI=%d \ndistance=%.2f pval = %.4f', C.roi_number, C.response_distance_pixels, C.response_p_value)); +% % +% % end +% % + + + if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) + end + % + filename=['photostim_group_' num2str(G(i_g).photostim_group_num)]; + figure_name_out=[ dir_current_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r300']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + + clf; + + +end diff --git a/analysis/photostim/plot_photostim_targets_on_suite2p.m b/analysis/photostim/plot_photostim_targets_on_suite2p.m new file mode 100644 index 0000000..97d446c --- /dev/null +++ b/analysis/photostim/plot_photostim_targets_on_suite2p.m @@ -0,0 +1,61 @@ +function plot_photostim_targets_on_suite2p() +close all + +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\Photostim_targets_map\']; +% key.subject_id = 447990; +% key.session =1; +key.subject_id = 447991; +key.session= 11; +epoch_list = fetchn(EXP2.SessionEpoch & 'session_epoch_type="spont_photo"' & key, 'session_epoch_number','ORDER BY session_epoch_number'); +key.session_epoch_number = epoch_list(end); % to take the photostim groups from + + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +session_date = fetch1(EXP2.Session & key,'session_date'); +dir_current_fig = [dir_current_fig '\anm' num2str(key.subject_id) '\']; +filename=['distance_session_' num2str(key.session) '_' session_date ]; + + + + +% G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=1' & 'distance_to_closest_neuron<15','*'); +G=fetch(IMG.PhotostimGroupROI & key & 'flag_neuron_or_control=1','*'); +R=fetch((IMG.ROI) & key & IMG.ROIGood,'*'); + + +mean_img_enhanced = fetch1(IMG.Plane & key,'mean_img_enhanced'); + +imagesc(mean_img_enhanced) +colormap(gray) +hold on + +for i_f=1:1:numel(R) + x=R(i_f).roi_centroid_x; + y=R(i_f).roi_centroid_y; + plot(x,y,'og') +end +title(sprintf('anm%d session%d %s',key.subject_id, key.session, session_date )); +for i_f=1:1:numel(G) + x=G(i_f).photostim_center_x; + y=G(i_f).photostim_center_y; + plot(x,y,'*m') +end +axis equal +axis tight; + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r500']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/plot_psth/fn_plot_imaging_psth.m b/analysis/plot_psth/fn_plot_imaging_psth.m new file mode 100644 index 0000000..f1bbbc8 --- /dev/null +++ b/analysis/plot_psth/fn_plot_imaging_psth.m @@ -0,0 +1,166 @@ +function fn_populate_imaging_psth(key, session_date) + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PSTH\AF09_anm437545\' session_date '\']; + + +b=fetch(EXP.BehaviorTrial&(EXP.Session & key),'*','ORDER BY trial'); +b=struct2table(b); +left_hit = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit')); +right_hit = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit')); +left_miss = find(contains(b.trial_instruction,'left') & contains(b.outcome,'miss')); +right_miss = find(contains(b.trial_instruction,'right') & contains(b.outcome,'miss')); + +bEvent=fetch(EXP.BehaviorTrialEvent & (EXP.Session & key),'*','ORDER BY trial'); + +aEvent=fetch(EXP.ActionEvent & (EXP.Session & key),'*','ORDER BY trial'); +histogram([aEvent.action_event_time]) + +trial_event_time = [bEvent.trial_event_time]; +time_go = mode(trial_event_time (contains({bEvent.trial_event_type},'go'))); +time_sample_start = mode(trial_event_time (contains({bEvent.trial_event_type},'sound sample start'))) - time_go; +time_sample_end = mode(trial_event_time (contains({bEvent.trial_event_type},'sound sample end'))) - time_go; + + + +roi_list=fetch(IMAGING.ROI & key); + +k=key; +k.fov_number = roi_list(1).fov_number(1); + +k.roi_number=1; +frames_per_trial=fetchn(IMAGING.FTraceROITrial & k,'frames_per_trial'); +f_trace_timestamps=fetchn(IMAGING.FTraceROITrial & k,'f_trace_timestamps'); + +[~,longest_trial_idx] = max(frames_per_trial); +t=f_trace_timestamps{longest_trial_idx}; +t=t-time_go; + + +F=zeros(numel(frames_per_trial),max(frames_per_trial)) + NaN; + +for iROI = 1:numel(roi_list) %15,49,34,25 + + k.roi_number=iROI; + FXTr=fetchn(IMAGING.FTraceROITrial & k,'f_trace'); + + for iTr=1:1:numel(FXTr) + F(iTr,1:numel(FXTr{iTr}))=FXTr{iTr}; + end + + BehavTrial=fetch(EXP.BehaviorTrial & key,'*'); + + % Hit + subplot(2,3,1) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x1.all=F(left_hit,:); + x1.m=mean(x1.all); + x1.stem =std(x1.all)/sqrt(numel(left_hit)); + shadedErrorBar(t,x1.m, x1.stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + x2.all=F(right_hit,:); + x2.m=mean(x2.all); + x2.stem =std(x2.all)/sqrt(numel(right_hit)); + shadedErrorBar(t,x2.m, x2.stem,'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + ylim( [nanmin([x1.m,x2.m]) , nanmax([x1.m,x2.m])+eps]); + title(sprintf('ROI %d\nHit',iROI)); + ylabel('F'); + xlim([-4,4]); + + % Miss + subplot(2,3,2) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x1.all=F(left_miss,:); + x1.m=mean(x1.all); + x1.stem =std(x1.all)/sqrt(numel(left_miss)); + shadedErrorBar(t,x1.m, x1.stem,'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + x2.all=F(right_miss,:); + x2.m=mean(x2.all); + x2.stem =std(x2.all)/sqrt(numel(right_miss)); + shadedErrorBar(t,x2.m, x2.stem,'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + ylim( [nanmin([x1.m,x2.m]) , nanmax([x1.m,x2.m])+eps]); + title(sprintf('Miss',iROI)); + ylabel('F'); + xlim([-4,4]); + + % Selectivity + subplot(2,3,3) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x=mean(F(right_hit,:)) -mean(F(left_hit,:)); + plot(t,x,'-k'); + ylim( [nanmin(x) , nanmax(x)+eps]); + title('Selectivity, Hit'); + xlim([-4,4]); + + subplot(2,3,6) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x=mean(F(right_miss,:)) -mean(F(left_miss,:)); + plot(t,x,'-k'); + ylim( [nanmin(x) , nanmax(x)+eps]); + title('Selectivity, Miss'); + xlim([-4,4]); + + + % Hit-Miss + subplot(2,3,4) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x=mean(F(left_hit,:)) -mean(F(left_miss,:)); + plot(t,x,'-r'); + ylim( [nanmin(x) , nanmax(x)+eps]); + title('Left, Hit-Miss'); + xlabel('Time (s)'); + ylabel('F'); + xlim([-4,4]); + + subplot(2,3,5) + hold on; + plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + x=mean(F(right_hit,:)) -mean(F(right_miss,:)); + plot(t,x,'-b'); + ylim( [nanmin(x) , nanmax(x)+eps]); + title('Right, Hit-Miss'); + xlim([-4,4]); + + % subplot(2,3,6) + % hold on; + % plot([time_sample_start,time_sample_start],[-1000,1000],'-k'); + % plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + % plot([0,0],[-1000,1000],'-k'); + % selectivity_hit=mean(F(right_hit,:)) -mean(F(left_hit,:)); + % selectivity_miss=mean(F(right_miss,:)) -mean(F(left_miss,:)); + % x=selectivity_hit-selectivity_miss; + % plot(t,x); + % ylim( [nanmin(x) , nanmax(x)]); + % title('Selectivity, Hit-Miss'); + + + + + + + + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['ROI' num2str(iROI) '_' session_date ]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; + +end diff --git a/analysis/plot_psth/fn_plot_imaging_psth_across_days.m b/analysis/plot_psth/fn_plot_imaging_psth_across_days.m new file mode 100644 index 0000000..92cb8aa --- /dev/null +++ b/analysis/plot_psth/fn_plot_imaging_psth_across_days.m @@ -0,0 +1,135 @@ +function fn_plot_imaging_psth_across_days (k, first_date, dir_save_figure_base,rel_inclusion) + + +k.session_date=first_date; +key=fetch(EXP2.Session & k); +roi_list=fetchn(IMG.ROI & rel_inclusion & key,'roi_number', 'ORDER BY roi_number'); + +kk.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +multiple_session_list = fetchn(IMG.FOVmultiSessions & kk,'session'); + + +panel_width1=0.6/numel(multiple_session_list); +panel_height1=0.11; +horizontal_distance1=0.8/numel(multiple_session_list); +vertical_distance1=0.17; + + +position_x1(1)=0.06; + +position_y1(1)=0.8; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; + + + + + +fov_name = fetchn(IMG.FOV & key, 'fov_name'); + +for iROI = 1:numel(roi_list) %15,49,34,25 + + for i_s = 1:1:numel(multiple_session_list) + + position_x1(end+1)=position_x1(end)+horizontal_distance1; + + key.session = multiple_session_list(i_s); + key.roi_number=roi_list(iROI); + + baseline_median(i_s) = fetchn(IMG.ROI & key,'baseline_fl_median'); + baseline_trials = cell2mat(fetchn(IMG.ROI & key,'baseline_fl_trials')); + + F=fetch(ANLI.FPSTHaverage & key,'*'); + + + + time_sample_start = F(1).time_sample_start; + time_sample_end = F(1).time_sample_end; + + Signif=fetch(ANLI.TaskSignifROI & key,'*', 'ORDER BY task_signif_name_uid'); + + % Hit + axes('position',[position_x1(i_s) position_y1(1) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + idx2=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'r')); + shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + title(sprintf('Session %d\nCorrect\n p S=%.7f \nD=%.7f\n M=%.7f \nR=%.7f',multiple_session_list(i_s), Signif(1).task_signif_pval, Signif(2).task_signif_pval, Signif(3).task_signif_pval, Signif(4).task_signif_pval)); + if i_s==1 + ylabel('\DeltaF/F'); + title(sprintf('ROI %d\nSession %d\nCorrect\n p S=%.5f \nD=%.5f\n M=%.5f \nR=%.5f',roi_list(iROI),multiple_session_list(i_s), Signif(1).task_signif_pval, Signif(2).task_signif_pval, Signif(3).task_signif_pval, Signif(4).task_signif_pval)); + end + xlim([-4,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + % Miss %a(i_s)= + axes('position',[position_x1(i_s) position_y1(2) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + idx2=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'r')); + shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).psth_avg(idx_t), F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t), F(idx2).psth_avg(idx_t),0])+eps]); + title(sprintf('Error')); + if i_s==1 + ylabel('\DeltaF/F'); + end + xlim([-4,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + + % Baseline change over time (trials) + axes('position',[position_x1(i_s) position_y1(3) panel_width1 panel_height1]); + hold on; + smooth_b=smooth(baseline_trials,10,'rlowess',1); + plot(baseline_trials); + plot(smooth_b,'-k'); + + xlabel('Trials') + if i_s==1 + ylabel('Baseline Fluorescence'); + end + + + end + + + + axes('position',[position_x1(1) position_y1(4) panel_width1 panel_height1]); + hold on; + plot(multiple_session_list,baseline_median,'.-'); + xlabel('Session #'); + ylabel(sprintf('Median \nBaseline Fluorescence')); + xlimits=[multiple_session_list(1) multiple_session_list(end)]; + set(gca,'xlim', xlimits,'Xtick',multiple_session_list); + ylim([0 nanmax([baseline_median,eps])]); + + dir_save_figure = [dir_save_figure_base fov_name{1} 'from' first_date '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['ROI_' num2str(roi_list(iROI))]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; + +end diff --git a/analysis/plot_psth/fn_plot_imaging_psth_rawtrials_across_days.m b/analysis/plot_psth/fn_plot_imaging_psth_rawtrials_across_days.m new file mode 100644 index 0000000..33bd304 --- /dev/null +++ b/analysis/plot_psth/fn_plot_imaging_psth_rawtrials_across_days.m @@ -0,0 +1,203 @@ +function fn_populate_imaging_psth_rawtrials_across_days (k, first_date, dir_save_figure_base) + + +k.session_date=first_date; +key=fetch(EXP2.Session & k); +roi_list=fetchn(IMG.ROI & key,'roi_number', 'ORDER BY roi_number'); + +kk.multiple_sessions_uid = fetchn(IMG.FOVmultiSessions & key,'multiple_sessions_uid'); + +multiple_session_list = fetchn(IMG.FOVmultiSessions & kk,'session'); + + +panel_width1=0.07; +panel_width2=0.3; + +panel_height1=0.1; +vertical_distance1=0.13; + + +position_x1(1)=0.05; +position_x1(end+1)=0.19; +position_x1(end+1)=0.29; +position_x1(end+1)=0.65; +position_x1(end+1)=0.74; +position_x1(end+1)=0.83; +position_x1(end+1)=0.91; + +position_y1(1)=0.85; +position_y1(2)=position_y1(1)-vertical_distance1; +position_y1(3)=position_y1(2)-vertical_distance1; +position_y1(4)=position_y1(3)-vertical_distance1; +position_y1(5)=position_y1(4)-vertical_distance1; +position_y1(6)=position_y1(5)-vertical_distance1; +position_y1(7)=position_y1(6)-vertical_distance1; + +panel_width3=0.075; +panel_height2=0.03; +vertical_distance2=0.03; +position_y2(1)=0; +position_y2(2)=position_y2(1)+vertical_distance2; +position_y2(3)=position_y2(2)+vertical_distance2; +position_y2(4)=position_y2(3)+vertical_distance2; +position_y2(5)=position_y2(4)+vertical_distance2; + + +fov_name = fetchn(IMG.FOV & key, 'fov_name'); +trial_type_name_list={'l','r'}; +trial_color{1}=[1 0 0]; +trial_color{2}=[0 0 1]; + +for iROI = 1:numel(roi_list) + for i_type = 1:1:numel(trial_type_name_list) + key_trialtype.trial_type_name = trial_type_name_list {i_type}; + for i_s = 1:1:numel(multiple_session_list) + + + key.session = multiple_session_list(i_s); + key.roi_number=roi_list(iROI); + + baseline_median(i_s) = fetchn(IMG.ROI & key,'baseline_fl_median'); + baseline_trials = cell2mat(fetchn(IMG.ROI & key,'baseline_fl_trials')); + + + + F=fetch(ANLI.FPSTHaverage & key,'*'); + + + + time_sample_start = F(1).time_sample_start; + time_sample_end = F(1).time_sample_end; + + + % Hit + axes('position',[position_x1(2) position_y1(i_s) panel_width1 panel_height1]); + hold on; + idx1=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'l')); + t=F(idx1).psth_timestamps; + idx_t=(t<3); + shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + idx2=find(strcmp({F.outcome},'hit') & strcmp({F.trial_type_name},'r')); + shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + plot([0,0],[-1000,1000],'-k'); + yl=( [nanmin([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t),F(idx2).psth_avg(idx_t),0])+eps]); + if i_s==1 + title(sprintf('ROI %d\nCorrect',iROI)); + end + ylabel([sprintf('Session %d\n',multiple_session_list(i_s)), '\DeltaF/F' ]); + xlim([-3,3]); + ylim(yl); + xlabel('Time (s)'); + set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + % % Miss %a(i_s)= + % axes('position',[position_x1(i_s) position_y1(2) panel_width1 panel_height1]); + % hold on; + % idx1=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'l')); + % t=F(idx1).psth_timestamps; + % idx_t=(t<3); + % shadedErrorBar(t(idx_t) ,F(idx1).psth_avg(idx_t), F(idx1).psth_stem(idx_t),'lineprops',{'-','Color','r','markeredgecolor','r','markerfacecolor','r','linewidth',1}); + % idx2=find(strcmp({F.outcome},'miss') & strcmp({F.trial_type_name},'r')); + % shadedErrorBar(t(idx_t) ,F(idx2).psth_avg(idx_t), F(idx2).psth_stem(idx_t),'lineprops',{'-','Color','b','markeredgecolor','b','markerfacecolor','b','linewidth',1}); + % plot([time_sample_start ,time_sample_start],[-1000,1000],'-k'); + % plot([time_sample_end,time_sample_end],[-1000,1000],'-k'); + % plot([0,0],[-1000,1000],'-k'); + % yl=( [nanmin([F(idx1).psth_avg(idx_t), F(idx2).psth_avg(idx_t),0]) , nanmax([F(idx1).psth_avg(idx_t), F(idx2).psth_avg(idx_t),0])+eps]); + % title(sprintf('Error')); + % if i_s==1 + % ylabel('\DeltaF/F'); + % end + % xlim([-4,3]); + % ylim(yl); + % xlabel('Time (s)'); + % set(gca,'YTick',yl,'YTickLabel',{num2str(yl(1),'%.1f'), num2str(yl(2),'%.1f')}); + + + + + + + % Baseline change over time (trials) + axes('position',[position_x1(1) position_y1(i_s) panel_width1 panel_height1]); + hold on; + smooth_b=smooth(baseline_trials,10,'rlowess',1); + plot(baseline_trials); + plot(smooth_b,'-k'); + ylabel('Baseline F'); + xlabel('Trials') + + + Ftrial=fetch(ANLI.FPSTHtrial & key & key_trialtype & 'outcome="hit"' ,'*','ORDER BY trial'); + % time_abs=cellfun(@abs,{Ftrial.psth_timestamps},'UniformOutput',false); + % [~,idx]=cellfun(@min,time_abs); + + + axes('position',[position_x1(3) position_y1(i_s) panel_width2 panel_height1]); + hold on; + Ftrial_concat=[Ftrial.psth_trial]; + yl=([nanmin([Ftrial_concat,0]),nanmax([Ftrial_concat,eps])]); + + + tot_frames=0; + for i_tr=1:1:numel(Ftrial) + time_abs = abs(Ftrial(i_tr).psth_timestamps); + [~,idx]=min(time_abs); + idx_go (i_tr) = idx +tot_frames; + tot_frames= tot_frames + numel(time_abs); + plot([idx_go(i_tr) idx_go(i_tr)],yl,'-k'); + end + + plot(Ftrial_concat,'Color',trial_color {i_type}); + ylim(yl); + xlim([0 tot_frames]); + ylabel('\DeltaF/F'); + xlabel('Frames'); + + box off; + + + + + + trial2plot=floor(linspace(5,numel(Ftrial)-5,12)); + counter=1; + for ii= 1:1:numel(trial2plot)/3 + for jj= 1:1:numel(trial2plot)/4 + axes('position',[position_x1(3+ii) position_y1(i_s)+position_y2(jj) panel_width3 panel_height2]); + hold on; + tr=trial2plot(counter); + plot([0,0],yl,'-k'); + plot(Ftrial(tr).psth_timestamps ,Ftrial(tr).psth_trial,'Color',trial_color {i_type}) + ylim(yl); + xlim([-3,3]); + if counter==1 + xlabel('Time (s)'); + ylabel('\DeltaF/F'); + set(gca,'Ytick',[0 yl(2)],'Yticklabels',[{0},{sprintf('%.1f',yl(2))}]); + else + set(gca,'Ytick',[0 yl(2)],'Yticklabels',[]); + set(gca,'Xticklabels',[]); + axis off; + end + box off; + + counter=counter+1; + end + end + end + + + + dir_save_figure = [dir_save_figure_base fov_name{1} 'from' first_date '\']; + if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) + end + + filename=['ROI_' num2str(iROI) '_' trial_type_name_list{i_type}]; + figure_name_out=[ dir_save_figure filename]; + eval(['print ', figure_name_out, ' -dtiff -cmyk -r200']); + clf; + end +end diff --git a/analysis/plot_psth/plot_imaging_psth.m b/analysis/plot_psth/plot_imaging_psth.m new file mode 100644 index 0000000..5cb605c --- /dev/null +++ b/analysis/plot_psth/plot_imaging_psth.m @@ -0,0 +1,27 @@ +function populate_imaging_psth() +close all; + +anm=437545; + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +% date{end+1}='2019_02_04'; +% date{end+1}='2019_02_05'; + +for i=1:1:numel(date) + k.subject_id=anm; + k.session_date=date{i}; + + key=fetch(EXP.Session&k); + fn_populate_imaging_psth(key,k.session_date) + +end + + + + diff --git a/analysis/plot_psth/plot_imaging_psth_across_days.m b/analysis/plot_psth/plot_imaging_psth_across_days.m new file mode 100644 index 0000000..93ff027 --- /dev/null +++ b/analysis/plot_psth/plot_imaging_psth_across_days.m @@ -0,0 +1,28 @@ +function plot_imaging_psth_across_days() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PSTH\multiday_intersect\AF09_anm437545\']; +anm=437545; + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 -5 23*1.2 25*1.4]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% rel_inclusion=ANLI.IncludeROImultiSession2intersect; +rel_inclusion=[]; +for i=1:1:numel(first_date) + key.subject_id=anm; + fn_plot_imaging_psth_across_days (key, first_date{i}, dir_save_figure,rel_inclusion) +end + + + + diff --git a/analysis/plot_psth/plot_imaging_psth_cluster.m b/analysis/plot_psth/plot_imaging_psth_cluster.m new file mode 100644 index 0000000..129320a --- /dev/null +++ b/analysis/plot_psth/plot_imaging_psth_cluster.m @@ -0,0 +1,28 @@ +function populate_imaging_psth_cluster() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PSTHlongitudinal_cluster_intersect\AF09_anm437545\']; +anm=437545; + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 -5 23*1.2 25*1.4]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +rel_inclusion=ANLI.IncludeROImultiSession2intersect; + +for i=1:1:numel(first_date) + key.subject_id=anm; + fn_populate_imaging_psth_cluster (key, first_date{i}, dir_save_figure, rel_inclusion) +end + + + + diff --git a/analysis/plot_psth/plot_imaging_psth_rawtrials_across_days.m b/analysis/plot_psth/plot_imaging_psth_rawtrials_across_days.m new file mode 100644 index 0000000..8e1ecec --- /dev/null +++ b/analysis/plot_psth/plot_imaging_psth_rawtrials_across_days.m @@ -0,0 +1,27 @@ +function populate_imaging_psth_rawtrials_across_days() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PSTHlongitudinalRawTrials\AF09_anm437545\']; +anm=437545; + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 -5 23*1.2 25*1.4]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +for i=1:1:numel(first_date) + key.subject_id=anm; + fn_populate_imaging_psth_rawtrials_across_days (key, first_date{i}, dir_save_figure) +end + + + + diff --git a/analysis/population/PLOT_SVDSpatialScaleTau.m b/analysis/population/PLOT_SVDSpatialScaleTau.m new file mode 100644 index 0000000..935aac1 --- /dev/null +++ b/analysis/population/PLOT_SVDSpatialScaleTau.m @@ -0,0 +1,85 @@ +function PLOT_SVDSpatialScaleTau() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; +clf; + + +rel_data1 = POP.ROISVDDistanceScale & (IMG.Mesoscope- IMG.Volumetric); + +smooth_window_scale = 10; + +DefaultFontSize =16; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.2; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + +DATA=fetch(rel_data1 & 'session_epoch_type="behav_only"','*'); +num_sessions = numel(DATA); +num_components_behav = min([DATA.num_components]); +for i=1:1:num_sessions + Scale_behav (i,:) = smooth(DATA(i).distance_tau(1:1:num_components_behav),smooth_window_scale); +end + +Scale_behav_mean = mean(Scale_behav,1); +Scale_behav_stem = std(Scale_behav,1)./sqrt(num_sessions); + + + +DATA=fetch(rel_data1 & 'session_epoch_type="spont_only"' ,'*'); +num_sessions = numel(DATA); +num_components_spont = min([DATA.num_components]); +for i=1:1:num_sessions + Scale_spont (i,:) = smooth(DATA(i).distance_tau(1:1:num_components_spont),smooth_window_scale); +end + +Scale_spont_mean = mean(Scale_spont,1); +Scale_spont_stem = std(Scale_spont,1)./sqrt(num_sessions); + +%% PLOT +x_behav = 1:1:num_components_behav; +y_behav = Scale_behav_mean; +err_behav = [Scale_behav_mean+Scale_behav_stem; Scale_behav_mean - Scale_behav_stem]; + +x_spont= 1:1:num_components_spont; +y_spont = Scale_spont_mean; +err_spont = [Scale_spont_mean+Scale_spont_stem; Scale_spont_mean - Scale_spont_stem]; + +subplot(2,2,1) +hold on +patch([x_behav, fliplr(x_behav)], [err_behav(1,:), fliplr(err_behav(2,:))], 'b', 'FaceAlpha',0.5, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_behav, y_behav,'-b') + +patch([x_spont, fliplr(x_spont)], [err_spont(1,:), fliplr(err_spont(2,:))], 'r', 'FaceAlpha',0.5, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_spont, y_spont,'-r') + +set(gca, 'XScale','log', 'YScale','log') +xlabel('PC dimension'); +ylabel('Spatial scale (\um)'); +text(100,0.01,'Behavior', 'Color', [0 0 1]); +text(100,0.005,'Spontaneous', 'Color', [1 0 0]); +box off +text(50,1500,'Behavior', 'Color', [0 0 1]); +text(50,1000,'Spontaneous', 'Color', [1 0 0]); + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/population/PLOT_SVDVariance.m b/analysis/population/PLOT_SVDVariance.m new file mode 100644 index 0000000..6d4c5d2 --- /dev/null +++ b/analysis/population/PLOT_SVDVariance.m @@ -0,0 +1,101 @@ +function PLOT_SVDVariance() +close all +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +rel_data2 = POP.SVDSingularValuesSpikes & (IMG.Mesoscope- IMG.Volumetric) & 'threshold_for_event=0' & 'time_bin=1.5'; + + +DefaultFontSize =16; +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + + +%% BEHAVIOR +DATA=fetch(rel_data2 & 'session_epoch_type="behav_only"','*'); +num_sessions = numel(DATA); + +for i=1:1:num_sessions + num_components_behav(i) = numel(DATA(i).singular_values); +end +num_components_behav = min(num_components_behav); + +for i=1:1:num_sessions + v = DATA(i).singular_values; + ve =v.^2/sum(v.^2); % a feature of SVD. proportion of variance explained by each component + VE_behav (i,:) = ve(1:1:num_components_behav); +end +VE_behav_mean = mean(VE_behav,1); +VE_behav_stem = std(VE_behav,1)./sqrt(num_sessions); + +%% SPONT +DATA=fetch(rel_data2 & 'session_epoch_type="spont_only"' ,'*'); +num_sessions = numel(DATA); +for i=1:1:num_sessions + num_components_spont(i) = numel(DATA(i).singular_values); +end +num_components_spont = min(num_components_spont); + +for i=1:1:num_sessions + v = DATA(i).singular_values; + ve =v.^2/sum(v.^2); % a feature of SVD. proportion of variance explained by each component + VE_spont (i,:) = ve(1:1:num_components_spont); +end +VE_spont_mean = mean(VE_spont,1); +VE_spont_stem = std(VE_spont,1)./sqrt(num_sessions); + + +% cumulative_variance_explained=cumsum(variance_explained); + % plot(cumulative_variance_explained); + % xlabel('Component') + % ylabel('Cumulative explained variance'); + + + %% PLOT +x_behav = 1:1:num_components_behav; +err_behav = [VE_behav_mean+VE_behav_stem; VE_behav_mean - VE_behav_stem]; +x_spont= 1:1:num_components_spont; +err_spont = [VE_spont_mean+VE_spont_stem; VE_spont_mean - VE_spont_stem]; + +subplot(2,2,1) +hold on +patch([x_behav, fliplr(x_behav)], [err_behav(1,:), fliplr(err_behav(2,:))], 'b', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_behav, VE_behav_mean,'-b') + +patch([x_spont, fliplr(x_spont)], [err_spont(1,:), fliplr(err_spont(2,:))], 'r', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_spont, VE_spont_mean,'-r') +set(gca, 'XScale','log', 'YScale','log') +xlabel('PC dimension'); +ylabel('Spatial scale (\mum)'); +text(100,0.01,'Behavior', 'Color', [0 0 1]); +text(100,0.005,'Spontaneous', 'Color', [1 0 0]); +box off + +% loglog (1:1:num_components_behav, smooth(VE_behav_mean,10),'-b') +% hold on +% loglog (1:1:num_components_spont, smooth(VE_spont_mean,10),'-r') + + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/population/PLOT_SVDVarianceShared.m b/analysis/population/PLOT_SVDVarianceShared.m new file mode 100644 index 0000000..77e533e --- /dev/null +++ b/analysis/population/PLOT_SVDVarianceShared.m @@ -0,0 +1,99 @@ +function PLOT_SVDVarianceShared() +close all +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\Photostim\photostim_distance\']; + +rel_data2 = POP.ROISVDCrossValid & (IMG.Mesoscope- IMG.Volumetric) & 'threshold_for_event=0' & 'time_bin=1.5'; + + +DefaultFontSize =16; +figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + +% set(gcf,'DefaultAxesFontSize',6); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.25; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + + +%% BEHAVIOR +DATA=fetch(rel_data2 & 'session_epoch_type="behav_only"','*'); +num_sessions = numel(DATA); + +for i=1:1:num_sessions + num_components_behav(i) = numel(DATA(i).var_explained_test); +end +num_components_behav = min(num_components_behav); + +for i=1:1:num_sessions + v = DATA(i).var_explained_test; + VE_behav (i,:) = v(1:1:num_components_behav); +end +VE_behav_mean = mean(VE_behav,1); +VE_behav_stem = std(VE_behav,1)./sqrt(num_sessions); + +%% SPONT +DATA=fetch(rel_data2 & 'session_epoch_type="spont_only"' ,'*'); +num_sessions = numel(DATA); +for i=1:1:num_sessions + num_components_spont(i) = numel(DATA(i).var_explained_test); +end +num_components_spont = min(num_components_spont); + +for i=1:1:num_sessions + v = DATA(i).var_explained_test; + VE_spont (i,:) = v(1:1:num_components_spont); +end +VE_spont_mean = mean(VE_spont,1); +VE_spont_stem = std(VE_spont,1)./sqrt(num_sessions); + + +% cumulative_variance_explained=cumsum(variance_explained); + % plot(cumulative_variance_explained); + % xlabel('Component') + % ylabel('Cumulative explained variance'); + + + %% PLOT +x_behav = 1:1:num_components_behav; +err_behav = [VE_behav_mean+VE_behav_stem; VE_behav_mean - VE_behav_stem]; +x_spont= 1:1:num_components_spont; +err_spont = [VE_spont_mean+VE_spont_stem; VE_spont_mean - VE_spont_stem]; + +subplot(2,2,1) +hold on +patch([x_behav, fliplr(x_behav)], [err_behav(1,:), fliplr(err_behav(2,:))], 'b', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_behav, VE_behav_mean,'-b') + +patch([x_spont, fliplr(x_spont)], [err_spont(1,:), fliplr(err_spont(2,:))], 'r', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_spont, VE_spont_mean,'-r') +set(gca, 'XScale','log', 'YScale','log') +xlabel('PC dimension'); +ylabel('Shared Variance'); +text(100,0.01,'Behavior', 'Color', [0 0 1]); +text(100,0.005,'Spontaneous', 'Color', [1 0 0]); +box off + +% loglog (1:1:num_components_behav, smooth(VE_behav_mean,10),'-b') +% hold on +% loglog (1:1:num_components_spont, smooth(VE_spont_mean,10),'-r') + + + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + diff --git a/analysis/population/PLOT_SVD_Variance_and_SpatialScale.m b/analysis/population/PLOT_SVD_Variance_and_SpatialScale.m new file mode 100644 index 0000000..c79350f --- /dev/null +++ b/analysis/population/PLOT_SVD_Variance_and_SpatialScale.m @@ -0,0 +1,172 @@ +function PLOT_SVD_Variance_and_SpatialScale() +dir_base = fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_current_fig = [dir_base '\POP\SVD\']; +filename = 'SVD_variance_and_spatial_scale'; +close all + +rel_data1 = POP.ROISVDDistanceScale & (IMG.Mesoscope & IMG.Volumetric); +rel_data2 = POP.SVDSingularValues & (IMG.Mesoscope & IMG.Volumetric) & 'threshold_for_event=0' & 'time_bin=1.5'; + +smooth_window_scale = 3; + +DefaultFontSize =16; +% figure +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 0 23 30]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + + +horizontal_dist=0.35; +vertical_dist=0.35; + +panel_width1=0.2; +panel_height1=0.2; +position_x1(1)=0.2; +position_x1(end+1)=position_x1(end)+horizontal_dist; + +position_y1(1)=0.5; +position_y1(end+1)=position_y1(end)-vertical_dist; + + + +%% Variance +%-------------------------------------------------------------- + +% Variance behavior +%--------------- +DATA=fetch(rel_data2 & 'session_epoch_type="behav_only"','*'); +num_sessions = numel(DATA); + +for i=1:1:num_sessions + num_components_behav(i) = numel(DATA(i).singular_values); +end +num_components_behav = min(num_components_behav); + +for i=1:1:num_sessions + v = DATA(i).singular_values; + ve =v.^2/sum(v.^2); % a feature of SVD. proportion of variance explained by each component + VE_behav (i,:) = ve(1:1:num_components_behav); +end +VE_behav_mean = mean(VE_behav,1); +VE_behav_stem = std(VE_behav,1)./sqrt(num_sessions); + + + +% Variance Spont +%--------------- +DATA=fetch(rel_data2 & 'session_epoch_type="spont_only"' ,'*'); +num_sessions = numel(DATA); +for i=1:1:num_sessions + num_components_spont(i) = numel(DATA(i).singular_values); +end +num_components_spont = min(num_components_spont); + +for i=1:1:num_sessions + v = DATA(i).singular_values; + ve =v.^2/sum(v.^2); % a feature of SVD. proportion of variance explained by each component + VE_spont (i,:) = ve(1:1:num_components_spont); +end +VE_spont_mean = mean(VE_spont,1); +VE_spont_stem = std(VE_spont,1)./sqrt(num_sessions); + +% cumulative_variance_explained=cumsum(variance_explained); + % plot(cumulative_variance_explained); + % xlabel('Component') + % ylabel('Cumulative explained variance'); + + +% Variance plot +%--------------- +x_behav = 1:1:num_components_behav; +err_behav = [VE_behav_mean+VE_behav_stem; VE_behav_mean - VE_behav_stem]; +x_spont= 1:1:num_components_spont; +err_spont = [VE_spont_mean+VE_spont_stem; VE_spont_mean - VE_spont_stem]; + +subplot(2,2,1) +hold on +patch([x_behav, fliplr(x_behav)], [err_behav(1,:), fliplr(err_behav(2,:))], 'b', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_behav, VE_behav_mean,'-b') + +patch([x_spont, fliplr(x_spont)], [err_spont(1,:), fliplr(err_spont(2,:))], 'r', 'FaceAlpha',0.2, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_spont, VE_spont_mean,'-r') +set(gca, 'XScale','log', 'YScale','log') +xlabel('PC dimension'); +ylabel('Variance'); +text(1.5, 0.001 ,'Behavior', 'Color', [0 0 1]); +text(1.5,0.0005,'Spontaneous', 'Color', [1 0 0]); +box off +xlim([1 1000]) +ylim([0.0001 0.15]) +set(gca,'XTick', [1,10,100,1000], 'Ytick', [0.0001 0.001 0.01 0.1]) + + +%% Spatial Scale +%------------------------------ + +% Spatial scale Behavior +%-------------- +DATA=fetch(rel_data1 & 'session_epoch_type="behav_only"','*'); +num_sessions = numel(DATA); +num_components_behav = min([DATA.num_components]); +for i=1:1:num_sessions + Scale_behav (i,:) = smooth(DATA(i).distance_tau(1:1:num_components_behav),smooth_window_scale); +end + +Scale_behav_mean = mean(Scale_behav,1); +Scale_behav_stem = std(Scale_behav,1)./sqrt(num_sessions); + + +% Spatial scale Spont +%--------------- +DATA=fetch(rel_data1 & 'session_epoch_type="spont_only"' ,'*'); +num_sessions = numel(DATA); +num_components_spont = min([DATA.num_components]); +for i=1:1:num_sessions + Scale_spont (i,:) = smooth(DATA(i).distance_tau(1:1:num_components_spont),smooth_window_scale); +end + +Scale_spont_mean = mean(Scale_spont,1); +Scale_spont_stem = std(Scale_spont,1)./sqrt(num_sessions); + +% Spatial scale plot +%--------------- +x_behav = 1:1:num_components_behav; +y_behav = Scale_behav_mean; +err_behav = [Scale_behav_mean+Scale_behav_stem; Scale_behav_mean - Scale_behav_stem]; + +x_spont= 1:1:num_components_spont; +y_spont = Scale_spont_mean; +err_spont = [Scale_spont_mean+Scale_spont_stem; Scale_spont_mean - Scale_spont_stem]; + +subplot(2,2,2) +hold on +patch([x_behav, fliplr(x_behav)], [err_behav(1,:), fliplr(err_behav(2,:))], 'b', 'FaceAlpha',0.5, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_behav, y_behav,'-b') +patch([x_spont, fliplr(x_spont)], [err_spont(1,:), fliplr(err_spont(2,:))], 'r', 'FaceAlpha',0.5, 'EdgeColor', 'none') % Shaded Confidence Intervals +plot(x_spont, y_spont,'-r') +set(gca, 'XScale','log', 'YScale','log') +xlabel('PC dimension'); +ylabel('Spatial scale (\mum)'); +box off +text(1.5,400,'Behavior', 'Color', [0 0 1]); +text(1.5,330,'Spontaneous', 'Color', [1 0 0]); +xlim([1 1000]) +% set(gca,'XTick', [1,10,100,1000], 'Ytick', [125 250 500 1000 2000]) +set(gca,'XTick', [1,10,100,1000], 'Ytick', [250 500 1000 2000]) +ylim([200 2000]) + +fig = gcf; %or one particular figure whose handle you already know, or 0 to affect all figures +set( findall(fig, '-property', 'fontsize'), 'fontsize', DefaultFontSize) + + + +if isempty(dir(dir_current_fig)) + mkdir (dir_current_fig) +end +% +figure_name_out=[ dir_current_fig filename]; +eval(['print ', figure_name_out, ' -dtiff -r200']); +% eval(['print ', figure_name_out, ' -dpdf -r200']); diff --git a/analysis/proj_across_days.m b/analysis/proj_across_days.m new file mode 100644 index 0000000..9d2d8e5 --- /dev/null +++ b/analysis/proj_across_days.m @@ -0,0 +1,27 @@ +function proj_across_days() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\ProjLongitudinal\AF09_anm437545\']; +anm=437545; + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 -5 23*1.2 25*1.4]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +for i=1:1:numel(first_date) + key.subject_id=anm; + fn_proj_across_days (key, first_date{i}, dir_save_figure) +end + + + + diff --git a/analysis/proj_across_days_cluster.m b/analysis/proj_across_days_cluster.m new file mode 100644 index 0000000..cddab22 --- /dev/null +++ b/analysis/proj_across_days_cluster.m @@ -0,0 +1,27 @@ +function proj_across_days_cluster() +close all; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\ProjLongitudinal_cluster\AF09_anm437545\']; +anm=437545; + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; + +%Graphics +%--------------------------------- +figure; +set(gcf,'DefaultAxesFontName','helvetica'); +set(gcf,'PaperUnits','centimeters','PaperPosition',[0 -5 23*1.2 25*1.4]); +set(gcf,'PaperOrientation','portrait'); +set(gcf,'Units','centimeters','Position',get(gcf,'paperPosition')+[3 0 0 0]); +set(gcf,'color',[1 1 1]); + + +for i=1:1:numel(first_date) + key.subject_id=anm; + fn_proj_across_days_cluster (key, first_date{i}, dir_save_figure) +end + + + + diff --git a/analysis/psth_corr_days.m b/analysis/psth_corr_days.m new file mode 100644 index 0000000..c350021 --- /dev/null +++ b/analysis/psth_corr_days.m @@ -0,0 +1,14 @@ +function psth_corr_days() + +anm=437545; + +% first_date{1}='2019_01_18'; +first_date{1}='2019_02_04'; + +key.subject_id=anm; +fn_psth_corr_days(key, first_date) + + + +% populate_imaging_psth_across_days(); + diff --git a/analysis/pv_corr.m b/analysis/pv_corr.m new file mode 100644 index 0000000..afc8d60 --- /dev/null +++ b/analysis/pv_corr.m @@ -0,0 +1,71 @@ +function pv_corr() +close all; +anm=437545; + + + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + + +flag_update_cluster_group_table=0; + + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_test\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; +clustering_option_name = 'deltaf threshold multisession intersect'; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_union_hitmiss\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; +% clustering_option_name = 'deltaf threshold multisession union'; + +key.subject_id=anm; + +if flag_update_cluster_group_table~=0 + k.clustering_option_name=clustering_option_name; + del(ANLI.TrialCluster & k); +end + +for i=1:1:numel(date) + close all; + fn_pv_corr(key, date{i}, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) +end + + + + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +% flag_signif=4; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs3\AF09_anm437545\']; +% clustering_option_name = 'signif single session selective delay response'; + +% flag_signif=5; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs4\AF09_anm437545\']; +% clustering_option_name = 'signif single session deltaf'; diff --git a/analysis/pv_corr_2bin.m b/analysis/pv_corr_2bin.m new file mode 100644 index 0000000..d328457 --- /dev/null +++ b/analysis/pv_corr_2bin.m @@ -0,0 +1,53 @@ +function pv_corr() +close all; +anm=437545; + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +flag_signif=4; +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs2_2bin\AF09_anm437545\']; +clustering_option_name = 'signif single session selective delay response'; + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + +key.subject_id=anm; + +k.clustering_option_name=clustering_option_name; +del(ANLI.TrialCluster & k); + +for i=1:1:numel(date) + close all; + fn_pv_corr_2bin(key, date{i}, dir_save_figure, flag_signif, clustering_option_name) +end + + + + + diff --git a/analysis/pv_corr_all_sessions.m b/analysis/pv_corr_all_sessions.m new file mode 100644 index 0000000..8c954cf --- /dev/null +++ b/analysis/pv_corr_all_sessions.m @@ -0,0 +1,24 @@ +function pv_corr_all_sessions() +close all; +anm=437545; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_intersect_test\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_union_test\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2union; + + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; +key.subject_id=anm; + +for i=1:1:numel(first_date) + fn_pv_corr_all_sessions(key, first_date{i}, dir_save_figure, rel) + +end + + + + + diff --git a/analysis/pv_corr_all_sessions_Xweights.m b/analysis/pv_corr_all_sessions_Xweights.m new file mode 100644 index 0000000..bff4bf5 --- /dev/null +++ b/analysis/pv_corr_all_sessions_Xweights.m @@ -0,0 +1,28 @@ +function pv_corr_all_sessions_Xweights() +close all; +anm=437545; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_intersect_xWeights_abs\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_union_xWeights\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; + + +first_date{1}='2019_01_18'; +first_date{2}='2019_02_04'; +key.subject_id=anm; + +mode_names= {'LateDelay','Movement','Ramping'}; + +for i=1:1:numel(first_date) + for i_m=1:1:numel(mode_names) + + fn_pv_corr_all_sessions_xWeights(key, first_date{i}, dir_save_figure, rel, mode_names{i_m}) + end +end + + + + + diff --git a/analysis/pv_corr_all_sessions_ensemble.m b/analysis/pv_corr_all_sessions_ensemble.m new file mode 100644 index 0000000..1f317c1 --- /dev/null +++ b/analysis/pv_corr_all_sessions_ensemble.m @@ -0,0 +1,24 @@ +function pv_corr_all_sessions_ensemble() +close all; +anm=437545; + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_intersect_ensemble_all_trials_binarize_before\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_all_sessions_union_test\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; + + +% first_date{1}='2019_01_18'; +first_date{1}='2019_02_04'; +key.subject_id=anm; + +for i=1:1:numel(first_date) + fn_pv_corr_all_sessions_ensemble(key, first_date{i}, dir_save_figure, rel) + +end + + + + + diff --git a/analysis/pv_corr_ensemble.m b/analysis/pv_corr_ensemble.m new file mode 100644 index 0000000..7cd9b73 --- /dev/null +++ b/analysis/pv_corr_ensemble.m @@ -0,0 +1,71 @@ +function pv_corr_ensemble() +close all; +anm=437545; + + + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + + +flag_update_cluster_group_table=0; + + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_ensemble_binarize_before\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; +clustering_option_name = 'deltaf threshold multisession intersect'; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_union_hitmiss\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; +% clustering_option_name = 'deltaf threshold multisession union'; + +key.subject_id=anm; + +if flag_update_cluster_group_table~=0 + k.clustering_option_name=clustering_option_name; + del(ANLI.TrialCluster & k); +end + +for i=1:1:numel(date) + close all; + fn_pv_corr_ensemble(key, date{i}, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) +end + + + + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +% flag_signif=4; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs3\AF09_anm437545\']; +% clustering_option_name = 'signif single session selective delay response'; + +% flag_signif=5; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs4\AF09_anm437545\']; +% clustering_option_name = 'signif single session deltaf'; diff --git a/analysis/pv_corr_ensemble_extraction.m b/analysis/pv_corr_ensemble_extraction.m new file mode 100644 index 0000000..3052895 --- /dev/null +++ b/analysis/pv_corr_ensemble_extraction.m @@ -0,0 +1,71 @@ +function pv_corr_ensemble_extraction() +close all; +anm=437545; + + + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + + +flag_update_cluster_group_table=1; + + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_ensemble_extraction\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; +clustering_option_name = 'deltaf threshold multisession intersect'; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_union_hitmiss\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; +% clustering_option_name = 'deltaf threshold multisession union'; + +key.subject_id=anm; + +if flag_update_cluster_group_table~=0 + k.clustering_option_name=clustering_option_name; + del(ANLI.ROICluster & k); +end + +for i=1:1:numel(date) + close all; + fn_pv_corr_ensemble_extraction(key, date{i}, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) +end + + + + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +% flag_signif=4; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs3\AF09_anm437545\']; +% clustering_option_name = 'signif single session selective delay response'; + +% flag_signif=5; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs4\AF09_anm437545\']; +% clustering_option_name = 'signif single session deltaf'; diff --git a/analysis/pv_corr_ensemble_extraction_avg_maps.m b/analysis/pv_corr_ensemble_extraction_avg_maps.m new file mode 100644 index 0000000..451b3d1 --- /dev/null +++ b/analysis/pv_corr_ensemble_extraction_avg_maps.m @@ -0,0 +1,71 @@ +function pv_corr_ensemble_extraction_avg_maps() +close all; +anm=437545; + + + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + + +flag_update_cluster_group_table=1; + + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_ensemble_extraction_avg_maps\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; +clustering_option_name = 'average correlations between trial-types'; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_union_hitmiss\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; +% clustering_option_name = 'deltaf threshold multisession union'; + +key.subject_id=anm; + +if flag_update_cluster_group_table~=0 + k.clustering_option_name=clustering_option_name; + del(ANLI.ROICluster & k); +end + +for i=1:1:numel(date) + close all; + fn_pv_corr_ensemble_extraction_avg_correlation_mps(key, date{i}, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) +end + + + + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +% flag_signif=4; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs3\AF09_anm437545\']; +% clustering_option_name = 'signif single session selective delay response'; + +% flag_signif=5; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs4\AF09_anm437545\']; +% clustering_option_name = 'signif single session deltaf'; diff --git a/analysis/pv_corr_ensemble_extraction_avg_maps_different_conditions.m b/analysis/pv_corr_ensemble_extraction_avg_maps_different_conditions.m new file mode 100644 index 0000000..69182c9 --- /dev/null +++ b/analysis/pv_corr_ensemble_extraction_avg_maps_different_conditions.m @@ -0,0 +1,71 @@ +function pv_corr_ensemble_extraction_avg_maps() +close all; +anm=437545; + + + +date{1}='2019_01_18'; +date{end+1}='2019_01_19'; +date{end+1}='2019_01_20'; +date{end+1}='2019_01_21'; +date{end+1}='2019_01_22'; +date{end+1}='2019_01_23'; +date{end+1}='2019_01_24'; +date{end+1}='2019_02_04'; +date{end+1}='2019_02_05'; +date{end+1}='2019_02_06'; +date{end+1}='2019_02_07'; +date{end+1}='2019_02_08'; + + +flag_update_cluster_group_table=1; + + +dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_intersect_ensemble_extraction_avg_maps\AF09_anm437545\']; +rel=ANLI.IncludeROImultiSession2intersect; +clustering_option_name = 'average correlations between trial-types'; + +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_union_hitmiss\AF09_anm437545\']; +% rel=ANLI.IncludeROImultiSession2union; +% clustering_option_name = 'deltaf threshold multisession union'; + +key.subject_id=anm; + +if flag_update_cluster_group_table~=0 + k.clustering_option_name=clustering_option_name; + del(ANLI.ROICluster & k); +end + +for i=1:1:numel(date) + close all; + fn_pv_corr_ensemble_extraction_avg_mps_conditions(key, date{i}, dir_save_figure, clustering_option_name, rel, flag_update_cluster_group_table) +end + + + + +% flag_signif=1; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% +% flag_signif=0; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr\AF09_anm437545\']; + + +% flag_signif=2; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs_ramping\AF09_anm437545\']; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_condition_name = 'signif single session'; + +% flag_signif=3; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs\AF09_anm437545\']; +% clustering_option_name = 'signif single session'; + +% flag_signif=4; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs3\AF09_anm437545\']; +% clustering_option_name = 'signif single session selective delay response'; + +% flag_signif=5; +% dir_save_figure=['Z:\users\Arseny\Projects\Learning\imaging2p\Results\PV_corr_signif_ROIs4\AF09_anm437545\']; +% clustering_option_name = 'signif single session deltaf'; diff --git a/analysis/selectivity_across_days.m b/analysis/selectivity_across_days.m new file mode 100644 index 0000000..17c2aaa --- /dev/null +++ b/analysis/selectivity_across_days.m @@ -0,0 +1,30 @@ +function selectivity_across_days() + + +dir_data = 'Z:\users\Arseny\Projects\Learning\imaging2p\RawData\AF09_anm437545\SI\'; +anm=437545; + +% date{1}='2019_01_18'; +% date{end+1}='2019_01_19'; +% date{end+1}='2019_01_20'; +% date{end+1}='2019_01_21'; +% date{end+1}='2019_01_22'; +% date{end+1}='2019_01_23'; +% date{end+1}='2019_01_24'; +% date{1}='2019_02_04'; +date{1}='2019_02_05'; + + +figure; + +for i=1:1:numel(date) +key.subject_id=anm; +key.session_date=date{i}; + +selectivity_maps_temp(key) + +end + + + + diff --git a/analysis/selectivity_maps_temp.m b/analysis/selectivity_maps_temp.m new file mode 100644 index 0000000..635a776 --- /dev/null +++ b/analysis/selectivity_maps_temp.m @@ -0,0 +1,91 @@ +function selectivity_maps_temp(key) +dir_data = 'Z:\users\Arseny\Projects\Learning\imaging2p\RawData\AF09_anm437545\SI\'; + +dir_save_figure='Z:\users\Arseny\Projects\Learning\imaging2p\Results\Selectivity_maps\AF09_anm437545\' + +dir_data=[dir_data key.session_date '\']; +%% Insert/Populate Sessions and dependent tables +allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder +allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + +allFileNames =allFileNames(contains(allFileNames,'.tif')); + +for ifile=1:numel(allFileNames) + + [header,Aout]=scanimage.util.opentif([dir_data,allFileNames{ifile}]); + Aout=squeeze(Aout); + img_avg(ifile,:,:) = mean(Aout(:,:,40:end),3); + ifile +end + +% a=fetch(EXP.SessionID,'*') +b=fetch(EXP.BehaviorTrial&(EXP.Session&key),'*','ORDER BY trial'); +b=struct2table(b); +left_hit = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit')); +right_hit = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit')); +left_miss = find(contains(b.trial_instruction,'left') & contains(b.outcome,'miss')); +right_miss = find(contains(b.trial_instruction,'right') & contains(b.outcome,'miss')); + +% Hit +subplot(3,3,1) +map_2plot=squeeze(mean(img_avg(left_hit,:,:),1)); +imagesc(map_2plot); +title('Left, Hit'); + +subplot(3,3,2) +map_2plot=squeeze(mean(img_avg(right_hit,:,:),1)); +imagesc(map_2plot); +title('Right, Hit'); + +subplot(3,3,3) +selectivity_hit=squeeze(mean(img_avg(right_hit,:,:),1)) -squeeze(mean(img_avg(left_hit,:,:),1)); +imagesc(selectivity_hit); +title('Left-Right, Hit'); + +%Miss +subplot(3,3,4) +map_2plot=squeeze(mean(img_avg(left_miss,:,:),1)); +imagesc(map_2plot); +title('Left, Miss'); + +subplot(3,3,5) +map_2plot=squeeze(mean(img_avg(right_miss,:,:),1)); +imagesc(map_2plot); +title('Right, Miss'); + +subplot(3,3,6) +selectivity_miss=squeeze(mean(img_avg(right_miss,:,:),1)) -squeeze(mean(img_avg(left_miss,:,:),1)); +imagesc(selectivity_miss); +title('Left-Right, Miss'); + + +% Hit-Miss +subplot(3,3,7) +map_2plot=squeeze(mean(img_avg(left_hit,:,:),1)) - squeeze(mean(img_avg(left_miss,:,:),1)); +imagesc(map_2plot); +title('Left, Hit-Miss'); + +subplot(3,3,8) +map_2plot=squeeze(mean(img_avg(right_hit,:,:),1)) - squeeze(mean(img_avg(right_miss,:,:),1)); +imagesc(map_2plot); +title('Right, Hit-Miss'); + +subplot(3,3,9) +map_2plot = selectivity_hit- selectivity_miss; +imagesc(map_2plot); +title('Left-Right, Hit-Miss'); + + + + + + + +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end + +filename=['selectivity_' key.session_date]; +figure_name_out=[ dir_save_figure filename]; +eval(['print ', figure_name_out, ' -dtiff -cmyk -r600']); +clf; diff --git a/analysis/tsne_snypet.m b/analysis/tsne_snypet.m new file mode 100644 index 0000000..bfd0552 --- /dev/null +++ b/analysis/tsne_snypet.m @@ -0,0 +1,31 @@ +trial_types=zeros(size(b.trial,1),1); + +trials(1).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'hit')); +trials(1).lick_direction='left hit'; + +trials(2).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'hit')); +trials(2).lick_direction='right hit'; +% trials(3).tr = find(contains(b.trial_instruction,'left') & contains(b.outcome,'miss')); +% trials(3).lick_direction='left miss'; +% trials(4).tr = find(contains(b.trial_instruction,'right') & contains(b.outcome,'miss')); +% trials(4).lick_direction='right miss'; +% trials(5).tr = find(contains(b.outcome,'ignore')); +% trials(5).lick_direction='ignore'; + + +trial_types(trials(1).tr)=1; +trial_types(trials(2).tr)=2; +% trial_types(trials(3).tr)=3; +% trial_types(trials(4).tr)=4; +% trial_types(trials(5).tr)=5; + +trial_types = [trial_types;trial_types]; + +figure +Y = tsne(r_mat_cells,'Perplexity',10); +gscatter(Y(:,1),Y(:,2)) + +% Y = tsne(r_mat_trials,'Perplexity',100); +% Y = tsne(r_mat_trials,'Perplexity',30); + +gscatter(Y(:,1),Y(:,2),trial_types) diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/Contents.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/Contents.m new file mode 100644 index 0000000..9b03b4e --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/Contents.m @@ -0,0 +1,63 @@ +% CircStat Toolbox +% Toolbox for circular statistics with Matlab +% +% Descriptive Statistics. +% circ_mean - Mean direction of a sample of circular data +% circ_median - Median direction of a sample of circular data +% circ_r - Resultant vector length +% circ_var - Circular variance +% circ_std - Circular standard deviation +% circ_moment - Circular p-th moment +% circ_skewness - Circular skewness +% circ_kurtosis - Circular kurtosis +% +% Inferential Statistics. +% Testing for Circular Uniformity. +% circ_rtest - Rayleigh's test for nonuniformity +% circ_otest - Hodges-Ajne test (omnibus test) for nonuniformity +% circ_raotest - Rao's spacing test for nonuniformity +% circ_vtest - V-Test for nonuniformity with known mean direction +% +% Tests Concerning Mean and Median. +% circ_confmean - Confidence intervals for mean direction +% circ_mtest - One-sample test for specified mean direction +% circ_medtest - Test for median angle +% circ_symtest - Test for symmetry around median angle +% +% Paired and Multisample Tests. +% circ_wwtest - Two and multi-sample test for equal means; +% one-factor ANOVA +% circ_hktest - Two-factor ANOVA +% circ_cmtest - Non-parametric multi-sample test for equal medians +% circ_ktest - Test for equal concentration parameter +% circ_kuipertest - Test for equality of distributions (KS-test) +% +% Measures of Association. +% circ_corrcc - Circular-circular correlation coefficient +% circ_corrcl - Circular-linear correlation coefficient +% +% The Von Mises Distribution +% circ_vmpdf - Probability density function of the von Mises +% distribution +% circ_vmpar - Parameter estimation +% circ_vmrnd - Random number generation +% +% Others. +% circ_axial - Convert axial data to common scale +% circ_dist - Distances around a circle +% circ_dist2 - Pairwise distances around a circle +% circ_stats - Summary statistics +% circ_kappa - Compute concentration parameter of a VM distribution +% circ_plot - Visualization for circular data +% circ_clust - Simple clustering +% circ_rad2ang - Convert radian to angular values +% circ_ang2rad - Convert angular to radian values +% circ_samplecdf - Evaluate CDF of a sample +% +% Reference: +% P. Berens, CircStat: A Matlab Toolbox for Circular Statistics, Journal of Statistical Software,Vol. 31, Issue 10, 2009 +% http://www.jstatsoft.org/v31/i10 +% +% Author: +% Philipp Berens & Marc J. Velasco, 2009 + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/The circular statistics toolbox for matlab.pdf b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/The circular statistics toolbox for matlab.pdf new file mode 100644 index 0000000..2dac0d5 Binary files /dev/null and b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/The circular statistics toolbox for matlab.pdf differ diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ang2rad.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ang2rad.m new file mode 100644 index 0000000..2121332 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ang2rad.m @@ -0,0 +1,11 @@ +function alpha = circ_ang2rad(alpha) + +% alpha = circ_ang2rad(alpha) +% converts values in degree to radians +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +alpha = alpha * pi /180; \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axial.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axial.m new file mode 100644 index 0000000..57378b3 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axial.m @@ -0,0 +1,29 @@ +function alpha = circ_axial(alpha, p) +% +% alpha = circ_axial(alpha, p) +% Transforms p-axial data to a common scale. +% +% Input: +% alpha sample of angles in radians +% [p number of modes] +% +% Output: +% alpha transformed data +% +% PHB 2009 +% +% References: +% Statistical analysis of circular data, N. I. Fisher +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + + + +if nargin < 2 + p = 1; +end + +alpha = mod(alpha*p,2*pi); diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axialmean.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axialmean.m new file mode 100644 index 0000000..c6fc8a7 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_axialmean.m @@ -0,0 +1,41 @@ +function [r mu] = circ_axialmean(alphas, m, dim) +% +% mu = circ_axialmean(alpha, w) +% Computes the mean direction for circular data with axial +% correction. +% +% Input: +% alpha sample of angles in radians +% [m axial correction (2,3,4,...)] +% [dim statistic computed along this dimension, 1] +% +% Output: +% r mean resultant length +% mu mean direction +% +% PHB 7/6/2008 +% +% References: +% Statistical analysis of circular data, N. I. Fisher +% Topics in circular statistics, S. R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html +% Distributed under Open Source BSD License + +if nargin < 3 + dim = 1; +end + +if nargin < 2 || isempty(m) + m = 1; +end + +zbarm = mean(exp(i*alphas*m),dim); + +r = abs(zbarm); +mu = angle(zbarm)/m; + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_clust.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_clust.m new file mode 100644 index 0000000..1ecce53 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_clust.m @@ -0,0 +1,151 @@ +function [cid, alpha, mu] = circ_clust(alpha, numclust, disp) +% +% [cid, alpha, mu] = circClust(alpha, numclust, disp) +% Performs a simple agglomerative clustering of angular data. +% +% Input: +% alpha sample of angles +% numclust number of clusters desired, default: 2 +% disp show plot at each step, default: false +% +% Output: +% cid cluster id for each entry of alpha +% alpha sorted angles, matched with cid +% mu mean direction of angles in each cluster +% +% Run without any input arguments for demo mode. +% +% Circular Statistics Toolbox for Matlab + +% By Marc J. Velasco and Philipp Berens, 2009 +% velasco@ccs.fau.edu +% Distributed under Open Source BSD License + + +if nargin < 2, numclust = 5; end; +if nargin < 3, disp = 0; end +if nargin < 1 + % demo mode + n = 20; + alpha = 2*pi*rand(n,1)-pi; + numclust = 4; + disp = 1; +end; + +n = length(alpha); +if n < numclust, error('Not enough data for clusters.'), end + +% prepare data +cid = (1:n)'; + +% main clustering loop +num_unique = length(unique(cid)); +num_clusters_wanted = numclust; + +while(num_unique > num_clusters_wanted) + + % find centroid means... + + % calculate the means for each putative cluster + mu = NaN(n,1); + for j=1:n + if sum(cid==j)>0 + mu(j) = circ_mean(alpha(cid==j)); + end + end + + % find distance between centroids... + mudist = abs(circ_dist2(mu)); + + % find closest pair of clusters/datapoints + mindist = min(mudist(tril(ones(size(mudist)),-1)==1)); + [row, col] = find(mudist==mindist); + + % update cluster id's + cid(cid==max(row)) = min(col); + + % update stop criteria + num_unique = length(unique(cid)); + +end + +% renumber cluster ids (so cids [1 3 7 10] => [1 2 3 4] +cid2 = cid; +uniquecids = unique(cid); +for j=1:length(uniquecids) + cid(cid2==uniquecids(j)) = j; +end + +% compute final cluster means +mu = NaN(num_unique,1); +r = NaN(num_unique,1); +for j=1:num_unique + if sum(cid==j)>0 + mu(j) = circ_mean(alpha(cid==j)); + r(j) = circ_r(alpha(cid==j)); + end +end + +if disp + % plot output + z2 = exp(i*alpha); + plotColor(real(z2), imag(z2), cid, 2) + zmu = r.*exp(i*mu); + plotColor(real(zmu), imag(zmu), 1:num_unique, 2, '*', 10, 1) + + axis square + set(gca, 'XLim', [-1, 1]); + set(gca, 'YLim', [-1, 1]); +end + + +function plotColor(x, y, c, varargin) +% FUNCTION plotColor(x, y, c, [figurenum], [pstring], [markersize], [overlay_tf]); +% plots a scatter plot for x, y, using color values in c (c should be +% categorical info), with c same size as x and y; +% fourth argument can be figure#, otherwise, uses figure(1); +% +% colors should be positive integes + +% copyright (c) 2009 Marc J. Velasco + +if nargin < 4 + figurenum = 1; +else + figurenum = varargin{1}; +end +if nargin < 5 + pstring = '.'; +else + pstring = varargin{2}; +end +if nargin < 6 + ms = 10; +else + ms = varargin{3}; +end +if nargin < 7 + overlay = 0; +else + overlay = varargin{4}; +end + +csmall = unique(c); +figure(figurenum); +if ~overlay, close(figurenum); end +figure(figurenum); + +colors={'y', 'b', 'r', 'g', 'c', 'k', 'm'}; + +hold on; +for j=1:length(csmall); + + ci = (c == csmall(j)); + plot(x(ci), y(ci), strcat(pstring, colors{mod(j, length(colors))+1}), 'MarkerSize', ms); + +end +if ~overlay, hold off; end +figure(figurenum) + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_cmtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_cmtest.m new file mode 100644 index 0000000..59145fa --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_cmtest.m @@ -0,0 +1,90 @@ +function [pval med P] = circ_cmtest(varargin) +% +% [pval, med, P] = circ_cmtest(alpha, idx) +% [pval, med, P] = circ_cmtest(alpha1, alpha2) +% Non parametric multi-sample test for equal medians. Similar to a +% Kruskal-Wallis test for linear data. +% +% H0: the s populations have equal medians +% HA: the s populations have unequal medians +% +% Input: +% alpha angles in radians +% idx indicates which population the respective angle in alpha +% comes from, 1:s +% +% Output: +% pval p-value of the common median multi-sample test. Discard H0 if +% pval is small. +% med best estimate of shared population median if H0 is not +% discarded at the 0.05 level and NaN otherwise. +% P test statistic of the common median test. +% +% +% PHB 7/19/2009 +% +% References: +% Fisher NI, 1995 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +[alpha, idx] = processInput(varargin{:}); + +% number of groups +u = unique(idx); +s = length(u); + +% number of samples +N = length(idx); + +% total median +med = circ_median(alpha); + +% compute relevant quantitites +n = zeros(s,1); m = n; +for t=1:s + pidx = idx == u(t); + n(t) = sum(pidx); + + d = circ_dist(alpha(pidx),med); + + m(t) = sum(d<0); +end + +if any(n<10) + warning('Test not applicable. Sample size in at least one group to small.') %#ok +end + + +M = sum(m); +P = (N^2/(M*(N-M))) * sum(m.^2 ./ n) - N*M/(N-M); + +pval = 1 - chi2cdf(P,s-1); + +if pval < 0.05 + med = NaN; +end + + + + +function [alpha, idx] = processInput(varargin) + +if nargin==2 && sum(abs(round(varargin{2})-varargin{2}))>1e-5 + alpha1 = varargin{1}(:); + alpha2 = varargin{2}(:); + alpha = [alpha1; alpha2]; + idx = [ones(size(alpha1)); 2*ones(size(alpha2))]; +elseif nargin==2 + alpha = varargin{1}(:); + idx = varargin{2}(:); + if ~(size(idx,1)==size(alpha,1)) + error('Input dimensions do not match.') + end +else + error('Invalid use of circ_wwtest. Type help circ_wwtest.') +end + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_confmean.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_confmean.m new file mode 100644 index 0000000..26c89d4 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_confmean.m @@ -0,0 +1,79 @@ +function t = circ_confmean(alpha, xi, w, d, dim) +% +% t = circ_mean(alpha, xi, w, d, dim) +% Computes the confidence limits on the mean for circular data. +% +% Input: +% alpha sample of angles in radians +% [xi (1-xi)-confidence limits are computed, default 0.05] +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r, in radians (!)] +% [dim compute along this dimension, default is 1] +% +% Output: +% t mean +- d yields upper/lower (1-xi)% confidence limit +% +% PHB 7/6/2008 +% +% References: +% Statistical analysis of circular data, N. I. Fisher +% Topics in circular statistics, S. R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 5 + dim = 1; +end + +if nargin < 4 || isempty(d) + % per default do not apply correct for binned data + d = 0; +end + +if nargin < 3 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + +% set confidence limit size to default +if nargin < 2 || isempty(xi) + xi = 0.05; +end + +% compute ingredients for conf. lim. +r = circ_r(alpha,w,d,dim); +n = sum(w,dim); +R = n.*r; +c2 = chi2inv((1-xi),1); + +% check for resultant vector length and select appropriate formula +t = zeros(size(r)); + +for i = 1:numel(r) + if r(i) < .9 && r(i) > sqrt(c2/2/n(i)) + t(i) = sqrt((2*n(i)*(2*R(i)^2-n(i)*c2))/(4*n(i)-c2)); % equ. 26.24 + elseif r(i) >= .9 + t(i) = sqrt(n(i)^2-(n(i)^2-R(i)^2)*exp(c2/n(i))); % equ. 26.25 + else + t(i) = NaN; + warning('Requirements for confidence levels not met.'); + end +end + +% apply final transform +t = acos(t./R); + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcc.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcc.m new file mode 100644 index 0000000..68715ab --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcc.m @@ -0,0 +1,53 @@ +function [rho pval] = circ_corrcc(alpha1, alpha2) +% +% [rho pval ts] = circ_corrcc(alpha1, alpha2) +% Circular correlation coefficient for two circular random variables. +% +% Input: +% alpha1 sample of angles in radians +% alpha2 sample of angles in radians +% +% Output: +% rho correlation coefficient +% pval p-value +% +% References: +% Topics in circular statistics, S.R. Jammalamadaka et al., p. 176 +% +% PHB 6/7/2008 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if size(alpha1,2) > size(alpha1,1) + alpha1 = alpha1'; +end + +if size(alpha2,2) > size(alpha2,1) + alpha2 = alpha2'; +end + +if length(alpha1)~=length(alpha2) + error('Input dimensions do not match.') +end + +% compute mean directions +n = length(alpha1); +alpha1_bar = circ_mean(alpha1); +alpha2_bar = circ_mean(alpha2); + +% compute correlation coeffcient from p. 176 +num = sum(sin(alpha1 - alpha1_bar) .* sin(alpha2 - alpha2_bar)); +den = sqrt(sum(sin(alpha1 - alpha1_bar).^2) .* sum(sin(alpha2 - alpha2_bar).^2)); +rho = num / den; + +% compute pvalue +l20 = mean(sin(alpha1 - alpha1_bar).^2); +l02 = mean(sin(alpha2 - alpha2_bar).^2); +l22 = mean((sin(alpha1 - alpha1_bar).^2) .* (sin(alpha2 - alpha2_bar).^2)); + +ts = sqrt((n * l20 * l02)/l22) * rho; +pval = 2 * (1 - normcdf(abs(ts))); + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcl.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcl.m new file mode 100644 index 0000000..113a0d5 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_corrcl.m @@ -0,0 +1,50 @@ +function [rho pval] = circ_corrcl(alpha, x) +% +% [rho pval ts] = circ_corrcc(alpha, x) +% Correlation coefficient between one circular and one linear random +% variable. +% +% Input: +% alpha sample of angles in radians +% x sample of linear random variable +% +% Output: +% rho correlation coefficient +% pval p-value +% +% References: +% Biostatistical Analysis, J. H. Zar, p. 651 +% +% PHB 6/7/2008 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +if size(x,2) > size(x,1) + x = x'; +end + +if length(alpha)~=length(x) + error('Input dimensions do not match.') +end + +n = length(alpha); + +% compute correlation coefficent for sin and cos independently +rxs = corr(x,sin(alpha)); +rxc = corr(x,cos(alpha)); +rcs = corr(sin(alpha),cos(alpha)); + +% compute angular-linear correlation (equ. 27.47) +rho = sqrt((rxc^2 + rxs^2 - 2*rxc*rxs*rcs)/(1-rcs^2)); + +% compute pvalue +pval = 1 - chi2cdf(n*rho^2,2); + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist.m new file mode 100644 index 0000000..1ba0eaf --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist.m @@ -0,0 +1,28 @@ +function r = circ_dist(x,y) +% +% r = circ_dist(alpha, beta) +% Pairwise difference x_i-y_i around the circle computed efficiently. +% +% Input: +% alpha sample of linear random variable +% beta sample of linear random variable or one single angle +% +% Output: +% r matrix with differences +% +% References: +% Biostatistical Analysis, J. H. Zar, p. 651 +% +% PHB 3/19/2009 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + + +if size(x,1)~=size(y,1) && size(x,2)~=size(y,2) && length(y)~=1 + error('Input dimensions do not match.') +end + +r = angle(exp(1i*x)./exp(1i*y)); \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist2.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist2.m new file mode 100644 index 0000000..d541110 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_dist2.m @@ -0,0 +1,36 @@ +function r = circ_dist2(x,y) +% +% r = circ_dist(alpha, beta) +% All pairwise difference x_i-y_j around the circle computed efficiently. +% +% Input: +% alpha sample of linear random variable +% beta sample of linear random variable +% +% Output: +% r matrix with pairwise differences +% +% References: +% Biostatistical Analysis, J. H. Zar, p. 651 +% +% PHB 3/19/2009 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 2 + y = x; +end + +if size(x,2)>size(x,1) + x = x'; +end + +if size(y,2)>size(y,1) + y = y'; +end + +r = angle(repmat(exp(1i*x),1,length(y)) ... + ./ repmat(exp(1i*y'),length(x),1)); \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_hktest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_hktest.m new file mode 100644 index 0000000..d3931d6 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_hktest.m @@ -0,0 +1,251 @@ +function [pval table] = circ_hktest(alpha, idp, idq, inter, fn) + +% +% [pval, stats] = circ_hktest(alpha, idp, idq, inter, fn) +% Parametric two-way ANOVA for circular data with interations. +% +% Input: +% alpha angles in radians +% idp indicates the level of factor 1 (1:p) +% idq indicates the level of factor 2 (1:q) +% inter 0 or 1 - whether to include effect of interaction or not +% fn cell array containing strings with the names of the factors +% +% +% Output: +% pval vector of pvalues testing column, row and interaction effects +% table cell array containg the anova table +% +% The test assumes underlying von-Mises distributrions. +% All groups are assumed to have a common concentration parameter k, +% between 0 and 2. +% +% PHB 7/19/2009 with code by Tal Krasovsky, Mc Gill University +% +% References: +% Harrison, D. and Kanji, G. K. (1988). The development of analysis of variance for +% circular data. Journal of applied statistics, 15(2), 197-223. +% +% Circular Statistics Toolbox for Matlab + +% process inputs +alpha = alpha(:); idp = idp(:); idq = idq(:); + +if nargin < 4 + inter = true; +end + +if nargin < 5 + fn = {'A','B'}; +end + + +% number of groups for every factor +pu = unique(idp); +p = length(pu); +qu = unique(idq); +q = length(qu); + +% number of samples +n = length(alpha); + +% compute important sums for the test statistics +cn = zeros(p,q); cr = cn; +pm = zeros(p,1); pr = pm; pn = pm; +qm = zeros(q,1); qr = qm; qn = qm; +for pp = 1:p + p_id = idp == pu(pp); % indices of factor1 = pp + for qq = 1:q + q_id = idq == qu(qq); % indices of factor2 = qq + idx = p_id & q_id; + cn(pp,qq) = sum(idx); % number of items in cell + cr(pp,qq) = cn(pp,qq) * circ_r(alpha(idx)); % R of cell + end + % R and mean angle for factor 1 + pr(pp) = sum(p_id) * circ_r(alpha(p_id)); + pm(pp) = circ_mean(alpha(p_id)); + pn(pp) = sum(p_id); +end + +% R and mean angle for factor 2 +for qq = 1:q + q_id = idq == qu(qq); + qr(qq) = sum(q_id) * circ_r(alpha(q_id)); + qm(qq) = circ_mean(alpha(q_id)); + qn(qq) = sum(q_id); +end + +% R and mean angle for whole sample (total) +tr = n * circ_r(alpha); + +% estimate kappa +kk = circ_kappa(tr/n); + +% different formulas for different width of the distribution +if kk > 2 + % large kappa + + % effect of factor 1 + eff_1 = sum(pr.^2 ./ sum(cn,2)) - tr.^2/n; + df_1 = p-1; + ms_1 = eff_1 / df_1; + + % effect of factor 2 + eff_2 = sum(qr.^2 ./ sum(cn,1)') - tr.^2/n; + df_2 = q-1; + ms_2 = eff_2 / df_2; + + % total effect + eff_t = n - tr.^2/n; + df_t = n-1; + + m = mean(cn(:)); + + if inter + + % correction factor for improved F statistic + beta = 1/(1-1/(5*kk)-1/(10*(kk^2))); + + % residual effects + eff_r = n - sum(sum(cr.^2./cn)); + df_r = p*q*(m-1); + ms_r = eff_r / df_r; + + % interaction effects + eff_i = sum(sum(cr.^2./cn)) - sum(qr.^2./qn) ... + - sum(pr.^2./pn) + tr.^2/n; + df_i = (p-1)*(q-1); + ms_i = eff_i/df_i; + + % interaction test statistic + FI = ms_i / ms_r; + pI = 1-fcdf(FI,df_i,df_r); + + else + + % residual effect + eff_r = n - sum(qr.^2./qn)- sum(pr.^2./pn) + tr.^2/n; + df_r = (p-1)*(q-1); + ms_r = eff_r / df_r; + + % interaction effects + eff_i = []; + df_i = []; + ms_i =[]; + + % interaction test statistic + FI = []; + pI = NaN; + beta = 1; + end + + % compute all test statistics as + % F = beta * MS(A) / MS(R); + + F1 = beta * ms_1 / ms_r; + p1 = 1 - fcdf(F1,df_1,df_r); + + F2 = beta * ms_2 / ms_r; + p2 = 1 - fcdf(F2,df_2,df_r); + +else + % small kappa + + % correction factor + rr = besseli(1,kk) / besseli(0,kk); + f = 2/(1-rr^2); + + chi1 = f * (sum(pr.^2./pn)- tr.^2/n); + df_1 = 2*(q-1); + p1 = 1 - chi2cdf(chi1, df_1); + + chi2 = f * (sum(qr.^2./qn)- tr.^2/n); + df_2 = 2*(p-1); + p2 = 1 - chi2cdf(chi2, df_2); + + chiI = f * (sum(sum(cr.^2 ./ cn)) - sum(pr.^2./pn) ... + - sum(qr.^2./qn)+ tr.^2/n); + df_i = (p-1) * (q-1); + pI = 1 - chi2pdf(chiI, df_i); + +end + +na = nargout; +if na < 2 + printTable; +end + +prepareOutput; + + + + + function printTable + + if kk>2 + + fprintf('\nANALYSIS OF VARIANCE TABLE (HIGH KAPPA MODE)\n\n'); + + fprintf('%s\t\t\t\t%s\t%s\t\t%s\t\t%s\t\t\t%s\n', ' ' ,'d.f.', 'SS', 'MS', 'F', 'P-Value'); + fprintf('--------------------------------------------------------------------\n'); + fprintf('%s\t\t\t\t%u\t\t%.2f\t%.2f\t%.2f\t\t%.4f\n', fn{1}, df_1 , eff_1, ms_1, F1, p1); + fprintf('%s\t\t\t\t%u\t\t%.2f\t%.2f\t%.2f\t\t%.4f\n', fn{2}, df_2 , eff_2, ms_2, F2, p2); + if (inter) + fprintf('%s\t\t%u\t\t%.2f\t%.2f\t%.2f\t\t%.4f\n', 'Interaction', df_i , eff_i, ms_i, FI, pI); + end + fprintf('%s\t\t%u\t\t%.2f\t%.2f\n', 'Residual ', df_r, eff_r, ms_r); + fprintf('--------------------------------------------------------------------\n'); + fprintf('%s\t\t%u\t\t%.2f', 'Total ',df_t,eff_t); + fprintf('\n\n') + else + fprintf('\nANALYSIS OF VARIANCE TABLE (LOW KAPPA MODE)\n\n'); + + fprintf('%s\t\t\t\t%s\t%s\t\t\t%s\n', ' ' ,'d.f.', 'CHI2', 'P-Value'); + fprintf('--------------------------------------------------------------------\n'); + fprintf('%s\t\t\t\t%u\t\t%.2f\t\t\t%.4f\n', fn{1}, df_1 , chi1, p1); + fprintf('%s\t\t\t\t%u\t\t%.2f\t\t\t%.4f\n', fn{2}, df_2 , chi2, p2); + if (inter) + fprintf('%s\t\t%u\t\t%.2f\t\t\t%.4f\n', 'Interaction', df_i , chiI, pI); + end + fprintf('--------------------------------------------------------------------\n'); + fprintf('\n\n') + + end + + + end + + function prepareOutput + + pval = [p1 p2 pI]; + + if na > 1 + if kk>2 + table = {'Source','d.f.','SS','MS','F','P-Value'; ... + fn{1}, df_1 , eff_1, ms_1, F1, p1; ... + fn{2}, df_2 , eff_2, ms_2, F2, p2; ... + 'Interaction', df_i , eff_i, ms_i, FI, pI; ... + 'Residual', df_r, eff_r, ms_r, [], []; ... + 'Total',df_t,eff_t,[],[],[]}; + else + table = {'Source','d.f.','CHI2','P-Value'; ... + fn{1}, df_1 , chi1, p1; + fn{2}, df_2 , chi2, p2; + 'Interaction', df_i , chiI, pI}; + end + end + + end + + +end + + + + + + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kappa.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kappa.m new file mode 100644 index 0000000..cb193f8 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kappa.m @@ -0,0 +1,57 @@ +function kappa = circ_kappa(alpha,w) +% +% kappa = circ_kappa(alpha,[w]) +% Computes an approximation to the ML estimate of the concentration +% parameter kappa of the von Mises distribution. +% +% Input: +% alpha angles in radians OR alpha is length resultant +% [w number of incidences in case of binned angle data] +% +% Output: +% kappa estimated value of kappa +% +% References: +% Statistical analysis of circular data, Fisher, equation p. 88 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + + +alpha = alpha(:); + +if nargin<2 + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) > size(w,1) + w = w'; + end +end + +N = length(alpha); + +if N>1 + R = circ_r(alpha,w); +else + R = alpha; +end + +if R < 0.53 + kappa = 2*R + R^3 + 5*R^5/6; +elseif R>=0.53 && R<0.85 + kappa = -.4 + 1.39*R + 0.43/(1-R); +else + kappa = 1/(R^3 - 4*R^2 + 3*R); +end + +if N<15 && N>1 + if kappa < 2 + kappa = max(kappa-2*(N*kappa)^-1,0); + else + kappa = (N-1)^3*kappa/(N^3+N); + end +end diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ktest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ktest.m new file mode 100644 index 0000000..0c2ce82 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_ktest.m @@ -0,0 +1,59 @@ +function [pval, f] = circ_ktest(alpha1, alpha2) +% [pval, f] = circ_ktest(alpha1, alpha2) +% +% A parametric two-sample test to determine whether two concentration +% parameters are different. +% +% H0: The two concentration parameters are equal. +% HA: The two concentration parameters are different. +% +% Input: +% alpha1 fist sample (in radians) +% alpha2 second sample (in radians) +% +% Output: +% pval p-value that samples have different concentrations +% f f-statistic calculated +% +% Assumptions: both samples are drawn from von Mises type distributions +% and their joint resultant vector length should be > .7 +% +% References: +% Batschelet, 1980, section 6.9, pg 122-124 +% +% Circular Statistics Toolbox for Matlab + +% By Marc J. Velasco, 2009 +% velasco@ccs.fau.edu + +alpha1 = alpha1(:); +alpha2 = alpha2(:); + +n1 = length(alpha1); +n2 = length(alpha2); + +R1 = n1*circ_r(alpha1); +R2 = n2*circ_r(alpha2); + +% make sure that rbar > .7 +rbar = (R1+R2)/(n1+n2); + +if rbar < .7 + warning('resultant vector length should be > 0.7') %#ok +end + +% calculate test statistic +f = ((n2-1)*(n1-R1))/((n1-1)*(n2-R2)); +if f > 1 + pval = 2*(1-fcdf(f, n1, n2)); +else + f = 1/f; + pval = 2*(1-fcdf(f, n2, n1)); +end + + + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kuipertest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kuipertest.m new file mode 100644 index 0000000..3d430ca --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_kuipertest.m @@ -0,0 +1,112 @@ +function [pval, k, K] = circ_kuipertest(alpha1, alpha2, res, vis_on) + +% [pval, k, K] = circ_kuipertest(sample1, sample2, res, vis_on) +% +% The Kuiper two-sample test tests whether the two samples differ +% significantly.The difference can be in any property, such as mean +% location and dispersion. It is a circular analogue of the +% Kolmogorov-Smirnov test. +% +% H0: The two distributions are identical. +% HA: The two distributions are different. +% +% Input: +% alpha1 fist sample (in radians) +% alpha2 second sample (in radians) +% res resolution at which the cdf is evaluated +% vis_on display graph +% +% Output: +% pval p-value; the smallest of .10, .05, .02, .01, .005, .002, +% .001, for which the test statistic is still higher +% than the respective critical value. this is due to +% the use of tabulated values. if p>.1, pval is set to 1. +% k test statistic +% K critical value +% +% References: +% Batschelet, 1980, p. 112 +% +% Circular Statistics Toolbox for Matlab + +% By Marc J. Velasco and Philipp Berens, 2009 +% velasco@ccs.fau.edu + + +if nargin < 3 + res = 100; +end +if nargin < 4 + vis_on = 0; +end + +n = length(alpha1(:)); +m = length(alpha2(:)); + +% create cdfs of both samples +[phis1 cdf1 phiplot1 cdfplot1] = circ_samplecdf(alpha1, res); +[phis2 cdf2 phiplot2 cdfplot2] = circ_samplecdf(alpha2, res); + +% maximal difference between sample cdfs +[dplus, gdpi] = max([0 cdf1-cdf2]); +[dminus, gdmi] = max([0 cdf2-cdf1]); + +% calculate k-statistic +k = n * m * (dplus + dminus); + +% find p-value +[pval K] = kuiperlookup(min(n,m),k/sqrt(n*m*(n+m))); +K = K * sqrt(n*m*(n+m)); + + +% visualize +if vis_on + figure + plot(phiplot1, cdfplot1, 'b', phiplot2, cdfplot2, 'r'); + hold on + plot([phis1(gdpi-1), phis1(gdpi-1)], [cdf1(gdpi-1) cdf2(gdpi-1)], 'o:g'); + plot([phis1(gdmi-1), phis1(gdmi-1)], [cdf1(gdmi-1) cdf2(gdmi-1)], 'o:g'); + hold off + set(gca, 'XLim', [0, 2*pi]); + set(gca, 'YLim', [0, 1.1]); + xlabel('Circular Location') + ylabel('Sample CDF') + title('CircStat: Kuiper test') + h = legend('Sample 1', 'Sample 2', 'Location', 'Southeast'); + set(h,'box','off') + set(gca, 'XTick', pi*0:.25:2) + set(gca, 'XTickLabel', {'0', '', '', '', 'pi', '', '', '', '2pi'}) +end + + + +end + +function [p K] = kuiperlookup(n, k) + +load kuipertable.mat; +alpha = [.10, .05, .02, .01, .005, .002, .001]; +nn = ktable(:,1); %#ok + +% find correct row of the table +[easy row] = ismember(n, nn); +if ~easy + % find closest value if no entry is present) + row = length(nn) - sum(n + end +end + +% find minimal p-value and test-statistic +idx = find(ktable(row,2:end) 1 + t = circ_confmean(alpha,0.05,w); + ul = mu + t; + ll = mu - t; +end \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_median.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_median.m new file mode 100644 index 0000000..d3c3053 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_median.m @@ -0,0 +1,67 @@ +function med = circ_median(alpha,dim) +% +% med = circ_median(alpha) +% Computes the median direction for circular data. +% +% Input: +% alpha sample of angles in radians +% [dim compute along this dimension, default is 1, must +% be either 1 or 2 for circ_median] +% +% Output: +% mu mean direction +% +% PHB 3/19/2009 +% +% References: +% Biostatistical Analysis, J. H. Zar (26.6) +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 2 + dim = 1; +end + +M = size(alpha); +for i=1:M(3-dim) + if dim == 2 + beta = alpha(i,:)'; + elseif dim ==1 + beta = alpha(:,i); + else + error('circ_median only works along first two dimensions') + end + + beta = mod(beta,2*pi); + n = size(beta,1); + + m1 = sum(circ_dist2(beta,beta)>0,1); + m2 = sum(circ_dist2(beta,beta)<0,1); + + dm = abs(m1-m2); + if mod(n,2)==1 + [m idx] = min(dm); + else + m = min(dm); + idx = find(dm==m,2); + end + + if m > 1 + warning('Ties detected.') %#ok + end + + md = circ_mean(beta(idx)); + + if abs(circ_dist(circ_mean(beta),md)) > abs(circ_dist(circ_mean(beta),md+pi)) + md = mod(md+pi,2*pi); + end + + med(i) = md; +end + +if dim == 2 + med = med'; +end \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_medtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_medtest.m new file mode 100644 index 0000000..23b0e22 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_medtest.m @@ -0,0 +1,46 @@ +function pval = circ_medtest(alpha,md) +% +% [pval, z] = circ_medtest(alpha,w) +% Tests for significance of the median. +% H0: the population has median angle md +% HA: the population has not median angle md +% +% Input: +% alpha sample of angles in radians +% md median to test for +% +% Output: +% pval p-value +% +% PHB 3/19/2009 +% +% References: +% Biostatistical Analysis, J. H. Zar, 27.4 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +if length(md)>1 + error('Median can only be a single value.') +end + +n = length(alpha); + +% compute deviations from median +d = circ_dist(alpha,md); + +n1 = sum(d<0); +n2 = sum(d>0); + +% compute p-value with binomial test +pval = sum(binopdf([0:min(n1,n2) max(n1,n2):n],n,0.5)); + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_moment.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_moment.m new file mode 100644 index 0000000..7846cd8 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_moment.m @@ -0,0 +1,69 @@ +function [mp rho_p mu_p] = circ_moment(alpha, w, p, cent, dim) + +% [mp cbar sbar] = circ_moment(alpha, w, p, cent, dim) +% Calculates the complex p-th centred or non-centred moment +% of the angular data in angle. +% +% Input: +% alpha sample of angles +% [w weightings in case of binned angle data] +% [p p-th moment to be computed, default is p=1] +% [cent if true, central moments are computed, default = false] +% [dim compute along this dimension, default is 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_moment(alpha, [], [], [], dim) +% +% Output: +% mp complex p-th moment +% rho_p magnitude of the p-th moment +% mu_p angle of th p-th moment +% +% +% References: +% Statistical analysis of circular data, Fisher, p. 33/34 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de + +if nargin < 5 + dim = 1; +end + +if nargin < 4 + cent = false; +end + +if nargin < 3 || isempty(p) + p = 1; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + + +if cent + theta = circ_mean(alpha,w,dim); + v = size(alpha)./size(theta); + alpha = circ_dist(alpha,repmat(theta,v)); +end + + +n = size(alpha,dim); +cbar = sum(cos(p*alpha).*w,dim)/n; +sbar = sum(sin(p*alpha).*w,dim)/n; +mp = cbar + i*sbar; + +rho_p = abs(mp); +mu_p = angle(mp); + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_mtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_mtest.m new file mode 100644 index 0000000..3757f51 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_mtest.m @@ -0,0 +1,69 @@ +function [h mu ul ll] = circ_mtest(alpha, dir, xi, w, d) +% +% [pval, z] = circ_mtest(alpha, dir, w, d) +% One-Sample test for the mean angle. +% H0: the population has mean dir. +% HA: the population has not mean dir. +% +% Note: This is the equvivalent to a one-sample t-test with specified +% mean direction. +% +% Input: +% alpha sample of angles in radians +% dir assumed mean direction +% [xi alpha level of the test] +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r, in radians (!)] +% +% Output: +% h 0 if H0 can not be rejected, 1 otherwise +% mu mean +% ul upper (1-xi) confidence level +% ll lower (1-xi) confidence level +% +% PHB 7/6/2008 +% +% References: +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +if nargin<3 + xi = 0.05; +end + +if nargin<4 + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) > size(w,1) + w = w'; + end + if length(alpha)~=length(w) + error('Input dimensions do not match.') + end +end + +if nargin<5 + % per default do not apply correct for binned data + d = 0; +end + +% compute ingredients +mu = circ_mean(alpha,w); +t = circ_confmean(alpha,xi,w,d); +ul = mu + t; +ll = mu - t; + +% compute test via confidence limits (example 27.3) +h = abs(circ_dist2(dir,mu)) > t; diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_otest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_otest.m new file mode 100644 index 0000000..8c07a43 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_otest.m @@ -0,0 +1,79 @@ +function [pval m] = circ_otest(alpha, sz, w) +% +% [pval, m] = circ_otest(alpha,sz,w) +% Computes Omnibus or Hodges-Ajne test for non-uniformity of circular data. +% H0: the population is uniformly distributed around the circle +% HA: the population is not distributed uniformly around the circle +% +% Alternative to the Rayleigh and Rao's test. Works well for unimodal, +% bimodal or multimodal data. If requirements of the Rayleigh test are +% met, the latter is more powerful. +% +% Input: +% alpha sample of angles in radians +% [sz step size for evaluating distribution, default 1 degree +% [w number of incidences in case of binned angle data] + +% Output: +% pval p-value +% m minimum number of samples falling in one half of the circle +% +% PHB 3/16/2009 +% +% References: +% Biostatistical Analysis, J. H. Zar +% A bivariate sign test, J. L. Hodges et al., 1955 +% A simple test for uniformity of a circular distribution, B. Ajne, 1968 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +if nargin < 2 || isempty(sz) + sz = circ_ang2rad(1); +end + +if nargin < 3 + w = ones(size(alpha)); +else + if length(alpha)~=length(w) + error('Input length does not match.') + end + w =w(:); +end + +alpha = mod(alpha,2*pi); +n = sum(w); +dg = 0:sz:pi; + +m = zeros(size(dg)); +for i=1:length(dg) + m(i) = sum((alpha > dg(i) & alpha < pi + dg(i)).*w); +end +m = min(m); + +if n > 50 + % approximation by Ajne (1968) + A = pi*sqrt(n) / 2 / (n-2*m); + pval = sqrt(2*pi) / A * exp(-pi^2/8/A^2); +else + % exact formula by Hodges (1955) + pval = 2^(1-n) * (n-2*m) * nchoosek(n,m); +end + + + + + + + + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_plot.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_plot.m new file mode 100644 index 0000000..8cd6e75 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_plot.m @@ -0,0 +1,143 @@ +function a = circ_plot(alpha, format, formats, varargin) +% +% r = circ_plot(alpha, ...) +% Plotting routines for circular data. +% +% Input: +% alpha sample of angles in radians +% [format specifies style of plot +% pretty, histogram, density, [] +% [formats standard matlab string for plot format (like '.r')] +% +% The different plotting styles take optional arguments: +% pretty: fourth argument toggles between showing mean direction +% and not showing it +% hist: fourth argument determines number of bins/bin centers +% fifth argument determines whether normalized or count +% histogram is shown +% sixth argument toggles between showing mean direction +% and not showing it +% +% All of these arguments can be left empty, i.e. set to [], so that +% the default value will be used. If additional arguments are +% supplied in the name-value style ('linewidth', 2, ...), these are +% used to change the properties of the mean resultant vector plot. +% +% Output: +% a axis handle +% +% Examples: +% alpha = randn(60,1)*.4+pi/2; +% figure +% subplot(2,2,1) +% circ_plot(alpha,'pretty','ro',true,'linewidth',2,'color','r'), +% title('pretty plot style') +% subplot(2,2,2) +% circ_plot(alpha,'hist',[],20,true,true,'linewidth',2,'color','r') +% title('hist plot style') +% subplot(2,2,3) +% circ_plot(alpha,[],'s') +% title('non-fancy plot style') +% +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens & Marc J. Velasco, 2009 +% velasco@ccs.fau.edu, berens@tuebingen.mpg.de + +if nargin < 2 || isempty(format) + format = ''; +end + + +switch format + case 'pretty' + % plot in 'pretty style' + % draws unit circle and marks points around the circle + % adds optionally the mean resultant vector + + if nargin < 3|| isempty(formats) + formats = 'o'; + end + + % convert angles to unit vectors + z = exp(i*alpha); + + % create unit circle + zz = exp(i*linspace(0, 2*pi, 101)); + + plot(real(z), imag(z), formats, real(zz), imag(zz), 'k', [-2 2], [0 0], 'k:', [0 0], [-2 2], 'k:'); + set(gca, 'XLim', [-1.1 1.1], 'YLim', [-1.1 1.1]) + + % plot mean directions with an overlaid arrow if desired + if nargin > 2 && ~isempty(varargin{1}) + s = varargin{1}; + else + s = true; + end + + if s + r = circ_r(alpha); + phi = circ_mean(alpha); + hold on; + zm = r*exp(i*phi); + plot([0 real(zm)], [0, imag(zm)],varargin{2:end}) + hold off; + end + + axis square; + set(gca,'box','off') + set(gca,'xtick',[]) + set(gca,'ytick',[]) + text(1.2, 0, '0'); text(-.05, 1.2, '\pi/2'); text(-1.35, 0, '±\pi'); text(-.075, -1.2, '-\pi/2'); + + + case 'hist' + % plot in 'hist style' + % this is essentially a wrapper for the rose plot function of matlab + % adds optionally the mean resultant vector + + if nargin < 3|| isempty(formats) + formats = '-'; + end + + if nargin > 3 && ~isempty(varargin{1}) + x = varargin{1}; + else + x = 20; + end + + [t,r] = rose(alpha,x); + if nargin> 3 && varargin{2} + polar(t,r/sum(r),formats) + mr = max(r/sum(r)); + else + polar(t,r,formats) + mr = max(r); + end + + % plot mean directions with an overlaid arrow if desired + if nargin > 5 && ~isempty(varargin{3}) + s = varargin{1}; + else + s = true; + end + + if s + r = circ_r(alpha) * mr; + phi = circ_mean(alpha); + hold on; + zm = r*exp(i*phi); + plot([0 real(zm)], [0, imag(zm)],varargin{4:end}) + hold off; + end + + + otherwise + if nargin < 3 + formats = 'o'; + end + polar(alpha, ones(size(alpha)), formats); +end + +a = gca; diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.asv b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.asv new file mode 100644 index 0000000..15756b3 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.asv @@ -0,0 +1,63 @@ +function r = circ_r(alpha, w, d, dim) +% r = circ_r(alpha, w, d) +% Computes mean resultant vector length for circular data. +% +% Input: +% alpha sample of angles in radians +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimatiomean resultant vector +n of r, in radians (!)] +% [dim compute along this dimension, default is 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_r(alpha, [], [], dim) +% +% Output: +% r mean resultant length +% +% PHB 7/6/2008 +% +% References: +% Statistical analysis of circular data, N.I. Fisher +% Topics in circular statistics, S.R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 4 + dim = 1; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + +if nargin < 3 || isempty(d) + % per default do not apply correct for binned data + d = 0; +end + +% compute weighted sum of cos and sin of angles +r = sum(w.*exp(1i*alpha),dim); + +% obtain length +r = abs(r)./sum(w,dim); + +% for data with known spacing, apply correction factor to correct for bias +% in the estimation of r (see Zar, p. 601, equ. 26.16) +if d ~= 0 + c = d/2/sin(d/2); + r = c*r; +end + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.m new file mode 100644 index 0000000..66197c3 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_r.m @@ -0,0 +1,62 @@ +function r = circ_r(alpha, w, d, dim) +% r = circ_r(alpha, w, d) +% Computes mean resultant vector length for circular data. +% +% Input: +% alpha sample of angles in radians +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r, in radians (!)] +% [dim compute along this dimension, default is 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_r(alpha, [], [], dim) +% +% Output: +% r mean resultant length +% +% PHB 7/6/2008 +% +% References: +% Statistical analysis of circular data, N.I. Fisher +% Topics in circular statistics, S.R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 4 + dim = 1; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + +if nargin < 3 || isempty(d) + % per default do not apply correct for binned data + d = 0; +end + +% compute weighted sum of cos and sin of angles +r = sum(w.*exp(1i*alpha),dim); + +% obtain length +r = abs(r)./sum(w,dim); + +% for data with known spacing, apply correction factor to correct for bias +% in the estimation of r (see Zar, p. 601, equ. 26.16) +if d ~= 0 + c = d/2/sin(d/2); + r = c*r; +end + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_rad2ang.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_rad2ang.m new file mode 100644 index 0000000..394928d --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_rad2ang.m @@ -0,0 +1,11 @@ +function alpha = circ_rad2ang(alpha) + +% alpha = circ-rad2ang(alpha) +% converts values in radians to values in degree +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +alpha = alpha / pi *180; \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_raotest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_raotest.m new file mode 100644 index 0000000..ec31576 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_raotest.m @@ -0,0 +1,130 @@ +function [p U UC] = circ_raotest(alpha) + +% [p U UC] = circ_raotest(alpha) +% Calculates Rao's spacing test by comparing distances between points on +% a circle to those expected from a uniform distribution. +% +% H0: Data is distributed uniformly around the circle. +% H1: Data is not uniformly distributed around the circle. +% +% Alternative to the Rayleigh test and the Omnibus test. Less powerful +% than the Rayleigh test when the distribution is unimodal on a global +% scale but uniform locally. +% +% Due to the complexity of the distributioin of the test statistic, we +% resort to the tables published by +% Russell, Gerald S. and Levitin, Daniel J.(1995) +% 'An expanded table of probability values for rao's spacing test' +% Communications in Statistics - Simulation and Computation +% Therefore the reported p-value is the smallest alpha level at which the +% test would still be significant. If the test is not significant at the +% alpha=0.1 level, we return the critical value for alpha = 0.05 and p = +% 0.5. +% +% Input: +% alpha sample of angles +% +% Output: +% p smallest p-value at which test would be significant +% U computed value of the test-statistic u +% UC critical value of the test statistic at sig-level +% +% +% References: +% Batschelet, 1981, Sec 4.6 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de + +alpha = alpha(:); + +% for the purpose of the test, convert to angles +alpha = circ_rad2ang(alpha); +n = length(alpha); +alpha = sort(alpha); + +% compute test statistic +U = 0; +lambda = 360/n; +for j = 1:n-1 + ti = alpha(j+1) - alpha(j); + U = U + abs(ti - lambda); +end + +tn = (360 - alpha(n) + alpha(1)); +U = U + abs(tn-lambda); + +U = (1/2)*U; + +% get critical value from table +[p UC] = getVal(n,U); + + + +function [p UC] = getVal(N, U) + +% Table II from Russel and Levitin, 1995 + +alpha = [0.001, .01, .05, .10]; +table = [ 4 247.32, 221.14, 186.45, 168.02; + 5 245.19, 211.93, 183.44, 168.66; + 6 236.81, 206.79, 180.65, 166.30; + 7 229.46, 202.55, 177.83, 165.05; + 8 224.41, 198.46, 175.68, 163.56; + 9 219.52, 195.27, 173.68, 162.36; + 10 215.44, 192.37, 171.98, 161.23; + 11 211.87, 189.88, 170.45, 160.24; + 12 208.69, 187.66, 169.09, 159.33; + 13 205.87, 185.68, 167.87, 158.50; + 14 203.33, 183.90, 166.76, 157.75; + 15 201.04, 182.28, 165.75, 157.06; + 16 198.96, 180.81, 164.83, 156.43; + 17 197.05, 179.46, 163.98, 155.84; + 18 195.29, 178.22, 163.20, 155.29; + 19 193.67, 177.08, 162.47, 154.78; + 20 192.17, 176.01, 161.79, 154.31; + 21 190.78, 175.02, 161.16, 153.86; + 22 189.47, 174.10, 160.56, 153.44; + 23 188.25, 173.23, 160.01, 153.05; + 24 187.11, 172.41, 159.48, 152.68; + 25 186.03, 171.64, 158.99, 152.32; + 26 185.01, 170.92, 158.52, 151.99; + 27 184.05, 170.23, 158.07, 151.67; + 28 183.14, 169.58, 157.65, 151.37; + 29 182.28, 168.96, 157.25, 151.08; + 30 181.45, 168.38, 156.87, 150.80; + 35 177.88, 165.81, 155.19, 149.59; + 40 174.99, 163.73, 153.82, 148.60; + 45 172.58, 162.00, 152.68, 147.76; + 50 170.54, 160.53, 151.70, 147.05; + 75 163.60, 155.49, 148.34, 144.56; + 100 159.45, 152.46, 146.29, 143.03; + 150 154.51, 148.84, 143.83, 141.18; + 200 151.56, 146.67, 142.35, 140.06; + 300 148.06, 144.09, 140.57, 138.71; + 400 145.96, 142.54, 139.50, 137.89; + 500 144.54, 141.48, 138.77, 137.33; + 600 143.48, 140.70, 138.23, 136.91; + 700 142.66, 140.09, 137.80, 136.59; + 800 142.00, 139.60, 137.46, 136.33; + 900 141.45, 139.19, 137.18, 136.11; + 1000 140.99, 138.84, 136.94, 135.92 ]; + +ridx = find(table(:,1)>=N,1); +cidx = find(table(ridx,2:end) size(alpha,1) + alpha = alpha'; +end + +if nargin < 2 + r = circ_r(alpha); + n = length(alpha); +else + if length(alpha)~=length(w) + error('Input dimensions do not match.') + end + if nargin < 3 + d = 0; + end + r = circ_r(alpha,w(:),d); + n = sum(w); +end + +% compute Rayleigh's R (equ. 27.1) +R = n*r; + +% compute Rayleigh's z (equ. 27.2) +z = R^2 / n; + +% compute p value using approxation in Zar, p. 617 +pval = exp(sqrt(1+4*n+4*(n^2-R^2))-(1+2*n)); + +% outdated version: +% compute the p value using an approximation from Fisher, p. 70 +% pval = exp(-z); +% if n < 50 +% pval = pval * (1 + (2*z - z^2) / (4*n) - ... +% (24*z - 132*z^2 + 76*z^3 - 9*z^4) / (288*n^2)); +% end + + + + + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_samplecdf.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_samplecdf.m new file mode 100644 index 0000000..fa0724e --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_samplecdf.m @@ -0,0 +1,74 @@ +function [phis, cdf, phiplot, cdfplot] = circ_samplecdf(thetas, resolution) + +% [phis, cdf, phiplot, cdfplot] = circ_samplecdf(thetas, resolution) +% +% Helper function for circ_kuipertest. +% Evaluates CDF of sample in thetas. +% +% Input: +% thetas sample (in radians) +% resolution resolution at which the cdf is evaluated +% +% Output: +% phis angles at which CDF is evaluated +% cdf CDF values at these angles +% phiplot as phi, for plotting +% cdfplot as cdf, for plotting +% +% +% Circular Statistics Toolbox for Matlab + +% By Marc J. Velasco, 2009 +% velasco@ccs.fau.edu + +if nargin < 2 + resolution = 100; +end + +phis = 0; +cdf = zeros(1, length(phis)); + +phis = linspace(0,2*pi,resolution+1); +phis = phis(1:end-1); + +% ensure all points in thetas are on interval [0, 2pi) +x = thetas(thetas<0); +thetas(thetas<0) = (2*pi-abs(x)); + +% compute cdf +thetas = sort(thetas); +dprob = 1/length(thetas); %incremental change in probability +cumprob = 0; %cumultive probability so far + +% for a little bit, we'll add on 2pi to the end of phis +phis = [phis 2*pi]; + +for j=1:resolution + minang = phis(j); + maxang = phis(j+1); + currcount = sum(thetas >= minang & thetas < maxang); + cdf(j) = cumprob + dprob*currcount; + cumprob = cdf(j); +end + +phis = phis(1:end-1); + +% for each point in x, duplicate it with the preceding value in y +phis2 = phis; +cdf2 = [0 cdf(1:end-1)]; + +cdfplottable = []; +phisplottable = []; + +for j=1:length(phis); + phisplottable = [phisplottable phis(j) phis2(j)]; %#ok + cdfplottable = [cdfplottable cdf2(j) cdf(j)]; %#ok +end + +phiplot = [phisplottable 2*pi]; +cdfplot = [cdfplottable 1]; + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_skewness.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_skewness.m new file mode 100644 index 0000000..67ecd24 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_skewness.m @@ -0,0 +1,52 @@ +function [b b0] = circ_skewness(alpha, w, dim) + +% [b b0] = circ_skewness(alpha,w,dim) +% Calculates a measure of angular skewness. +% +% Input: +% alpha sample of angles +% [w weightings in case of binned angle data] +% [dim statistic computed along this dimension, 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_skewness(alpha, [], dim) +% +% Output: +% b skewness (from Pewsey) +% b0 alternative skewness measure (from Fisher) +% +% References: +% Pewsey, Metrika, 2004 +% Statistical analysis of circular data, Fisher, p. 34 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de + +if nargin < 3 + dim = 1; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + + +% compute neccessary values +R = circ_r(alpha,w,[],dim); +theta = circ_mean(alpha,w,dim); +[foo rho2 mu2] = circ_moment(alpha,w,2,true,dim); + +% compute skewness +theta2 = repmat(theta, size(alpha)./size(theta)); +b = sum(w.*(sin(2*(circ_dist(alpha,theta2)))),dim)./sum(w,dim); +b0 = rho2.*sin(circ_dist(mu2,2*theta))./(1-R).^(3/2); % (formula 2.29) + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_stats.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_stats.m new file mode 100644 index 0000000..6194907 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_stats.m @@ -0,0 +1,66 @@ +function stats = circ_stats(alpha, w, d) +% +% stats = circ_stats(alpha, w) +% Computes descriptive statistics for circular data. +% +% Input: +% alpha sample of angles in radians +% [w weightings in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r] +% +% Output: +% stats structure containing descriptive statistics +% +% References: +% Statistical analysis of circular data, N. I. Fisher +% Topics in circular statistics, S. R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de + +alpha = alpha(:); +if nargin<2 + w = ones(size(alpha)); +end + +if nargin < 3 + d = 0; +end + +% mean +stats.mean = circ_mean(alpha,w); + +% median +if sum(w)==length(alpha) + if numel(alpha) > 1000 + idx = randperm(numel(alpha)); + idx = idx(1:1000); + else + idx = 1:numel(alpha); + end + stats.median = circ_median(alpha(idx)); +else + stats.median = NaN; +end + +% variance +stats.var = circ_var(alpha,w,d); + +% standard deviation +[stats.std stats.std0] = circ_std(alpha,w,d); + + +% skewness +[stats.skewness stats.skewness0] = circ_skewness(alpha,w); + +% kurtosis +[stats.kurtosis stats.kurtosis0] = circ_kurtosis(alpha,w); + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_std.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_std.m new file mode 100644 index 0000000..63d60e3 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_std.m @@ -0,0 +1,57 @@ +function [s s0] = circ_std(alpha, w, d, dim) +% s = circ_std(alpha, w, d, dim) +% Computes circular standard deviation for circular data +% (equ. 26.20, Zar). +% +% Input: +% alpha sample of angles in radians +% [w weightings in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r] +% [dim compute along this dimension, default is 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_std(alpha, [], [], dim) +% +% Output: +% s angular deviation +% s0 circular standard deviation +% +% PHB 6/7/2008 +% +% References: +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 4 + dim = 1; +end + +if nargin < 3 || isempty(d) + % per default do not apply correct for binned data + d = 0; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + +% compute mean resultant vector length +r = circ_r(alpha,w,d,dim); + +s = sqrt(2*(1-r)); % 26.20 +s0 = sqrt(-2*log(r)); % 26.21 + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_symtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_symtest.m new file mode 100644 index 0000000..3e8075c --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_symtest.m @@ -0,0 +1,40 @@ +function pval = circ_symtest(alpha) +% +% [pval, z] = circ_symtest(alpha,w) +% Tests for symmetry about the median. +% H0: the population is symmetrical around the median +% HA: the population is not symmetrical around the median + +% +% Input: +% alpha sample of angles in radians +% +% Output: +% pval p-value +% +% PHB 3/19/2009 +% +% References: +% Biostatistical Analysis, J. H. Zar, 27.4 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +% compute median +md = circ_median(alpha); + +% compute deviations from median +d = circ_dist(alpha,md); + +% compute wilcoxon sign rank test +pval = signrank(d); + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_var.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_var.m new file mode 100644 index 0000000..314eab0 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_var.m @@ -0,0 +1,57 @@ +function [S s] = circ_var(alpha, w, d, dim) +% s = circ_var(alpha, w, d, dim) +% Computes circular variance for circular data +% (equ. 26.17/18, Zar). +% +% Input: +% alpha sample of angles in radians +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r] +% [dim compute along this dimension, default is 1] +% +% If dim argument is specified, all other optional arguments can be +% left empty: circ_var(alpha, [], [], dim) +% +% Output: +% S circular variance 1-r +% s angular variance 2*(1-r) +% +% PHB 6/7/2008 +% +% References: +% Statistical analysis of circular data, N.I. Fisher +% Topics in circular statistics, S.R. Jammalamadaka et al. +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +if nargin < 4 + dim = 1; +end + +if nargin < 3 || isempty(d) + % per default do not apply correct for binned data + d = 0; +end + +if nargin < 2 || isempty(w) + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) ~= size(alpha,2) || size(w,1) ~= size(alpha,1) + error('Input dimensions do not match'); + end +end + +% compute mean resultant vector length +r = circ_r(alpha,w,d,dim); + +% apply transformation to var +S = 1 - r; +s = 2 * S; \ No newline at end of file diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpar.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpar.m new file mode 100644 index 0000000..d5448c5 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpar.m @@ -0,0 +1,38 @@ +function [thetahat kappa] = circ_vmpar(alpha,w,d) + +% r = circ_vmpar(alpha, w, d) +% Estimate the parameters of a von Mises distribution. +% +% Input: +% alpha sample of angles in radians +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r, in radians (!)] +% +% Output: +% thetahat preferred direction +% kappa concentration parameter +% +% PHB 3/23/2009 +% +% References: +% Statistical analysis of circular data, N.I. Fisher +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de + +alpha = alpha(:); +if nargin < 2 + w = ones(size(alpha)); +end +if nargin < 3 + d = 0; +end + +r = circ_r(alpha,w,d); +kappa = circ_kappa(r); + +thetahat = circ_mean(alpha,w); diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpdf.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpdf.m new file mode 100644 index 0000000..4636a66 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmpdf.m @@ -0,0 +1,46 @@ +function [p alpha] = circ_vmpdf(alpha, thetahat, kappa) + +% [p alpha] = circ_vmpdf(alpha, w, p) +% Computes the circular von Mises pdf with preferred direction thetahat +% and concentration kappa at each of the angles in alpha +% +% The vmpdf is given by f(phi) = +% (1/(2pi*I0(kappa))*exp(kappa*cos(phi-thetahat) +% +% Input: +% alpha angles to evaluate pdf at, if empty alphas are chosen to +% 100 uniformly spaced points around the circle +% [thetahat preferred direction, default is 0] +% [kappa concentration parameter, default is 1] +% +% Output: +% p von Mises pdf evaluated at alpha +% alpha angles at which pdf was evaluated +% +% +% References: +% Statistical analysis of circular data, Fisher +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens and Marc J. Velasco, 2009 +% velasco@ccs.fau.edu + +% if no angles are supplied, 100 evenly spaced points around the circle are +% chosen +if nargin < 1 || isempty(alpha) + alpha = linspace(0, 2*pi, 101)'; + alpha = alpha(1:end-1); +end +if nargin < 3 + kappa = 1; +end +if nargin < 2 + thetahat = 0; +end + +alpha = alpha(:); + +% evaluate pdf +C = 1/(2*pi*besseli(0,kappa)); +p = C * exp(kappa*cos(alpha-thetahat)); diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmrnd.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmrnd.m new file mode 100644 index 0000000..f936b3c --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vmrnd.m @@ -0,0 +1,87 @@ +function alpha = circ_vmrnd(theta, kappa, n) + +% alpha = circ_vmrnd(theta, kappa, n) +% Simulates n random angles from a von Mises distribution, with preferred +% direction thetahat and concentration parameter kappa. +% +% Input: +% [theta preferred direction, default is 0] +% [kappa width, default is 1] +% [n number of samples, default is 10] +% +% If n is a vector with two entries (e.g. [2 10]), the function creates +% a matrix output with the respective dimensionality. +% +% Output: +% alpha samples from von Mises distribution +% +% +% References: +% Statistical analysis of circular data, Fisher, sec. 3.3.6, p. 49 +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens and Marc J. Velasco, 2009 +% velasco@ccs.fau.edu + + +% default parameter +if nargin < 3 + n = 10; +end + +if nargin < 2 + kappa = 1; +end + +if nargin < 1 + theta = 0; +end + +if numel(n) > 2 + error('n must be a scalar or two-entry vector!') +elseif numel(n) == 2 + m = n; + n = n(1) * n(2); +end + +% if kappa is small, treat as uniform distribution +if kappa < 1e-6 + alpha = 2*pi*rand(n,1); + return +end + +% other cases +a = 1 + sqrt((1+4*kappa.^2)); +b = (a - sqrt(2*a))/(2*kappa); +r = (1 + b^2)/(2*b); + +alpha = zeros(n,1); +for j = 1:n + while true + u = rand(3,1); + + z = cos(pi*u(1)); + f = (1+r*z)/(r+z); + c = kappa*(r-f); + + if u(2) < c * (2-c) || ~(log(c)-log(u(2)) + 1 -c < 0) + break + end + + + end + + alpha(j) = theta + sign(u(3) - 0.5) * acos(f); + alpha(j) = angle(exp(i*alpha(j))); +end + +if exist('m','var') + alpha = reshape(alpha,m(1),m(2)); +end + + + + + + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vtest.m new file mode 100644 index 0000000..6a95ce2 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_vtest.m @@ -0,0 +1,77 @@ +function [pval v] = circ_vtest(alpha, dir, w, d) +% +% [pval, v] = circ_vtest(alpha, dir, w, d) +% Computes V test for non-uniformity of circular data with a specified +% mean direction dir. +% H0: the population is uniformly distributed around the circle +% HA: the population is not distributed uniformly around the circle but +% has a mean of dir. +% +% Note: Not rejecting H0 may mean that the population is uniformly +% distributed around the circle OR that it has a mode but that this mode +% is not centered at dir. +% +% The V test has more power than the Rayleigh test and is preferred if +% there is reason to believe in a specific mean direction. +% +% Input: +% alpha sample of angles in radians +% dir suspected mean direction +% [w number of incidences in case of binned angle data] +% [d spacing of bin centers for binned data, if supplied +% correction factor is used to correct for bias in +% estimation of r, in radians (!)] +% +% Output: +% pval p-value of V test +% v value of the V statistic +% +% PHB 7/6/2008 +% +% References: +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + + +if size(alpha,2) > size(alpha,1) + alpha = alpha'; +end + +if nargin<3 + % if no specific weighting has been specified + % assume no binning has taken place + w = ones(size(alpha)); +else + if size(w,2) > size(w,1) + w = w'; + end + if length(alpha)~=length(w) + error('Input dimensions do not match.') + end +end + +if nargin<4 + % per default do not apply correct for binned data + d = 0; +end + +% compute some ingredients +r = circ_r(alpha,w,d); +mu = circ_mean(alpha,w); +n = sum(w); + +% compute Rayleigh's R (equ. 27.1) +R = n * r; + +% compute the V statistic (equ. 27.5) +v = R * cos(mu-dir); + +% compute u (equ. 27.6) +u = v * sqrt(2/n); + +% compute p-value from one tailed normal approximation +pval = 1 - normcdf(u); diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_wwtest.m b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_wwtest.m new file mode 100644 index 0000000..5726171 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/circ_wwtest.m @@ -0,0 +1,157 @@ +function [pval table] = circ_wwtest(varargin) +% [pval, table] = circ_wwtest(alpha, idx, [w]) +% [pval, table] = circ_wwtest(alpha1, alpha2, [w1, w2]) +% Parametric Watson-Williams multi-sample test for equal means. Can be +% used as a one-way ANOVA test for circular data. +% +% H0: the s populations have equal means +% HA: the s populations have unequal means +% +% Note: +% Use with binned data is only advisable if binning is finer than 10 deg. +% In this case, alpha is assumed to correspond +% to bin centers. +% +% The Watson-Williams two-sample test assumes underlying von-Mises +% distributrions. All groups are assumed to have a common concentration +% parameter k. +% +% Input: +% alpha angles in radians +% idx indicates which population the respective angle in alpha +% comes from, 1:s +% [w number of incidences in case of binned angle data] +% +% Output: +% pval p-value of the Watson-Williams multi-sample test. Discard H0 if +% pval is small. +% table cell array containg the ANOVA table +% +% PHB 3/19/2009 +% +% References: +% Biostatistical Analysis, J. H. Zar +% +% Circular Statistics Toolbox for Matlab + +% By Philipp Berens, 2009 +% berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html + +[alpha, idx, w] = processInput(varargin{:}); + +% number of groups +u = unique(idx); +s = length(u); + +% number of samples +n = sum(w); + +% compute relevant quantitites +pn = zeros(s,1); pr = pn; +for t=1:s + pidx = idx == u(t); + pn(t) = sum(pidx.*w); + pr(t) = circ_r(alpha(pidx),w(pidx)); +end + +r = circ_r(alpha,w); +rw = sum(pn.*pr)/n; + +% make sure assumptions are satisfied +checkAssumption(rw,mean(pn)) + +% test statistic +kk = circ_kappa(rw); +beta = 1+3/(8*kk); % correction factor +A = sum(pr.*pn) - r*n; +B = n - sum(pr.*pn); + +F = beta * (n-s) * A / (s-1) / B; +pval = 1 - fcdf(F,s-1,n-s); + +na = nargout; +if na < 2 + printTable; +end +prepareOutput; + + + function printTable + + fprintf('\nANALYSIS OF VARIANCE TABLE (WATSON-WILLIAMS TEST)\n\n'); + fprintf('%s\t\t\t\t%s\t%s\t\t%s\t\t%s\t\t\t%s\n', ' ' ,'d.f.', 'SS', 'MS', 'F', 'P-Value'); + fprintf('--------------------------------------------------------------------\n'); + fprintf('%s\t\t\t%u\t\t%.2f\t%.2f\t%.2f\t\t%.4f\n', 'Columns', s-1 , A, A/(s-1), F, pval); + fprintf('%s\t\t%u\t\t%.2f\t%.2f\n', 'Residual ', n-s, B, B/(n-s)); + fprintf('--------------------------------------------------------------------\n'); + fprintf('%s\t\t%u\t\t%.2f', 'Total ',n-1,A+B); + fprintf('\n\n') + + end + + function prepareOutput + + if na > 1 + table = {'Source','d.f.','SS','MS','F','P-Value'; ... + 'Columns', s-1 , A, A/(s-1), F, pval; ... + 'Residual ', n-s, B, B/(n-s), [], []; ... + 'Total',n-1,A+B,[],[],[]}; + end + end +end + + + +function checkAssumption(rw,n) + + if n > 10 && rw<.45 + warning('Test not applicable. Average resultant vector length < 0.45.') %#ok + elseif n > 6 && rw<.5 + warning('Test not applicable. Average number of samples per population < 11 and average resultant vector length < 0.5.') %#ok + elseif n >=5 && rw<.55 + warning('Test not applicable. Average number of samples per population < 7 and average resultant vector length < 0.55.') %#ok + elseif n < 5 + warning('Test not applicable. Average number of samples per population < 5.') %#ok + end + +end + + +function [alpha, idx, w] = processInput(varargin) + + if nargin == 4 + alpha1 = varargin{1}(:); + alpha2 = varargin{2}(:); + w1 = varargin{3}(:); + w2 = varargin{4}(:); + alpha = [alpha1; alpha2]; + idx = [ones(size(alpha1)); ones(size(alpha2))]; + w = [w1; w2]; + elseif nargin==2 && sum(abs(round(varargin{2})-varargin{2}))>1e-5 + alpha1 = varargin{1}(:); + alpha2 = varargin{2}(:); + alpha = [alpha1; alpha2]; + idx = [ones(size(alpha1)); 2*ones(size(alpha2))]; + w = ones(size(alpha)); + elseif nargin==2 + alpha = varargin{1}(:); + idx = varargin{2}(:); + if ~(size(idx,1)==size(alpha,1)) + error('Input dimensions do not match.') + end + w = ones(size(alpha)); + elseif nargin==3 + alpha = varargin{1}(:); + idx = varargin{2}(:); + w = varargin{3}(:); + if ~(size(idx,1)==size(alpha,1)) + error('Input dimensions do not match.') + end + if ~(size(w,1)==size(alpha,1)) + error('Input dimensions do not match.') + end + else + error('Invalid use of circ_wwtest. Type help circ_wwtest.') + end +end + diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/kuipertable.mat b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/kuipertable.mat new file mode 100644 index 0000000..9d58897 Binary files /dev/null and b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/kuipertable.mat differ diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/license.txt b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/license.txt new file mode 100644 index 0000000..fab8583 --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/license.txt @@ -0,0 +1,27 @@ +Copyright (c) 2010, Philipp Berens +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution + * Neither the name of the Max Planck Institute for Biological Cybernetics nor the names + of its contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/readme.txt b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/readme.txt new file mode 100644 index 0000000..fe194bc --- /dev/null +++ b/downloaded/Circular_statistics_Toolbox(Directional_Statistics)/readme.txt @@ -0,0 +1,83 @@ +CircStat for Matlab +======================= + +Toolbox for circular statistics with Matlab. + +Authors: Philipp Berens & Marc J. Velasco +Email: berens@tuebingen.mpg.de +Homepage: http://www.kyb.tuebingen.mpg.de/~berens/circStat.html + +Contributors: +Tal Krasovsky + +Reference: +P. Berens, CircStat: A Matlab Toolbox for Circular Statistics, Journal of Statistical Software, Volume 31, Issue 10, 2009 +http://www.jstatsoft.org/v31/i10 + +Please cite this paper when the provided code is used. See licensing terms for details. + +Contents: +circ_r Resultant vector length +circ_mean Mean direction of a sample of circular data +circ_axial Mean direction for axial data +circ_median Median direction of a sample of circular data +circ_std Dispersion around the mean direction (std, mardia) +circ_var Circular variance +circ_skewness Circular skewness +circ_kurtosis Circular kurtosis +circ_moment Circular p-th moment +circ_dist Distances around a circle +circ_dist2 Pairwise distances around a circle +circ_confmean Confidence intervals for mean direction +circ_stats Summary statistics + +circ_rtest Rayleigh's test for nonuniformity +circ_otest Hodges-Ajne test (omnibus test) for nonuniformity +circ_raotest Rao's spacing test for nonuniformity +circ_vtest V-Test for nonuniformity with known mean direction +circ_medtest Test for median angle +circ_mtest One-sample test for specified mean direction +circ_wwtest Multi-sample test for equal means, one-factor ANOVA +circ_hktest Two-factor ANOVA +circ_ktest Test for equal concentration parameter +circ_symtest Test for symmetry around median angle +circ_kuipertest Test whether two distributions are identical (like KS test) + + +circ_corrcc Circular-circular correlation coefficient +circ_corrcl Circular-linear correlation coefficient + +circ_kappa Compute concentration parameter of a vm distribution + +circ_plot Visualization for circular data +circ_clust Simple clustering for circular data +circ_samplecdf Evaluate CDF of a sample of angles + +rad2ang Convert radian to angular values +ang2rad Convert angular to radian values + +All functions take arguments in radians (expect for ang2rad). For a detailed description of arguments and outputs consult the help text in the files. + +Since 2010, most functions for descriptive statistics can be used in Matlab style matrix computations. As a last argument, add the dimension along which you want to average. This changes the behavior slightly from previous relaeses, in that input is not reshaped anymore into vector format. Per default, all computations are performed columnwise (along dimension 1). If you prefer to use the old functions, for now they are contained in the subdirectory 'old'. + +References: +- E. Batschelet, Circular Statistics in Biology, Academic Press, 1981 +- N.I. Fisher, Statistical analysis of circular data, Cambridge University Press, 1996 +- S.R. Jammalamadaka et al., Topics in circular statistics, World Scientific, 2001 +- J.H. Zar, Biostatistical Analysis, Prentice Hall, 1999 + + +The implementation follows in most cases 'Biostatistical Analysis' and all referenced equations and tables are taken from this book, if not otherwise noted. In some cases, the other books were preferred for implementation was more straightforward for solutions presented there. + +If you have suggestions, bugs or feature requests or want to contribute code, please email us. + +Disclaimer: +All functions in this toolbox were implemented with care and tested on the examples presented in 'Biostatistical Analysis' were possible. Nevertheless, they may contain errors or bugs, which may affect the outcome of your analysis. We do not take responsibility for any harm coming from using this toolbox, neither if it is caused by errors in the software nor if it is caused by its improper application. Please email us any bugs you find. + +By Philipp Berens and Marc J. Velasco, 2009 +berens@tuebingen.mpg.de , velasco@ccs.fau.edu - www.kyb.mpg.de/~berens/circStat.html +Distributed under Open Source BSD License + + + + diff --git a/downloaded/Colormaps/README.txt b/downloaded/Colormaps/README.txt new file mode 100644 index 0000000..22722df --- /dev/null +++ b/downloaded/Colormaps/README.txt @@ -0,0 +1,9 @@ +DISCLAIMER: + +The author of this Matlab File Exchange submission has not created any of the colormaps. + +Parula has been taken from Matlab >=2014b + +py_A-D has been taken from the discussion of the new colormaps for matlplotlib library in python. + +Read more about colormaps on python: https://bids.github.io/colormap/ \ No newline at end of file diff --git a/downloaded/Colormaps/Thumbs.db b/downloaded/Colormaps/Thumbs.db new file mode 100644 index 0000000..d7c60c2 Binary files /dev/null and b/downloaded/Colormaps/Thumbs.db differ diff --git a/downloaded/Colormaps/demo1.m b/downloaded/Colormaps/demo1.m new file mode 100644 index 0000000..9bfb387 --- /dev/null +++ b/downloaded/Colormaps/demo1.m @@ -0,0 +1,112 @@ +%% Colormaps that are pretty awesome: DEMO1 +% this is an exampe of 4 colormaps that are being considered as the default +% colormap in python's matplotlib lybrary. +% +% All of them look quite good and they dont have any official name, so at +% the moment they are A,B,C,D. +% +% colormaps from https://github.com/bids/colormap +% +% Ander Biguri +%% Clear workspace and get screen data +clear; +clc +close all; + +screen=get(0,'ScreenSize') ; +w0=screen(1); +h0=screen(2); +w =screen(3); +h =screen(4); +%% Generate sample data +load flujet +X=X.'; + +%% Plot original with jet and parula +% Parula +h2=figure('name','Sample data with "parula" colormap'); +set(h2,'position',[w0,h0,w/3,h/2]) +imagesc(X) + +if verLessThan('matlab', '8.4') + % if parula is the "future" + colormap(fake_parula()); +else + % if parula is already in Matlab + colormap('parula'); +end +axis image +xlabel('Parula Colormap') +set(gca,'xtick',[],'ytick',[]) % This is axis off without offing the labels + +% Jet +h1=figure('name','Sample data with "jet" colormap'); +set(h1,'position',[w0,h/2,w/3,h/2]) +imagesc(X) +colormap('jet') +xlabel('jet Colormap') +set(gca,'xtick',[],'ytick',[]) % This is axis off without offing the labels +axis image + + +%% Load new colormaps + +m=100; +cm_magma=magma(m); +cm_inferno=inferno(m); +cm_plasma=plasma(m); +cm_viridis=viridis(m); + + +%% Plot new colormaps +h3=figure('name','Super-cool new colormaps that you can easily use'); +set(h3,'position',[w/3,h0,2*w/3,h]) +if verLessThan('matlab', '8.4') +% If you are using old Matlab figure engine do it this way +% (some very lousy colormap problems before) + subplot(2,2,1,'Position',[0.05 0.55 0.4 0.4]) + subimage(uint8(X/max(X(:))*255),cm_magma) + xlabel('MAGMA') + set(gca,'xtick',[],'ytick',[]) + + + subplot(2,2,2,'Position',[0.55 0.55 0.4 0.4]) + subimage(uint8(X/max(X(:))*255),cm_inferno) + xlabel('INFERNO') + set(gca,'xtick',[],'ytick',[]) + + + subplot(2,2,3,'Position',[0.05 0.05 0.4 0.4]) + subimage(uint8(X/max(X(:))*255),cm_plasma) + xlabel('PLASMA') + set(gca,'xtick',[],'ytick',[]) + + subplot(2,2,4,'Position',[0.55 0.05 0.4 0.4]) + subimage(uint8(X/max(X(:))*255),cm_viridis) + xlabel('VIRIDIS') + set(gca,'xtick',[],'ytick',[]) +else + sp1=subplot(2,2,1,'Position',[0.05 0.55 0.4 0.4]); + imagesc(X) + colormap(sp1,cm_magma) + xlabel('MAGMA') + set(gca,'xtick',[],'ytick',[]) + + sp2=subplot(2,2,2,'Position',[0.55 0.55 0.4 0.4]); + imagesc(X) + colormap(sp2,cm_inferno) + xlabel('INFERNO') + set(gca,'xtick',[],'ytick',[]) + + sp3=subplot(2,2,3,'Position',[0.05 0.05 0.4 0.4]); + imagesc(X) + colormap(sp3,cm_plasma) + xlabel('PLASMA') + set(gca,'xtick',[],'ytick',[]) + + sp4=subplot(2,2,4,'Position',[0.55 0.05 0.4 0.4]); + imagesc(X) + colormap(sp4,cm_viridis) + xlabel('VIRIDIS') + set(gca,'xtick',[],'ytick',[]) +end diff --git a/downloaded/Colormaps/demo1_output.png b/downloaded/Colormaps/demo1_output.png new file mode 100644 index 0000000..4c5bf22 Binary files /dev/null and b/downloaded/Colormaps/demo1_output.png differ diff --git a/downloaded/Colormaps/demo2.m b/downloaded/Colormaps/demo2.m new file mode 100644 index 0000000..ba87a98 --- /dev/null +++ b/downloaded/Colormaps/demo2.m @@ -0,0 +1,54 @@ +%% Colormaps that are pretty awesome: DEMO2 +% In this demo we will show how to supereasily use the new colormaps +% +% +% this is an exampe of 4 colormaps that are being considered as the default +% colormap in python's matplotlib lybrary. +% +% All of them look quite good and they dont have any official name, so at +% the moment they are A,B,C,D. +% +% colormaps from https://github.com/bids/colormap +% +% Ander Biguri +%% Clear workspace and get screen data +clear; +clc +close all; + + +%% Generate sample data +X=peaks(200); + +%% Load Colomaps + +jet=colormap('jet'); +parula=fake_parula(); +magma=magma(); +inferno=inferno(); +plasma=plasma(); +viridis=viridis(); + + + +%% Chose colormap +% Use 1 only, else it will just use the last +% CTRL+R -> comment line +% CTRL+T -> Uncomment line + +% colormap(jet); +% colormap(parula); +% colormap(magma); +% colormap(inferno); +% colormap(plasma); +colormap(viridis); + +%% Plot + +for ii=1:0.3:20 + surf(cos(2*pi*ii/20)*X,'linestyle','none'); + axis off + axis([0 200 0 200 -10 10]) + set(gca, 'CLim', [-8, 8]); + drawnow +end diff --git a/downloaded/Colormaps/fake_parula.m b/downloaded/Colormaps/fake_parula.m new file mode 100644 index 0000000..dcd4ce4 --- /dev/null +++ b/downloaded/Colormaps/fake_parula.m @@ -0,0 +1,76 @@ +function cm_data=fake_parula(m) + +cm = [[0.2081, 0.1663, 0.5292], + [0.2116238095, 0.1897809524, 0.5776761905], + [0.212252381, 0.2137714286, 0.6269714286], + [0.2081, 0.2386, 0.6770857143], + [0.1959047619, 0.2644571429, 0.7279], + [0.1707285714, 0.2919380952, 0.779247619], + [0.1252714286, 0.3242428571, 0.8302714286], + [0.0591333333, 0.3598333333, 0.8683333333], + [0.0116952381, 0.3875095238, 0.8819571429], + [0.0059571429, 0.4086142857, 0.8828428571], + [0.0165142857, 0.4266, 0.8786333333], + [0.032852381, 0.4430428571, 0.8719571429], + [0.0498142857, 0.4585714286, 0.8640571429], + [0.0629333333, 0.4736904762, 0.8554380952], + [0.0722666667, 0.4886666667, 0.8467], + [0.0779428571, 0.5039857143, 0.8383714286], + [0.079347619, 0.5200238095, 0.8311809524], + [0.0749428571, 0.5375428571, 0.8262714286], + [0.0640571429, 0.5569857143, 0.8239571429], + [0.0487714286, 0.5772238095, 0.8228285714], + [0.0343428571, 0.5965809524, 0.819852381], + [0.0265, 0.6137, 0.8135], + [0.0238904762, 0.6286619048, 0.8037619048], + [0.0230904762, 0.6417857143, 0.7912666667], + [0.0227714286, 0.6534857143, 0.7767571429], + [0.0266619048, 0.6641952381, 0.7607190476], + [0.0383714286, 0.6742714286, 0.743552381], + [0.0589714286, 0.6837571429, 0.7253857143], + [0.0843, 0.6928333333, 0.7061666667], + [0.1132952381, 0.7015, 0.6858571429], + [0.1452714286, 0.7097571429, 0.6646285714], + [0.1801333333, 0.7176571429, 0.6424333333], + [0.2178285714, 0.7250428571, 0.6192619048], + [0.2586428571, 0.7317142857, 0.5954285714], + [0.3021714286, 0.7376047619, 0.5711857143], + [0.3481666667, 0.7424333333, 0.5472666667], + [0.3952571429, 0.7459, 0.5244428571], + [0.4420095238, 0.7480809524, 0.5033142857], + [0.4871238095, 0.7490619048, 0.4839761905], + [0.5300285714, 0.7491142857, 0.4661142857], + [0.5708571429, 0.7485190476, 0.4493904762], + [0.609852381, 0.7473142857, 0.4336857143], + [0.6473, 0.7456, 0.4188], + [0.6834190476, 0.7434761905, 0.4044333333], + [0.7184095238, 0.7411333333, 0.3904761905], + [0.7524857143, 0.7384, 0.3768142857], + [0.7858428571, 0.7355666667, 0.3632714286], + [0.8185047619, 0.7327333333, 0.3497904762], + [0.8506571429, 0.7299, 0.3360285714], + [0.8824333333, 0.7274333333, 0.3217], + [0.9139333333, 0.7257857143, 0.3062761905], + [0.9449571429, 0.7261142857, 0.2886428571], + [0.9738952381, 0.7313952381, 0.266647619], + [0.9937714286, 0.7454571429, 0.240347619], + [0.9990428571, 0.7653142857, 0.2164142857], + [0.9955333333, 0.7860571429, 0.196652381], + [0.988, 0.8066, 0.1793666667], + [0.9788571429, 0.8271428571, 0.1633142857], + [0.9697, 0.8481380952, 0.147452381], + [0.9625857143, 0.8705142857, 0.1309], + [0.9588714286, 0.8949, 0.1132428571], + [0.9598238095, 0.9218333333, 0.0948380952], + [0.9661, 0.9514428571, 0.0755333333], + [0.9763, 0.9831, 0.0538]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/Colormaps/inferno.m b/downloaded/Colormaps/inferno.m new file mode 100644 index 0000000..bdef08d --- /dev/null +++ b/downloaded/Colormaps/inferno.m @@ -0,0 +1,269 @@ +function [cm_data]=inferno(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.26726368e-03, 1.26992553e-03, 1.85703520e-02], + [ 3.29899092e-03, 2.24934863e-03, 2.42390508e-02], + [ 4.54690615e-03, 3.39180156e-03, 3.09092475e-02], + [ 6.00552565e-03, 4.69194561e-03, 3.85578980e-02], + [ 7.67578856e-03, 6.13611626e-03, 4.68360336e-02], + [ 9.56051094e-03, 7.71344131e-03, 5.51430756e-02], + [ 1.16634769e-02, 9.41675403e-03, 6.34598080e-02], + [ 1.39950388e-02, 1.12247138e-02, 7.18616890e-02], + [ 1.65605595e-02, 1.31362262e-02, 8.02817951e-02], + [ 1.93732295e-02, 1.51325789e-02, 8.87668094e-02], + [ 2.24468865e-02, 1.71991484e-02, 9.73274383e-02], + [ 2.57927373e-02, 1.93306298e-02, 1.05929835e-01], + [ 2.94324251e-02, 2.15030771e-02, 1.14621328e-01], + [ 3.33852235e-02, 2.37024271e-02, 1.23397286e-01], + [ 3.76684211e-02, 2.59207864e-02, 1.32232108e-01], + [ 4.22525554e-02, 2.81385015e-02, 1.41140519e-01], + [ 4.69146287e-02, 3.03236129e-02, 1.50163867e-01], + [ 5.16437624e-02, 3.24736172e-02, 1.59254277e-01], + [ 5.64491009e-02, 3.45691867e-02, 1.68413539e-01], + [ 6.13397200e-02, 3.65900213e-02, 1.77642172e-01], + [ 6.63312620e-02, 3.85036268e-02, 1.86961588e-01], + [ 7.14289181e-02, 4.02939095e-02, 1.96353558e-01], + [ 7.66367560e-02, 4.19053329e-02, 2.05798788e-01], + [ 8.19620773e-02, 4.33278666e-02, 2.15289113e-01], + [ 8.74113897e-02, 4.45561662e-02, 2.24813479e-01], + [ 9.29901526e-02, 4.55829503e-02, 2.34357604e-01], + [ 9.87024972e-02, 4.64018731e-02, 2.43903700e-01], + [ 1.04550936e-01, 4.70080541e-02, 2.53430300e-01], + [ 1.10536084e-01, 4.73986708e-02, 2.62912235e-01], + [ 1.16656423e-01, 4.75735920e-02, 2.72320803e-01], + [ 1.22908126e-01, 4.75360183e-02, 2.81624170e-01], + [ 1.29284984e-01, 4.72930838e-02, 2.90788012e-01], + [ 1.35778450e-01, 4.68563678e-02, 2.99776404e-01], + [ 1.42377819e-01, 4.62422566e-02, 3.08552910e-01], + [ 1.49072957e-01, 4.54676444e-02, 3.17085139e-01], + [ 1.55849711e-01, 4.45588056e-02, 3.25338414e-01], + [ 1.62688939e-01, 4.35542881e-02, 3.33276678e-01], + [ 1.69575148e-01, 4.24893149e-02, 3.40874188e-01], + [ 1.76493202e-01, 4.14017089e-02, 3.48110606e-01], + [ 1.83428775e-01, 4.03288858e-02, 3.54971391e-01], + [ 1.90367453e-01, 3.93088888e-02, 3.61446945e-01], + [ 1.97297425e-01, 3.84001825e-02, 3.67534629e-01], + [ 2.04209298e-01, 3.76322609e-02, 3.73237557e-01], + [ 2.11095463e-01, 3.70296488e-02, 3.78563264e-01], + [ 2.17948648e-01, 3.66146049e-02, 3.83522415e-01], + [ 2.24762908e-01, 3.64049901e-02, 3.88128944e-01], + [ 2.31538148e-01, 3.64052511e-02, 3.92400150e-01], + [ 2.38272961e-01, 3.66209949e-02, 3.96353388e-01], + [ 2.44966911e-01, 3.70545017e-02, 4.00006615e-01], + [ 2.51620354e-01, 3.77052832e-02, 4.03377897e-01], + [ 2.58234265e-01, 3.85706153e-02, 4.06485031e-01], + [ 2.64809649e-01, 3.96468666e-02, 4.09345373e-01], + [ 2.71346664e-01, 4.09215821e-02, 4.11976086e-01], + [ 2.77849829e-01, 4.23528741e-02, 4.14392106e-01], + [ 2.84321318e-01, 4.39325787e-02, 4.16607861e-01], + [ 2.90763373e-01, 4.56437598e-02, 4.18636756e-01], + [ 2.97178251e-01, 4.74700293e-02, 4.20491164e-01], + [ 3.03568182e-01, 4.93958927e-02, 4.22182449e-01], + [ 3.09935342e-01, 5.14069729e-02, 4.23720999e-01], + [ 3.16281835e-01, 5.34901321e-02, 4.25116277e-01], + [ 3.22609671e-01, 5.56335178e-02, 4.26376869e-01], + [ 3.28920763e-01, 5.78265505e-02, 4.27510546e-01], + [ 3.35216916e-01, 6.00598734e-02, 4.28524320e-01], + [ 3.41499828e-01, 6.23252772e-02, 4.29424503e-01], + [ 3.47771086e-01, 6.46156100e-02, 4.30216765e-01], + [ 3.54032169e-01, 6.69246832e-02, 4.30906186e-01], + [ 3.60284449e-01, 6.92471753e-02, 4.31497309e-01], + [ 3.66529195e-01, 7.15785403e-02, 4.31994185e-01], + [ 3.72767575e-01, 7.39149211e-02, 4.32400419e-01], + [ 3.79000659e-01, 7.62530701e-02, 4.32719214e-01], + [ 3.85228383e-01, 7.85914864e-02, 4.32954973e-01], + [ 3.91452659e-01, 8.09267058e-02, 4.33108763e-01], + [ 3.97674379e-01, 8.32568129e-02, 4.33182647e-01], + [ 4.03894278e-01, 8.55803445e-02, 4.33178526e-01], + [ 4.10113015e-01, 8.78961593e-02, 4.33098056e-01], + [ 4.16331169e-01, 9.02033992e-02, 4.32942678e-01], + [ 4.22549249e-01, 9.25014543e-02, 4.32713635e-01], + [ 4.28767696e-01, 9.47899342e-02, 4.32411996e-01], + [ 4.34986885e-01, 9.70686417e-02, 4.32038673e-01], + [ 4.41207124e-01, 9.93375510e-02, 4.31594438e-01], + [ 4.47428382e-01, 1.01597079e-01, 4.31080497e-01], + [ 4.53650614e-01, 1.03847716e-01, 4.30497898e-01], + [ 4.59874623e-01, 1.06089165e-01, 4.29845789e-01], + [ 4.66100494e-01, 1.08321923e-01, 4.29124507e-01], + [ 4.72328255e-01, 1.10546584e-01, 4.28334320e-01], + [ 4.78557889e-01, 1.12763831e-01, 4.27475431e-01], + [ 4.84789325e-01, 1.14974430e-01, 4.26547991e-01], + [ 4.91022448e-01, 1.17179219e-01, 4.25552106e-01], + [ 4.97257069e-01, 1.19379132e-01, 4.24487908e-01], + [ 5.03492698e-01, 1.21575414e-01, 4.23356110e-01], + [ 5.09729541e-01, 1.23768654e-01, 4.22155676e-01], + [ 5.15967304e-01, 1.25959947e-01, 4.20886594e-01], + [ 5.22205646e-01, 1.28150439e-01, 4.19548848e-01], + [ 5.28444192e-01, 1.30341324e-01, 4.18142411e-01], + [ 5.34682523e-01, 1.32533845e-01, 4.16667258e-01], + [ 5.40920186e-01, 1.34729286e-01, 4.15123366e-01], + [ 5.47156706e-01, 1.36928959e-01, 4.13510662e-01], + [ 5.53391649e-01, 1.39134147e-01, 4.11828882e-01], + [ 5.59624442e-01, 1.41346265e-01, 4.10078028e-01], + [ 5.65854477e-01, 1.43566769e-01, 4.08258132e-01], + [ 5.72081108e-01, 1.45797150e-01, 4.06369246e-01], + [ 5.78303656e-01, 1.48038934e-01, 4.04411444e-01], + [ 5.84521407e-01, 1.50293679e-01, 4.02384829e-01], + [ 5.90733615e-01, 1.52562977e-01, 4.00289528e-01], + [ 5.96939751e-01, 1.54848232e-01, 3.98124897e-01], + [ 6.03138930e-01, 1.57151161e-01, 3.95891308e-01], + [ 6.09330184e-01, 1.59473549e-01, 3.93589349e-01], + [ 6.15512627e-01, 1.61817111e-01, 3.91219295e-01], + [ 6.21685340e-01, 1.64183582e-01, 3.88781456e-01], + [ 6.27847374e-01, 1.66574724e-01, 3.86276180e-01], + [ 6.33997746e-01, 1.68992314e-01, 3.83703854e-01], + [ 6.40135447e-01, 1.71438150e-01, 3.81064906e-01], + [ 6.46259648e-01, 1.73913876e-01, 3.78358969e-01], + [ 6.52369348e-01, 1.76421271e-01, 3.75586209e-01], + [ 6.58463166e-01, 1.78962399e-01, 3.72748214e-01], + [ 6.64539964e-01, 1.81539111e-01, 3.69845599e-01], + [ 6.70598572e-01, 1.84153268e-01, 3.66879025e-01], + [ 6.76637795e-01, 1.86806728e-01, 3.63849195e-01], + [ 6.82656407e-01, 1.89501352e-01, 3.60756856e-01], + [ 6.88653158e-01, 1.92238994e-01, 3.57602797e-01], + [ 6.94626769e-01, 1.95021500e-01, 3.54387853e-01], + [ 7.00575937e-01, 1.97850703e-01, 3.51112900e-01], + [ 7.06499709e-01, 2.00728196e-01, 3.47776863e-01], + [ 7.12396345e-01, 2.03656029e-01, 3.44382594e-01], + [ 7.18264447e-01, 2.06635993e-01, 3.40931208e-01], + [ 7.24102613e-01, 2.09669834e-01, 3.37423766e-01], + [ 7.29909422e-01, 2.12759270e-01, 3.33861367e-01], + [ 7.35683432e-01, 2.15905976e-01, 3.30245147e-01], + [ 7.41423185e-01, 2.19111589e-01, 3.26576275e-01], + [ 7.47127207e-01, 2.22377697e-01, 3.22855952e-01], + [ 7.52794009e-01, 2.25705837e-01, 3.19085410e-01], + [ 7.58422090e-01, 2.29097492e-01, 3.15265910e-01], + [ 7.64009940e-01, 2.32554083e-01, 3.11398734e-01], + [ 7.69556038e-01, 2.36076967e-01, 3.07485188e-01], + [ 7.75058888e-01, 2.39667435e-01, 3.03526312e-01], + [ 7.80517023e-01, 2.43326720e-01, 2.99522665e-01], + [ 7.85928794e-01, 2.47055968e-01, 2.95476756e-01], + [ 7.91292674e-01, 2.50856232e-01, 2.91389943e-01], + [ 7.96607144e-01, 2.54728485e-01, 2.87263585e-01], + [ 8.01870689e-01, 2.58673610e-01, 2.83099033e-01], + [ 8.07081807e-01, 2.62692401e-01, 2.78897629e-01], + [ 8.12239008e-01, 2.66785558e-01, 2.74660698e-01], + [ 8.17340818e-01, 2.70953688e-01, 2.70389545e-01], + [ 8.22385784e-01, 2.75197300e-01, 2.66085445e-01], + [ 8.27372474e-01, 2.79516805e-01, 2.61749643e-01], + [ 8.32299481e-01, 2.83912516e-01, 2.57383341e-01], + [ 8.37165425e-01, 2.88384647e-01, 2.52987700e-01], + [ 8.41968959e-01, 2.92933312e-01, 2.48563825e-01], + [ 8.46708768e-01, 2.97558528e-01, 2.44112767e-01], + [ 8.51383572e-01, 3.02260213e-01, 2.39635512e-01], + [ 8.55992130e-01, 3.07038188e-01, 2.35132978e-01], + [ 8.60533241e-01, 3.11892183e-01, 2.30606009e-01], + [ 8.65005747e-01, 3.16821833e-01, 2.26055368e-01], + [ 8.69408534e-01, 3.21826685e-01, 2.21481734e-01], + [ 8.73740530e-01, 3.26906201e-01, 2.16885699e-01], + [ 8.78000715e-01, 3.32059760e-01, 2.12267762e-01], + [ 8.82188112e-01, 3.37286663e-01, 2.07628326e-01], + [ 8.86301795e-01, 3.42586137e-01, 2.02967696e-01], + [ 8.90340885e-01, 3.47957340e-01, 1.98286080e-01], + [ 8.94304553e-01, 3.53399363e-01, 1.93583583e-01], + [ 8.98192017e-01, 3.58911240e-01, 1.88860212e-01], + [ 9.02002544e-01, 3.64491949e-01, 1.84115876e-01], + [ 9.05735448e-01, 3.70140419e-01, 1.79350388e-01], + [ 9.09390090e-01, 3.75855533e-01, 1.74563472e-01], + [ 9.12965874e-01, 3.81636138e-01, 1.69754764e-01], + [ 9.16462251e-01, 3.87481044e-01, 1.64923826e-01], + [ 9.19878710e-01, 3.93389034e-01, 1.60070152e-01], + [ 9.23214783e-01, 3.99358867e-01, 1.55193185e-01], + [ 9.26470039e-01, 4.05389282e-01, 1.50292329e-01], + [ 9.29644083e-01, 4.11479007e-01, 1.45366973e-01], + [ 9.32736555e-01, 4.17626756e-01, 1.40416519e-01], + [ 9.35747126e-01, 4.23831237e-01, 1.35440416e-01], + [ 9.38675494e-01, 4.30091162e-01, 1.30438175e-01], + [ 9.41521384e-01, 4.36405243e-01, 1.25409440e-01], + [ 9.44284543e-01, 4.42772199e-01, 1.20354038e-01], + [ 9.46964741e-01, 4.49190757e-01, 1.15272059e-01], + [ 9.49561766e-01, 4.55659658e-01, 1.10163947e-01], + [ 9.52075421e-01, 4.62177656e-01, 1.05030614e-01], + [ 9.54505523e-01, 4.68743522e-01, 9.98735931e-02], + [ 9.56851903e-01, 4.75356048e-01, 9.46952268e-02], + [ 9.59114397e-01, 4.82014044e-01, 8.94989073e-02], + [ 9.61292850e-01, 4.88716345e-01, 8.42893891e-02], + [ 9.63387110e-01, 4.95461806e-01, 7.90731907e-02], + [ 9.65397031e-01, 5.02249309e-01, 7.38591143e-02], + [ 9.67322465e-01, 5.09077761e-01, 6.86589199e-02], + [ 9.69163264e-01, 5.15946092e-01, 6.34881971e-02], + [ 9.70919277e-01, 5.22853259e-01, 5.83674890e-02], + [ 9.72590351e-01, 5.29798246e-01, 5.33237243e-02], + [ 9.74176327e-01, 5.36780059e-01, 4.83920090e-02], + [ 9.75677038e-01, 5.43797733e-01, 4.36177922e-02], + [ 9.77092313e-01, 5.50850323e-01, 3.90500131e-02], + [ 9.78421971e-01, 5.57936911e-01, 3.49306227e-02], + [ 9.79665824e-01, 5.65056600e-01, 3.14091591e-02], + [ 9.80823673e-01, 5.72208516e-01, 2.85075931e-02], + [ 9.81895311e-01, 5.79391803e-01, 2.62497353e-02], + [ 9.82880522e-01, 5.86605627e-01, 2.46613416e-02], + [ 9.83779081e-01, 5.93849168e-01, 2.37702263e-02], + [ 9.84590755e-01, 6.01121626e-01, 2.36063833e-02], + [ 9.85315301e-01, 6.08422211e-01, 2.42021174e-02], + [ 9.85952471e-01, 6.15750147e-01, 2.55921853e-02], + [ 9.86502013e-01, 6.23104667e-01, 2.78139496e-02], + [ 9.86963670e-01, 6.30485011e-01, 3.09075459e-02], + [ 9.87337182e-01, 6.37890424e-01, 3.49160639e-02], + [ 9.87622296e-01, 6.45320152e-01, 3.98857472e-02], + [ 9.87818759e-01, 6.52773439e-01, 4.55808037e-02], + [ 9.87926330e-01, 6.60249526e-01, 5.17503867e-02], + [ 9.87944783e-01, 6.67747641e-01, 5.83286889e-02], + [ 9.87873910e-01, 6.75267000e-01, 6.52570167e-02], + [ 9.87713535e-01, 6.82806802e-01, 7.24892330e-02], + [ 9.87463516e-01, 6.90366218e-01, 7.99897176e-02], + [ 9.87123759e-01, 6.97944391e-01, 8.77314215e-02], + [ 9.86694229e-01, 7.05540424e-01, 9.56941797e-02], + [ 9.86174970e-01, 7.13153375e-01, 1.03863324e-01], + [ 9.85565739e-01, 7.20782460e-01, 1.12228756e-01], + [ 9.84865203e-01, 7.28427497e-01, 1.20784651e-01], + [ 9.84075129e-01, 7.36086521e-01, 1.29526579e-01], + [ 9.83195992e-01, 7.43758326e-01, 1.38453063e-01], + [ 9.82228463e-01, 7.51441596e-01, 1.47564573e-01], + [ 9.81173457e-01, 7.59134892e-01, 1.56863224e-01], + [ 9.80032178e-01, 7.66836624e-01, 1.66352544e-01], + [ 9.78806183e-01, 7.74545028e-01, 1.76037298e-01], + [ 9.77497453e-01, 7.82258138e-01, 1.85923357e-01], + [ 9.76108474e-01, 7.89973753e-01, 1.96017589e-01], + [ 9.74637842e-01, 7.97691563e-01, 2.06331925e-01], + [ 9.73087939e-01, 8.05409333e-01, 2.16876839e-01], + [ 9.71467822e-01, 8.13121725e-01, 2.27658046e-01], + [ 9.69783146e-01, 8.20825143e-01, 2.38685942e-01], + [ 9.68040817e-01, 8.28515491e-01, 2.49971582e-01], + [ 9.66242589e-01, 8.36190976e-01, 2.61533898e-01], + [ 9.64393924e-01, 8.43848069e-01, 2.73391112e-01], + [ 9.62516656e-01, 8.51476340e-01, 2.85545675e-01], + [ 9.60625545e-01, 8.59068716e-01, 2.98010219e-01], + [ 9.58720088e-01, 8.66624355e-01, 3.10820466e-01], + [ 9.56834075e-01, 8.74128569e-01, 3.23973947e-01], + [ 9.54997177e-01, 8.81568926e-01, 3.37475479e-01], + [ 9.53215092e-01, 8.88942277e-01, 3.51368713e-01], + [ 9.51546225e-01, 8.96225909e-01, 3.65627005e-01], + [ 9.50018481e-01, 9.03409063e-01, 3.80271225e-01], + [ 9.48683391e-01, 9.10472964e-01, 3.95289169e-01], + [ 9.47594362e-01, 9.17399053e-01, 4.10665194e-01], + [ 9.46809163e-01, 9.24168246e-01, 4.26373236e-01], + [ 9.46391536e-01, 9.30760752e-01, 4.42367495e-01], + [ 9.46402951e-01, 9.37158971e-01, 4.58591507e-01], + [ 9.46902568e-01, 9.43347775e-01, 4.74969778e-01], + [ 9.47936825e-01, 9.49317522e-01, 4.91426053e-01], + [ 9.49544830e-01, 9.55062900e-01, 5.07859649e-01], + [ 9.51740304e-01, 9.60586693e-01, 5.24203026e-01], + [ 9.54529281e-01, 9.65895868e-01, 5.40360752e-01], + [ 9.57896053e-01, 9.71003330e-01, 5.56275090e-01], + [ 9.61812020e-01, 9.75924241e-01, 5.71925382e-01], + [ 9.66248822e-01, 9.80678193e-01, 5.87205773e-01], + [ 9.71161622e-01, 9.85282161e-01, 6.02154330e-01], + [ 9.76510983e-01, 9.89753437e-01, 6.16760413e-01], + [ 9.82257307e-01, 9.94108844e-01, 6.31017009e-01], + [ 9.88362068e-01, 9.98364143e-01, 6.44924005e-01]]; +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(144:end,1)=hsv(144:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/Colormaps/license.txt b/downloaded/Colormaps/license.txt new file mode 100644 index 0000000..b25d0af --- /dev/null +++ b/downloaded/Colormaps/license.txt @@ -0,0 +1,25 @@ +Copyright (c) 2016, Ander Biguri +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution +* Neither the name of nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/Colormaps/magma.asv b/downloaded/Colormaps/magma.asv new file mode 100644 index 0000000..b98d23f --- /dev/null +++ b/downloaded/Colormaps/magma.asv @@ -0,0 +1,271 @@ +function [cm_data]=magma(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.25764007e-03, 1.29495431e-03, 1.83311461e-02], + [ 3.27943222e-03, 2.30452991e-03, 2.37083291e-02], + [ 4.51230222e-03, 3.49037666e-03, 2.99647059e-02], + [ 5.94976987e-03, 4.84285000e-03, 3.71296695e-02], + [ 7.58798550e-03, 6.35613622e-03, 4.49730774e-02], + [ 9.42604390e-03, 8.02185006e-03, 5.28443561e-02], + [ 1.14654337e-02, 9.82831486e-03, 6.07496380e-02], + [ 1.37075706e-02, 1.17705913e-02, 6.86665843e-02], + [ 1.61557566e-02, 1.38404966e-02, 7.66026660e-02], + [ 1.88153670e-02, 1.60262753e-02, 8.45844897e-02], + [ 2.16919340e-02, 1.83201254e-02, 9.26101050e-02], + [ 2.47917814e-02, 2.07147875e-02, 1.00675555e-01], + [ 2.81228154e-02, 2.32009284e-02, 1.08786954e-01], + [ 3.16955304e-02, 2.57651161e-02, 1.16964722e-01], + [ 3.55204468e-02, 2.83974570e-02, 1.25209396e-01], + [ 3.96084872e-02, 3.10895652e-02, 1.33515085e-01], + [ 4.38295350e-02, 3.38299885e-02, 1.41886249e-01], + [ 4.80616391e-02, 3.66066101e-02, 1.50326989e-01], + [ 5.23204388e-02, 3.94066020e-02, 1.58841025e-01], + [ 5.66148978e-02, 4.21598925e-02, 1.67445592e-01], + [ 6.09493930e-02, 4.47944924e-02, 1.76128834e-01], + [ 6.53301801e-02, 4.73177796e-02, 1.84891506e-01], + [ 6.97637296e-02, 4.97264666e-02, 1.93735088e-01], + [ 7.42565152e-02, 5.20167766e-02, 2.02660374e-01], + [ 7.88150034e-02, 5.41844801e-02, 2.11667355e-01], + [ 8.34456313e-02, 5.62249365e-02, 2.20755099e-01], + [ 8.81547730e-02, 5.81331465e-02, 2.29921611e-01], + [ 9.29486914e-02, 5.99038167e-02, 2.39163669e-01], + [ 9.78334770e-02, 6.15314414e-02, 2.48476662e-01], + [ 1.02814972e-01, 6.30104053e-02, 2.57854400e-01], + [ 1.07898679e-01, 6.43351102e-02, 2.67288933e-01], + [ 1.13094451e-01, 6.54920358e-02, 2.76783978e-01], + [ 1.18405035e-01, 6.64791593e-02, 2.86320656e-01], + [ 1.23832651e-01, 6.72946449e-02, 2.95879431e-01], + [ 1.29380192e-01, 6.79349264e-02, 3.05442931e-01], + [ 1.35053322e-01, 6.83912798e-02, 3.14999890e-01], + [ 1.40857952e-01, 6.86540710e-02, 3.24537640e-01], + [ 1.46785234e-01, 6.87382323e-02, 3.34011109e-01], + [ 1.52839217e-01, 6.86368599e-02, 3.43404450e-01], + [ 1.59017511e-01, 6.83540225e-02, 3.52688028e-01], + [ 1.65308131e-01, 6.79108689e-02, 3.61816426e-01], + [ 1.71713033e-01, 6.73053260e-02, 3.70770827e-01], + [ 1.78211730e-01, 6.65758073e-02, 3.79497161e-01], + [ 1.84800877e-01, 6.57324381e-02, 3.87972507e-01], + [ 1.91459745e-01, 6.48183312e-02, 3.96151969e-01], + [ 1.98176877e-01, 6.38624166e-02, 4.04008953e-01], + [ 2.04934882e-01, 6.29066192e-02, 4.11514273e-01], + [ 2.11718061e-01, 6.19917876e-02, 4.18646741e-01], + [ 2.18511590e-01, 6.11584918e-02, 4.25391816e-01], + [ 2.25302032e-01, 6.04451843e-02, 4.31741767e-01], + [ 2.32076515e-01, 5.98886855e-02, 4.37694665e-01], + [ 2.38825991e-01, 5.95170384e-02, 4.43255999e-01], + [ 2.45543175e-01, 5.93524384e-02, 4.48435938e-01], + [ 2.52220252e-01, 5.94147119e-02, 4.53247729e-01], + [ 2.58857304e-01, 5.97055998e-02, 4.57709924e-01], + [ 2.65446744e-01, 6.02368754e-02, 4.61840297e-01], + [ 2.71994089e-01, 6.09935552e-02, 4.65660375e-01], + [ 2.78493300e-01, 6.19778136e-02, 4.69190328e-01], + [ 2.84951097e-01, 6.31676261e-02, 4.72450879e-01], + [ 2.91365817e-01, 6.45534486e-02, 4.75462193e-01], + [ 2.97740413e-01, 6.61170432e-02, 4.78243482e-01], + [ 3.04080941e-01, 6.78353452e-02, 4.80811572e-01], + [ 3.10382027e-01, 6.97024767e-02, 4.83186340e-01], + [ 3.16654235e-01, 7.16895272e-02, 4.85380429e-01], + [ 3.22899126e-01, 7.37819504e-02, 4.87408399e-01], + [ 3.29114038e-01, 7.59715081e-02, 4.89286796e-01], + [ 3.35307503e-01, 7.82361045e-02, 4.91024144e-01], + [ 3.41481725e-01, 8.05635079e-02, 4.92631321e-01], + [ 3.47635742e-01, 8.29463512e-02, 4.94120923e-01], + [ 3.53773161e-01, 8.53726329e-02, 4.95501096e-01], + [ 3.59897941e-01, 8.78311772e-02, 4.96778331e-01], + [ 3.66011928e-01, 9.03143031e-02, 4.97959963e-01], + [ 3.72116205e-01, 9.28159917e-02, 4.99053326e-01], + [ 3.78210547e-01, 9.53322947e-02, 5.00066568e-01], + [ 3.84299445e-01, 9.78549106e-02, 5.01001964e-01], + [ 3.90384361e-01, 1.00379466e-01, 5.01864236e-01], + [ 3.96466670e-01, 1.02902194e-01, 5.02657590e-01], + [ 4.02547663e-01, 1.05419865e-01, 5.03385761e-01], + [ 4.08628505e-01, 1.07929771e-01, 5.04052118e-01], + [ 4.14708664e-01, 1.10431177e-01, 5.04661843e-01], + [ 4.20791157e-01, 1.12920210e-01, 5.05214935e-01], + [ 4.26876965e-01, 1.15395258e-01, 5.05713602e-01], + [ 4.32967001e-01, 1.17854987e-01, 5.06159754e-01], + [ 4.39062114e-01, 1.20298314e-01, 5.06555026e-01], + [ 4.45163096e-01, 1.22724371e-01, 5.06900806e-01], + [ 4.51270678e-01, 1.25132484e-01, 5.07198258e-01], + [ 4.57385535e-01, 1.27522145e-01, 5.07448336e-01], + [ 4.63508291e-01, 1.29892998e-01, 5.07651812e-01], + [ 4.69639514e-01, 1.32244819e-01, 5.07809282e-01], + [ 4.75779723e-01, 1.34577500e-01, 5.07921193e-01], + [ 4.81928997e-01, 1.36891390e-01, 5.07988509e-01], + [ 4.88088169e-01, 1.39186217e-01, 5.08010737e-01], + [ 4.94257673e-01, 1.41462106e-01, 5.07987836e-01], + [ 5.00437834e-01, 1.43719323e-01, 5.07919772e-01], + [ 5.06628929e-01, 1.45958202e-01, 5.07806420e-01], + [ 5.12831195e-01, 1.48179144e-01, 5.07647570e-01], + [ 5.19044825e-01, 1.50382611e-01, 5.07442938e-01], + [ 5.25269968e-01, 1.52569121e-01, 5.07192172e-01], + [ 5.31506735e-01, 1.54739247e-01, 5.06894860e-01], + [ 5.37755194e-01, 1.56893613e-01, 5.06550538e-01], + [ 5.44015371e-01, 1.59032895e-01, 5.06158696e-01], + [ 5.50287252e-01, 1.61157816e-01, 5.05718782e-01], + [ 5.56570783e-01, 1.63269149e-01, 5.05230210e-01], + [ 5.62865867e-01, 1.65367714e-01, 5.04692365e-01], + [ 5.69172368e-01, 1.67454379e-01, 5.04104606e-01], + [ 5.75490107e-01, 1.69530062e-01, 5.03466273e-01], + [ 5.81818864e-01, 1.71595728e-01, 5.02776690e-01], + [ 5.88158375e-01, 1.73652392e-01, 5.02035167e-01], + [ 5.94508337e-01, 1.75701122e-01, 5.01241011e-01], + [ 6.00868399e-01, 1.77743036e-01, 5.00393522e-01], + [ 6.07238169e-01, 1.79779309e-01, 4.99491999e-01], + [ 6.13617209e-01, 1.81811170e-01, 4.98535746e-01], + [ 6.20005032e-01, 1.83839907e-01, 4.97524075e-01], + [ 6.26401108e-01, 1.85866869e-01, 4.96456304e-01], + [ 6.32804854e-01, 1.87893468e-01, 4.95331769e-01], + [ 6.39215638e-01, 1.89921182e-01, 4.94149821e-01], + [ 6.45632778e-01, 1.91951556e-01, 4.92909832e-01], + [ 6.52055535e-01, 1.93986210e-01, 4.91611196e-01], + [ 6.58483116e-01, 1.96026835e-01, 4.90253338e-01], + [ 6.64914668e-01, 1.98075202e-01, 4.88835712e-01], + [ 6.71349279e-01, 2.00133166e-01, 4.87357807e-01], + [ 6.77785975e-01, 2.02202663e-01, 4.85819154e-01], + [ 6.84223712e-01, 2.04285721e-01, 4.84219325e-01], + [ 6.90661380e-01, 2.06384461e-01, 4.82557941e-01], + [ 6.97097796e-01, 2.08501100e-01, 4.80834678e-01], + [ 7.03531700e-01, 2.10637956e-01, 4.79049270e-01], + [ 7.09961888e-01, 2.12797337e-01, 4.77201121e-01], + [ 7.16387038e-01, 2.14981693e-01, 4.75289780e-01], + [ 7.22805451e-01, 2.17193831e-01, 4.73315708e-01], + [ 7.29215521e-01, 2.19436516e-01, 4.71278924e-01], + [ 7.35615545e-01, 2.21712634e-01, 4.69179541e-01], + [ 7.42003713e-01, 2.24025196e-01, 4.67017774e-01], + [ 7.48378107e-01, 2.26377345e-01, 4.64793954e-01], + [ 7.54736692e-01, 2.28772352e-01, 4.62508534e-01], + [ 7.61077312e-01, 2.31213625e-01, 4.60162106e-01], + [ 7.67397681e-01, 2.33704708e-01, 4.57755411e-01], + [ 7.73695380e-01, 2.36249283e-01, 4.55289354e-01], + [ 7.79967847e-01, 2.38851170e-01, 4.52765022e-01], + [ 7.86212372e-01, 2.41514325e-01, 4.50183695e-01], + [ 7.92426972e-01, 2.44242250e-01, 4.47543155e-01], + [ 7.98607760e-01, 2.47039798e-01, 4.44848441e-01], + [ 8.04751511e-01, 2.49911350e-01, 4.42101615e-01], + [ 8.10854841e-01, 2.52861399e-01, 4.39304963e-01], + [ 8.16914186e-01, 2.55894550e-01, 4.36461074e-01], + [ 8.22925797e-01, 2.59015505e-01, 4.33572874e-01], + [ 8.28885740e-01, 2.62229049e-01, 4.30643647e-01], + [ 8.34790818e-01, 2.65539703e-01, 4.27671352e-01], + [ 8.40635680e-01, 2.68952874e-01, 4.24665620e-01], + [ 8.46415804e-01, 2.72473491e-01, 4.21631064e-01], + [ 8.52126490e-01, 2.76106469e-01, 4.18572767e-01], + [ 8.57762870e-01, 2.79856666e-01, 4.15496319e-01], + [ 8.63320397e-01, 2.83729003e-01, 4.12402889e-01], + [ 8.68793368e-01, 2.87728205e-01, 4.09303002e-01], + [ 8.74176342e-01, 2.91858679e-01, 4.06205397e-01], + [ 8.79463944e-01, 2.96124596e-01, 4.03118034e-01], + [ 8.84650824e-01, 3.00530090e-01, 4.00047060e-01], + [ 8.89731418e-01, 3.05078817e-01, 3.97001559e-01], + [ 8.94700194e-01, 3.09773445e-01, 3.93994634e-01], + [ 8.99551884e-01, 3.14616425e-01, 3.91036674e-01], + [ 9.04281297e-01, 3.19609981e-01, 3.88136889e-01], + [ 9.08883524e-01, 3.24755126e-01, 3.85308008e-01], + [ 9.13354091e-01, 3.30051947e-01, 3.82563414e-01], + [ 9.17688852e-01, 3.35500068e-01, 3.79915138e-01], + [ 9.21884187e-01, 3.41098112e-01, 3.77375977e-01], + [ 9.25937102e-01, 3.46843685e-01, 3.74959077e-01], + [ 9.29845090e-01, 3.52733817e-01, 3.72676513e-01], + [ 9.33606454e-01, 3.58764377e-01, 3.70540883e-01], + [ 9.37220874e-01, 3.64929312e-01, 3.68566525e-01], + [ 9.40687443e-01, 3.71224168e-01, 3.66761699e-01], + [ 9.44006448e-01, 3.77642889e-01, 3.65136328e-01], + [ 9.47179528e-01, 3.84177874e-01, 3.63701130e-01], + [ 9.50210150e-01, 3.90819546e-01, 3.62467694e-01], + [ 9.53099077e-01, 3.97562894e-01, 3.61438431e-01], + [ 9.55849237e-01, 4.04400213e-01, 3.60619076e-01], + [ 9.58464079e-01, 4.11323666e-01, 3.60014232e-01], + [ 9.60949221e-01, 4.18323245e-01, 3.59629789e-01], + [ 9.63310281e-01, 4.25389724e-01, 3.59469020e-01], + [ 9.65549351e-01, 4.32518707e-01, 3.59529151e-01], + [ 9.67671128e-01, 4.39702976e-01, 3.59810172e-01], + [ 9.69680441e-01, 4.46935635e-01, 3.60311120e-01], + [ 9.71582181e-01, 4.54210170e-01, 3.61030156e-01], + [ 9.73381238e-01, 4.61520484e-01, 3.61964652e-01], + [ 9.75082439e-01, 4.68860936e-01, 3.63111292e-01], + [ 9.76690494e-01, 4.76226350e-01, 3.64466162e-01], + [ 9.78209957e-01, 4.83612031e-01, 3.66024854e-01], + [ 9.79645181e-01, 4.91013764e-01, 3.67782559e-01], + [ 9.81000291e-01, 4.98427800e-01, 3.69734157e-01], + [ 9.82279159e-01, 5.05850848e-01, 3.71874301e-01], + [ 9.83485387e-01, 5.13280054e-01, 3.74197501e-01], + [ 9.84622298e-01, 5.20712972e-01, 3.76698186e-01], + [ 9.85692925e-01, 5.28147545e-01, 3.79370774e-01], + [ 9.86700017e-01, 5.35582070e-01, 3.82209724e-01], + [ 9.87646038e-01, 5.43015173e-01, 3.85209578e-01], + [ 9.88533173e-01, 5.50445778e-01, 3.88365009e-01], + [ 9.89363341e-01, 5.57873075e-01, 3.91670846e-01], + [ 9.90138201e-01, 5.65296495e-01, 3.95122099e-01], + [ 9.90871208e-01, 5.72706259e-01, 3.98713971e-01], + [ 9.91558165e-01, 5.80106828e-01, 4.02441058e-01], + [ 9.92195728e-01, 5.87501706e-01, 4.06298792e-01], + [ 9.92784669e-01, 5.94891088e-01, 4.10282976e-01], + [ 9.93325561e-01, 6.02275297e-01, 4.14389658e-01], + [ 9.93834412e-01, 6.09643540e-01, 4.18613221e-01], + [ 9.94308514e-01, 6.16998953e-01, 4.22949672e-01], + [ 9.94737698e-01, 6.24349657e-01, 4.27396771e-01], + [ 9.95121854e-01, 6.31696376e-01, 4.31951492e-01], + [ 9.95480469e-01, 6.39026596e-01, 4.36607159e-01], + [ 9.95809924e-01, 6.46343897e-01, 4.41360951e-01], + [ 9.96095703e-01, 6.53658756e-01, 4.46213021e-01], + [ 9.96341406e-01, 6.60969379e-01, 4.51160201e-01], + [ 9.96579803e-01, 6.68255621e-01, 4.56191814e-01], + [ 9.96774784e-01, 6.75541484e-01, 4.61314158e-01], + [ 9.96925427e-01, 6.82827953e-01, 4.66525689e-01], + [ 9.97077185e-01, 6.90087897e-01, 4.71811461e-01], + [ 9.97186253e-01, 6.97348991e-01, 4.77181727e-01], + [ 9.97253982e-01, 7.04610791e-01, 4.82634651e-01], + [ 9.97325180e-01, 7.11847714e-01, 4.88154375e-01], + [ 9.97350983e-01, 7.19089119e-01, 4.93754665e-01], + [ 9.97350583e-01, 7.26324415e-01, 4.99427972e-01], + [ 9.97341259e-01, 7.33544671e-01, 5.05166839e-01], + [ 9.97284689e-01, 7.40771893e-01, 5.10983331e-01], + [ 9.97228367e-01, 7.47980563e-01, 5.16859378e-01], + [ 9.97138480e-01, 7.55189852e-01, 5.22805996e-01], + [ 9.97019342e-01, 7.62397883e-01, 5.28820775e-01], + [ 9.96898254e-01, 7.69590975e-01, 5.34892341e-01], + [ 9.96726862e-01, 7.76794860e-01, 5.41038571e-01], + [ 9.96570645e-01, 7.83976508e-01, 5.47232992e-01], + [ 9.96369065e-01, 7.91167346e-01, 5.53498939e-01], + [ 9.96162309e-01, 7.98347709e-01, 5.59819643e-01], + [ 9.95932448e-01, 8.05527126e-01, 5.66201824e-01], + [ 9.95680107e-01, 8.12705773e-01, 5.72644795e-01], + [ 9.95423973e-01, 8.19875302e-01, 5.79140130e-01], + [ 9.95131288e-01, 8.27051773e-01, 5.85701463e-01], + [ 9.94851089e-01, 8.34212826e-01, 5.92307093e-01], + [ 9.94523666e-01, 8.41386618e-01, 5.98982818e-01], + [ 9.94221900e-01, 8.48540474e-01, 6.05695903e-01], + [ 9.93865767e-01, 8.55711038e-01, 6.12481798e-01], + [ 9.93545285e-01, 8.62858846e-01, 6.19299300e-01], + [ 9.93169558e-01, 8.70024467e-01, 6.26189463e-01], + [ 9.92830963e-01, 8.77168404e-01, 6.33109148e-01], + [ 9.92439881e-01, 8.84329694e-01, 6.40099465e-01], + [ 9.92089454e-01, 8.91469549e-01, 6.47116021e-01], + [ 9.91687744e-01, 8.98627050e-01, 6.54201544e-01], + [ 9.91331929e-01, 9.05762748e-01, 6.61308839e-01], + [ 9.90929685e-01, 9.12915010e-01, 6.68481201e-01], + [ 9.90569914e-01, 9.20048699e-01, 6.75674592e-01], + [ 9.90174637e-01, 9.27195612e-01, 6.82925602e-01], + [ 9.89814839e-01, 9.34328540e-01, 6.90198194e-01], + [ 9.89433736e-01, 9.41470354e-01, 6.97518628e-01], + [ 9.89077438e-01, 9.48604077e-01, 7.04862519e-01], + [ 9.88717064e-01, 9.55741520e-01, 7.12242232e-01], + [ 9.88367028e-01, 9.62878026e-01, 7.19648627e-01], + [ 9.88032885e-01, 9.70012413e-01, 7.27076773e-01], + [ 9.87690702e-01, 9.77154231e-01, 7.34536205e-01], + [ 9.87386827e-01, 9.84287561e-01, 7.42001547e-01], + [ 9.87052509e-01, 9.91437853e-01, 7.49504188e-01]]; + + +if nargin < 1 + cm_data = cm; +else + cm_data = zeros(m,3); + hsv=rgb2hsv(cm); + hsv(170:end,1)=hsv(170:end)+1; + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data=hsv2rgb(cm_data); + +end +end diff --git a/downloaded/Colormaps/magma.m b/downloaded/Colormaps/magma.m new file mode 100644 index 0000000..a8c3516 --- /dev/null +++ b/downloaded/Colormaps/magma.m @@ -0,0 +1,271 @@ +function [cm_data]=magma(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.25764007e-03, 1.29495431e-03, 1.83311461e-02], + [ 3.27943222e-03, 2.30452991e-03, 2.37083291e-02], + [ 4.51230222e-03, 3.49037666e-03, 2.99647059e-02], + [ 5.94976987e-03, 4.84285000e-03, 3.71296695e-02], + [ 7.58798550e-03, 6.35613622e-03, 4.49730774e-02], + [ 9.42604390e-03, 8.02185006e-03, 5.28443561e-02], + [ 1.14654337e-02, 9.82831486e-03, 6.07496380e-02], + [ 1.37075706e-02, 1.17705913e-02, 6.86665843e-02], + [ 1.61557566e-02, 1.38404966e-02, 7.66026660e-02], + [ 1.88153670e-02, 1.60262753e-02, 8.45844897e-02], + [ 2.16919340e-02, 1.83201254e-02, 9.26101050e-02], + [ 2.47917814e-02, 2.07147875e-02, 1.00675555e-01], + [ 2.81228154e-02, 2.32009284e-02, 1.08786954e-01], + [ 3.16955304e-02, 2.57651161e-02, 1.16964722e-01], + [ 3.55204468e-02, 2.83974570e-02, 1.25209396e-01], + [ 3.96084872e-02, 3.10895652e-02, 1.33515085e-01], + [ 4.38295350e-02, 3.38299885e-02, 1.41886249e-01], + [ 4.80616391e-02, 3.66066101e-02, 1.50326989e-01], + [ 5.23204388e-02, 3.94066020e-02, 1.58841025e-01], + [ 5.66148978e-02, 4.21598925e-02, 1.67445592e-01], + [ 6.09493930e-02, 4.47944924e-02, 1.76128834e-01], + [ 6.53301801e-02, 4.73177796e-02, 1.84891506e-01], + [ 6.97637296e-02, 4.97264666e-02, 1.93735088e-01], + [ 7.42565152e-02, 5.20167766e-02, 2.02660374e-01], + [ 7.88150034e-02, 5.41844801e-02, 2.11667355e-01], + [ 8.34456313e-02, 5.62249365e-02, 2.20755099e-01], + [ 8.81547730e-02, 5.81331465e-02, 2.29921611e-01], + [ 9.29486914e-02, 5.99038167e-02, 2.39163669e-01], + [ 9.78334770e-02, 6.15314414e-02, 2.48476662e-01], + [ 1.02814972e-01, 6.30104053e-02, 2.57854400e-01], + [ 1.07898679e-01, 6.43351102e-02, 2.67288933e-01], + [ 1.13094451e-01, 6.54920358e-02, 2.76783978e-01], + [ 1.18405035e-01, 6.64791593e-02, 2.86320656e-01], + [ 1.23832651e-01, 6.72946449e-02, 2.95879431e-01], + [ 1.29380192e-01, 6.79349264e-02, 3.05442931e-01], + [ 1.35053322e-01, 6.83912798e-02, 3.14999890e-01], + [ 1.40857952e-01, 6.86540710e-02, 3.24537640e-01], + [ 1.46785234e-01, 6.87382323e-02, 3.34011109e-01], + [ 1.52839217e-01, 6.86368599e-02, 3.43404450e-01], + [ 1.59017511e-01, 6.83540225e-02, 3.52688028e-01], + [ 1.65308131e-01, 6.79108689e-02, 3.61816426e-01], + [ 1.71713033e-01, 6.73053260e-02, 3.70770827e-01], + [ 1.78211730e-01, 6.65758073e-02, 3.79497161e-01], + [ 1.84800877e-01, 6.57324381e-02, 3.87972507e-01], + [ 1.91459745e-01, 6.48183312e-02, 3.96151969e-01], + [ 1.98176877e-01, 6.38624166e-02, 4.04008953e-01], + [ 2.04934882e-01, 6.29066192e-02, 4.11514273e-01], + [ 2.11718061e-01, 6.19917876e-02, 4.18646741e-01], + [ 2.18511590e-01, 6.11584918e-02, 4.25391816e-01], + [ 2.25302032e-01, 6.04451843e-02, 4.31741767e-01], + [ 2.32076515e-01, 5.98886855e-02, 4.37694665e-01], + [ 2.38825991e-01, 5.95170384e-02, 4.43255999e-01], + [ 2.45543175e-01, 5.93524384e-02, 4.48435938e-01], + [ 2.52220252e-01, 5.94147119e-02, 4.53247729e-01], + [ 2.58857304e-01, 5.97055998e-02, 4.57709924e-01], + [ 2.65446744e-01, 6.02368754e-02, 4.61840297e-01], + [ 2.71994089e-01, 6.09935552e-02, 4.65660375e-01], + [ 2.78493300e-01, 6.19778136e-02, 4.69190328e-01], + [ 2.84951097e-01, 6.31676261e-02, 4.72450879e-01], + [ 2.91365817e-01, 6.45534486e-02, 4.75462193e-01], + [ 2.97740413e-01, 6.61170432e-02, 4.78243482e-01], + [ 3.04080941e-01, 6.78353452e-02, 4.80811572e-01], + [ 3.10382027e-01, 6.97024767e-02, 4.83186340e-01], + [ 3.16654235e-01, 7.16895272e-02, 4.85380429e-01], + [ 3.22899126e-01, 7.37819504e-02, 4.87408399e-01], + [ 3.29114038e-01, 7.59715081e-02, 4.89286796e-01], + [ 3.35307503e-01, 7.82361045e-02, 4.91024144e-01], + [ 3.41481725e-01, 8.05635079e-02, 4.92631321e-01], + [ 3.47635742e-01, 8.29463512e-02, 4.94120923e-01], + [ 3.53773161e-01, 8.53726329e-02, 4.95501096e-01], + [ 3.59897941e-01, 8.78311772e-02, 4.96778331e-01], + [ 3.66011928e-01, 9.03143031e-02, 4.97959963e-01], + [ 3.72116205e-01, 9.28159917e-02, 4.99053326e-01], + [ 3.78210547e-01, 9.53322947e-02, 5.00066568e-01], + [ 3.84299445e-01, 9.78549106e-02, 5.01001964e-01], + [ 3.90384361e-01, 1.00379466e-01, 5.01864236e-01], + [ 3.96466670e-01, 1.02902194e-01, 5.02657590e-01], + [ 4.02547663e-01, 1.05419865e-01, 5.03385761e-01], + [ 4.08628505e-01, 1.07929771e-01, 5.04052118e-01], + [ 4.14708664e-01, 1.10431177e-01, 5.04661843e-01], + [ 4.20791157e-01, 1.12920210e-01, 5.05214935e-01], + [ 4.26876965e-01, 1.15395258e-01, 5.05713602e-01], + [ 4.32967001e-01, 1.17854987e-01, 5.06159754e-01], + [ 4.39062114e-01, 1.20298314e-01, 5.06555026e-01], + [ 4.45163096e-01, 1.22724371e-01, 5.06900806e-01], + [ 4.51270678e-01, 1.25132484e-01, 5.07198258e-01], + [ 4.57385535e-01, 1.27522145e-01, 5.07448336e-01], + [ 4.63508291e-01, 1.29892998e-01, 5.07651812e-01], + [ 4.69639514e-01, 1.32244819e-01, 5.07809282e-01], + [ 4.75779723e-01, 1.34577500e-01, 5.07921193e-01], + [ 4.81928997e-01, 1.36891390e-01, 5.07988509e-01], + [ 4.88088169e-01, 1.39186217e-01, 5.08010737e-01], + [ 4.94257673e-01, 1.41462106e-01, 5.07987836e-01], + [ 5.00437834e-01, 1.43719323e-01, 5.07919772e-01], + [ 5.06628929e-01, 1.45958202e-01, 5.07806420e-01], + [ 5.12831195e-01, 1.48179144e-01, 5.07647570e-01], + [ 5.19044825e-01, 1.50382611e-01, 5.07442938e-01], + [ 5.25269968e-01, 1.52569121e-01, 5.07192172e-01], + [ 5.31506735e-01, 1.54739247e-01, 5.06894860e-01], + [ 5.37755194e-01, 1.56893613e-01, 5.06550538e-01], + [ 5.44015371e-01, 1.59032895e-01, 5.06158696e-01], + [ 5.50287252e-01, 1.61157816e-01, 5.05718782e-01], + [ 5.56570783e-01, 1.63269149e-01, 5.05230210e-01], + [ 5.62865867e-01, 1.65367714e-01, 5.04692365e-01], + [ 5.69172368e-01, 1.67454379e-01, 5.04104606e-01], + [ 5.75490107e-01, 1.69530062e-01, 5.03466273e-01], + [ 5.81818864e-01, 1.71595728e-01, 5.02776690e-01], + [ 5.88158375e-01, 1.73652392e-01, 5.02035167e-01], + [ 5.94508337e-01, 1.75701122e-01, 5.01241011e-01], + [ 6.00868399e-01, 1.77743036e-01, 5.00393522e-01], + [ 6.07238169e-01, 1.79779309e-01, 4.99491999e-01], + [ 6.13617209e-01, 1.81811170e-01, 4.98535746e-01], + [ 6.20005032e-01, 1.83839907e-01, 4.97524075e-01], + [ 6.26401108e-01, 1.85866869e-01, 4.96456304e-01], + [ 6.32804854e-01, 1.87893468e-01, 4.95331769e-01], + [ 6.39215638e-01, 1.89921182e-01, 4.94149821e-01], + [ 6.45632778e-01, 1.91951556e-01, 4.92909832e-01], + [ 6.52055535e-01, 1.93986210e-01, 4.91611196e-01], + [ 6.58483116e-01, 1.96026835e-01, 4.90253338e-01], + [ 6.64914668e-01, 1.98075202e-01, 4.88835712e-01], + [ 6.71349279e-01, 2.00133166e-01, 4.87357807e-01], + [ 6.77785975e-01, 2.02202663e-01, 4.85819154e-01], + [ 6.84223712e-01, 2.04285721e-01, 4.84219325e-01], + [ 6.90661380e-01, 2.06384461e-01, 4.82557941e-01], + [ 6.97097796e-01, 2.08501100e-01, 4.80834678e-01], + [ 7.03531700e-01, 2.10637956e-01, 4.79049270e-01], + [ 7.09961888e-01, 2.12797337e-01, 4.77201121e-01], + [ 7.16387038e-01, 2.14981693e-01, 4.75289780e-01], + [ 7.22805451e-01, 2.17193831e-01, 4.73315708e-01], + [ 7.29215521e-01, 2.19436516e-01, 4.71278924e-01], + [ 7.35615545e-01, 2.21712634e-01, 4.69179541e-01], + [ 7.42003713e-01, 2.24025196e-01, 4.67017774e-01], + [ 7.48378107e-01, 2.26377345e-01, 4.64793954e-01], + [ 7.54736692e-01, 2.28772352e-01, 4.62508534e-01], + [ 7.61077312e-01, 2.31213625e-01, 4.60162106e-01], + [ 7.67397681e-01, 2.33704708e-01, 4.57755411e-01], + [ 7.73695380e-01, 2.36249283e-01, 4.55289354e-01], + [ 7.79967847e-01, 2.38851170e-01, 4.52765022e-01], + [ 7.86212372e-01, 2.41514325e-01, 4.50183695e-01], + [ 7.92426972e-01, 2.44242250e-01, 4.47543155e-01], + [ 7.98607760e-01, 2.47039798e-01, 4.44848441e-01], + [ 8.04751511e-01, 2.49911350e-01, 4.42101615e-01], + [ 8.10854841e-01, 2.52861399e-01, 4.39304963e-01], + [ 8.16914186e-01, 2.55894550e-01, 4.36461074e-01], + [ 8.22925797e-01, 2.59015505e-01, 4.33572874e-01], + [ 8.28885740e-01, 2.62229049e-01, 4.30643647e-01], + [ 8.34790818e-01, 2.65539703e-01, 4.27671352e-01], + [ 8.40635680e-01, 2.68952874e-01, 4.24665620e-01], + [ 8.46415804e-01, 2.72473491e-01, 4.21631064e-01], + [ 8.52126490e-01, 2.76106469e-01, 4.18572767e-01], + [ 8.57762870e-01, 2.79856666e-01, 4.15496319e-01], + [ 8.63320397e-01, 2.83729003e-01, 4.12402889e-01], + [ 8.68793368e-01, 2.87728205e-01, 4.09303002e-01], + [ 8.74176342e-01, 2.91858679e-01, 4.06205397e-01], + [ 8.79463944e-01, 2.96124596e-01, 4.03118034e-01], + [ 8.84650824e-01, 3.00530090e-01, 4.00047060e-01], + [ 8.89731418e-01, 3.05078817e-01, 3.97001559e-01], + [ 8.94700194e-01, 3.09773445e-01, 3.93994634e-01], + [ 8.99551884e-01, 3.14616425e-01, 3.91036674e-01], + [ 9.04281297e-01, 3.19609981e-01, 3.88136889e-01], + [ 9.08883524e-01, 3.24755126e-01, 3.85308008e-01], + [ 9.13354091e-01, 3.30051947e-01, 3.82563414e-01], + [ 9.17688852e-01, 3.35500068e-01, 3.79915138e-01], + [ 9.21884187e-01, 3.41098112e-01, 3.77375977e-01], + [ 9.25937102e-01, 3.46843685e-01, 3.74959077e-01], + [ 9.29845090e-01, 3.52733817e-01, 3.72676513e-01], + [ 9.33606454e-01, 3.58764377e-01, 3.70540883e-01], + [ 9.37220874e-01, 3.64929312e-01, 3.68566525e-01], + [ 9.40687443e-01, 3.71224168e-01, 3.66761699e-01], + [ 9.44006448e-01, 3.77642889e-01, 3.65136328e-01], + [ 9.47179528e-01, 3.84177874e-01, 3.63701130e-01], + [ 9.50210150e-01, 3.90819546e-01, 3.62467694e-01], + [ 9.53099077e-01, 3.97562894e-01, 3.61438431e-01], + [ 9.55849237e-01, 4.04400213e-01, 3.60619076e-01], + [ 9.58464079e-01, 4.11323666e-01, 3.60014232e-01], + [ 9.60949221e-01, 4.18323245e-01, 3.59629789e-01], + [ 9.63310281e-01, 4.25389724e-01, 3.59469020e-01], + [ 9.65549351e-01, 4.32518707e-01, 3.59529151e-01], + [ 9.67671128e-01, 4.39702976e-01, 3.59810172e-01], + [ 9.69680441e-01, 4.46935635e-01, 3.60311120e-01], + [ 9.71582181e-01, 4.54210170e-01, 3.61030156e-01], + [ 9.73381238e-01, 4.61520484e-01, 3.61964652e-01], + [ 9.75082439e-01, 4.68860936e-01, 3.63111292e-01], + [ 9.76690494e-01, 4.76226350e-01, 3.64466162e-01], + [ 9.78209957e-01, 4.83612031e-01, 3.66024854e-01], + [ 9.79645181e-01, 4.91013764e-01, 3.67782559e-01], + [ 9.81000291e-01, 4.98427800e-01, 3.69734157e-01], + [ 9.82279159e-01, 5.05850848e-01, 3.71874301e-01], + [ 9.83485387e-01, 5.13280054e-01, 3.74197501e-01], + [ 9.84622298e-01, 5.20712972e-01, 3.76698186e-01], + [ 9.85692925e-01, 5.28147545e-01, 3.79370774e-01], + [ 9.86700017e-01, 5.35582070e-01, 3.82209724e-01], + [ 9.87646038e-01, 5.43015173e-01, 3.85209578e-01], + [ 9.88533173e-01, 5.50445778e-01, 3.88365009e-01], + [ 9.89363341e-01, 5.57873075e-01, 3.91670846e-01], + [ 9.90138201e-01, 5.65296495e-01, 3.95122099e-01], + [ 9.90871208e-01, 5.72706259e-01, 3.98713971e-01], + [ 9.91558165e-01, 5.80106828e-01, 4.02441058e-01], + [ 9.92195728e-01, 5.87501706e-01, 4.06298792e-01], + [ 9.92784669e-01, 5.94891088e-01, 4.10282976e-01], + [ 9.93325561e-01, 6.02275297e-01, 4.14389658e-01], + [ 9.93834412e-01, 6.09643540e-01, 4.18613221e-01], + [ 9.94308514e-01, 6.16998953e-01, 4.22949672e-01], + [ 9.94737698e-01, 6.24349657e-01, 4.27396771e-01], + [ 9.95121854e-01, 6.31696376e-01, 4.31951492e-01], + [ 9.95480469e-01, 6.39026596e-01, 4.36607159e-01], + [ 9.95809924e-01, 6.46343897e-01, 4.41360951e-01], + [ 9.96095703e-01, 6.53658756e-01, 4.46213021e-01], + [ 9.96341406e-01, 6.60969379e-01, 4.51160201e-01], + [ 9.96579803e-01, 6.68255621e-01, 4.56191814e-01], + [ 9.96774784e-01, 6.75541484e-01, 4.61314158e-01], + [ 9.96925427e-01, 6.82827953e-01, 4.66525689e-01], + [ 9.97077185e-01, 6.90087897e-01, 4.71811461e-01], + [ 9.97186253e-01, 6.97348991e-01, 4.77181727e-01], + [ 9.97253982e-01, 7.04610791e-01, 4.82634651e-01], + [ 9.97325180e-01, 7.11847714e-01, 4.88154375e-01], + [ 9.97350983e-01, 7.19089119e-01, 4.93754665e-01], + [ 9.97350583e-01, 7.26324415e-01, 4.99427972e-01], + [ 9.97341259e-01, 7.33544671e-01, 5.05166839e-01], + [ 9.97284689e-01, 7.40771893e-01, 5.10983331e-01], + [ 9.97228367e-01, 7.47980563e-01, 5.16859378e-01], + [ 9.97138480e-01, 7.55189852e-01, 5.22805996e-01], + [ 9.97019342e-01, 7.62397883e-01, 5.28820775e-01], + [ 9.96898254e-01, 7.69590975e-01, 5.34892341e-01], + [ 9.96726862e-01, 7.76794860e-01, 5.41038571e-01], + [ 9.96570645e-01, 7.83976508e-01, 5.47232992e-01], + [ 9.96369065e-01, 7.91167346e-01, 5.53498939e-01], + [ 9.96162309e-01, 7.98347709e-01, 5.59819643e-01], + [ 9.95932448e-01, 8.05527126e-01, 5.66201824e-01], + [ 9.95680107e-01, 8.12705773e-01, 5.72644795e-01], + [ 9.95423973e-01, 8.19875302e-01, 5.79140130e-01], + [ 9.95131288e-01, 8.27051773e-01, 5.85701463e-01], + [ 9.94851089e-01, 8.34212826e-01, 5.92307093e-01], + [ 9.94523666e-01, 8.41386618e-01, 5.98982818e-01], + [ 9.94221900e-01, 8.48540474e-01, 6.05695903e-01], + [ 9.93865767e-01, 8.55711038e-01, 6.12481798e-01], + [ 9.93545285e-01, 8.62858846e-01, 6.19299300e-01], + [ 9.93169558e-01, 8.70024467e-01, 6.26189463e-01], + [ 9.92830963e-01, 8.77168404e-01, 6.33109148e-01], + [ 9.92439881e-01, 8.84329694e-01, 6.40099465e-01], + [ 9.92089454e-01, 8.91469549e-01, 6.47116021e-01], + [ 9.91687744e-01, 8.98627050e-01, 6.54201544e-01], + [ 9.91331929e-01, 9.05762748e-01, 6.61308839e-01], + [ 9.90929685e-01, 9.12915010e-01, 6.68481201e-01], + [ 9.90569914e-01, 9.20048699e-01, 6.75674592e-01], + [ 9.90174637e-01, 9.27195612e-01, 6.82925602e-01], + [ 9.89814839e-01, 9.34328540e-01, 6.90198194e-01], + [ 9.89433736e-01, 9.41470354e-01, 6.97518628e-01], + [ 9.89077438e-01, 9.48604077e-01, 7.04862519e-01], + [ 9.88717064e-01, 9.55741520e-01, 7.12242232e-01], + [ 9.88367028e-01, 9.62878026e-01, 7.19648627e-01], + [ 9.88032885e-01, 9.70012413e-01, 7.27076773e-01], + [ 9.87690702e-01, 9.77154231e-01, 7.34536205e-01], + [ 9.87386827e-01, 9.84287561e-01, 7.42001547e-01], + [ 9.87052509e-01, 9.91437853e-01, 7.49504188e-01]]; + + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(170:end,1)=hsv(170:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end diff --git a/downloaded/Colormaps/plasma.asv b/downloaded/Colormaps/plasma.asv new file mode 100644 index 0000000..2883337 --- /dev/null +++ b/downloaded/Colormaps/plasma.asv @@ -0,0 +1,270 @@ +function cm_data=plasma(m) + +cm = [[ 5.03832136e-02, 2.98028976e-02, 5.27974883e-01], + [ 6.35363639e-02, 2.84259729e-02, 5.33123681e-01], + [ 7.53531234e-02, 2.72063728e-02, 5.38007001e-01], + [ 8.62217979e-02, 2.61253206e-02, 5.42657691e-01], + [ 9.63786097e-02, 2.51650976e-02, 5.47103487e-01], + [ 1.05979704e-01, 2.43092436e-02, 5.51367851e-01], + [ 1.15123641e-01, 2.35562500e-02, 5.55467728e-01], + [ 1.23902903e-01, 2.28781011e-02, 5.59423480e-01], + [ 1.32380720e-01, 2.22583774e-02, 5.63250116e-01], + [ 1.40603076e-01, 2.16866674e-02, 5.66959485e-01], + [ 1.48606527e-01, 2.11535876e-02, 5.70561711e-01], + [ 1.56420649e-01, 2.06507174e-02, 5.74065446e-01], + [ 1.64069722e-01, 2.01705326e-02, 5.77478074e-01], + [ 1.71573925e-01, 1.97063415e-02, 5.80805890e-01], + [ 1.78950212e-01, 1.92522243e-02, 5.84054243e-01], + [ 1.86212958e-01, 1.88029767e-02, 5.87227661e-01], + [ 1.93374449e-01, 1.83540593e-02, 5.90329954e-01], + [ 2.00445260e-01, 1.79015512e-02, 5.93364304e-01], + [ 2.07434551e-01, 1.74421086e-02, 5.96333341e-01], + [ 2.14350298e-01, 1.69729276e-02, 5.99239207e-01], + [ 2.21196750e-01, 1.64970484e-02, 6.02083323e-01], + [ 2.27982971e-01, 1.60071509e-02, 6.04867403e-01], + [ 2.34714537e-01, 1.55015065e-02, 6.07592438e-01], + [ 2.41396253e-01, 1.49791041e-02, 6.10259089e-01], + [ 2.48032377e-01, 1.44393586e-02, 6.12867743e-01], + [ 2.54626690e-01, 1.38820918e-02, 6.15418537e-01], + [ 2.61182562e-01, 1.33075156e-02, 6.17911385e-01], + [ 2.67702993e-01, 1.27162163e-02, 6.20345997e-01], + [ 2.74190665e-01, 1.21091423e-02, 6.22721903e-01], + [ 2.80647969e-01, 1.14875915e-02, 6.25038468e-01], + [ 2.87076059e-01, 1.08554862e-02, 6.27294975e-01], + [ 2.93477695e-01, 1.02128849e-02, 6.29490490e-01], + [ 2.99855122e-01, 9.56079551e-03, 6.31623923e-01], + [ 3.06209825e-01, 8.90185346e-03, 6.33694102e-01], + [ 3.12543124e-01, 8.23900704e-03, 6.35699759e-01], + [ 3.18856183e-01, 7.57551051e-03, 6.37639537e-01], + [ 3.25150025e-01, 6.91491734e-03, 6.39512001e-01], + [ 3.31425547e-01, 6.26107379e-03, 6.41315649e-01], + [ 3.37683446e-01, 5.61830889e-03, 6.43048936e-01], + [ 3.43924591e-01, 4.99053080e-03, 6.44710195e-01], + [ 3.50149699e-01, 4.38202557e-03, 6.46297711e-01], + [ 3.56359209e-01, 3.79781761e-03, 6.47809772e-01], + [ 3.62553473e-01, 3.24319591e-03, 6.49244641e-01], + [ 3.68732762e-01, 2.72370721e-03, 6.50600561e-01], + [ 3.74897270e-01, 2.24514897e-03, 6.51875762e-01], + [ 3.81047116e-01, 1.81356205e-03, 6.53068467e-01], + [ 3.87182639e-01, 1.43446923e-03, 6.54176761e-01], + [ 3.93304010e-01, 1.11388259e-03, 6.55198755e-01], + [ 3.99410821e-01, 8.59420809e-04, 6.56132835e-01], + [ 4.05502914e-01, 6.78091517e-04, 6.56977276e-01], + [ 4.11580082e-01, 5.77101735e-04, 6.57730380e-01], + [ 4.17642063e-01, 5.63847476e-04, 6.58390492e-01], + [ 4.23688549e-01, 6.45902780e-04, 6.58956004e-01], + [ 4.29719186e-01, 8.31008207e-04, 6.59425363e-01], + [ 4.35733575e-01, 1.12705875e-03, 6.59797077e-01], + [ 4.41732123e-01, 1.53984779e-03, 6.60069009e-01], + [ 4.47713600e-01, 2.07954744e-03, 6.60240367e-01], + [ 4.53677394e-01, 2.75470302e-03, 6.60309966e-01], + [ 4.59622938e-01, 3.57374415e-03, 6.60276655e-01], + [ 4.65549631e-01, 4.54518084e-03, 6.60139383e-01], + [ 4.71456847e-01, 5.67758762e-03, 6.59897210e-01], + [ 4.77343929e-01, 6.97958743e-03, 6.59549311e-01], + [ 4.83210198e-01, 8.45983494e-03, 6.59094989e-01], + [ 4.89054951e-01, 1.01269996e-02, 6.58533677e-01], + [ 4.94877466e-01, 1.19897486e-02, 6.57864946e-01], + [ 5.00677687e-01, 1.40550640e-02, 6.57087561e-01], + [ 5.06454143e-01, 1.63333443e-02, 6.56202294e-01], + [ 5.12206035e-01, 1.88332232e-02, 6.55209222e-01], + [ 5.17932580e-01, 2.15631918e-02, 6.54108545e-01], + [ 5.23632990e-01, 2.45316468e-02, 6.52900629e-01], + [ 5.29306474e-01, 2.77468735e-02, 6.51586010e-01], + [ 5.34952244e-01, 3.12170300e-02, 6.50165396e-01], + [ 5.40569510e-01, 3.49501310e-02, 6.48639668e-01], + [ 5.46157494e-01, 3.89540334e-02, 6.47009884e-01], + [ 5.51715423e-01, 4.31364795e-02, 6.45277275e-01], + [ 5.57242538e-01, 4.73307585e-02, 6.43443250e-01], + [ 5.62738096e-01, 5.15448092e-02, 6.41509389e-01], + [ 5.68201372e-01, 5.57776706e-02, 6.39477440e-01], + [ 5.73631859e-01, 6.00281369e-02, 6.37348841e-01], + [ 5.79028682e-01, 6.42955547e-02, 6.35126108e-01], + [ 5.84391137e-01, 6.85790261e-02, 6.32811608e-01], + [ 5.89718606e-01, 7.28775875e-02, 6.30407727e-01], + [ 5.95010505e-01, 7.71902878e-02, 6.27916992e-01], + [ 6.00266283e-01, 8.15161895e-02, 6.25342058e-01], + [ 6.05485428e-01, 8.58543713e-02, 6.22685703e-01], + [ 6.10667469e-01, 9.02039303e-02, 6.19950811e-01], + [ 6.15811974e-01, 9.45639838e-02, 6.17140367e-01], + [ 6.20918555e-01, 9.89336721e-02, 6.14257440e-01], + [ 6.25986869e-01, 1.03312160e-01, 6.11305174e-01], + [ 6.31016615e-01, 1.07698641e-01, 6.08286774e-01], + [ 6.36007543e-01, 1.12092335e-01, 6.05205491e-01], + [ 6.40959444e-01, 1.16492495e-01, 6.02064611e-01], + [ 6.45872158e-01, 1.20898405e-01, 5.98867442e-01], + [ 6.50745571e-01, 1.25309384e-01, 5.95617300e-01], + [ 6.55579615e-01, 1.29724785e-01, 5.92317494e-01], + [ 6.60374266e-01, 1.34143997e-01, 5.88971318e-01], + [ 6.65129493e-01, 1.38566428e-01, 5.85582301e-01], + [ 6.69845385e-01, 1.42991540e-01, 5.82153572e-01], + [ 6.74522060e-01, 1.47418835e-01, 5.78688247e-01], + [ 6.79159664e-01, 1.51847851e-01, 5.75189431e-01], + [ 6.83758384e-01, 1.56278163e-01, 5.71660158e-01], + [ 6.88318440e-01, 1.60709387e-01, 5.68103380e-01], + [ 6.92840088e-01, 1.65141174e-01, 5.64521958e-01], + [ 6.97323615e-01, 1.69573215e-01, 5.60918659e-01], + [ 7.01769334e-01, 1.74005236e-01, 5.57296144e-01], + [ 7.06177590e-01, 1.78437000e-01, 5.53656970e-01], + [ 7.10548747e-01, 1.82868306e-01, 5.50003579e-01], + [ 7.14883195e-01, 1.87298986e-01, 5.46338299e-01], + [ 7.19181339e-01, 1.91728906e-01, 5.42663338e-01], + [ 7.23443604e-01, 1.96157962e-01, 5.38980786e-01], + [ 7.27670428e-01, 2.00586086e-01, 5.35292612e-01], + [ 7.31862231e-01, 2.05013174e-01, 5.31600995e-01], + [ 7.36019424e-01, 2.09439071e-01, 5.27908434e-01], + [ 7.40142557e-01, 2.13863965e-01, 5.24215533e-01], + [ 7.44232102e-01, 2.18287899e-01, 5.20523766e-01], + [ 7.48288533e-01, 2.22710942e-01, 5.16834495e-01], + [ 7.52312321e-01, 2.27133187e-01, 5.13148963e-01], + [ 7.56303937e-01, 2.31554749e-01, 5.09468305e-01], + [ 7.60263849e-01, 2.35975765e-01, 5.05793543e-01], + [ 7.64192516e-01, 2.40396394e-01, 5.02125599e-01], + [ 7.68090391e-01, 2.44816813e-01, 4.98465290e-01], + [ 7.71957916e-01, 2.49237220e-01, 4.94813338e-01], + [ 7.75795522e-01, 2.53657797e-01, 4.91170517e-01], + [ 7.79603614e-01, 2.58078397e-01, 4.87539124e-01], + [ 7.83382636e-01, 2.62499662e-01, 4.83917732e-01], + [ 7.87132978e-01, 2.66921859e-01, 4.80306702e-01], + [ 7.90855015e-01, 2.71345267e-01, 4.76706319e-01], + [ 7.94549101e-01, 2.75770179e-01, 4.73116798e-01], + [ 7.98215577e-01, 2.80196901e-01, 4.69538286e-01], + [ 8.01854758e-01, 2.84625750e-01, 4.65970871e-01], + [ 8.05466945e-01, 2.89057057e-01, 4.62414580e-01], + [ 8.09052419e-01, 2.93491117e-01, 4.58869577e-01], + [ 8.12611506e-01, 2.97927865e-01, 4.55337565e-01], + [ 8.16144382e-01, 3.02368130e-01, 4.51816385e-01], + [ 8.19651255e-01, 3.06812282e-01, 4.48305861e-01], + [ 8.23132309e-01, 3.11260703e-01, 4.44805781e-01], + [ 8.26587706e-01, 3.15713782e-01, 4.41315901e-01], + [ 8.30017584e-01, 3.20171913e-01, 4.37835947e-01], + [ 8.33422053e-01, 3.24635499e-01, 4.34365616e-01], + [ 8.36801237e-01, 3.29104836e-01, 4.30905052e-01], + [ 8.40155276e-01, 3.33580106e-01, 4.27454836e-01], + [ 8.43484103e-01, 3.38062109e-01, 4.24013059e-01], + [ 8.46787726e-01, 3.42551272e-01, 4.20579333e-01], + [ 8.50066132e-01, 3.47048028e-01, 4.17153264e-01], + [ 8.53319279e-01, 3.51552815e-01, 4.13734445e-01], + [ 8.56547103e-01, 3.56066072e-01, 4.10322469e-01], + [ 8.59749520e-01, 3.60588229e-01, 4.06916975e-01], + [ 8.62926559e-01, 3.65119408e-01, 4.03518809e-01], + [ 8.66077920e-01, 3.69660446e-01, 4.00126027e-01], + [ 8.69203436e-01, 3.74211795e-01, 3.96738211e-01], + [ 8.72302917e-01, 3.78773910e-01, 3.93354947e-01], + [ 8.75376149e-01, 3.83347243e-01, 3.89975832e-01], + [ 8.78422895e-01, 3.87932249e-01, 3.86600468e-01], + [ 8.81442916e-01, 3.92529339e-01, 3.83228622e-01], + [ 8.84435982e-01, 3.97138877e-01, 3.79860246e-01], + [ 8.87401682e-01, 4.01761511e-01, 3.76494232e-01], + [ 8.90339687e-01, 4.06397694e-01, 3.73130228e-01], + [ 8.93249647e-01, 4.11047871e-01, 3.69767893e-01], + [ 8.96131191e-01, 4.15712489e-01, 3.66406907e-01], + [ 8.98983931e-01, 4.20391986e-01, 3.63046965e-01], + [ 9.01807455e-01, 4.25086807e-01, 3.59687758e-01], + [ 9.04601295e-01, 4.29797442e-01, 3.56328796e-01], + [ 9.07364995e-01, 4.34524335e-01, 3.52969777e-01], + [ 9.10098088e-01, 4.39267908e-01, 3.49610469e-01], + [ 9.12800095e-01, 4.44028574e-01, 3.46250656e-01], + [ 9.15470518e-01, 4.48806744e-01, 3.42890148e-01], + [ 9.18108848e-01, 4.53602818e-01, 3.39528771e-01], + [ 9.20714383e-01, 4.58417420e-01, 3.36165582e-01], + [ 9.23286660e-01, 4.63250828e-01, 3.32800827e-01], + [ 9.25825146e-01, 4.68103387e-01, 3.29434512e-01], + [ 9.28329275e-01, 4.72975465e-01, 3.26066550e-01], + [ 9.30798469e-01, 4.77867420e-01, 3.22696876e-01], + [ 9.33232140e-01, 4.82779603e-01, 3.19325444e-01], + [ 9.35629684e-01, 4.87712357e-01, 3.15952211e-01], + [ 9.37990034e-01, 4.92666544e-01, 3.12575440e-01], + [ 9.40312939e-01, 4.97642038e-01, 3.09196628e-01], + [ 9.42597771e-01, 5.02639147e-01, 3.05815824e-01], + [ 9.44843893e-01, 5.07658169e-01, 3.02433101e-01], + [ 9.47050662e-01, 5.12699390e-01, 2.99048555e-01], + [ 9.49217427e-01, 5.17763087e-01, 2.95662308e-01], + [ 9.51343530e-01, 5.22849522e-01, 2.92274506e-01], + [ 9.53427725e-01, 5.27959550e-01, 2.88883445e-01], + [ 9.55469640e-01, 5.33093083e-01, 2.85490391e-01], + [ 9.57468770e-01, 5.38250172e-01, 2.82096149e-01], + [ 9.59424430e-01, 5.43431038e-01, 2.78700990e-01], + [ 9.61335930e-01, 5.48635890e-01, 2.75305214e-01], + [ 9.63202573e-01, 5.53864931e-01, 2.71909159e-01], + [ 9.65023656e-01, 5.59118349e-01, 2.68513200e-01], + [ 9.66798470e-01, 5.64396327e-01, 2.65117752e-01], + [ 9.68525639e-01, 5.69699633e-01, 2.61721488e-01], + [ 9.70204593e-01, 5.75028270e-01, 2.58325424e-01], + [ 9.71835007e-01, 5.80382015e-01, 2.54931256e-01], + [ 9.73416145e-01, 5.85761012e-01, 2.51539615e-01], + [ 9.74947262e-01, 5.91165394e-01, 2.48151200e-01], + [ 9.76427606e-01, 5.96595287e-01, 2.44766775e-01], + [ 9.77856416e-01, 6.02050811e-01, 2.41387186e-01], + [ 9.79232922e-01, 6.07532077e-01, 2.38013359e-01], + [ 9.80556344e-01, 6.13039190e-01, 2.34646316e-01], + [ 9.81825890e-01, 6.18572250e-01, 2.31287178e-01], + [ 9.83040742e-01, 6.24131362e-01, 2.27937141e-01], + [ 9.84198924e-01, 6.29717516e-01, 2.24595006e-01], + [ 9.85300760e-01, 6.35329876e-01, 2.21264889e-01], + [ 9.86345421e-01, 6.40968508e-01, 2.17948456e-01], + [ 9.87332067e-01, 6.46633475e-01, 2.14647532e-01], + [ 9.88259846e-01, 6.52324832e-01, 2.11364122e-01], + [ 9.89127893e-01, 6.58042630e-01, 2.08100426e-01], + [ 9.89935328e-01, 6.63786914e-01, 2.04858855e-01], + [ 9.90681261e-01, 6.69557720e-01, 2.01642049e-01], + [ 9.91364787e-01, 6.75355082e-01, 1.98452900e-01], + [ 9.91984990e-01, 6.81179025e-01, 1.95294567e-01], + [ 9.92540939e-01, 6.87029567e-01, 1.92170500e-01], + [ 9.93031693e-01, 6.92906719e-01, 1.89084459e-01], + [ 9.93456302e-01, 6.98810484e-01, 1.86040537e-01], + [ 9.93813802e-01, 7.04740854e-01, 1.83043180e-01], + [ 9.94103226e-01, 7.10697814e-01, 1.80097207e-01], + [ 9.94323596e-01, 7.16681336e-01, 1.77207826e-01], + [ 9.94473934e-01, 7.22691379e-01, 1.74380656e-01], + [ 9.94553260e-01, 7.28727890e-01, 1.71621733e-01], + [ 9.94560594e-01, 7.34790799e-01, 1.68937522e-01], + [ 9.94494964e-01, 7.40880020e-01, 1.66334918e-01], + [ 9.94355411e-01, 7.46995448e-01, 1.63821243e-01], + [ 9.94140989e-01, 7.53136955e-01, 1.61404226e-01], + [ 9.93850778e-01, 7.59304390e-01, 1.59091984e-01], + [ 9.93482190e-01, 7.65498551e-01, 1.56890625e-01], + [ 9.93033251e-01, 7.71719833e-01, 1.54807583e-01], + [ 9.92505214e-01, 7.77966775e-01, 1.52854862e-01], + [ 9.91897270e-01, 7.84239120e-01, 1.51041581e-01], + [ 9.91208680e-01, 7.90536569e-01, 1.49376885e-01], + [ 9.90438793e-01, 7.96858775e-01, 1.47869810e-01], + [ 9.89587065e-01, 8.03205337e-01, 1.46529128e-01], + [ 9.88647741e-01, 8.09578605e-01, 1.45357284e-01], + [ 9.87620557e-01, 8.15977942e-01, 1.44362644e-01], + [ 9.86509366e-01, 8.22400620e-01, 1.43556679e-01], + [ 9.85314198e-01, 8.28845980e-01, 1.42945116e-01], + [ 9.84031139e-01, 8.35315360e-01, 1.42528388e-01], + [ 9.82652820e-01, 8.41811730e-01, 1.42302653e-01], + [ 9.81190389e-01, 8.48328902e-01, 1.42278607e-01], + [ 9.79643637e-01, 8.54866468e-01, 1.42453425e-01], + [ 9.77994918e-01, 8.61432314e-01, 1.42808191e-01], + [ 9.76264977e-01, 8.68015998e-01, 1.43350944e-01], + [ 9.74443038e-01, 8.74622194e-01, 1.44061156e-01], + [ 9.72530009e-01, 8.81250063e-01, 1.44922913e-01], + [ 9.70532932e-01, 8.87896125e-01, 1.45918663e-01], + [ 9.68443477e-01, 8.94563989e-01, 1.47014438e-01], + [ 9.66271225e-01, 9.01249365e-01, 1.48179639e-01], + [ 9.64021057e-01, 9.07950379e-01, 1.49370428e-01], + [ 9.61681481e-01, 9.14672479e-01, 1.50520343e-01], + [ 9.59275646e-01, 9.21406537e-01, 1.51566019e-01], + [ 9.56808068e-01, 9.28152065e-01, 1.52409489e-01], + [ 9.54286813e-01, 9.34907730e-01, 1.52921158e-01], + [ 9.51726083e-01, 9.41670605e-01, 1.52925363e-01], + [ 9.49150533e-01, 9.48434900e-01, 1.52177604e-01], + [ 9.46602270e-01, 9.55189860e-01, 1.50327944e-01], + [ 9.44151742e-01, 9.61916487e-01, 1.46860789e-01], + [ 9.41896120e-01, 9.68589814e-01, 1.40955606e-01], + [ 9.40015097e-01, 9.75158357e-01, 1.31325517e-01]]; + +if nargin < 1 + cm_data = cm; +else + cm_data = zeros(m,3); + hsv=rgb2hsv(cm); + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/Colormaps/plasma.m b/downloaded/Colormaps/plasma.m new file mode 100644 index 0000000..367fcb7 --- /dev/null +++ b/downloaded/Colormaps/plasma.m @@ -0,0 +1,270 @@ +function cm_data=plasma(m) + +cm = [[ 5.03832136e-02, 2.98028976e-02, 5.27974883e-01], + [ 6.35363639e-02, 2.84259729e-02, 5.33123681e-01], + [ 7.53531234e-02, 2.72063728e-02, 5.38007001e-01], + [ 8.62217979e-02, 2.61253206e-02, 5.42657691e-01], + [ 9.63786097e-02, 2.51650976e-02, 5.47103487e-01], + [ 1.05979704e-01, 2.43092436e-02, 5.51367851e-01], + [ 1.15123641e-01, 2.35562500e-02, 5.55467728e-01], + [ 1.23902903e-01, 2.28781011e-02, 5.59423480e-01], + [ 1.32380720e-01, 2.22583774e-02, 5.63250116e-01], + [ 1.40603076e-01, 2.16866674e-02, 5.66959485e-01], + [ 1.48606527e-01, 2.11535876e-02, 5.70561711e-01], + [ 1.56420649e-01, 2.06507174e-02, 5.74065446e-01], + [ 1.64069722e-01, 2.01705326e-02, 5.77478074e-01], + [ 1.71573925e-01, 1.97063415e-02, 5.80805890e-01], + [ 1.78950212e-01, 1.92522243e-02, 5.84054243e-01], + [ 1.86212958e-01, 1.88029767e-02, 5.87227661e-01], + [ 1.93374449e-01, 1.83540593e-02, 5.90329954e-01], + [ 2.00445260e-01, 1.79015512e-02, 5.93364304e-01], + [ 2.07434551e-01, 1.74421086e-02, 5.96333341e-01], + [ 2.14350298e-01, 1.69729276e-02, 5.99239207e-01], + [ 2.21196750e-01, 1.64970484e-02, 6.02083323e-01], + [ 2.27982971e-01, 1.60071509e-02, 6.04867403e-01], + [ 2.34714537e-01, 1.55015065e-02, 6.07592438e-01], + [ 2.41396253e-01, 1.49791041e-02, 6.10259089e-01], + [ 2.48032377e-01, 1.44393586e-02, 6.12867743e-01], + [ 2.54626690e-01, 1.38820918e-02, 6.15418537e-01], + [ 2.61182562e-01, 1.33075156e-02, 6.17911385e-01], + [ 2.67702993e-01, 1.27162163e-02, 6.20345997e-01], + [ 2.74190665e-01, 1.21091423e-02, 6.22721903e-01], + [ 2.80647969e-01, 1.14875915e-02, 6.25038468e-01], + [ 2.87076059e-01, 1.08554862e-02, 6.27294975e-01], + [ 2.93477695e-01, 1.02128849e-02, 6.29490490e-01], + [ 2.99855122e-01, 9.56079551e-03, 6.31623923e-01], + [ 3.06209825e-01, 8.90185346e-03, 6.33694102e-01], + [ 3.12543124e-01, 8.23900704e-03, 6.35699759e-01], + [ 3.18856183e-01, 7.57551051e-03, 6.37639537e-01], + [ 3.25150025e-01, 6.91491734e-03, 6.39512001e-01], + [ 3.31425547e-01, 6.26107379e-03, 6.41315649e-01], + [ 3.37683446e-01, 5.61830889e-03, 6.43048936e-01], + [ 3.43924591e-01, 4.99053080e-03, 6.44710195e-01], + [ 3.50149699e-01, 4.38202557e-03, 6.46297711e-01], + [ 3.56359209e-01, 3.79781761e-03, 6.47809772e-01], + [ 3.62553473e-01, 3.24319591e-03, 6.49244641e-01], + [ 3.68732762e-01, 2.72370721e-03, 6.50600561e-01], + [ 3.74897270e-01, 2.24514897e-03, 6.51875762e-01], + [ 3.81047116e-01, 1.81356205e-03, 6.53068467e-01], + [ 3.87182639e-01, 1.43446923e-03, 6.54176761e-01], + [ 3.93304010e-01, 1.11388259e-03, 6.55198755e-01], + [ 3.99410821e-01, 8.59420809e-04, 6.56132835e-01], + [ 4.05502914e-01, 6.78091517e-04, 6.56977276e-01], + [ 4.11580082e-01, 5.77101735e-04, 6.57730380e-01], + [ 4.17642063e-01, 5.63847476e-04, 6.58390492e-01], + [ 4.23688549e-01, 6.45902780e-04, 6.58956004e-01], + [ 4.29719186e-01, 8.31008207e-04, 6.59425363e-01], + [ 4.35733575e-01, 1.12705875e-03, 6.59797077e-01], + [ 4.41732123e-01, 1.53984779e-03, 6.60069009e-01], + [ 4.47713600e-01, 2.07954744e-03, 6.60240367e-01], + [ 4.53677394e-01, 2.75470302e-03, 6.60309966e-01], + [ 4.59622938e-01, 3.57374415e-03, 6.60276655e-01], + [ 4.65549631e-01, 4.54518084e-03, 6.60139383e-01], + [ 4.71456847e-01, 5.67758762e-03, 6.59897210e-01], + [ 4.77343929e-01, 6.97958743e-03, 6.59549311e-01], + [ 4.83210198e-01, 8.45983494e-03, 6.59094989e-01], + [ 4.89054951e-01, 1.01269996e-02, 6.58533677e-01], + [ 4.94877466e-01, 1.19897486e-02, 6.57864946e-01], + [ 5.00677687e-01, 1.40550640e-02, 6.57087561e-01], + [ 5.06454143e-01, 1.63333443e-02, 6.56202294e-01], + [ 5.12206035e-01, 1.88332232e-02, 6.55209222e-01], + [ 5.17932580e-01, 2.15631918e-02, 6.54108545e-01], + [ 5.23632990e-01, 2.45316468e-02, 6.52900629e-01], + [ 5.29306474e-01, 2.77468735e-02, 6.51586010e-01], + [ 5.34952244e-01, 3.12170300e-02, 6.50165396e-01], + [ 5.40569510e-01, 3.49501310e-02, 6.48639668e-01], + [ 5.46157494e-01, 3.89540334e-02, 6.47009884e-01], + [ 5.51715423e-01, 4.31364795e-02, 6.45277275e-01], + [ 5.57242538e-01, 4.73307585e-02, 6.43443250e-01], + [ 5.62738096e-01, 5.15448092e-02, 6.41509389e-01], + [ 5.68201372e-01, 5.57776706e-02, 6.39477440e-01], + [ 5.73631859e-01, 6.00281369e-02, 6.37348841e-01], + [ 5.79028682e-01, 6.42955547e-02, 6.35126108e-01], + [ 5.84391137e-01, 6.85790261e-02, 6.32811608e-01], + [ 5.89718606e-01, 7.28775875e-02, 6.30407727e-01], + [ 5.95010505e-01, 7.71902878e-02, 6.27916992e-01], + [ 6.00266283e-01, 8.15161895e-02, 6.25342058e-01], + [ 6.05485428e-01, 8.58543713e-02, 6.22685703e-01], + [ 6.10667469e-01, 9.02039303e-02, 6.19950811e-01], + [ 6.15811974e-01, 9.45639838e-02, 6.17140367e-01], + [ 6.20918555e-01, 9.89336721e-02, 6.14257440e-01], + [ 6.25986869e-01, 1.03312160e-01, 6.11305174e-01], + [ 6.31016615e-01, 1.07698641e-01, 6.08286774e-01], + [ 6.36007543e-01, 1.12092335e-01, 6.05205491e-01], + [ 6.40959444e-01, 1.16492495e-01, 6.02064611e-01], + [ 6.45872158e-01, 1.20898405e-01, 5.98867442e-01], + [ 6.50745571e-01, 1.25309384e-01, 5.95617300e-01], + [ 6.55579615e-01, 1.29724785e-01, 5.92317494e-01], + [ 6.60374266e-01, 1.34143997e-01, 5.88971318e-01], + [ 6.65129493e-01, 1.38566428e-01, 5.85582301e-01], + [ 6.69845385e-01, 1.42991540e-01, 5.82153572e-01], + [ 6.74522060e-01, 1.47418835e-01, 5.78688247e-01], + [ 6.79159664e-01, 1.51847851e-01, 5.75189431e-01], + [ 6.83758384e-01, 1.56278163e-01, 5.71660158e-01], + [ 6.88318440e-01, 1.60709387e-01, 5.68103380e-01], + [ 6.92840088e-01, 1.65141174e-01, 5.64521958e-01], + [ 6.97323615e-01, 1.69573215e-01, 5.60918659e-01], + [ 7.01769334e-01, 1.74005236e-01, 5.57296144e-01], + [ 7.06177590e-01, 1.78437000e-01, 5.53656970e-01], + [ 7.10548747e-01, 1.82868306e-01, 5.50003579e-01], + [ 7.14883195e-01, 1.87298986e-01, 5.46338299e-01], + [ 7.19181339e-01, 1.91728906e-01, 5.42663338e-01], + [ 7.23443604e-01, 1.96157962e-01, 5.38980786e-01], + [ 7.27670428e-01, 2.00586086e-01, 5.35292612e-01], + [ 7.31862231e-01, 2.05013174e-01, 5.31600995e-01], + [ 7.36019424e-01, 2.09439071e-01, 5.27908434e-01], + [ 7.40142557e-01, 2.13863965e-01, 5.24215533e-01], + [ 7.44232102e-01, 2.18287899e-01, 5.20523766e-01], + [ 7.48288533e-01, 2.22710942e-01, 5.16834495e-01], + [ 7.52312321e-01, 2.27133187e-01, 5.13148963e-01], + [ 7.56303937e-01, 2.31554749e-01, 5.09468305e-01], + [ 7.60263849e-01, 2.35975765e-01, 5.05793543e-01], + [ 7.64192516e-01, 2.40396394e-01, 5.02125599e-01], + [ 7.68090391e-01, 2.44816813e-01, 4.98465290e-01], + [ 7.71957916e-01, 2.49237220e-01, 4.94813338e-01], + [ 7.75795522e-01, 2.53657797e-01, 4.91170517e-01], + [ 7.79603614e-01, 2.58078397e-01, 4.87539124e-01], + [ 7.83382636e-01, 2.62499662e-01, 4.83917732e-01], + [ 7.87132978e-01, 2.66921859e-01, 4.80306702e-01], + [ 7.90855015e-01, 2.71345267e-01, 4.76706319e-01], + [ 7.94549101e-01, 2.75770179e-01, 4.73116798e-01], + [ 7.98215577e-01, 2.80196901e-01, 4.69538286e-01], + [ 8.01854758e-01, 2.84625750e-01, 4.65970871e-01], + [ 8.05466945e-01, 2.89057057e-01, 4.62414580e-01], + [ 8.09052419e-01, 2.93491117e-01, 4.58869577e-01], + [ 8.12611506e-01, 2.97927865e-01, 4.55337565e-01], + [ 8.16144382e-01, 3.02368130e-01, 4.51816385e-01], + [ 8.19651255e-01, 3.06812282e-01, 4.48305861e-01], + [ 8.23132309e-01, 3.11260703e-01, 4.44805781e-01], + [ 8.26587706e-01, 3.15713782e-01, 4.41315901e-01], + [ 8.30017584e-01, 3.20171913e-01, 4.37835947e-01], + [ 8.33422053e-01, 3.24635499e-01, 4.34365616e-01], + [ 8.36801237e-01, 3.29104836e-01, 4.30905052e-01], + [ 8.40155276e-01, 3.33580106e-01, 4.27454836e-01], + [ 8.43484103e-01, 3.38062109e-01, 4.24013059e-01], + [ 8.46787726e-01, 3.42551272e-01, 4.20579333e-01], + [ 8.50066132e-01, 3.47048028e-01, 4.17153264e-01], + [ 8.53319279e-01, 3.51552815e-01, 4.13734445e-01], + [ 8.56547103e-01, 3.56066072e-01, 4.10322469e-01], + [ 8.59749520e-01, 3.60588229e-01, 4.06916975e-01], + [ 8.62926559e-01, 3.65119408e-01, 4.03518809e-01], + [ 8.66077920e-01, 3.69660446e-01, 4.00126027e-01], + [ 8.69203436e-01, 3.74211795e-01, 3.96738211e-01], + [ 8.72302917e-01, 3.78773910e-01, 3.93354947e-01], + [ 8.75376149e-01, 3.83347243e-01, 3.89975832e-01], + [ 8.78422895e-01, 3.87932249e-01, 3.86600468e-01], + [ 8.81442916e-01, 3.92529339e-01, 3.83228622e-01], + [ 8.84435982e-01, 3.97138877e-01, 3.79860246e-01], + [ 8.87401682e-01, 4.01761511e-01, 3.76494232e-01], + [ 8.90339687e-01, 4.06397694e-01, 3.73130228e-01], + [ 8.93249647e-01, 4.11047871e-01, 3.69767893e-01], + [ 8.96131191e-01, 4.15712489e-01, 3.66406907e-01], + [ 8.98983931e-01, 4.20391986e-01, 3.63046965e-01], + [ 9.01807455e-01, 4.25086807e-01, 3.59687758e-01], + [ 9.04601295e-01, 4.29797442e-01, 3.56328796e-01], + [ 9.07364995e-01, 4.34524335e-01, 3.52969777e-01], + [ 9.10098088e-01, 4.39267908e-01, 3.49610469e-01], + [ 9.12800095e-01, 4.44028574e-01, 3.46250656e-01], + [ 9.15470518e-01, 4.48806744e-01, 3.42890148e-01], + [ 9.18108848e-01, 4.53602818e-01, 3.39528771e-01], + [ 9.20714383e-01, 4.58417420e-01, 3.36165582e-01], + [ 9.23286660e-01, 4.63250828e-01, 3.32800827e-01], + [ 9.25825146e-01, 4.68103387e-01, 3.29434512e-01], + [ 9.28329275e-01, 4.72975465e-01, 3.26066550e-01], + [ 9.30798469e-01, 4.77867420e-01, 3.22696876e-01], + [ 9.33232140e-01, 4.82779603e-01, 3.19325444e-01], + [ 9.35629684e-01, 4.87712357e-01, 3.15952211e-01], + [ 9.37990034e-01, 4.92666544e-01, 3.12575440e-01], + [ 9.40312939e-01, 4.97642038e-01, 3.09196628e-01], + [ 9.42597771e-01, 5.02639147e-01, 3.05815824e-01], + [ 9.44843893e-01, 5.07658169e-01, 3.02433101e-01], + [ 9.47050662e-01, 5.12699390e-01, 2.99048555e-01], + [ 9.49217427e-01, 5.17763087e-01, 2.95662308e-01], + [ 9.51343530e-01, 5.22849522e-01, 2.92274506e-01], + [ 9.53427725e-01, 5.27959550e-01, 2.88883445e-01], + [ 9.55469640e-01, 5.33093083e-01, 2.85490391e-01], + [ 9.57468770e-01, 5.38250172e-01, 2.82096149e-01], + [ 9.59424430e-01, 5.43431038e-01, 2.78700990e-01], + [ 9.61335930e-01, 5.48635890e-01, 2.75305214e-01], + [ 9.63202573e-01, 5.53864931e-01, 2.71909159e-01], + [ 9.65023656e-01, 5.59118349e-01, 2.68513200e-01], + [ 9.66798470e-01, 5.64396327e-01, 2.65117752e-01], + [ 9.68525639e-01, 5.69699633e-01, 2.61721488e-01], + [ 9.70204593e-01, 5.75028270e-01, 2.58325424e-01], + [ 9.71835007e-01, 5.80382015e-01, 2.54931256e-01], + [ 9.73416145e-01, 5.85761012e-01, 2.51539615e-01], + [ 9.74947262e-01, 5.91165394e-01, 2.48151200e-01], + [ 9.76427606e-01, 5.96595287e-01, 2.44766775e-01], + [ 9.77856416e-01, 6.02050811e-01, 2.41387186e-01], + [ 9.79232922e-01, 6.07532077e-01, 2.38013359e-01], + [ 9.80556344e-01, 6.13039190e-01, 2.34646316e-01], + [ 9.81825890e-01, 6.18572250e-01, 2.31287178e-01], + [ 9.83040742e-01, 6.24131362e-01, 2.27937141e-01], + [ 9.84198924e-01, 6.29717516e-01, 2.24595006e-01], + [ 9.85300760e-01, 6.35329876e-01, 2.21264889e-01], + [ 9.86345421e-01, 6.40968508e-01, 2.17948456e-01], + [ 9.87332067e-01, 6.46633475e-01, 2.14647532e-01], + [ 9.88259846e-01, 6.52324832e-01, 2.11364122e-01], + [ 9.89127893e-01, 6.58042630e-01, 2.08100426e-01], + [ 9.89935328e-01, 6.63786914e-01, 2.04858855e-01], + [ 9.90681261e-01, 6.69557720e-01, 2.01642049e-01], + [ 9.91364787e-01, 6.75355082e-01, 1.98452900e-01], + [ 9.91984990e-01, 6.81179025e-01, 1.95294567e-01], + [ 9.92540939e-01, 6.87029567e-01, 1.92170500e-01], + [ 9.93031693e-01, 6.92906719e-01, 1.89084459e-01], + [ 9.93456302e-01, 6.98810484e-01, 1.86040537e-01], + [ 9.93813802e-01, 7.04740854e-01, 1.83043180e-01], + [ 9.94103226e-01, 7.10697814e-01, 1.80097207e-01], + [ 9.94323596e-01, 7.16681336e-01, 1.77207826e-01], + [ 9.94473934e-01, 7.22691379e-01, 1.74380656e-01], + [ 9.94553260e-01, 7.28727890e-01, 1.71621733e-01], + [ 9.94560594e-01, 7.34790799e-01, 1.68937522e-01], + [ 9.94494964e-01, 7.40880020e-01, 1.66334918e-01], + [ 9.94355411e-01, 7.46995448e-01, 1.63821243e-01], + [ 9.94140989e-01, 7.53136955e-01, 1.61404226e-01], + [ 9.93850778e-01, 7.59304390e-01, 1.59091984e-01], + [ 9.93482190e-01, 7.65498551e-01, 1.56890625e-01], + [ 9.93033251e-01, 7.71719833e-01, 1.54807583e-01], + [ 9.92505214e-01, 7.77966775e-01, 1.52854862e-01], + [ 9.91897270e-01, 7.84239120e-01, 1.51041581e-01], + [ 9.91208680e-01, 7.90536569e-01, 1.49376885e-01], + [ 9.90438793e-01, 7.96858775e-01, 1.47869810e-01], + [ 9.89587065e-01, 8.03205337e-01, 1.46529128e-01], + [ 9.88647741e-01, 8.09578605e-01, 1.45357284e-01], + [ 9.87620557e-01, 8.15977942e-01, 1.44362644e-01], + [ 9.86509366e-01, 8.22400620e-01, 1.43556679e-01], + [ 9.85314198e-01, 8.28845980e-01, 1.42945116e-01], + [ 9.84031139e-01, 8.35315360e-01, 1.42528388e-01], + [ 9.82652820e-01, 8.41811730e-01, 1.42302653e-01], + [ 9.81190389e-01, 8.48328902e-01, 1.42278607e-01], + [ 9.79643637e-01, 8.54866468e-01, 1.42453425e-01], + [ 9.77994918e-01, 8.61432314e-01, 1.42808191e-01], + [ 9.76264977e-01, 8.68015998e-01, 1.43350944e-01], + [ 9.74443038e-01, 8.74622194e-01, 1.44061156e-01], + [ 9.72530009e-01, 8.81250063e-01, 1.44922913e-01], + [ 9.70532932e-01, 8.87896125e-01, 1.45918663e-01], + [ 9.68443477e-01, 8.94563989e-01, 1.47014438e-01], + [ 9.66271225e-01, 9.01249365e-01, 1.48179639e-01], + [ 9.64021057e-01, 9.07950379e-01, 1.49370428e-01], + [ 9.61681481e-01, 9.14672479e-01, 1.50520343e-01], + [ 9.59275646e-01, 9.21406537e-01, 1.51566019e-01], + [ 9.56808068e-01, 9.28152065e-01, 1.52409489e-01], + [ 9.54286813e-01, 9.34907730e-01, 1.52921158e-01], + [ 9.51726083e-01, 9.41670605e-01, 1.52925363e-01], + [ 9.49150533e-01, 9.48434900e-01, 1.52177604e-01], + [ 9.46602270e-01, 9.55189860e-01, 1.50327944e-01], + [ 9.44151742e-01, 9.61916487e-01, 1.46860789e-01], + [ 9.41896120e-01, 9.68589814e-01, 1.40955606e-01], + [ 9.40015097e-01, 9.75158357e-01, 1.31325517e-01]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(153:end,1)=hsv(153:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/Colormaps/viridis.m b/downloaded/Colormaps/viridis.m new file mode 100644 index 0000000..6b85a81 --- /dev/null +++ b/downloaded/Colormaps/viridis.m @@ -0,0 +1,267 @@ +function cm_data=viridis(m) +cm = [[ 0.26700401, 0.00487433, 0.32941519], + [ 0.26851048, 0.00960483, 0.33542652], + [ 0.26994384, 0.01462494, 0.34137895], + [ 0.27130489, 0.01994186, 0.34726862], + [ 0.27259384, 0.02556309, 0.35309303], + [ 0.27380934, 0.03149748, 0.35885256], + [ 0.27495242, 0.03775181, 0.36454323], + [ 0.27602238, 0.04416723, 0.37016418], + [ 0.2770184 , 0.05034437, 0.37571452], + [ 0.27794143, 0.05632444, 0.38119074], + [ 0.27879067, 0.06214536, 0.38659204], + [ 0.2795655 , 0.06783587, 0.39191723], + [ 0.28026658, 0.07341724, 0.39716349], + [ 0.28089358, 0.07890703, 0.40232944], + [ 0.28144581, 0.0843197 , 0.40741404], + [ 0.28192358, 0.08966622, 0.41241521], + [ 0.28232739, 0.09495545, 0.41733086], + [ 0.28265633, 0.10019576, 0.42216032], + [ 0.28291049, 0.10539345, 0.42690202], + [ 0.28309095, 0.11055307, 0.43155375], + [ 0.28319704, 0.11567966, 0.43611482], + [ 0.28322882, 0.12077701, 0.44058404], + [ 0.28318684, 0.12584799, 0.44496 ], + [ 0.283072 , 0.13089477, 0.44924127], + [ 0.28288389, 0.13592005, 0.45342734], + [ 0.28262297, 0.14092556, 0.45751726], + [ 0.28229037, 0.14591233, 0.46150995], + [ 0.28188676, 0.15088147, 0.46540474], + [ 0.28141228, 0.15583425, 0.46920128], + [ 0.28086773, 0.16077132, 0.47289909], + [ 0.28025468, 0.16569272, 0.47649762], + [ 0.27957399, 0.17059884, 0.47999675], + [ 0.27882618, 0.1754902 , 0.48339654], + [ 0.27801236, 0.18036684, 0.48669702], + [ 0.27713437, 0.18522836, 0.48989831], + [ 0.27619376, 0.19007447, 0.49300074], + [ 0.27519116, 0.1949054 , 0.49600488], + [ 0.27412802, 0.19972086, 0.49891131], + [ 0.27300596, 0.20452049, 0.50172076], + [ 0.27182812, 0.20930306, 0.50443413], + [ 0.27059473, 0.21406899, 0.50705243], + [ 0.26930756, 0.21881782, 0.50957678], + [ 0.26796846, 0.22354911, 0.5120084 ], + [ 0.26657984, 0.2282621 , 0.5143487 ], + [ 0.2651445 , 0.23295593, 0.5165993 ], + [ 0.2636632 , 0.23763078, 0.51876163], + [ 0.26213801, 0.24228619, 0.52083736], + [ 0.26057103, 0.2469217 , 0.52282822], + [ 0.25896451, 0.25153685, 0.52473609], + [ 0.25732244, 0.2561304 , 0.52656332], + [ 0.25564519, 0.26070284, 0.52831152], + [ 0.25393498, 0.26525384, 0.52998273], + [ 0.25219404, 0.26978306, 0.53157905], + [ 0.25042462, 0.27429024, 0.53310261], + [ 0.24862899, 0.27877509, 0.53455561], + [ 0.2468114 , 0.28323662, 0.53594093], + [ 0.24497208, 0.28767547, 0.53726018], + [ 0.24311324, 0.29209154, 0.53851561], + [ 0.24123708, 0.29648471, 0.53970946], + [ 0.23934575, 0.30085494, 0.54084398], + [ 0.23744138, 0.30520222, 0.5419214 ], + [ 0.23552606, 0.30952657, 0.54294396], + [ 0.23360277, 0.31382773, 0.54391424], + [ 0.2316735 , 0.3181058 , 0.54483444], + [ 0.22973926, 0.32236127, 0.54570633], + [ 0.22780192, 0.32659432, 0.546532 ], + [ 0.2258633 , 0.33080515, 0.54731353], + [ 0.22392515, 0.334994 , 0.54805291], + [ 0.22198915, 0.33916114, 0.54875211], + [ 0.22005691, 0.34330688, 0.54941304], + [ 0.21812995, 0.34743154, 0.55003755], + [ 0.21620971, 0.35153548, 0.55062743], + [ 0.21429757, 0.35561907, 0.5511844 ], + [ 0.21239477, 0.35968273, 0.55171011], + [ 0.2105031 , 0.36372671, 0.55220646], + [ 0.20862342, 0.36775151, 0.55267486], + [ 0.20675628, 0.37175775, 0.55311653], + [ 0.20490257, 0.37574589, 0.55353282], + [ 0.20306309, 0.37971644, 0.55392505], + [ 0.20123854, 0.38366989, 0.55429441], + [ 0.1994295 , 0.38760678, 0.55464205], + [ 0.1976365 , 0.39152762, 0.55496905], + [ 0.19585993, 0.39543297, 0.55527637], + [ 0.19410009, 0.39932336, 0.55556494], + [ 0.19235719, 0.40319934, 0.55583559], + [ 0.19063135, 0.40706148, 0.55608907], + [ 0.18892259, 0.41091033, 0.55632606], + [ 0.18723083, 0.41474645, 0.55654717], + [ 0.18555593, 0.4185704 , 0.55675292], + [ 0.18389763, 0.42238275, 0.55694377], + [ 0.18225561, 0.42618405, 0.5571201 ], + [ 0.18062949, 0.42997486, 0.55728221], + [ 0.17901879, 0.43375572, 0.55743035], + [ 0.17742298, 0.4375272 , 0.55756466], + [ 0.17584148, 0.44128981, 0.55768526], + [ 0.17427363, 0.4450441 , 0.55779216], + [ 0.17271876, 0.4487906 , 0.55788532], + [ 0.17117615, 0.4525298 , 0.55796464], + [ 0.16964573, 0.45626209, 0.55803034], + [ 0.16812641, 0.45998802, 0.55808199], + [ 0.1666171 , 0.46370813, 0.55811913], + [ 0.16511703, 0.4674229 , 0.55814141], + [ 0.16362543, 0.47113278, 0.55814842], + [ 0.16214155, 0.47483821, 0.55813967], + [ 0.16066467, 0.47853961, 0.55811466], + [ 0.15919413, 0.4822374 , 0.5580728 ], + [ 0.15772933, 0.48593197, 0.55801347], + [ 0.15626973, 0.4896237 , 0.557936 ], + [ 0.15481488, 0.49331293, 0.55783967], + [ 0.15336445, 0.49700003, 0.55772371], + [ 0.1519182 , 0.50068529, 0.55758733], + [ 0.15047605, 0.50436904, 0.55742968], + [ 0.14903918, 0.50805136, 0.5572505 ], + [ 0.14760731, 0.51173263, 0.55704861], + [ 0.14618026, 0.51541316, 0.55682271], + [ 0.14475863, 0.51909319, 0.55657181], + [ 0.14334327, 0.52277292, 0.55629491], + [ 0.14193527, 0.52645254, 0.55599097], + [ 0.14053599, 0.53013219, 0.55565893], + [ 0.13914708, 0.53381201, 0.55529773], + [ 0.13777048, 0.53749213, 0.55490625], + [ 0.1364085 , 0.54117264, 0.55448339], + [ 0.13506561, 0.54485335, 0.55402906], + [ 0.13374299, 0.54853458, 0.55354108], + [ 0.13244401, 0.55221637, 0.55301828], + [ 0.13117249, 0.55589872, 0.55245948], + [ 0.1299327 , 0.55958162, 0.55186354], + [ 0.12872938, 0.56326503, 0.55122927], + [ 0.12756771, 0.56694891, 0.55055551], + [ 0.12645338, 0.57063316, 0.5498411 ], + [ 0.12539383, 0.57431754, 0.54908564], + [ 0.12439474, 0.57800205, 0.5482874 ], + [ 0.12346281, 0.58168661, 0.54744498], + [ 0.12260562, 0.58537105, 0.54655722], + [ 0.12183122, 0.58905521, 0.54562298], + [ 0.12114807, 0.59273889, 0.54464114], + [ 0.12056501, 0.59642187, 0.54361058], + [ 0.12009154, 0.60010387, 0.54253043], + [ 0.11973756, 0.60378459, 0.54139999], + [ 0.11951163, 0.60746388, 0.54021751], + [ 0.11942341, 0.61114146, 0.53898192], + [ 0.11948255, 0.61481702, 0.53769219], + [ 0.11969858, 0.61849025, 0.53634733], + [ 0.12008079, 0.62216081, 0.53494633], + [ 0.12063824, 0.62582833, 0.53348834], + [ 0.12137972, 0.62949242, 0.53197275], + [ 0.12231244, 0.63315277, 0.53039808], + [ 0.12344358, 0.63680899, 0.52876343], + [ 0.12477953, 0.64046069, 0.52706792], + [ 0.12632581, 0.64410744, 0.52531069], + [ 0.12808703, 0.64774881, 0.52349092], + [ 0.13006688, 0.65138436, 0.52160791], + [ 0.13226797, 0.65501363, 0.51966086], + [ 0.13469183, 0.65863619, 0.5176488 ], + [ 0.13733921, 0.66225157, 0.51557101], + [ 0.14020991, 0.66585927, 0.5134268 ], + [ 0.14330291, 0.66945881, 0.51121549], + [ 0.1466164 , 0.67304968, 0.50893644], + [ 0.15014782, 0.67663139, 0.5065889 ], + [ 0.15389405, 0.68020343, 0.50417217], + [ 0.15785146, 0.68376525, 0.50168574], + [ 0.16201598, 0.68731632, 0.49912906], + [ 0.1663832 , 0.69085611, 0.49650163], + [ 0.1709484 , 0.69438405, 0.49380294], + [ 0.17570671, 0.6978996 , 0.49103252], + [ 0.18065314, 0.70140222, 0.48818938], + [ 0.18578266, 0.70489133, 0.48527326], + [ 0.19109018, 0.70836635, 0.48228395], + [ 0.19657063, 0.71182668, 0.47922108], + [ 0.20221902, 0.71527175, 0.47608431], + [ 0.20803045, 0.71870095, 0.4728733 ], + [ 0.21400015, 0.72211371, 0.46958774], + [ 0.22012381, 0.72550945, 0.46622638], + [ 0.2263969 , 0.72888753, 0.46278934], + [ 0.23281498, 0.73224735, 0.45927675], + [ 0.2393739 , 0.73558828, 0.45568838], + [ 0.24606968, 0.73890972, 0.45202405], + [ 0.25289851, 0.74221104, 0.44828355], + [ 0.25985676, 0.74549162, 0.44446673], + [ 0.26694127, 0.74875084, 0.44057284], + [ 0.27414922, 0.75198807, 0.4366009 ], + [ 0.28147681, 0.75520266, 0.43255207], + [ 0.28892102, 0.75839399, 0.42842626], + [ 0.29647899, 0.76156142, 0.42422341], + [ 0.30414796, 0.76470433, 0.41994346], + [ 0.31192534, 0.76782207, 0.41558638], + [ 0.3198086 , 0.77091403, 0.41115215], + [ 0.3277958 , 0.77397953, 0.40664011], + [ 0.33588539, 0.7770179 , 0.40204917], + [ 0.34407411, 0.78002855, 0.39738103], + [ 0.35235985, 0.78301086, 0.39263579], + [ 0.36074053, 0.78596419, 0.38781353], + [ 0.3692142 , 0.78888793, 0.38291438], + [ 0.37777892, 0.79178146, 0.3779385 ], + [ 0.38643282, 0.79464415, 0.37288606], + [ 0.39517408, 0.79747541, 0.36775726], + [ 0.40400101, 0.80027461, 0.36255223], + [ 0.4129135 , 0.80304099, 0.35726893], + [ 0.42190813, 0.80577412, 0.35191009], + [ 0.43098317, 0.80847343, 0.34647607], + [ 0.44013691, 0.81113836, 0.3409673 ], + [ 0.44936763, 0.81376835, 0.33538426], + [ 0.45867362, 0.81636288, 0.32972749], + [ 0.46805314, 0.81892143, 0.32399761], + [ 0.47750446, 0.82144351, 0.31819529], + [ 0.4870258 , 0.82392862, 0.31232133], + [ 0.49661536, 0.82637633, 0.30637661], + [ 0.5062713 , 0.82878621, 0.30036211], + [ 0.51599182, 0.83115784, 0.29427888], + [ 0.52577622, 0.83349064, 0.2881265 ], + [ 0.5356211 , 0.83578452, 0.28190832], + [ 0.5455244 , 0.83803918, 0.27562602], + [ 0.55548397, 0.84025437, 0.26928147], + [ 0.5654976 , 0.8424299 , 0.26287683], + [ 0.57556297, 0.84456561, 0.25641457], + [ 0.58567772, 0.84666139, 0.24989748], + [ 0.59583934, 0.84871722, 0.24332878], + [ 0.60604528, 0.8507331 , 0.23671214], + [ 0.61629283, 0.85270912, 0.23005179], + [ 0.62657923, 0.85464543, 0.22335258], + [ 0.63690157, 0.85654226, 0.21662012], + [ 0.64725685, 0.85839991, 0.20986086], + [ 0.65764197, 0.86021878, 0.20308229], + [ 0.66805369, 0.86199932, 0.19629307], + [ 0.67848868, 0.86374211, 0.18950326], + [ 0.68894351, 0.86544779, 0.18272455], + [ 0.69941463, 0.86711711, 0.17597055], + [ 0.70989842, 0.86875092, 0.16925712], + [ 0.72039115, 0.87035015, 0.16260273], + [ 0.73088902, 0.87191584, 0.15602894], + [ 0.74138803, 0.87344918, 0.14956101], + [ 0.75188414, 0.87495143, 0.14322828], + [ 0.76237342, 0.87642392, 0.13706449], + [ 0.77285183, 0.87786808, 0.13110864], + [ 0.78331535, 0.87928545, 0.12540538], + [ 0.79375994, 0.88067763, 0.12000532], + [ 0.80418159, 0.88204632, 0.11496505], + [ 0.81457634, 0.88339329, 0.11034678], + [ 0.82494028, 0.88472036, 0.10621724], + [ 0.83526959, 0.88602943, 0.1026459 ], + [ 0.84556056, 0.88732243, 0.09970219], + [ 0.8558096 , 0.88860134, 0.09745186], + [ 0.86601325, 0.88986815, 0.09595277], + [ 0.87616824, 0.89112487, 0.09525046], + [ 0.88627146, 0.89237353, 0.09537439], + [ 0.89632002, 0.89361614, 0.09633538], + [ 0.90631121, 0.89485467, 0.09812496], + [ 0.91624212, 0.89609127, 0.1007168 ], + [ 0.92610579, 0.89732977, 0.10407067], + [ 0.93590444, 0.8985704 , 0.10813094], + [ 0.94563626, 0.899815 , 0.11283773], + [ 0.95529972, 0.90106534, 0.11812832], + [ 0.96489353, 0.90232311, 0.12394051], + [ 0.97441665, 0.90358991, 0.13021494], + [ 0.98386829, 0.90486726, 0.13689671], + [ 0.99324789, 0.90615657, 0.1439362 ]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/DylanMuir-TIFFStack-6492032/.gitignore b/downloaded/DylanMuir-TIFFStack-6492032/.gitignore new file mode 100644 index 0000000..11fe50e --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/.gitignore @@ -0,0 +1,2 @@ +private/mapped_tensor_repsum.mexmaci64 +private/tifflib.mexmaci64 diff --git a/downloaded/DylanMuir-TIFFStack-6492032/LICENSE.md b/downloaded/DylanMuir-TIFFStack-6492032/LICENSE.md new file mode 100644 index 0000000..e7fc4be --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/LICENSE.md @@ -0,0 +1,10 @@ +## License +Creative Commons License
TIFFStack by Dylan Muir is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at http://github.com/DylanMuir/TIFFStack. + +This work was published in [Frontiers in Neuroinformatics]: DR Muir and +BM Kampa. 2015. *[FocusStack and StimServer: A new open source MATLAB +toolchain for visual stimulation and analysis of two-photon calcium +neuronal imaging data](http://dx.doi.org/10.3389/fninf.2014.00085)*, **Frontiers in Neuroinformatics** 8 *85*. DOI: [dx.doi.org/10.3389/fninf.2014.00085](http://dx.doi.org/10.3389/fninf.2014.00085). +Please cite our publication in lieu of thanks, if you use this code. + + [Frontiers in Neuroinformatics]: http://www.frontiersin.org/neuroinformatics \ No newline at end of file diff --git a/downloaded/DylanMuir-TIFFStack-6492032/README.md b/downloaded/DylanMuir-TIFFStack-6492032/README.md new file mode 100644 index 0000000..7756d3c --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/README.md @@ -0,0 +1,151 @@ +# TIFFStack +Load TIFF files into matlab fast, with lazy loading + +This class allows you to access a TIFF file as a matlab tensor, while +only reading the data that you need from disk. A `TIFFStack` object +appears like a four-dimensional tensor, with dimensions for rows, +columns, frames and channels (multiple samples per pixel). These objects +can be passed transparently into other functions that expect matlab +tensors. If you need to process only a portion, or only one channel of a +TIFF stack, then this class will save you allocating the enormous +amounts of memory required to load the entire file. `TIFFStack` is also +much faster than using `imread` to read each frame of the TIFF file +separately. + +`TIFFStack` attempts to use `libTiff`, which is directly supported +in recent Matlab versions. This provides dramatic speed-ups, and is a good deal faster than using `imread` or +the Matlab `Tiff` class. If `libTiff` is not available, then Matlab-only +code is used to read image data. `permute`, `ipermute`, `transpose` and +`ctranspose` are also transparently supported. + +## Download and install + +Clone `TIFFStack` into a directory called +*@TIFFStack*. The ampersand symbol (@) is important, since it indicates +to [Matlab] that `TIFFStack` is an object-oriented module. Add the parent +directory — not the *@TIFFStack* directory — to the [Matlab] path. + +## Usage + + tsStack = TIFFStack(strFilename <, bInvert>) + +A `TIFFStack` object behaves like a read-only memory mapped TIFF file. +The entire image stack is treated as a Matlab tensor. Each frame of the +file must have the same dimensions. Reading the image data is optimised +to the extent possible; the header information is only read once. + +This class attempts to use the Matlab libTiff interface, if available. +If not, it uses a modified version of `tiffread` \[1, 2\] to read data. +Code is included (but disabled) to use the matlab `imread` function, but +this function returns invalid data for some TIFF formats. + +## Construction of a `TIFFStack` object + + >> tsStack = TIFFStack('test.tiff'); % Construct a TIFF stack associated with a file + + >> tsStack = TIFFStack('test.tiff', true); % Indicate that the image data should be inverted + tsStack = + TIFFStack handle + Properties: + bInvert: 1 + strFilename: [1x9 char] + sImageInfo: [5x1 struct] + strDataClass: 'uint16' + +## Accessing data + + >> tsStack(:, :, 3); % Retrieve the 3rd frame of the stack, all planes + >> tsStack(:, :, 1, 3); % Retrieve the 3rd plane of the 1st frame + >> size(tsStack) % Find the size of the stack (rows, cols, frames, planes per pixel) + + ans = + 128 128 5 1 + + >> tsStack(4); % Linear indexing is supported + >> tsStack.bInvert = true; % Turn on data inversion + +## Stacks with interleaved frame, channel and slice dimensions + +Some TIFF generation software stores multiple samples per pixel as +interleaved frames in a TIFF file. Other complex stacks may include +multiple different images per frame of time (e.g. multiple cameras or +different imaged locations per frame). `TIFFStack` allows these files to be +de-interleaved, such that each conceptual data dimension has its own +referencing dimension within Matlab. + +This functionality uses the optional `vnInterleavedFrameDims` argument. +This is a vector of dimensions that were interleaved into the single +frame dimension in the stack. + +For example, a stack contains 2 channels of data per pixel, and 3 imaged +locations per frame, all interleaved into the TIFF frame dimension. The +stack contains 10 conceptual frames, and each frame contains 5x5 pixels. + +The stack is therefore conceptually of dimensions [5 5 2 3 10 1], but +appears on disk with dimensions [5 5 60 1]. (The final dimension +corresponds to the samples-per-pixel dimension of the TIFF file). + +``` +>> tsStack = TIFFStack('file.tif', [], [2 3 10]); +>> size(tsStack) + +ans = + 5 5 2 3 10 +``` + + +Permutation and indexing now works seamlessly on this stack, with each +conceptual dimension de-interleaved. + +If desired, the final number of frames can be left off +`vnInterleavedFrameDims`; for example + +``` +>> tsStack = TIFFStack('file.tif', [], [2 3]); +>> size(tsStack) + +ans = + 5 5 2 3 10 +``` + +*Note*: You must be careful that you specify the dimensions in the +appropriate order, exactly as interleaved in the stack. Also, if the stack +contains multiple samples per pixel in native TIFF format, the +samples-per-pixel dimension will always be pushed to the final dimension. + +## Publications + +This work was published in [Frontiers in Neuroinformatics]: DR Muir and +BM Kampa. 2015. *[FocusStack and StimServer: A new open source MATLAB +toolchain for visual stimulation and analysis of two-photon calcium +neuronal imaging data](http://dx.doi.org/10.3389/fninf.2014.00085)*, **Frontiers in Neuroinformatics** 8 *85*. DOI: [dx.doi.org/10.3389/fninf.2014.00085](http://dx.doi.org/10.3389/fninf.2014.00085). +Please cite our publication in lieu of thanks, if you use this code. + +## References + +\[1\] Francois Nedelec, Thomas Surrey and A.C. Maggs. Physical Review +Letters 86: 3192-3195; 2001. DOI: [10.1103/PhysRevLett.86.3192] + +\[2\] + +## Acknowledgements + +This work optionally uses `tiffread` from [Francois Nedelec] to access the data in +the TIFF file. [Matlab] includes the ability to read TIFF files in +`imread`, including niceties such as only reading a region of interest +from each frame, but imread is incredibly slow and amazingly buggy (as +of July 2011). TIFFStack uses `tiffread` in an optimised fashion, by +reading and caching the header information (the image file directories — +IFDs). Each frame can then be read directly without re-opening the file +and re-reading the IFDs. + +## License +Creative Commons License
TIFFStack by Dylan Muir is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Based on a work at http://github.com/DylanMuir/TIFFStack. + + [Frontiers in Neuroinformatics]: http://www.frontiersin.org/neuroinformatics + [FFSS]: http://journal.frontiersin.org/Journal/10.3389/fninf.2014.00085 + [10.1103/PhysRevLett.86.3192]: //dx.doi.org/10.1103/PhysRevLett.86.3192 + [Francois Nedelec]: http://www.cytosim.org + [Matlab]: http://mathworks.com/ + [Download `TIFFStack`]: /resources/code/TIFFStack.zip + [Matlab]: http://mathworks.com/ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/TIFFStack.m b/downloaded/DylanMuir-TIFFStack-6492032/TIFFStack.m new file mode 100644 index 0000000..d11d15e --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/TIFFStack.m @@ -0,0 +1,1891 @@ +% TIFFStack - Manipulate a TIFF file like a tensor +% +% Usage: tsStack = <TIFFStack(strFilename <, bInvert, vnInterleavedFrameDims>) +% +% A TIFFStack object behaves like a read-only memory mapped TIFF file. The +% entire image stack is treated as a matlab tensor. Each frame of the file must +% have the same dimensions. Reading the image data is optimised to the extent +% possible; the header information is only read once. +% +% If this software is useful to your academic work, please cite our +% publication in lieu of thanks: +% +% D R Muir and B M Kampa, 2015. "FocusStack and StimServer: a new open +% source MATLAB toolchain for visual stimulation and analysis of two-photon +% calcium neuronal imaging data". Frontiers in Neuroinformatics 8 (85). +% DOI: 10.3389/fninf.2014.00085 +% +% This class attempts to use the version of tifflib built-in to recent +% versions of Matlab, if available. Otherwise this class uses a modified +% version of tiffread [2, 3] to read data. +% +% permute, ipermute and transpose are now transparantly supported. Note +% that to read a pixel, the entire frame containing that pixel is read. So +% reading a Z-slice of the stack will read in the entire stack. +% +% Some TIFF file writing software introduces custom or poorly-formed tags. +% This causes tifflib to produce lots of warnings. These warnings can be +% ignored by setting: +% +% >> w = warning('off', 'MATLAB:imagesci:tiffmexutils:libtiffWarning'); +% >> warning('off', 'MATLAB:imagesci:tifftagsread:expectedTagDataFormat'); +% +% and later restored with: +% +% >> warning(w); +% +% ------------------------------------------------------------------------- +% +% Construction +% >> tsStack = TIFFStack('test.tiff'); % Construct a TIFF stack associated with a file +% +% >> tsStack = TIFFStack('test.tiff', true); % Indicate that the image data should be inverted +% +% tsStack = +% +% TIFFStack handle +% +% Properties: +% bInvert: 0 +% strFilename: [1x9 char] +% sImageInfo: [5x1 struct] +% strDataClass: 'uint16' +% +% Usage: +% +% >> tsStack(:, :, 3); % Retrieve the 3rd frame of the stack, all planes +% +% >> tsStack(:, :, 1, 3); % Retrieve the 3rd plane of the 1st frame +% +% >> size(tsStack) % Find the size of the stack (rows, cols, frames, planes per pixel) +% +% ans = +% +% 128 128 5 1 +% +% >> tsStack(4); % Linear indexing is supported +% +% >> tsStack.bInvert = true; % Turn on data inversion +% +% >> getFilename(tsStack) % Retrieve the 'strFilename' property +% >> getInvert(tsStack) % Retrive the 'bInvert' property +% >> getImageInfo(tsStack) % Retrieve the 'sImageInfo' property +% >> getDataClass(tsStack) % Retrive the 'strDataClass' property +% +% ------------------------------------------------------------------------- +% +% De-interleaving frame dimensions in complex stacks +% Some TIFF generation software stores multiple samples per pixel as +% interleaved frames in a TIFF file. Other complex stacks may include +% multiple different images per frame of time (e.g. multiple cameras or +% different imaged locations per frame). TIFFStack allows these files to be +% de-interleaved, such that each conceptual data dimension has its own +% referencing dimension within matlab. +% +% This functionality uses the optional 'vnInterleavedFrameDims' argument. +% This is a vector of dimensions that were interleaved into the single +% frame dimension in the stack. +% +% For example, a stack contains 2 channels of data per pixel, and 3 imaged +% locations per frame, all interleaved into the TIFF frame dimension. The +% stack contains 10 conceptual frames, and each frame contains 5x5 pixels. +% +% The stack is therefore conceptually of dimensions [5 5 2 3 10 1], but +% appears on disk with dimensions [5 5 60 1]. (The final dimension +% corresponds to the samples-per-pixel dimension of the TIFF file). +% +% >> tsStack = TIFFStack('file.tif', [], [2 3 10]); +% >> size(tsStack) +% +% ans = +% +% 5 5 2 3 10 +% +% Permutation and indexing now works seamlessly on this stack, with each +% conceptual dimension de-interleaved. +% +% If desired, the final number of frames can be left off +% 'vnInterleavedFrameDims'; for example: +% +% >> tsStack = TIFFStack('file.tif', [], [2 3]); +% >> size(tsStack) +% +% ans = +% +% 5 5 2 3 10 +% +% Note: You must be careful that you specify the dimensions in the +% appropriate order, as interleaved in the stack. Also, if the stack +% contains multiple samples per pixel in native TIFF format, the +% samples-per-pixel dimension will always be pushed to the final dimension. +% +% ------------------------------------------------------------------------- +% +% ImageJ stacks +% ImageJ HyperStacks are automatically deinterleaved, if encountered. By +% default, the stacks will be presented as [Y X T Z C]. They can of course +% be permuted. If desired, the interleaving can be overridden by providing +% an explicit 'vnInterleavedFrameDims'. +% +% ImageJ writes "fake" big stacks as raw binary data, with a TIF file shim +% as a header. These appear to Matlab as a TIF file containing a single +% frame. TIFFStack loads these files using MappedTensor, when available. If +% MappedTensor is not available, a warning will be issued. +% +% References: +% [1] D R Muir and B M Kampa, 2015. "FocusStack and StimServer: a new open +% source MATLAB toolchain for visual stimulation and analysis of two-photon +% calcium neuronal imaging data". Frontiers in Neuroinformatics 8 (85). +% DOI: 10.3389/fninf.2014.00085 +% +% [2] Francois Nedelec, Thomas Surrey and A.C. Maggs. Physical Review Letters +% 86: 3192-3195; 2001. DOI: 10.1103/PhysRevLett.86.3192 +% +% [3] http://www.cytosim.org + +% Author: Dylan Muir +% Created: 28th June, 2011 + +%% Class definition + +classdef TIFFStack < handle + properties + bInvert; % - A boolean flag that determines whether or not the image data will be inverted + end + + properties (SetAccess = private) + strFilename = []; % - The name of the TIFF file on disk + sImageInfo; % - The TIFF header information + strDataClass; % - The matlab class in which data will be returned + end + + properties (SetAccess = private, GetAccess = private) + bForceTiffread % - Force the use of tiffread, rather than trying to use TiffLib + vnDataSize; % - Cached size of the TIFF stack + vnApparentSize; % - Apparent size of the TIFF stack + TIF; % \ + TIF_tr31; % |- Cached header info for tiffread31 speedups + HEADER; % / + bUseTiffLib; % - Flag indicating whether TiffLib is being used + bMTStack; % - Flag indicating MappedTensor is being used + fhReadFun; % - When using Tiff class, function for reading data + fhSetDirFun; % - When using Tiff class, function for setting the directory + vnDimensionOrder; % - Internal dimensions order to support permutation + fhRepSum; % - Function handle to (hopefully) accellerated repsum function + fhCastFun; % - The matlab function that casts data to the required return class + end + + methods + % TIFFStack - CONSTRUCTOR + function oStack = TIFFStack(strFilename, bInvert, vnInterleavedFrameDims, bForceTiffread) + % - Check usage + if (~exist('strFilename', 'var') || ~ischar(strFilename)) + help TIFFStack; + error('TIFFStack:Usage', ... + '*** TIFFStack: Incorrect usage.'); + end + + % - Should we force TIFFStack to use tiffread, rather than libTiff? + if (~exist('bForceTiffread', 'var') || isempty(bForceTiffread)) + bForceTiffread = false; + end + oStack.bForceTiffread = bForceTiffread; + + % - Can we use the accelerated TIFF library? + if (exist('tifflib') ~= 3) %#ok + % - Try to copy the library + strTiffLibLoc = which('/private/tifflib'); + strTIFFStackLoc = fileparts(which('TIFFStack')); + copyfile(strTiffLibLoc, fullfile(strTIFFStackLoc, 'private'), 'f'); + end + + oStack.bUseTiffLib = (exist('tifflib') == 3) & ~bForceTiffread; %#ok + + if (~oStack.bUseTiffLib) + warning('TIFFStack:SlowAccess', ... + '--- TIFFStack: Using slower non-TiffLib access.'); + end + + % - Get accelerated repsum function, if possible + oStack.fhRepSum = GetMexFunctionHandles; + + % - Check for inversion flag + if (~exist('bInvert', 'var') || isempty(bInvert)) + bInvert = false; + end + oStack.bInvert = bInvert; + + % - Check for frame dimensions + if (~exist('vnInterleavedFrameDims', 'var')) + vnInterleavedFrameDims = []; + else + validateattributes(vnInterleavedFrameDims, {'single', 'double'}, {'integer', 'real', 'positive'}, ... + 'TIFFStack', 'vnInterleavedFrameDims'); + end + + % - See if filename exists + if (~exist(strFilename, 'file')) + error('TIFFStack:InvalidFile', ... + '*** TIFFStack: File [%s] does not exist.', strFilename); + end + + % - Assign absolute file path to stack + strFilename = get_full_file_path(strFilename); + oStack.strFilename = strFilename; + + % - Get image information + try + % - Read and store image information (using tiffread for speed and compatibility) + [oStack.TIF, oStack.HEADER, sInfo] = tiffread31_header(strFilename); + oStack.TIF_tr31 = oStack.TIF; + + % - Detect a ImageJ fake BigTIFF stack + [bIsImageJBigStack, bIsImageJHyperStack, vnStackDims, vnInterleavedIJFrameDims] = IsImageJBigStack(tiffread31_readtags(oStack.TIF_tr31, oStack.HEADER, 1), numel(oStack.HEADER)); + + % - Handle ImageJ big stacks with MappedTensor + if (bIsImageJBigStack) + [oStack.TIF, oStack.bMTStack, oStack.strDataClass] = OpenImageJBigStack(oStack, vnStackDims); + + % - Could we use a MappedTensor? + if (~oStack.bMTStack) + % - No, so just access the first frame + bIsImageJBigStack = false; %#ok + bIsImageJHyperStack = false; + + warning('TIFFStack:ImageJBigStackUnsupported', ... + '--- TIFFStack: Warning: This is an ImageJ "fake" TIF file. MappedTensor must be available to read this file.'); + end + end + + % - Detect a very long stack + if ((numel(sInfo) > 2^16) && oStack.bUseTiffLib) + warning('TIFFStack:LongStack', ... + '--- TIFFSTack: Warning: This stack has more than 2^16 frames, so Matlab/tifflib cannot read it natively.\n Using slower non-Tifflib access.'); + oStack.bUseTiffLib = false; + end + + % - Deinterleave hyperstacks automatically + bImageJDeinterleaving = bIsImageJHyperStack && isempty(vnInterleavedFrameDims); + if bImageJDeinterleaving + vnInterleavedFrameDims = vnInterleavedIJFrameDims; + end + + % - Initialise object, depending on underlying access method + if (oStack.bMTStack) + % - Fix up stack size + sInfo = repmat(sInfo(1), vnStackDims(3), 1); + + elseif (oStack.bUseTiffLib) + % - Create a Tiff object + oStack.TIF = tifflib('open', strFilename, 'r'); + + % - Check data format + if(TiffgetTag(oStack.TIF, 'Photometric') == Tiff.Photometric.YCbCr) + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: YCbCr images are not supported.'); + end + + % - Use Tiff to get the data class for this tiff + nDataClass = TiffgetTag(oStack.TIF, 'SampleFormat'); + switch (nDataClass) + case Tiff.SampleFormat.UInt + switch (sInfo(1).BitsPerSample(1)) + case 1 + oStack.strDataClass = 'logical'; + + case 8 + oStack.strDataClass = 'uint8'; + + case 16 + oStack.strDataClass = 'uint16'; + + case 32 + oStack.strDataClass = 'uint32'; + + case 64 + oStack.strDataClass = 'uint64'; + + otherwise + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: The sample format of this TIFF stack is not supported.'); + end + + case Tiff.SampleFormat.Int + switch (sInfo(1).BitsPerSample(1)) + case 1 + oStack.strDataClass = 'logical'; + + case 8 + oStack.strDataClass = 'int8'; + + case 16 + oStack.strDataClass = 'int16'; + + case 32 + oStack.strDataClass = 'int32'; + + case 64 + oStack.strDataClass = 'int64'; + + otherwise + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: The sample format of this TIFF stack is not supported.'); + end + + case Tiff.SampleFormat.IEEEFP + switch (sInfo(1).BitsPerSample(1)) + case {1, 8, 16, 32} + oStack.strDataClass = 'single'; + + case 64 + oStack.strDataClass = 'double'; + + otherwise + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: The sample format of this TIFF stack is not supported.'); + end + + otherwise + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: The sample format of this TIFF stack is not supported.'); + end + + % -- Assign accelerated reading function + strReadFun = 'TS_read_Tiff'; + + % - Tiled or striped + if (tifflib('isTiled', oStack.TIF)) + strReadFun = [strReadFun '_tiled']; + else + strReadFun = [strReadFun '_striped']; + end + + % - Chunky or planar + if (isequal(TiffgetTag(oStack.TIF, 'PlanarConfiguration'), Tiff.PlanarConfiguration.Chunky)) + strReadFun = [strReadFun '_chunky']; + elseif (isequal(TiffgetTag(oStack.TIF, 'PlanarConfiguration'), Tiff.PlanarConfiguration.Separate)) + strReadFun = [strReadFun '_planar']; + else + error('TIFFStack:UnsupportedFormat', ... + '*** TIFFStack: The planar configuration of this TIFF stack is not supported.'); + end + + strSetDirFun = 'TS_set_directory'; + + % - Check for zero-based referencing + try + tifflib('computeStrip', oStack.TIF, 0); + catch + strReadFun = [strReadFun '_pre2014']; + strSetDirFun = [strSetDirFun '_pre2014']; + end + + % - Convert into function handles + oStack.fhReadFun = str2func(strReadFun); + oStack.fhSetDirFun = str2func(strSetDirFun); + + % - Fix up rows per strip (inconsistency between Windows and + % OS X Tifflib + nRowsPerStrip = TiffgetTag(oStack.TIF, 'RowsPerStrip'); + if ~isfield(sInfo, 'RowsPerStrip') || (nRowsPerStrip ~= sInfo(1).RowsPerStrip) + [sInfo.RowsPerStrip] = deal(nRowsPerStrip); + end + + % - Attempt to read tile width and length + try + [sInfo.TileWidth] = deal(TiffgetTag(oStack.TIF, 'TileWidth')); + catch + [sInfo.TileWidth] = deal(1); + end + + try + [sInfo.TileLength] = deal(TiffgetTag(oStack.TIF, 'TileLength')); + catch + [sInfo.TileLength] = deal(1); + end + + % - Read max and min sample values + [sInfo.MaxSampleValue] = deal(TiffgetTag(oStack.TIF, 'MaxSampleValue')); + [sInfo.MinSampleValue] = deal(TiffgetTag(oStack.TIF, 'MinSampleValue')); + + else + % - Read TIFF header for tiffread31 + % [oStack.TIF, oStack.HEADER] = tiffread31_header(strFilename); + oStack.TIF.file = fopen(strFilename, 'r', 'l'); + + % - Use tiffread31 to get the data class for this tiff + fPixel = tiffread31_readimage(oStack.TIF, oStack.HEADER, 1); + fPixel = fPixel(1, 1, :); + oStack.strDataClass = class(fPixel); + end + + % - Use imread to get the data class for this tiff + % fPixel = imread(strFilename, 'TIFF', 1, 'PixelRegion', {[1 1], [1 1]}); + % oStack.strDataClass = class(fPixel); + + % -- Assign casting function + oStack.fhCastFun = str2func(oStack.strDataClass); + + % - Record stack size + if (oStack.bMTStack) + oStack.vnDataSize = vnStackDims; + oStack.vnApparentSize = oStack.vnDataSize; + + % - Initialise dimension order + oStack.vnDimensionOrder = 1:numel(oStack.vnApparentSize); + + % - Permute first two dimensions + oStack = permute(oStack, [2 1 3:numel(vnStackDims)]); + + else + oStack.vnDataSize = [sInfo(1).Height sInfo(1).Width numel(sInfo) sInfo(1).SamplesPerPixel]; + + % - Initialise dimension order + oStack.vnDimensionOrder = 1:numel(oStack.vnDataSize); + end + + % - Initialize apparent stack size, de-interleaving along the frame dimension + if isempty(vnInterleavedFrameDims) + % - No de-interleaving + oStack.vnApparentSize = oStack.vnDataSize; + + elseif (prod(vnInterleavedFrameDims) ~= oStack.vnDataSize(3)) + % - Be lenient by allowing frames dimension to be left out of arguments + if (mod(oStack.vnDataSize(3), prod(vnInterleavedFrameDims)) == 0) + % - Work out number of apparent frames + nNumApparentFrames = oStack.vnDataSize(3) ./ prod(vnInterleavedFrameDims); + oStack.vnApparentSize = [oStack.vnDataSize(1:2) vnInterleavedFrameDims(:)' nNumApparentFrames oStack.vnDataSize(4)]; + oStack.vnDimensionOrder = 1:numel(oStack.vnApparentSize); + + else + % - Incorrect total number of deinterleaved frames + error('TIFFStack:WrongFrameDims', ... + '*** TIFFStack: When de-interleaving a stack, the total number of frames must not change.'); + end + + else + % - Record apparent stack dimensions + oStack.vnApparentSize = [oStack.vnDataSize(1:2) vnInterleavedFrameDims(:)' oStack.vnDataSize(4)]; + oStack.vnDimensionOrder = 1:numel(oStack.vnApparentSize); + end + + % - Fix up dimensions order for ImageJ HyperStack + if (bImageJDeinterleaving) + oStack = permute(oStack, [1 2 5 4 3]); + end + + % - Record image information + oStack.sImageInfo = sInfo; + + catch mErr + base_ME = MException('TIFFStack:InvalidFile', ... + '*** TIFFStack: Could not open file [%s].', strFilename); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + end + + % delete - DESTRUCTOR + function delete(oStack) + if (oStack.bUseTiffLib) + % - Close the TIFF file, if opened by TiffLib + if (~isempty(oStack.TIF)) + tifflib('close', oStack.TIF); + end + end + + % - Close the TIFF file, if opened by tiffread31_header + if (isfield(oStack.TIF_tr31, 'file') && ~isempty(fopen(oStack.TIF_tr31.file))) + fclose(oStack.TIF_tr31.file); + end + end + + % diagnostic - METHOD Display some diagnostics about a stack + function diagnostic(oStack) + disp(oStack); + fprintf('Private properties:\n'); + fprintf(' vnDataSize: ['); fprintf('%d ', oStack.vnDataSize); fprintf(']\n'); + fprintf(' vnApparentSize: ['); fprintf('%d ', oStack.vnApparentSize); fprintf(']\n'); + fprintf(' vnDimensionOrder: ['); fprintf('%d ', oStack.vnDimensionOrder); fprintf(']\n'); + fprintf(' bUseTiffLib: %d\n', oStack.bUseTiffLib); + fprintf(' bMTStack: %d\n', oStack.bMTStack); + fprintf(' fhReadFun: %s\n', func2str(oStack.fhReadFun)); + fprintf(' fhSetDirFun: %s\n', func2str(oStack.fhSetDirFun)); + fprintf(' fhRepSum: %s\n', func2str(oStack.fhRepSum)); + fprintf(' fhCastFun: %s\n', func2str(oStack.fhCastFun)); + end + + function [TIF, HEADER] = diagnostic_HEADER(oStack) + TIF = oStack.TIF; + HEADER = oStack.HEADER; + end + + +%% --- Overloaded subsref + + function [varargout] = subsref(oStack, S) + switch S(1).type + case '()' + % - Test for valid subscripts + cellfun(@isvalidsubscript, S.subs); + + % - Record stack size + nNumRefDims = numel(S.subs); + + vnReferencedTensorSize = size(oStack); + nNumNZStackDims = numel(vnReferencedTensorSize); + nNumTotalStackDims = max(numel(oStack.vnDimensionOrder), nNumNZStackDims); + + vnFullTensorSize = vnReferencedTensorSize; + vnFullTensorSize(nNumNZStackDims+1:nNumTotalStackDims) = 1; + vnFullTensorSize(vnFullTensorSize == 0) = 1; + + bLinearIndexing = false; + + % - Convert logical indexing to indices + for (nDim = 1:numel(S.subs)) + if (islogical(S.subs{nDim})) + S.subs{nDim} = find(S.subs{nDim}); + end + end + + % - Check dimensionality and trailing dimensions + if (nNumRefDims == 1) + % - Catch "read whole stack" case + if (iscolon(S.subs{1})) + S.subs = num2cell(repmat(':', 1, nNumNZStackDims)); + vnRetDataSize = [prod(vnReferencedTensorSize), 1]; + + else + % - Get equivalent subscripted indexes and permute + vnTensorSize = size(oStack); + if any(S.subs{1}(:) > prod(vnTensorSize)) + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Index exceeds stack dimensions.'); + else + [cIndices{1:nNumTotalStackDims}] = ind2sub(vnTensorSize, S.subs{1}); + end + + % - Permute dimensions + vnInvOrder(oStack.vnDimensionOrder(1:nNumTotalStackDims)) = 1:nNumTotalStackDims; + S.subs = cIndices(vnInvOrder(vnInvOrder ~= 0)); + vnRetDataSize = size(S.subs{1}); + + bLinearIndexing = true; + end + + + elseif (nNumRefDims < nNumNZStackDims) + % - Wrap up trailing dimensions, matlab style, using linear indexing + vnReferencedTensorSize(nNumRefDims) = prod(vnReferencedTensorSize(nNumRefDims:end)); + vnReferencedTensorSize = vnReferencedTensorSize(1:nNumRefDims); + + % - Catch "read whole stack" case + if (all(cellfun(@iscolon, S.subs))) + [S.subs{nNumRefDims+1:nNumTotalStackDims}] = deal(':'); + vnRetDataSize = vnReferencedTensorSize; + + else + % - Convert to linear indexing + bLinearIndexing = true; + [S.subs{1}, vnRetDataSize] = GetLinearIndicesForRefs(S.subs, vnReferencedTensorSize, oStack.fhRepSum); + S.subs = S.subs(1); + [S.subs{1:nNumTotalStackDims}] = ind2sub(vnFullTensorSize, S.subs{1}); + + % - Inverse permute index order + vnInvOrder(oStack.vnDimensionOrder(1:nNumTotalStackDims)) = 1:nNumTotalStackDims; + S.subs = S.subs(vnInvOrder(vnInvOrder ~= 0)); + end + + elseif (nNumRefDims == nNumNZStackDims) + % - Check for colon references + vbIsColon = cellfun(@iscolon, S.subs); + vnRetDataSize = cellfun(@numel, S.subs); + vnRetDataSize(vbIsColon) = vnReferencedTensorSize(vbIsColon); + + % - Permute index order + S.subs(nNumNZStackDims+1:nNumTotalStackDims) = {1}; + vnInvOrder(oStack.vnDimensionOrder(1:nNumTotalStackDims)) = 1:nNumTotalStackDims; + S.subs = S.subs(vnInvOrder(vnInvOrder ~= 0)); + + else % (nNumRefDims > nNumNZStackDims) + % - Check for non-colon references + vbIsColon = cellfun(@iscolon, S.subs); + + % - Check for non-unitary references + vbIsUnitary = cellfun(@(c)(isequal(c, 1)), S.subs); + + % - Check for non-empty references + vbIsEmpty = cellfun(@isempty, S.subs); + + % - Check only trailing dimensions + vbTrailing = [false(1, nNumNZStackDims) true(1, nNumRefDims-nNumNZStackDims)]; + + % - Check trailing dimensions for inappropriate indices + if (any(vbTrailing & (~vbIsColon & ~vbIsUnitary & ~vbIsEmpty))) + % - This is an error + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Index exceeds stack dimensions.'); + end + + % - Catch empty refs + if (~any(vbIsEmpty)) + % - Only keep relevant dimensions + S.subs = S.subs(1:nNumNZStackDims); + end + + % - Determine returned data size + vnReferencedTensorSize(nNumNZStackDims+1:nNumRefDims) = 1; + vnReferencedTensorSize(vnReferencedTensorSize == 0) = 1; + vbIsColon = cellfun(@iscolon, S.subs); + vnRetDataSize = cellfun(@numel, S.subs); + vnRetDataSize(vbIsColon) = vnReferencedTensorSize(vbIsColon); + + % - Permute index order + S.subs(nNumNZStackDims+1:nNumTotalStackDims) = {1}; + vnInvOrder(oStack.vnDimensionOrder(1:nNumTotalStackDims)) = 1:nNumTotalStackDims; + S.subs = S.subs(vnInvOrder(vnInvOrder ~= 0)); + end + + % - Catch empty refs + if (prod(vnRetDataSize) == 0) + [varargout{1:nargout}] = zeros(vnRetDataSize); + return; + end + + % - Re-interleave frame indices for deinterleaved stacks + if (numel(oStack.vnApparentSize) > 4) + % - Record output data size in deinterleaved space + if (~bLinearIndexing) + vnOutputSize = cellfun(@numel, S.subs); + vbIsColon = cellfun(@iscolon, S.subs); + vnOutputSize(vbIsColon) = oStack.vnApparentSize(vbIsColon); + end + + % - Get frame + cFrameSubs = S.subs(3:end-1); + if all(cellfun(@iscolon, cFrameSubs)) + S.subs = {S.subs{1} S.subs{2} ':' S.subs{end}}; + else + if (bLinearIndexing) + vnFrameIndices = sub2ind(oStack.vnApparentSize(3:end-1), cFrameSubs{:}); + else + tnFrameIndices = reshape(1:oStack.vnDataSize(3), ... + oStack.vnApparentSize(3:end-1)); + vnFrameIndices = tnFrameIndices(cFrameSubs{:}); + end + + % - Construct referencing subscripts for raw stack + S.subs = [S.subs(1:2) reshape(vnFrameIndices, [], 1) S.subs(end)]; + end + end + + % - Access stack (MappedTensor or tifflib or tiffread) + if (oStack.bMTStack) + tfData = TS_read_data_MappedTensor(oStack, S.subs, bLinearIndexing); + elseif (oStack.bUseTiffLib) + tfData = TS_read_data_Tiff(oStack, S.subs, bLinearIndexing); + else + tfData = TS_read_data_tiffread(oStack, S.subs, bLinearIndexing); + end + + % - Permute dimensions, if linear indexing has not been used + if (~bLinearIndexing) + % - Reshape resulting data in case of deinterleaved stacks + if (numel(oStack.vnApparentSize) > 4) + tfData = reshape(tfData, vnOutputSize); + end + + tfData = permute(tfData, oStack.vnDimensionOrder); + end + + % - Reshape returned data to concatenate trailing dimensions (just as matlab does) + if (~isequal(size(tfData), vnRetDataSize)) + tfData = reshape(tfData, vnRetDataSize); + end + + [varargout{1:nargout}] = tfData; + + otherwise + error('TIFFStack:InvalidReferencing', ... + '*** TIFFStack: Only ''()'' referencing is supported by TIFFStacks.'); + end + end + +%% --- Getter methods + + function strFilename = getFilename(oStack) + strFilename = oStack.strFilename; + end + + function sImageInfo = getImageInfo(oStack) + sImageInfo = oStack.sImageInfo; + end + + function vsTags = getImageTags(oStack, vnFrames) + % getImageTags - METHOD Read TIFF tags for individual frames + % + % Usage: vsTags = getImageTags(oStack, vnFrames) + % + % 'oStack' is a TIFFStack object. 'vnFrames' is a vector of frame + % indices into the stack. + % + % 'vsTags' will be a struct array, with each element of the array + % containing all tags for the corresponding frame index in + % 'vnFrames'. + + if (nargin < 2) + help TIFFStack/getImageTags; + error('TIFFStack:Usage', 'TIFFStack/getImageTags: ''vnFrames'' is a required argument.'); + end + + % - Extract tags for these frames + vsTags = tiffread31_readtags(oStack.TIF_tr31, oStack.HEADER, vnFrames); + end + + function bInvert = getInvert(oStack) + bInvert = oStack.bInvert; + end + + function strDataClass = getDataClass(oStack) + strDataClass = oStack.strDataClass; + end + +%% --- Overloaded numel, size, ndims, permute, ipermute, ctranspose, transpose, cat, horzcat, vertcat + function [n] = numel(oStack, varargin) + n = prod(size(oStack)); %#ok + end + + % size - METHOD Overloaded size function + function [varargout] = size(oStack, vnDimensions) + % - Get original tensor size, and extend dimensions if necessary + vnApparentSize = oStack.vnApparentSize; %#ok + vnApparentSize(end+1:numel(oStack.vnDimensionOrder)) = 1; %#ok + + % - Return the size of the tensor data element, permuted + vnSize = vnApparentSize(oStack.vnDimensionOrder); %#ok + + % - Trim trailing unitary dimensions + vbIsUnitary = vnSize == 1; + if (vbIsUnitary(end)) + nLastNonUnitary = find(~vbIsUnitary, 1, 'last'); + if (nLastNonUnitary < numel(vnSize)) + vnSize = vnSize(1:nLastNonUnitary); + end + end + + % - Return specific dimension(s) + if (exist('vnDimensions', 'var')) + if (~isnumeric(vnDimensions) || any(vnDimensions < 1)) + error('TIFFStack:DimensionMustBePositiveInteger', ... + '*** TIFFStack: Dimensions argument must be a positive integer.'); + end + + vbExtraDimensions = vnDimensions > numel(vnSize); + + % - Return the specified dimension(s) + vnSizeOut(~vbExtraDimensions) = vnSize(vnDimensions(~vbExtraDimensions)); + vnSizeOut(vbExtraDimensions) = 1; + else + vnSizeOut = vnSize; + end + + % - Handle differing number of size dimensions and number of output + % arguments + nNumArgout = max(1, nargout); + + if (nNumArgout == 1) + % - Single return argument -- return entire size vector + varargout{1} = vnSizeOut; + + elseif (nNumArgout <= numel(vnSizeOut)) + % - Several return arguments -- return single size vector elements, + % with the remaining elements grouped in the last value + varargout(1:nNumArgout-1) = num2cell(vnSizeOut(1:nNumArgout-1)); + varargout{nNumArgout} = prod(vnSizeOut(nNumArgout:end)); + + else %(nNumArgout > numel(vnSize)) + % - Output all size elements + varargout(1:numel(vnSizeOut)) = num2cell(vnSizeOut); + + % - Deal out trailing dimensions as '1' + varargout(numel(vnSizeOut)+1:nNumArgout) = {1}; + end + end + + % ndims - METHOD Overloaded ndims function + function [nNumDims] = ndims(oStack) + nNumDims = numel(size(oStack)); + end + + % permute - METHOD Overloaded permute function + function [oStack] = permute(oStack, vnNewOrder) + oStack.vnDimensionOrder(1:numel(vnNewOrder)) = oStack.vnDimensionOrder(vnNewOrder); + end + + % ipermute - METHOD Overloaded ipermute function + function [oStack] = ipermute(oStack, vnOldOrder) + vnNewOrder(vnOldOrder) = 1:numel(vnOldOrder); + oStack = permute(oStack, vnNewOrder); + end + + % ctranspose - METHOD Overloaded ctranspose function + function [oStack] = cstranspose(oStack) + oStack = transpose(oStack); + end + + % transpose - METHOD Overloaded transpose function + function [oStack] = transpose(oStack) + oStack = permute(oStack, [2 1]); + end + + % cat - METHOD Overloaded cat, horzcat, vertcat functions + function [varargout] = cat(varargin) %#ok + error('TIFFStack:Concatenation', ... + '*** TIFFStack: Concatenation is not supported by TIFFStack.'); + end + + function [varargout] = horzcat(varargin) %#ok + error('TIFFStack:Concatenation', ... + '*** TIFFStack: Concatenation is not supported by TIFFStack.'); + end + + function [varargout] = vertcat(varargin) %#ok + error('TIFFStack:Concatenation', ... + '*** TIFFStack: Concatenation is not supported by TIFFStack.'); + end + +%% --- Overloaded end + + function nLength = end(oStack, nEndDim, nTotalRefDims) + vnSizes = size(oStack); + if (nEndDim < nTotalRefDims) + nLength = vnSizes(nEndDim); + else + nLength = prod(vnSizes(nEndDim:end)); + end + end + +%% --- Overloaded sum, nansum, mean, nanmean + + % sum - METHOD Overloaded sum function + function [tfResult, tnNumNonNaNs] = sum(oStack, nDim, flag, bIgnoreNaNs) + % - If this function is called, it must be a sum over the entire stack + if nargin==2 && ischar(nDim) + flag = nDim; + elseif nargin < 3 + flag = 'default'; + end + + if nargin == 1 || (nargin == 2 && ischar(nDim)) + nDim = find(size(oStack)~=1,1); + if isempty(nDim), nDim = 1; end + end + + if (~exist('bIgnoreNaNs', 'var')) + bIgnoreNaNs = true; + end + + % - Set up referencing + sSubs.type = '()'; + sSubs.subs = repmat({':'}, 1, ndims(oStack)); + + % - Loop to perform sum in double precision + for (nIndex = 1:size(oStack, nDim)) + sSubs.subs{nDim} = nIndex; + tfSlice = double(subsref(oStack, sSubs)); + + % - Ignore NaNs, if requested + if (bIgnoreNaNs) + if (~exist('tnNumNonNaNs', 'var')) + tnNumNonNaNs = zeros(size(tfSlice)); + end + + tnNumNonNaNs(~isnan(tfSlice)) = tnNumNonNaNs(~isnan(tfSlice)) + 1; + + % - Set NaNs to zero + tfSlice(isnan(tfSlice)) = 0; + end + + % - Perform sum + if (~exist('tfResult', 'var')) + tfResult = tfSlice; + else + tfResult = tfResult + tfSlice; + end + end + + % - Cast result to native class, if necessary + if (strcmp(flag, 'native')) + tfResult = oStack.fhCastFun(tfResult); + end + end + + % nansum - METHOD Overloaded nansum function + function tfResult = nansum(oStack, nDim) + if nargin == 1 + nDim = find(size(oStack)~=1,1); + if isempty(nDim), nDim = 1; end + end + + % - Call "sum" with "bIgnoreNaNs" set to true + tfResult = sum(oStack, nDim, 'default', true); + end + + % mean - METHOD Overloaded mean function + function y = mean(x,dim,flag, bIgnoreNaNs) + + if (~exist('bIgnoreNaNs', 'var')) + bIgnoreNaNs = true; + end + + if nargin==2 && ischar(dim) + flag = dim; + elseif nargin < 3 + flag = 'default'; + end + + if nargin == 1 || (nargin == 2 && ischar(dim)) + dim = find(size(x)~=1,1); + if isempty(dim), dim = 1; end + end + + % - Compute sum in double + [y, tnNumNonNaNs] = sum(x, dim, 'double', bIgnoreNaNs); + y = y ./ tnNumNonNaNs; + + % - Re-cast result, if necessary + if (strcmp(flag, 'native')) + y = x.fhCastFun(y); + end + end + + % nanmean - METHOD Overloaded nanmean + function y = nanmean(x,dim) + if nargin == 1 + dim = find(size(x)~=1,1); + if isempty(dim), dim = 1; end + end + + % - Call mean + y = mean(x,dim,'default', true); + end + +%% --- Overloaded sort, prctile + + % sort - METHOD Overloaded sort function + function tfSorted = sort(oStack, varargin) + % - Warn about loss of function + warning('TIFFStack:LostTIFFStack', '--- TIFFStack/sort: Warning: Data returned by ''sort'' is no longer a ''TIFFStack'' object.'); + + % - Set up referencing + sSubs.type = '()'; + sSubs.subs = repmat({':'}, 1, ndims(oStack)); + + % - Just load stack and pass parameters to sort + tfSorted = sort(subsref(oStack, sSubs), varargin{:}); + end + + % prctile - METHOD Overloaded prctile function + function tfPrctile = prctile(oStack, varargin) + % - Warn about loss of function + warning('TIFFStack:LostTIFFStack', '--- TIFFStack/prctile: Warning: Data returned by ''prctile'' is no longer a ''TIFFStack'' object.'); + + % - Set up referencing + sSubs.type = '()'; + sSubs.subs = repmat({':'}, 1, ndims(oStack)); + + % - Just load stack and pass parameters to sort + tfPrctile = prctile(subsref(oStack, sSubs), varargin{:}); + end + +%% --- Overloaded cast methods + + % cast - METHOD Overloaded cast function + function tfStack = cast(oStack, strClass, oTemplate) + if (nargin == 3) && (strcmp(strClass, 'like')) + strClass = class(oTemplate); + end + + % - Construct a casting function + fhCastFun = str2func(strClass); %#ok + + % - Set up referencing + sSubs.type = '()'; + sSubs.subs = repmat({':'}, 1, ndims(oStack)); + + % - Load the entire stack + tfStack = subsref(oStack, sSubs); + + % - Cast the result + tfStack = fhCastFun(tfStack); %#ok + end + + function tfStack = double(oStack) + tfStack = cast(oStack, 'double'); + end + + function tfStack = single(oStack) + tfStack = cast(oStack, 'single'); + end + + function tfStack = int8(oStack) + tfStack = cast(oStack, 'int8'); + end + + function tfStack = int16(oStack) + tfStack = cast(oStack, 'int16'); + end + + function tfStack = int32(oStack) + tfStack = cast(oStack, 'int16'); + end + + function tfStack = int64(oStack) + tfStack = cast(oStack, 'int16'); + end + + function tfStack = uint8(oStack) + tfStack = cast(oStack, 'int8'); + end + + function tfStack = uint16(oStack) + tfStack = cast(oStack, 'int16'); + end + + function tfStack = uint32(oStack) + tfStack = cast(oStack, 'int16'); + end + + function tfStack = uint64(oStack) + tfStack = cast(oStack, 'int16'); + end + +%% --- Overloaded test methods + + function bIsNumeric = isnumeric(~) + bIsNumeric = true; + end + + function bIsFloat = isfloat(oStack) + switch (oStack.strDataClass) + case {'single', 'double'} + bIsFloat = true; + + otherwise + bIsFloat = false; + end + end + + function bIsInteger = isinteger(oStack) + switch (oStack.strDataClass) + case {'int8', 'int16', 'int32', 'int64', 'uint8', 'uint16', 'uint32', 'uint64'} + bIsInteger = true; + + otherwise + bIsInteger = false; + end + end + +%% --- Property accessors + + % set.bInvert - SETTER method for 'bInvert' + function set.bInvert(oStack, bInvert) + % - Check contents + if (~islogical(bInvert) || ~isscalar(bInvert)) + error('TIFFStack:InvalidArgument', ... + '*** TIFFStack/set.bInvert: ''bInvert'' must be a logical scalar.'); + else + % - Assign bInvert value + oStack.bInvert = bInvert; + end + end + +%% --- Overloaded save method + % saveobj - Save method + function sSerialised = saveobj(tsStack) + % - Serialise object and remove transient properties + w = warning('off', 'MATLAB:structOnObject'); + sSerialised = struct(tsStack); + sSerialised = rmfield(sSerialised, {'TIF', 'HEADER', 'fhReadFun', 'fhSetDirFun', 'fhRepSum', 'fhCastFun'}); + warning(w); + end + + end + +%% -- Overloaded load method + + methods (Static) + + % loadobj - Load method + function oStack = loadobj(sSavedVar) + % - Create a new TIFFStack + oStack = TIFFStack(sSavedVar.strFilename, sSavedVar.bInvert, [], ... + sSavedVar.bForceTiffread); + + % - Adjust dimensions to look like saved stack + oStack.vnApparentSize = sSavedVar.vnApparentSize; + oStack.vnDimensionOrder = sSavedVar.vnDimensionOrder; + end + end +end + +%% --- Helper functions --- + +% TS_read_data_tiffread - FUNCTION Read the requested pixels from the TIFF file (using tiffread31) +% +% Usage: [tfData] = TS_read_data_imread(oStack, cIndices) +% +% 'oStack' is a TIFFStack. 'cIndices' are the indices passed in from subsref. +% Colon indexing will be converted to full range indexing. cIndices is a cell +% array with the format {rows, cols, frames, slices}. Slices are RGB or CMYK +% or so on. + +function [tfData] = TS_read_data_tiffread(oStack, cIndices, bLinearIndexing) + % - Fix up final index dimensions, if necessary + cIndices(end+1:4) = {1}; + + % - Convert colon indexing + vbIsColon = cellfun(@iscolon, cIndices); + + for (nColonDim = find(vbIsColon)) + cIndices{nColonDim} = 1:oStack.vnDataSize(nColonDim); + end + + % - Fix up subsample detection for unitary dimensions + vbIsOne = cellfun(@(c)isequal(c, 1), cIndices); + vbIsColon(~vbIsColon) = vbIsOne(~vbIsColon) & (oStack.vnDataSize(~vbIsColon) == 1); + + % - Check ranges + vnMinRange = cellfun(@(c)(min(c(:))), cIndices(~vbIsColon)); + vnMaxRange = cellfun(@(c)(max(c(:))), cIndices(~vbIsColon)); + + if (any(vnMinRange < 1) || any(vnMaxRange > oStack.vnDataSize(~vbIsColon))) + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Index exceeds stack dimensions.'); + end + + % - Find unique frames to read + [vnFrameIndices, ~, vnOrigFrameIndices] = unique(cIndices{3}); + + % - Read data block + try + tfDataBlock = tiffread31_readimage(oStack.TIF, oStack.HEADER, vnFrameIndices); + + catch mErr + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not read data from image file.'); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + + % - Handle linear or subscript indexing + if (~bLinearIndexing) + % - Select pixels from frames, if necessary + if any(~vbIsColon([1 2 4])) + tfData = tfDataBlock(cIndices{1}, cIndices{2}, vnOrigFrameIndices, cIndices{4}); + else + tfData = tfDataBlock; + end + + else + % - Convert frame indices to frame-linear + vnFrameLinearIndices = sub2ind(oStack.vnDataSize([1 2 4]), cIndices{1}, cIndices{2}, cIndices{4}); + + % - Allocate return vector + tfData = zeros(numel(cIndices{1}), 1, oStack.strDataClass); + + % - Loop over images in stack and extract required frames + for (nFrameIndex = 1:numel(vnFrameIndices)) + vbThesePixels = cIndices{3} == vnFrameIndices(nFrameIndex); + mfThisFrame = tfDataBlock(:, :, nFrameIndex, :); + tfData(vbThesePixels) = mfThisFrame(vnFrameLinearIndices(vbThesePixels)); + end + end + + % - Invert data if requested + if (oStack.bInvert) + tfData = oStack.fhCastFun(oStack.sImageInfo(1).MaxSampleValue) - (tfData - oStack.fhCastFun(oStack.sImageInfo(1).MinSampleValue)); + end +end + + +% TS_read_data_Tiff - FUNCTION Read the requested pixels from the TIFF file (using tifflib) +% +% Usage: [tfData] = TS_read_data_Tiff(oStack, cIndices) +% +% 'oStack' is a TIFFStack. 'cIndices' are the indices passed in from subsref. +% Colon indexing will be converted to full range indexing. cIndices is a cell +% array with the format {rows, cols, frames, slices}. Slices are RGB or CMYK +% or so on. + +function [tfData] = TS_read_data_Tiff(oStack, cIndices, bLinearIndexing) + % - Convert colon indexing + vbIsColon = cellfun(@iscolon, cIndices); + + for (nColonDim = find(vbIsColon)) + cIndices{nColonDim} = 1:oStack.vnDataSize(nColonDim); + end + + % - Fix up subsample detection for unitary dimensions + vbIsOne = cellfun(@(c)isequal(c, 1), cIndices(~vbIsColon)); + vbIsColon(~vbIsColon) = vbIsOne & (oStack.vnDataSize(~vbIsColon) == 1); + + % - Check ranges + vnMinRange = cellfun(@(c)(min(c(:))), cIndices(~vbIsColon)); + vnMaxRange = cellfun(@(c)(max(c(:))), cIndices(~vbIsColon)); + + if (any(vnMinRange < 1) || any(vnMaxRange > oStack.vnDataSize(~vbIsColon))) + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Index exceeds stack dimensions.'); + end + + % - Get referencing parameters for TIF object + w = oStack.vnDataSize(2); + h = oStack.vnDataSize(1); + vfrps = cellfun(@(rps)nanemptymin(rps, h), {oStack.sImageInfo(cIndices{3}).RowsPerStrip}); + vftw = cellfun(@(tw)nanemptymin(tw, w), {oStack.sImageInfo(cIndices{3}).TileWidth}); + vfth = cellfun(@(tw)nanemptymin(tw, h), {oStack.sImageInfo(cIndices{3}).TileLength}); + spp = oStack.sImageInfo(1).SamplesPerPixel; + + tlStack = oStack.TIF; + + % - Handle linear or subscript indexing + if (~bLinearIndexing) + % - Allocate single frame buffer + vnBlockSize = oStack.vnDataSize(1:2); + vnBlockSize(3) = numel(cIndices{3}); + vnBlockSize(4) = oStack.vnDataSize(4); + tfImage = zeros([vnBlockSize(1:2) 1 vnBlockSize(4)], oStack.strDataClass); + + % - Allocate tensor for returning data + vnOutputSize = cellfun(@(c)numel(c), cIndices); + tfData = zeros(vnOutputSize, oStack.strDataClass); + + % - Do we need to resample the data block? + vbTest = [true true false true]; + bResample = any(vbTest(~vbIsColon)); + + try + % - Loop over images in stack + for (nImage = 1:numel(cIndices{3})) + % - Skip to this image in stack + oStack.fhSetDirFun(tlStack, cIndices{3}(nImage)); + + % - Read data from this image, overwriting frame buffer + [~, tfImage] = oStack.fhReadFun(tfImage, tlStack, spp, w, h, vfrps(nImage), vftw(nImage), vfth(nImage), []); + + % - Resample frame, if required + if (bResample) + tfData(:, :, nImage, :) = tfImage(cIndices{1}, cIndices{2}, cIndices{4}); + else + tfData(:, :, nImage, :) = tfImage; + end + end + + catch mErr + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not read data from image file.'); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + + else + % -- Linear indexing + + % - Allocate return vector + tfData = zeros(size(cIndices{1}), oStack.strDataClass); + + % - Allocate single-frame buffer + vnBlockSize = oStack.vnDataSize(1:2); + vnBlockSize(3) = numel(cIndices{3}); + vnBlockSize(4) = oStack.vnDataSize(4); + tfImage = zeros([vnBlockSize(1:2) 1 vnBlockSize(4)], oStack.strDataClass); + + % - Convert frame indices to frame-linear + vnFrameLinearIndices = sub2ind(vnBlockSize([1 2 4]), cIndices{1}, cIndices{2}, cIndices{4}); + + % - Loop over images in stack and extract required frames + try + vnUniqueImages = unique(cIndices{3}(:))'; + for (nImage = 1:numel(vnUniqueImages)) + % - Find corresponding pixels + vbThesePixels = cIndices{3} == vnUniqueImages(nImage); + + % - Skip to this image in stack + oStack.fhSetDirFun(tlStack, vnUniqueImages(nImage)); + + % - Read the subsampled pixels from the stack + [tfData(vbThesePixels), tfImage] = oStack.fhReadFun(tfImage, tlStack, spp, w, h, vfrps(nImage), vftw(nImage), vfth(nImage), vnFrameLinearIndices(vbThesePixels)); + end + + catch mErr + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not read data from image file.'); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + end + + % - Invert data if requested + if (oStack.bInvert) + tfData = oStack.sImageInfo(1).MaxSampleValue(1) - (tfData - oStack.sImageInfo(1).MinSampleValue(1)); + end +end + + +% TS_read_data_MappedTensor - FUNCTION Read the requested pixels from an ImageJ fake binary TIFF file (using MappedTensor) +% +% Usage: [tfData] = TS_read_data_MappedTensor(oStack, cIndices) +% +% 'oStack' is a TIFFStack. 'cIndices' are the indices passed in from subsref. +% Colon indexing will be converted to full range indexing. cIndices is a cell +% array with the format {rows, cols, frames, slices}. Slices are RGB or CMYK +% or so on. + +function [tfData] = TS_read_data_MappedTensor(oStack, cIndices, bLinearIndexing) + + % - Fix up subsample detection for unitary dimensions + vbIsColon = cellfun(@iscolon, cIndices); + vbIsOne = cellfun(@(c)isequal(c, 1), cIndices(~vbIsColon)); + vbIsColon(~vbIsColon) = vbIsOne & (oStack.vnDataSize(~vbIsColon) == 1); + + % - Check ranges + vnMinRange = cellfun(@(c)(min(c(:))), cIndices(~vbIsColon)); + vnMaxRange = cellfun(@(c)(max(c(:))), cIndices(~vbIsColon)); + + if (any(vnMinRange < 1) || any(vnMaxRange > oStack.vnDataSize(~vbIsColon))) + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Index exceeds stack dimensions.'); + end + + % - Handle linear or subscript indexing + if (~bLinearIndexing) + + try + % - Just read using MappedTensor + tfData = oStack.TIF(cIndices{1:end}); + + catch mErr + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not read data from image file.'); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + + else + % -- Linear indexing + + % - Convert frame indices back to stack-linear + vnStackLinearIndices = sub2ind(oStack.vnDataSize, cIndices{:}); + + % - Loop over images in stack and extract required frames + try + % - Just read using MappedTensor + tfData = oStack.TIF(vnStackLinearIndices); + + catch mErr + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not read data from image file.'); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end + end + + % - Invert data if requested + if (oStack.bInvert) + tfData = oStack.sImageInfo(1).MaxSampleValue(1) - (tfData - oStack.sImageInfo(1).MinSampleValue(1)); + end +end + + +% GetLinearIndicesForRefs - FUNCTION Convert a set of multi-dimensional indices directly into linear indices +function [vnLinearIndices, vnDimRefSizes] = GetLinearIndicesForRefs(cRefs, vnLims, hRepSumFunc) + + % - Find colon references + vbIsColon = cellfun(@iscolon, cRefs); + + if (all(vbIsColon)) + vnLinearIndices = 1:prod(vnLims); + vnDimRefSizes = vnLims; + return; + end + + nFirstNonColon = find(~vbIsColon, 1, 'first'); + vbTrailingRefs = true(size(vbIsColon)); + vbTrailingRefs(1:nFirstNonColon-1) = false; + vnDimRefSizes = cellfun(@numel, cRefs); + vnDimRefSizes(vbIsColon) = vnLims(vbIsColon); + + % - Calculate dimension offsets + vnDimOffsets = [1 cumprod(vnLims)]; + vnDimOffsets = vnDimOffsets(1:end-1); + + % - Remove trailing "1"s + vbOnes = cellfun(@(c)isequal(c, 1), cRefs); + nLastNonOne = find(~vbOnes, 1, 'last'); + vbTrailingRefs((nLastNonOne+1):end) = false; + + % - Check reference limits + if (any(cellfun(@(r,l)any(r>l), cRefs(~vbIsColon), num2cell(vnLims(~vbIsColon))))) + error('TIFFStack:badsubscript', 'Index exceeds matrix dimensions.'); + end + + % - Work out how many linear indices there will be in total + nNumIndices = prod(vnDimRefSizes); + vnLinearIndices = zeros(nNumIndices, 1); + + % - Build a referencing window encompassing the leading colon refs (or first ref) + if (nFirstNonColon > 1) + vnLinearIndices(1:prod(vnLims(1:(nFirstNonColon-1)))) = 1:prod(vnLims(1:(nFirstNonColon-1))); + else + vnLinearIndices(1:vnDimRefSizes(1)) = cRefs{1}; + vbTrailingRefs(1) = false; + end + + % - Replicate windows to make up linear indices + for (nDimension = find(vbTrailingRefs & ~vbOnes)) + % - How long is the current window? + nCurrWindowLength = prod(vnDimRefSizes(1:(nDimension-1))); + nThisWindowLength = nCurrWindowLength * vnDimRefSizes(nDimension); + + % - Is this dimension a colon reference? + if (vbIsColon(nDimension)) + vnLinearIndices(1:nThisWindowLength) = hRepSumFunc(vnLinearIndices(1:nCurrWindowLength), ((1:vnLims(nDimension))-1) * vnDimOffsets(nDimension)); + + else + vnLinearIndices(1:nThisWindowLength) = hRepSumFunc(vnLinearIndices(1:nCurrWindowLength), (cRefs{nDimension}-1) * vnDimOffsets(nDimension)); + end + end +end + +% mapped_tensor_repsum_nomex - FUNCTION Slow version of replicate and sum +function [vfDest] = mapped_tensor_repsum_nomex(vfSourceA, vfSourceB) + [mfA, mfB] = meshgrid(vfSourceB, vfSourceA); + vfDest = mfA(:) + mfB(:); +end + +% isvalidsubscript - FUNCTION Test whether a vector contains valid entries +% for subscript referencing +function isvalidsubscript(oRefs) + try + % - Test for colon + if (iscolon(oRefs)) + return; + end + + if (islogical(oRefs)) + % - Test for logical indexing + validateattributes(oRefs, {'logical'}, {'binary'}); + + else + % - Test for normal indexing + validateattributes(oRefs, {'single', 'double'}, {'integer', 'real', 'positive'}); + end + + catch + error('TIFFStack:badsubscript', ... + '*** TIFFStack: Subscript indices must either be real positive integers or logicals.'); + end +end + +%% get_full_file_path - FUNCTION Calculate the absolute path to a given (possibly relative) filename +% +% Usage: strFullPath = get_full_file_path(strFile) +% +% 'strFile' is a filename, which may include relative path elements. The file +% does not have to exist. +% +% 'strFullPath' will be the absolute path to the file indicated in 'strFile'. + +function strFullPath = get_full_file_path(strFile) + + try + fid = fopen(strFile); + strFile = fopen(fid); + fclose(fid); + + [strDir, strName, strExt] = fileparts(strFile); + + if (isempty(strDir)) + strDir = '.'; + strFullDirPath = cd(cd(strDir)); + strFullPath = fullfile(strFullDirPath, [strName strExt]); + else + strFullPath = strFile; + end + + catch mErr + % - Close file id, if necessary + if (ismember(fid, fopen('all'))) + fclose(fid); + end + + % - Record error state + base_ME = MException('TIFFStack:ReadError', ... + '*** TIFFStack: Could not open file [%s].', strFile); + new_ME = addCause(base_ME, mErr); + throw(new_ME); + end +end + +% iscolon - FUNCTION Test whether a reference is equal to ':' +function bIsColon = iscolon(ref) + bIsColon = ischar(ref) && isequal(ref, ':'); +end + +% nanemptymin - FUNCTION Test for a min or nan or empty +function fVal = nanemptymin(fVal, fTestVal) + fVal(isempty(fVal)) = fTestVal; + fVal(isnan(fVal)) = fTestVal; +end + +%% Accelerated Libtiff reading functions + +% TS_read_Tiff_striped_separate - FUNCTION Read an image using tifflib, for +% striped separate TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_striped_separate(tfImageBuffer, tlStack, spp, ~, h, rps, ~, ~, vnFrameLinearIndices) %#ok + for r = 1:rps:h + row_inds = r:min(h,r+rps-1); + for k = 1:spp + stripNum = tifflib('computeStrip', tlStack, r-1, k-1); + tfImageBuffer(row_inds,:,k) = tifflib('readEncodedStrip', tlStack, stripNum-1); + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_striped_chunky - FUNCTION Read an image using tifflib, for +% striped chunk TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_striped_chunky(tfImageBuffer, tlStack, ~, ~, h, rps, ~, ~, vnFrameLinearIndices) %#ok + for r = 1:rps:h + row_inds = r:min(h,r+rps-1); + stripNum = tifflib('computeStrip', tlStack, r-1); + tfImageBuffer(row_inds,:,:) = tifflib('readEncodedStrip', tlStack, stripNum-1); + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_tiled_separate - FUNCTION Read an image using tifflib, for +% tiled separate TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_tiled_separate(tfImageBuffer, tlStack, spp, w, h, ~, tWidth, tHeight, vnFrameLinearIndices) %#ok + for r = 1:tHeight:h + row_inds = r:min(h,r+tHeight-1); + for c = 1:tWidth:w + col_inds = c:min(w,c+tWidth-1); + for k = 1:spp + tileNumber = tifflib('computeTile', tlStack, [r c]-1, k); + tfImageBuffer(row_inds,col_inds,k) = tifflib('readEncodedTile', tlStack, tileNumber-1); + end + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_tiled_chunky - FUNCTION Read an image using tifflib, for +% tiled chunky TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_tiled_chunky(tfImageBuffer, tlStack, ~, w, h, ~, tWidth, tHeight, vnFrameLinearIndices) %#ok + for r = 1:tHeight:h + row_inds = r:min(h,r+tHeight-1); + for c = 1:tWidth:w + col_inds = c:min(w,c+tWidth-1); + tileNumber = tifflib('computeTile', tlStack, [r c]-1); + tfImageBuffer(row_inds,col_inds,:) = tifflib('readEncodedTile', tlStack, tileNumber-1); + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_set_direcotry - FUNCTION Set the current TIFF directory +function TS_set_directory(tlStack, nDirectory) %#ok + tifflib('setDirectory', tlStack, nDirectory-1); +end + +%% Pre-2014 matlab Tifflib reading functions + +% TS_read_Tiff_striped_separate - FUNCTION Read an image using tifflib, for +% striped separate TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_striped_separate_pre2014(tfImageBuffer, tlStack, spp, ~, h, rps, ~, ~, vnFrameLinearIndices) %#ok + for r = 1:rps:h + row_inds = r:min(h,r+rps-1); + for k = 1:spp + stripNum = tifflib('computeStrip', tlStack, r, k); + tfImageBuffer(row_inds,:,k) = tifflib('readEncodedStrip', tlStack, stripNum); + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_striped_chunky - FUNCTION Read an image using tifflib, for +% striped chunk TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_striped_chunky_pre2014(tfImageBuffer, tlStack, ~, ~, h, rps, ~, ~, vnFrameLinearIndices) %#ok + for r = 1:rps:h + row_inds = r:min(h,r+rps-1); + stripNum = tifflib('computeStrip', tlStack, r); + tfImageBuffer(row_inds,:,:) = tifflib('readEncodedStrip', tlStack, stripNum); + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_tiled_separate - FUNCTION Read an image using tifflib, for +% tiled separate TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_tiled_separate_pre2014(tfImageBuffer, tlStack, spp, w, h, ~, tWidth, tHeight, vnFrameLinearIndices) %#ok + for r = 1:tHeight:h + row_inds = r:min(h,r+tHeight-1); + for c = 1:tWidth:w + col_inds = c:min(w,c+tWidth-1); + for k = 1:spp + tileNumber = tifflib('computeTile', tlStack, [r c], k); + tfImageBuffer(row_inds,col_inds,k) = tifflib('readEncodedTile', tlStack, tileNumber); + end + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_read_Tiff_tiled_chunky - FUNCTION Read an image using tifflib, for +% tiled chunky TIFF files +function [vfOutputPixels, tfImageBuffer] = TS_read_Tiff_tiled_chunky_pre2014(tfImageBuffer, tlStack, ~, w, h, ~, tWidth, tHeight, vnFrameLinearIndices) %#ok + for r = 1:tHeight:h + row_inds = r:min(h,r+tHeight-1); + for c = 1:tWidth:w + col_inds = c:min(w,c+tWidth-1); + tileNumber = tifflib('computeTile', tlStack, [r c]); + tfImageBuffer(row_inds,col_inds,:) = tifflib('readEncodedTile', tlStack, tileNumber); + end + end + + % - Perform sub-referencing, if required + if (~isempty(vnFrameLinearIndices)) + vfOutputPixels = tfImageBuffer(vnFrameLinearIndices); + else + vfOutputPixels = tfImageBuffer; + end +end + +% TS_set_direcotry - FUNCTION Set the current TIFF directory +function TS_set_directory_pre2014(tlStack, nDirectory) %#ok + tifflib('setDirectory', tlStack, nDirectory); +end + + +%% Accelerated TiffgetTag function + +function tagValue = TiffgetTag(oTiff,tagId) +% getTag Retrieve tag from image. +% tagValue = getTag(tagId) retrieves the value of the tag tagId +% from the current directory. tagId may be specified either via +% the Tiff.TagID property or as a char string. +% +% This method corresponds to the TIFFGetField function in the +% LibTIFF C API. To use this method, you must be familiar with +% LibTIFF version 3.7.1 as well as the TIFF specification and +% technical notes. This documentation may be referenced at +% . +% +% Example: +% +% t = Tiff('example.tif','r'); +% % Specify tag by tag number. +% width = t.getTag(Tiff.TagID.ImageWidth); +% +% % Specify tag by tag name. +% width = t.getTag('ImageWidth'); +% +% See also setTag +% +% + + switch(class(tagId)) + case 'char' + % The user gave a char id for the tag. + tagValue = tifflib('getField',oTiff,Tiff.TagID.(tagId)); + + otherwise + % Assume numeric. + tagValue = tifflib('getField',oTiff,tagId); + end +end + + +%% -- MEX-handling functions + +function [hRepSumFunc] = GetMexFunctionHandles + % - Try to use cache for function handle + persistent GMFH_hRepSumFunc; + + if ~isempty(GMFH_hRepSumFunc) + hRepSumFunc = GMFH_hRepSumFunc; + return; + end + + % - Does the compiled MEX function exist? + if (exist('mapped_tensor_repsum') ~= 3) %#ok + % - Move to the MappedTensor private directory + strMTDir = fileparts(which('TIFFStack')); + strCWD = cd(fullfile(strMTDir, 'private')); + + try %#ok + % - Try to compile the MEX functions + disp('--- TIFFStack: Compiling MEX functions.'); + mex('mapped_tensor_repsum.c', '-largeArrayDims', '-O'); + end + + % - Move back to previous working directory + cd(strCWD); + end + + % - Did we succeed? + if (exist('mapped_tensor_repsum') == 3) %#ok + hRepSumFunc = @mapped_tensor_repsum; + + else + % - Just use the slow matlab version + warning('TIFFStack:MEXCompilation', ... + '--- TIFFStack: Could not compile MEX functions. Using slow matlab versions.'); + + hRepSumFunc = @mapped_tensor_repsum_nomex; + end + + % - Record function handle in the cache + GMFH_hRepSumFunc = hRepSumFunc; +end + +%% -- ImageJ helper functions + +function [bIsImageJBigStack, bIsImageJHyperStack, vnStackDims, vnInterleavedFrameDims] = IsImageJBigStack(sInfo, nApparentSize) + + % - Set up default return arguments + bIsImageJBigStack = false; + bIsImageJHyperStack = false; + vnStackDims = []; + vnInterleavedFrameDims = []; + + % - Check for ImageDescription field + if (~isfield(sInfo, 'ImageDescription')) + return; + end + + % - Get image description + strImageDesc = sInfo(1).ImageDescription; + + % - Look for ImageJ version information + strImageJVer = sscanf(strImageDesc(strfind(strImageDesc, 'ImageJ='):end), 'ImageJ=%s'); + + % - Look for stack size information + if (~isempty(strImageJVer)) + nNumImages = sscanf(strImageDesc(strfind(strImageDesc, 'images='):end), 'images=%d'); + + % - Does ImageJ report a greater number of images than sInfo? + if (~isempty(nNumImages) && (nApparentSize ~= nNumImages)) + bIsImageJBigStack = true; + end + + % - Is this a hyperstack? + strHyperStack = sscanf(strImageDesc(strfind(strImageDesc, 'hyperstack='):end), 'hyperstack=%s'); + + if (strcmpi(strHyperStack, 'true')) + bIsImageJHyperStack = true; + + % - Extract information about the stack size for a hyperstack + nNumChannels = sscanf(strImageDesc(strfind(strImageDesc, 'channels='):end), 'channels=%d'); + nNumSlices = sscanf(strImageDesc(strfind(strImageDesc, 'slices='):end), 'slices=%d'); + nNumFrames = sscanf(strImageDesc(strfind(strImageDesc, 'frames='):end), 'frames=%d'); + + if (isempty(nNumChannels)) + nNumChannels = 1; + end + + if (isempty(nNumSlices)) + nNumSlices = 1; + end + + if (isempty(nNumFrames)) + nNumFrames = 1; + end + + % - Check total stack size + if (nNumFrames*nNumSlices*nNumChannels ~= nApparentSize) + warning('TIFFStack:ImageJStackSize', ... + 'The reported size of this stack does not match the number of IFDs.\nI will attempt to continue.'); + + nNumFrames = floor(nApparentSize / nNumSlices / nNumChannels); + end + + % - Deinterleave stack + vnStackDims = [sInfo(1).Width sInfo(1).Height nNumFrames*nNumSlices*nNumChannels 1]; + vnInterleavedFrameDims = [nNumChannels nNumSlices nNumFrames]; + + else + % - Extract information about the stack size for a fake big stack + vnStackDims = [sInfo(1).Width sInfo(1).Height nNumImages sInfo(1).SamplesPerPixel]; + vnInterleavedFrameDims = []; + end + end +end + +function [mtHandle, bUseMappedTensor, strDataClass] = OpenImageJBigStack(oStack, vnStackDims) + bUseMappedTensor = (exist('MappedTensor', 'class') == 8); + mtHandle = []; + strDataClass = []; + + if (bUseMappedTensor) + % - Use tiffread to get file information + [TIF, HEADER] = tiffread31_header(oStack.strFilename); + + % - Use MappedTensor to open the file + strDataClass = TIF.classname; + mtHandle = MappedTensor(oStack.strFilename, vnStackDims, ... + 'MachineFormat', TIF.ByteOrder, 'Class', strDataClass, 'HeaderBytes', HEADER.StripOffsets); + end +end + +% --- END of TIFFStack.m --- + diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTest.m b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTest.m new file mode 100644 index 0000000..9fe25a8 --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTest.m @@ -0,0 +1,386 @@ +% TS_UnitTest - FUNCITON Unit test for TIFFStack +% +% Usage: TS_UnitTest +% +% This function performs a series of unit tests for referencing a TIFFStack +% object, in comparison with a matlab tensor. If all tests are passed, a +% simple message reporting success will be displayed. Any error indicates a +% failure in a unit test, which will be reported in detail. Any error +% should be considered a serious bug. + +% Author: Dylan Muir +% Created: 17th Novemeber, 2015 + +function TS_UnitTest(strFilename) + % - Make sure TIFFStack is on the path + strTSDir = fileparts(which('TIFFStack')); + + if (isempty(strTSDir)) + error('TIFFStack:Path', '*** Error: ''TIFFStack'' is not available on the matlab path.'); + end + + strBaseDir = fileparts(strTSDir); + addpath(strBaseDir); + + % - If we are being called from within 'private', then make a temp copy and run unit tests from there + if (isequal(mfilename, 'TS_UnitTest')) + % - Get a temporary directory and name + strUTTestDir = fullfile(tempdir, tempname); + mkdir(strUTTestDir); + [~, strUTFilename] = fileparts(tempname); + + % - Copy the unit test file to the temporary directory + copyfile(fullfile(strTSDir, 'private', 'TS_UnitTest.m'), fullfile(strUTTestDir, [strUTFilename '.m'])); + addpath(strUTTestDir); + + % - Call the unit test function + fhUnitTest = str2func(strUTFilename); + fhUnitTest(); + + % - Clear up and return + delete(fullfile(strUTTestDir, [strUTFilename '.m'])); + w = warning('off', 'MATLAB:RMDIR:RemovedFromPath'); + rmdir(strUTTestDir); + warning(w); + return; + end + + % - Open a test TIFF file + if (exist('strFilename', 'var') && ~isempty(strFilename)) + % - Run on user-supplied file + TSUT_RunTestsOnFile(strFilename); + + else + % - Find unit test file + strFilename = fullfile(strTSDir, 'private', 'TS_UnitTestImage.tif'); + TSUT_RunTestsOnFile(strFilename); + + % - Find unit test bigtiff file + strFilename = fullfile(strTSDir, 'private', 'TS_UnitTestImage_BigTIFF.tif'); + TSUT_RunTestsOnFile(strFilename); + + % - Find unit test ImageJ Big stack file + % Currently not integrated into unit test + % strFilename = fullfile(strTSDir, 'private', 'TS_UnitTestImage_ImageJ_BigStack_8frames.tif'); + % TSUT_RunTestsOnFile(strFilename); + end +end + +function TSUT_RunTestsOnFile(strFilename) + + fprintf('--- TS_UnitTest: Running on file [%s]...\n', strFilename); + + % - Try to make a TIFFStack object + tsStack = TIFFStack(strFilename); + + % - Load test image using 'imread' + sInfo = imfinfo(strFilename); + nNumFrames = numel(sInfo); + + for (nFrame = nNumFrames:-1:1) + tfFrame = permute(imread(strFilename, 'Index', nFrame, 'Info', sInfo), [1 2 4 3]); + tfStack(:, :, nFrame, :) = tfFrame; + end + + % - Check that test stack is big enough + vnStackSize = size(tfStack); + if (numel(vnStackSize) < 3) + error('TIFFStack:Arguments', '*** TS_UnitTest: Stack provided for testing [%s] must have at least 3 dimensions.', strFilename); + end + + if (any(vnStackSize(1:3) < [3 3 3])) + error('TIFFStack:Arguments', '*** TS_UnitTest: Stack provided for testing [%s] must be at least [3x3x3].', strFilename); + end + + + %% - Test straightforward referencing + TSUT_TestReferencing(tsStack, tfStack, 'Raw stack'); + + %% - Test permuted stack + tsStack = permute(tsStack, [3 1 2 4]); + tfStack = permute(tfStack, [3 1 2 4]); + TSUT_TestReferencing(tsStack, tfStack, 'Simple permutation'); + tsStack = ipermute(tsStack, [3 1 2 4]); + tfStack = ipermute(tfStack, [3 1 2 4]); + + %% - Test inverted stack + sTSInfo = getImageInfo(tsStack); + fMaxSampleValue = sTSInfo(1).MaxSampleValue; + fMinSampleValue = sTSInfo(1).MinSampleValue; + + tsStack.bInvert = true; + tfStack = fMaxSampleValue - (tfStack - fMinSampleValue); + TSUT_TestReferencing(tsStack, tfStack, 'Inverted stack'); + tsStack.bInvert = false; + + % - Re-extract stack + for (nFrame = nNumFrames:-1:1) + tfFrame = permute(imread(strFilename, 'Index', nFrame, 'Info', sInfo), [1 2 4 3]); + tfStack(:, :, nFrame, :) = tfFrame; + end + + %% - Test non-accelerated reading funcitons + w = warning('off', 'TIFFStack:SlowAccess'); + tsStack = TIFFStack(strFilename, [], [], true); + TSUT_TestReferencing(tsStack, tfStack, 'Non-accelerated TIFF reading'); + warning(w); + + %% - Test deinterleaved stack + vnStackSize = size(tfStack); + nNumFrames = size(tfStack, 3); + + % - Test that de-interleaving succeeded + tsStack = TIFFStack(strFilename, [], [1 1 nNumFrames 1]); + vnTestSize = [vnStackSize([1 2]) 1 1 nNumFrames 1 vnStackSize(4:end)]; + if (vnTestSize(end) == 1) + vnTestSize = vnTestSize(1:(find(vnTestSize == 1, 1, 'last') - 1)); + end + assert(isequal(size(tsStack), vnTestSize), ... + 'TIFFStack:UnitTestFailed', 'De-interleaving the stack was unsuccessful.'); + + tsStack = TIFFStack(strFilename, [], [1 1 nNumFrames]); + vnTestSize = [vnStackSize([1 2]) 1 1 nNumFrames vnStackSize(4:end)]; + if (vnTestSize(end) == 1) + vnTestSize = vnTestSize(1:(find(vnTestSize == 1, 1, 'last') - 1)); + end + assert(isequal(size(tsStack), vnTestSize), ... + 'TIFFStack:UnitTestFailed', 'De-interleaving the stack was unsuccessful.'); + + tsStack = TIFFStack(strFilename, [], [1 1]); + vnTestSize = [vnStackSize([1 2]) 1 1 nNumFrames vnStackSize(4:end)]; + if (vnTestSize(end) == 1) + vnTestSize = vnTestSize(1:(find(vnTestSize == 1, 1, 'last') - 1)); + end + assert(isequal(size(tsStack), vnTestSize), ... + 'TIFFStack:UnitTestFailed', 'De-interleaving the stack was unsuccessful.'); + + TSUT_assertFail('MATLAB:TIFFStack:expectedInteger', 'TIFFStack(strFilename, [], .5);'); + + tfStack = reshape(tfStack, [size(tfStack, 1) size(tfStack, 2) 1 1 nNumFrames size(tfStack, 4)]); + TSUT_TestReferencing(tsStack, tfStack, 'Deinterleaved stack'); + + %% - Test saving / loading a stack + strMatFile = tempname; + save(strMatFile, 'tsStack'); + s = load(strMatFile); + TSUT_TestReferencing(tsStack, s.tsStack, 'Serialised/Deserialised stack'); + + %% - Test error conditions + TSUT_assertFail('TIFFStack:Concatenation', '[tsStack tsStack];'); + TSUT_assertFail('TIFFStack:Concatenation', '[tsStack; tsStack];'); + TSUT_assertFail('TIFFStack:Concatenation', 'cat(1, tsStack, tsStack);'); + TSUT_assertFail('TIFFStack:InvalidReferencing', 'tsStack{1}'); + TSUT_assertFail('TIFFStack:InvalidReferencing', 'tsStack.diagnostic();'); + TSUT_assertFail('TIFFStack:DimensionMustBePositiveInteger', 'size(tsStack, 0);'); + TSUT_assertFail('TIFFStack:InvalidArgument', 'tsStack.bInvert = 2;'); + + %% - Success if we reach here with no errors + disp('--- TS_UnitTest: Unit tests for ''TIFFStack'' passed.'); +end + +function TSUT_TestReferencing(tsStack, tfStack, strTestName) + % - Test stack sizes + assert(isequal(size(tsStack), size(tfStack)), ... + 'TIFFStack:UnitTestFailed', 'The result of calling ''size'' was not equal between the two stacks.'); + assert(isequal(size(tsStack, 1), size(tfStack, 1)), ... + 'TIFFStack:UnitTestFailed', 'The result of calling ''size'' was not equal between the two stacks.'); + assert(isequal(size(tsStack, 2), size(tfStack, 2)), ... + 'TIFFStack:UnitTestFailed', 'The result of calling ''size'' was not equal between the two stacks.'); + assert(isequal(size(tsStack, 3), size(tfStack, 3)), ... + 'TIFFStack:UnitTestFailed', 'The result of calling ''size'' was not equal between the two stacks.'); + assert(isequal(size(tsStack, 4), size(tfStack, 4)), ... + 'TIFFStack:UnitTestFailed', 'The result of calling ''size'' was not equal between the two stacks.'); + + % - Test overloaded functions + TSUT_TestOverloads(tsStack, tfStack, strTestName); + + % - Test referencing entire stack + TSUT_compareRef(':'); + TSUT_compareRef(':', ':'); + TSUT_compareRef(':', ':', ':'); + TSUT_compareRef(':', ':', ':', ':'); + TSUT_compareRef(':', ':', ':', ':', ':'); + TSUT_compareRef(':', ':', ':', ':', ':', ':'); + + % - Test referencing subpixels + TSUT_compareRef(1:2, ':'); + TSUT_compareRef(1:2, 1:2, ':'); + TSUT_compareRef(1:2, 9); + TSUT_compareRef([1 3], 9); + TSUT_compareRef(':', ':', 3); + + % - Test empty referencing + TSUT_compareRef([]); + TSUT_compareRef([], []); + TSUT_compareRef([], [], []); + TSUT_compareRef([], [], [], []); + TSUT_compareRef([], [], [], [], []); + TSUT_compareRef(1, 1, 1, [], 1); + + % - Test referencing using 'end' + TSUT_compareEndRefs(); + + % - Test referencing with unit indices + TSUT_compareRef(1); + TSUT_compareRef(1, 1); + TSUT_compareRef(1, 1, 1); + TSUT_compareRef(1, 1, 1, 1); + TSUT_compareRef(1, 1, 1, 1, 1); + TSUT_compareRef(1, 1, 1, 1, 1, 1); + + % - Test logical indexing + TSUT_compareRef([true false true], [true true false], [false false true]); + + % - Test limit cases that should cause errors + vnStackSize = size(tfStack); + TSUT_testInvalidRef('TIFFStack:badsubscript', 0); + TSUT_testInvalidRef('TIFFStack:badsubscript', 0.1); + TSUT_testInvalidRef('TIFFStack:badsubscript', {1}); + TSUT_testInvalidRef('TIFFStack:badsubscript', complex(1, 0)); + TSUT_testInvalidRef('TIFFStack:badsubscript', 'a'); + TSUT_testInvalidRef('TIFFStack:badsubscript', prod(vnStackSize)+1); + TSUT_testInvalidRef('TIFFStack:badsubscript', 1, prod(vnStackSize(2:end))+1); + TSUT_testInvalidRef('TIFFStack:badsubscript', 1, vnStackSize(2)+1, 1); + TSUT_testInvalidRef('TIFFStack:badsubscript', 1, 1, vnStackSize(3)+1, 1); + TSUT_testInvalidRef('TIFFStack:badsubscript', {1}); + TSUT_testInvalidRef('TIFFStack:badsubscript', 1, 1, 1, 1, 1, 1, 1, 2); + + % - Function to compare results of referencing stack + function TSUT_compareRef(varargin) + try + % - Reference stacks, check for equality + s.type = '()'; + s.subs = varargin; + tfTS = subsref(tsStack, s); + tfTF = tfStack(varargin{:}); + assert(isequal(tfTS, tfTF), 'TIFFStack:UnitTestFailed:ResultsNotEqual', ... + 'The referencing result was not equal between TIFFStack and standard tensor, with subs %s.', TSUT_subs2str(varargin)); + + catch mErr + mUTErr = MException('TIFFStack:UnitTestFailed', 'Failure referencing stack with subs %s, during test [%s]', ... + TSUT_subs2str(varargin), strTestName); + mErr = mErr.addCause(mUTErr); + rethrow(mErr); + end + end + + % - Function to test referencing using 'end' + function TSUT_compareEndRefs + try + % - Reference stacks, check for equality + ae(tsStack(end), ... + tfStack(end)); + ae(tsStack(1:end, 1), ... + tfStack(1:end, 1)); + ae(tsStack(1, 1:end), ... + tfStack(1, 1:end)); + ae(tsStack(1, 1:end-1), ... + tfStack(1, 1:end-1)); + ae(tsStack(1, 1, 1:end), ... + tfStack(1, 1, 1:end)); + ae(tsStack(1, 1, 1, 1:end), ... + tfStack(1, 1, 1, 1:end)); + ae(tsStack(1, 1, 1, 1, 1:end), ... + tfStack(1, 1, 1, 1, 1:end)); + ae(tsStack(1, 1, 1, 1, 1, 1:end), ... + tfStack(1, 1, 1, 1, 1, 1:end)); + + catch mErr + mUTErr = MException('TIFFStack:UnitTestFailed', 'Failure referencing stack with using ''end'' referencing, during test [%s]', ... + strTestName); + mErr = mErr.addCause(mUTErr); + rethrow(mErr); + end + + function ae(a, b) + assert(isequal(a, b), 'TIFFStack:UnitTestFailed:ResultsNotEqual', ... + 'The referencing result was not equal between TIFFStack and standard tensor, using ''end'' referencing'); + end + end + + % - Function to test errors with invalid references + function TSUT_testInvalidRef(strErrorID, varargin) + try + % - Reference stacks, check for equality + s.type = '()'; + s.subs = varargin; + tfTS = subsref(tsStack, s); %#ok + + catch mErr + % - Check whether the correct error was reported + if ~isequal(mErr.identifier, strErrorID) + mUTErr = MException('TIFFStack:UnitTestFailed', 'Incorrect error raised during error test with subs %s, during test [%s]. Desired error [%s], raised error [%s].', ... + TSUT_subs2str(varargin), strTestName, strErrorID, mErr.identifier); + mErr = mErr.addCause(mUTErr); + rethrow(mErr); + end + return; + end + + % - We should never get here, so raise an error + error('TIFFStack:UnitTestFailed:ErrorNotThrown', ... + 'An error should have occurred but did not, with subs %s, during test [%s]. Desired error [%s].', ... + TSUT_subs2str(varargin), strTestName, strErrorID); + end +end + +function TSUT_TestOverloads(tsStack, tfStack, strTestName) + + TSUT_TO_TestOverload(@sum); + TSUT_TO_TestOverload(@nansum); + TSUT_TO_TestOverload(@mean); + TSUT_TO_TestOverload(@nanmean); + + function TSUT_TO_TestOverload(fhFun) + assert(isequal(fhFun(tsStack), fhFun(tfStack)), ... + 'TIFFStack:UnitTestFailed', 'The result of called [%s] was not equal between the two stacks, during test [%s]', ... + func2str(fhFun), strTestName); + assert(isequal(fhFun(tsStack, 3), fhFun(tfStack, 3)), ... + 'TIFFStack:UnitTestFailed', 'The result of called [%s(x, 3)] was not equal between the two stacks, during test [%s]', ... + func2str(fhFun), strTestName); + + % - Test 'flag' argument for sum and mean + if (~isequal(fhFun, @nansum) && ~isequal(fhFun, @nanmean)) + assert(isequal(fhFun(tsStack, 'native'), fhFun(tfStack, 'native')), ... + 'TIFFStack:UnitTestFailed', 'The result of called [%s(x, ''native'')] was not equal between the two stacks, during test [%s]', ... + func2str(fhFun), strTestName); + assert(isequal(fhFun(tsStack, 3, 'native'), fhFun(tfStack, 3, 'native')), ... + 'TIFFStack:UnitTestFailed', 'The result of called [%s(x, 3, ''native''] was not equal between the two stacks, during test [%s]', ... + func2str(fhFun), strTestName); + end + end + +end + + +% - Function to test errors with invalid references +function TSUT_assertFail(strErrorID, strCommand) +try + % - Evalulate command in called workspace + evalin('caller', strCommand); + +catch mErr + % - Check whether the correct error was reported + if ~isequal(mErr.identifier, strErrorID) + mUTErr = MException('TIFFStack:UnitTestFailed', 'Incorrect error raised during error test with command [%s]. Desired error [%s], raised error [%s].', ... + strCommand, strErrorID, mErr.identifier); + mErr = mErr.addCause(mUTErr); + rethrow(mErr); + end + return; +end + +% - We should never get here, so raise an error +error('TIFFStack:UnitTestFailed:ErrorNotThrown', ... + 'An error should have occurred but did not, with subs %s, during test [%s]. Desired error [%s].', ... + TSUT_subs2str(varargin), strTestName, strErrorID); +end + + +function strSubs = TSUT_subs2str(varargin) + cSubsStr = cellfun(@num2str, varargin{:}, 'UniformOutput', false); + strSubs = ['(' ... + sprintf('[%s], ', cSubsStr{:}) ... + sprintf('\b\b') ... + ')']; +end \ No newline at end of file diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage.tif b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage.tif new file mode 100644 index 0000000..f443b2c Binary files /dev/null and b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage.tif differ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_BigTIFF.tif b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_BigTIFF.tif new file mode 100644 index 0000000..85715d5 Binary files /dev/null and b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_BigTIFF.tif differ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_ImageJ_BigStack_8frames.tif b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_ImageJ_BigStack_8frames.tif new file mode 100644 index 0000000..f65f836 Binary files /dev/null and b/downloaded/DylanMuir-TIFFStack-6492032/private/TS_UnitTestImage_ImageJ_BigStack_8frames.tif differ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.c b/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.c new file mode 100644 index 0000000..41338aa --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.c @@ -0,0 +1,50 @@ +/* mapped_tensor_repsum.c - MEX FUNCTION Replicate a vector, add elements of another vector + * + * Usage: [vfSummedRep] = mapped_tensor_repsum(vfSourceA, vfSourceB) + * + * 'vnSummedRep' will be a vector of length (numel(vfSourceA) * numel(vfSourceB)). + * It will contain replicated copies of vector 'vfSourceA', where each copy + * has been added with elements from 'vfSourceB' in turn. + * + * Author: Dylan Muir + * Created: 17th July, 2012 + */ + +/* - Fix char16_t definition bug in OS X 10.9 */ +#ifndef char16_t + #include + typedef uint16_t char16_t; +#endif +#include "mex.h" + +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { + /* - Local variables */ + double *vfSourceA, *vfSourceB, *vfDest; + mwSize uNumelA, uNumelB, + uIndexA, uIndexB, uIndexDest; + + /* - Get arguments and sizes */ + uNumelA = mxGetM(prhs[0]) * mxGetN(prhs[0]); + uNumelB = mxGetM(prhs[1]) * mxGetN(prhs[1]); + + vfSourceA = mxGetPr(prhs[0]); + vfSourceB = mxGetPr(prhs[1]); + + /* - Allocate destination vector */ + if ((plhs[0] = mxCreateNumericMatrix(uNumelA * uNumelB, 1, mxDOUBLE_CLASS, mxREAL)) == NULL) { + mexErrMsgIdAndTxt("MappedTensor:mapped_tensor_repsum:Memory", "Could not allocate memory."); + } + vfDest = mxGetPr(plhs[0]); + + + /* -- Replicate vector A, add elements of vector B in turn */ + + uIndexDest = 0; + for (uIndexB = 0; uIndexB < uNumelB; uIndexB++) { + for (uIndexA = 0; uIndexA < uNumelA; uIndexA++, uIndexDest++) { + vfDest[uIndexDest] = vfSourceA[uIndexA] + vfSourceB[uIndexB]; + } + } +} + +/* --- END of mapped_tensor_repsum.c --- */ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.mexw64 b/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.mexw64 new file mode 100644 index 0000000..bb32674 Binary files /dev/null and b/downloaded/DylanMuir-TIFFStack-6492032/private/mapped_tensor_repsum.mexw64 differ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/tifflib.mexw64 b/downloaded/DylanMuir-TIFFStack-6492032/private/tifflib.mexw64 new file mode 100644 index 0000000..b69a0e8 Binary files /dev/null and b/downloaded/DylanMuir-TIFFStack-6492032/private/tifflib.mexw64 differ diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_header.m b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_header.m new file mode 100644 index 0000000..a1dd387 --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_header.m @@ -0,0 +1,416 @@ +function [TIF, HEADER, INFO] = tiffread31_header(file_name) + +DEF_nPreallocateBlock = 1000; +DEF_HEADER = struct( 'SamplesPerPixel', [], 'index', [], 'ifd_pos', [], ... + 'width', [], 'height', [], 'bits', [], 'StripOffsets', [], ... + 'StripNumber', [], 'RowsPerStrip', [], 'StripByteCounts', [], ... + 'cmap', [], 'colors', []); +DEF_INFO = struct('SamplesPerPixel', [], 'ByteOrder', [], 'Width', [], ... + 'Height', [], 'BitsPerSample', [], ... + 'RowsPerStrip', [], 'PlanarConfiguration', [], ... + 'MaxSampleValue', [], 'MinSampleValue', []); + + +%% --- Initialise variables and open TIFF file + +TIF = struct('ByteOrder', 'ieee-le'); % byte order string +TIF.SamplesPerPixel = 1; +HEADER = DEF_HEADER; +HEADER.SamplesPerPixel = 1; +INFO = DEF_INFO; +INFO.SamplesPerPixel = 1; +TIF.PlanarConfiguration = 1; + +% - Obtain the full file path +[status, file_attrib] = fileattrib(file_name); + +if status == 0 + error('tiffread3:filenotfound', ['File "',file_name,'" not found.']); +end + +file_name = file_attrib.Name; + +% - Open file for reading +TIF.file = fopen(file_name,'r','l'); + +% - Obtain the short file name +[~, name, ext] = fileparts(file_name); +TIF.image_name = [name, ext]; +TIF.file_name = file_name; + + +%% --- Read byte order: II = little endian, MM = big endian + +bos = fread(TIF.file, 2, '*char'); +if ( strcmp(bos', 'II') ) + TIF.ByteOrder = 'ieee-le'; % Little-endian format + INFO.ByteOrder = 'little-endian'; + +elseif ( strcmp(bos','MM') ) + TIF.ByteOrder = 'ieee-be'; % Big-endian format + INFO.ByteOrder = 'big-endian'; + +else + error('This is not a TIFF file (no MM or II).'); +end + + +%% --- Read in a number which identifies TIFF format + +TIF.tiff_id = fread(TIF.file,1,'uint16', TIF.ByteOrder); + +if (TIF.tiff_id ~= 42) && (TIF.tiff_id ~= 43) + error('This is not a TIFF file (missing 42 or 43).'); +end + +% - By default, read 4-byte pointers +TIF.strIFDNumEntriesSize = 'uint16'; +TIF.strIFDClassSize = 'uint32'; +TIF.nIFDTagBytes = 12; +TIF.nIFDClassBytes = 2; +TIF.strTagSizeClass = 'uint32'; +TIF.nInlineBytes = 4; + +% - Handle a BigTIFF file +if (TIF.tiff_id == 43) + TIF.offset_size = fread(TIF.file, 1, 'uint16', TIF.ByteOrder); + test_val = fread(TIF.file, 1, 'uint16', TIF.ByteOrder); + + % - Test check value + if (test_val ~= 0) + error('This is not a valid BigTIFF file (invalid test value).'); + end + + % - Get IFD pointer data class + switch TIF.offset_size + case 8 + TIF.strIFDNumEntriesSize = 'uint64'; + TIF.strIFDClassSize = 'uint64'; + TIF.nIFDClassBytes = 8; + + case 16 + TIF.strIFDNumEntriesSize = 'uint64'; + TIF.strIFDClassSize = '2*uint64'; + TIF.nIFDClassBytes = 16; + + otherwise + error('Unknown IFD pointer size for BigTIFF file.'); + end + + TIF.nIFDTagBytes = 20; + TIF.strTagSizeClass = 'uint64'; + TIF.nInlineBytes = 8; +end + + +%% --- Maps to accelerate types conversions in readIFDentry function + +nbBytesMap = [ ... + 1, ... byte + 1, ... ascii string + 2, ... word + 4, ... dword/uword + 8, ... rational + 1, ... signed byte + 1, ... undefined + 2, ... signed short + 4, ... signed long + 8, ... long rational + 4, ... ??? + 8, ... ??? + 4, ... TIFF_IFD + 8, ... Long8 + 8, ... SLong8 + 8, ... Unsigned IFD offet 8 bytes + ]; + +matlabTypeMap = { ... + 'uint8', ... byte + '*char', ... ascii string + 'uint16', ... word + 'uint32', ... dword/uword + 'uint32', ... rational + 'int8', ... signed byte + 'uchar', ... undefined + 'int16', ... signed short + 'int32', ... signed long + 'int32', ... long rational + 'float32', ... ??? + 'float64', ... ??? + 'uint32', ... TIFF_IFD + 'uint64', ... Long8 + 'int64', ... SLong8 + 'uint64', ... Unsigned IFD offet 8 bytes + }; + +%% --- Read the image file directories (IFDs) + +% - Subset of tags to be parsed +parsed_tags = [256, 257, 258, 259, 262, 273, 277, 278, 279, 284, 317, 320, 339]; + +% - Read file offset of next IFD +ifd_pos = fread(TIF.file, 1, TIF.strIFDClassSize, TIF.ByteOrder); +img_indx = 0; + +% - Attempt to preallocate +nPreallocateBlock = DEF_nPreallocateBlock; +HEADER(nPreallocateBlock) = DEF_HEADER; +INFO(nPreallocateBlock) = DEF_INFO; + +% - Loop until the last IFD +while (ifd_pos ~= 0) + + img_indx = img_indx + 1; + + % - Extend arrays + if (img_indx > nPreallocateBlock) + nPreallocateBlock = nPreallocateBlock + DEF_nPreallocateBlock; + HEADER(nPreallocateBlock) = DEF_HEADER; + INFO(nPreallocateBlock) = DEF_INFO; + end + + % - Store the IFD (frame) index and the IFD file offset + HEADER(img_indx).index = img_indx; + HEADER(img_indx).ifd_pos = ifd_pos; + + % - Move in the file to the next IFD + file_seek(ifd_pos); + + % - Read in the number of IFD entries + num_entries = fread(TIF.file,1, TIF.strIFDNumEntriesSize, TIF.ByteOrder); + + % - Store current position + entry_pos = ifd_pos + TIF.nIFDClassBytes; + + % - Read the next IFD file offset + file_seek(ifd_pos + TIF.nIFDTagBytes * num_entries + TIF.nIFDClassBytes); + ifd_pos = fread(TIF.file, 1, TIF.strIFDClassSize, TIF.ByteOrder); + + % - Read all the IFD entries + for (inx = 1:num_entries) + + % - Move to next IFD entry in the file + file_seek(entry_pos + TIF.nIFDTagBytes * (inx - 1)); + + % - Read entry + [entry_tag, entry_val, entry_cnt] = readIFDentry(TIF.strTagSizeClass, TIF.nInlineBytes); + + % - Not all valid tiff tags have been included, but tags can easily + % be added to this code. See the official list of tags: + % http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf + switch (entry_tag) + + % - Image width = number of columns + case 256 + HEADER(img_indx).width = entry_val; + INFO(img_indx).Width = entry_val; + + % - Image height = number of rows + case 257 + HEADER(img_indx).height = entry_val; + TIF.ImageLength = entry_val; + INFO(img_indx).Height = entry_val; + + % - Bits per sample + case 258 + TIF.BitsPerSample = entry_val; + TIF.BytesPerSample = TIF.BitsPerSample / 8; + HEADER(img_indx).bits = TIF.BitsPerSample(1); + INFO(img_indx).BitsPerSample = entry_val; + + % - Compression type + case 259 + if entry_val ~= 1 + error('TIFFStack:Compression', ... + ['Compression format ', num2str(entry_val),' not supported.']); + end + + % - Photometric interpretation + case 262 + TIF.PhotometricInterpretation = entry_val; + if TIF.PhotometricInterpretation == 3 + warning('tiffread:LookUp', 'Ignoring TIFF look-up table.'); + end + + % - Strip offset + case 273 + HEADER(img_indx).StripOffsets = entry_val; + HEADER(img_indx).StripNumber = entry_cnt; + + % - Samples per pixel + case 277 + TIF.SamplesPerPixel = entry_val; + INFO(img_indx).SamplesPerPixel = entry_val; + + % - Rows per strip + case 278 + INFO(img_indx).RowsPerStrip = entry_val; + HEADER(img_indx).RowsPerStrip = entry_val; + + % - Strip byte counts - number of bytes in each strip after any compression + case 279 + HEADER(img_indx).StripByteCounts= entry_val; + + % - Planar configuration describe the order of RGB + case 284 + TIF.PlanarConfiguration = entry_val; + + % - Predictor for compression + case 317 + if entry_val ~= 1 + error('Unsuported predictor value.') + end + + % - Color map + case 320 + HEADER(img_indx).cmap = entry_val; + HEADER(img_indx).colors = entry_cnt / 3; + + % - Sample format + case 339 + TIF.SampleFormat = entry_val; + end + end + + % - Total number of bytes per image plane + if TIF.PlanarConfiguration == 1 + TIF.BytesPerPlane = TIF.SamplesPerPixel * HEADER(img_indx).width * HEADER(img_indx).height * TIF.BytesPerSample; + else + TIF.BytesPerPlane = HEADER(img_indx).width * HEADER(img_indx).height * TIF.BytesPerSample; + end +end + +% - Determine the data storage format +SampleFormat = 1; +if isfield(TIF, 'SampleFormat') + SampleFormat = TIF.SampleFormat(1); +end + +switch (SampleFormat) + case 1 % - Unsigned integer + TIF.classname = sprintf('uint%i', TIF.BitsPerSample(1)); + [INFO.MaxSampleValue] = deal(2.^TIF.BitsPerSample - 1); + [INFO.MinSampleValue] = deal(0); + + case 2 % - Signed integer + TIF.classname = sprintf('int%i', TIF.BitsPerSample(1)); + [INFO.MaxSampleValue] = deal(2.^(TIF.BitsPerSample-1) - 1); + [INFO.MinSampleValue] = deal(-2.^(TIF.BitsPerSample-1)); + + case 3 % - Real values + if (TIF.BitsPerSample(1) == 32) + % - Single-precision real value + TIF.classname = 'single'; + [INFO.MaxSampleValue] = realmax('single'); + [INFO.MinSampleValue] = -realmax('single'); + + else + % - Double-precision real value + TIF.classname = 'double'; + [INFO.MaxSampleValue] = realmax('double'); + [INFO.MinSampleValue] = -realmax('double'); + end + + otherwise + % - Unknown / unsupported storage format + error('TIFFStack:Format', '*** TIFFStack: Error: Unsuported TIFF sample format [%i].', SampleFormat); +end + +% - Trim pre-allocated blocks +HEADER(img_indx+1:end) = []; +INFO(img_indx+1:end) = []; + +% - Try to consolidate the TIFF strips if possible, to minimise disk reads +consolidate_strips(TIF.BytesPerPlane); + +% --- END of tiffread31_header FUNCTION --- + +%% --- Utility functions + + function file_seek(fpos) + status = fseek(TIF.file, fpos, -1); + if status == -1 + error('Invalid file offset (invalid fseek)'); + end + end + + function consolidate_strips(BytesPerPlane) + + for (nFrame = 1:numel(HEADER)) + + % - Try to consolidate the strips into a single one to speed-up reading + nBytes = HEADER(nFrame).StripByteCounts(1); + + if (nBytes < BytesPerPlane) + + idx = 1; + % - Accumulate continguous strips that contribute to the plane + while (HEADER(nFrame).StripOffsets(1) + nBytes == HEADER(nFrame).StripOffsets(idx+1)) + idx = idx + 1; + nBytes = nBytes + HEADER(nFrame).StripByteCounts(idx); + if ( nBytes >= BytesPerPlane ); break; end + end + + % - Consolidate the strips + if (nBytes <= BytesPerPlane(1)) && (idx > 1) + HEADER(nFrame).StripByteCounts = [nBytes; HEADER(nFrame).StripByteCounts(idx+1:HEADER(nFrame).StripNumber)]; + HEADER(nFrame).StripOffsets = HEADER(nFrame).StripOffsets([1 , idx+1:HEADER(nFrame).StripNumber]); + HEADER(nFrame).StripNumber = 1 + HEADER(nFrame).StripNumber - idx; + end + end + end + end + + +%% ---- Function to read an IFD entry + + function [entry_tag, entry_val, entry_cnt] = readIFDentry(strTagSizeClass, nInlineBytes) + + % - Read the IFD entry descriptor + buffer = fread(TIF.file, 2, 'uint16', TIF.ByteOrder); + entry_tag = buffer(1); + tiffType = buffer(2); + + % - Skip tags that are not used afterwards + if (~any(entry_tag == parsed_tags)) % Faster than `ismember` for this usage + entry_val = []; + entry_cnt = []; + return; + end + + % - Read the IFD entry + entry_cnt = fread(TIF.file, 1, strTagSizeClass, TIF.ByteOrder); + + % - Map this IFD entry type to matlab storage classes + try + nbBytes = nbBytesMap(tiffType); + matlabType = matlabTypeMap{tiffType}; + + catch ME + if strcmp(ME.identifier, 'MATLAB:badsubscript') + error('TIFFSTack:Unsupported', 'TIFFStack/tiffread31_header/readIFDentry: tiff tag type %i not supported.', tiffType); + else + rethrow(ME); + end + end + + % - Check for whether the data for this tag is inline or not + if (nbBytes * entry_cnt > nInlineBytes) + % - The next field contains an offset + fpos = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + file_seek(fpos); + end + + % - Handle TIFF 'rational' type + if (tiffType == 5) + val = fread(TIF.file, 2 * entry_cnt, matlabType, TIF.ByteOrder); + entry_val = val(1:2:end) ./ val(2:2:end); + + else + % - Read the data for this entry + entry_val = fread(TIF.file, entry_cnt, matlabType, TIF.ByteOrder)'; + end + + end + +end \ No newline at end of file diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readimage.m b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readimage.m new file mode 100644 index 0000000..13edfae --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readimage.m @@ -0,0 +1,331 @@ +function [data, stack] = tiffread31_readimage(TIF, HEADER, vnFrames) + +opt.ReadUnknownTags = true; +opt.ConsolidateStrips = true; +opt.SimilarImages = false; +opt.DistributeMetaData = true; + +% - Preallocate data block +stack = []; + +for (nFrame = numel(vnFrames):-1:1) % Go backwards to pre-allocate + + nFrameID = vnFrames(nFrame); + + % Read pixel data + + if isfield(TIF, 'MM_stack') + + sel = ( vnFrames <= TIF.MM_stackCnt ); + vnFrames = vnFrames(sel); + + %this loop reads metamorph stacks: + for ii = 1:numel(vnFrames) + + TIF.StripCnt = 1; + + %read the image data + cFrame = read_pixels(TIF.BytesPerPlane * (ii-1), HEADER(vnFrames(ii))); + data(:, :, nFrame, :) = cat(4, cFrame{:}); + + [ IMG.MM_stack, IMG.MM_wavelength, IMG.MM_private2 ] = splitMetamorph(ii); + + IMG.index = ii; + stack = cat(2, stack, IMG); + + end + + break; + + else + + if opt.SimilarImages && ~isempty(stack) + if HEADER(nFrameID).width ~= stack(1).width || HEADER(nFrameID).height ~= stack(1).height + % setting read_img=0 will skip dissimilar images: + % comment-out the line below to allow dissimilar stacks + fprintf('Tiffread skipped %ix%i image\n', HEADER(nFrameID).width, HEADER(nFrameID).height); + continue; + end + end + + TIF.StripCnt = 1; + + %read image data + cFrame = read_pixels(zeros(size(TIF.BytesPerPlane)), HEADER(nFrameID)); + data(:, :, nFrame, :) = cat(4, cFrame{:}); + +% try +% stack = cat(2, stack, IMG); +% catch +% try +% stack = rmfield(stack, 'meta_data'); +% stack = rmfield(stack, 'meta_data_byte_counts'); +% stack = cat(2, stack, IMG); +% fprintf('Tiffread had to discard some meta_data\n'); +% catch +% fprintf('Tiffread could not load dissimilar image %i\n', img_indx); +% end +% end + + end +end + + +% remove the cell structure if there is always only one channel + +flat = 1; +for ii = 1:length(stack) + if length(stack(ii).data) ~= 1 + flat = 0; + break; + end +end + +if flat + for ii = length(stack):-1:1 + stack(ii).data = stack(ii).data{1}; + end +end + + +% distribute Andor IMG to all planes. + +if opt.DistributeMetaData && exist('ANDOR', 'var') + + fieldNames = fieldnames(ANDOR); + for ii = length(stack):-1:1 + for jj = 1:size(fieldNames,1) + stack(ii).(fieldNames{jj})=ANDOR.(fieldNames{jj}); + end + stack(ii).planeNumber = ii; + end + % set nFrames if it doesn't exist + if ~ isfield(stack,'nFrames') + nFrames = length(stack); + stack = setfield(stack, {1}, 'nFrames', nFrames); + end + +end + +% distribute the MetaMorph info + +if opt.DistributeMetaData + + if isfield(TIF, 'MM_stack') && isfield(IMG, 'info') && ~isempty(IMG.info) + + IMG.info = regexprep(IMG.info, '\r\n|\0', '\n'); + lines = textscan(IMG.info, '%s', 'Delimiter', '\n'); + mmi = parseMetamorphInfo(lines{1}, TIF.MM_stackCnt); + for ii = length(stack):-1:1 + stack(ii).MM = mmi{stack(ii).index}; + end + + end + + % duplicate the LSM info + if exist('LSM_info', 'var') + for ii = length(stack):-1:1 + stack(ii).lsm = TIF.LSM_info; + end + end + +end + +return + +%% Sub Function + + function file_seek(fpos) + status = fseek(TIF.file, fpos, -1); + if status == -1 + error('Invalid file offset (invalid fseek)'); + end + end + + + function pixels = read_pixels(offsets, FRAME) + n_pix = FRAME.width * FRAME.height; + bytes = read_plane(offsets(1), 1, TIF.SamplesPerPixel*n_pix, FRAME); + pixels = cell(TIF.SamplesPerPixel, 1); + if TIF.PlanarConfiguration == 2 + for c = 1:TIF.SamplesPerPixel + pixels{c} = reshape(bytes((1+n_pix*(c-1)):(n_pix*c)), FRAME.width, FRAME.height)'; + end + else + spp = TIF.SamplesPerPixel; + for c = 1:TIF.SamplesPerPixel + pixels{c} = reshape(bytes(c:spp:c+spp*n_pix-spp), FRAME.width, FRAME.height)'; + end + end + end + + + function bytes = read_plane(offset, plane_nb, bytes_nb, FRAME) + + %return an empty array if the sample format has zero bits + if ( TIF.BitsPerSample(plane_nb) == 0 ) + bytes=[]; + return; + end + + % fprintf('reading plane %i size %i %i\n', plane_nb, width, height); + + % Preallocate memory: + try + bytes = zeros(bytes_nb, 1, TIF.classname); + catch + %compatibility with older matlab versions: + eval(['plane = ', TIF.classname, '(zeros(bytes_nb, 1));']); + end + + % consolidate all strips: + + + pos = 0; + while 1 + + strip = read_next_strip(offset, plane_nb, FRAME); + + if isempty(strip) + break + end + + bytes(1+pos:pos+length(strip)) = strip; + pos = pos + length(strip); + + end + + if pos < bytes_nb + warning('tiffread: %s','found fewer bytes than needed'); + end + end + + function strip = read_next_strip(offset, plane_nb, FRAME) + + if ( TIF.StripCnt > FRAME.StripNumber ) + strip = []; + return; + end + + %fprintf('reading strip at position %i\n',TIF.StripOffsets(TIF.StripCnt) + offset); + StripLength = FRAME.StripByteCounts(TIF.StripCnt) ./ TIF.BytesPerSample(plane_nb); + + %fprintf( 'reading strip %i\n', TIF.StripCnt); + file_seek(FRAME.StripOffsets(TIF.StripCnt) + offset); + + strip = fread(TIF.file, StripLength, TIF.classname, TIF.ByteOrder); + + if any( length(strip) ~= StripLength ) + error('End of file reached unexpectedly.'); + end + + TIF.StripCnt = TIF.StripCnt + 1; + + end + +%% =============distribute the metamorph infos to each frame: + + function [MMstack, MMwavelength, MMprivate2] = splitMetamorph(imgCnt) + + MMstack = []; + MMwavelength = []; + MMprivate2 = []; + + if TIF.MM_stackCnt == 1 + return; + end + + left = imgCnt - 1; + + if isfield( TIF, 'MM_stack' ) + S = length(TIF.MM_stack) / TIF.MM_stackCnt; + MMstack = TIF.MM_stack(S*left+1:S*left+S); + end + + if isfield( TIF, 'MM_wavelength' ) + S = length(TIF.MM_wavelength) / TIF.MM_stackCnt; + MMwavelength = TIF.MM_wavelength(S*left+1:S*left+S); + end + + if isfield( TIF, 'MM_private2' ) + S = length(TIF.MM_private2) / TIF.MM_stackCnt; + MMprivate2 = TIF.MM_private2(S*left+1:S*left+S); + end + + end + + +%% %% Parse the Metamorph camera info tag into respective fields +% EVBR 2/7/2005, FJN Dec. 2007 + + function mmi = parseMetamorphInfoLine(line, mmi) + + [tok, val] = strtok(line, ':'); + + tok = regexprep(tok, ' ', ''); + val = strtrim(val(2:length(val))); + + if isempty(val) + return; + end + + %fprintf( '"%s" : "%s"\n', tok, val); + + if strcmp(tok, 'Exposure') + [v, c, e, pos] = sscanf(val, '%i'); %#ok + unit = val(pos:length(val)); + %return the exposure in milli-seconds + switch( unit ) + case 'ms' + mmi.Exposure = v; + case 's' + mmi.Exposure = v * 1000; + otherwise + warning('tiffread:MetaMorphExposure', 'Exposure unit not recognized'); + mmi.Exposure = v; + end + else + switch tok + case 'Binning' + % Binning: 1 x 1 -> [1 1] + mmi.Binning = sscanf(val, '%d x %d')'; + case 'Region' + mmi.Region = sscanf(val, '%d x %d, offset at (%d, %d)')'; + otherwise + try + if strcmp(val, 'Off') + mmi.(tok) = 0; + %eval(['mm.',tok,'=0;']); + elseif strcmp(val, 'On') + mmi.(tok) = 1; + %eval(['mm.',tok,'=1;']); + elseif isstrprop(val,'digit') + mmi.(tok) = val; + %eval(['mm.',tok,'=str2num(val)'';']); + else + mmi.(tok) = val; + %eval(['mm.',tok,'=val;']); + end + catch + warning('tiffread:MetaMorph', ['Invalid token "' tok '"']); + end + end + end + end + + function res = parseMetamorphInfo(lines, cnt) + chk = length(lines) / cnt; + res = cell(cnt, 1); + length(lines) + for n = 1:cnt + mmi = []; + for k = 1:chk + mmi = parseMetamorphInfoLine(lines{chk*(n-1)+k}, mmi); + end + res{n} = mmi; + end + end + +end + + diff --git a/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readtags.m b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readtags.m new file mode 100644 index 0000000..51ea688 --- /dev/null +++ b/downloaded/DylanMuir-TIFFStack-6492032/private/tiffread31_readtags.m @@ -0,0 +1,444 @@ +function [sTags] = tiffread31_readtags(TIF, HEADER, vnFrame) + +%% set defaults values: + +opt.ReadUnknownTags = true; +opt.ConsolidateStrips = true; +opt.SimilarImages = false; +opt.DistributeMetaData = true; + +%% Maps to accelerate types conversions in readIFDentry function + +nbBytesMap = [ ... + 1, ... byte + 1, ... ascii string + 2, ... word + 4, ... dword/uword + 8, ... rational + 1, ... signed byte + 1, ... undefined + 2, ... signed short + 4, ... signed long + 8, ... long rational + 4, ... ??? + 8, ... ??? + 4, ... TIFF_IFD + 8, ... Long8 + 8, ... SLong8 + 8, ... Unsigned IFD offet 8 bytes + ]; + +matlabTypeMap = { ... + 'uint8', ... byte + '*char', ... ascii string + 'uint16', ... word + 'uint32', ... dword/uword + 'uint32', ... rational + 'int8', ... signed byte + 'uchar', ... undefined + 'int16', ... signed short + 'int32', ... signed long + 'int32', ... long rational + 'float32', ... ??? + 'float64', ... ??? + 'uint32', ... TIFF_IFD + 'uint64', ... Long8 + 'int64', ... SLong8 + 'uint64', ... Unsigned IFD offet 8 bytes + }; + +%% ---- read the image file directories (IFDs) + +for (img_indx = 1:numel(vnFrame)) + + % move in the file to the next IFD + file_seek(HEADER(vnFrame(img_indx)).ifd_pos); + sTags(img_indx).IFDPosition = HEADER(vnFrame(img_indx)).ifd_pos; + + %read in the number of IFD entries + num_entries = fread(TIF.file,1,TIF.strIFDNumEntriesSize, TIF.ByteOrder); + %fprintf('num_entries = %i\n', num_entries); + + % store current position: + entry_pos = HEADER(vnFrame(img_indx)).ifd_pos+TIF.nIFDClassBytes; + + % read the next IFD address: + file_seek(HEADER(vnFrame(img_indx)).ifd_pos+TIF.nIFDTagBytes*num_entries+TIF.nIFDClassBytes); + + %fprintf('reading IFD %i at position %i\n', img_indx, ifd_pos); + + % read all the IFD entries + for inx = 1:num_entries + + % move to next IFD entry in the file + file_seek(entry_pos+TIF.nIFDTagBytes*(inx-1)); + + % read entry + [entry_tag, entry_val, entry_cnt] = readIFDentry(TIF.strTagSizeClass, TIF.nInlineBytes); + + %fprintf('found entry with tag %i\n', entry_tag); + + % not all valid tiff tags have been included, but tags can easily be added to this code + % See the official list of tags: + % http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf + switch entry_tag + case 256 % image width = number of column + sTags(img_indx).Width = entry_val; + case 257 % image height = number of row + sTags(img_indx).Height = entry_val; + case 258 + sTags(img_indx).BitsPerSample = entry_val; + %fprintf('BitsPerSample %i %i %i\n', entry_val); + case 259 % compression + sTags(img_indx).Compression = entry_val; + case 262 % photometric interpretation + sTags(img_indx).PhotometricInterpretation = entry_val; + case 269 + sTags(img_indx).DocumentName = entry_val; + case 270 % general comments: + sTags(img_indx).ImageDescription = entry_val; + case 271 + sTags(img_indx).make = entry_val; + case 273 % strip offset + sTags(img_indx).StripOffsets = entry_val; + sTags(img_indx).StripNumber = entry_cnt; + %fprintf('StripNumber = %i, size(StripOffsets) = %i %i\n', TIF.StripNumber, size(TIF.StripOffsets)); + case 274 + % orientation is read, but the matrix is not rotated + if ( 1 < entry_val ) && ( entry_val < 9 ) + sTags(img_indx).OrientationID = entry_val; + keys = {'TopLeft', 'TopRight', 'BottomRight', 'BottomLeft', 'LeftTop', 'RightTop', 'RightBottom', 'LeftBottom'}; + sTags(img_indx).Orientation = keys{entry_val}; + end + case 277 + sTags(img_indx).SamplesPerPixel = entry_val; + %fprintf('Color image: sample_per_pixel=%i\n', TIF.SamplesPerPixel); + case 278 + sTags(img_indx).RowsPerStrip = entry_val; + case 279 % strip byte counts - number of bytes in each strip after any compressio + sTags(img_indx).StripByteCounts= entry_val; + case 282 + sTags(img_indx).XResolution = entry_val; + case 283 + sTags(img_indx).YResolution = entry_val; + case 284 % planar configuration describe the order of RGB + sTags(img_indx).PlanarConfiguration = entry_val; + case 296 + sTags(img_indx).ResolutionUnit= entry_val; + case 305 + sTags(img_indx).Software = entry_val; + case 306 + sTags(img_indx).FileModDate = entry_val; + case 315 + sTags(img_indx).Artist = entry_val; + case 317 %predictor for compression + sTags(img_indx).CompressionPredictorVal = entry_val; + case 320 % color map + sTags(img_indx).Colormap = entry_val; + sTags(img_indx).NumColors = entry_cnt/3; + case 339 + sTags(img_indx).SampleFormat = entry_val; + + % ANDOR tags + case 4864 + if ~exist('ANDOR', 'var') + %the existence of the variable indicates that we are + %handling a Andor generated file + sTags(img_indx).ANDOR = struct([]); + end + case 4869 %ANDOR tag: temperature in Celsius when stabilized + if ~(entry_val == -999) + sTags(img_indx).ANDOR(1).temperature = entry_val; + end + case 4876 %exposure time in seconds + sTags(img_indx).ANDOR(1).exposureTime = entry_val; + case 4878 + sTags(img_indx).ANDOR(1).kineticCycleTime = entry_val; + case 4879 %number of accumulations + sTags(img_indx).ANDOR(1).nAccumulations = entry_val; + case 4881 + sTags(img_indx).ANDOR(1).acquisitionCycleTime = entry_val; + case 4882 %Readout time in seconds, 1/readoutrate + sTags(img_indx).ANDOR(1).readoutTime = entry_val; + case 4884 + if (entry_val == 9) + sTags(img_indx).ANDOR(1).isPhotonCounting = 1; + else + sTags(img_indx).ANDOR(1).isPhotonCounting = 0; + end + case 4885 %EM DAC level + sTags(img_indx).ANDOR(1).emDacLevel = entry_val; + case 4890 + sTags(img_indx).ANDOR(1).nFrames = entry_val; + case 4896 + sTags(img_indx).ANDOR(1).isFlippedHorizontally = entry_val; + case 4897 + sTags(img_indx).ANDOR(1).isFlippedVertically = entry_val; + case 4898 + sTags(img_indx).ANDOR(1).isRotatedClockwise = entry_val; + case 4899 + sTags(img_indx).ANDOR(1).isRotatedAnticlockwise = entry_val; + case 4904 + sTags(img_indx).ANDOR(1).verticalClockVoltageAmplitude = entry_val; + case 4905 + sTags(img_indx).ANDOR(1).verticalShiftSpeed = entry_val; + case 4907 + sTags(img_indx).ANDOR(1).preAmpSetting = entry_val; + case 4908 %Camera Serial Number + sTags(img_indx).ANDOR(1).serialNumber = entry_val; + case 4911 %Actual camera temperature when not equal to -999 + if ~(entry_val == -999) + sTags(img_indx).ANDOR(1).unstabilizedTemperature = entry_val; + end + case 4912 + sTags(img_indx).ANDOR(1).isBaselineClamped = entry_val; + case 4913 + sTags(img_indx).ANDOR(1).nPrescans = entry_val; + case 4914 + sTags(img_indx).ANDOR(1).model = entry_val; + case 4915 + sTags(img_indx).ANDOR(1).chipXSize = entry_val; + case 4916 + sTags(img_indx).ANDOR(1).chipYSize = entry_val; + case 4944 + sTags(img_indx).ANDOR(1).baselineOffset = entry_val; + + case 33550 % GeoTIFF + sTags(img_indx).ModelPixelScaleTag = entry_val; + case 33628 % Metamorph specific data + sTags(img_indx).MM_private1 = entry_val; + case 33629 % this tag identify the image as a Metamorph stack! + sTags(img_indx).MM_stack = entry_val; + sTags(img_indx).MM_stackCnt = entry_cnt; + case 33630 % Metamorph stack data: wavelength + sTags(img_indx).MM_wavelength = entry_val; + case 33631 % Metamorph stack data: gain/background? + sTags(img_indx).MM_private2 = entry_val; + + case 33922 % GeoTIFF + sTags(img_indx).ModelTiePointTag = entry_val; + case 34412 % Zeiss LSM data + sTags(img_indx).LSM_info = entry_val; + case 34735 % GeoTIFF + sTags(img_indx).GeoKeyDirTag = entry_val; + case 34737 % GeoTIFF + sTags(img_indx).GeoASCII = entry_val; + case 42113 % GeoTIFF + sTags(img_indx).GDAL_NODATA = entry_val; + + case 50838 % Adobe + sTags(img_indx).meta_data_byte_counts = entry_val; + case 50839 % Adobe + sTags(img_indx).meta_data = entry_val; + + otherwise + if opt.ReadUnknownTags + sTags(img_indx).(['tag', num2str(entry_tag)])=entry_val; + %eval(['IMG(img_indx+1).Tag',num2str(entry_tag),'=',entry_val,';']); + else + fprintf( 'Unknown TIFF entry with tag %i (cnt %i)\n', entry_tag, entry_cnt); + end + end + + % - Calculate the bounding box if we have the required information + if isfield(sTags, 'ModelPixelScaleTag') && isfield(sTags, 'ModelTiePointTag') && isfield(sTags, 'Height')&& isfield(sTags, 'Width'), + sTags(img_indx).North=sTags(img_indx).ModelTiePointTag(5)-sTags(img_indx).ModelPixelScaleTag(2)*sTags(img_indx).ModelTiePointTag(2); + sTags(img_indx).South=sTags(img_indx).North-sTags(img_indx).height*sTags(img_indx).ModelPixelScaleTag(2); + sTags(img_indx).West=sTags(img_indx).ModelTiePointTag(4)+sTags(img_indx).ModelPixelScaleTag(1)*sTags(img_indx).ModelTiePointTag(1); + sTags(img_indx).East=sTags(img_indx).West+sTags(img_indx).width*sTags(img_indx).ModelPixelScaleTag(1); + end + end + + + % total number of bytes per image: + if TIF.PlanarConfiguration == 1 + sTags(img_indx).BytesPerPlane = TIF.SamplesPerPixel * sTags(img_indx).Width * sTags(img_indx).Height * TIF.BytesPerSample; + else + sTags(img_indx).BytesPerPlane = sTags(img_indx).Width * sTags(img_indx).Height * TIF.BytesPerSample; + end +end + +% determine the type of data stored in the pixels: +SampleFormat = 1; +if isfield(TIF, 'SampleFormat') + SampleFormat = TIF.SampleFormat(1); +end + +switch( SampleFormat ) + case 1 + [sTags.MaxSampleValue] = deal(2.^TIF.BitsPerSample - 1); + [sTags.MinSampleValue] = deal(0); + + case 2 + [sTags.MaxSampleValue] = deal(2.^(TIF.BitsPerSample-1) - 1); + [sTags.MinSampleValue] = deal(-2.^(TIF.BitsPerSample-1)); + + case 3 + if (TIF.BitsPerSample(1) == 32 ) + [sTags.MaxSampleValue] = realmax('single'); + [sTags.MinSampleValue] = -realmax('single'); + else + [sTags.MaxSampleValue] = realmax('double'); + [sTags.MinSampleValue] = -realmax('double'); + end + + otherwise + error('TIFFStack:Format', '*** TIFFStack: Error: Unsuported TIFF sample format [%i].', SampleFormat); +end + +% - Try to consolidate the TIFF strips if possible + +if opt.ConsolidateStrips + consolidate_strips(TIF.BytesPerPlane); +end + + +%% Sub Functions + + function file_seek(fpos) + status = fseek(TIF.file, fpos, -1); + if status == -1 + error('Invalid file offset (invalid fseek)'); + end + end + + function consolidate_strips(BytesPerPlane) + + for (nFrame = 1:numel(sTags)) + + %Try to consolidate the strips into a single one to speed-up reading: + nBytes = sTags(nFrame).StripByteCounts(1); + + if nBytes < BytesPerPlane + + idx = 1; + % accumulate continguous strips that contribute to the plane + while sTags(nFrame).StripOffsets(1) + nBytes == sTags(nFrame).StripOffsets(idx+1) + idx = idx + 1; + nBytes = nBytes + sTags(nFrame).StripByteCounts(idx); + if ( nBytes >= BytesPerPlane ); break; end + end + + %Consolidate the Strips + if ( nBytes <= BytesPerPlane(1) ) && ( idx > 1 ) + %fprintf('Consolidating %i stripes out of %i', ConsolidateCnt, TIF.StripNumber); + sTags(nFrame).StripByteCounts = [nBytes; sTags(nFrame).StripByteCounts(idx+1:sTags(nFrame).StripNumber ) ]; + sTags(nFrame).StripOffsets = sTags(nFrame).StripOffsets( [1 , idx+1:sTags(nFrame).StripNumber] ); + sTags(nFrame).StripNumber = 1 + sTags(nFrame).StripNumber - idx; + end + end + end + end + + +%% ==================sub-functions that reads an IFD entry:=================== + + function [entry_tag, entry_val, entry_cnt] = readIFDentry(strTagSizeClass, nInlineBytes) + + buffer = fread(TIF.file, 2, 'uint16', TIF.ByteOrder); + entry_tag = buffer(1); + tiffType = buffer(2); + entry_cnt = fread(TIF.file, 1, strTagSizeClass, TIF.ByteOrder); + + try + nbBytes = nbBytesMap(tiffType); + matlabType = matlabTypeMap{tiffType}; + catch ME + if strcmp(ME.identifier, 'MATLAB:badsubscript') + error('tiff type %i not supported', tiffType); + else + rethrow(ME); + end + end + + if nbBytes * entry_cnt > nInlineBytes + % next field contains an offset + fpos = fread(TIF.file, 1, strTagSizeClass, TIF.ByteOrder); + file_seek(fpos); + end + + if entry_tag == 33629 % metamorph stack plane specifications + entry_val = fread(TIF.file, 6 * entry_cnt, matlabType, TIF.ByteOrder); + + elseif entry_tag == 34412 % TIF_CZ_LSMINFO + entry_val = readLSMinfo(); + + elseif tiffType == 5 % TIFF 'rational' type + val = fread(TIF.file, 2 * entry_cnt, matlabType, TIF.ByteOrder); + entry_val = val(1:2:end) ./ val(2:2:end); + + else + entry_val = fread(TIF.file, entry_cnt, matlabType, TIF.ByteOrder)'; + end + + end + + +%% ==============partial-parse of LSM info: + + function R = readLSMinfo() + + % Read part of the LSM info table version 2 + % this provides only very partial information, since the offset indicate that + % additional data is stored in the file + + R.MagicNumber = sprintf('0x%09X',fread(TIF.file, 1, 'uint32', TIF.ByteOrder)); + S.StructureSize = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.DimensionX = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.DimensionY = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.DimensionZ = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.DimensionChannels = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.DimensionTime = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.IntensityDataType = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.ThumbnailX = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.ThumbnailY = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.VoxelSizeX = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.VoxelSizeY = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.VoxelSizeZ = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.OriginX = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.OriginY = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.OriginZ = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + R.ScanType = fread(TIF.file, 1, 'uint16', TIF.ByteOrder); + R.SpectralScan = fread(TIF.file, 1, 'uint16', TIF.ByteOrder); + R.DataType = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetVectorOverlay = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetInputLut = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetOutputLut = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetChannelColors = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + R.TimeInterval = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + S.OffsetChannelDataTypes = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetScanInformatio = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetKsData = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetTimeStamps = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetEventList = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetRoi = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetBleachRoi = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + S.OffsetNextRecording = fread(TIF.file, 1, 'uint32', TIF.ByteOrder); + + % There is more information stored in this table, which is skipped here + + % read real acquisition times: + if ( S.OffsetTimeStamps > 0 ) + + status = fseek(TIF.file, S.OffsetTimeStamps, -1); + if status == -1 + warning('tiffread:TimeStamps', 'Could not locate LSM TimeStamps'); + return; + end + + StructureSize = fread(TIF.file, 1, 'int32', TIF.ByteOrder); %#ok + NumberTimeStamps = fread(TIF.file, 1, 'int32', TIF.ByteOrder); + for i=1:NumberTimeStamps + R.TimeStamp(i) = fread(TIF.file, 1, 'float64', TIF.ByteOrder); + end + + %calculate elapsed time from first acquisition: + R.TimeOffset = R.TimeStamp - R.TimeStamp(1); + + end + + % anything else assigned to S is discarded + + end + +end \ No newline at end of file diff --git a/downloaded/bluewhitered.m b/downloaded/bluewhitered.m new file mode 100644 index 0000000..2f59c4a --- /dev/null +++ b/downloaded/bluewhitered.m @@ -0,0 +1,122 @@ +function newmap = bluewhitered(m) +%BLUEWHITERED Blue, white, and red color map. +% BLUEWHITERED(M) returns an M-by-3 matrix containing a blue to white +% to red colormap, with white corresponding to the CAXIS value closest +% to zero. This colormap is most useful for images and surface plots +% with positive and negative values. BLUEWHITERED, by itself, is the +% same length as the current colormap. +% +% Examples: +% ------------------------------ +% figure +% imagesc(peaks(250)); +% colormap(bluewhitered(256)), colorbar +% +% figure +% imagesc(peaks(250), [0 8]) +% colormap(bluewhitered), colorbar +% +% figure +% imagesc(peaks(250), [-6 0]) +% colormap(bluewhitered), colorbar +% +% figure +% surf(peaks) +% colormap(bluewhitered) +% axis tight +% +% See also HSV, HOT, COOL, BONE, COPPER, PINK, FLAG, +% COLORMAP, RGBPLOT. + + +if nargin < 1 + m = size(get(gcf,'colormap'),1); +end + + +bottom = [0 0 0.5]; +botmiddle = [0 0.5 1]; +middle = [1 1 1]; +topmiddle = [1 0 0]; +top = [0.5 0 0]; + +% Find middle +lims = get(gca, 'CLim'); + +% Find ratio of negative to positive +if (lims(1) < 0) & (lims(2) > 0) + % It has both negative and positive + % Find ratio of negative to positive + ratio = abs(lims(1)) / (abs(lims(1)) + lims(2)); + neglen = round(m*ratio); + poslen = m - neglen; + + % Just negative + new = [bottom; botmiddle; middle]; + len = length(new); + oldsteps = linspace(0, 1, len); + newsteps = linspace(0, 1, neglen); + newmap1 = zeros(neglen, 3); + + for i=1:3 + % Interpolate over RGB spaces of colormap + newmap1(:,i) = min(max(interp1(oldsteps, new(:,i), newsteps)', 0), 1); + end + + % Just positive + new = [middle; topmiddle; top]; + len = length(new); + oldsteps = linspace(0, 1, len); + newsteps = linspace(0, 1, poslen); + newmap = zeros(poslen, 3); + + for i=1:3 + % Interpolate over RGB spaces of colormap + newmap(:,i) = min(max(interp1(oldsteps, new(:,i), newsteps)', 0), 1); + end + + % And put 'em together + newmap = [newmap1; newmap]; + +elseif lims(1) >= 0 + % Just positive + new = [middle; topmiddle; top]; + len = length(new); + oldsteps = linspace(0, 1, len); + newsteps = linspace(0, 1, m); + newmap = zeros(m, 3); + + for i=1:3 + % Interpolate over RGB spaces of colormap + newmap(:,i) = min(max(interp1(oldsteps, new(:,i), newsteps)', 0), 1); + end + +else + % Just negative + new = [bottom; botmiddle; middle]; + len = length(new); + oldsteps = linspace(0, 1, len); + newsteps = linspace(0, 1, m); + newmap = zeros(m, 3); + + for i=1:3 + % Interpolate over RGB spaces of colormap + newmap(:,i) = min(max(interp1(oldsteps, new(:,i), newsteps)', 0), 1); + end + +end +% +% m = 64; +% new = [bottom; botmiddle; middle; topmiddle; top]; +% % x = 1:m; +% +% oldsteps = linspace(0, 1, 5); +% newsteps = linspace(0, 1, m); +% newmap = zeros(m, 3); +% +% for i=1:3 +% % Interpolate over RGB spaces of colormap +% newmap(:,i) = min(max(interp1(oldsteps, new(:,i), newsteps)', 0), 1); +% end +% +% % set(gcf, 'colormap', newmap), colorbar \ No newline at end of file diff --git a/downloaded/imagescnan.m b/downloaded/imagescnan.m new file mode 100644 index 0000000..f895b5f --- /dev/null +++ b/downloaded/imagescnan.m @@ -0,0 +1,477 @@ +function [H,HNAN] = imagescnan(varargin) +%IMAGESCNAN Scale data and display as image with uncolored NaNs. +% +% SYNTAX: +% imagescnan(U) +% imagescnan(U,...,'NanColor',CNAN) +% imagescnan(U,...,'NanMask',MNAN) +% imagescnan(U,...,IOPT) +% imagescnan(X,Y,U,...) +% [H,HNAN] = imagescnan(...); +% +% INPUT: +% U - 2 dimensional N-by-M image or N-by-M-by-3 RGB image. +% X - 2 extrema X-axis data; or the M values; or the N-by-M values +% as obtained from MESHGRID (see DESCRIPTION below). +% DEFAULT: [1 N] +% Y - 2 extrema X-axis data; or the N values; or the N-by-M values +% as obtained from MESHGRID (see DESCRIPTION below). +% DEFAULT: [1 M] +% CNAN - Color for the NaNs elements. May be a char specifier or an [R +% G B] triplet specifying the color. +% DEFAULT: invisible (axes background color) +% MNAN - Elements to be ignored besides not finite values. May be an +% scalar or a logical M-by-N matrix indicating the elements to +% be ignored. +% DEFAULT: [] +% IOPT - IMAGE function normal optional pair arguments like +% ('Parent',H) or/and CLIM like optional last argument as in +% IMAGESC. +% DEFAULT: none +% +% OUTPUT (all optional): +% H - Image handle +% HNAN - Handle of every ignored (NaN) value colored patch. +% +% DESCRIPTION: +% MATLAB function IMAGESC does not work properly with NaNs. This +% programs deals with this problem by including colored patches over +% this elements and maybe others specyfied by the user with MNAN. +% +% Besides, those functions does not work properly with X,Y values +% variable interval, but this functions does it by generating a whole +% new image of several rectangular patches, but whose centers may not +% lay in the specified coordinate (see NOTE below). This functionality +% is experimental and not recommended (see ADDITIONAL NOTES inside this +% program). +% +% In previous release, 2-dim input images were transformed into a +% 3-dim RGB image. This is not used anymore (see ADDITIONAL NOTES +% inside this file). +% +% NOTE: +% * Optional inputs use its DEFAULT value when not given or []. +% * Optional outputs may or not be called. +% * If X is a two element vector, min(X) will be the coordinate of the +% first column and max(X) of the last column. +% * If Y is a two element vector, min(Y) will be the coordinate of the +% first row and max(Y) of the last row. +% * If vector X-axis is decreasing U=fliplr(U) will be used. +% * If vector Y-axis is decreasing U=flipud(U) will be used. +% * When X or Y do not have a constant increasing/decreasing step, the +% vertices of the color rectangules are set in the middle of each +% pair of coordinates. For this reason its center may not lay on the +% specified coordinate, except on the coordinates at the edges where +% it always lays on the center. +% * To get a non-scaled image (IMAGE instead of IMAGESC) use: +% >> H = imagescnan(...); +% >> set(H,'CDataMapping','direct') +% * ADDITIONAL NOTES are included inside this file. +% +% EXAMPLE: +% % Compares with normal IMAGESC: +% N = 100; +% PNaNs = 0.10; +% U = peaks(N); +% U(round(1 + (N^2-1).*rand(N^2*PNaNs,1))) = NaN; % Adds NaNs +% subplot(221), imagesc(U) +% title('With IMAGESC: ugly NaNs') +% subplot(222), imagescnan(U) +% title('With IMAGESCNAN: uncolored NaNs') +% % Compares with SPY: +% subplot(223), spy(isnan(U)) +% title('SPY(isnan(U))') +% subplot(224), imagescnan(isnan(U),'NaNMask',0), axis equal tight +% title('SPY with IMAGESCNAN') +% +% SEE ALSO: +% IMAGE, IMAGESC, COLORBAR, IMREAD, IMWRITE +% and +% CMAPPING, CBFREEZE by Carlos Vargas +% at http://www.mathworks.com/matlabcentral/fileexchange +% +% +% --- +% MFILE: imagescnan.m +% VERSION: 2.1 (Aug 20, 2009) (download) +% MATLAB: 7.7.0.471 (R2008b) +% AUTHOR: Carlos Adrian Vargas Aguilera (MEXICO) +% CONTACT: nubeobscura@hotmail.com + +% ADDITIONAL NOTES: +% * I keep getting a kind of BUG with the edges of the patched NaNs. I +% added two NOTE inside this program that may fix this problem. +% Another way is to convert the intensity matrix U into RGB colors by +% using the CMAPPING function, as used by the first version of this +% program. +% * Besides, if the matrix is too large, sometimes there is an +% undocumented failure while drawing the patch NaNs. Is recommended +% to use U = cmapping(U,[],'k','discrete') instead, and change the +% CLIM to [min(U(:)) max(U(:))]. +% * The use of not homogeneous step interval X,Y axes is not +% recommended because the program tries to put its value in the +% middle of the colored rectangule (as IMAGESC does) and soetimes the +% result may not be what the user wants. So this is for experimental +% use only. + +% REVISIONS: +% 1.0 Released. (Jun 30, 2008) +% 1.1 Fixed bug when CAXIS used. Colorbar freezed colormap. Fixed +% bug in color vector input (Found by Greg King) and now +% accets RGB image as input. (Jul 14, 2008) +% 2.0 Totally rewritten code. Do not converts to RGB anymore. Do not +% freezes the colormap anymore. Do not output any colorbar. New +% X and Y variable steps accepted input. Now uses patches. (Jun +% 08, 2009) +% 2.1 Fixed bug with RGB input. Added a NOTE about the use of +% CMAPPING. (Aug 20, 2009) + +% DISCLAIMER: +% imagescnan.m is provided "as is" without warranty of any kind, under +% the revised BSD license. + +% Copyright (c) 2008,2009 Carlos Adrian Vargas Aguilera + + +% INPUTS CHECK-IN +% ------------------------------------------------------------------------- + +% Initializes: +X = []; +Y = []; +CNAN = []; +MNAN = []; +ha = []; + +% Checks number of inputs: +if nargin<1 + error('CVARGAS:imagescnan:notEnoughInputs',... + 'At least 1 input is required.') +elseif nargout>2 + error('CVARGAS:imagescnan:tooManyOutputs',... + 'At most 2 outputs are allowed.') +end + +% Gets X,Y,U: +if ((nargin==1) || (nargin==2)) + U = varargin{1}; + varargin(1) = []; +else + if (isnumeric(varargin{1}) && isnumeric(varargin{2}) && ... + isnumeric(varargin{3})) + X = varargin{1}; + Y = varargin{2}; + U = varargin{3}; + varargin(1:3) = []; + else + U = varargin{1}; + varargin(1) = []; + end +end + +% Check U: +ndim = ndims(U); +if (ndim==2) + [M,N] = size(U); + O = 1; +elseif (ndim==3) + [M,N,O] = size(U); + if (O~=3) + error('CVARGAS:imagescnan:incorrectRgbImage',... + 'RGB image must be of size M-by-N-by-3.') + end +else + error('CVARGAS:imagescnan:incorrectImageSize',... + 'Image must be 2-dimensional or a 3-dim RGB image.') +end + +% Check X: +aequal = true; % Equal intervals on x-axis? +dX = []; +if isempty(X) + X = [1 N]; +else + if (ndims(X)>2) + error('CVARGAS:imagescnan:incorrectXDims',... + 'X must be a vector or a matrix as a result of MESHGRID.') + end + if any(~isfinite(X(:))) + error('CVARGAS:imagescnan:incorrectXValue',... + 'X elements must be numeric and finite.') + end + [Mx,Nx] = size(X); + if ((Mx*Nx)==2) + if X(2)(eps*max(abs(dX(:)))*1000)) + error('CVARGAS:imagescnan:incorrectXMatrix',... + 'X matrix must be as generated by MESHGRID.') + end + X = X(1,:); + elseif (~any([Mx Nx]==1) && ~((Mx*Nx)==N)) + error('CVARGAS:imagescnan:incorrectXSize',... + 'X must be an scalar or a matrix.') + end + % Forces ascending x-axis: + [X,I] = sort(X(:).'); + for k = 1:O % Fixed bug Aug 2009 + U(:,:,k) = U(:,I,k); + end + clear I + % Checks equal intervals: + dX = diff(X); + if any(abs(dX(1)-dX(2:end))>(eps*max(dX)*1000)) + if aequal + aequal = false; + end + else + X = [X(1) X(end)]; + dX = []; + end + end +end + +% Check Y: +dY = []; +if isempty(Y) + Y = [1 M]; +else + if (ndims(Y)>2) + error('CVARGAS:imagescnan:incorrectYDims',... + 'Y must be a vector or a matrix as a result of MESHGRID.') + end + if any(~isfinite(Y(:))) + error('CVARGAS:imagescnan:incorrectYValue',... + 'Y elements must be numeric and finite.') + end + [My,Ny] = size(Y); + if ((My*Ny)==2) + if Y(2)(eps*max(abs(dY(:)))*1000)) + error('CVARGAS:imagescnan:incorrectYMatrix',... + 'Y matrix must be as generated by MESHGRID.') + end + Y = Y(:,1); + elseif (~any([My Ny]==1) && ~((My*Ny)==M)) + error('CVARGAS:imagescnan:incorrectYSize',... + 'Y must be an scalar or a matrix.') + end + % Forces ascending y-axis: + [Y,I] = sort(Y(:).'); + for k = 1:O % Fixed bug Aug 2009 + U(:,:,k) = U(I,:,k); + end + clear I + % Checks equal intervals: + dY = diff(Y); + if any(abs(dY(1)-dY(2:end))>(eps*max(dY)*1000)) + if aequal + aequal = false; + end + else + Y = [Y(1) Y(end)]; + dY = []; + end + end +end + +% Checks varargin: +ind = []; +Nopt = length(varargin); +for k = 1:Nopt-1 + if (~isempty(varargin{k}) && ischar(varargin{k})) + if strncmpi(varargin{k},'NanColor',4) + CNAN = varargin{k+1}; + ind = [ind k k+1]; + elseif strncmpi(varargin{k},'NanMask',4) + MNAN = varargin{k+1}; + ind = [ind k k+1]; + elseif (strncmpi(varargin{k},'Parent',2) && isempty(CNAN)) + try + CNAN = get(varargin{k+1},'Color'); + ha = varargin{k+1}; + catch + error('CVARGAS:imagescnan:incorrectParentHandle',... + '''Parent'' must be a valid axes handle.') + end + end + end +end +varargin(ind) = []; +Nargin = length(varargin); + +% Check ha: +if isempty(ha) + ha = gca; +end + +% Check CNAN: +if isempty(CNAN) + CNAN = get(ha,'Color'); +elseif ischar(CNAN) + switch lower(CNAN) + case 'y', CNAN = [1 1 0]; + case 'm', CNAN = [1 0 0]; + case 'c', CNAN = [0 1 1]; + case 'r', CNAN = [1 0 0]; + case 'g', CNAN = [0 1 0]; + case 'b', CNAN = [0 0 1]; + case 'w', CNAN = [1 1 1]; + case 'k', CNAN = [0 0 0]; + otherwise + error('CVARGAS:imagescnan:incorrectNancString',... + 'Color string must be a valid color identifier. One of ''ymcrgbwk''.') + end +elseif isnumeric(CNAN) && (length(CNAN)==3) + CNAN = CNAN(:).'; % Forces row vector. +else + error('CVARGAS:imagescnan:incorrectNancInput',... + 'Not recognized CNAN input.') +end + +% Check MNAN: +if isempty(MNAN) + MNAN = any(~isfinite(U),3); +else + if (ndims(MNAN)==2) + [Mm,Nm] = size(MNAN); + if ((Mm*Nm)==1) + MNAN = (any(~isfinite(U),3) | any(U==MNAN,3)); + elseif ((Mm==M) && (Nm==N) && islogical(MNAN)) + MNAN = (any(~isfinite(U),3) | MNAN); + else + error('CVARGAS:imagescnan:incorrectNanmSize',... + 'MNAN must be an scalar or a logical matrix of size M-by-N.') + end + else + error('CVARGAS:imagescnan:incorrectNanmDims',... + 'MNAN must be an scalar or a matrix.') + end +end + +% ------------------------------------------------------------------------- +% MAIN +% ------------------------------------------------------------------------- + +% Generates the image: +if aequal + % IMAGESC way. + H = imagesc(X,Y,U,varargin{:}); + +else + % PATCH way. + + % Check clim: + if (rem(Nargin,2)==1) + clim = varargin{end}; + varargin(end) = []; + if ((length(clim)~=2) || (clim(1)>clim(2))) + error('CVARGAS:imagescnan:incorrectClimInput',... + 'clim must be a 2 element increasing vector.') + end + else + clim = []; + end + + % Generates vertices between coordinates (coordinates may not be at the + % center of these vertices): + if (length(X)~=N) + X = (0:N-1)*((X(2)-X(1))/(N-1)) + X(1); + end + if (length(Y)~=M) + Y = (0:M-1)*((Y(2)-Y(1))/(M-1)) + Y(1); + end + if isempty(dX) + dX = diff(X); + end + if isempty(dY) + dY = diff(Y); + end + [X,Y] = meshgrid([X(1)-dX(1)/2 X+dX([1:N-1 N-1])/2],... + [Y(1)-dY(1)/2 Y+dY([1:M-1 M-1])/2]); + + % Generates faces: + ind = (1:(M+1)*N)'; + ind(M+1:M+1:end) = []; + + % Generates patches: + H = patch(... + 'Vertices' ,[X(:) Y(:)],... + 'Faces' ,[ind ind+1 ind+M+2 ind+M+1],... + 'FaceVertexCData',U(:),... + 'FaceColor' ,'flat',... + 'EdgeColor' ,'none',... % NOTE: Sometimes this is not required. + varargin{:}); + set(ha,... + 'YDir' ,'reverse',... + 'View' ,[0 90],... + 'Box' ,'on',... + 'Layer','top') + axis(ha,'tight') + + % Sets clim: + if ~isempty(clim) + set(ha,'CLim',clim) + else + set(ha,'CLimMode','auto') + end + +end + +% Adds NaNs patches: +if any(MNAN(:)) + if aequal + % dX and dY is constant: + [MNAN,NNAN] = ind2sub([M,N],find(MNAN)); + Nnan = length(MNAN); + dX = (X(2)-X(1))/(N-1)/2; + dY = (Y(2)-Y(1))/(M-1)/2; + HNAN = patch(repmat((X(1)+(NNAN(:)'-1)*(2*dX)),4,1) + ... + (repmat([-1 1 1 -1]'*dX,1,Nnan)),... + repmat((Y(1)+(MNAN(:)'-1)*(2*dY)),4,1) + ... + (repmat([1 1 -1 -1]'*dY,1,Nnan)),... + CNAN,... + 'EdgeColor',CNAN,... 'EdgeColor','none',... + varargin{1:Nargin-rem(Nargin,2)}); + else + % dX and/or dY is not constant: + MNAN = find(MNAN); + HNAN = patch(... + 'Vertices' ,[X(:) Y(:)],... + 'Faces' ,[ind(MNAN) ind(MNAN)+1 ind(MNAN)+M+2 ind(MNAN)+M+1],... + 'FaceColor' ,CNAN,... + 'EdgeColor' ,'none',... 'EdgeColor',CNAN,... % NOTE: may be better? + varargin{:}); + end +else + HNAN = []; +end + + +% OUTPUTS CHECK-OUT +% ------------------------------------------------------------------------- + +% Clears outputs?: +if (nargout==0) + clear H +end + + +% [EOF] imagescnan.m \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/.gitignore b/downloaded/matlab-networks-toolbox-master/.gitignore new file mode 100644 index 0000000..81349a0 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/.gitignore @@ -0,0 +1 @@ +*.m~ \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/BFS.m b/downloaded/matlab-networks-toolbox-master/BFS.m new file mode 100644 index 0000000..4c20e87 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/BFS.m @@ -0,0 +1,27 @@ +%################################################################## +% Implementation of breadth-first-search of a graph. +% Returns a breadth-first-search tree. +% +% INPUTs: adjacency list (nxn), start node index +% OUTPUTs: BFS tree, in adjacency list {} format (directed) +% +% GB: last updated, Oct 7 2012 +%################################################################## + +function T=BFS(adjL,i0) + +discovered=[i0]; +q=[i0]; +T=cell(length(adjL),1); + +while not(isempty(q)) + j=q(1); q=q(2:length(q)); % pop the front + neigh=adjL{j}; + for nn=1:length(neigh) + if isempty(find(discovered==neigh(nn))) + T{j}=[T{j}, neigh(nn)]; + discovered=[discovered, neigh(nn)]; + q=[q, neigh(nn)]; + end + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/DoddsWattsSabel.m b/downloaded/matlab-networks-toolbox-master/DoddsWattsSabel.m new file mode 100644 index 0000000..64886b3 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/DoddsWattsSabel.m @@ -0,0 +1,60 @@ +%################################################################## +% Add random cross-links on top of a perfect hierarchy. +% Non-backbone edges are added with probability +% P(i,j)=e^(-Dij/lambda)*e^(-xij/ksi), +% where Dij is the level of the lowest common ancestor +% and xij is the "organizational" distance +% Source: Dodds, Watts, Sabel, "Information exchange and the +% robustness of organizational networks", PNAS 100 (21): 12516-12521 +% +% INPUTs: number of nodes (N), tree branch factor (b), +% m - number of additional edges to add, +% parameters lambda (lam) and ksi in [0,inf) +% OUTPUTs: adjacency matrix of randomized hierarchy, NxN +% +% Other routines used: edgeL2adj.m, canonicalNets.m, dijkstra.m +% GB: last updated, November 23 2012 +%################################################################## + +function adj = DoddsWattsSabel(N,b,m,lam,ksi) + +% construct a tree with N nodes and branch factor b +adj0=edgeL2adj( canonicalNets(N,'tree',b) ); % backbone adjacency matrix + +adj=adj0; +edges=0; + +while edges0; continue; end + + % find di,dj and Dij + [d1,path1]=dijkstra(adj0,ind1,1); % adjacency, source, target + [d2,path2]=dijkstra(adj0,ind2,1); + + for p=1:length(path1) + p1=path1(p); + p2=find(path2==p1); + if length(p2)>0 % if p1 in path2 + + di=p-1; dj=p2-1; % di+dj is the the distance from ind1 + % to ind2 along the backbone hierarchy + Dij=length(path1(p:length(path1)))-1; % the level of the + % highest common + % node on the path + % to the root + break + end + end + xij=sqrt(di^2+dj^2-2); + + % connect ind1 and ind2 with prob. e^(-Dij/lam)e^(-xij/ksi)) + if rand numNodes([0 1 1; 1 0 1; 1 1 0]) +ans = 3 + +Authorship +---------- +This code was originally posted by Gergana Bounova. It is undergoing continuous expansion and development. Thank you for all comments so far! Collaborators are very welcome. Contact via github for comments, questions, suggestions, corrections or simply join. + +Organization +------------ +The functions are organized in 11 categories: basic routines, diagnostic routines, conversion routines, centralities, distances, simple motif routines, linear algebra functions, modularity routines, graph construction models, visualization and auxiliary. These categories reflect roles/functionality and topics in the literature, but they are arbitrary, and mostly used for documentation purposes. + +Documentation +------------- +Documentation is available in the Functions Manual (https://github.com/aeolianine/octave-networks-toolbox/blob/master/functions_manual.pdf). The manual contains general background information, function headers, code examples, and references. For some functions, additional background, definitions or derivations are included. + +License/Copyright +----------------- +Copyright (c) 2013, Massachusetts Institute of Technology. +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +- Neither the name of the Massachusetts Institute of Technology nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/addEdgeWeights.m b/downloaded/matlab-networks-toolbox-master/addEdgeWeights.m new file mode 100644 index 0000000..a5e7da1 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/addEdgeWeights.m @@ -0,0 +1,23 @@ +function elc=addEdgeWeights(el) +%ADDEDGEWEIGHTS Add multiple edges in an edge list +% +% @input el, original (non-compact) edge list +% @output elc, final compact edge list (no row repetitions) +% +% Example: [1 2 2; 2 2 1; 4 5 1] -> [1 2 3; 4 5 1] + +% Updated: fixed visited vector for MATLAB. +% IB: last updated, 3/23/2014 + +el2=[el(:,1), el(:,2)]; % make the edge list searchable w/o the weights +visited=[0, 0]; % mark visited edges + +elc=[]; +for e=1:size(el,1) + if sum(ismember(visited,el2(e,:),'rows'))==0 % if not visited yet + ind=ismember(el2,el2(e,:),'rows'); + ind=find(ind==1); % these are all the ocurrences of el(e,:) + elc=[elc; el(e,1), el(e,2), sum(el(ind,3))]; + visited=[visited; el2(e,:)]; + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adj2adjL.m b/downloaded/matlab-networks-toolbox-master/adj2adjL.m new file mode 100644 index 0000000..0f26b8e --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adj2adjL.m @@ -0,0 +1,16 @@ +%################################################################## +% Convert an adjacency graph representation to an adjacency list. +% Note 1: Valid for a general (directed, not simple) graph. +% Note 2: Edge weights (if any) get lost in the conversion. +% +% INPUT: an adjacency matrix, nxn +% OUTPUT: cell structure for adjacency list: x{i_1}=[j_1,j_2 ...] +% +% GB: last updated, September 24 2012 +%################################################################## + +function L = adj2adjL(adj) + +L=cell(length(adj),1); + +for i=1:length(adj); L{i}=find(adj(i,:)>0); end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adj2edgeL.m b/downloaded/matlab-networks-toolbox-master/adj2edgeL.m new file mode 100644 index 0000000..1afc2ec --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adj2edgeL.m @@ -0,0 +1,19 @@ +%################################################################## +% Convert adjacency matrix (nxn) to edge list (mx3) +% +% INPUTS: adjacency matrix: nxn +% OUTPUTS: edge list: mx3 +% +% GB: last updated, Sep 24, 2012 +%################################################################## + +function el=adj2edgeL(adj) + +n=length(adj); % number of nodes +edges=find(adj>0); % indices of all edges + +el=[]; +for e=1:length(edges) + [i,j]=ind2sub([n,n],edges(e)); % node indices of edge e + el=[el; i j adj(i,j)]; +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adj2inc.m b/downloaded/matlab-networks-toolbox-master/adj2inc.m new file mode 100644 index 0000000..0c592d5 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adj2inc.m @@ -0,0 +1,52 @@ +%################################################################## +% Convert adjacency matrix to an incidence matrix +% Note: Valid for directed/undirected, simple/not simple graphs +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: incidence matrix: n x m (number of edges) +% +% Other routines used: isDirected.m +% GB: last updated, Sep 25 2012 +%################################################################## + +function inc = adj2inc(adj) + +n=length(adj); % number of nodes + +inc=[]; % initialize incidence matrix + +if isDirected(adj) + + for i=1:n + for j=1:n + + % handle self-loops + if i==j; for x=1:adj(i,j); inc=[inc; zeros(1,length(1:i-1)), 1,zeros(1,length(i+1:n))]; end; continue; end + + for x=1:adj(i,j) % add multiple edges if any + if i0; % make all edges weight 1 +adj = symmetrize(adj); +adj = adj - diag(diag(adj)); % clear the diagonal (selfloops) \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adj2str.m b/downloaded/matlab-networks-toolbox-master/adj2str.m new file mode 100644 index 0000000..1f6f8e3 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adj2str.m @@ -0,0 +1,28 @@ +%################################################################## +% Convert an adjacency matrix to a one-line string representation of a graph. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: string +% +% Note 1: The nomenclature used to construct the string is arbitrary. +% Here we use .i1.j1.k1,.i2.j2.k2,.... +% In '.i1.j1.k1,.i2.j2.k2,....', +% "dot" signifies new neighbor, "comma" next node +% Note 2: Edge weights are not reflected in the string representation. +% Example: [0 1 1; 0 0 0; 0 0 0] <=> .2.3,,, +% +% Other routines used: kneighbors.m +% GB: last updated, Sep 25 2012 +%################################################################## + + +function str=adj2str(adj) + +str=''; +n=length(adj); + +for i=1:n + neigh=kneighbors(adj,i,1); + for k=1:length(neigh); str=strcat(str,'.',num2str(neigh(k))); end + str=strcat(str,','); % close this node's neighbors list +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adjL2adj.m b/downloaded/matlab-networks-toolbox-master/adjL2adj.m new file mode 100644 index 0000000..3445f74 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adjL2adj.m @@ -0,0 +1,17 @@ +%################################################################## +% Convert an adjacency list to an adjacency matrix. +% +% INPUTS: adjacency list: length n, where L{i_1}=[j_1,j_2,...] +% OUTPUTS: adjacency matrix nxn +% +% Note: Assume that if node i has no neighbours, then L{i}=[]; +% GB: last updated, Sep 25 2012 +%################################################################## + +function adj=adjL2adj(adjL) + +adj = zeros(length(adjL)); + +for i=1:length(adjL) + for j=1:length(adjL{i}); adj(i,adjL{i}(j))=1; end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/adjL2edgeL.m b/downloaded/matlab-networks-toolbox-master/adjL2edgeL.m new file mode 100644 index 0000000..e9142c5 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/adjL2edgeL.m @@ -0,0 +1,15 @@ +%################################################################## +% Convert adjacency list to an edge list. +% +% INPUTS: adjacency list +% OUTPUTS: edge list, mx3 (m - number of edges) +% +% GB: last updated, Sep 25 2012 +%################################################################## + +function el = adjL2edgeL(adjL) + +el = []; % initialize edge list +for i=1:length(adjL) + for j=1:length(adjL{i}); el=[el; i, adjL{i}(j), 1]; end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/algebraicConnectivity.m b/downloaded/matlab-networks-toolbox-master/algebraicConnectivity.m new file mode 100644 index 0000000..165c9b8 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/algebraicConnectivity.m @@ -0,0 +1,15 @@ +%################################################################## +% The algebraic connectivity of a graph: +% the second smallest eigenvalue of the Laplacian +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: algebraic connectivity +% +% Other routines used: graphSpectrum.m +% GB: last updated, Oct 10 2012 +%################################################################## + +function a=algebraicConnectivity(adj) + +s=graphSpectrum(adj); +a=s(length(s)-1); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/assert_mat.m b/downloaded/matlab-networks-toolbox-master/assert_mat.m new file mode 100644 index 0000000..8f5fc66 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/assert_mat.m @@ -0,0 +1,30 @@ +function [ ] = assert_mat( A, B ) +%ASSERT_MAT Overloading of assert statement for arbitrary-dimensioned data +% This method does not throw an error, it only outputs an error to the +% screen. It is intended for handling 'assert' in the testAllFunctions +% method not supported on MATLAB. + +% @input A, an arbitrarily-dimensioned data +% @input B, (optional) another arbitarily-dimensioned data, the same size as A. +% @output NONE (note: usually there would be a boolean response, but the +% testAllFunctions script doesn't ';' the output so this is cleaner). + + +if(~exist('B', 'var')) + ret = all(A(:)); +else + if(iscell(A)) + ret = all(cellfun(@all, cellfun(@eq, A, B, 'UniformOutput', 0))); + else + ret = all(A(:) == B(:)); + end + + +end + +if(~ret) + fprintf('Error\n'); +end + +end + diff --git a/downloaded/matlab-networks-toolbox-master/aveNeighborDeg.m b/downloaded/matlab-networks-toolbox-master/aveNeighborDeg.m new file mode 100644 index 0000000..651bf12 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/aveNeighborDeg.m @@ -0,0 +1,7 @@ +function [ ret ] = aveNeighborDeg( A ) +%aveNeighborDeg Alias of averageNeighborDegree +% See averageNeighborDegree for info. +ret = averageNeighborDegree(A); + +end + diff --git a/downloaded/matlab-networks-toolbox-master/avePathLength.m b/downloaded/matlab-networks-toolbox-master/avePathLength.m new file mode 100644 index 0000000..8505e41 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/avePathLength.m @@ -0,0 +1,7 @@ +function [ l, path_lengths ] = avePathLength( A ) +%AVEPATHLENGTH An alias of averagePathLength +% See averagePathLength for more information. +[l, path_lengths] = averagePathLength(A); + +end + diff --git a/downloaded/matlab-networks-toolbox-master/averageDegree.m b/downloaded/matlab-networks-toolbox-master/averageDegree.m new file mode 100644 index 0000000..922fbb9 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/averageDegree.m @@ -0,0 +1,17 @@ +%################################################################## +% Computes the average degree of a node in a graph, defined as +% 2 times the number of edges divided by the number of nodes (every edge is counted in degrees twice). +% +% Inputs: adjacency matrix, nxn +% Outputs: float, the average degree, a number between 0 and max(sum(adj)) +% +% Note: The average degree is related to the link density, namely: +% link_density = ave_degree/(n-1), where n is the number of nodes +% +% Other routines used: numNodes.m, numEdges.m +% GB: last update, September 20, 2012 +%################################################################## + +function k=averageDegree(adj) + +k=2*numEdges(adj)/numNodes(adj); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/averageNeighborDegree.m b/downloaded/matlab-networks-toolbox-master/averageNeighborDegree.m new file mode 100644 index 0000000..ff0cadc --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/averageNeighborDegree.m @@ -0,0 +1,27 @@ +function av=averageNeighborDegree(A) +%AVERAGENEIGHBORDEGREE Compute the average degree of neighboring nodes for every vertex. +% Note: Works for weighted degrees (graphs) also. +% +% @input A, NxN adjacency matrix +% @output av, a 1xN vector of average neighbor degree +% +% Other routines used: degrees.m, kneighbors.m + +% Updated : Changed for function name consistency + +% IB: last updated, 3/23/14 + + +av=zeros(1,length(A)); % initialize output vector +[deg,~,~]=degrees(A); + +for i=1:length(A) % across all nodes + + neigh=kneighbors(A,i,1); % neighbors of i, one link away + if isempty(neigh) + av(i)=0; + continue; + end + av(i)=sum(deg(neigh))/deg(i); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/averagePathLength.m b/downloaded/matlab-networks-toolbox-master/averagePathLength.m new file mode 100644 index 0000000..5178da1 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/averagePathLength.m @@ -0,0 +1,29 @@ +function [l, path_lengths] = averagePathLength(A) +%AVERAGEPATHLENGTH Compute average path length for a network - the average shortest path +% Note: works for directed/undirected networks +% +% @input A, an NxN adjacency matrix +% @output l, a scalar of the average shortest path length +% @output path_lengths, a 1xN vector of shortest path lengths for each node + +% INPUTS: adjacency (or weights/distances) matrix, nxn +% OUTPUTS: average path length, optional matrix of pairwise path lengths. +% +% Other routines used: simpleDijkstra.m + +% updated: Handled case where nodes are unreachable t.f. value goes to Inf. + +% IB: Last updated, 3/23/14 + + +n=size(A,1); + +d = zeros(n); + +for i=1:n + d(:, i) = simpleDijkstra(A, i); +end +path_lengths = d; +d = d(:); +d = d(d ~= Inf & d ~= 0); % not unreachable and not self +l = nanmean(d); % sum and average across everything but the diagonal \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/buildSmaxGraph.m b/downloaded/matlab-networks-toolbox-master/buildSmaxGraph.m new file mode 100644 index 0000000..3c1e70a --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/buildSmaxGraph.m @@ -0,0 +1,170 @@ +%################################################################## +% Construct the graph with the maximum possible s-metric, given the degree +% sequence; the s-metric is the sum of products of degrees across all edges +% Source: Li et al "Towards a Theory of Scale-Free Graphs" +% +% INPUTs: degree sequence: 1xn vector of positive integers (graphic) +% OUTPUTs: edge list of the s-max graph, mx3 +% +% GB: last updated, November 9 2012 +%################################################################## + +function gA=buildSmaxGraph(deg) + +didj=[]; +for ii=1:length(deg)-1 + for jj=ii+1:length(deg) + % [deg_i*deg_j, 'B', deg_i, deg_j, 'B', i, j] - 'B' for sorting purposes + didj=[didj; deg(ii)*deg(jj), 2, deg(ii), deg(jj), 2, ii,jj]; + end +end + +didj=sortrows(didj); +didj=didj(end:-1:1,:); % reverse to decreasing order + +w=deg; % number of remaining stubs - originally equals the degrees +[~,maxdegind]=max(deg); % the index of the maximum degree +A=[maxdegind]; +B = setdiff([1:length(deg)],maxdegind); + +wA=deg(maxdegind); % remaining stubs in A +dB=sum(deg(B)); % total degree of unattached vertices in B + +gA=[]; % initialize empty edge list + +while sum(w)>0 % while there are still stubs to connect + + % STEP 1 (LINK SELECTION) + if size(didj,1)==0 + if sum(w)>0 % connect all stubs left + + wstubs=[]; + cnt=1; + for ww=1:length(w) + while w(ww)>0 + wstubs=[wstubs; cnt, ww]; + w(ww)=w(ww)-1; + cnt=cnt+1; + end + end + + for xx=1:size(wstubs,1)/2 + n1=wstubs(xx,2); + n2=wstubs(xx+size(wstubs,1)/2,2); + + ind1=find(gA(:,1)==n1); + + if length(ind1)==0 + first_case=false; + else + ind2=find(gA(ind1,2)==n2); + if length(ind2)==0 + first_case=false; + else + first_case=true; + end + end + + ind2=find(gA(:,1)==n2); + if length(ind2)==0 + second_case=false; + else + ind1=find(gA(ind2,2)==n1); + if length(ind1)==0 + second_case=false; + else + second_case=true; + end + end + + if first_case %if [n1,n2,1] in gA and not(n1==n2): + gA=[gA; n1,n2,1]; + elseif second_case % if [n2,n1,1] in gA and not(n1==n2): + gA=[gA; n2,n1,1]; + elseif n1==n2 + gA=[gA; n1,n2,1]; + end + + end + end + return % gA + + end + + % eliminate zero stubs in didj + didj_new=[]; + for ii=1:size(didj,1) + if w(didj(ii,6))>0 & w(didj(ii,7))>0 + didj_new=[didj_new; didj(ii,:)]; + end + end + didj=didj_new; + clear didj_new + + if size(didj,1)==0; continue; end + + for ii=1:size(didj,1) + + edge=[didj(ii,6), didj(ii,7)]; + + if length(find(A==edge(1)))>0 & length(find(A==edge(2)))>0 + didj(ii,:)=[didj(ii,1),100,w(edge(1)),w(edge(2)),100,edge(1),edge(2)]; + elseif length(find(A==edge(1)))>0 & length(find(B==edge(2)))>0 + didj(ii,:)=[didj(ii,1),100,w(edge(1)),w(edge(2)),2,edge(1),edge(2)]; + elseif length(find(B==edge(1)))>0 & length(find(A==edge(2)))>0 + didj(ii,:)=[didj(ii,1),2,w(edge(1)),w(edge(2)),1,edge(1),edge(2)]; + didj(ii,:)=[didj(ii,1),100,w(edge(2)),w(edge(1)),2,edge(2),edge(1)]; + else + didj(ii,:)=[didj(ii,1),2,w(edge(1)),w(edge(2)),2,edge(1),edge(2)]; + end + + end + + didj=sortrows(didj); + didj=didj(end:-1:1,:); + link_select=[didj(1,6),didj(1,7)]; % select the first link that starts in A + + % STEP 2 (LINK ADDITION) + n1=link_select(1); + n2=link_select(2); + + % if (n1 in A and n2 in B) or (n1 in B and n2 in A) + if (length(find(A==n1))>0 & length(find(B==n2))>0) | (length(find(B==n1))>0 & length(find(A==n2))>0) + gA=[gA; n1, n2, 1]; + if length(find(A==n1))>0 & length(find(B==n2))>0 + B = setdiff(B,n2); + A=[A; n2]; + end + if length(find(B==n1))>0 & length(find(A==n2))>0 + B = setdiff(B,n1); + A=[A; n1]; + end + + w(n1)=w(n1)-1; + w(n2)=w(n2)-1; + wA=sum(w(A)); + dB=sum(deg(B)); + + didj=didj(2:size(didj,1),:); % remove link from top + + elseif length(find(A==n1))>0 & length(find(A==n2))>0 + % check the tree condition + if dB==2*length(B)-wA + didj=didj(2:size(didj,1),:); + + elseif wA==2 & length(B)>0 % results in a disconnected graph + didj=didj(2:size(didj,1),:); + + else % add it! + gA=[gA; n1,n2,1]; + + w(n1)=w(n1)-1; + w(n2)=w(n2)-1; + + wA=sum(w(A)); + dB=sum(deg(B)); + + didj=didj(2:size(didj,1),:); + end + end +end diff --git a/downloaded/matlab-networks-toolbox-master/canonicalNets.m b/downloaded/matlab-networks-toolbox-master/canonicalNets.m new file mode 100644 index 0000000..85f042e --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/canonicalNets.m @@ -0,0 +1,361 @@ +function el=canonicalNets(n,type,b) +%CANONICALNETS Build edge lists for simple canonical graphs, ex: trees and lattices +% +% @input n, number of nodes +% @input type, string of network type, Network types can be 'line','circle','star','btree','tree','hierarchy','trilattice','sqlattice','hexlattice', 'clique' +% @input b, branching factor b (scalar) +% @output el, Mx3 edge list +% +% Note: Produces undirected graphs, i.e. symmetric edge lists. +% Other functions used: symmetrizeEdgeL.m, adj2edgeL.m + +% updated: fprintf, documentation + +% IB: last updated: 3/27/14 + + +if strcmp(type,'line') + el=buildLine(n); + +elseif strcmp(type,'circle') + el=buildCircle(n); + +elseif strcmp(type,'star') + el=buildStar(n); + +elseif strcmp(type,'clique') + el=buildClique(n); + +elseif strcmp(type,'btree') + el=buildBinaryTree(n); + +elseif strcmp(type,'tree') + el=buildTree(n,b); + +elseif strcmp(type,'hierarchy') + el=buildHierarchy(n,b); + +elseif strcmp(type,'trilattice') + el=buildTriangularLattice(n); + +elseif strcmp(type,'sqlattice') + el=buildSquareLattice(n); + +elseif strcmp(type,'hexlattice') + el=buildHexagonalLattice(n); + +else + fprintf('invalid network type; see canonicalNets.m header\n'); + return +end + +%---- canonical nets functions ----------------------------------- + +function el_line=buildLine(n) % line ============================= + +el_line = [[1:n-1]' [2:n]' ones(n-1,1)]; +el_line = symmetrizeEdgeL(el_line); + + +function el_cir=buildCircle(n) % circle ========================== + +el_cir = [[1:n-1]' [2:n]' ones(n-1,1)]; +el_cir = [el_cir; 1 n 1]; +el_cir = symmetrizeEdgeL(el_cir); + + +function el_star=buildStar(n) % star ============================= + +el_star = [ones(n-1,1) [2:n]' ones(n-1,1)]; +el_star = symmetrizeEdgeL(el_star); + + +function el_clique = buildClique(n) % clique ===================== + +% clique:= complete graph with "n" nodes +el_clique = adj2edgeL(ones(n)-eye(n)); + + +function el_bt=buildBinaryTree(n) % binary tree ================== + +el_bt=[]; + +for i=2:n + if mod(i,2)==0 + el_bt=[el_bt; i i/2 1]; + else + el_bt=[el_bt; i (i-1)/2 1]; + end +end + +el_bt=symmetrizeEdgeL(el_bt); + + +function el=buildTree(n,b) % a general tree ===================== + +% tree with n "nodes" and branch factor "b" + +nodes=1; +queue=1; +el=[]; + +while nodes < n + if nodes+b > n + % add (n-nodes) to first stack member + for i=1:n-nodes + el=[el; queue(1) i+nodes 1]; + end + nodes=n; + else + % add b new edges: + for bb=1:b + el=[el; queue(1) nodes+bb 1]; + queue=[queue nodes+bb]; + end + queue=queue(2:length(queue)); % remove first member + nodes=nodes+b; % update node number + end +end + +el=symmetrizeEdgeL(el); + + +function el=buildHierarchy(n,b) % a hierarchy =================== + +% build a tree with n nodes and b as a branch factor, +% where nodes on one level are connected +% INPUTs: number of nodes - n, branch factor - b +% OUTPUTs: edge list + + +L=ceil(log(1+n*(b-1))/log(b)); % L=log(1+n(b-1))/log(b) +el=buildTree(n,b); % build the base + +% add the cross-level links +for k=1:L + + start_node=1+round((b^(k-1)-1)/(b-1)); + + for bb=1:b^(k-1)-1 + if start_node+bb-1>n | start_node+bb>n + el=symmetrizeEdgeL(el); + return + end + el=[el; start_node+bb-1, start_node+bb,1]; + end + +end + +el=symmetrizeEdgeL(el); + + + +function el_tr=buildTriangularLattice(n) % triangular lattice + +% build triangular lattice with n nodes +% as close to a "square" shape as possible + +el_tr=[]; % initialize edge list + +x=factor(n); + +if numel(x)==1 + el_tr=[el_tr; n 1 1]; + n=n-1; + x=factor(n); +end + +if mod(numel(x),2)==0 % if there's an even number of factors, split in two + + f1=prod(x(1:numel(x)/2)); + f2=prod(x(numel(x)/2+1:numel(x))); + +elseif mod(numel(x),2)==1 + + f1=prod(x(1:(numel(x)+1)/2)); + f2=prod(x((numel(x)+1)/2+1:numel(x))); + +end + +% the lattice will be f1xf2 +% inner mesh +for i=2:f1-1 + for j=2:f2-1 + % (i,j)->f2*(i-1)+j + el_tr=[el_tr; f2*(i-1)+j f2*(i-2)+j 1]; + el_tr=[el_tr; f2*(i-1)+j f2*(i)+j 1]; + el_tr=[el_tr; f2*(i-1)+j f2*(i-1)+j-1 1]; + el_tr=[el_tr; f2*(i-1)+j f2*(i-1)+j+1 1]; + el_tr=[el_tr; f2*(i-1)+j f2*i+j+1 1]; % added for tri lattice + end +end + +% four corners +el_tr=[el_tr; 1 2 1]; +el_tr=[el_tr; 1 f2+1 1]; +el_tr=[el_tr; 1 f2+2 1]; % added for tri lattice +el_tr=[el_tr; f2 f2-1 1]; +el_tr=[el_tr; f2 2*f2 1]; +el_tr=[el_tr; f2*(f1-1)+1 f2*(f1-2)+1 1]; +el_tr=[el_tr; f2*(f1-1)+1 f2*(f1-1)+2 1]; +el_tr=[el_tr; f1*f2 f2*(f1-1) 1]; +el_tr=[el_tr; f1*f2 f2*f1-1 1]; + +% four walls +for j=2:f2-1 + el_tr=[el_tr; j j-1 1]; + el_tr=[el_tr; j j+1 1]; + el_tr=[el_tr; j f2+j 1]; + el_tr=[el_tr; j f2+j+1 1]; % added for tri lattice + + el_tr=[el_tr; f2*(f1-1)+j f2*(f1-1)+j-1 1]; + el_tr=[el_tr; f2*(f1-1)+j f2*(f1-1)+j+1 1]; + el_tr=[el_tr; f2*(f1-1)+j f2*(f1-2)+j 1]; +end +for i=2:f1-1 + el_tr=[el_tr; f2*(i-1)+1 f2*(i-2)+1 1]; + el_tr=[el_tr; f2*(i-1)+1 f2*i+1 1]; + el_tr=[el_tr; f2*(i-1)+1 f2*(i-1)+2 1]; + el_tr=[el_tr; f2*(i-1)+1 f2*i+2 1]; % added for tri lattice + + el_tr=[el_tr; f2*i f2*(i-1) 1]; + el_tr=[el_tr; f2*i f2*(i+1) 1]; + el_tr=[el_tr; f2*i f2*i-1 1]; +end + +el_tr=symmetrizeEdgeL(el_tr); + + +function [el_sq]=buildSquareLattice(n) % square latice + +el_sq=[]; + +x=factor(n); + +if numel(x)==1 + el_sq=[el_sq; n 1 1]; + n=n-1; + x=factor(n); +end + +if mod(numel(x),2)==0 + + f1=prod(x(1:numel(x)/2)); + f2=prod(x(numel(x)/2+1:numel(x))); + +elseif mod(numel(x),2)==1 + + f1=prod(x(1:(numel(x)+1)/2)); + f2=prod(x((numel(x)+1)/2+1:numel(x))); + +end + + +% the lattice will be f1xf2 +% inner mesh +for i=2:f1-1 + for j=2:f2-1 + % (i,j)->f2*(i-1)+j + el_sq=[el_sq; f2*(i-1)+j f2*(i-2)+j 1]; + el_sq=[el_sq; f2*(i-1)+j f2*(i)+j 1]; + el_sq=[el_sq; f2*(i-1)+j f2*(i-1)+j-1 1]; + el_sq=[el_sq; f2*(i-1)+j f2*(i-1)+j+1 1]; + end +end + +% four corners +el_sq=[el_sq; 1 2 1]; +el_sq=[el_sq; 1 f2+1 1]; +el_sq=[el_sq; f2 f2-1 1]; +el_sq=[el_sq; f2 2*f2 1]; +el_sq=[el_sq; f2*(f1-1)+1 f2*(f1-2)+1 1]; +el_sq=[el_sq; f2*(f1-1)+1 f2*(f1-1)+2 1]; +el_sq=[el_sq; f1*f2 f2*(f1-1) 1]; +el_sq=[el_sq; f1*f2 f2*f1-1 1]; + +% four walls +for j=2:f2-1 + el_sq=[el_sq; j j-1 1]; + el_sq=[el_sq; j j+1 1]; + el_sq=[el_sq; j f2+j 1]; + + el_sq=[el_sq; f2*(f1-1)+j f2*(f1-1)+j-1 1]; + el_sq=[el_sq; f2*(f1-1)+j f2*(f1-1)+j+1 1]; + el_sq=[el_sq; f2*(f1-1)+j f2*(f1-2)+j 1]; +end +for i=2:f1-1 + el_sq=[el_sq; f2*(i-1)+1 f2*(i-2)+1 1]; + el_sq=[el_sq; f2*(i-1)+1 f2*i+1 1]; + el_sq=[el_sq; f2*(i-1)+1 f2*(i-1)+2 1]; + + el_sq=[el_sq; f2*i f2*(i-1) 1]; + el_sq=[el_sq; f2*i f2*(i+1) 1]; + el_sq=[el_sq; f2*i f2*i-1 1]; +end + +el_sq=symmetrizeEdgeL(el_sq); + + +function el_hex=buildHexagonalLattice(n) % hexagonal lattice =========== + + +% construct subgraph of the triangular lattice, f1xf2 +el_hex=[]; +x=factor(n); + +if numel(x)==1 + el_hex=[el_hex; n 1 1]; + n=n-1; + x=factor(n); +end + +if mod(numel(x),2)==0 + + f1=prod(x(1:numel(x)/2)); + f2=prod(x(numel(x)/2+1:numel(x))); + +elseif mod(numel(x),2)==1 + + f1=prod(x(1:(numel(x)+1)/2)); + f2=prod(x((numel(x)+1)/2+1:numel(x))); + +end + +% the lattice will be f1xf2 +% inner mesh +fmax=max(f1,f2); +fmin=min(f1,f2); + +for ff=1:fmin % from 1 to fmin + + % rows are from ff*fmax+1 to (ff+1)*fmax - 1 + % (ff+1)*fmax+1 to (ff+2)*fmax - 2 + for gg=1:fmax % in range(fmax): + + if gg0; % no multiple edges +[deg,~,~] = degrees(A); +C=zeros(n,1); % initialize clustering coefficient + +% multiplication change in the clust coeff formula +coeff = 2; +if isDirected(A); coeff=1; end + +for i=1:n + + if deg(i)==1 || deg(i)==0; C(i)=0; continue; end + + neigh=kneighbors(A,i,1); + edges_s=numEdges(subgraph(A,neigh)); + + C(i)=coeff*edges_s/(deg(i)*(deg(i)-1)); + +end + +C1=3*loops3(A)/(numConnTriples(A)+2*loops3(A)); +C2=sum(C)/n; \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/connectedComponentMeasures.m b/downloaded/matlab-networks-toolbox-master/connectedComponentMeasures.m new file mode 100644 index 0000000..41f01eb --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/connectedComponentMeasures.m @@ -0,0 +1,18 @@ +function [ num_cc, max_cc ] = connectedComponentMeasures( A ) +%CONNECTEDCOMPONENTMEASURES find the size of the largest connected component +% This method finds the size of the largest connected component, a +% frequently used network measurement/feature. + +% @input A, Adjacency matrix +% @output num_cc a scalar value of the number of connected components +% @output max_cc a scalar value of the size (# of nodes) of the largest connected component + +% IB: last updated, 3/23/14 + +cc = cellfun(@length, findConnComp(A)); +max_cc = max(cc); +num_cc = length(cc); + + +end + diff --git a/downloaded/matlab-networks-toolbox-master/degrees.m b/downloaded/matlab-networks-toolbox-master/degrees.m new file mode 100644 index 0000000..97c75b0 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/degrees.m @@ -0,0 +1,23 @@ +%################################################################## +% Compute the total degree, in-degree and out-degree of a graph based on the adjacency matrix; +% Note: Returns weighted degrees, if the input matrix is weighted +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: degree (1xn), in-degree (1xn) and out-degree (1xn) sequences +% +% Other routines used: isDirected.m +% GB: last updated, Sep 26, 2012 +%################################################################## + +function [deg,indeg,outdeg]=degrees(adj) + +indeg = sum(adj); +outdeg = sum(adj'); + +if isDirected(adj) + deg = indeg + outdeg; % total degree + +else % undirected graph: indeg=outdeg + deg = indeg + diag(adj)'; % add self-loops twice, if any + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/diameter.m b/downloaded/matlab-networks-toolbox-master/diameter.m new file mode 100644 index 0000000..1b8da18 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/diameter.m @@ -0,0 +1,17 @@ +%################################################################## +% The longest shortest path between any two nodes nodes in the network. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: network diameter +% +% Other routines used: simpleDijkstra.m +% GB: last updated, Oct 8 2012 +%################################################################## + +function diam = diameter(adj) + +diam=0; +for i=1:size(adj,1) + d=simpleDijkstra(adj,i); + diam = max([max(d),diam]); +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/dijkstra.m b/downloaded/matlab-networks-toolbox-master/dijkstra.m new file mode 100644 index 0000000..a2a0a80 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/dijkstra.m @@ -0,0 +1,58 @@ +%################################################################## +% Dijkstra's algorithm. +% +% INPUTS: adj - adjacency matrix (nxn), s - source node, target - target node +% OUTPUTS: distance, d and path, P (from s to target) +% +% Note: if target==[], then dist and P include all distances and paths from s +% Other routines used: adj2adjL.m +% GB: last updated, Oct 5, 2012 +%################################################################## + +function [dist,P]=dijkstra(adj,s,target) + +n=length(adj); % number of nodes +adjL=adj2adjL(adj); % list of neighbors + +dist=inf(1,n); % initialize distances +dist(s)=0; + +previous=[1:n; inf(1,n)]'; % {i: inf}, i=1:n, inf -> not assigned +S=cell(1,n); % initialize shortest path sequence + + +Q=[1:n]; % all unvisited vertices, entire graph + +while length(Q)>0 % while not empty + + % get min dist member among unvisited vertices + [mindist,min_ind]=min(dist(Q)); + u=Q(min_ind); + + % termination condition - save "source-u" path + S{u}=[]; + t=u; + while not(isempty(find(previous(:,1)==t))) % t in previous.keys(): + % insert u at the beginning of S + S{u}=[t S{u}]; + t=previous(t,2); + end + if length(target)>0 & u==target + dist=dist(u); P=S{u}; + return + end + + % ===================================================== + Q = setdiff(Q,u); % remove u from Q + + for v=1:length(adjL{u}) % across all neighbors of u + v=adjL{u}(v); + alt=dist(u)+adj(u,v); + if alt < dist(v) % update the distance and path + dist(v)=alt; + previous(v,2)=u; + end + end +end + +P=S; \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/distanceDistribution.m b/downloaded/matlab-networks-toolbox-master/distanceDistribution.m new file mode 100644 index 0000000..1f27e0b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/distanceDistribution.m @@ -0,0 +1,28 @@ +%################################################################## +% The number of pairs of nodes at a distance x, +% divided by the total number of pairs n(n-1) +% Source: Mahadevan et al, "Systematic Topology Analysis and +% Generation Using Degree Correlations" +% Note: The cumulative distance distribution (hop-plot) can be +% obtained by using ddist(i)=length(find(dij<=i)); in line 28 instead. +% +% INPUTS: adjacency matrix, (nxn) +% OUTPUTS: distribution vector ((n-1)x1): {k_i} where k_i is the +% number of node pairs at a distance i, normalized +% +% Other routines used: simpleDijkstra.m +% GB: last updated, Oct 10 2012 +%################################################################## + +function ddist=distanceDistribution(adj) + +n=size(adj,1); + +dij=[]; +for i=1:n; dij=[dij; simpleDijkstra(adj,i) ]; end + +dij(find(dij==0))=inf; % not considering (i-i) node pairs/loops, + % otherwise divide ddist by n^2 + +ddist=[]; +for i=1:n-1; ddist(i)=length(find(dij==i)) / (n*(n-1)); end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/dotMatrixPlot.m b/downloaded/matlab-networks-toolbox-master/dotMatrixPlot.m new file mode 100644 index 0000000..5a093e6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/dotMatrixPlot.m @@ -0,0 +1,105 @@ +%################################################################## +% Draws the matrix as a column/row sorted square dot-matrix pattern +% +% INPUTs: adj (nxn) - adjacency matrix representation of the graph +% OUTPUTs: plot +% +% Note 1: Change colors and marker types in lines 66, 73, 94 and 101 +% Note 2: Easy to add/remove different node orderings to/from the plot +% +% Other routines used: degrees.m, sortNodesByMaxNeighborDegree.m, +% eigenCentrality.m, newmanEigenvectorMethod.m, +% nodeBetweennessFaster.m, newmanGirvan.m +% GB: last updated, November 25 2012 +%################################################################## + +function [] = dotMatrixPlot(adj) + +n = size(adj,1); +%markersize=ceil(n/50); % scale for plotting purposes +markersize=3; +deg = degrees(adj); + +Yd = sortNodesByMaxNeighborDegree(adj); % degree centrality +[~, Yb] = sort(nodeBetweennessFaster(adj)); % node betweenness centrality +[~,Yec] = sort(eigenCentrality(adj)); % eigen-centrality +[~,Yc] = sort(closeness(adj)); % closeness + +% sort by module +modules = newmanEigenvectorMethod(adj); +% sort modules by length +mL=zeros(1,length(modules)); +for i=1:length(modules); mL(i)=length(modules{i}); end +[~,Yms]=sort(mL); + +% sort nodes by degree inside modules +Ym=[]; +for mm=1:length(modules) + module=modules{Yms(mm)}; + deg_module=deg(module); + [~,Yds]=sort(deg_module); + module_sorted=module(Yds); + for xx=1:length(module_sorted) + Ym=[Ym module_sorted(xx)]; + end +end + +mods = newmanGirvan(adj,4); % enter the expected number of communities +% sort modules by length +mL=zeros(1,length(mods)); +for i=1:length(mods); mL(i)=length(mods{i}); end +[~,Yms]=sort(mL); +Ymb = []; +for mm=1:length(mods) + module=mods{Yms(mm)}; + deg_module=deg(module); + [~,Yds]=sort(deg_module); + module_sorted=module(Yds); + for xx=1:length(module_sorted) + Ymb=[Ymb module_sorted(xx)]; + end +end + + +set(gcf,'Color',[1 1 1]) +subplot(3,2,1) +spy(adj(Yd,Yd),'k.',markersize) +title('ordered by degree','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square + +subplot(3,2,2) +spy(adj(Yb,Yb),'k.',markersize) +title('ordered by betweenness','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square + +subplot(3,2,3) +spy(adj(Yec,Yec),'k.',markersize) +title('ordered by eigen-centrality','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square + +subplot(3,2,4) +spy(adj(Yc,Yc),'k.',markersize) +title('ordered by closeness','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square + +subplot(3,2,5) +spy(adj(Ym,Ym),'k.',markersize) +title('ordered by module - eigenvector method','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square + +subplot(3,2,6) +spy(adj(Ymb,Ymb),'k.',markersize) +title('ordered by module - Newman-Girvan','FontWeight','bold') +axis([0 n 0 n]); +set(gca,'YDir','normal') +axis square \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/drawCircGraph.m b/downloaded/matlab-networks-toolbox-master/drawCircGraph.m new file mode 100644 index 0000000..097ec32 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/drawCircGraph.m @@ -0,0 +1,48 @@ +%################################################################## +% Draw a circular representation of a graph with the nodes ordered by degree +% Strategy: position vertices in a regular n-polygon +% +% INPUTs: adj, nxn - adjacency matrix +% OUTPUTs: plot +% +% Other routines used: degrees.m +% GB: last updated, Nov 29 2012 +%################################################################## + +function [] = drawCircGraph(adj) + +n = size(adj,1); % number of nodes +[~, Y] = sort(degrees(adj)); % Y - sorted nodal indices +angl = 2*pi/n; % rotation angle + +for k=1:n + x(Y(k)) = real(exp(angl*(k-1)*i)); + y(Y(k)) = imag(exp(angl*(k-1)*i)); +end + +% regulate the font size with respect to graph size +if n<=50; + fontsize = 10; +elseif n>50 & n<=150 + fontsize = 8; +else + fontsize = 6; +end + +for k=1:n + plot(x(k),y(k),'k.') + text(1.15*x(k),1.15*y(k),strcat('v',num2str(k)),"fontsize",fontsize); + hold off; hold on; +end + +edges=find(adj>0); +set(gcf,'Color',[1,1,1]) + +for e=1:length(edges) + [ii,jj]=ind2sub([n,n],edges(e)); + line([x(ii) x(jj)],[y(ii) y(jj)],'Color','k'); + hold off; hold on; +end +axis([-1.15 1.15 -1.15 1.15]) +axis square +axis off diff --git a/downloaded/matlab-networks-toolbox-master/edgeBetweenness.m b/downloaded/matlab-networks-toolbox-master/edgeBetweenness.m new file mode 100644 index 0000000..a795724 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeBetweenness.m @@ -0,0 +1,119 @@ +%################################################################## +% Edge betweenness routine, based on shortest paths. +% Source: Newman, Girvan, "Finding and evaluating community structure in networks" +% Note: Valid for undirected graphs only. +% +% INPUTs: edge list, mx3, m - number of edges +% OUTPUTs: w - betweenness per edge, mx3 +% +% Other routines used: adj2edgeL.m, numNodes.m, numEdges.m, kneighbors.m +% GB: last modified, Sep 29, 2012 +%################################################################## + + +function ew = edgeBetweenness(adj) + +el=adj2edgeL(adj); % the corresponding edge list +n = numNodes(adj); % number of nodes +m = numEdges(adj); % number of edges + +ew = zeros(size(el,1),3); % edge betweenness - output + + +for s=1:n % across all (source) nodes + + % compute the distances and weights starting at source node i + d=inf(n,1); w=inf(n,1); + d(s)=0; w(s)=1; % source node distance and weight + queue=[s]; % add to queue + visited=[]; + + while not(isempty(queue)) + j=queue(1); % pop first member + visited=[visited j]; + neigh=kneighbors(adj,j,1); % find all adjacent nodes, 1 step away + + for x=1:length(neigh) % add to queue if unvisited + nei=neigh(x); + + if isempty(find(visited==nei)) & isempty(find(queue==nei)); queue=[queue nei]; end + + end + for x=1:length(neigh) + + nei=neigh(x); + if d(nei)==inf % not assigned yet + d(nei)=1+d(j); + w(nei)=w(j); + elseif d(nei)d(leaf) + down_neigh=[down_neigh neigh(x)]; + end + end + sum_down_edges=0; + for x=1:length(down_neigh) + indi=find(el(:,1)==leaf); + indj=find(el(:,2)==down_neigh(x)); + indij=intersect(indi,indj); + sum_down_edges=sum_down_edges+eww(indij,3); + end + for x=1:length(up_neigh) + indi=find(el(:,1)==up_neigh(x)); + indj=find(el(:,2)==leaf); + indij=intersect(indi,indj); + eww(indij,3)=w(up_neigh(x))/w(leaf)*(1+sum_down_edges); + end + end + end + + for e=1:size(ew,1); ew(e,3)=ew(e,3)+eww(e,3); end + +end + +for e=1:size(ew,1) + ew(e,1)=el(e,1); + ew(e,2)=el(e,2); + ew(e,3)=ew(e,3)/n/(n-1); % normalize by the total number of paths +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/edgeDensity.m b/downloaded/matlab-networks-toolbox-master/edgeDensity.m new file mode 100644 index 0000000..de2843f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeDensity.m @@ -0,0 +1,24 @@ +function [ d ] = edgeDensity( A ) +%EDGEDENSITY An alias method for linkDensity +% Edge density is defined as the number of edges divided by +% number_of_nodes(number_of_nodes-1)/2 where the latter is the maximum possible number of edges. +% +% @input A, NxN adjacency matrix +% @output d, scalar density value between 0 and 1. +% +% Note 1: The graph has to be non-trivial (more than 1 node). +% Note 2: Routine works for both directed and undirected graphs. +% +% Other routines used: numNodes.m, numEdges.m, isDirected.m + +% Updated: documentation, added edgeDensity alias. +% IB: last update 3/24/14 + +n = numNodes(A); + +coeff = 2; +if isDirected(A); coeff = 1; end + +d = coeff*numEdges(A)/(n*(n-1)); +end + diff --git a/downloaded/matlab-networks-toolbox-master/edgeL2adj.m b/downloaded/matlab-networks-toolbox-master/edgeL2adj.m new file mode 100644 index 0000000..8e02a02 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeL2adj.m @@ -0,0 +1,17 @@ +%################################################################## +% Convert edge list to adjacency matrix. +% +% INPUTS: edge list: mx3, m - number of edges +% OUTPUTS: adjacency matrix nxn, n - number of nodes +% +% Note: information about nodes is lost: indices only (i1,...in) remain +% GB: last updated, Sep 25, 2012 +%################################################################## + +function adj=edgeL2adj(el) + +nodes=sort(unique([el(:,1) el(:,2)])); % get all nodes, sorted +adj=zeros(numel(nodes)); % initialize adjacency matrix + +% across all edges +for i=1:size(el,1); adj(find(nodes==el(i,1)),find(nodes==el(i,2)))=el(i,3); end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/edgeL2adjL.m b/downloaded/matlab-networks-toolbox-master/edgeL2adjL.m new file mode 100644 index 0000000..e116d57 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeL2adjL.m @@ -0,0 +1,16 @@ +%################################################################## +% Convert an edge list to an adjacency list. +% +% INPUTS: edge list, mx3, m - number of edges +% OUTPUTS: adjacency list +% +% Note: Information about edge weights (if any) is lost. +% GB: last updated, September 25, 2012 +%################################################################## + +function adjL = edgeL2adjL(el) + +nodes = unique([el(:,1)' el(:,2)']); +adjL=cell(numel(nodes),1); + +for e=1:size(el,1); adjL{el(e,1)}=[adjL{el(e,1)},el(e,2)]; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/edgeL2cyto.m b/downloaded/matlab-networks-toolbox-master/edgeL2cyto.m new file mode 100644 index 0000000..270bc4f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeL2cyto.m @@ -0,0 +1,23 @@ +%################################################################## +% Convert an edge list structure m x [node 1, node 2, link] to +% Cytoscape input format (.txt or any text extension works) +% +% Note: In Cytoscape the column separator option is semi-colon ";". +% If desired, this is easy to change below in line 20. +% +% INPUTs: edge list - mx3 matrix, m = number of edges, file name text string +% OUTPUTs: text file in Cytoscape format with a semicolon column separator +%################################################################## + +function [ ]=edgeL2cyto(el,filename) + +nodes=unique([el(:,1)', el(:,2)']); +m = size(el,1); % number of edges + +fid = fopen(filename,'wt','native'); + +for i=1:m + fprintf(fid,' %4i ; %4i ; %3.6f\n',el(i,1),el(i,2),el(i,3)); +end + +fclose(fid); diff --git a/downloaded/matlab-networks-toolbox-master/edgeL2simple.m b/downloaded/matlab-networks-toolbox-master/edgeL2simple.m new file mode 100644 index 0000000..fc0fe17 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/edgeL2simple.m @@ -0,0 +1,19 @@ +%################################################################## +% Convert an edge list of a general graph to the edge list of a +% simple graph (no loops, no double edges, no edge weights, symmetric) +% +% INPUTS: edge list (mx3), m - number of edges +% OUTPUTs: edge list of the corresponding simple graph +% +% Note: Assumes all node pairs [n1,n2,x] occur once; if else see addEdgeWeights.m +% GB: last updated, Sep 25, 2012 +%################################################################## + +function el=edgeL2simple(el) + +el(:,3)=ones(size(el,1),1); % make all edge weights 1 + +ind=find(not(el(:,1)-el(:,2)==0)); % indices of the "non-self-loops" +el=el(ind,:); + +el = symmetrizeEdgeL(el); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/eigenCentrality.m b/downloaded/matlab-networks-toolbox-master/eigenCentrality.m new file mode 100644 index 0000000..3dbaad5 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/eigenCentrality.m @@ -0,0 +1,15 @@ +%################################################################## +% The ith component of the eigenvector corresponding to the greatest +% eigenvalue gives the centrality score of the ith node in the network. +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: eigen(-centrality) vector, nx1 +% +% GB: last updated, Sep 29, 2012 +%################################################################## + +function x=eigenCentrality(adj) + +[V,D]=eig(adj); +[~,ind]=max(diag(D)); +x=V(:,ind); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/el2geom.m b/downloaded/matlab-networks-toolbox-master/el2geom.m new file mode 100644 index 0000000..53598c4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/el2geom.m @@ -0,0 +1,57 @@ +%################################################################## +% Plot a graph for which nodes have given coordinates. Apply color +% scheme and thicker lines if edges have varying weights. +% +% INPUTS: extended edge list el[i,:]=[n1 n2 m x1 y1 x2 y2] +% OUTPUTS: geometry plot, higher-weight links are thicker and lighter in color +% +% Note 1: m - edge weight; (x1,y1) are the Euclidean coordinates of n1, (x2,y2) - n2 +% Note 2: Easy to change colors and corresponding edge weight coloring +% +% GB: last updated: December 8, 2012 +%################################################################## + +function []=el2geom(el) + +set(gcf,'Color',[1 1 1]) +map=colormap('winter'); % ============ CHANGE COLORMAP HERE + +for i=1:size(el,1) + + % plot line between two nodes + x1=el(i,4); y1=el(i,5); + x2=el(i,6); y2=el(i,7); + + % edge weights ============== CHANGE COLORMAP-LINE THICKNESS SCALE HERE + if el(i,3)<2 + color=map(8,:); + linew=1; + elseif el(i,3)>=2 & el(i,3)<3 + color=map(2*8,:); + linew=2; + elseif el(i,3)>=3 & el(i,3)<4 + color=map(3*8,:); + linew=3; + elseif el(i,3)>=4 & el(i,3)<5 + color=map(4*8,:); + linew=4; + elseif el(i,3)>=5 & el(i,3)<6 + color=map(5*8,:); + linew=5; + elseif el(i,3)>=6 & el(i,3)<7 + color=map(6*8,:); + linew=6; + elseif el(i,3)>=7 & el(i,3)<8 + color=map(7*8,:); + linew=7; + elseif el(i,3)>=8 + color=map(8*8,:); + linew=8; + end + line([x1 x2],[y1 y2],'LineWidth',linew,'Color',color) + + hold off; hold on; + +end +axis equal +axis off \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/exponentialGrowthModel.m b/downloaded/matlab-networks-toolbox-master/exponentialGrowthModel.m new file mode 100644 index 0000000..8be1a04 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/exponentialGrowthModel.m @@ -0,0 +1,17 @@ +%################################################################## +% Construct a graph with an exponential degree distribution. +% Probability of node s having k links at time t: +% p(k,s,t)=1/t*p(k-1,s,t-1)+(1-1/t)*p(k,s,t-1) +% +% INPUTS: number of time steps, t +% OUTPUTs: edge list, mx3 +% +% GB, last updated: Nov 11, 2012 +%################################################################## + +function el=exponentialGrowthModel(t) + +el=[1 2 1; 2 1 1]; % initialize with two connected nodes + +% for all remaining time t +for i=3:t; r = randi(i-1); el=[el; i r 1; r i 1]; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/fabrikantModel.m b/downloaded/matlab-networks-toolbox-master/fabrikantModel.m new file mode 100644 index 0000000..603e814 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/fabrikantModel.m @@ -0,0 +1,87 @@ +%################################################################## +% Implements the network growth model from: Fabrikant et al, +% "Heuristically Optimized Trade-offs: A New Paradigm +% for Power Laws in the Internet" +% Note: Assumes the central point (root) to be the one closest to (0,0) +% +% INPUTS: n - number of points, parameter alpha, [0,inf), +% plt='on'/'off', if [], then 'off' is default +% OUTPUTS: generated network (adjacency matrix) and plot [optional] +% +% Other functions used: simpleDijkstra.m +% GB: last updated: November 14, 2012 +%################################################################## + +function [adj,p]=fabrikantModel(n,alpha,plt) + + +% create random point (polar) coordinates +p = zeros(n,2); +rad = rand(1,n); +theta = 2*pi*rand(1,n); +for i=1:n; p(i,:) = rad(i)*[cos(theta(i)),sin(theta(i))]; end +norms = []; +for pp=1:length(p); norms = [norms; norm(p(pp,:))]; end +[~,Y]=sort(norms); +p = p(Y,:); +clear norms rad theta + +h=zeros(n,1); % initialize centrality function +adj=zeros(n); % initialize adjacency matrix + +adjL = pdist2(p,p,'euclidean'); % compute all point-to-point distances + +% compute centrality function based from p(1,:) +h = adjL(1,:); + + +for i=2:n % a new point arrives at each iteration + + % compute min weight across all existing points + d=[]; + for j=1:i-1; d=[d; alpha*norm(p(i,:)-p(j,:)) + h(j)]; end + [~,indmin]=min(d); + adj(i,indmin)=1; adj(indmin,i)=1; + + +end + +if nargin<=2 | not(strcmp(plt,'on')); return; end + +set(gcf,'color',[1,1,1]) +for i=1:n + axis off + %drawnow + %plot(p(i,1),p(i,2),'.','Color',[0.5,0.5,0.5]); hold off; hold on; % plot the new point + for j=i+1:n + if adj(i,j)>0 + line([p(i,1) p(j,1)],[p(i,2) p(j,2)],'Color',[0.5,0.5,0.5]) + hold off; hold on; + end + end +end + + + + + +function L = pdist2(x,y,distance); + +% L is the matrix of distances between +% all members of x to all members of y +% distance type can be defined differently, +% but for the purposes of this routine it +% is 'euclidean' + +if not(strcmp(distance,'euclidean')); + print('no other distance than euclidean implemented yet\n'); + return +end + +L = zeros(size(x,1),size(y,1)); + +for xx=1:size(x,1) + for yy=1:size(y,1) + L(xx,yy) = norm(x(xx,:)-y(yy,:)); + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/fiedlerVector.m b/downloaded/matlab-networks-toolbox-master/fiedlerVector.m new file mode 100644 index 0000000..0a5fe2b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/fiedlerVector.m @@ -0,0 +1,15 @@ +%################################################################## +% The vector corresponding to the second smallest eigenvalue of +% the Laplacian matrix +% INPUTs: adjacency matrix, nxn +% OUTPUTs: fiedler vector, nx1 +% +% Other routines used: laplacianMatrix.m +% GB: last updated, Oct 10 2012 +%################################################################## + +function fv=fiedlerVector(adj) + +[V,D]=eig(laplacianMatrix(adj)); +[~,Y]=sort(diag(D)); +fv=V(:,Y(2)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/findConnComp.m b/downloaded/matlab-networks-toolbox-master/findConnComp.m new file mode 100644 index 0000000..268cfca --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/findConnComp.m @@ -0,0 +1,34 @@ +function comp_mat = findConnComp(A) +%FINDCONNCOMP Find connected components in a graph +% Note: Valid for undirected graphs only +% +% @input A, an NxN adjacency matrix +% @output comp_mat, a cell array where each element is a list of nodes in +% the component. + +% Other routines used: findConnCompI.m, degrees.m + +% Update: minor optimizations, documentation format +% IB: last updated, 3/23/14 + +[deg,~,~]=degrees(A); % degrees +comp_mat={}; % initialize components matrix + +for i=1:length(deg) + if deg(i)>0 + done=0; + for j=1:length(comp_mat) + if any(comp_mat{j}==i) % i in comp_mat(x).mat + done=1; + break + end + end + if not(done) + comp=findConnCompI(A,i)'; + comp_mat{length(comp_mat)+1}=comp; %#ok + end + + elseif deg(i)==0 + comp_mat{length(comp_mat)+1}=i; %#ok + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/findConnCompI.m b/downloaded/matlab-networks-toolbox-master/findConnCompI.m new file mode 100644 index 0000000..5493a34 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/findConnCompI.m @@ -0,0 +1,31 @@ +function comp=findConnCompI(A,i) +%FINDCONNCOMPI Find the connected component to which node "i" belongs to +% @input A, NxN adjacency matrix +% @input i, a node number to search for +% @output comp, a list of nodes of the connected component of 'i' +% +% Note: Only works for undirected graphs. +% Other functions used: kneighbors.m + +% Update: minor optimizations + +% IB: last updated, 3/23/14 + +neigh1=(kneighbors(A,i,1))'; % all neighbors of "i" 1 link away +neigh1=unique([neigh1; i]); % add i to its own component + +while 1 + len0=length(neigh1); + neigh2 = cell(len0, 1); + for j=1:len0 + neigh2{j}=(kneighbors(A,neigh1(j),1))'; + end + neigh1=unique([neigh1; cell2mat(neigh2)]); % merge neigh1 and neigh2 + if len0==length(neigh1) % if no new neighbors found, return component + comp=neigh1; + return + end + +end + +end % end of function \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/forestFireModel.m b/downloaded/matlab-networks-toolbox-master/forestFireModel.m new file mode 100644 index 0000000..74b8854 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/forestFireModel.m @@ -0,0 +1,63 @@ +%################################################################## +% Implementation of the forest fire model by Leskovec et al +% "Graphs over Time: Densification Laws, Shrinking +% Diameters and Possible Explanations" +% +% Inputs: forward burning probability p in [0,1], +% backward burning ratio r, in [0,inf), +% T - number of nodes +% Outputs: adjacency list of the constructed (directed) graph +% +% Other routines used: weightedRandomSample.m +% GB: last updated, November 28, 2012 +%################################################################## + + +function L = forestFireModel(T,p,r) + +if T==1 + L{1} = []; % a single node, no edges + return +elseif T>=2 + L{1} = [2]; L{2} = [1]; % start with a single edge +end + + +for t=3:T + + L{t} = []; % new node arrives + w = randi(t-1); % pick a node from 1->t-1 uniformly at random + queue=[w]; visited = []; + + while not(isempty(queue)) + + L{t} = [L{t} w]; % connect t to w + w = queue(1); visited = [visited w]; + + outlinks = L{w}; inlinks = []; + for ll=1:length(L) + if sum(find(L{ll}==w))>0; inlinks = [inlinks ll]; end + end + + N = length(unique([outlinks inlinks])); + + x = geornd(1-p,1,1); % mean p/(1-p) => (1-p) probability + y = geornd(1-r*p,1,1); % mean rp/(1-rp) => (1-rp) probability + + s_in = weightedRandomSample(y,inlinks,ones(size(inlinks))/length(inlinks)); + s_out = weightedRandomSample(x,outlinks,ones(size(outlinks))/length(outlinks)); + + ws = unique([s_in s_out]); + + L{t} = unique([L{t} ws]); % add as outlinks to new node + + for ii=1:length(ws) + if sum(find(visited==ws(ii)))==0; queue = [queue ws(ii)]; end + end + queue = queue(2:length(queue)); % remove w from queue + end + +end + + +for ll=1:length(L); L{ll} = setdiff(L{ll},ll); end % remove self-loops \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/functions_manual.pdf b/downloaded/matlab-networks-toolbox-master/functions_manual.pdf new file mode 100644 index 0000000..dc268b7 Binary files /dev/null and b/downloaded/matlab-networks-toolbox-master/functions_manual.pdf differ diff --git a/downloaded/matlab-networks-toolbox-master/getEdges.m b/downloaded/matlab-networks-toolbox-master/getEdges.m new file mode 100644 index 0000000..43668f3 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/getEdges.m @@ -0,0 +1,37 @@ +function edges = getEdges(graph,type) +%GETEDGES Returns the list of edges for graph varying representation types +% @input graph, (multiple formats: adjacency matrix, adjacencylist, edgelist, inc) (see below) +% @input type, a string specifier of the format type +% @output edges, Mx3 edge list where third column is weight. +% +% Note 1: 'type' can be: 'adj','edgelist','adjlist' (neighbor list), 'inc' (incidence matrix) +% Note 2: symmetric edges will appear twice, also in undirected graphs, (i.e. [n1,n2] and [n2,n1]) +% Other routines used: adj2edgeL.m, adjL2edgeL.m, inc2edgeL.m +% +% Example representations of a directed triangle: 1->2->3->1 +% 'adj' - [0 1 0; 0 0 1; 1 0 0] +% 'adjlist' - {1: [2], 2: [3], 3: [1]} +% 'edgelist' - [1 2; 2 3; 3 1] or [1 2 1; 2 3 1; 3 1 1] (1 is the edge weight) +% 'inc' - [-1 0 1 +% 1 -1 0 +% 0 1 -1] +% +% Updated: fprintf +% IB: last updated, 3/24/14 + + + +if strcmp(type,'adj') + edges=sortrows(adj2edgeL(graph)); + +elseif strcmp(type,'edgelist') + edges=graph; % the graph structure is the edge list + +elseif strcmp(type,'adjlist') + edges=sortrows(adjL2edgeL(graph)); + +elseif strcmp(type,'inc') + edges=sortrows(inc2edgeL(graph)); +else + fprintf('ERROR: "type" input can only be "adj" (adjacency, nxn matrix), "edgelist" (mx3 matrix)\n, "adjlist" (neighbor list, nx1 cell) and "inc" incidence (nxm matrix)\n') +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/getNodes.m b/downloaded/matlab-networks-toolbox-master/getNodes.m new file mode 100644 index 0000000..1eaa436 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/getNodes.m @@ -0,0 +1,32 @@ +function nodes = getNodes(graph,type) +%GETNODES Returns the list of nodes for varying graph representation types +% @input graph, graph data input (multiple formats: adjacency matrix, adjacencylist, edgelist, inc) (see below) +% @input type, a string specifier of the format type +% @output nodes, vector of nodes + +% Note 1: only the edge list allows/returns non-consecutive node indexing +% Note 2: no build-in error check for graph structure +% +% Example representations of a directed triangle: 1->2->3->1 +% 'adj' - [0 1 0; 0 0 1; 1 0 0] +% 'adjlist' - {1: [2], 2: [3], 3: [1]} +% 'edgelist' - [1 2; 2 3; 3 1] or [1 2 1; 2 3 1; 3 1 1] (1 is the edge weight) +% 'inc' - [-1 0 1 +% 1 -1 0 +% 0 1 -1] +% +% Updated: fprintf +% IB: last updated, 3/24/14 + +if strcmp(type,'adj') | strcmp(type,'adjlist') + nodes=[1:max([size(graph,1) size(graph,2)])]; + +elseif strcmp(type,'edgelist') + nodes=unique([graph(:,1)' graph(:,2)']); + +elseif strcmp(type,'inc') + nodes=[1:size(graph,1)]; +else + fprintf('ERROR: "type" input can only be "adj" (adjacency, nxn matrix), "edgelist" (mx2 or mx3 matrix)\n, "adjlist" (neighbor list, nx1 cell) and "inc" incidence (nxm matrix)\n'); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/getTemporalNetworkMeasure.m b/downloaded/matlab-networks-toolbox-master/getTemporalNetworkMeasure.m new file mode 100644 index 0000000..72a86d0 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/getTemporalNetworkMeasure.m @@ -0,0 +1,85 @@ +function [ ret, implemented_str ] = getTemporalNetworkMeasure( dyn_net, measure ) +%GETTEMPORALNETWORKMEASURE Compute a network measure over a sequence of adjacency matrices +% This is a meta/calling function for usability. Given a sequence of adjacency matrices [NxNxT], compute the network measure/feature at each time step. + +% This method is optimized for speed, so the time 'for' loop is on the +% interior and replicated several times. This saves on a strcmp each +% iteration. A 'helper' output is written to show currently implemented methods. + +% @input dyn_net, a [NxNxT] sequence of adjacency matrices over T time steps. +% @input measure, a string specifying the network measure to compute +% @output ret, a T-length vector of network measures +% @output implemented_str [optional], a cell array of implemented method strings, for ease of method selection (e.g. to loop over all features) + +% IB, Update: Testing on R2013a, parfor now only runs a small constant +% slower serially vs. regular 'for.' removed regular for 'if' blocks + +% Last updated: fixed return from clique number. + +% IB, last updated: 3/24/14 + +%% keep track of implemented methods for helper output +implemented_str = sort({'max component', 'num components', 'average degree', 'average path', 'clustering coeff', 'density', 'radius', 'diameter', 'transitivity', 'clique number'}); + + +if(~exist('dyn_net', 'var') || isempty(dyn_net)) + ret = []; +else + + [~,~,s] = size(dyn_net); + + %% preallocate + ret = zeros(s, 1); + + %% logic for measures + if(exist('measure', 'var')) %if measure given + if(strcmpi(measure, 'max component')) + parfor(i=1:s, matlabpool('size')) + [~, ret(i)] = connectedComponentMeasures( dyn_net(:,:, i) ); + end + elseif(strcmpi(measure, 'num components')) + parfor(i=1:s, matlabpool('size')) + [ret(i), ~] = connectedComponentMeasures(dyn_net(:,:, i)); + end + elseif(strcmpi(measure, 'clique number')) + parfor(i=1:s, matlabpool('size')) + ret(i) = cliqueNumber(dyn_net(:,:, i)); + end + elseif(strcmpi(measure, 'average degree')) + parfor(i=1:s, matlabpool('size')) + ret(i) = averageDegree(dyn_net(:,:, i)); + end + elseif(strcmpi(measure, 'average path')) + parfor(i=1:s, matlabpool('size')) + [ret(i), ~] = averagePathLength(dyn_net(:,:, i)); + end + elseif(strcmpi(measure, 'clustering coeff')) + parfor(i=1:s, matlabpool('size')) + [~, ret(i), ~] = clustCoeff(dyn_net(:,:,i)); + end + elseif(strcmpi(measure, 'transitivity')) + parfor(i=1:s, matlabpool('size')) + [ret(i), ~, ~] = clustCoeff(dyn_net(:,:,i)); + end + elseif(strcmpi(measure, 'density')) + parfor(i=1:s, matlabpool('size')) + ret(i) = edgeDensity(dyn_net(:,:,i)); + end + elseif(strcmpi(measure, 'radius')) + parfor(i=1:s, matlabpool('size')) + [ret(i), ~] = radiusAndDiameter(dyn_net(:,:,i)); + end + elseif(strcmpi(measure, 'diameter')) + parfor(i=1:s, matlabpool('size')) + [~, ret(i)] = radiusAndDiameter(dyn_net(:,:,i)); + end + else + fprintf(['String ' measure ' not valid, implemented methods:\n' strjoin(implemented_str, '\n') '\n']); + end + else %if measure not given + fprintf(['No network measure given, implemented methods:\n' strjoin(implemented_str, '\n') '\n']); + end +end + +end + diff --git a/downloaded/matlab-networks-toolbox-master/giantComponent.m b/downloaded/matlab-networks-toolbox-master/giantComponent.m new file mode 100644 index 0000000..a2e5289 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/giantComponent.m @@ -0,0 +1,22 @@ +%################################################################## +% Extract the giant component of a graph; +% The giant component is the largest connected component. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: giant component matrix and node indices +% +% Other routines used: findConnComp.m, subgraph.m +% GB: last updated: September 22, 2012 +%################################################################## + + +function [GC,gc_nodes]=giantComponent(adj) + +comp=findConnComp(adj); + +L=[]; +for k=1:length(comp); L=[L, length(comp{k})]; end % computing component sizes +[maxL,ind_max]=max(L); + +gc_nodes=comp{ind_max}; +GC=subgraph(adj,gc_nodes); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphComplement.m b/downloaded/matlab-networks-toolbox-master/graphComplement.m new file mode 100644 index 0000000..b6c2c5c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphComplement.m @@ -0,0 +1,14 @@ +%################################################################## +% Returns the complement of a graph +% The complement graph has the same nodes, but edges where the original graph doesn't and vice versa. +% +% INPUTs: adj - original graph adjacency matrix, nxn +% OUTPUTs: complement graph adjacency matrix, nxn +% +% Note: Assumes no multiple edges +% GB: last updated, September 23, 2012 +%################################################################## + +function adjC = graphComplement(adj) + +adjC=ones(size(adj))-adj; \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphDual.m b/downloaded/matlab-networks-toolbox-master/graphDual.m new file mode 100644 index 0000000..0e3754f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphDual.m @@ -0,0 +1,43 @@ +%################################################################## +% Finds the dual of a graph; a dual is the inverted nodes-edges graph +% This is also called the line graph, adjoint graph or the edges adjacency +% +% INPUTs: adjacency (neighbor) list representation of the graph (see adj2adjL.m) +% OUTPUTs: adj (neighbor) list of the corresponding dual graph and cell array of edges +% +% Note: This routine only works for undirected, simple graphs. +% GB: last updated, Sep 23 2012 +%################################################################## + +function [dL,edge_array] = graphDual(L) + +dL={}; % initialize +for i=1:length(L) + for j=1:length(L{i}) + + if i<=L{i}(j); dL{length(dL)+1}=[]; end + + end +end + +edge_array={}; + +for i=1:length(L) + + for j=1:length(L{i}) % add i,L{i}j to list of nodes + if i<=L{i}(j); edge_array{length(edge_array)+1}= strcat(num2str(i),'-',num2str(L{i}(j))); end + end + + for j=1:length(L{i}) % add i - L{i}j to list of edges + for k=j+1:length(L{i}) + edge1=strcat(num2str(min([i,L{i}(j)])),'-',num2str(max([i,L{i}(j)]))); + edge2=strcat(num2str(min([i,L{i}(k)])),'-',num2str(max([i,L{i}(k)]))); + + ind_edge1=find(ismember(edge_array, edge1)==1); + ind_edge2=find(ismember(edge_array, edge2)==1); + + dL{ind_edge1}=unique([dL{ind_edge1},ind_edge2]); + dL{ind_edge2}=unique([dL{ind_edge2},ind_edge1]); + end + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphEnergy.m b/downloaded/matlab-networks-toolbox-master/graphEnergy.m new file mode 100644 index 0000000..3986ef8 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphEnergy.m @@ -0,0 +1,16 @@ +%################################################################## +% Graph energy defined as: the sum of the absolute values of the +% real components of the eigenvalues of the adjacency matrix. +% Source: Gutman, The energy of a graph, Ber. Math. Statist. +% Sekt. Forsch-ungszentram Graz. 103 (1978) 1-22. +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: graph energy +% +% GB: last updated, Oct 10 2012 +%################################################################## + +function G=graphEnergy(adj) + +[~,e]=eig(adj); % e are the eigenvalues +G=sum(abs(real(diag(e)))); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphFromDegreeSequence.m b/downloaded/matlab-networks-toolbox-master/graphFromDegreeSequence.m new file mode 100644 index 0000000..8a49b77 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphFromDegreeSequence.m @@ -0,0 +1,29 @@ +%################################################################## +% Constructing a graph from a given degree sequence: deterministic +% Note: This is the Havel-Hakimi algorithm. +% +% Inputs: a graphic degree sequence, [d1,d2, ... dn], +% where di is the degree of the ith node +% Outputs: adjacency matrix, nxn +% +% GB: last updated, Oct 21 2012 +%################################################################## + +function adj = graphFromDegreeSequence(seq) + +adj = zeros(length(seq)); + +while sum(seq)>0 % while there are still stubs to connect + + % order stubs by decreasing number of degrees left + [sorted,I] = sort(-seq); + n1 = I(1); + for x=1:-sorted(1) + n2 = I(x+1); + adj(n1,n2)= adj(n1,n2)+1; + adj(n2,n1)= adj(n2,n1)+1; + seq(n1) = seq(n1)-1; + seq(n2) = seq(n2)-1; + end + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphRadius.m b/downloaded/matlab-networks-toolbox-master/graphRadius.m new file mode 100644 index 0000000..931ceb9 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphRadius.m @@ -0,0 +1,13 @@ +%################################################################## +% The minimum vertex eccentricity is the graph radius. +% +% Inputs: adjacency matrix (nxn) +% Outputs: graph radius +% +% Other routines used: vertexEccentricity.m +% GB: last updated, Oct 10 2012 +%################################################################## + +function Rg=graphRadius(adj) + +Rg=min( vertexEccentricity(adj) ); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/graphSpectrum.m b/downloaded/matlab-networks-toolbox-master/graphSpectrum.m new file mode 100644 index 0000000..9ce565d --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/graphSpectrum.m @@ -0,0 +1,14 @@ +%################################################################## +% The eigenvalues of the Laplacian of the graph. +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: laplacian eigenvalues, sorted +% +% Other routines used: laplacianMatrix.m +% GB: last updated, Oct 10 2012 +%################################################################## + +function s=graphSpectrum(adj) + +[~,D]=eig(laplacianMatrix(adj)); +s=-sort(-diag(D)); % sort in decreasing order \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/inc2adj.m b/downloaded/matlab-networks-toolbox-master/inc2adj.m new file mode 100644 index 0000000..c2800b6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/inc2adj.m @@ -0,0 +1,53 @@ +%################################################################## +% Convert an incidence matrix representation to an adjacency matrix representation for an arbitrary graph. +% +% INPUTs: incidence matrix, nxm (num nodes x num edges) +% OUTPUTs: adjacency matrix, nxn +% +% GB: last updated, Sep 25, 2012 +%################################################################## + + +function adj = inc2adj(inc) + +m = size(inc,2); % number of edges +adj = zeros(size(inc,1)); % initialize adjacency matrix + +if isempty(find(inc==-1)) % undirected graph + + for e=1:m + + ind=find(inc(:,e)==1); + + if length(ind)==2 + adj(ind(1),ind(2))=1; + adj(ind(2),ind(1))=1; + elseif length(ind)==1 % selfloop + adj(ind,ind)=1; + else + 'invalid incidence matrix' + return + end + + end + +else % directed graph (there are "-1" + % entries in the incidence matrix) + + for e=1:m + + ind1=find(inc(:,e)==1); + indm1=find(inc(:,e)==-1); + + if isempty(indm1) & length(ind1)==1 % selfloop + adj(ind1,ind1)=1; + elseif length(indm1)==1 & length(ind1)==1 + adj(indm1,ind1)=1; + else + 'invalid incidence matrix' + return + end + + end + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/inc2edgeL.m b/downloaded/matlab-networks-toolbox-master/inc2edgeL.m new file mode 100644 index 0000000..74d64f2 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/inc2edgeL.m @@ -0,0 +1,31 @@ +%################################################################## +% Convert an incidence matrix to an edge list. +% +% Inputs: inc - incidence matrix nxm (number of nodes x number of edges) +% Outputs: edge list - mx3, m x (node 1, node 2, edge weight) +% +% Example: [-1; 1] <=> [1,2,1], one directed (1->2) edge +% GB: last updated, Sep 25 2012 +%################################################################## + +function el = inc2edgeL(inc) + +m = size(inc,2); % number of edges +el = zeros(m,3); % initialize edge list [n1, n2, weight] + +for e=1:m + ind_m1 = find(inc(:,e)==-1); + ind_p1 = find(inc(:,e)==1); + + if numel(ind_m1)==0 & numel(ind_p1)==1 % undirected, self-loop + el(e,:) = [ind_p1 ind_p1 1]; + + elseif numel(ind_m1)==0 & numel(ind_p1)==2 % undirected + el(e,:) = [ind_p1(1) ind_p1(2) 1]; + el=[el; ind_p1(2) ind_p1(1) 1]; + + elseif numel(ind_m1)==1 & numel(ind_p1)==1 % directed + el(e,:) = [ind_m1 ind_p1 1]; + + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isBipartite.m b/downloaded/matlab-networks-toolbox-master/isBipartite.m new file mode 100644 index 0000000..f40ad00 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isBipartite.m @@ -0,0 +1,49 @@ +%################################################################## +% Test whether a graph is bipartite. If so, return the two vertex sets. +% A bipartite graph is a graph for which the nodes can be split in two sets A and B, +% such that there are no edges that connect nodes within A or within B. +% +% Inputs: graph in the form of adjacency list (neighbor list, see adj2adjL.m) +% Outputs: true/false (boolean), empty set (if false) or two sets of vertices +% +% Note: This only works for undirected graphs. +% GB: last updated, Sep 24, 2012 +%################################################################## + +function [isit,A,B]=isBipartite(L) + +isit=true; % default +A=[]; B=[]; + +queue=[1]; % initialize to first vertex arbitrarily +visited=[]; % initilize to empty +A=[1]; % put the first node on the queue in A, arbitrarily + +while not(isempty(queue)) + + i=queue(1); + visited=[visited, i]; + + if length(find(A==i))>0 + for j=1:length(L{i}) + B=[B,L{i}(j)]; + if length(find(visited==L{i}(j)))==0; queue=[queue, L{i}(j)]; end + end + + elseif length(find(B==i))>0 + + for j=1:length(L{i}) + A=[A,L{i}(j)]; + if length(find(visited==L{i}(j)))==0; queue=[queue, L{i}(j)]; end + end + + end + + queue=queue(2:length(queue)); % remove the visited node + + % if A and B overlap, return false, [],[] ==== + A=unique(A); B=unique(B); + if not(isempty(intersect(A,B))); isit=false; A=[]; B=[]; return; end + % ============================================ + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isComplete.m b/downloaded/matlab-networks-toolbox-master/isComplete.m new file mode 100644 index 0000000..53ce71b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isComplete.m @@ -0,0 +1,19 @@ +%################################################################## +% Check whether a graph is complete, i.e. whether every node is linked to every other node. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: Boolean variable, true/false +% +% Note: Only defined for unweighted graphs. +% GB: last updated, Sep 23, 2012 +%################################################################## + +function S=isComplete(adj) + +S=false; % default + +adj=adj>0; % remove weights +n=length(adj); + +% all degrees "n-1" or "n" or w/ n selfloops +if sum(adj)==ones(1,n)*(n-1) | sum(adj)==ones(1,n)*n; S=true; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isConnected.m b/downloaded/matlab-networks-toolbox-master/isConnected.m new file mode 100644 index 0000000..8f6fc07 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isConnected.m @@ -0,0 +1,66 @@ +%################################################################## +% Determine if a graph is connected +% Idea by Ed Scheinerman, circa 2006, source: http://www.ams.jhu.edu/~ers/matgraph/ +% routine: matgraph/@graph/isconnected.m +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: Boolean variable, 0 or 1 +% +% Note: This function works only for undirected graphs. +% GB: last updated, Sep 23 2012 +%################################################################## + +function S = isConnected(adj) + +if not(isempty(find(sum(adj)==0))); S = false; return; end + +n = length(adj); +x = [1; zeros(n-1,1)]; % [1,0,...0] nx1 vector + +while 1 + y = x; + x = adj*x + x; + x = x>0; + + if x==y; break; end + +end + +S = true; +if sum(x) 0 then the graph is connected +% a=algebraic_connectivity(adj); +% S = false; if a>0; S = true; end + +% Alternative 2 ========================================================== +% Uses the fact that multiplying the adj matrix to itself k times give the +% number of ways to get from i to j in k steps. If the end of the +% multiplication in the sum of all matrices there are 0 entries then the +% graph is disconnected. Computationally intensive, but can be sped up by +% the fact that in practice the diameter is very short compared to n, so it +% will terminate in order of log(n)? steps. +% function S=isconnected(el): +% +% S=false; +% +% adj=edgeL2adj(el); +% n=numnodes(adj); % number of nodes +% adjn=zeros(n); +% +% adji=adj; +% for i=1:n +% adjn=adjn+adji; +% adji=adji*adj; +% +% if length(find(adjn==0))==0 +% S=true; +% return +% end +% end + +% Alternative 3 ========================================================== +% Find all connected components, if their number is 1, the graph is +% connected. Use find_conn_comp(adj). \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isDirected.m b/downloaded/matlab-networks-toolbox-master/isDirected.m new file mode 100644 index 0000000..c55e23c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isDirected.m @@ -0,0 +1,14 @@ +%################################################################## +% Checks whether the graph is directed, using the matrix transpose function +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: boolean variable, 0 or 1 +% +% Note: one-liner alternative: S=not(issymmetric(adj)); +% GB: last updated, Sep 23, 2012 +%################################################################## + +function S=isDirected(adj) + +S = true; +if adj==transpose(adj); S = false; end diff --git a/downloaded/matlab-networks-toolbox-master/isEulerian.m b/downloaded/matlab-networks-toolbox-master/isEulerian.m new file mode 100644 index 0000000..6c0aea1 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isEulerian.m @@ -0,0 +1,31 @@ +function response=isEulerian(A) +%ISEULERIAN Check if a graph is Eulerian, i.e. it has an Eulerian circuit + +% @input A, NxN adjacency matrix +% @output response, boolean response: [0, 1] + +% "A connected undirected graph is Eulerian if and only if every graph vertex has an even degree." +% "A connected directed graph is Eulerian if and only if every graph vertex has equal in- and out- degree." +% Note 1: Assume that the graph is connected. +% Note 2: If there is an Eulerian trail, it is reported. +% +% Other routines used: degrees.m, isDirected.m + +% Updated: fprintf +% IB: last updated, 3/24/14 + +response=false; + +[degs,indeg,outdeg]=degrees(A); +odd=find(mod(degs,2)==1); + +if not(isDirected(A)) & isempty(odd) % if undirected and all degrees are even + response=true; + +elseif isDirected(A) & indeg==outdeg % directed and in-degrees equal out-degrees + response=true; + +elseif numel(odd)==2 + fprintf('isEulerian.m: There is an Eulerian trail from node %2i to node %2i\n',odd(1),odd(2)); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isGraphic.m b/downloaded/matlab-networks-toolbox-master/isGraphic.m new file mode 100644 index 0000000..859584b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isGraphic.m @@ -0,0 +1,32 @@ +%################################################################## +% Check whether a sequence of number is graphic, i.e. +% a graph with this degree sequence exists +% Source: ErdÅ‘s, P. and Gallai, T. "Graphs with Prescribed Degrees +% of Vertices" [Hungarian]. Mat. Lapok. 11, 264-274, 1960. +% +% INPUTs: a sequence (vector) of numbers +% OUTPUTs: boolean, true or false +% +% Note: Not generalized to directed graph degree sequences. +% GB: last updated, Sep 24, 2012 +%################################################################## + +function B = isGraphic(seq) + +if not(isempty(find(seq<=0))) | mod(sum(seq),2)==1 + % there are non-positive degrees or their sum is odd + B = false; return; +end + +n=length(seq); +seq=-sort(-seq); % sort in decreasing order + +for k=1:n-1 + sum_dk = sum(seq(1:k)); + sum_dk1 = sum(min([k*ones(1,n-k);seq(k+1:n)])); + + if sum_dk > k*(k-1) + sum_dk1; B = false; return; end + +end + +B = true; \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isLowerTriangular.m b/downloaded/matlab-networks-toolbox-master/isLowerTriangular.m new file mode 100644 index 0000000..2387993 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isLowerTriangular.m @@ -0,0 +1,28 @@ +function [ ret ] = isLowerTriangular( A, enforce_strictly ) +%ISLOWERTRIANGULAR Tests if a matrix is lower-triangular +% This method is intended to check half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% @input A, [NxN] adjacency matrix +% @input enforce_strictly[optional, default: false], a boolean choice to +% ensure no nonzero elements are along the diagonal. + +% @output boolean response if A is lower triangular + +if(~exist('enforce_strictly', 'var') || isempty(enforce_strictly) || enforce_strictly == 0) + enforce_strictly = false(1); +else + enforce_strictly = true(1); +end + +a = any(any(triu(A, 1))); +b = any(diag(A)); +if(enforce_strictly && ~b && ~a) + ret = 1; +elseif(~enforce_strictly && ~a) + ret =1; +else + ret = 0; +end + diff --git a/downloaded/matlab-networks-toolbox-master/isRegular.m b/downloaded/matlab-networks-toolbox-master/isRegular.m new file mode 100644 index 0000000..3e7f5a6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isRegular.m @@ -0,0 +1,17 @@ +%################################################################## +% Checks whether a graph is regular, i.e. whether every node has the same degree. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: Boolean, 0 or 1 +% +% Note: Defined for unweighted graphs only. +% GB: last updated, Sep 23, 2012 +%################################################################## + +function S=isRegular(adj) + +S=false; + +degs=sum(adj>0); % remove weights and sum columns + +if degs == degs(1)*ones(size(degs)); S = true; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isSimple.m b/downloaded/matlab-networks-toolbox-master/isSimple.m new file mode 100644 index 0000000..20b7639 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isSimple.m @@ -0,0 +1,15 @@ +%################################################################## +% Checks whether a graph is simple (undirected, no self-loops, no multiple edges, no weighted edges) +% +% INPUTs: adj - adjacency matrix +% OUTPUTs: S - a Boolean variable; true (1) or false (0) +% +% Other routines used: selfLoops.m, multiEdges.m, isDirected.m +% GB: last updated, September 23, 2012 +%################################################################## + +function S = isSimple(adj) + +S=true; + +if isDirected(adj) | selfLoops(adj)>0 | multiEdges(adj)>0 | length(find(adj>1)); S=false; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isSymmetric.m b/downloaded/matlab-networks-toolbox-master/isSymmetric.m new file mode 100644 index 0000000..0dc10e4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isSymmetric.m @@ -0,0 +1,13 @@ +%################################################################## +% Checks whether a matrix is symmetric (has to be square) +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: boolean variable, {0,1} +% +% GB: last update, Sep 23, 2012 +%################################################################## + +function S = isSymmetric(mat) + +S = false; % default +if mat == transpose(mat); S = true; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isTree.m b/downloaded/matlab-networks-toolbox-master/isTree.m new file mode 100644 index 0000000..b94155f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isTree.m @@ -0,0 +1,17 @@ +%################################################################## +% Check whether a graph is a tree +% A tree is a connected graph with n nodes and (n-1) edges. +% Source: "Intro to Graph Theory" by Bela Bollobas +% +% INPUTS: adjacency matrix, nxn +% OUTPUTS: Boolean variable, 0 or 1 +% +% Other routines used: isConnected.m, numEdges.m, numNodes.m +% GB: last updated, Sep 24, 2012 +%################################################################## + +function S=isTree(adj) + +S=false; + +if isConnected(adj) & numEdges(adj)==numNodes(adj)-1; S=true; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/isTriangular.m b/downloaded/matlab-networks-toolbox-master/isTriangular.m new file mode 100644 index 0000000..0f35da3 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isTriangular.m @@ -0,0 +1,21 @@ +function [ ret ] = isTriangular( A, enforce_strictly ) +%ISTRIANGULAR Tests if a matrix is triangular (upper or lower) +% This method is intended to check half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% @input A, [NxN] adjacency matrix +% @input enforce_strictly[optional, default: false], a boolean choice to +% ensure no nonzero elements are along the diagonal. + +% @output boolean response if A is triangular + +if(~exist('enforce_strictly', 'var') || isempty(enforce_strictly) || enforce_strictly == 0) + enforce_strictly = false(1); +else + enforce_strictly = true(1); +end + +ret = isUpperTriangular(A, enforce_strictly) | isLowerTriangular(A, enforce_strictly); +end + diff --git a/downloaded/matlab-networks-toolbox-master/isUpperTriangular.m b/downloaded/matlab-networks-toolbox-master/isUpperTriangular.m new file mode 100644 index 0000000..25003d3 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isUpperTriangular.m @@ -0,0 +1,29 @@ +function [ ret ] = isUpperTriangular( A, enforce_strictly ) +%ISUPPERTRIANGULAR Tests if a matrix is upper-triangular +% This method is intended to check half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% @input A, [NxN] adjacency matrix +% @input enforce_strictly[optional, default: false], a boolean choice to +% ensure no nonzero elements are along the diagonal. + +% @output boolean response if A is upper triangular + + +if(~exist('enforce_strictly', 'var') || isempty(enforce_strictly) || enforce_strictly == 0) + enforce_strictly = false(1); +else + enforce_strictly = true(1); +end + +a = any(any(tril(A, -1))); +b = any(diag(A)); +if(enforce_strictly && ~b && ~a) + ret = 1; +elseif(~enforce_strictly && ~a) + ret =1; +else + ret = 0; +end + diff --git a/downloaded/matlab-networks-toolbox-master/isWeighted.m b/downloaded/matlab-networks-toolbox-master/isWeighted.m new file mode 100644 index 0000000..69fabc4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/isWeighted.m @@ -0,0 +1,14 @@ +%################################################################## +% Check whether a graph is weighted, i.e edges have weights. +% +% INPUTS: edge list, m x 3, m: number of edges, [node 1, node 2, edge weight] +% OUTPUTS: Boolean variable, 0 or 1 +% +% GB: last updated, Sep 23, 2012 +%################################################################## + +function S=isWeighted(el) + +S=true; + +if numel( find(el(:,3)==1) ) == size(el,1); S=false; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/kminNeighbors.m b/downloaded/matlab-networks-toolbox-master/kminNeighbors.m new file mode 100644 index 0000000..8b4d132 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/kminNeighbors.m @@ -0,0 +1,22 @@ +%################################################################## +% Finds the number of "kmin"-neighbors (k links away at a minimum) for every node +% If nodes are k-links away due to loops (so they appear as m-neighbours, m0)]; + adjk = adjk*adj; +end + +kneigh = setdiff(find(adjk(ind,:)>0),[close_neighbors ind]); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/kneighbors.m b/downloaded/matlab-networks-toolbox-master/kneighbors.m new file mode 100644 index 0000000..232c76e --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/kneighbors.m @@ -0,0 +1,20 @@ +function neighbors = kneighbors(A,ind,k) +%KNEIGHBORS Finds the adjacency list of nodes at distance k from 'ind' +% +% @input A, NxN adjacency matrix +% @input ind, a scalar node # of the search index +% @input k, a scalar for distance to search +% @output neighbors, a adjacency list of nodes reachable from 'ind' in 'k' hops +% INPUTS: adjacency matrix (nxn), start node index, k - number of links +% OUTPUTS: vector of k-neighbors indices +% +% Updated: For readability. + +% IB: last updated, 3/23/14 + +adjk = A; +for i=1:k-1 + adjk = adjk*A; +end; + +neighbors = find(adjk(ind,:)>0); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/kregular.m b/downloaded/matlab-networks-toolbox-master/kregular.m new file mode 100644 index 0000000..b09ee14 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/kregular.m @@ -0,0 +1,59 @@ +function el = kregular(n,k) +%KREGULAR Create a k-regular graph. +% Note: No solution for k and n both odd. +% +% @inputs n, # of nodes +% @input k, 1xN vector with degree of each vertex +% @output el, Kx3 edge list +% +% Other routines used: symmetrizeEdgeL.m + +% Updated: support for ismember 'rows' in MATLAB. +% IB: last updated, 3/24/14 + +el=[0,0,0]; + +if k>n-1; fprintf('a simple graph with n nodes and k>n-1 does not exist\n'); return; end +if mod(k,2)==1 && mod(n,2)==1; fprintf('no solution for *n* and *k* both odd\n'); return; end + + +half_degree=floor(k/2); % k/2 if k even, else (k-1)/2 + + +for node=1:n + for kk=1:half_degree + + node_f=mod(node+kk,n); + if node_f==0; node_f=n; end + + if not(ismember([node,node_f,1],el,'rows')) + el = [el; node node_f 1]; %#ok + end + + node_b=mod(node-kk,n); + if node_b==0; node_b=n; end + + if not(ismember([node,node_b,1],el,'rows')) + el = [el; node node_b 1]; %#ok + end + + + end +end + +if mod(k,2)==1 && mod(n,2)==0 + % connect mirror nodes + for node=1:n/2 + + node_m=mod(node+n/2,n); + if node_m==0; node_m=n; end + + if not(ismember([node,node_m,1],el,'rows')) + el = [el; node node_m 1]; %#ok + end + + end +end + +el = el(2:end, :); +el=symmetrizeEdgeL(el); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/laplacianMatrix.m b/downloaded/matlab-networks-toolbox-master/laplacianMatrix.m new file mode 100644 index 0000000..fff7032 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/laplacianMatrix.m @@ -0,0 +1,32 @@ +%################################################################## +% The Laplacian matrix defined for a *simple* graph +% Def: the difference b/w the diagonal degree and the adjacency matrices +% Note: This is not the normalized Laplacian +% +% INPUTS: adjacency matrix, nxn +% OUTPUTs: Laplacian matrix, nxn +% +% GB: last updated, Oct 10 2012 +%################################################################## + +function L=laplacianMatrix(adj) + +L=diag(sum(adj))-adj; + + +% NORMALIZED Laplacian ============= + +% def normLaplacianMatrix(adj): + +% n=length(adj); +% deg = sum(adj); % for other than simple graphs, +% use [deg,~,~]=degrees(adj); + +% L=zeros(n); +% edges=find(adj>0); +% +% for e=1:length(edges) +% [ii,jj]=ind2sub([n,n],edges(e)) +% if ii==jj; L(ii,ii)=1; continue; end +% L(ii,jj)=-1/sqrt(deg(ii)*deg(jj)); +% end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/leafEdges.m b/downloaded/matlab-networks-toolbox-master/leafEdges.m new file mode 100644 index 0000000..220498b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/leafEdges.m @@ -0,0 +1,24 @@ +%################################################################## +% Returns the leaf edges of the graph: edges with one adjacent edge only. +% +% Note 1: For a directed graph, leaf edges are those that "flow into" a leaf node. +% Note 2: There could be other definitions of leaves, for example: farthest away from a given root node. +% Note 3: Edges that are self-loops are not considered leaf edges. +% Note 4: Single floating disconnected edges are not considered leaf edges. +% +% Input: adjacency matrix, nxn +% Output: set of leaf edges: a (num edges x 2) matrix where every row contains the leaf edge nodal indices +% +% GB: last updated, Sep 23, 2012 +%################################################################## + + +function edges=leafEdges(adj) + +adj=int8(adj>0); + +lves=find(sum(adj)==1); % same as leaf_nodes.m + +edges=[]; + +for i=1:length(lves); edges=[edges; find(adj(:,lves(i))==1),lves(i)]; end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/leafNodes.m b/downloaded/matlab-networks-toolbox-master/leafNodes.m new file mode 100644 index 0000000..c689164 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/leafNodes.m @@ -0,0 +1,18 @@ +%################################################################## +% Return the indices of the leaf nodes of the graph, i.e. all nodes of degree 1 +% +% Note 1: For a directed graph, leaf nodes are those with a single incoming edge +% Note 2: There could be other definitions of leaves, for example: farthest away from a given root node +% Note 3: Nodes with self-loops are not considered leaf nodes. +% +% Input: adjacency matrix, nxn +% Output: indices of leaf nodes +% +% GB: last updated, Sep 23, 2012 +%################################################################## + +function leaves=leafNodes(adj) + +adj=int8(adj>0); + +leaves=find(sum(adj)==1); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/license.txt b/downloaded/matlab-networks-toolbox-master/license.txt new file mode 100644 index 0000000..ebd108c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/license.txt @@ -0,0 +1,9 @@ +Copyright (c) 2013, Massachusetts Institute of Technology. +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +- Neither the name of the Massachusetts Institute of Technology nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/matlab-networks-toolbox-master/linkDensity.m b/downloaded/matlab-networks-toolbox-master/linkDensity.m new file mode 100644 index 0000000..cc8af81 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/linkDensity.m @@ -0,0 +1,5 @@ +function d=linkDensity(A) +%LINKDENSITY Computes the edge density of a graph. +% Aliased from edgeDensity. See edgeDensity for documentation. + +[ d ] = edgeDensity( A ); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/loops3.m b/downloaded/matlab-networks-toolbox-master/loops3.m new file mode 100644 index 0000000..7a3c292 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/loops3.m @@ -0,0 +1,13 @@ +%################################################################## +% Calculate number of loops/cycles of length 3 +% +% INPUTs: adj - adjacency matrix, nxn +% OUTPUTs: L3 - number of triangles (loops of length 3) +% +% Note: Valid for an undirected network. +% GB: last updated, Oct 5, 2012 +%################################################################## + +function L3 = loops3(adj) + +L3 = trace(adj^3)/6; % trace(adj^3)/3! \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/loops4.m b/downloaded/matlab-networks-toolbox-master/loops4.m new file mode 100644 index 0000000..715e901 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/loops4.m @@ -0,0 +1,43 @@ +%################################################################## +% Find cycles of length 4 in a graph; +% Note 1: Quite basic and slow. +% Note 2: Assumes undirected graph. +% +% INPUTs: adj - adjacency matrix of graph, nxn +% OUTPUTs: 4-tuples of nodes that form 4-cycles; +% format: {"n1-n2-n3-n4","n5-n6-n7-n8",...} +% +% Other functions used: adj2adjL.m +% GB: last updated, Oct 5 2012 +%################################################################## + +function l4 = loops4(adj) + +n = size(adj,1); % number of nodes +L = adj2adjL(adj); % adjacency list or list of neighbors + +l4 = {}; % initialize loops of size 4 + +for i=1:n-1 + for j=i+1:n + + int=intersect(L{i},L{j}); + int=setdiff(int,[i j]); + + if length(int)>=2 + % enumerate pairs in the intersection + for ii=1:length(int)-1 + for jj=ii+1:length(int) + loop4=sort([i,j,int(ii),int(jj)]); + loop4=strcat(num2str(loop4(1)),'-',num2str(loop4(2)),'-',num2str(loop4(3)),'-',num2str(loop4(4))); + + if sum(ismember(l4,loop4))>0; continue; end + l4{length(l4)+1}=loop4; + + end + end + end + + + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/louvainCommunityFinding.m b/downloaded/matlab-networks-toolbox-master/louvainCommunityFinding.m new file mode 100644 index 0000000..4fc6395 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/louvainCommunityFinding.m @@ -0,0 +1,129 @@ +function [modules,inmodule] = louvainCommunityFinding(A) +%LOUVAINCOMMUNITYFINDING Implementation of a community finding algorithm by Blondel et al + +% @input A, NxN adjacency matrix +% @output modules, cell array of node groupings, each cell element contains a vector of node numbers +% @output inmodule, a 1xN cell array of the node's affiliation + +% Source: "Fast unfolding of communities in large networks", July 2008 +% https://sites.google.com/site/findcommunities/ +% Note 1: This is just the first step of the Louvain community finding +% algorithm. To extract fewer communities, need to repeat with +% the resulting modules themselves. +% Note 2: This works for undirected graphs only. +% Note 3: Permuting randomly the node order at every step helps the +% algorithm performance. Unfortunately, node order in this +% algorithm affects the results. +% + +% +% Other routines used: numEdges.m, kneighbors.m + +% Updated: muted method. +% GB: last updated, Oct 17 2012 +%################################################################## + + + +m = numEdges(A); +n = numNodes(A); + +inmodule = {}; % inmodule{node} = module +for mm=1:length(A); inmodule{mm} = mm; end; + +modules = inmodule; % equal only for this step; modules{ind} = [nodes in module] + +% for all nodes, visit and assess joining to their neighbors +% revisit until no improvement in dQ is available + +converged = false; + +while not(converged) + + converged = true; + + perm = randperm(n); % permute the order of the nodes randomly + % this helps the algorithm performance + for i=1:n + + i = perm(i); + + neigh = kneighbors(A,i,1); + dQ = zeros(1,length(neigh)); + + c0 = inmodule{i}; + + for nei=1:length(neigh) + % attempt to join i and neigh(nei) + % that is: move i from modules{i} to modules{neigh(nei)} + % if dQs balance is positive, do move; else: move on + + c1 = inmodule{neigh(nei)}; + dQ(nei) = dQi(i,c0,c1,A,modules,m); + + end % loop across all neighbors + + [maxdQ,maxnei] = max(dQ); + + if maxdQ>0 + + modules{inmodule{i}} = setdiff(modules{inmodule{i}},i); % remove i from c0=inmodule{i} + inmodule{i}=inmodule{neigh(maxnei)}; % assign inmodule{i} to inmodule{neigh(maxnei)} + modules{inmodule{neigh(maxnei)}} = [modules{inmodule{neigh(maxnei)}} i]; % add i to modules{inmodule{neigh(maxnei)}} + + converged = false; + + end + + + end % loop across all nodes + +end % convergence loop + + +% remove empty modules +new_modules={}; +for mm=1:length(modules) + if length(modules{mm})>0; new_modules{length(new_modules)+1}=modules{mm}; end +end + +modules=new_modules; + +%fprintf('found %3i modules\n',length(modules)); + + + +function dqi = dQi(i,c0,c1,adj,modules,m) + +% INPUTs: +% c0, c1: indices of the two modules +% i: node which changes membership +% modules: modules{c0} = [list of nodes] etc +% m: total number of nodes in graph +% +% OUTPUTs: dqi: modularity change if i moves from c0 to c1 + +if c0 == c1; dqi=0; return; end % same module - no change in modularity + +% k_ic0: degree of i within c0 +k_ic0 = sum(adj(i,modules{c0})); + +% k_ic1: degree of i witnin c1 +k_ic1 = sum(adj(i,modules{c1})); + +% k_i: degree of i (in entire graph) +k_i = sum(adj(i,:)); + +% m_c0: number of edges in c0 +m_c0 = numEdges(adj(modules{c0},modules{c0})); + +% m_c1: number of edges in c1 +m_c1 = numEdges(adj(modules{c1},modules{c1})); + +dqi = (k_ic1-k_ic0)/(2*m) - k_i*(m_c1-m_c0)/(2*m^2); + + + +function p = randperm(n) + +[~,p] = sort(rand(n,1)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/lowerTriangularToFull.m b/downloaded/matlab-networks-toolbox-master/lowerTriangularToFull.m new file mode 100644 index 0000000..cbce4b6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/lowerTriangularToFull.m @@ -0,0 +1,18 @@ +function [ A_full ] = lowerTriangularToFull( A ) +%LOWERTRIANGULARTOFULL Convert a lower triangular matrix to full by copying about the diagonal +% This method is intended to convert half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% Note: method returns 'A' unchanged when A not lower triangular + +% @input A, [NxN] adjacency matrix + +% @output A_full, a matrix with lower triangular elements copied across the diagonal + if(isLowerTriangular(A)) + A_full = tril(A) + tril(A, -1)'; % note, does not copy diagonal twice + else + A_full = A; + end +end + diff --git a/downloaded/matlab-networks-toolbox-master/masterEquationGrowthModel.m b/downloaded/matlab-networks-toolbox-master/masterEquationGrowthModel.m new file mode 100644 index 0000000..ed6d3c2 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/masterEquationGrowthModel.m @@ -0,0 +1,47 @@ +%################################################################## +% "Master equation" growth model, as presented in +% "Evolution of Networks" by Dorogovtsev, Mendez +% Note: probability of attachment: (q(i)+ma)/((1+a)mt), +% q(i)-indegree of i, a=const, t - time step (# nodes) +% +% INPUTS: number of nodes n, m - # links to add at each step, a=constant +% OUTPUTS: adjacency matrix, nxn +% +% Other routines used: weightedRandomSample.m +% GB: last updated, Nov 11, 2012 +%################################################################## + +function adj=masterEquationGrowthModel(n,m,a) + +adj=zeros(n); adj(1,2)=2; adj(2,1)=2; % initial condition +vertices = 2; +if nargin==2 | a==[]; a = 2; end % pick a constant + +while vertices < n + + t = vertices; + q=sum(adj); % in-degrees + + % compute the probability of attachment + pk = zeros(1,t); + for k=1:t; pk(k)=(q(k)+m*a)/((1+a)*m*t); end + + r = weightedRandomSample(m,[1:t],pk/sum(pk)); + if length(unique(r))~=length(r) + r = weightedRandomSample(m,[1:t],pk/sum(pk)); + end + + vertices=vertices+1; % add vertex + + % add m links + for node=1:length(r) + adj(vertices,r(node))=1; + adj(r(node),vertices)=1; + end + + adj(vertices,vertices)=1; % assure non-zero probability of attachment + +end + +adj = adj>0; % no multi-edges +adj=adj-diag(diag(adj)); % remove self-loops \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/maximalCliques.m b/downloaded/matlab-networks-toolbox-master/maximalCliques.m new file mode 100644 index 0000000..343ec0f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/maximalCliques.m @@ -0,0 +1,72 @@ +function [ MC ] = maximalCliques( A ) +%MAXIMALCLIQUES Find maximal cliques using the Bron-Kerbosch algorithm +% Given a graph's boolean adjacency matrix, A, find all maximal cliques +% on A using the Bron-Kerbosch algorithm in a recursive manner. The +% graph is required to be undirected and must contain no self-edges. + +% This script is adapted from Jeffery Wildman's script +% (http://www.mathworks.com/matlabcentral/fileexchange/30413-bron-kerbosch-maximal-clique-finding-algorithm), +% implementing Adrian Wilder's suggested speed-up (a factor of > 200 speed up on my test data) + +% **For speed (e.g. I am using this as a subroutine on >1M small subgraphs), there is no input checking, use standard adjacency matrices (undirected, no loops) ** + +% @input A, NxN boolean adjacency matrix +% @output MC, K-length cell array of nodes adjacent in each of K maximal cliques on the graph. + + +% Ref: Bron, Coen and Kerbosch, Joep, "Algorithm 457: finding all cliques +% of an undirected graph", Communications of the ACM, vol. 16, no. 9, +% pp: 575–577, September 1973. +% +% Ref: Cazals, F. and Karande, C., "A note on the problem of reporting +% maximal cliques", Theoretical Computer Science (Elsevier), vol. 407, +% no. 1-3, pp: 564-568, November 2008. + +% IB: last updated, 3/23/14 + +%% preallocate +n = size(A,2); % number of vertices +MC = cell(n,1); % storage for maximal cliques +R = false(n,1); % currently growing clique +P = true(n,1); % prospective nodes connected to all nodes in R +X = false(n,1); % nodes already processed +iclique=0; +A=A.'; %this speeds up some of the calculations below because we do not have to transpose A for each recursion + +%% run +bron_kerbosch(R,P,X); + +%% trim output +MC((iclique+1):end)=[]; + + function [] = bron_kerbosch( R, P, X ) + + if ~any(P | X) + % report R as a maximal clique + iclique=iclique+1; + MC{iclique}=find(R); + else + % choose pivot + ppivots = P | X; % potential pivots + binP = zeros(1,n); + binP(P) = 1; % binP contains ones at indices equal to the values in P + pcounts = binP*double(A(:,ppivots)); % cardinalities of the sets of neighbors of each ppivots intersected with P + % select one of the ppivots with the largest count + [~,ind] = max(pcounts); + temp_u=find(ppivots,ind,'first'); + u_p=temp_u(ind); + + for u = find(~A(:,u_p) & P).' % all prospective nodes who are not neighbors of the pivot + P(u)=false; + Rnew = R; + Rnew(u)=true; + Nu = A(:,u); + Pnew = P & Nu; + Xnew = X & Nu; + bron_kerbosch(Rnew, Pnew, Xnew); + X(u)=true; + end + end + + end % BKv2 +end % maximalCliques diff --git a/downloaded/matlab-networks-toolbox-master/minSpanTree.m b/downloaded/matlab-networks-toolbox-master/minSpanTree.m new file mode 100644 index 0000000..1c02a9d --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/minSpanTree.m @@ -0,0 +1,46 @@ +function A_sp = minSpanTree(A) +%MINSPANTREE Prim's minimal spanning tree algorithm + +% @input A, NxN adjacency matrix +% @output A_sp, NxN adjacency matrix of minimum spanning tree + +% Prim's alg idea: +% start at any node, find closest neighbor and mark edges +% for all remaining nodes, find closest to previous cluster, mark edge +% continue until no nodes remain +% +% INPUTS: graph defined by adjacency matrix, nxn +% OUTPUTS: matrix specifying minimum spanning tree (subgraph), nxn +% +% Other routines used: isConnected.m +% Updated: cleaned fprintf + +% IB Last updated: 3/24/14 + + +A_sp = []; + +% check if graph is connected: +if not(isConnected(A)); fprintf('This graph is not connected. No spanning tree exists.\n'); return; end + +n = length(A); % number of nodes +A_sp = zeros(n); % initialize tree + +A(A==0)=inf; % set all zeros in the matrix to inf + +conn_nodes = 1; % nodes part of the min-span-tree +rem_nodes = [2:n]; % remaining nodes + +while ~isempty(rem_nodes) + + [minlink]=min(min(A(conn_nodes,rem_nodes))); + ind=find(A(conn_nodes,rem_nodes)==minlink); + + [ind_i,ind_j] = ind2sub([length(conn_nodes),length(rem_nodes)],ind(1)); + + i=conn_nodes(ind_i); j=rem_nodes(ind_j); % gets back to adj indices + A_sp(i,j)=1; A_sp(j,i)=1; + conn_nodes = [conn_nodes j]; %#ok + rem_nodes = setdiff(rem_nodes,j); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/modularityMetric.m b/downloaded/matlab-networks-toolbox-master/modularityMetric.m new file mode 100644 index 0000000..9121912 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/modularityMetric.m @@ -0,0 +1,58 @@ +%################################################################## +% Computing the modularity for a given module/commnunity break-down +% Defined as: Q=sum_over_modules_i (eii-ai^2) (eq 5) in Newman and Girvan. +% eij = fraction of edges that connect community i to community j, ai=sum_j (eij) +% +% Source: Newman, Girvan, "Finding and evaluating community structure in networks" +% Newman, "Fast algorithm for detecting community structure in networks" +% +% INPUTs: adjacency matrix, nxn +% set of modules as cell array of vectors, ex: {[1,2,3],[4,5,6]} +% OUTPUTs: modularity metric, in [-1,1] +% +% Note: This computation makes sense for undirected graphs only. +% Other functions used: numEdges.m +% GB: last updated, October 16, 2012 +%################################################################## + +function Q=modularityMetric(modules,adj) + +nedges=numEdges(adj); % total number of edges + +Q = 0; +for m=1:length(modules) + + e_mm=numEdges(adj(modules{m},modules{m}))/nedges; + a_m=sum(sum(adj(:,modules{m})))/nedges - e_mm; + Q = Q + (e_mm - a_m^2); + +end + + +% % alternative: Q = sum_ij { 1/2m [Aij-kikj/2m]delta(ci,cj) } = +% % = sum_ij Aij/2m delta(ci,cj) - sum_ij kikj/4m^2 delta(ci,cj) = +% % = sum_modules e_cc - sum_modules (kikj/4m^2) = +% % = sum_modules (e_cc - ((sum_i ki)/2m)^2) +% +% n = numNodes(adj); +% m = numEdges(adj); +% +% % define the inverse of modules: node "i" <- module "c" if "i" in module "c" +% mod={}; +% for mm=1:length(modules) +% for ii=1:length(modules{mm}) +% mod{modules{mm}(ii)}=modules{mm}; +% end +% end +% +% Q = 0; +% +% for i=1:n +% for j=1:n +% +% if not(isequal(mod(i),mod(j))); continue; end +% +% Q = Q + (adj(i,j) - sum(adj(i,:))*sum(adj(j,:))/(2*m))/(2*m); +% +% end +% end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/multiEdges.m b/downloaded/matlab-networks-toolbox-master/multiEdges.m new file mode 100644 index 0000000..f349ee9 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/multiEdges.m @@ -0,0 +1,24 @@ +%################################################################## +% Counts the number of multiple edges in the graph +% Multiple edges here are defined as two or more edges that have the same origin and destination nodes. +% Note 1: This creates a natural difference in counting for undirected and directed graphs. +% +% INPUT: adjacency matrix, nxn +% OUTPUT: integer, number of multiple edges +% +% Examples: multiEdges([0 2; 2 0])=2, and multiEdges([0 0 1; 2 0 0; 0 1 0])=2 +% +% Note 2: The definition of number of multi-arcs (node pairs that have multiple edges across them) +% would be: mA = length(find(adj>1)) (normalized by 2 depending on whether the graph is directed) +% +% GB: last updated, Sep 20 2012 +%################################################################## + + +function mE=multiEdges(adj) + +if adj'==adj % here use "is symmetric" as surrogate for "is directed" + mE=sum(adj(find(adj>1)))/2; +else + mE=sum(adj(find(adj>1))); +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/nestedHierarchiesModel.m b/downloaded/matlab-networks-toolbox-master/nestedHierarchiesModel.m new file mode 100644 index 0000000..00024d6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/nestedHierarchiesModel.m @@ -0,0 +1,82 @@ +function el = nestedHierarchiesModel(N,L,G,kbar,rho) +%NESTEDHIERARCHIESMODEL Sales-Pardo hierarchical organization network model + +% @input N, scalar for number of nodes +% @input L, scalar for number of levels +% @input G, 1xL vector of nodes in each group per level +% @input kbar, scalar average degree +% @input rho [optional], ratio between average degrees at different levels +% @output el, edge list in Mx2 or Mx3 (weighted) format + + +% Based on: Sales-Pardo et al, "Extracting the hierarchical organization +% of complex systems", PNAS, Sep 25, 2007; vol.104; no.39 +% Supplementary material: +% http://www.pnas.org/content/suppl/2008/02/27/0703740104.DC1/07-03740SItext.pdf +% + +% Example inputs (from paper): N=640, L=3, G=[10,40,160], kbar=16, rho=1 + +% Other routines used: symmetrizeEdgeL.m + +% Updated: documentation, fprintf, -= operator to full form + +% IB: last updated, 3/24/14 + + + +%% first check whether the inputs are of the right size/type ============= + +if length(G)~=L; fprintf('the number of levels do not match'); return; end + +for x=2:L + if G(x)/G(x-1)~=ceil(G(x)/G(x-1)); fprintf('number of groups not an integer at level %2i\n',x); return ; end +end +if N/G(L)~=ceil(N/G(L)); fprintf('number of groups not an integer at level %2i\n',L); return ; end + + +%% formula on page 3 of supplementary material +if nargin<5; rho = kbar/(G(L)-1) - 1 + 0.05; end; % set to lower bound + +if rho < kbar/(G(L)-1) - 1; fprintf('rho is below its theoretical lower bound, given kbar and G(L)\n'); return; end + + +%% create node membership to various nested groups + +belongsto = {}; +for ii=1:N; belongsto{ii} = zeros(1,L); end % the level 1, 2, 3,... groups ii belongs to + + +for ii=1:N % across all nodes + + for level = 1:L % across all levels + + group = (ii-mod(ii,G(level)))/G(level) + 1; + if mod(ii,G(level))==0; group = group - 1; end + + belongsto{ii}(level) = group; + + end +end + + +el = []; + +for i=1:N + for j=i+1:N + + x = sum( belongsto{i}==belongsto{j} ); % number of common groups i and j belong to + + if x==0 + pij = (rho/(1+rho))^(L-x) * kbar / (N - G(1)); + else + pij = rho^(L-x)/(1+rho)^(L-x+1) * kbar/(G(x)-1); + end + + if rand < pij; el = [el; i j 1]; end + + + end +end + +el = symmetrizeEdgeL(el); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/newmanCommFast.m b/downloaded/matlab-networks-toolbox-master/newmanCommFast.m new file mode 100644 index 0000000..8668acb --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/newmanCommFast.m @@ -0,0 +1,129 @@ +%################################################################## +% Fast community finding algorithm by M. Newman +% Source: "Fast algorithm for detecting community +% structure in networks", Mark Newman +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: group (cluster) formation over time, +% modularity metric for each cluster breakdown +% +% Other functions used: numEdges.m +% Note: To save the plot generated in this routine: +% uncomment "print newmanCommFast_example.pdf" +% +% GB: last updated, Oct 12 2012 +%################################################################## + +function [groups_hist,Q]=newmanCommFast(adj) + +groups={}; +groups_hist={}; % a list of groups at each step +Q=[]; +n=size(adj,1); % number of vertices +groups_hist{1}={}; + +for i=1:n + groups{i}=i; % each node starts out as one community + groups_hist{1}{i}=i; +end + +Q(1) = Qfn(groups,adj); + +for s=1:n-1 % all possible iterations + + + dQ=zeros(length(groups)); + + for i=1:length(groups) + for j=i+1:length(groups) + group_i=groups{i}; + group_j=groups{j}; + + dQ(i,j)=0; % default + + % check if connected + connected=0; + if sum(sum(adj([group_i group_j],[group_i group_j])))>sum(sum(adj(group_i,group_i)))+sum(sum(adj(group_j,group_j))) + connected=1; + end + + if connected & not(isempty(group_i)) & not(isempty(group_j)) + % join groups i and j? + dQ(i,j)=deltaQ(groups,adj,i,j); + end + + end + end + + + % pick max nonzero dQ + dQ(find(dQ==0))=-Inf; + [minv,minij]=max(dQ(:)); + + [mini,minj]=ind2sub([size(dQ,1),size(dQ,1)],minij); % i and j corresponding to min dQ + groups{mini}=sort([groups{mini} groups{minj}]); + groups{minj}=groups{length(groups)}; % swap minj with last group + groups=groups(1:length(groups)-1); + + groups_hist{length(groups_hist)+1}=groups; % save current snapshot + Q(length(Q)+1) = Qfn(groups,adj); + +end % end of all iterations + +num_modules=[]; +for g=1:length(groups_hist) + num_modules=[num_modules length(groups_hist{g})]; +end + +set(gcf,'Color',[1 1 1],'Colormap',jet); +plot(num_modules,Q,'ko-') +xlabel('number of modules / communities') +ylabel('modularity metric, Q') + +% print newmanCommFast_example.pdf + + +function dQ=deltaQ(groups,adj,i,j) + +% computing the delta Q between two community configurations +% dQ = 2(e_ij - ai*aj) or (Q_groups_(i,j)_merged - Q_original) +% inputs: current community assignments: groups, adjacency matrix, i,j to be joined +% outputs: delta Q value (real number) + +% $$$ Q1=Qfn(groups,adj); +% $$$ groups{i}=[groups{i} groups{j}]; +% $$$ groups{j}=groups{length(groups)}; +% $$$ groups=groups(1:length(groups)-1); +% $$$ Q2=Qfn(groups,adj); +% $$$ dQ = Q2-Q1; + +% alternative dQ = 2(e_ij - ai*aj) from paper; +nedges=numEdges(adj); % compute the total number of edges +e_ii = numEdges( adj(groups{i},groups{i}) ) / nedges; +e_jj = numEdges( adj(groups{j},groups{j}) ) / nedges; +e_ij = numEdges( adj([groups{i} groups{j}],[groups{i} groups{j}]) ) / nedges - e_ii - e_jj; + +a_i=sum(sum(adj(groups{i},:)))/nedges-e_ii; +a_j=sum(sum(adj(groups{j},:)))/nedges-e_jj; + +dQ = 2*(e_ij-a_i*a_j); + + + +function Q=Qfn(modules,adj) % ======== same as modularityMetric.m ====== + +% Computing the modularity for the final module break-down +% Defined as: Q=sum_over_modules_i (eii-ai^2) (eq 5) in Newman and Girvan. +% eij = fraction of edges that connect community i to community j +% ai=sum_j (eij) + +nedges=numEdges(adj); % compute the total number of edges + +Q = 0; +for m=1:length(modules) + + e_mm=numEdges(adj(modules{m},modules{m}))/nedges; + a_m=sum(sum(adj(modules{m},:)))/nedges - e_mm; % counting e_mm only once + + Q = Q + (e_mm - a_m^2); +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/newmanEigenvectorMethod.m b/downloaded/matlab-networks-toolbox-master/newmanEigenvectorMethod.m new file mode 100644 index 0000000..1a98dda --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/newmanEigenvectorMethod.m @@ -0,0 +1,79 @@ +%################################################################## +% Find the "optimal" number of communities given a network using an eigenvector method +% Source: MEJ Newman: Finding community structure using the eigenvectors of matrices, +% arXiv:physics/0605087 + % Newman, "Modularity and community structure in networks", +% arxiv.org/pdf/physics/0602124v1 +% +% Q=(s^T)Bs, Bij=Aij-kikj/2m +% Bij^g=Bij - delta_ij * (sum k over g)B_ik +% Bij^g=(Aij-kikj/2m)-delta_ij(sum k over g)(A(g)_ik-deg(g)_i deg(k)_j/2(m_g)) +% Bij^g=(Aij-kikj/2m)-delta_ij(k_i^(g)-k_i*sum(deg^(g)/2m) +% +% STEPS: +% 1 define current modularity matrix +% 2 compute eigenvector corresp. to largest eigenvalue +% 3 separate into 2 modules based on signs in eigenvector +% terminate when max eigenvalue is 0 for all subgraphs +% +% Other functions used: numEdges.m, degrees.m, subgraph.m, isConnected.m +% GB: last modified, Oct 12, 2012 +%################################################################## + +function modules=newmanEigenvectorMethod(adj) + +modules={}; +n=length(adj); +m=numEdges(adj); +[deg,~,~]=degrees(adj); +queue{1}=[1:n]; % append all nodes to the queue + + +while length(queue)>0 % while there is always a divisible subgraph + + % compute modularity matrix- Bg + G=queue{1}; % nodes in current (sub)graph to partition + adjG=subgraph(adj,G); % first adjG same as original adj + + [degG,~,~]=degrees(adjG); + Bg=zeros(length(G)); + + for i=1:length(G) % nodes are G(i) + for j=i:length(G) % nodes are G(j) + + % Bij = adj(G(i),G(j))-deg(G(i))*deg(G(j))/(2*m) + % delta_ij = (i==j) + % k_i^g - k_i (d_g)/2m = degG(i)-deg(G(i))*sum(degG)/(2*m) + Bg(i,j)=( adj(G(i),G(j))-deg(G(i))*deg(G(j))/(2*m) )-(i==j)*(degG(i)-deg(G(i))*sum(degG)/(2*m)); + Bg(j,i)=Bg(i,j); + + end + end + + [V,E]=eig(Bg); % eigenvalues + + if abs(max(diag(E)))<=10^(-5) % terminate - indivisible + queue=queue(2:length(queue)); + modules={modules{1:length(modules)} G}; + continue + end + + [~,indmax]=max(diag(E)); + u1=V(:,indmax); + comm1=find(u1>0); comm2=find(u1<0); % indices in G + + if not(isConnected(adj(G(comm1),G(comm1)))) | not(isConnected(adj(G(comm2),G(comm2)))) + + queue=queue(2:length(queue)); % remove(G) + modules={modules{1:length(modules)} G}; % keep original G as indivisible + % found disconnected subgraphs - do not explore this option + + continue + + end + + + queue={queue{1:length(queue)}, G(comm1), G(comm2)}; % add comm1 and comm2 to the queue + queue=queue(2:length(queue)); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/newmanGastner.m b/downloaded/matlab-networks-toolbox-master/newmanGastner.m new file mode 100644 index 0000000..655519f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/newmanGastner.m @@ -0,0 +1,65 @@ +%################################################################## +% Implements the Newman-Gastner model for spatially distributed networks. +% Source: Newman, Gastner, "Shape and efficiency in spatial distribution networks" +% Note 1: minimize: wij = dij + beta x (dj0) +% Note 2: To save output plot, use "print filename.ext" (see line 65) +% +% Inputs: n - number of points/nodes, beta - parameter in [0,1], +% points: point coordinates (nx2) or empty; plot - 'on' or 'off' +% Outputs: graph (edge list), point coordinates and plot [optional] +% +% GB: last updated: November 11 2012 +%################################################################## + +function [el,points]=newmanGastner(n,beta,points,plt) + +if isempty(points) + % create random point coordinates + points = zeros(n,2); + rad = rand(1,n); + theta = 2*pi*rand(1,n); + for i=1:n; points(i,:) = rad(i)*[cos(theta(i)),sin(theta(i))]; end +end + + +% order points in closeness to 0 +for i=1:n; normp(i)=norm(points(i,:)); end +[normps,ind]=sort(normp); +points=points(ind,:); + + +% calculate distances between all points (can also use pdist) +L=zeros(n); +for i=1:n + for j=i+1:n + L(i,j)=norm(points(i,:)-points(j,:)); + L(j,i)=L(i,j); + end + L(i,i)=Inf; +end + + +if strcmp(plt,'on') % if plot is 'on' + set(gcf,'Color',[1 1 1]) + plot(points(:,1),points(:,2),'.','Color',[1,1,1]) + hold off; hold on; + axis off +end + + +% connect points consequtively +el=[]; +for i=2:n + % current node is "i" + w=L(i,1:i-1)+beta*normps(1:i-1); + [minv,minj]=min(w); + el=[el; i minj 1]; + + if strcmp(plt,'on') % if plot is 'on' + line([points(i,1) points(minj,1)],[points(i,2) points(minj,2)],'Color',[0.5,0.5,0.5]) + hold off; hold on; + %drawnow + end +end + +%print test.pdf \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/newmanGirvan.m b/downloaded/matlab-networks-toolbox-master/newmanGirvan.m new file mode 100644 index 0000000..8814647 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/newmanGirvan.m @@ -0,0 +1,74 @@ +%################################################################## +% Newman-Girvan community finding algorithm +% Source: Newman, Girvan, "Finding and evaluating +% community structure in networks" +% Algorithm idea: +% 1. Calculate betweenness scores for all edges in the network. +% 2. Find the edge with the highest score and remove it from the network. +% 3. Recalculate betweenness for all remaining edges. +% 4. Repeat from step 2. +% +% INPUTs: adjacency matrix (nxn), number of modules (k) +% OUTPUTs: modules (components) and modules history - +% each "current" module, Q - modularity metric +% +% Other routines used: edgeBetweenness.m, isConnected.m, +% findConnComp.m, subgraph.m, numEdges.m +% GB: last updated, Oct 11 2012 +%################################################################## + + +function [modules,module_hist,Q] = newmanGirvan(adj,k) + +n=size(adj,1); +module_hist{1} = [1:n]; % current component +modules{1}=[1:n]; + +curr_mod=1; + +adj_temp=adj; + + +while length(modules)0; spaths(i,j)=min([spaths(i,j) adjk(i,j)]); end + end + end + + adjk=adjk*adj; + +end + +clear adjk + +betw = zeros(1,n); +for i=1:n + [dist,P]=dijkstra(adj,i,[]); + + for j=1:n + + if dist(j)<=1; continue; end % either i=j or i,j are 1 edge apart + betw(P{j}(2:dist(j))) = betw(P{j}(2:dist(j))) + 1/spaths(i,j); + + end +end + +betw=betw/(2*nchoosek(n,2)); % further normalize by the number of all node pairs \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/nodeBetweennessSlow.m b/downloaded/matlab-networks-toolbox-master/nodeBetweennessSlow.m new file mode 100644 index 0000000..ebed06f --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/nodeBetweennessSlow.m @@ -0,0 +1,57 @@ +%################################################################## +% This function returns the betweenness measure of all vertices. +% Betweenness centrality measure: number of shortest paths running through a vertex. +% +% Note 1: Valid for a general graph. +% Note 2: Bug: currently the routine does not return the correct +% betweenness values for all nodes if the graph contains an even +% cycle. That is because an even cycle results in multiple shortest +% paths between some of the nodes, and this function chooses one +% shortest path for every pair of nodes. Fix TBA. +% +% INPUTS: adjacency or distances matrix (nxn) +% OUTPUTS: betweeness vector for all vertices (1xn) +% +% Other routines used: numNodes.m, shortestPathDP.m +% GB: June 4, 2013 +%################################################################## + +function betw = nodeBetweennessSlow(adj) + +n = numNodes(adj); +spaths=inf(n,n); + +% calculate number of shortest paths +for k=1:n-1 + + adjk=adj^k; + + for i=1:n + for j=1:n + if adjk(i,j)>0 + spaths(i,j)=min([spaths(i,j) adjk(i,j)]); + end + end + end + +end + +betw = zeros(1,n); + +for i=1:n + + [J_st,route_st,J,route]=shortestPathDP(adj,i,i,n); + + for j=1:n + + if i==j; continue; end + + [J_ji,step_ind] = min(J(:,j)); + route_ji = [j, route(step_ind,j).path]; + betw(route_ji(2:length(route_ji)-1)) = betw(route_ji(2:length(route_ji)-1)) + 1/spaths(j,i); + + end + +end + +betw=betw/(2*nchoosek(n,2)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/numConnComp.m b/downloaded/matlab-networks-toolbox-master/numConnComp.m new file mode 100644 index 0000000..199d2ea --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numConnComp.m @@ -0,0 +1,15 @@ +%################################################################## +% Calculate the number of connected components using the eigenvalues +% of the Laplacian - counting the number of zeros +% +% INPUTS: adjacency matrix, nxn +% OUTPUTs: positive integer - number of connected components +% +% Other routines used: graphSpectrum.m +% GB: last updated: September 22, 2012 +%################################################################## + +function nc=numConnComp(adj) + +s=graphSpectrum(adj); +nc=numel(find(s<10^(-5))); % zero eigenvalues are sometimes close to zeros numerically \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/numConnTriples.m b/downloaded/matlab-networks-toolbox-master/numConnTriples.m new file mode 100644 index 0000000..f2d84ef --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numConnTriples.m @@ -0,0 +1,41 @@ +%################################################################## +% Count the number of connected triples in a graph. +% Note: works for undirected graphs only +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: integer - number of connected triples +% +% Other routines used: kneighbors.m, loops3.m +% GB: last updated, October 4, 2012 +%################################################################## + +function c=numConnTriples(adj) + +c=0; % initialize + +for i=1:length(adj) + neigh=kneighbors(adj,i,1); + if length(neigh)<2; continue; end % handle leaves, no triple here + c=c+nchoosek(length(neigh),2); +end + +c=c-2*loops3(adj); % due to the symmetry triangles repeat 3 times + % in the nchoosek count + + +% alternative +% def numConnTriples(L): +% +% % input: adjacency list +% % outputs: number of connected triples +% +% c=0; % initialize number of connected triples +% l3 = 0; % initialize number of loops of size 3 +% +% for i=1:length(L) +% neigh = L{i} +% if length(neigh)<2: continue; end +% c = c + nchoosek(length(neigh),2); +% end +% +% c = c - 2*loops3(adjL2adj(L)); diff --git a/downloaded/matlab-networks-toolbox-master/numEdges.m b/downloaded/matlab-networks-toolbox-master/numEdges.m new file mode 100644 index 0000000..bbfb334 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numEdges.m @@ -0,0 +1,24 @@ +%################################################################## +% Returns the total number of edges given the adjacency matrix +% INPUTs: adjacency matrix, nxn +% OUTPUTs: m - total number of edges/links +% +% Note: Valid for both directed and undirected, simple or general graph +% Other routines used: selfLoops.m, issymmetric.m +% GB, last updated Sep 19, 2012 +%################################################################## + +function m = numEdges(adj) + +sl=selfLoops(adj); % counting the number of self-loops + +if isSymmetric(adj) & sl==0 % undirected simple graph + m=sum(sum(adj))/2; + +elseif isSymmetric(adj) & sl>0 + m=(sum(sum(adj))-sl)/2+sl; % counting the self-loops only once + +elseif not(isSymmetric(adj)) % directed graph (not necessarily simple) + m=sum(sum(adj)); + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/numLoops.m b/downloaded/matlab-networks-toolbox-master/numLoops.m new file mode 100644 index 0000000..97b13c4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numLoops.m @@ -0,0 +1,21 @@ +%################################################################## +% Calculate the number of independent loops (use G=m-n+c) +% where G = num loops, m - num edges, n - num nodes, +% c - number of connected components +% This is also known as the "cyclomatic number": the number of edges +% that need to be removed so that the graph doesn't have cycles. +% +% INPUTS: adjacency matrix, nxn +% OUTPUTs: number of independent loops (or cyclomatic number) +% +% Other routines used: numNodes.m, numEdges.m, findConnComp.m +% GB: last updated, Oct 5 2012 +%################################################################## + +function G = numLoops(adj) + +n=numNodes(adj); +m=numEdges(adj); +comp_mat = findConnComp(adj); + +G=m-n+length(comp_mat); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/numNodes.m b/downloaded/matlab-networks-toolbox-master/numNodes.m new file mode 100644 index 0000000..cd8548a --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numNodes.m @@ -0,0 +1,11 @@ +%################################################################## +% Returns the number of nodes, given an adjacency list, or adjacency matrix +% INPUTs: adjacency list: {i:j_1,j_2 ..} or adjacency matrix, ex: [0 1; 1 0] +% OUTPUTs: number of nodes, integer +% +% GB: last update Sep 19, 2012 +%################################################################## + +function n = numNodes(adjL) + +n = length(adjL); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/numStarMotifs.m b/downloaded/matlab-networks-toolbox-master/numStarMotifs.m new file mode 100644 index 0000000..b16f0a2 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/numStarMotifs.m @@ -0,0 +1,34 @@ +%################################################################## +% Calculate the number of star motifs of given (subgraph) size. +% Note 1: Easily extendible to return the actual stars as k-tuples of nodes. +% Note 2: Star of size 1 is the trivial case of a single node. +% +% INPUTs: adjacency list {} (1xn), k - star motif size +% OUTPUTs: number of stars with k nodes (k-1 spokes) +% +% GB: last updated, Oct 5, 2012 +%################################################################## + +function num = numStarMotifs(adjL,k) + +num = 0; + +for i=1:length(adjL) + if length(adjL{i})>=(k-1); num = num + nchoosek(length(adjL{i}),k-1); end +end + + + +% ALTERNATIVE +% function num = numStarMotifs(adj,k) +% +% % INPUTs: adjacency matrix, k - star motif size +% % OUTPUTs: number of stars with k nodes (k-1 spokes) +% +% [deg,~,~]=degrees(adj); +% +% num=0; +% +% for i=1:length(deg) +% if deg(i)>=(k-1); num=num+nchoosek(deg(i),k-1); end +% end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/pdfCdfRank.m b/downloaded/matlab-networks-toolbox-master/pdfCdfRank.m new file mode 100644 index 0000000..c278295 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/pdfCdfRank.m @@ -0,0 +1,54 @@ +%################################################################## +% Compute the pdf, cdf and rank distributions for a sequence of numbers +% +% INPUTS: sequence of values: x, (1xn), 'plot' - 'on' or 'off' +% OUTPUTS: pdf, cdf and rank distribution values, plot is optional +% +% Note: pdf = frequency distribution, cdf = cumulative frequency, +% rank = log-log scale of the sorted sequence +% GB: last updated, November 24 2012 +%################################################################## + +function [xpdf,ypdf,xcdf,ycdf,logk,logx]=pdfCdfRank(x,plt) + +xx=unique(x); + +bin = 100; % arbitrary, change if xx has few values +if length(xx)<100; bin = 10; end; + + +for ii=1:numel(xx) + xcdf(ii) = xx(ii); + ycdf(ii) = length(find(x<=xx(ii)))/numel(x); + + % how many x's fall in the interval [xx(ii)-0.5*numel(xx)/bin,xx(ii)+0.5*numel(xx)/bin] + xpdf(ii) = xx(ii); + ypdf(ii) = length(find(abs(xx(ii)-x)<=0.5*numel(xx)/bin))/numel(x); +end + +x=-sort(-x); +logk=log(1:length(x)); +logx=log(x); + +if strcmp(plt,'on') + set(gcf,'color',[1,1,1]) + + subplot(2,2,1) + hist(x,bin,'facecolor',[0.5 0.5 0.5]) + title('histogram') + + subplot(2,2,3) + plot(xpdf,ypdf,'k.') + title('pdf') + axis('tight') + + subplot(2,2,2) + plot(xcdf,ycdf,'k.') + title('cdf') + axis('tight') + + subplot(2,2,4) + plot(logk,logx,'k.') + title('rank') + axis('tight') +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/pearson.m b/downloaded/matlab-networks-toolbox-master/pearson.m new file mode 100644 index 0000000..3c637d8 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/pearson.m @@ -0,0 +1,34 @@ +%################################################################## +% Calculating the Pearson coefficient for a degree sequence. +% Source: "Assortative Mixing in Networks", M.E.J. Newman, Phys Rev Let 2002 +% +% INPUTs: M - (adjacency) matrix, nxn (square) +% OUTPUTs: r - Pearson coefficient +% +% Other routines used: degrees.m, numEdges.m, adj2inc.m +% GB: last updated, October 1, 2012 +%################################################################## + +function r = pearson(M) + +[degs,~,~] = degrees(M); % get the total degree sequence +m = numEdges(M); % number of edges in M +inc = adj2inc(M); % get incidence matrix for convience + +% j,k - remaining degrees of adjacent nodes for a given edge +% sumjk - sum of all products jk +% sumjplusk - sum of all sums j+k +% sumj2plusk2 - sum of all sums of squares j^2+k^2 + +% compute sumjk, sumjplusk, sumj2plusk2 +sumjk = 0; sumjplusk = 0; sumj2plusk2 = 0; +for i=1:m + [v] = find(inc(:,i)==1); + j = degs(v(1))-1; k = degs(v(2))-1; % remaining degrees of 2 end-nodes + sumjk = sumjk + j*k; + sumjplusk = sumjplusk + 0.5*(j+k); + sumj2plusk2 = sumj2plusk2 + 0.5*(j^2+k^2); +end + +% Pearson coefficient formula +r = (sumjk - sumjplusk^2/m)/(sumj2plusk2-sumjplusk^2/m); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/preferentialAttachment.m b/downloaded/matlab-networks-toolbox-master/preferentialAttachment.m new file mode 100644 index 0000000..d48e90b --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/preferentialAttachment.m @@ -0,0 +1,56 @@ +function el = preferentialAttachment(n,m) +%PREFERENTIALATTACHMENT simple preferential attachment for network growth. + +% The probability that a new vertex attaches to a given old vertex +% is proportional to the (total) vertex degree. + +% @input n final number of desired vertices +% @input m # of edges to attach at each step +% @output el, edge list in Mx3 format. + +% Note 1: Vertices arrive one at a time. +% Note 2: Assume undirected simple graph. +% Source: Newman, "The Structure and Function of Complex Networks" +% B-A., "Emergence of Scaling in Random Networks" + +% Other routines used: weightedRandomSample.m +% Updated: fprintf, documentation + +% IB: last updated, 3/24/14 +%################################################################## + + + +vertices = 2; +if not(vertices<=n); fprintf('Specify more than 2 nodes.\n'); return; end +el=[1 2 1; 2 1 1]; % start with one edge + + +while vertices < n + + vertices=vertices+1; % add new vertex + + if m>=vertices + for node=1:vertices-1 + el = [el; node vertices 1]; + el = [el; vertices node 1]; % add symmetric edge + end + continue + end + + deg=[]; % compute nodal degrees for this iteration + for v=1:vertices; deg=[deg; numel(find(el(:,1)==v))]; end + + + % add m edges + r = weightedRandomSample(m,[1:vertices],deg/sum(deg)); + while not(length(unique(r))==length(r)) + r = weightedRandomSample(m,[1:vertices],deg/sum(deg)); + end + + for node=1:length(r) + el = [el; r(node) vertices 1]; + el = [el; vertices r(node) 1]; + end + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/radialPlot.m b/downloaded/matlab-networks-toolbox-master/radialPlot.m new file mode 100644 index 0000000..806a734 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/radialPlot.m @@ -0,0 +1,128 @@ +function [] = radialPlot(A,i0) +% RADIALPLOT Plot nodes radially out from a given center. + +% Equidistant nodes +% have the same radius, but different angles. Works best as a quick +% visualization for trees, or very sparse graphs. +% +% @input A, NxN adjacency matrix +% @input i0 [optional], center node + +% @output [None returned], figure created + + +% Note 1: If a center node is not specified, the nodes are ordered by +% sum of neighbor degrees, and the node with highest sum is plotted +% in the center. +% Note 2: The graph has to be connected. +% Note 3: To change the color scheme, modify lines: 91, 98, 104 and 118 +% +% +% Other routines used: sortNodesBySumNeighborDegrees.m, +% adj2adjL.m, diameter.m, kminNeighbors.m + +% Updated: fprintf, documentation + +% IB: last updated, 3/24/14 + +d=diameter(A); +if d==Inf; fprintf('The graph is not connected.\n'); return; end + +if nargin==1; I=sortNodesBySumNeighborDegrees(A); i0=I(1); end; + +L=adj2adjL(A); + +circles={}; % per circle +circle{i0}=0; % per node + +for k=1:d + kneigh = kminNeighbors(A,i0,k); + if not(isempty(kneigh)); + circles{k}=kneigh; + for nei=1:length(kneigh); circle{kneigh(nei)}=k; end + end; +end + +for i=1:size(A,1); descendants{i} = 0; end; + +for k=length(circles)-1:-1:1 + + for i=1:length(circles{k}) + node = circles{k}(i); + neighs=L{node}; + + for nei=1:length(L{node}) + nei = L{node}(nei); + if sum(find(circles{k+1}==nei))>0; descendants{node}=descendants{node}+descendants{nei}+1; end + end + end + +end + +descendants{i0}=descendants{i0} + length(L{i0}); +for i=1:length(L{i0}); descendants{i0}=descendants{i0} + descendants{L{i0}(i)}; end; + +start_angle{i0}=0; +range{i0}=2*pi; + +queue=[i0]; visited=[]; + +while not(isempty(queue)) + + node=queue(1); queue=queue(2:length(queue)); visited=[visited node]; + + % select neighbours that have not been visited + neigh=[]; + for ll=1:length(L{node}) + if sum(find(visited==L{node}(ll)))==0 & sum(find(queue==L{node}(ll)))==0; + neigh=[neigh L{node}(ll)]; end; + end + + if isempty(neigh); continue; end; + + range{neigh(1)} = range{node}*(descendants{neigh(1)}+1)/descendants{node}; + start_angle{neigh(1)}=start_angle{node}; + if sum(find(queue==neigh(1)))==0; queue=[queue neigh(1)]; end; + + for j=2:length(neigh) + range{neigh(j)} = range{node}*(descendants{neigh(j)}+1)/descendants{node}; + start_angle{neigh(j)} = start_angle{neigh(j-1)} + range{neigh(j-1)}; + if sum(find(queue==neigh(j)))==0; queue=[queue neigh(j)]; end; + end + +end + +set(gcf,'Color',[1 1 1],'Colormap',hot); % Modify color scheme here +map=colormap('hot'); + +% plot with the angle and radius (circle) information +for i=1:size(A,1) + x = circle{i}*cos(start_angle{i}+range{i}/2); + y = circle{i}*sin(start_angle{i}+range{i}/2); + plot(x,y,'.','Color',map(mod(5*circle{i},length(map))+1,:)); hold off; hold on; +end + +xs = cos([0:1:30]*2*pi/30); +ys = sin([0:1:30]*2*pi/30); +for c=1:length(circles) + plot(c*xs,c*ys,':','Color',[244/255,244/255,244/255]); + hold off; hold on; +end + +% add the links between nodes +for i=1:size(A,1) + for j=i+1:size(A,1) + if A(i,j)>0 + xi=circle{i}*cos(start_angle{i}+range{i}/2); + yi=circle{i}*sin(start_angle{i}+range{i}/2); + + xj=circle{j}*cos(start_angle{j}+range{j}/2); + yj=circle{j}*sin(start_angle{j}+range{j}/2); + + line([xi xj],[yi yj],'Color',map(mod(5*circle{i},length(map))+1,:)) + end + end +end + +axis tight +axis off diff --git a/downloaded/matlab-networks-toolbox-master/radiusAndDiameter.m b/downloaded/matlab-networks-toolbox-master/radiusAndDiameter.m new file mode 100644 index 0000000..6797f8a --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/radiusAndDiameter.m @@ -0,0 +1,25 @@ +function [r, d] = radiusAndDiameter(A) +%RADIUSANDDIAMETER calculate the radius and diameter of the graph + +% This method returns radius the minimum graph eccentricity (Minimum +% longest shortest path), and the maximum graph accentricity (maximum longest shortest path). +% +% @input adj, NxN adjacency matrix +% @output r, a scalar reporting the minimum longest shorest path +% @output d, a scalar reporting the maximum longest shorest path +% +% Other routines used: simpleDijkstra.m +% IB: last updated, 3/23/14 + +rs = zeros(size(A, 1), 1); +for i=1:size(A,1) + d=simpleDijkstra(A,i); + idx_good = d ~= Inf & d ~= 0; + if(any(idx_good)) + rs(i) = max(d(idx_good)); + else + rs(i) = NaN; + end +end +r = nanmin(rs); +d = nanmax(rs); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/randomDirectedGraph.m b/downloaded/matlab-networks-toolbox-master/randomDirectedGraph.m new file mode 100644 index 0000000..ee2ae1c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/randomDirectedGraph.m @@ -0,0 +1,34 @@ +%################################################################## +% Random directed graph construction +% Note 1: if p is omitted, p=0.5 is default +% Note 2: no self-loops, no double edges +% +% INPUTS: n - number of nodes +% p - probability, 0<=p<=1 +% Output: adjacency matrix, nxn +% +% GB: last updated, Oct 21 2012 +%################################################################## + +function adj = randomDirectedGraph(n,p) + +adj=zeros(n); % initialize adjacency matrix + +if nargin==1; p=0.5; end; % default probability + + +% splitting j = 1:i-1,i+1,n avoids the if statement i==j + +for i=1:n + + for j=1:i-1 + if rand<=p; adj(i,j)=1; end; + end + + + for j=i+1:n + if rand<=p; adj(i,j)=1; end; + end + +end + diff --git a/downloaded/matlab-networks-toolbox-master/randomGraph.m b/downloaded/matlab-networks-toolbox-master/randomGraph.m new file mode 100644 index 0000000..85c8222 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/randomGraph.m @@ -0,0 +1,47 @@ +%################################################################## +% Random graph construction routine. +% Note 1: Default is Erdos-Renyi graph G(n,0.5) +% Note 2: Generates undirected, simple graphs only +% +% INPUTS: N - number of nodes +% p - probability, 0<=p<=1 +% E - fixed number of edges; if specified, p is irrelevant +% OUTPUTS: adj - adjacency matrix of generated graph (symmetric), nxn +% +% Other routines: numEdges.m +% GB: last updated, Oct 20, 2012 +%################################################################## + +function adj = randomGraph(n,p,E) + +adj=zeros(n); % initialize adjacency matrix + +switch nargin % number of function arguments + + case 1 % just the number of nodes, n + + % 0.5 - default probability of attachment + for i=1:n + for j=i+1:n + if rand<=0.5; adj(i,j)=1; adj(j,i)=1; end + end + end + + case 2 % the number of nodes and the probability of attachment, n, p + + for i=1:n + for j=i+1:n + if rand<=p; adj(i,j)=1; adj(j,i)=1; end + end + end + + case 3 % fixed number of nodes and edges, n, E + + while numEdges(adj) < E + i=randi(n); j=randi(n); % pick two random nodes + if i==j | adj(i,j)>0; continue; end % do not allow self-loops or double edges + adj(i,j)=adj(i,j)+1; adj(j,i)=adj(i,j); + end + + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/randomGraphDegreeDist.m b/downloaded/matlab-networks-toolbox-master/randomGraphDegreeDist.m new file mode 100644 index 0000000..629668e --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/randomGraphDegreeDist.m @@ -0,0 +1,60 @@ +function A_rand = randomGraphDegreeDist(n,distribution,W) +%RANDOMGRAPHDEGREEDIST Construct a random graph given a degree distribution. + +% The algorithm first generates the degree sequence by +% drawing numbers from the specified distribution. +% + +% @input n, scalar number of nodes +% @input distribution, string of one of the following: 'uniform', 'normal', 'binomial', 'exponential' and 'custom' +% @input W [optional], 1x(N-1) distribution, where W(i) is probability of a node having degree 'i', sum(W) = 1; +% @output A_rand, a nxN adjacency matrix +% +% Other routines used: isGraphic.m, weightedRandomSample.m, +% randomGraphFromDegreeSequence.m +% GB: last updated, Oct 31 2012 + + +A_rand = []; +Nseq=1; % ensure the while loop start + % always make sure Nseq is a graphic sequence + + +switch distribution + + case 'uniform' + + % Here the choice of maximum degree is n/2. In practice, it can + % be any number between 1 and (n-1). However, at certain (higher) + % densities random graphs are much harder to construct. + + while not(isGraphic(Nseq)); Nseq = randi(round((n-1)/4),1,n); end + + case 'normal' + + % the (n-1)/10 scaling is so that the degree sequence is safely within [1,n-1] but it is arbitrary + while not(isGraphic(Nseq)); Nseq = ceil((n-1)*randn(1,n)/10+(n-1)/4); end + + case 'binomial' + + p=0.5; % default parameter for binomial distribution + while not(isGraphic(Nseq)); Nseq = ceil(binornd(n-1,p,1,n)); end + + case 'exponential' + + while not(isGraphic(Nseq)); Nseq = ceil(exprnd((n-1)/10,1,n)); end + + case 'custom' + + if nargin<3; fprintf('Need to specify a custom distribution.\n'); return; end + while not(isGraphic(Nseq)); Nseq = weightedRandomSample(n,[1:n-1],W); end + + otherwise + + fprintf('Invalid degree distribution type.\n') + return + +end + + +A_rand = randomGraphFromDegreeSequence(Nseq); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/randomGraphFromDegreeSequence.m b/downloaded/matlab-networks-toolbox-master/randomGraphFromDegreeSequence.m new file mode 100644 index 0000000..c6251e1 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/randomGraphFromDegreeSequence.m @@ -0,0 +1,73 @@ +%################################################################## +% Constructing a random graph based on a given degree sequence. +% Idea source: Molloy M. & Reed, B. (1995) Random Structures and Algorithms 6, 161-179 +% +% INPUTs: a graphic sequence of numbers, 1xn +% OUTPUTs: adjacency matrix of resulting graph, nxn +% +% Note: The simple version of this algorithm gets stuck about half +% of the time, so in this implementation the last problematic +% edge is rewired. +% +% Other routines used: adj2edgeL.m, rewireThisEdge.m, edgeL2adj.m +% GB: last updated, Oct 25 2012 +%################################################################## + + +function adj= randomGraphFromDegreeSequence(Nseq) + + +stubs=Nseq; % assign degrees to stubs +adj = zeros(length(Nseq)); % initialize adjacency matrix + + +old_sum = 0; +cnt=0; + +while sum(stubs)>0 % while no more stubs are left to connect + + if sum(stubs)==2 & cnt>5 % rewire the last edge when stuck + + el = adj2edgeL(adj); + ind = find(stubs>0); + + + if length(ind) == 1; elr = rewireThisEdge([el; ind(1) ind(1) 1],ind(1),ind(1)); end + if length(ind) == 2; elr = rewireThisEdge([el; ind(1) ind(2) 1; ind(2) ind(1) 1],ind(1),ind(2)); end + + if isempty(elr) % restart algorithm completely + stubs = Nseq; + adj = zeros(length(Nseq)); + old_sum = 0; + cnt=0; + + else + adj = edgeL2adj(elr); % return matrix with last edge rewired + return + + end + + end + + + new_sum = sum(stubs); + + if old_sum==new_sum; cnt = cnt+1; end % no new nodes have been connected, counter+1 + if old_sum~=new_sum; cnt=0; end % new connections, restart count + + + [~,n1] = max(stubs); % pick the node with highest number of remaining stubs + + old_sum = sum(stubs); + + ind = find(stubs>0); + n2 = ind(randi(length(ind))); + + if n1==n2; continue; end % no self-loops + + if adj(n1,n2)>0; continue; end % no double edges + adj(n1,n2)=1; adj(n2,n1)=1; + stubs(n1) = stubs(n1) - 1; + stubs(n2) = stubs(n2) - 1; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/randomModularGraph.m b/downloaded/matlab-networks-toolbox-master/randomModularGraph.m new file mode 100644 index 0000000..4e7c271 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/randomModularGraph.m @@ -0,0 +1,55 @@ +%################################################################## +% Build a random modular graph, given number of modules, and link densities +% +% INPUTs: number of nodes (n), number of modules (c), total link density (p), +% and ratio of nodal degree to nodes within the same module +% to the degree to nodes in other modules (r) +% OUTPUTs: adjacency matrix, modules to which the nodes are assigned +% +% GB: last updated, November 4, 2012 +%################################################################## + +function [adj, modules] = randomModularGraph(n,c,p,r) + +% n - number of nodes +% c - number of clusters/modules +% p - overall probability of attachment +% r - proportion of links within modules + + +% assign nodes to modules: 1 -> n/c, n/c+1 -> 2n/c, ... , (c-1)n/c -> c(n/c); +modules={}; +for k=1:c; modules{k}=round((k-1)*n/c+1):round(k*n/c); end + +adj=zeros(n); % initialize adjacency matrix + +% DERIVATION of probabilities +% k_in/k_out = r, k_in + k_out = k = p(n-1) +% => (1/r)k_in + k_in = p(n-1), => k_in = rp(n-1)/(r+1), k_out = p(n-1)/(r+1) +% k_in = p_in*(n/c-1) => p_in = rpc(n-1)/((r+1)(n-c)) +% k_out = p_out*(n-n/c) => p_out = pc(n-1)/(n(r+1)(c-1)) + + +p_in = r*p*c*(n-1)/((r+1)*(n-c)); +p_out = p*c*(n-1)/(n*(r+1)*(c-1)); + + +for i=1:n + for j=i+1:n + + module_i=ceil(c*i/n); % the module to which i belongs to + module_j=ceil(c*j/n); % the module to which j belongs to + + if module_i==module_j + + % prob of attachment within module + if rand0; continue; end % the two edges cannot overlap + + % else: rewire + if not(ismember([edge1(1),edge2(2),1],el,'rows')) & not(ismember([edge1(2),edge2(1),1],el,'rows')) + + % first possibility: (e11,e22) & (e12,e21) + el(ind(1),:)=[edge1(1),edge2(2),1]; + el(ind(2),:)=[edge1(2),edge2(1),1]; + + % add the symmetric equivalents + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[edge2(2),edge1(1),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[edge2(1),edge1(2),1]; + + rew = rew + 1; + + elseif not(ismember([edge1(1),edge2(1),1],el,'rows')) & not(ismember([edge1(2),edge2(2),1],el,'rows')) + + % second possibility: (e11,e21) & (e12,e22) + el(ind(1),:)=[edge1(1),edge2(1),1]; + el(ind(2),:)=[edge1(2),edge2(2),1]; + + % add the symmetric equivalents + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[edge2(1),edge1(1),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[edge2(2),edge1(2),1]; + + rew = rew + 1; + + else + 'creates a double edge'; + continue + end + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/rewireAssort.m b/downloaded/matlab-networks-toolbox-master/rewireAssort.m new file mode 100644 index 0000000..95b3651 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/rewireAssort.m @@ -0,0 +1,46 @@ +%################################################################## +% Degree-preserving random rewiring +% Every rewiring increases the assortativity (pearson coefficient). +% +% Note 1: There are rare cases of neutral rewiring (pearson coefficient stays the same within numerical error). +% Note 2: Assume unweighted undirected graph. +% +% INPUTS: edge list, el (mx3) and number of rewirings, k +% OUTPUTS: rewired edge list +% +% Other routines used: degrees.m +% GB: last updated, Sep 27 2012 +%################################################################## + +function el = rewireAssort(el,k) + +[deg,~,~]=degrees(edgeL2adj(el)); + +rew=0; + +while rew0; continue; end % the two edges cannot overlap + + nodes=[edge1(1) edge1(2) edge2(1) edge2(2)]; + [~,Y]=sort(deg(nodes)); + + % connect nodes(Y(1))-nodes(Y(2)) and nodes(Y(3))-nodes(Y(4)) + if ismember([nodes(Y(1)),nodes(Y(2)),1],el,'rows') | ismember([nodes(Y(3)),nodes(Y(4)),1],el,'rows'); continue; end + + el(ind(1),:)=[nodes(Y(3)),nodes(Y(4)),1]; + el(ind(2),:)=[nodes(Y(1)),nodes(Y(2)),1]; + + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[nodes(Y(4)),nodes(Y(3)),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[nodes(Y(2)),nodes(Y(1)),1]; + + rew=rew+1; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/rewireDisassort.m b/downloaded/matlab-networks-toolbox-master/rewireDisassort.m new file mode 100644 index 0000000..cf34eac --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/rewireDisassort.m @@ -0,0 +1,44 @@ +%################################################################## +% Degree-preserving random rewiring. +% Every rewiring decreases the assortativity (pearson coefficient). +% +% Note 1: There are rare cases of neutral rewiring (pearson coefficient stays the same within numerical error). +% Note 2: Assume unweighted undirected graph. +% +% INPUTS: edge list, el and number of rewirings, k (integer) +% OUTPUTS: rewired edge list +% GB: last updated, Sep 27 2012 +%################################################################## + +function el = rewireDisassort(el,k) + +[deg,~,~]=degrees(edgeL2adj(el)); + +rew=0; + +while rew0; continue; end % the two edges cannot overlap + + nodes=[edge1(1) edge1(2) edge2(1) edge2(2)]; + [~,Y]=sort(deg(nodes)); + + % connect nodes(Y(1))-nodes(Y(4)) and nodes(Y(2))-nodes(Y(3)) + if ismember([nodes(Y(1)),nodes(Y(4)),1],el,'rows') | ismember([nodes(Y(2)),nodes(Y(3)),1],el,'rows'); continue; end + + el(ind(1),:)=[nodes(Y(1)),nodes(Y(4)),1]; + el(ind(2),:)=[nodes(Y(2)),nodes(Y(3)),1]; + + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[nodes(Y(4)),nodes(Y(1)),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[nodes(Y(3)),nodes(Y(2)),1]; + + rew=rew+1; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/rewireThisEdge.m b/downloaded/matlab-networks-toolbox-master/rewireThisEdge.m new file mode 100644 index 0000000..812295d --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/rewireThisEdge.m @@ -0,0 +1,78 @@ +function el = rewireThisEdge(el,i1,i2) +%REWIRETHISEDGE Degree-preserving rewiring of 1 given edge. +% Note 1: Assume unweighted undirected graph. +% +% @input el, Mx3 edgelist of M edges +% @input il1, first node to be rewired +% @input il2, second node to be re-wired +% @output el, Mx3 edge list, same size and same degree distribution +% +% Note: There are cases when rewiring is not possible, while +% keeping the graph simple, so an empty edge list is returned. +% +% Other routines used: edgeL2adj.m, kneighbors.m + +% Updated: cleaned fprintf +% IB: last updated, 3/24/14 + + +%% check whether the edge can actually be rewired +adj = edgeL2adj(el); +neighbors = [i1, i2]; +neighbors = [neighbors kneighbors(adj,i1,1)]; +neighbors = [neighbors kneighbors(adj,i2,1)]; + +disjoint_edges = []; +for e=1:length(el) + if sum(ismember(neighbors,el(e,1)))==0 & sum(ismember(neighbors,el(e,2)))==0 + disjoint_edges = [disjoint_edges; el(e,:)]; + end +end + +if isempty(disjoint_edges) + fprintf('cannot rewire this graph without adding a double edge or a loop\n'); + el = []; + return +end +% ................................................................. + +[~,row] = ismember([i1 i2 1],el,'rows'); +ind = [row]; +edge1=el(ind(1),:); + + +%% pick a random second edge from the disjoint edges +randind = randi([1,size(disjoint_edges,1)]); +edge2=disjoint_edges(randind,:); + +[~,ind2] = ismember([edge2(1) edge2(2) 1],el,'rows'); +ind = [ind ind2]; + + +if rand<0.5 + + % first possibility: (e11,e22) & (e12,e21) + el(ind(1),:)=[edge1(1),edge2(2),1]; + el(ind(2),:)=[edge1(2),edge2(1),1]; + + % add the symmetric equivalents + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[edge2(2),edge1(1),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[edge2(1),edge1(2),1]; + +else + + % second possibility: (e11,e21) & (e12,e22) + el(ind(1),:)=[edge1(1),edge2(1),1]; + el(ind(2),:)=[edge1(2),edge2(2),1]; + + % add the symmetric equivalents + [~,inds1] = ismember([edge1(2),edge1(1),1],el,'rows'); + el(inds1,:)=[edge2(1),edge1(1),1]; + + [~,inds2] = ismember([edge2(2),edge2(1),1],el,'rows'); + el(inds2,:)=[edge2(2),edge1(2),1]; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/richClubMetric.m b/downloaded/matlab-networks-toolbox-master/richClubMetric.m new file mode 100644 index 0000000..f16279c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/richClubMetric.m @@ -0,0 +1,20 @@ +%################################################################## +% Compute the rich club metric for a graph. +% Source: Colizza, Flammini, Serrano, Vespignani, "Detecting rich-club ordering in complex networks", Nature Physics, vol 2, Feb 2006 +% +% INPUTs: adjacency matrix, nxn, k - threshold number of links +% OUTPUTs: rich club metric +% +% Other routines used: degrees.m, subgraph.m, numEdges.m +% GB: last updated, October 1, 2012 +%################################################################## + +function phi=richClubMetric(adj,k) + +[deg,~,~]=degrees(adj); + +Nk=find(deg>=k); % find the nodes with degree > k +if isempty(Nk); phi = 0; return; end + +adjk=subgraph(adj,Nk); +phi=2*numEdges(adjk)/(length(Nk)*(length(Nk)-1)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/sMetric.m b/downloaded/matlab-networks-toolbox-master/sMetric.m new file mode 100644 index 0000000..589ada6 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/sMetric.m @@ -0,0 +1,36 @@ +%################################################################## +% The sum of products of degrees across all edges. +% Source: "Towards a Theory of Scale-Free Graphs: Definition, Properties, and Implications", by Li, Alderson, Doyle, Willinger +% Note: The total degree is used regardless of whether the graph is directed or not. +% +% INPUTs: adjacency matrix, nxn +% OUTPUTs: s-metric +% +% Other routines used: degrees.m +% GB: last updated, Oct 1 2012 +%################################################################## + +function s=sMetric(adj) + +[deg,~,~]=degrees(adj); +edges=find(adj>0); + +s=0; +for e=1:length(edges) + [i,j]=ind2sub([length(adj),length(adj)],edges(e)); + s=s+deg(i)*deg(j); +end + + +% ALTERNATIVE ================ +% [deg,~,~]=degrees(adj); +% el=adj2edgeL(adj); +% +% s=0; +% for e=1:size(el,1) +% if el(e,1)==el(e,2) +% s=s+deg(el(e,1))*deg(el(e,2))*el(e,3)*2; % count self-loops twice +% else +% s=s+deg(el(e,1))*deg(el(e,2))*el(e,3); % multiply by the weight for edges with weights +% end +% end diff --git a/downloaded/matlab-networks-toolbox-master/selfLoops.m b/downloaded/matlab-networks-toolbox-master/selfLoops.m new file mode 100644 index 0000000..b0dbd27 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/selfLoops.m @@ -0,0 +1,13 @@ +%################################################################## +% Counts the number of self-loops in the graph +% +% INPUT: adjacency matrix, nxn +% OUTPUT: integer, number of self-loops +% +% Note: in the adjacency matrix representation loops appear as non-zeros on the diagonal +% GB: last updated, Sep 20 2012 +%################################################################## + +function sl=selfLoops(adj) + +sl=sum(diag(adj)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/shortestPathDP.m b/downloaded/matlab-networks-toolbox-master/shortestPathDP.m new file mode 100644 index 0000000..3982f6c --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/shortestPathDP.m @@ -0,0 +1,46 @@ +%################################################################## +% Shortest path algorithm using dynamic programming. +% Note 1: Valid for directed/undirected network. +% Note 2: if links have weights, they are treated as distances. +% Source: D. P. Bertsekas, Dynamic Programming and Optimal Control, +% Athena Scientific, 2005 (3rd edition) +% +% INPUTs: L - (cost/path lengths matrix), s - (start/source node), +% t - (end/destination node) +% steps - number of arcs allowable +% OUTPUTS: +% route - sequence of nodes on optimal path, at current stage +% route(k,i).path - best route from "i" to destination "t" in "k" steps +% route_st - best route from "s" to "t" +% J_st - optimal cost function (path length) from "s" to "t" +% J(1,i) - distance from node "i" to "t" in "k" steps +% +% GB: last updated, Oct 5 2012 +%################################################################## + +function [J_st,route_st,J,route]=shortestPathDP(L,s,t,steps) + +n = size(L,2); + +L(find(L==0))=Inf; % make all zero distances equal to infinity + +for i=1:n + J(steps,i) = L(i,t); + route(steps,i).path = [t]; +end + +% find min for every i: Jk(i)=min_j(L(i,j)+Jk+1(j)) +for p=1:steps-1 + k=steps-p; % recurse backwards + + for i=1:n + [J(k,i),ind_j] = min(L(i,:)+J(k+1,:)); + route(k,i).path = [ind_j, route(k+1,ind_j).path]; + end + +end + +[J_st,step_ind] = min(J(:,s)); % the shortest path (min cost) from s to t +route_st = [s, route(step_ind,s).path]; % the shortest path route from s to t +J=J(sort(1:min([n,steps]),'descend'),:); +route=route(sort(1:min([n,steps]),'descend'),:); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/simpleDijkstra.m b/downloaded/matlab-networks-toolbox-master/simpleDijkstra.m new file mode 100644 index 0000000..da4d754 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/simpleDijkstra.m @@ -0,0 +1,30 @@ +function d = simpleDijkstra(A,s) +%SIMPLEDIJKSTRA Dijkstra's shortest path algorithm +% Returns the distances from a single vertex to all others, doesn't save the path +% +% @input A, an NxN adjacency matrix +% @input s, a scalar of the start node +% @output d, a 1xn vector of shortest path lengths from 's' to all other +% nodes. + +% Note: Works for a weighted/directed graph. + +% Updated 3/8/14: increased efficency 10x by unrolling for loop, removing +% setdiff. + +% IB: Last updated, 3/23/14 + +n=length(A); +d = inf*ones(1,n); % distance s-all nodes +d(s) = 0; % s-s distance +T = 1:n; % node set with shortest paths not found yet + +while not(isempty(T)) + [~,ind] = min(d(T)); + + idx_update = find(A(T(ind), T) > 0 & d(T) > d(T(ind)) + A(T(ind), T)); + if(~isempty(idx_update)) + d(T(idx_update)) = d(T(ind)) + A(T(ind), T(idx_update)); + end + T(ind) = []; +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/simpleSpectralPartitioning.m b/downloaded/matlab-networks-toolbox-master/simpleSpectralPartitioning.m new file mode 100644 index 0000000..46a66bf --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/simpleSpectralPartitioning.m @@ -0,0 +1,63 @@ +%################################################################## +% Uses the fiedler vector to assign nodes to groups. +% +% INPUTS: adjacency matrix (nxn), k - desired number +% of nodes in groups [n1, n2, ..], [optional]. +% The default k is 2. +% OUTPUTs: modules - [k] partitioned groups of nodes +% +% Example: +% simpleSpectralPartitioning(random_modular_graph(100,4,0.15,0.9), +% [25 25 25 25]) +% Other functions used: fiedlerVector.m +% Note: To save the plot at the end of the routine, uncomment: +% print filename.pdf (or filename.extension) +% GB: last updated, Oct 10 2012 +%################################################################## + +function modules = simpleSpectralPartitioning(adj,k) + +% find the Fiedler vector: eigenvector corresponding to the second smallest eigenvalue of the Laplacian matrix +fv = fiedlerVector(adj); +[~,I]=sort(fv); + +% depending on k, partition the nodes +if nargin==1 + + modules{1}=[]; modules{2}=[]; + % choose 2 groups based on signs of fv components + for v=1:length(fv) + if fv(v)>0; modules{2} = [modules{2}, v]; end + if fv(v)<=0; modules{1} = [modules{1}, v]; end + end +end + +if nargin==2 + + k = [0 k]; + + for kk=1:length(k) + + modules{kk}=[]; + for x=1:k(kk); modules{kk} = [modules{kk} I(x+k(kk-1))]; end + + end + + modules = modules(2:length(modules)); +end + +set(gcf,'Color',[1 1 1]) +subplot(1,2,1) +plot(fv(I),'k.'); +xlabel('index i') +ylabel('fv(i)') +title('sorted fiedler vector') +axis tight +axis square + +subplot(1,2,2) +spy(adj(I,I),'k.') +axis square +title('sorted adjacency matrix') + +%print spec_part_example.pdf \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/smoothDiameter.m b/downloaded/matlab-networks-toolbox-master/smoothDiameter.m new file mode 100644 index 0000000..38d96bb --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/smoothDiameter.m @@ -0,0 +1,36 @@ +%################################################################## +% A relaxed/smoothed definition of diameter: the number "d" at which +% a threshold fraction "p" of pairs of nodes are at distance at most +% "d". Can be non-integer using interpolation. +% +% Idea: Leskovec et al, "Graphs over Time: Densiï¬cation Laws, +% Shrinking Diameters and Possible Explanations" +% +% Input: adjacency matrix of graph and diameter threshold, p in [0,1] +% Output: relaxed or "effective" diameter +% +% Other routines used: simpleDijkstra.m +% GB: last updated, Oct 8 2012 +%################################################################## + +function diam = smoothDiameter(adj,p) + +n=size(adj,1); + +dij=[]; +for i=1:n; dij=[dij; simpleDijkstra(adj,i)]; end + +dij(find(dij==0))=inf; +for i=1:n-1; ddist(i)=length(find(dij<=i)); end +ddist=ddist/(n*(n-1)); + +lb = max(find(ddist<=p)); % lower bound +ub = min(find(ddist>=p)); % upper bound + +if p==1; diam = ub; +elseif ub==lb; diam = lb; +elseif p1 + % Extract the neighbors of the first node only + neigh=str(1:commas(1)-1); + dots=find(neigh=='.'); + for d=1:length(dots)-1; adj(1,str2num(neigh(dots(d)+1:dots(d+1)-1)))=1; end + adj(1,str2num(neigh(dots(length(dots))+1:length(neigh))))=1; +end + +% Extract the neighbors of the remaining 2:n nodes +for i=2:n + neigh=str(commas(i-1)+1:commas(i)-1); + if isempty(neigh); continue; end + + dots=find(neigh=='.'); + for d=1:length(dots)-1; adj(i,str2num(neigh(dots(d)+1:dots(d+1)-1)))=1; end + + adj(i,str2num(neigh(dots(length(dots))+1:length(neigh))))=1; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/strongConnComp.m b/downloaded/matlab-networks-toolbox-master/strongConnComp.m new file mode 100644 index 0000000..f5a3310 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/strongConnComp.m @@ -0,0 +1,53 @@ +%################################################################## +% Support function for tarjan.m +% "Performs a single depth-first search of the graph, finding all +% successors from the node vi, and reporting all strongly connected +% components of that subgraph." +% See: http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm +% +% INPUTs: start node, vi; +% graph structure (list), L +% tarjan.m variables to update: S, ind, v, GSCC +% OUTPUTs: updated tarjan.m variables: S, ind, v, GSCC +% +% Note: Contains recursion. +% GB: last updated, Sep 22 2012 +%################################################################## + +function [GSCC,S,ind,v]=strongConnComp(vi,S,ind,v,L,GSCC) + + +v(vi).index = ind; % Set the depth index for vi +v(vi).lowlink = ind; +ind = ind + 1; + +S = [vi S]; % Push vi on the stack + +for ll=1:length(L{vi}) + vj = L{vi}(ll); % Consider successors of vi + + if isempty(v(vj).index) % Was successor vj visited? + + [GSCC,S,ind,v]=strongConnComp(vj,S,ind,v,L,GSCC); % Recursion + v(vi).lowlink = min([v(vi).lowlink, v(vj).lowlink]); + + elseif not(isempty(find(S==vj))) % Is vj on the stack? + v(vi).lowlink = min([v(vi).lowlink, v(vj).index]); + + end +end + + +if v(vi).lowlink == v(vi).index % Is v the root of an SCC? + + SCC = [vi]; + while 1 + vj = S(1); S = S(2:length(S)); + SCC = [SCC vj]; + + if vj==vi; SCC = unique(SCC); break; end + end + + GSCC{length(GSCC)+1} = SCC; + +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/subgraph.m b/downloaded/matlab-networks-toolbox-master/subgraph.m new file mode 100644 index 0000000..e79d201 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/subgraph.m @@ -0,0 +1,12 @@ +%################################################################## +% This function outputs the adjacency matrix of a subgraph given the supergraph and the node set of the subgraph +% +% INPUTs: adj - supergraph adjacency matrix (nxn), S - vector of subgraph node indices +% OUTPUTs: adj_sub - adjacency matrix of the subgraph (length(S) x length(S)) +% +% GB: last update, September 23 2012 +%################################################################## + +function adj_sub = subgraph(adj,S) + +adj_sub = adj(S,S); diff --git a/downloaded/matlab-networks-toolbox-master/symmetrize.m b/downloaded/matlab-networks-toolbox-master/symmetrize.m new file mode 100644 index 0000000..1fbeab4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/symmetrize.m @@ -0,0 +1,14 @@ +%################################################################## +% Symmetrize a non-symmetric matrix, +% i.e. returns the undirected version of a directed graph. +% Note: Where mat(i,j)~=mat(j,i), the larger (nonzero) value is chosen +% +% INPUTS: a matrix - nxn +% OUTPUT: corresponding symmetric matrix - nxn +% +% GB: last updated: October 3, 2012 +%################################################################## + +function adj_sym = symmetrize(adj) + +adj_sym = max(adj,transpose(adj)); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/symmetrizeEdgeL.m b/downloaded/matlab-networks-toolbox-master/symmetrizeEdgeL.m new file mode 100644 index 0000000..08673f4 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/symmetrizeEdgeL.m @@ -0,0 +1,23 @@ +%################################################################## +% Making an edge list (representation of a graph) symmetric, +% i.e. if [n1,n2] is in the edge list, so is [n2,n1]. +% +% INPUTs: edge list, mx3 +% OUTPUTs: symmetrized edge list, mx3 +% +% GB: last updated, October 3, 2012 +%################################################################## + +function el=symmetrizeEdgeL(el) + +el2=[el(:,1), el(:,2)]; + +for e=1:size(el,1) + ind=ismember(el2,[el2(e,2),el2(e,1)],'rows'); + if sum(ind)==0; el=[el; el(e,2), el(e,1), el(e,3)]; end +end + +% Alternative: Using the adjacency matrix +% adj=edgeL2adj(el); +% adj=symmetrize(adj); +% el=adj2edgeL(adj); \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/tarjan.m b/downloaded/matlab-networks-toolbox-master/tarjan.m new file mode 100644 index 0000000..353d228 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/tarjan.m @@ -0,0 +1,26 @@ +%################################################################## +% Find the stronly connected components in a directed graph +% Source: Tarjan, R. E. (1972), "Depth-first search and linear graph algorithms", SIAM Journal on Computing 1 (2): 146-160 +% Wikipedia description: http://en.wikipedia.org/wiki/Tarjan's_strongly_connected_components_algorithm +% +% Input: graph, set of nodes and edges, in adjacency list format, +% example: L{1}=[2], L{2]=[1] is a single (1,2) edge +% Outputs: set of strongly connected components, in cell array format +% +% Other routines used: strongConnComp.m +% GB: last updated, Sep 22, 2012 +%################################################################## + +function [GSCC,v] = tarjan(L) + + +GSCC = {}; +ind = 1; % node number counter +S = []; % An empty stack of nodes +for ll=1:length(L); v(ll).index = []; v(ll).lowlink = []; end % initialize indices + +for vi=1:length(L) + if isempty(v(vi).index) + [GSCC,S,ind,v]=strongConnComp(vi,S,ind,v,L,GSCC); % visit new nodes only + end +end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/testAllFunctions.m b/downloaded/matlab-networks-toolbox-master/testAllFunctions.m new file mode 100644 index 0000000..c61951d --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/testAllFunctions.m @@ -0,0 +1,1586 @@ +% Test code for "Octave tools for Network Analysis" + +% IB: 3/24/14, TODO: newmanEigenvectorMethod test fails. Investigate. + +% ** start ** + +clear all +close all + +% Set of test graphs, in various formats ========= +one_directed_edge = [0 1; 0 0]; +one_double_edge = [0 2; 2 0]; +bowtie=[0 1 1 0 0 0; 1 0 1 0 0 0; 1 1 0 1 0 0; 0 0 1 0 1 1; 0 0 0 1 0 1; 0 0 0 1 1 0]; +disconnected_bowtie =[0 1 1 0 0 0; 1 0 1 0 0 0; 1 1 0 0 0 0; 0 0 0 0 1 1; 0 0 0 1 0 1; 0 0 0 1 1 0]; +bowtie_edgeL = [1,2,1; 1,3,1; 2,3,1; 3,4,1; 4,5,1; 4,6,1; 5,6,1]; +bowtie_edgeL = sortrows(symmetrizeEdgeL(bowtie_edgeL)); +bowtie_edgeL_loop = [bowtie_edgeL; 4 4 1]; +bowtie_adjL = {[2,3],[1,3],[1,2,4],[3,5,6],[4,6],[4,5]}; +undirected_cherry = [1,2,1; 2,1,1; 1,3,1; 3,1,1]; +directed_cherry = [1,2,1; 1,3,1]; +undirected_triangle=[0 1 1; 1 0 1; 1 1 0]; +undirected_triangle_selfloops = [1 1 1; 1 1 1; 1 1 0]; +undirected_triangle_incidence = [1 1 0; 1 0 1; 0 1 1]; +directed_triangle=[0 1 0; 0 0 1; 1 0 0]; +square = [0 1 0 1; 1 0 1 0; 0 1 0 1; 1 0 1 0]; +star = edgeL2adj(canonicalNets(5,'star')); % adjacency matrix +% ================================================ + + +% Testing getNodes.m ============================= +fprintf('testing getNodes.m\n') + +assert_mat(getNodes(bowtie,'adj'), [1:6]) +N = randi(100); +assert_mat(getNodes(randomDirectedGraph(N),'adj'),[1:N]) +assert_mat(getNodes(randomGraph(10),'adj'),[1:10]) +assert_mat(getNodes(bowtie_adjL,'adjlist'),[1:6]) +assert_mat(getNodes(directed_cherry,'edgelist'),[1:3]) +assert_mat(getNodes(undirected_cherry,'edgelist'),[1:3]) +assert_mat(getNodes(undirected_triangle_incidence,'inc'),[1:3]) +% ================================================ + + +% Testing getEdges.m ============================= +fprintf('testing getEdges.m\n') + +assert_mat(getEdges(bowtie,'adj'),bowtie_edgeL) +assert_mat(getEdges(bowtie_adjL,'adjlist'),bowtie_edgeL) +assert_mat(getEdges(directed_cherry,'edgelist'),directed_cherry) +assert_mat(getEdges(undirected_cherry,'edgelist'),undirected_cherry) +assert_mat(getEdges(undirected_triangle_incidence,'inc'),[1,2,1; 1,3,1; 2,1,1; 2,3,1; 3,1,1; 3,2,1]) +% ================================================ + +% testing numNodes.m ============================= +fprintf('testing numNodes.m\n') + +randint = randi(101); +assert_mat(numNodes(randomGraph(randint)),randint) +assert_mat(numEdges(edgeL2adj(directed_cherry)),2) +assert_mat(numNodes(bowtie),6) +% ================================================ + +% testing numEdges.m ============================= +fprintf('testing numEdges.m\n') + +assert_mat(numEdges(bowtie),7) +assert_mat( numEdges(undirected_triangle_selfloops), 5 ) +assert_mat(numEdges(one_double_edge),2) +assert_mat(numEdges(edgeL2adj(bowtie_edgeL_loop)),8) +% ================================================ + +% testing linkDensity.m ========================== +fprintf('testing linkDensity.m\n') + +randint = randi(101); +assert_mat(linkDensity(edgeL2adj(canonicalNets(randint,'tree',2))),2/randint) +assert_mat(linkDensity(bowtie),2.0*7/(6*5)) +% ================================================ + + +% testing selfLoops.m ============================ +fprintf('testing selfLoops.m\n') + +assert_mat(selfLoops(undirected_triangle_selfloops),2) +assert_mat(selfLoops(bowtie),0) +% ================================================ + + +% testing multiEdges.m =========================== +fprintf('testing multiEdges.m\n') + +assert_mat(multiEdges(one_double_edge),2) +assert_mat(multiEdges([0 2 1; 2 0 1; 1 1 0])) % triangle with one double edge +assert_mat(multiEdges([0 0 1; 2 0 0; 0 1 0])) % directed triangle with 1 double edge +assert_mat(multiEdges(randomGraph(randi(15))),0) +% ================================================ + +% testing averageDegree.m ======================== +fprintf('testing averageDegree.m\n') + +assert_mat(averageDegree(square),2) +assert_mat(averageDegree(bowtie),2+1.0/3) +% ================================================ + +% testing numConnComp.m ========================== +fprintf('testing numConnComp.m\n') +nc=numConnComp(disconnected_bowtie); +assert_mat(numConnComp(disconnected_bowtie),2) + +randint = randi(51); +Adj=zeros(randint*30); +for x=1:randint + adj=randomGraph(30,0.5); + Adj(30*(x-1)+1:30*x,30*(x-1)+1:30*x)=adj; +end +assert_mat(numConnComp(Adj),randint) +% ================================================ + + +% testing findConnComp.m ========================= +fprintf('testing findConnComp.m\n') + +assert_mat(findConnCompI(disconnected_bowtie,1),[1,2,3]) +assert_mat(findConnComp(disconnected_bowtie),{[1,2,3],[4,5,6]}) + +clear modules +modules{1}=[0]; +randint = randi(21); +Adj = []; adj = []; + +% make up a matrix (Adj) of randint disconnected components (adj) +for x=1:randint + randsecint = randi(25)+5; + lastnode = modules{length(modules)}(length(modules{length(modules)})); + modules{length(modules)+1} = [lastnode+1:lastnode+randsecint]; + while isempty(adj) | not(isConnected(adj)) | not(length(adj)==randsecint); adj=randomGraph(randsecint,0.5); end + + Adj(length(Adj)+1:length(Adj)+randsecint,length(Adj)+1:length(Adj)+randsecint)=adj; +end + +modules=modules(2:length(modules)); +assert_mat(findConnComp(Adj),modules) +% ================================================ + + +% testing giantComponent.m ======================= +fprintf('testing giantComponent.m\n') + +clear modules +modules{1}=[0]; +randint = randi(20)+1; +Adj = []; adj = []; + +% make up a matrix (Adj) of randint disconnected components (adj) +for x=1:randint + randsecint = randi(25)+5; + lastnode = modules{length(modules)}(length(modules{length(modules)})); + modules{length(modules)+1} = [lastnode+1:lastnode+randsecint]; + while isempty(adj) | not(isConnected(adj)) | not(length(adj)==randsecint); adj=randomGraph(randsecint,0.5); end + Adj(length(Adj)+1:length(Adj)+randsecint,length(Adj)+1:length(Adj)+randsecint)=adj; +end +modules=modules(2:length(modules)); +L = []; +for m=1:length(modules); L = [L, length(modules{m})]; end; +[maxL,maxind] = max(L); +assert_mat(giantComponent(Adj), subgraph(Adj,modules{maxind})) +% ================================================ + + +% ================================================ +% Testing tarjan.m =============================== +fprintf('testing tarjan.m\n') + +L = {}; L{1} = 2; L{2} = 1; +GSCC = tarjan(L); +assert_mat(length(GSCC),1) +assert_mat(GSCC{1},[1,2]) + +L = {}; L{1} = 2; L{2} = []; +GSCC = tarjan(L); +assert_mat(length(GSCC),2) +assert_mat(GSCC{1},[2]) +assert_mat(GSCC{2},[1]) + + +L={}; L{1}=[2,3]; L{2}=[1]; L{3}=[1]; L{4}=[1]; % cherry tree (binary) + extra node +GSCC = tarjan(L); +assert_mat(length(GSCC),2) +assert_mat(GSCC{1},[1,2,3]) +assert_mat(GSCC{2},4) + + +L={}; L{1}=[2,3]; L{2}=[1,3]; L{3}=[1,2]; L{4}=[1]; % triangle with extra node +GSCC = tarjan(L); +assert_mat(length(GSCC),2) +assert_mat(GSCC{1},[1,2,3]) +assert_mat(GSCC{2},4) + + +L={}; L{1}=[2,3]; L{2}=[1,3]; L{3}=[1,2,4]; L{4}=[5,6]; L{5}=[4,6]; L{6}=[4,5]; +GSCC = tarjan(L); +assert_mat(length(GSCC),2) +assert_mat(length(GSCC{1}),3) +assert_mat(length(GSCC{2}),3) + +L={}; L{1}=[2,3]; L{2}=[1,3]; L{3}=[1,2]; L{4}=[5,6]; L{5}=[4,6]; L{6}=[4,5]; +GSCC = tarjan(L); +assert_mat(length(GSCC),2) +assert_mat(length(GSCC{1}),3) +assert_mat(length(GSCC{2}),3) + + +for iter=1:100 % completely random matrix testing .... + + + % undirected graph testing ======================== + adj = [0 1; 0 0]; % initialize so that the while loop does not break + while not(isConnected(adj)); adj = randomGraph(randi(50)+1,rand); end + + L=adj2adjL(adj); + GSCC = tarjan(L); + assert_mat(length(GSCC),1) + assert_mat(GSCC{1},[1:length(adj)]) + + % directed graph testing ========================== + adj=randomDirectedGraph(randi(50)+1,rand); + L=adj2adjL(adj); + GSCC = tarjan(L); + + + if isConnected(adj) & isConnected(transpose(adj)) & length(adj)>0 + + % there should be one component containing all nodes + assert_mat(length(GSCC),1) + assert_mat(GSCC{1},[1:length(adj)]) + + + else % disconnected directed graph + + ll=[]; + for gg=1:length(GSCC); ll=[ll length(GSCC{gg})]; end; + [ml,maxll]=max(ll); + + assert_mat(isConnected(adj(GSCC{maxll},GSCC{maxll})) | length(GSCC{maxll})==1) + + for ii=1:length(adj) + if isempty(find(GSCC{maxll}==ii)) + + tryGC = [GSCC{maxll}, ii]; + assert_mat(not(isConnected(adj(tryGC,tryGC))) | not(isConnected(transpose(adj(tryGC,tryGC))))) + + end + + end + + end + +end +% ================================================ +% ================================================ + + +% testing graphComplement.m ====================== +fprintf('testing graphComplement.m\n') + +mat = [1 0 0 1 1 1; 0 1 0 1 1 1; 0 0 1 0 1 1; 1 1 0 1 0 0; 1 1 1 0 1 0; 1 1 1 0 0 1]; +assert_mat(graphComplement(bowtie),mat) +assert_mat(graphComplement(undirected_triangle),eye(3)) +% ================================================ + + +% Testing graphDual.m ============================ +fprintf('testing graphDual.m\n') + +gd=graphDual(adj2adjL(bowtie)); +gdT={}; +gdT{1}=[2,3]; gdT{2}=[1,3,4]; gdT{3}=[1,2,4]; gdT{4}=[2,3,5,6]; gdT{5}=[4,6,7]; gdT{6}=[4,5,7]; gdT{7}=[5,6]; +assert_mat(gd,gdT) + +gd=graphDual(adj2adjL(undirected_triangle)); +gdT={}; +gdT{1}=[2,3]; gdT{2}=[1,3]; gdT{3}=[1,2]; +assert_mat(gd,gdT) + +L={}; LT={}; L{1}=[2]; L{2}=[1]; LT{1}=[]; +assert_mat(LT,graphDual(L)) +% ================================================ + + +% testing subgraph.m ============================= +fprintf('testing subgraph.m\n') +assert_mat(undirected_triangle,subgraph(bowtie,[1,2,3])) +% ================================================ + +% testing leafNodes.m ============================ +fprintf('testing leafNodes.m\n') +assert_mat(leafNodes(edgeL2adj(undirected_cherry)),[2,3]) +assert_mat(leafNodes(edgeL2adj(directed_cherry)),[2,3]) +assert_mat(length(leafNodes(undirected_triangle)),0) +% ================================================ + +% testing leafEdges.m ============================ +fprintf('testing leafEdges.m\n') +assert_mat(leafEdges(edgeL2adj(undirected_cherry)),[1,2;1,3]) +assert_mat(leafEdges(edgeL2adj(directed_cherry)),[1,2;1,3]) +assert_mat(length(leafEdges(undirected_triangle)),0) +hut = [2,1,1;3,1,1]; +assert_mat(length(leafEdges(edgeL2adj(hut))),0) +% ================================================ + + +% testing isSimple.m ============================= +fprintf('testing isSimple.m\n') + +assert_mat(isSimple(randomGraph(randi(5)+20,rand)),true) % simple graph +assert_mat(isSimple(edgeL2adj([1,2,2])),false) % multi-edge +assert_mat(isSimple( [1 0 0; 0 0 1; 0 1 0]),false) % matrix with loops +assert_mat(isSimple([0 1 1; 1 0 0; 0 1 0]),false) % directed matrix +% ================================================ + + +% testing isDirected.m =========================== +fprintf('testing isDirected.m\n') +assert_mat(isDirected(randomDirectedGraph(randi(5)+20,rand)),true) +assert_mat(isDirected(randomGraph(randi(5)+20,rand)),false) +% ================================================ + +% testing isSymmetric.m ========================== +fprintf('testing isSymmetric.m\n') + +for i=1:100 + assert_mat(isSymmetric(randomGraph(randi(5)+20,rand)),true) + + adj = randomDirectedGraph(randi(5)+20,rand); + assert_mat(not(isSymmetric(adj)) | adj==zeros(size(adj)) | adj==ones(size(adj))) +end +% ================================================ + +% testing isConnected.m ========================== +fprintf('testing isConnected.m\n') +assert_mat(isConnected(bowtie),true) +assert_mat(isConnected(disconnected_bowtie),false) +% ================================================ + +% testing isWeighted.m =========================== +fprintf('testing isWeighted.m\n') +assert_mat(isWeighted([1,2,2]),true) + +assert_mat(isWeighted(adj2edgeL(randomGraph(randi(5)+20,rand))),false) + +assert_mat(isWeighted(adj2edgeL(randomDirectedGraph(randi(5)+20,rand))),false) + +assert_mat(isWeighted([1,2,0.5; 1,3,1.5; 1,4,1]),true) +assert_mat(isWeighted([1,2,0.5; 1,3,1; 1,4,1]),true) +% ================================================ + + +% testing isRegular.m ============================ +fprintf('testing isRegular.m\n') +adj = edgeL2adj(canonicalNets(20,'circle')); +assert_mat(isRegular(adj),true) + +adj = edgeL2adj(canonicalNets(20,'tree',3)); +assert_mat(isRegular(adj),false) + +assert_mat(isRegular([0 1; 1 0]),true) +assert_mat(isRegular([0 0; 1 0]),false) +% ================================================ + + +% testing isComplete.m =========================== +fprintf('testing isComplete.m\n') +assert_mat(isComplete([0 1; 1 0]),true) + +assert_mat(isComplete(edgeL2adj(directed_cherry)),false) + +assert_mat(isComplete(edgeL2adj(undirected_cherry)),false) + +randint = randi(10)+10; +adj = ones(randint)-eye(randint); +assert_mat(isComplete(adj),true) +% ================================================ + + +% testing isEulerian.m =========================== +fprintf('testing isEulerian.m\n') + +adj = edgeL2adj(canonicalNets(10,'circle')); +assert_mat(isEulerian(adj),true) + +adj = edgeL2adj(canonicalNets(10,'tree',3)); +assert_mat(isEulerian(adj),false) +% ================================================ + +% testing isTree.m =============================== +fprintf('testing isTree.m\n') +adj = edgeL2adj(canonicalNets(randi(10)+10,'tree',2)); +assert_mat(isTree(adj),true) + +adj = edgeL2adj(canonicalNets(randi(10)+10,'circle')); +assert_mat(isTree(adj),false) +% ================================================ + +% testing isGraphic.m ============================ +fprintf('testing isGraphic.m\n') +for i=1:100 + adj = giantComponent(randomGraph(randi(20)+1,0.5)); + [deg,~,~] = degrees(adj); + assert_mat(isGraphic(deg) | adj==0) +end +% ================================================ + + +% testing isBipartite.m ========================== +fprintf('testing isBipartite.m\n') + +assert_mat(isBipartite(adj2adjL(bowtie)),false) +assert_mat(isBipartite(edgeL2adjL(undirected_cherry)),true) + +even_circle = canonicalNets(2*randi(10),'circle'); +assert_mat(isBipartite(edgeL2adjL(even_circle)),true) + +odd_circle = canonicalNets(2*randi(10)+1,'circle'); +assert_mat(isBipartite(edgeL2adjL(odd_circle)),false) +% ================================================ + + +% testing adj2adjL.m ============================= +fprintf('testing adj2adjL.m\n') +assert_mat(adj2adjL(bowtie),bowtie_adjL') +% ================================================ + +% testing adjL2adj.m ============================= +fprintf('testing adjL2adj.m\n') + +assert_mat(adjL2adj(bowtie_adjL),bowtie) + +L = {}; L{1}=[2,3]; L{2}=[]; L{3}=[]; +assert_mat(adjL2adj(L),edgeL2adj(directed_cherry)) +% ================================================ + + +% testing adj2edgeL.m ============================ +fprintf('testing adj2edgeL.m\n') + +assert_mat(sortrows(adj2edgeL(bowtie)),bowtie_edgeL) +assert_mat(adj2edgeL([0 1 1; 0 0 0; 0 0 0]),directed_cherry) +% ================================================ + + +% testing edgeL2adj.m ============================ +fprintf('testing edgeL2adj.m\n') + +assert_mat(edgeL2adj(bowtie_edgeL),bowtie) +assert_mat(edgeL2adj(directed_cherry),[0 1 1; 0 0 0; 0 0 0]) +% ================================================ + + +% testing adj2inc.m ============================== +fprintf('testing adj2inc.m\n') + +randint = randi(10)+1; +assert_mat(adj2inc(eye(randint)),eye(randint)) + +assert_mat(adj2inc([0 1 0; 0 1 0; 1 0 0 ]),[-1 0 1; 1 1 0; 0 0 -1]) +assert_mat(adj2inc([0 2; 0 0]),[-1 -1; 1 1]) % double edge +% ================================================ + + +% testing inc2adj.m ============================== +fprintf('testing inc2adj.m\n') + +randint = randi(10)+1; +assert_mat(inc2adj(eye(randint))==eye(randint)) + +adj = ones(3) - eye(3); +assert_mat(inc2adj(adj),adj) + +inc = [-1 1; 1 0; 0 -1]; % two edges (1->2, 3->1) +assert_mat(inc2adj(inc)==[0 1 0; 0 0 0; 1 0 0]) +% ================================================ + +% testing adj2str.m ============================== +fprintf('testing adj2str.m\n') + +assert_mat(adj2str(ones(3)-eye(3)),'.2.3,.1.3,.1.2,') +assert_mat(adj2str(eye(3)),'.1,.2,.3,') +assert_mat(adj2str([0 2; 0 0]),'.2,,') +% ================================================ + +% testing str2adj.m ============================== +fprintf('testing str2adj.m\n') + +assert_mat(ones(3)-eye(3),str2adj('.2.3,.1.3,.1.2,')) +assert_mat(eye(3),str2adj('.1,.2,.3,')) +assert_mat([0 1 0; 0 0 0; 1 0 0 ],str2adj('.2,,.1,')) +% ================================================ + + +% testing adjL2edgeL.m =========================== +fprintf('testing adjL2edgeL.m\n') + +assert_mat(adjL2edgeL({[2,3],[],[]}),directed_cherry) +assert_mat(sortrows(adjL2edgeL(bowtie_adjL)),bowtie_edgeL) +% ================================================ + + +% testing edgeL2adjL.m =========================== +fprintf('testing edgeL2adjL.m\n') +assert_mat(edgeL2adjL(directed_cherry),{[2,3],[],[]}') +% ================================================ + + +% testing inc2edgeL.m ============================ +fprintf('testing inc2edgeL.m\n') + +assert_mat(inc2edgeL([1 0 0; 0 1 0; 0 0 1]),[1 1 1; 2 2 1; 3 3 1]) % three self-loops +assert_mat(inc2edgeL([-1 -1; 1 0; 0 1]),[1 2 1; 1 3 1]) +assert_mat(inc2edgeL([-1;1]),[1 2 1]) +% ================================================ + + +% testing adj2simple.m =========================== +fprintf('testing adj2simple.m\n') + +assert_mat(adj2simple(rand(6)),ones(6)-eye(6)) +assert_mat(adj2simple([0 2 0; 1 0 0; 1 2 0]),[0 1 1; 1 0 1; 1 1 0]) +% ================================================ + + +% testing edgeL2simple.m ========================= +fprintf('testing edgeL2simple.m\n') + +assert_mat(length(edgeL2simple([1 1 1; 2 2 1; 3 3 1])),0) +assert_mat(sortrows(edgeL2simple([1 2 1; 1 3 2;4 5 1.4])),[1 2 1; 1 3 1; 2 1 1; 3 1 1; 4 5 1; 5 4 1]) +% ================================================ + + +% testing symmetrize.m =========================== +fprintf('testing symmetrize.m\n') +for i=1:20 + adj = randomDirectedGraph(randi(10)+3,rand); + assert_mat(isSymmetric(symmetrize(adj)),true) +end + + +% testing symmetrizeEdgeL.m ====================== +fprintf('testing symmetrizeEdgeL.m\n') + +for x=1:50 + adj = randomDirectedGraph(randi(20)+2,rand); % create a random adjacency + el = adj2edgeL(adj); + if isempty(el); continue; end + elsym = symmetrizeEdgeL(el); + adjsym = edgeL2adj(elsym); + assert_mat(isSymmetric(adjsym),true) +end +% ================================================ + + +% testing addEdgeWeights.m ======================= +fprintf('testing addEdgeWeights.m\n') + +assert_mat([1 2 2; 1 3 1; 3 4 3],addEdgeWeights([1 2 1; 1 2 1; 1 3 1; 3 4 2; 3 4 1])) +assert_mat([1 2 2; 2 3 4],addEdgeWeights([1 2 2; 2 3 4])) +% ================================================ + + +% testing degrees.m ============================== +fprintf('testing degrees.m\n') + +assert_mat([2 2 3 3 2 2],degrees(bowtie)) +assert_mat([2 1 1],degrees(edgeL2adj(directed_cherry))) +assert_mat([2 1 1],degrees(edgeL2adj(undirected_cherry))) + +[deg,indeg,outdeg]=degrees(edgeL2adj(directed_cherry)); +assert_mat(deg,[2 1 1]) +assert_mat(indeg,[0 1 1]) +assert_mat(outdeg,[2 0 0]) + +assert_mat([4 4 4],degrees([0 2 1; 0 0 1; 1 1 0])) +% ================================================ + + +% testing rewire.m =============================== +fprintf('testing rewire.m\n') + +for x=1:100 + + el = adj2edgeL(randomGraph(randi(10)+10,0.4)); + deg = degrees(edgeL2adj(el)); + eln = rewire(el,randi(5)); + degn = degrees(edgeL2adj(eln)); + + assert_mat(deg,degn) + +end +% ================================================ + + +% testing rewireThisEdge.m ======================= +fprintf('testing rewireThisEdge.m\n') + +for x=1:100 + + adj = [0 1; 0 0]; + while not(isConnected(adj)); adj = randomGraph(randi(10)+10,rand); end + el = adj2edgeL(adj); + deg = degrees(edgeL2adj(el)); + + edgeind = randi([1,length(el)]); + eln = rewireThisEdge(el,el(edgeind,1),el(edgeind,2)); + if isempty(eln); continue; end + + adjn = edgeL2adj(eln); + degn = degrees(adjn); + + assert_mat(deg,degn) + assert_mat(isSimple(adjn),true) + + +end +% ================================================ + + + +% testing rewireAssort.m ========================= +fprintf('testing rewireAssort.m\n') + +for x=1:100 + adj = [0 0; 0 0]; + + while not(isConnected(adj)); adj = randomGraph(randi(10)+10,0.4); end + el = adj2edgeL(adj); + eln = rewireAssort(el,randi(5)); + + assert_mat(pearson(edgeL2adj(eln))>=pearson(edgeL2adj(el))-10^(-7)) +end +% ================================================ + + +% testing rewireDisassort.m ====================== +fprintf('testing rewireDisassort.m\n') +for x=1:100 + + adj = [0 0; 0 0]; + while not(isConnected(adj)); adj = randomGraph(randi(10)+10,0.4); end + el = adj2edgeL(adj); + eln = rewireDisassort(el,randi(5)); + + assert_mat(pearson(edgeL2adj(eln))<=pearson(edgeL2adj(el))+10^(-7)) + +end +% ================================================ + +% testing aveNeighborDeg.m ======================= +fprintf('testing aveNeighborDeg.m\n') +assert_mat(aveNeighborDeg(undirected_triangle),[2 2 2]) +assert_mat(aveNeighborDeg(bowtie),[2.5 2.5 7/3 7/3 2.5 2.5]) +% ================================================ + +% testing sortNodesBySumNeighborDegrees.m === +fprintf('testing sortNodesBySumNeighborDegrees.m\n') + +assert_mat(sortNodesBySumNeighborDegrees(bowtie),[4,3,6,5,2,1]') +assert_mat(sortNodesBySumNeighborDegrees([0 1 1; 1 0 0; 1 0 0]),[1, 3, 2]') +% ================================================ + +% testing sortNodesByMaxNeighborDegree.m ==== +fprintf('testing sortNodesByMaxNeighborDegree.m\n') + +assert_mat(sortNodesByMaxNeighborDegree(bowtie),[4,3,6,5,2,1]') +assert_mat(sortNodesByMaxNeighborDegree(edgeL2adj(undirected_cherry)),[1,3,2]') +% ================================================ + + +% testing closeness.m ============================ +fprintf('testing closeness.m\n') +assert_mat(closeness(bowtie)',[1/(1+1+2+3+3), 1/(1+1+2+3+3), 1/(1+1+1+2+2), 1/(1+1+1+2+2), 1/(1+1+2+3+3), 1/(1+1+2+3+3)]) +assert_mat(closeness([0 1 1; 1 0 0; 1 0 0]),[0.5 1/3 1/3]') +% ================================================ + + +% testing nodeBetweennessSlow.m ================== +fprintf('testing nodeBetweennessSlow.m\n') +assert_mat(nodeBetweennessSlow([0 1; 1 0]),[0 0]) +assert_mat(nodeBetweennessSlow([1 1; 0 0]),[0 0]) +assert_mat(nodeBetweennessSlow([0 1 1; 1 0 0; 1 0 0]),[1/3 0 0]) +assert_mat(nodeBetweennessSlow(bowtie),[0 0 0.4 0.4 0 0]) +% need to test an even cycle eventually: when that works! +% bw = nodeBetweennessSlow(edgeL2adj(canonicalNets(2*randi(10)+2,'circle'))); +% assert_mat(bw(1)*ones(1,length(bw)),bw) +% ================================================ + + +% testing nodeBetweennessFaster.m ================ +fprintf('testing nodeBetweennessFaster.m\n') +assert_mat(nodeBetweennessFaster([0 1; 1 0]),[0 0]) +assert_mat(nodeBetweennessFaster([0 1 1; 1 0 0; 1 0 0]),[1/3 0 0]) +assert_mat(nodeBetweennessFaster(bowtie),[0 0 0.4 0.4 0 0]) + +adj = [0 0; 0 0]; +for i=1:100 + + while not(isConnected(adj)); adj = randomGraph(randi(10)+5,rand); end + assert_mat(nodeBetweennessSlow(adj),nodeBetweennessFaster(adj)) + +end +% need to test an even cycle eventually: when that works! +% bw = nodeBetweennessFaster(edgeL2adj(canonicalNets(2*randi(10)+2,'circle'))); +% assert_mat(bw(1)*ones(1,length(bw)),bw) +% ================================================ + +% testing edgeBetweenness.m ====================== +fprintf('testing edgeBetweenness.m\n') + +eb_bowtie = adj2edgeL(bowtie); +eb_bowtie(:,3) = [1/30; 4/30; 1/30; 4/30; 4/30; 4/30; 9/30; 9/30; 4/30; 4/30; 4/30; 1/30; 4/30; 1/30]; + +assert_mat(edgeBetweenness(bowtie),eb_bowtie) +assert_mat(edgeBetweenness(undirected_triangle),[2 1 1/6; 3 1 1/6; 1 2 1/6; 3 2 1/6; 1 3 1/6; 2 3 1/6]) +assert_mat(edgeBetweenness([0 1 1 0; 1 0 1 0; 1 1 0 1; 0 0 1 0]),[2 1 1/12; 3 1 1/6; 1 2 1/12; 3 2 1/6; 1 3 1/6; 2 3 1/6; 4 3 3/12; 3 4 3/12]) +% ================================================ + + +% testing eigenCentrality.m ====================== +fprintf('testing eigenCentrality.m\n') +[v,~]=eig([0 1 1; 1 0 1; 1 1 0]); +assert_mat(eigenCentrality([0 1 1; 1 0 1; 1 1 0]),v(:,3)) +% ================================================ + + +% testing clustCoeff.m =========================== +fprintf('testing clustCoeff.m\n') +assert_mat(clustCoeff(undirected_triangle),1) +assert_mat(clustCoeff(edgeL2adj(undirected_cherry)),0) +assert_mat(clustCoeff(edgeL2adj(canonicalNets(randi(10)+5,'tree',2))),0) +[C1,C2] = clustCoeff(bowtie); +assert_mat([C1,C2],[3/5,7/9]) +% ================================================ + + +% testing weightedClustCoeff.m =================== +fprintf('testing weightedClustCoeff.m\n') +randint = randi(20); +assert_mat(length(weightedClustCoeff(randomGraph(randint+5,rand))),randint+5) +% ================================================ + + +% testing pearson.m ============================== +fprintf('testing pearson.m\n') +assert_mat(pearson(star),-1) +assert_mat( pearson( edgeL2adj( canonicalNets(randi(5)+5,'star') ) ) ,-1 ) +% ================================================ + + +% testing richClubMetric.m ======================= +fprintf('testing richClubMetric.m\n') +assert_mat(richClubMetric(randomGraph(randi(5)+5,rand),12),0) +assert_mat(richClubMetric(bowtie,2),linkDensity(bowtie)) + +mat = [0 1 1 0; 1 0 1 0; 1 1 0 1; 0 0 1 0]; +assert_mat(richClubMetric(mat,2),1) +% ================================================ + + +% testing sMetric.m ============================== +fprintf('testing sMetric.m\n') +assert_mat(sMetric(undirected_triangle),2*12) +assert_mat(sMetric(bowtie),2*41) +assert_mat(sMetric(edgeL2adj(directed_cherry)),4) +assert_mat(sMetric(one_directed_edge),1) +% ================================================ + + +% testing simpleDijkstra.m ======================= +fprintf('testing simpleDijkstra.m\n') +assert_mat(simpleDijkstra(bowtie,1),[0, 1, 1, 2, 3, 3]) +assert_mat(simpleDijkstra(bowtie,3),[1, 1, 0, 1, 2, 2]) + +mat = [0 3.5 0 1; 3.5 0 1 0; 0 1 0 1.4; 1 0 1.4 0]; +assert_mat(simpleDijkstra(mat,1),[0, 3.4, 2.4, 1]) +assert_mat(simpleDijkstra(edgeL2adj(directed_cherry),1),[0, 1, 1]) +assert_mat(simpleDijkstra(edgeL2adj(directed_cherry),2),[inf, 0, inf]) +% ================================================ + +% testing dijkstra.m ============================= +fprintf('testing dijkstra.m\n') +[d,p]=dijkstra(bowtie,1,5); +assert_mat(d,3) +assert_mat(p,[1,3,4,5]) + +[d,p]=dijkstra(undirected_triangle,3,[]); +assert_mat(d,[1,1,0]) +assert_mat(p,{[3,1],[3,2],[3]}) + +[d,p] = dijkstra(square,3,[]); +assert_mat(d,[2,1,0,1]); +assert_mat(p,{[3,2,1],[3,2],[3],[3,4]}) +% ================================================ + + +% testing shortestPathDP.m ======================= +fprintf('testing shortestPathDP.m\n') + +[Jb,rb,J,r]=shortestPathDP(bowtie,1,3,size(bowtie,1)); +assert_mat(Jb,1) +assert_mat(rb,[1,3]) + +[Jb,rb,J,r]=shortestPathDP(bowtie,1,4,size(bowtie,1)); +assert_mat(Jb,2) +assert_mat(rb,[1,3,4]) + +[Jb,rb,J,r]=shortestPathDP(bowtie,1,5,size(bowtie,1)); +assert_mat(Jb,3) +assert_mat(rb,[1,3,4,5]) + +[Jb,rb,J,r]=shortestPathDP(edgeL2adj(directed_cherry),1,2,3); +assert_mat(Jb,1) +assert_mat(rb,[1,2]) + +[Jb,rb,J,r]=shortestPathDP(edgeL2adj(directed_cherry),2,3,3); +assert_mat(Jb,inf) +% ================================================ + + +% test minSpanTree.m ============================= +fprintf('testing minSpanTree.m\n') +for x=1:100 + + adj = [0 1; 0 0]; + while not(isConnected(adj)); adj = randomGraph(randi(50)+5,rand); end + + tr = minSpanTree(adj); + assert_mat(isTree(tr),true) + assert_mat(length(tr),length(adj)); % tree should have the same + % number of nodes as adj + +end +% ================================================ + +% test BFS.m ===================================== +fprintf('testing BFS.m\n') + +for x=1:100 + adj = [0 1; 0 0]; + while not(isConnected(adj)); adj = randomGraph(randi(50)+5,rand); end + + tr = BFS(adj2adjL(adj),randi(length(adj))); + tr = symmetrize(adjL2adj(tr)); + assert_mat(isTree(tr),true) + assert_mat(length(tr),length(adj)) + +end +% ================================================ + + +% testing kneighbors.m =========================== +fprintf('testing kneighbors.m\n') + +assert_mat(kneighbors(bowtie,1,3),[1 2 3 4 5 6]) +assert_mat(kneighbors(bowtie,3,1),[1 2 4]) +assert_mat(kneighbors(undirected_triangle,1,2),[1,2,3]) +% ================================================ + + +% testing kminNeighbors.m ======================== +fprintf('testing kminNeighbors.m\n') + +assert_mat(kminNeighbors(bowtie,1,3),[5, 6]) +assert_mat(kminNeighbors(bowtie,3,1),[1, 2, 4]) +assert_mat(kminNeighbors(bowtie,3,2),[5, 6]) +% ================================================ + + +% testing diameter.m ============================= +fprintf('testing diameter.m\n') + +assert_mat(diameter(undirected_triangle),1) +assert_mat(diameter(bowtie),3) + +el=canonicalNets(randi(10)+5,'line'); +adj = edgeL2adj(el); +assert_mat(diameter(adj),length(adj)-1) + +el=canonicalNets(randi(10)+5,'circle'); +adj = edgeL2adj(el); +assert_mat(diameter(adj),floor(length(adj)/2)) +% ================================================ + + +% testing avePathLength.m ======================== +fprintf('testing avePathLength.m\n') + +assert_mat(avePathLength(bowtie),(0+1+1+2+3+3 +0+1+2+3+3+ 0+1+2+2 +0+1+1 +0+1 +0)/15) +assert_mat(avePathLength(undirected_triangle),1) +adj = edgeL2adj(canonicalNets(6,'line')); +assert_mat(avePathLength(adj),(0+1+2+3+4+5 +0+1+2+3+4 +0+1+2+3 +0+1+2+ 0+1 +0)/15) +% ================================================ + + +% testing smoothDiameter.m ======================= +fprintf('testing smoothDiameter.m\n') + +adj = [0 1; 0 0]; +while not(isConnected(adj)); adj = randomGraph(randi(10)+10,rand); end +assert_mat(diameter(adj),smoothDiameter(adj,1)) % should be the same when the fraction is 1 +% ================================================ + + +% testing vertexEccentricity.m =================== +fprintf('testing vertexEccentricity.m\n') + +assert_mat(vertexEccentricity(bowtie),[3,3,2,2,3,3]) +assert_mat(vertexEccentricity(undirected_triangle),[1,1,1]) +% ================================================ + + +% testing graphRadius.m ========================== +fprintf('testing graphRadius.m\n') + +assert_mat(graphRadius(bowtie),2) + +el = canonicalNets(randi(10)+10,'line'); +adj = edgeL2adj(el); +assert_mat(graphRadius(adj),(size(adj,1)-mod(size(adj,1),2))/2) +% ================================================ + + +% testing distanceDistribution.m ================= +fprintf('testing distanceDistribution.m\n') + +assert_mat(distanceDistribution(bowtie),[7/15, 4/15, 4/15, 0, 0]) +assert_mat(distanceDistribution(undirected_triangle),[1, 0]) +assert_mat(distanceDistribution(edgeL2adj(undirected_cherry)),[2/3,1/3]) +% ================================================ + + +% testing numConnTriples.m ======================= +fprintf('testing numConnTriples.m\n') +assert_mat(numConnTriples(bowtie),6) +assert_mat(numConnTriples(undirected_triangle),1) +assert_mat(numConnTriples(edgeL2adj(undirected_cherry)),1) +% ================================================ + +% testing numLoops.m ============================= +fprintf('testing numLoops.m\n') +assert_mat(numLoops(undirected_triangle),1) +assert_mat(numLoops(bowtie),2) +assert_mat(numLoops(edgeL2adj(undirected_cherry)),0) +assert_mat(numLoops(square),1) +% ================================================ + +% testing loops3.m =============================== +fprintf('testing loops3.m\n') +assert_mat(loops3(bowtie),2) +assert_mat(loops3(square),0) +assert_mat(loops3(undirected_triangle),1) +assert_mat(loops3(edgeL2adj(canonicalNets(randi(10)+3,'btree'))),0) +assert_mat(loops3(edgeL2adj(canonicalNets(4,'trilattice'))),2) +% ================================================ + + +% testing loops4.m =============================== +fprintf('testing loops4.m\n') + +assert_mat(loops4(bowtie),{}) +c4 = ones(4)-eye(4); % clique of size 4 +assert_mat(loops4(c4),{'1-2-3-4'}) +c6 = ones(6)-eye(6); % clique of size 6 +assert_mat(length(loops4(c6)),nchoosek(6,4)) +% ================================================ + + +% testing numStarMotifs.m ======================== +fprintf('testing numStarMotifs.m\n') + +assert_mat(numStarMotifs(bowtie_adjL,3),4+6) +assert_mat(numStarMotifs(bowtie_adjL,4),2) +assert_mat(numStarMotifs(bowtie_adjL,5),0) + +assert_mat(numStarMotifs(adj2adjL(undirected_triangle),3),3) +assert_mat(numStarMotifs(adj2adjL(undirected_triangle),2),6) + +assert_mat(numStarMotifs(bowtie_adjL,1),6) % trivial case +% ================================================ + + +% testing laplacianMatrix.m ====================== +fprintf('testing laplacianMatrix.m\n') + +assert_mat(laplacianMatrix(bowtie),[2 -1 -1 0 0 0; -1 2 -1 0 0 0; -1 -1 3 -1 0 0; 0 0 -1 3 -1 -1; 0 0 0 -1 2 -1; 0 0 0 -1 -1 2]) +assert_mat(laplacianMatrix(undirected_triangle),[2 -1 -1; -1 2 -1; -1 -1 2]) +% ================================================ + + +% testing graphSpectrum.m ======================== +fprintf('testing graphSpectrum.m\n') +adj = randomGraph(randi(50)+10,rand); +assert_mat(length(graphSpectrum(adj)),length(adj)) +% ================================================ + +% testing algebraicConnectivity.m ================ +fprintf('testing algebraicConnectivity.m\n') +adj = randomGraph(randi(50)+10,rand); +assert_mat(length(algebraicConnectivity(adj)),1) +% ================================================ + +% testing fiedlerVector.m ======================== +fprintf('testing fiedlerVector.m\n') +adj = randomGraph(randi(50)+10,rand); +assert_mat(length(fiedlerVector(adj)),length(adj)) +% ================================================ + +% testing graphEnergy.m ========================== +fprintf('testing graphEnergy.m\n') +adj = randomGraph(randi(50)+10,rand); +assert_mat(length(graphEnergy(adj)),1) +% ================================================ + + +% testing simpleSpectralPartitioning.m =========== +fprintf('testing simpleSpectralPartitioning.m\n') + +for xx=1:50 % do the randomized test 50 times + n = randi(99)+11; % number of nodes + adj = randomModularGraph(n,4,0.1,3); % random graph with n nodes + num_groups = randi(10)+1; % number of groups to split the nodes in + groups = []; + for x=1:length(num_groups)-1; groups = [groups ceil(rand*n/num_groups)+1]; end + groups = [groups n-sum(groups)]; + + modules = simpleSpectralPartitioning(adj,groups); + for m=1:length(modules); assert_mat(length(modules{m}),groups(m)); end + +end % end of 50 iterations +% ================================================ + + +% testing newmanGirvan.m ========================= +fprintf('testing newmanGirvan.m\n') +modules = newmanGirvan(bowtie,2); +assert_mat(modules{1}==[1,2,3]) +assert_mat(modules{2}==[4,5,6]) +% ================================================ + + +% testing newmanEigenvectorMethod.m ============== +fprintf('testing newmanEigenvectorMethod.m\n') + +modules = newmanEigenvectorMethod(bowtie); +assert_mat(length(modules),2) +assert_mat(modules{1},[4,5,6]) +assert_mat(modules{2},[1,2,3]) + + +for x=1:100 + adj = randomGraph(randi(10)+5,1); + Adj = zeros(4*length(adj)); + Adj(1:length(adj),1:length(adj))=adj; + Adj(length(adj)+1:2*length(adj),length(adj)+1:2*length(adj))=adj; + Adj(2*length(adj)+1:3*length(adj),2*length(adj)+1:3*length(adj))=adj; + Adj(3*length(adj)+1:4*length(adj),3*length(adj)+1:4*length(adj))=adj; + + Adj(5,length(adj)+5)=1; Adj(length(adj)+5,5)=1; + Adj(length(adj)+6,2*length(adj)+6)=1; Adj(2*length(adj)+6,length(adj)+6)=1; + Adj(2*length(adj)+7,3*length(adj)+7)=1; Adj(3*length(adj)+7,2*length(adj)+7)=1; + Adj(3*length(adj)+1,1)=1; Adj(1,3*length(adj)+1)=1; + + modules = newmanEigenvectorMethod(Adj); + assert_mat(length(modules),4) + + + prescribed = randi(6)+2; + + n = randi(50)+50; + adj = []; + while not(isConnected(adj)); adj = randomModularGraph(n,prescribed,0.9*log(n)/n,2+0.3*rand); end + modules = newmanEigenvectorMethod(adj); + + sumnodes = 0; + for m=1:length(modules); sumnodes = sumnodes + length(modules{m}); end + assert_mat(sumnodes,n) + + for m1=1:length(modules) + for m2=m1+1:length(modules) + + assert_mat(length(intersect(modules{m1},modules{m2})),0) + + end + end + +end +% ================================================ + + +% testing newmanCommFast.m ======================= +fprintf('testing newmanCommFast.m\n') + +[gH,Q]=newmanCommFast(bowtie); +close all; +assert_mat(max(Q),Q(6-1)); + +[gH,Q]=newmanCommFast(randomModularGraph(100,4,0.1,10)); +close all; +assert_mat(length(gH),length(Q)) +[~,ind]=max(Q); +assert_mat(length(gH{ind}),4) +% ================================================ + + +% testing modularityMetric.m ===================== +fprintf('testing modularityMetric.m\n') + +for i=1:20 + + adj = [0 1; 0 0]; + num_modules = randi([2,5]); + while not(isConnected(adj)); adj = randomModularGraph(30,num_modules,0.1,5); end + + % compare to newmanCommFast + [mH,Q1] = newmanCommFast(adj); + close all; + Q2 = []; + for m=1:length(mH); Q2 = [Q2 modularityMetric(mH{m},adj)]; end + + assert_mat(Q1,Q2) + + % compare to the newman-girvan routine + [modules0,~,Q0] = newmanGirvan(adj,num_modules); + assert_mat(Q0,modularityMetric(modules0,adj)) + +end +% ================================================ + + +% testing louvainCommunityFinding.m ============== +fprintf('testing louvainCommunityFinding.m\n'); + +extended_bowtie0 = [1 2; 2 3; 3 2; 3 4; 4 5; 5 6; 4 6; 6 7; 7 8; 7 9; 8 9]; +extended_bowtie = []; +for row=1:size(extended_bowtie0,1) + extended_bowtie = [extended_bowtie; extended_bowtie0(row,:) 1]; +end +clear extended_bowtie0 +extended_bowtie = symmetrizeEdgeL(extended_bowtie); +adj = edgeL2adj(extended_bowtie); + +[modules,inmodule]=louvainCommunityFinding(adj); +assert_mat(length(modules),3) +assert_mat([inmodule{1},inmodule{2},inmodule{3}],[1,1,1]*inmodule{1}) +assert_mat([inmodule{4},inmodule{5},inmodule{6}],[1,1,1]*inmodule{4}) +assert_mat([inmodule{7},inmodule{8},inmodule{9}],[1,1,1]*inmodule{7}) + +[modules,inmodule]=louvainCommunityFinding(bowtie); +assert_mat(length(modules),2) +assert_mat([inmodule{1},inmodule{2},inmodule{3}],[1,1,1]*inmodule{1}) +assert_mat([inmodule{4},inmodule{5},inmodule{6}],[1,1,1]*inmodule{4}) + +% concatenate 4 complete graphs: +adj = ones(10,10)-eye(10); +Adj = zeros(40,40); + +Adj(1:10,1:10)=adj; +Adj(11:20,11:20)=adj; +Adj(21:30,21:30)=adj; +Adj(31:40,31:40)=adj; + +Adj(10,11) = 1; Adj(11,10) = 1; +Adj(20,21) = 1; Adj(21,20) = 1; +Adj(30,31) = 1; Adj(31,30) = 1; + +[modules,inmodule]=louvainCommunityFinding(Adj); +assert_mat(length(modules),4) + +% concatenate 4 dense graphs +adj = [0 1; 0 0]; +while not(isConnected(adj)); adj = randomGraph(10,0.9); end +Adj = zeros(40,40); + +Adj(1:10,1:10)=adj; +Adj(11:20,11:20)=adj; +Adj(21:30,21:30)=adj; +Adj(31:40,31:40)=adj; + +Adj(10,11) = 1; Adj(11,10) = 1; +Adj(20,21) = 1; Adj(21,20) = 1; +Adj(30,31) = 1; Adj(31,30) = 1; + +[modules,inmodule]=louvainCommunityFinding(Adj); +assert_mat(length(modules),4) +% ================================================ + + + +% testing randomGraph.m ========================== +fprintf('testing randomGraph.m\n'); + +% testing the size of the graph +randint = randi(20)+3; +assert_mat(size(randomGraph(randint),1),randint) +assert_mat(size(randomGraph(randint),2),randint) + +% testing the default probability of attachment +for x=1:50 + randint = randi(50)+50; + adj = randomGraph(randint); + assert_mat(linkDensity(adj)>0.35); + assert_mat(linkDensity(adj)<0.65); +end + +% testing a random probability of attachment +for x=1:50 + p = rand; + randint = randi(50)+50; + adj = randomGraph(randint,p); + assert_mat(linkDensity(adj)>p-0.15); + assert_mat(linkDensity(adj)p-0.15) + assert_mat(linkDensity(adj)=sm,true) + + elmax2 = buildSmaxGraph(degrees(adj)); + assert_mat(elmax2,elmax1) +end +% ================================================ + + +% testing PriceModel.m =========================== +fprintf('testing PriceModel.m\n') +for x=1:20 + randint = randi(10)+10; + adj = PriceModel(randint); + assert_mat(isDirected(adj),true) + assert_mat(numNodes(adj),randint) +end +% ================================================ + + +% testing preferentialAttachment.m =============== +fprintf('testing preferentialAttachment.m\n') +for x=1:10 + el = preferentialAttachment(randi(10)+10,1); + adj = edgeL2adj(el); + assert_mat(isTree(adj),true) + assert_mat(isSimple(adj),true) + + randint = randi(30)+5; + el = preferentialAttachment(randint,2); + adj = edgeL2adj(el); + assert_mat(numEdges(adj),1+2*(length(adj)-2)) + +end +% ================================================ + + +% testing exponentialGrowthModel.m =============== +fprintf('testing exponentialGrowthModel.m\n') +for x=1:10 + el = exponentialGrowthModel(randi(100)); + adj=edgeL2adj(el); + assert_mat(isConnected(adj),true) + assert_mat(isTree(adj),true) +end +% ================================================ + +% testing masterEquation.m ======================= +fprintf('testing masterEquation.m\n') +for x=1:30 + randint = randi(100)+3; + adj = masterEquationGrowthModel(randint,1,0); + assert_mat(isTree(adj),true) + + adj = masterEquationGrowthModel(randint,2,0); + assert_mat(isTree(adj),false) + + adj = masterEquationGrowthModel(randint,2,2); + assert_mat(isSimple(adj),true) + +end +% ================================================ + + +% testing newmanGastner.m ======================== +fprintf('testing newmanGastner.m\n') + +for x=1:10 + N = randi(100)+10; + el = newmanGastner(N,rand,[],'off'); % no plot + adj = symmetrize(edgeL2adj(el)); + assert_mat(numNodes(adj),N); + assert_mat(isSimple(adj),true) +end +% ================================================ + + +% testing fabrikantModel.m ======================= +fprintf('testing fabrikantModel.m\n') +for x=1:20 + adj = fabrikantModel(randi(30)+10,rand*10,'off'); + assert_mat(isConnected(adj),true) + assert_mat(isTree(adj),true) + assert_mat(isSimple(adj),true) +end +% ================================================ + +% testing DoddsWattsSabel.m ====================== +fprintf('testing DoddsWattsSabel.m\n') +for x=1:40 + randint = randi(50)+2; + m = randi(round(randint/4)); + adj = DoddsWattsSabel(randint,2,m,10*rand,10*rand); + assert_mat(numEdges(adj),m+randint-1) + assert_mat(isTree(adj),false) + assert_mat(isConnected(adj),true) + assert_mat(isSimple(adj),true) +end +% ================================================ + +% testing nestedHierarchiesModel.m =============== +fprintf('testing nestedHierarchiesModel.m\n') + +el = nestedHierarchiesModel(640,3,[10, 20, 40],10); +adj = edgeL2adj(el); +assert_mat(isSimple(adj)); +% ================================================ + + +% testing forestFireModel.m ====================== +fprintf('testing forestFireModel.m\n'); + +for x=1:20 + randint = randi(20)+5; + L = forestFireModel(randint,rand,10*rand); + adj = symmetrize(adjL2adj(L)); + assert_mat(isSimple(adj),true) + assert_mat(randint,numNodes(L)) + +end +% ================================================ + +% testing pdfCdfRank.m =========================== +fprintf('testing pdfCdfRank.m\n'); +adj = randomGraph(randi(30)+30,0.2); +[xp,yp,xc,yc,lk,lx] = pdfCdfRank(degrees(adj),'off'); +assert_mat(length(xp),length(xc)) +assert_mat(length(xp),length(yp)) +assert_mat(length(yp),length(yc)) +assert_mat(length(lk),length(lx)) +% ================================================ diff --git a/downloaded/matlab-networks-toolbox-master/triangularToFull.m b/downloaded/matlab-networks-toolbox-master/triangularToFull.m new file mode 100644 index 0000000..73e4bbb --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/triangularToFull.m @@ -0,0 +1,21 @@ +function [ ret ] = triangularToFull( A ) +%TRIANGULARTOFULL Convert a triangular matrix (lower or upper) to full by copying about the diagonal +% This method is intended to convert half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% Note: method returns 'A' unchanged when A not triangular (lower or upper) + +% @input A, [NxN] adjacency matrix + +% @output A_full, a matrix with lower or upper triangular elements copied across the diagonal + + +if(isLowerTriangular(A)) + ret = lowerTriangularToFull(A); +elseif(isUpperTriangular(A)) + ret = upperTriangularToFull(A); +else + ret = A; +end + diff --git a/downloaded/matlab-networks-toolbox-master/upperTriangularToFull.m b/downloaded/matlab-networks-toolbox-master/upperTriangularToFull.m new file mode 100644 index 0000000..8cb5ebb --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/upperTriangularToFull.m @@ -0,0 +1,18 @@ +function [ ret ] = upperTriangularToFull( A ) +%UPPERTRIANGULARTOFULL Convert a lower triangular matrix to full by copying about the diagonal +% This method is intended to convert half-adjacency matrices where +% certain algorithms are easier to implement on lower or upper triangular +% matrices (avoiding symmetric doubles) + +% Note: method returns 'A' unchanged when A not upper triangular + +% @input A, [NxN] adjacency matrix + +% @output A_full, a matrix with upper triangular elements copied across the diagonal + if(isUpperTriangular(A)) + ret = triu(A) + triu(A, 1)'; + else + ret = A; + end +end + diff --git a/downloaded/matlab-networks-toolbox-master/vertexEccentricity.m b/downloaded/matlab-networks-toolbox-master/vertexEccentricity.m new file mode 100644 index 0000000..4ff55a0 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/vertexEccentricity.m @@ -0,0 +1,16 @@ +%################################################################## +% Vertex eccentricity - the maximum distance to any other vertex. +% +% Input: adjacency matrix, nxn +% Output: vector of eccentricities for all nodes, 1xn +% +% Other routines used: simpleDijkstra.m +% GB: last updated, Oct 10, 2012 +%################################################################## + +function ec=vertexEccentricity(adj) + +n=size(adj,1); +ec=zeros(1,n); + +for s=1:n; ec(s)=max( simpleDijkstra(adj,s) ); end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/weightedClustCoeff.m b/downloaded/matlab-networks-toolbox-master/weightedClustCoeff.m new file mode 100644 index 0000000..0a86e67 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/weightedClustCoeff.m @@ -0,0 +1,55 @@ +%################################################################## +% Weighted clustering coefficient. +% Source: Barrat et al, The architecture of complex weighted networks +% +% INPUTS: weighted adjacency matrix, nxn +% OUTPUTs: vector of node weighted clustering coefficients, nx1 +% +% Other routines used: degrees.m, kneighbors.m +% GB: last updated, Sep 30 2012 +%################################################################## + +function wC=weightedClustCoeff(adj) + +[deg,~,~]=degrees(adj); +n=size(adj,1); % number of nodes +wC=zeros(n,1); % initialize weighted clust coeff + +for i=1:n % across all nodes + neigh=kneighbors(adj,i,1); + if length(neigh)<2; continue; end + + s=0; + for ii=1:length(neigh) + for jj=1:length(neigh) + + if adj(neigh(ii),neigh(jj))>0; s=s+(adj(i,neigh(ii))+adj(i,neigh(jj)))/2; end + + end + end + + wC(i)=s/(deg(i)*(length(neigh)-1)); +end + + +% % ALTERNATIVE ========================================================= +% wadj=adj; +% adj=adj>0; +% +% [wdeg,~,~]=degrees(wadj); +% [deg,~,~]=degrees(adj); +% n=size(adj,1); % number of nodes +% wC=zeros(n,1); +% +% for i=1:n +% if deg(i)<2; continue; end +% +% s=0; +% for ii=1:n +% for jj=1:n +% s=s+adj(i,ii)*adj(i,jj)*adj(ii,jj)*(wadj(i,ii)+wadj(i,jj))/2; +% end +% end +% +% wC(i)=s/(wdeg(i)*(deg(i)-1)); +% end \ No newline at end of file diff --git a/downloaded/matlab-networks-toolbox-master/weightedRandomSample.m b/downloaded/matlab-networks-toolbox-master/weightedRandomSample.m new file mode 100644 index 0000000..3ba7257 --- /dev/null +++ b/downloaded/matlab-networks-toolbox-master/weightedRandomSample.m @@ -0,0 +1,29 @@ +function s = weightedRandomSample(n,P,W) +%WEIGHTEDRANDOMSAMPLE Weighted random sampling. +% +% INPUTs: number of draws from a discrete distribution (n) +% possible values to pick from, (P) +% set of normalized weights/probabilities, (W) +% OUTPUTs: s - set of n numbers drawn from P +% according to the weights in W +% IB TODO: code optimize this +% Update: fprintf +% IB: last updated, 3/24/14 + +s = []; + +if abs(sum(W)-1)>10^(-8); fprintf('The probabilities do not sum up to 1.\n'); return; end + +% divide the unit interval into |P| segments each with length W_i +unit = [0,W(1)]; +for w=2:length(W) + unit = [unit W(w)+unit(length(unit))]; %#ok +end + +% draw a random number in the unit interval uniformly - where does it fall? +while length(s) % pick P(lb) + +end \ No newline at end of file diff --git a/downloaded/npy-matlab-master/.gitignore b/downloaded/npy-matlab-master/.gitignore new file mode 100644 index 0000000..9b03398 --- /dev/null +++ b/downloaded/npy-matlab-master/.gitignore @@ -0,0 +1,3 @@ +*.asv +.ipynb_checkpoints/ +__pycache__ diff --git a/downloaded/npy-matlab-master/.travis.yml b/downloaded/npy-matlab-master/.travis.yml new file mode 100644 index 0000000..af8404d --- /dev/null +++ b/downloaded/npy-matlab-master/.travis.yml @@ -0,0 +1,38 @@ +# Using several other .travis.yml files as inspiration. See for example: +# https://github.com/MOxUnit/MOxUnit +# https://github.com/scottclowe/matlab-continuous-integration/ +# https://github.com/fieldtrip/fieldtrip/blob/master/.travis.yml + +language: python + +cache: + - apt + +before_install: + # to prevent IPv6 being used for APT + - sudo bash -c "echo 'Acquire::ForceIPv4 \"true\";' > /etc/apt/apt.conf.d/99force-ipv4" + - travis_retry sudo apt-get -y -qq update + - travis_retry sudo apt-get install -y -qq software-properties-common python-software-properties + - travis_retry sudo apt-add-repository -y ppa:octave/stable + - travis_retry sudo apt-get -y -qq update + # get Octave 4.0 + - travis_retry sudo apt-get -y -qq install octave liboctave-dev + + # Get conda + - wget -q http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh + - chmod +x miniconda.sh + - ./miniconda.sh -b -p /home/travis/miniconda + - export PATH=/home/travis/miniconda/bin:$PATH + - conda update --yes --quiet conda + +install: + - conda create -n testenv --yes python=3.6 + - source activate testenv + - conda install --yes --quiet numpy + - conda install --yes -c conda-forge scikit-image + - pip install pytest==3.3.2 pytest-sugar + +script: + - echo "Octave version:" + - octave --no-gui --eval "version()" + - pytest diff --git a/downloaded/npy-matlab-master/LICENSE b/downloaded/npy-matlab-master/LICENSE new file mode 100644 index 0000000..54a9126 --- /dev/null +++ b/downloaded/npy-matlab-master/LICENSE @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2015, npy-matlab developers +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/npy-matlab-master/README.md b/downloaded/npy-matlab-master/README.md new file mode 100644 index 0000000..994a3c4 --- /dev/null +++ b/downloaded/npy-matlab-master/README.md @@ -0,0 +1,49 @@ +[![Travis](https://api.travis-ci.org/kwikteam/npy-matlab.svg?branch=master "Travis")](https://travis-ci.org/kwikteam/npy-matlab) +# npy-matlab + +Code to read and write NumPy's NPY format (`.npy` files) in MATLAB. + +This is experimental code and still work in progress. For example, this code: +- Only reads a subset of all possible NPY files, specifically N-D arrays of + certain data types. +- Only writes little endian, fortran (column-major) ordering +- Only writes with NPY version number 1.0. +- Always outputs a shape according to matlab's convention, e.g. (10, 1) + rather than (10,). + +Feel free to open an issue and/or send a pull request for improving the +state of this project! + +For the complete specification of the NPY format, see the [NumPy documentation](https://www.numpy.org/devdocs/reference/generated/numpy.lib.format.html). + +## Installation +After downloading npy-matlab as a zip file or via git, just add the +npy-matlab directory to your search path: + +```matlab +>> addpath('my-idiosyncratic-path/npy-matlab/npy-matlab') +>> savepath +``` + +## Usage example +```matlab +>> a = rand(5,4,3); +>> writeNPY(a, 'a.npy'); +>> b = readNPY('a.npy'); +>> sum(a(:)==b(:)) +ans = + + 60 +``` + +## Tests +Roundtrip testing is performed using Travis CI and GNU Octave, see +the `.travis.yml` file and `tests/test_npy_roundtrip.py`. + +You can also use two "manual testing scripts": + +- See `tests/npy.ipynb` for Python tests. +- See `tests/test_readNPY.m` for MATLAB reading/writing tests. + +## Memory mapping npy files +See `examples/exampleMemmap.m` for an example of how to memory map a `.npy` file in MATLAB, which is not trivial when the file uses C-ordering (i.e., row-major order) rather than Fortran-ordering (i.e., column-major ordering). MATLAB's memory mapping only supports Fortran-ordering, but Python's default is C-ordering so `.npy` files created with Python defaults are not straightforward to read in MATLAB. diff --git a/downloaded/npy-matlab-master/examples/exampleMemmap.m b/downloaded/npy-matlab-master/examples/exampleMemmap.m new file mode 100644 index 0000000..d5678f1 --- /dev/null +++ b/downloaded/npy-matlab-master/examples/exampleMemmap.m @@ -0,0 +1,23 @@ + + +% Example implementation of memory mapping an NPY file using readNPYheader + +filename = 'data/chelsea_float64.npy'; + +[arrayShape, dataType, fortranOrder, littleEndian, totalHeaderLength, npyVersion] = readNPYheader(filename); + +figure; + +if fortranOrder + f = memmapfile(filename, 'Format', {dataType, arrayShape, 'd'}, 'Offset', totalHeaderLength); + image(f.Data.d) + +else + % Note! In this case, the dimensions of the array will be transposed, + % e.g. an AxBxCxD array becomes DxCxBxA. + f = memmapfile(filename, 'Format', {dataType, arrayShape(end:-1:1), 'd'}, 'Offset', totalHeaderLength); + + tmp = f.Data.d; + img = permute(tmp, length(arrayShape):-1:1); % note here you have to reverse the dimensions. + image(img./255) +end \ No newline at end of file diff --git a/downloaded/npy-matlab-master/npy-matlab/constructNPYheader.m b/downloaded/npy-matlab-master/npy-matlab/constructNPYheader.m new file mode 100644 index 0000000..ca2840e --- /dev/null +++ b/downloaded/npy-matlab-master/npy-matlab/constructNPYheader.m @@ -0,0 +1,88 @@ + + + +function header = constructNPYheader(dataType, shape, varargin) + + if ~isempty(varargin) + fortranOrder = varargin{1}; % must be true/false + littleEndian = varargin{2}; % must be true/false + else + fortranOrder = true; + littleEndian = true; + end + + dtypesMatlab = {'uint8','uint16','uint32','uint64','int8','int16','int32','int64','single','double', 'logical'}; + dtypesNPY = {'u1', 'u2', 'u4', 'u8', 'i1', 'i2', 'i4', 'i8', 'f4', 'f8', 'b1'}; + + magicString = uint8([147 78 85 77 80 89]); %x93NUMPY + + majorVersion = uint8(1); + minorVersion = uint8(0); + + % build the dict specifying data type, array order, endianness, and + % shape + dictString = '{''descr'': '''; + + if littleEndian + dictString = [dictString '<']; + else + dictString = [dictString '>']; + end + + dictString = [dictString dtypesNPY{strcmp(dtypesMatlab,dataType)} ''', ']; + + dictString = [dictString '''fortran_order'': ']; + + if fortranOrder + dictString = [dictString 'True, ']; + else + dictString = [dictString 'False, ']; + end + + dictString = [dictString '''shape'': (']; + +% if length(shape)==1 && shape==1 +% +% else +% for s = 1:length(shape) +% if s==length(shape) && shape(s)==1 +% +% else +% dictString = [dictString num2str(shape(s))]; +% if length(shape)>1 && s+1==length(shape) && shape(s+1)==1 +% dictString = [dictString ',']; +% elseif length(shape)>1 && s %s', tempFilename, inFilename, outFilename)); + + otherwise + fprintf(1, 'I don''t know how to concatenate files for your OS, but you can finish making the NPY youself by concatenating %s with %s.\n', tempFilename, inFilename); +end + diff --git a/downloaded/npy-matlab-master/npy-matlab/readNPY.m b/downloaded/npy-matlab-master/npy-matlab/readNPY.m new file mode 100644 index 0000000..9095d00 --- /dev/null +++ b/downloaded/npy-matlab-master/npy-matlab/readNPY.m @@ -0,0 +1,37 @@ + + +function data = readNPY(filename) +% Function to read NPY files into matlab. +% *** Only reads a subset of all possible NPY files, specifically N-D arrays of certain data types. +% See https://github.com/kwikteam/npy-matlab/blob/master/tests/npy.ipynb for +% more. +% + +[shape, dataType, fortranOrder, littleEndian, totalHeaderLength, ~] = readNPYheader(filename); + +if littleEndian + fid = fopen(filename, 'r', 'l'); +else + fid = fopen(filename, 'r', 'b'); +end + +try + + [~] = fread(fid, totalHeaderLength, 'uint8'); + + % read the data + data = fread(fid, prod(shape), [dataType '=>' dataType]); + + if length(shape)>1 && ~fortranOrder + data = reshape(data, shape(end:-1:1)); + data = permute(data, [length(shape):-1:1]); + elseif length(shape)>1 + data = reshape(data, shape); + end + + fclose(fid); + +catch me + fclose(fid); + rethrow(me); +end diff --git a/downloaded/npy-matlab-master/npy-matlab/readNPYheader.m b/downloaded/npy-matlab-master/npy-matlab/readNPYheader.m new file mode 100644 index 0000000..165a58c --- /dev/null +++ b/downloaded/npy-matlab-master/npy-matlab/readNPYheader.m @@ -0,0 +1,69 @@ + + +function [arrayShape, dataType, fortranOrder, littleEndian, totalHeaderLength, npyVersion] = readNPYheader(filename) +% function [arrayShape, dataType, fortranOrder, littleEndian, ... +% totalHeaderLength, npyVersion] = readNPYheader(filename) +% +% parse the header of a .npy file and return all the info contained +% therein. +% +% Based on spec at http://docs.scipy.org/doc/numpy-dev/neps/npy-format.html + +fid = fopen(filename); + +% verify that the file exists +if (fid == -1) + if ~isempty(dir(filename)) + error('Permission denied: %s', filename); + else + error('File not found: %s', filename); + end +end + +try + + dtypesMatlab = {'uint8','uint16','uint32','uint64','int8','int16','int32','int64','single','double', 'logical'}; + dtypesNPY = {'u1', 'u2', 'u4', 'u8', 'i1', 'i2', 'i4', 'i8', 'f4', 'f8', 'b1'}; + + + magicString = fread(fid, [1 6], 'uint8=>uint8'); + + if ~all(magicString == [147,78,85,77,80,89]) + error('readNPY:NotNUMPYFile', 'Error: This file does not appear to be NUMPY format based on the header.'); + end + + majorVersion = fread(fid, [1 1], 'uint8=>uint8'); + minorVersion = fread(fid, [1 1], 'uint8=>uint8'); + + npyVersion = [majorVersion minorVersion]; + + headerLength = fread(fid, [1 1], 'uint16=>uint16'); + + totalHeaderLength = 10+headerLength; + + arrayFormat = fread(fid, [1 headerLength], 'char=>char'); + + % to interpret the array format info, we make some fairly strict + % assumptions about its format... + + r = regexp(arrayFormat, '''descr''\s*:\s*''(.*?)''', 'tokens'); + dtNPY = r{1}{1}; + + littleEndian = ~strcmp(dtNPY(1), '>'); + + dataType = dtypesMatlab{strcmp(dtNPY(2:3), dtypesNPY)}; + + r = regexp(arrayFormat, '''fortran_order''\s*:\s*(\w+)', 'tokens'); + fortranOrder = strcmp(r{1}{1}, 'True'); + + r = regexp(arrayFormat, '''shape''\s*:\s*\((.*?)\)', 'tokens'); + shapeStr = r{1}{1}; + arrayShape = str2num(shapeStr(shapeStr~='L')); + + + fclose(fid); + +catch me + fclose(fid); + rethrow(me); +end diff --git a/downloaded/npy-matlab-master/npy-matlab/writeNPY.m b/downloaded/npy-matlab-master/npy-matlab/writeNPY.m new file mode 100644 index 0000000..844dc35 --- /dev/null +++ b/downloaded/npy-matlab-master/npy-matlab/writeNPY.m @@ -0,0 +1,25 @@ + + +function writeNPY(var, filename) +% function writeNPY(var, filename) +% +% Only writes little endian, fortran (column-major) ordering; only writes +% with NPY version number 1.0. +% +% Always outputs a shape according to matlab's convention, e.g. (10, 1) +% rather than (10,). + + +shape = size(var); +dataType = class(var); + +header = constructNPYheader(dataType, shape); + +fid = fopen(filename, 'w'); +fwrite(fid, header, 'uint8'); +fwrite(fid, var, dataType); +fclose(fid); + + +end + diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_float32.npy b/downloaded/npy-matlab-master/tests/data/chelsea_float32.npy new file mode 100644 index 0000000..077517b Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_float32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_float64.npy b/downloaded/npy-matlab-master/tests/data/chelsea_float64.npy new file mode 100644 index 0000000..fc3278b Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_float64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_int16.npy b/downloaded/npy-matlab-master/tests/data/chelsea_int16.npy new file mode 100644 index 0000000..f707716 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_int16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_int32.npy b/downloaded/npy-matlab-master/tests/data/chelsea_int32.npy new file mode 100644 index 0000000..065b6e2 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_int32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_int64.npy b/downloaded/npy-matlab-master/tests/data/chelsea_int64.npy new file mode 100644 index 0000000..eb7b3e1 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_int64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_int8.npy b/downloaded/npy-matlab-master/tests/data/chelsea_int8.npy new file mode 100644 index 0000000..27d7d14 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_int8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_uint16.npy b/downloaded/npy-matlab-master/tests/data/chelsea_uint16.npy new file mode 100644 index 0000000..23be48c Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_uint16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_uint32.npy b/downloaded/npy-matlab-master/tests/data/chelsea_uint32.npy new file mode 100644 index 0000000..9741582 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_uint32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_uint64.npy b/downloaded/npy-matlab-master/tests/data/chelsea_uint64.npy new file mode 100644 index 0000000..d144108 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_uint64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/chelsea_uint8.npy b/downloaded/npy-matlab-master/tests/data/chelsea_uint8.npy new file mode 100644 index 0000000..ba2c77d Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/chelsea_uint8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float32.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float32.npy new file mode 100644 index 0000000..22a2e75 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float64.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float64.npy new file mode 100644 index 0000000..84ec2e1 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_float64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int16.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int16.npy new file mode 100644 index 0000000..898ba5f Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int32.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int32.npy new file mode 100644 index 0000000..34468f4 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int64.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int64.npy new file mode 100644 index 0000000..231989d Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int8.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int8.npy new file mode 100644 index 0000000..79122fc Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_int8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint16.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint16.npy new file mode 100644 index 0000000..451c8a8 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint32.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint32.npy new file mode 100644 index 0000000..0a63350 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint64.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint64.npy new file mode 100644 index 0000000..d88a28c Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint8.npy b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint8.npy new file mode 100644 index 0000000..8b5a5ff Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_chelsea_uint8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_float32.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_float32.npy new file mode 100644 index 0000000..ac7d63a Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_float32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_float64.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_float64.npy new file mode 100644 index 0000000..2ed3153 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_float64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_int16.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_int16.npy new file mode 100644 index 0000000..17f5e33 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_int16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_int32.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_int32.npy new file mode 100644 index 0000000..d90e75c Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_int32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_int64.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_int64.npy new file mode 100644 index 0000000..534734b Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_int64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_int8.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_int8.npy new file mode 100644 index 0000000..5b55c91 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_int8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_uint16.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint16.npy new file mode 100644 index 0000000..891037d Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_uint32.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint32.npy new file mode 100644 index 0000000..97afae5 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_uint64.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint64.npy new file mode 100644 index 0000000..320dec8 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/matlab_sine_uint8.npy b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint8.npy new file mode 100644 index 0000000..d648212 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/matlab_sine_uint8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_float32.npy b/downloaded/npy-matlab-master/tests/data/sine_float32.npy new file mode 100644 index 0000000..2db2597 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_float32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_float64.npy b/downloaded/npy-matlab-master/tests/data/sine_float64.npy new file mode 100644 index 0000000..4113b2a Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_float64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_int16.npy b/downloaded/npy-matlab-master/tests/data/sine_int16.npy new file mode 100644 index 0000000..b2d8484 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_int16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_int32.npy b/downloaded/npy-matlab-master/tests/data/sine_int32.npy new file mode 100644 index 0000000..8472f0f Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_int32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_int64.npy b/downloaded/npy-matlab-master/tests/data/sine_int64.npy new file mode 100644 index 0000000..35aa674 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_int64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_int8.npy b/downloaded/npy-matlab-master/tests/data/sine_int8.npy new file mode 100644 index 0000000..b38794f Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_int8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_uint16.npy b/downloaded/npy-matlab-master/tests/data/sine_uint16.npy new file mode 100644 index 0000000..d196e35 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_uint16.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_uint32.npy b/downloaded/npy-matlab-master/tests/data/sine_uint32.npy new file mode 100644 index 0000000..e02219e Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_uint32.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_uint64.npy b/downloaded/npy-matlab-master/tests/data/sine_uint64.npy new file mode 100644 index 0000000..db930b2 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_uint64.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/sine_uint8.npy b/downloaded/npy-matlab-master/tests/data/sine_uint8.npy new file mode 100644 index 0000000..450a1a9 Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/sine_uint8.npy differ diff --git a/downloaded/npy-matlab-master/tests/data/test.npy b/downloaded/npy-matlab-master/tests/data/test.npy new file mode 100644 index 0000000..66820aa Binary files /dev/null and b/downloaded/npy-matlab-master/tests/data/test.npy differ diff --git a/downloaded/npy-matlab-master/tests/npy.ipynb b/downloaded/npy-matlab-master/tests/npy.ipynb new file mode 100644 index 0000000..b07ea92 --- /dev/null +++ b/downloaded/npy-matlab-master/tests/npy.ipynb @@ -0,0 +1,628 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# NPY format" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some links:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* [NPY Spec](http://docs.scipy.org/doc/numpy-dev/neps/npy-format.html)\n", + "* [C++ library](https://github.com/rogersce/cnpy)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Scope\n", + "\n", + "The initial MATLAB implementation could have the following limitations:\n", + "\n", + "* **Supported data types**: `bool`, `[u]int[8|16|32|64]`, `float32`, `float64` (no strings for now?). **No support for record arrays**.\n", + "* **C order only**: an error is raised if FORTRAN order is used.\n", + "* **Arbitrary number of dimensions**: if a generic implementation supporting ndarrays is not possible, then it is okay to only support 1, 2, and 3 dimensions, and raise an error if there are more dimensions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sample datasets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are a few sample datasets." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset 1: 1D sine" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "n = 10000\n", + "t = np.linspace(-10., 10., n)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sine = (1 + np.sin(t)) * 64" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "((10000L,), dtype('float64'))" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sine.shape, sine.dtype" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(t, sine)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dataset 2: 2D image" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import skimage.data\n", + "chelsea = skimage.data.chelsea()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(300L, 451L, 3L)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chelsea.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('uint8')" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chelsea.dtype" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[[143, 120, 104],\n", + " [143, 120, 104],\n", + " [141, 118, 102]],\n", + "\n", + " [[146, 123, 107],\n", + " [145, 122, 106],\n", + " [143, 120, 104]],\n", + "\n", + " [[148, 126, 112],\n", + " [147, 125, 111],\n", + " [146, 122, 109]]], dtype=uint8)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chelsea[:3,:3]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nPv5vUGDbKAg/4VwAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(chelsea)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data types" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We save these two datasets in all supported data types." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dtypes = 'uint8,uint16,uint32,uint64,int8,int16,int32,int64,float32,float64'.split(',')" + ] + }, + { + "cell_type": "code", + "execution_count": 97, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import os\n", + "if not os.path.exists('data'):\n", + " os.mkdir('data')" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [], + "source": [ + "for dtype in dtypes:\n", + " sine_tr = sine.astype(dtype)\n", + " np.save('data/sine_{}.npy'.format(dtype), sine_tr)\n", + " \n", + " chelsea_tr = chelsea.astype(dtype)\n", + " np.save('data/chelsea_{}.npy'.format(dtype), chelsea_tr)" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "chelsea_float32.npy chelsea_int8.npy sine_float32.npy sine_int8.npy\r\n", + "chelsea_float64.npy chelsea_uint16.npy sine_float64.npy sine_uint16.npy\r\n", + "chelsea_int16.npy chelsea_uint32.npy sine_int16.npy sine_uint32.npy\r\n", + "chelsea_int32.npy chelsea_uint64.npy sine_int32.npy sine_uint64.npy\r\n", + "chelsea_int64.npy chelsea_uint8.npy sine_int64.npy sine_uint8.npy\r\n" + ] + } + ], + "source": [ + "%ls data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We check the saved arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEKCAYAAADpfBXhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXl4VeW1/78rhEFBUUQBJTKEhAxAEoYwhCHMgwrOQ9Xi\n2MHa2uHprXS4Yu2gt8O91/bx9tdWLW2VPk4gKCgRiICMCQECIQlhkoiAlkFlhqzfH+tsc8h8ztl7\nv3vvsz7Pk2efYe/3Xck5Wft910jMDEVRFCVYJJgWQFEURbEfVe6KoigBRJW7oihKAFHlriiKEkBU\nuSuKogQQVe6KoigBRJW7ElcQ0SgiKjcth6I4jSp3Ja5g5pXMnNaSc4kon4j2NfD6z4hoHxEdJaLl\nRJRhv6SKEhuq3BUlAohoOoBvABgFoBOANQD+YVQoRWkAVe5K4CCiGiLqHfb8b0T0VOjxBatxItpD\nRD8gos2hlfi/iKgtEbUHsBjA1UT0ORF9RkTdAPQDsIqZ9zBzDYCXAOjKXfEcqtyVeIBDP429dxuA\nyQB6ARgA4D5mPg5gCoD9zHwJM1/KzB8DeA/AcCJKIaLWAGZCbgKK4ikSTQugKC5BTbz3LDMfAAAi\nWgggu7FrmHk9Ec0BUAHgPIAPAYy3WVZFiRlduSsKcCDs8UkAHRo7kYgehSjz7gDaAvg5gGVEdJGj\nEipKhKhyV4LICQAXhz3vhsbNMk3R0DVTAMxl5v3MXMPMcwBcDiA9ivEVxTFUuStBZBOAu4moFRFN\nATA6ynEOAriCiC4Ne20LgNuJ6CoiSiCieyHmzarYRFYUe1HlrgSRxwDcAOAIgK8AmFfn/aZW8V86\nX5m5HMBcALuI6DARdQXwC4i9fUto/McA3MLMn9n6GyhKjFBTzTqI6AUA1wE4xMz967z3AwC/AdCZ\nmQ+HXpsF4AGIo+k7zLzEKcEVRVGUxmlu5f4ixMZ4AUSUBGAigL1hr2UAuAMS8zsFwHNEpDsDRVEU\nAzSpfJl5JWTrWZffA/iPOq/NgDiazjLzHogNMtcOIRVFUZTIiHhlTUQzAFQz85Y6b10NoDrseTWA\na2KQTVEURYmSiJKYiOhiAD+GmGS+fLmJS7T7tqIoigEizVBNBtATwGYiAiSRo5iIhgL4CEBS2Lnd\nQ69dABGpwlcURYkCZm5qMX0BEZllmLmUmbswcy9m7gUxvQxk5oMAFgC4k4jaEFEvACkA1jcyjv7Y\n9PPEE08YlyFIP/r31L+nV38ipUnlTkRzAawGkBqqX31/XT0dprDLALwCoAxSSOkRjkYiRVEUJWaa\nNMsw813NvN+7zvNfAfiVDXIpiqIoMaBx6D4nPz/ftAiBQv+e9qJ/T3M0maHqyIREaq1RFEWJECIC\nO+VQVRRFUfyBKndFUZQAospdURQlgKhyVxRFCSCq3BVFUQKIKndFUZQAospdURQlgKhyVxRFCSCq\n3BVFUQKIKndFUZQAospdURQlgKhyVxRFCSCq3BVFUQJIpG32FA9y9ixQXt7we6mpQNu27sqj1IdZ\nPqNz5+q/d+21QMeO7suk1GfXLuD48fqvd+kCXHWV+/LEgpb8DQB//zvw3e8C11xz4esHDgA/+xnw\nne+YkUupZeNGYORIIDn5wtePHAGmTQP+/Gczcim1HD8OXH450Lfvha+fPCnK/YMPzMhlEWnJXxN9\nAFmxj8WLmfPymH/4w/rv/eIXzIMHMy9c6L5cSi0lJcw33MA8bVr99+bPZ+7dm/mPf3RfLqWW/fuZ\nH3iA+dpr679XVcXcsSPzT37CXFPjvmwWId3ZYl2rNnef87e/yUrj4Yfrv3fvvcDAgcALL7gulhLG\nwoViOvvP/6z/3tixwEMPAU8/7b5cSi1r1wLFxcCf/lT/vV69gN/+Fvj974HPPnNftqiJ5E5gxw90\n5W4bP/0pc0IC85o1jZ9TXCzn/Md/uCeXUsu8ecxEzM8/3/g5J08yd+jQ8MpecZ6yMubWrZm/972m\nz8vOZu7RwxWRGgQRrtzV5u5TDh0CBg0CnnkG+MpXmj739deBRx8FSkqArl3dkU8BzpwBJk8GcnJk\n1dcU5eVAejpQViZHxT2+9S2gogIoKACoCYt2TQ3QqhWwbJnsuNxG2+zFCa++Cpw4IU665hg2TKI0\n5s51Xi6llk2bgMJC4Oabmz+3d2+gXz/Z/ivucfw48NxzwNe+1rRiB4CEBOCuu4Dvfc8d2WJFV+4+\n5Phx4JJLgNmzG7bjNsQzzwCPPw4cOwZceqmj4ikhBgyQKIuCgpad/9ZbwA03AFu3ApmZzsqmCI89\nBvzlL7JQagl79ogN/rXXgFtucVS0eti6cieiF4joIBGVhr32GyLaTkSbiegNIuoY9t4sItpBROVE\nNCm6X0Fpjg0bZBXx/e+3/JpHHwUuughYs8Y5uZRajh4FSksjc2ZPmQIMGQLMn++cXEotp08D//oX\n8PzzLb+mZ08JXnjpJcfEso3mzDIvAphS57UlADKZOQtAJYBZAEBEGQDuAJARuuY5IlKzjwM8/jhw\n3XVAhw4tv6Z9e1kV/uhHzsml1PLEE7JqT0pq+TWJicB99wE//akkPSnO8tJL4rsaPz6y6+65B5g3\nD9i92xm57KJJ5cvMKwEcqfNaATPXhJ6uA9A99HgGgLnMfJaZ9wCoApBrr7jKzp3AunXAz38e+bVP\nPgls3gxUVtovl1LLF18Ac+Y070RtiEcekeM779grk1Kf//s/WShFmnk6ejSQne39xLNYV9YPAFgU\nenw1gOqw96oBXFPvCiUmCgslrj0am2xqqjjtli61XSwljLIy4NQpyTyNhrvuEvu74hznzgFFRQ3n\nh7SE++7z/g046toyRPQTAGeY+eUmTmtwczl79uwvH+fn5yM/Pz9aMeKOhx4CfvIT2cJHSkICcOed\nsjr85jftl00RfvxjIDcXuOyy6K6/5x4xuz31FNCpk72yKcKvfy3H3r2ju/6WW6Tkx9q1Eo3mBIWF\nhSgsLIz6+majZYioJ4CFzNw/7LX7ADwMYDwznwq99jgAMPPToefvAHiCmdfVGU+jZaJk/36pH3Pq\nVPTFwM6flxvD7t3iHFLs5cQJ2ea/+y6Qlxf9OL17i3K/+277ZFMEZiArS4IMvva16Me5/Xage/fo\nzG/R4HicOxFNAfBDADMsxR5iAYA7iagNEfUCkAJgfaTjK43z6qtARkZsVR5btRJ74auv2ieXUsua\nNbLl79cvtnHy88Vpp9jPwYMSyTRuXGzj5OcDb7xhi0iO0Fwo5FwAqwH0JaJ9RPQAgD8A6ACggIhK\niOg5AGDmMgCvACgDsBjAI7pEt5ff/lZWC7Fy553Af/1X7OMo9fnDHyQrNdYSvvfdJ5nFhw/bIpYS\nxgsvSKZ2nz6xjXP77cDevZL57UU0icknnDwJXHyx/LNffnlsY33xhSRBffaZHBV7qKkRk8zcucDE\nibGP1bUr8I9/yM1CsY8JE+TzsSMsePJkWcHPmhX7WM2h5QcCyty5klkaq2IHJD6+SxfJzFPso7gY\n+Pe/peZPrCQkAMOHA//8Z+xjKbUcPy7RYlPqZu9EyciRcgP2IqrcfcLcucDXv27feN/+trfthX7k\nlVeASZPsi3B58EEJiaypaf5cpWUsWiQms6wse8a7+25g+3bg44/tGc9OVLn7hNWrgRtvtG+866/X\nUgR2U1QETJ1q33jjx0sZg08/tW/MeOeDD+z9P+rVS9okFhXZN6ZdqHL3AatWSYidHdt9i8xMWRFq\nQpM9fPKJJJjZqdzbtxe7+x//aN+Y8c7//q8sbOyCCBgxAnj2WfvGtAtV7j5g4UKJcLGz0XViIjBz\npoytxM7y5UBKSv3+m7Hy058C779v75jxykcfybElJZgj4RvfEH/L+fP2jhsrqtx9wAcf2Ltqtxg0\nSHYFSuysWCFZqXaTlydjK7GzdKnsWBNs1nrZ2dLofOdOe8eNFVXuHufYMVHudm4lLa67rjbCQ4mN\nv/7Vmc/IcvytXGn/2PHGX/4iYYt207GjdM967TX7x44FVe4eZ+NGiZ22e7sPSIp7UpLUh1ei5/PP\npTb4rbfaPzYRcMcdwJIl9o8dT9TUiNPz/vudGf+ee4D1HsvHV+XucRYtkh6czbUAi5acHJlDiZ55\n84Bu3aIr5tYSBg4E3n7bmbHjhdJSqcmUlubM+CNHAm++6czY0aLK3eO89Zaz7bxuuUXLy8bKwoXA\nbbc5N/706ZLifvKkc3MEnSVLpA57+/bOjG/1Mi4vd2b8aFDl7mGY5cvihC3X4vrrpUKkJspET2kp\nMHasc+OnpgJt2njPYecntm+XjF+nSEiQkMgPPnBujkhR5e5hrBj0bt2cm8PKplTTTHQcOABUVMg/\ntlMkJAD9+0t3JyU6Xnwx9iqQzTF4sLfKRahy9zBLl4qjxmkeeAAoKHB+niCyapVESkTaqi1SHnpI\n2isqkVMd6g8XazG35rjtNmDLFu/0v1Xl7mFKS0VxOE12tjfTp/1ASQkwYIDz8+TmarmIaFm5UuLb\nnQpKsMjOlqqthw45O09LUeXuUc6dkwiJCROcn2vSJKldc/q083MFjZdeAkaNcn6eAQPkO7Ftm/Nz\nBY1XXwWGDnV+ng4dZAfnFROnKnePsnu3HIcMcX6uvn3FYbdjh/NzBYlz56RZg5PRTBaJiXKj12zV\nyNmyxdlopnDuvlv6qnoBVe4eZckS2eY5vZW0yM7WRJlIWbtW2hZeeaU786WkaMJZpJw8KVFGOTnu\nzJeVBSxb5s5czaHK3aMsXQpMm+befNOmaYXISFm6VKpAtmrlznwTJgCLF7szV1BYtUpi27t0cWe+\nCROAqirpdmYaVe4epaLCHTuhxfDh3krA8AM7dkj4m1tMniyhl+fOuTen3ykudrdN4dVXS+vKqir3\n5mwMVe4e5JNPgLIyd+ztFgMHArt2Afv3uzen33n5ZXdvwO3bi+1dzWct58037eu61BKIJDLHC6UI\nVLl7kPXrpTO7k8lLdencGcjI0HC7lnLsmMQzO1FlsCnuustbWZBepqYG2LpVqp+6yc03y47BNKrc\nPcjWrXL3d5t+/TTUrqUUFQHduwPt2rk7b9++YrJTmueTT8T27fb/0oABEqFjGlXuHuS119y15VoM\nGeK9mtReZeFCKQngNqNGAa+/7v68fqSgQCKZ3L4BDxkiIbKme982qdyJ6AUiOkhEpWGvdSKiAiKq\nJKIlRHRZ2HuziGgHEZUT0SQnBQ8yFRXAjBnuz3vDDVJgySvp015m61bgppvcn9dKmDp82P25/UZR\nkbSndJtOncSsato009zK/UUAU+q89jiAAmZOBbA09BxElAHgDgAZoWueIyLdGUTIoUPS/CE52f25\ne/SQSAytPtg8hYXuOuosiORzKix0f26/sWGDVNQ0QVqa+VpATSpfZl4J4Eidl6cDsOrTzQFwY+jx\nDABzmfksM+8BUAXAga6SwWbVKrHlXnyx+3O3aycKa/Vq9+f2E9XV0gx54EAz848dq5mqzXH2rHyP\n3XZ4W4wda74YXzQr6y7MfDD0+CAAKz3gagDVYedVA7gmBtniktJSYMwYc/MPHqwOu+YoLhZ7u1Od\nl5ojO7u2PIXSMFZIr4nABEAag5gOTojp68nMTERNWWgbfG/27NlfPs7Pz0e+qdurB1m4ELj9dnPz\nDxgA/PnPwC9/aU4Gr7NsmTvVOhtj2DDgu981N78fWLpUTDJule+oS3o6cOSIJJ117RrdGIWFhSiM\nwf5G3Iz3jIh6AljIzP1Dz8sB5DPzASLqBmA5M6cR0eMAwMxPh857B8ATzLyuznjc3JzxCrNUlluz\nxp0ysg2xfbuYZk6dkiYRSn1GjAAefFB+TFBTIyUPDh1yr66N3/jWt6QY3n//tzkZ+vYFnnkGuPHG\n5s9tCUQEZm7x7Sqaf98FAGaGHs8EMD/s9TuJqA0R9QKQAsBj/cC9zb//DZw44VwT35aQkiL2yoMH\nmz83Xtm0yUyoqkVCgkRjbNpkTgavs3u3/I1MkpUlmeamaC4Uci6A1QD6EtE+IrofwNMAJhJRJYBx\noedg5jIArwAoA7AYwCONLdF37bLvFwgSK1cCHTvKisMUiYmyjdRojIbZt08qDWZkmJWjb19g/vzm\nz4tHamqkwFpenlk5cnLEzGqK5qJl7mLmq5m5DTMnMfOLzHyYmScwcyozT2Lmo2Hn/4qZ+zBzGjO/\n29i4Xql37DU2bnSv7nRT3HST+Rhdr7JhAzBoENC6tVk5brlFTGhKfT76SI7Z2WblmDzZbI8EI1ZV\n015kr1JWBlx7rWkpZDu7caNpKbxJaSnQq5dpKWTnoLXdG2b9erOmTYvUVDG1Hj3a/LlOYES565a/\nYRYvBkaONC2FxAYvX66Zqg1RWCjlkU2TlSV1U0ynuHuR99/3xmfUoYMU5FtvyPNoRLnrdrI+J06I\nLdeNfpzNYW1njx0zK4cXKS/3huJo104yVUtLmz833ti501yCWV1GjjRnqTCi3I8c0WiMuqxbJ85U\nU4kx4SQkiFN1+XLTkngLK27ZtDPVIj1dP6OGWLRI/CJeIDVVdhImMKLcU1KkqI9Sy4YNwLhxpqWo\nZepUtbvXpbgYSEqSm7AXmDRJP6O6WPZtk6Gq4Ywfby5k1Yhyz8gw60X2Il6Iyw3n2muBjz82LYW3\nqKyUmvdeIT1d/4/qsnmzfHdNRzNZDB4s5X9ratyf24hy79cPWLDAxMze5bXXvGMnBCRG95VXTEvh\nLRYuNFerpCEGDZIbzuefm5bEOyxZ4q1FUqdOcjQRWmxEuU+ZoiuOcM6fl6iH8eNNS1LLmDGiNLQZ\ncy2VlWKu8gpXXimtGLWxeS0VFcD06aaluJDrrzcTMWNs5V5dLfVLFIkeSkwErrjCtCS1dOwIXHSR\nN9qFeYHz5yWz2kT3pabo3dtsirvXKC8HevY0LcWFXHutmQhBI8r9sssklEvDuISVK8UM4qVCXUSy\n7Tfl6fcalgL1WqGunBypUqnIYnHbNm+ZNwGp4mmiqbkxdTJ8uGaqWlRWSqVBrzF8OFBVZVoKb1Ba\n6s3PaOhQre1usXev1GVKSjItyYUMGWLGdGZMuffurR1/LDZskPBQr9G3r/lWYV5hzRr5znqNrCzZ\n+SmSPeyVHIRwevaUXUV1dbOn2oox5T5hgpYsBSTFf9Mm2bp5jaFDZcVqIozLa2zaBEycaFqK+ljK\nTMsQePczatdO/IxuR8wYU+4ZGVr6FwA++ww4ftxcc46mSEsDzpyR4kfxzq5d3ihGVZdWrWRHof4r\nqQbphaJuDZGaCnz4obtzGlPuKSmiNKxeh/HKunVA+/beSboIx4rgWbPGtCRm+fRT+Z6abK3XFH36\naBkCQPIQvFJ2oC6pqe7X3zem3C+6SFar8W6a2bzZe3G54dxwA1BSYloKs2zeLP6HSy4xLUnDTJqk\n4ZCffSbHIUPMytEYU6eKw9dNjAbf9eghkSLxzO7dkojiVZKS9DOqqJDvqlfp0wfYutW0FGbZtAm4\n5hpzDbGbIyNDqlW6WUbbqHLPzpYu5fFMQYH34nLDGTpUY92XLjXf1acpcnPlBnTmjGlJzLF2rbfq\n/tSlc2c5urlQMqrcR47UMgRVVdIcw6sMGyaOqnhu3FFVZb4fZ1N06yaOVau9XDyyY4d3KkE2Rm6u\nmPjcwqhyHzBAVhzxGmpn2eC6djUrR1NYhY/i9SbMLCUYvBjNFE5aWnznJKxc6c1opnCSk939jIwq\nd0upxWtIZHGxKI1WrUxL0jhE4qSK1/r71mrYa/VK6pKXF7+N58+fl0Wil3dXgPRrcLP+vvFqJllZ\n8euw27tXojC8TmoqsG+faSnMUF7u/RUhIDLG62f0ySdy9PoNOD0d2LPHvfmMK/fevePXqbpggT+U\ne3q6+zG6XmH5cm+WHajLoEHAm2+alsIMq1cDV13l3UgZi8xMUe5ffOHOfFErdyKaRUTbiKiUiF4m\norZE1ImICoiokoiWENFlzY0zYUL8NszevRuYPNm0FM0zcaL7MbpeoaLCmyntdRk8WMwTZ8+alsR9\nSkslH8PrXHaZ3ITcKiIWlXInop4AHgYwkJn7A2gF4E4AjwMoYOZUAEtDz5ukb9/4jNGtqRGF6cVC\nR3XJyJCWe/GoOHbulHrcXufii4FLL43PSqt793o7VyScPn1kweAG0a7cPwNwFsDFRJQI4GIA+wFM\nBzAndM4cADc2N9DAgWIrPHEiSkl8irVbsaJRvEyHDrLljbfGHadPS3KMV1Pa65KWFp9O1cJCqWvv\nB/r3l9wWN4hKuTPzYQC/A/AhRKkfZeYCAF2Y+WDotIMAujQ31uWXS9efnTujkcS/bNnife9+OGPH\nxt8Oa+9eoG1bb2enhjNiRPyFrDKLeXP4cNOStIxRo9zTdYnRXEREyQC+C6AngGMAXiWie8LPYWYm\nogZTX2bPnv3l4/z8fKSm5qOoyHstzJyktNQ/SgMQWeNt5V5U5A+Ht0XPnlI8K56wfEFXXWVWjpaS\nmdny3VVhYSEKCwujnisq5Q5gMIDVzPxvACCiNwAMB3CAiLoy8wEi6gbgUEMXhyt3QFYcxcXA/fdH\nKY0PKSoCZswwLUXLGTEC+Oc/TUvhLsXF3uy+1BhDhwI//7lpKdyluFgWhV7OFQknM1Oazh87JhaL\npsjPz0d+WPr6k08+GdFc0drcywEMI6KLiIgATABQBmAhgJmhc2YCaFEAXXJy/JX+3bPHuyVkGyIj\nI/7auX30kTjA/EJODnD4sCiPeGHvXn/9H7VuLQXO3IiYidbmvhnA3wEUAbA2638G8DSAiURUCWBc\n6HmzZGXF13by9GmxjXo9pT2cjAxpNuBWjK4XePttf5kK27aVo9sdf0yydKk3W1Q2Re/e7hTjizrO\nnZn/i5kzmbk/M89k5rPMfJiZJzBzKjNPYuajLRlr0CBZbcRLVbsdO2RLZlWK8wNux+ia5tw5uZHl\n5pqWJDKmTYuv+vs7d3q78F5DuJXbYzxDFZBORB07xk/DgfJy/602AJHZrRhd0+zYIQ1lmrOLeo3u\n3eMr4ayiwl9mGUDyJtwwcXpCuQNSvyRe2rm9/744VvxGZiawYoVpKdxh7Vqxt3s9pb0u/ftL3Hc8\nYNVpufpqo2JEzKBBHjfL2M3IkfFTQGzXLv/E5YYzbFj85CNUVACjR5uWInLiqUfCpk1SdsFvN2Cr\nqcjnnzs7j2eUe8+e8ZMkU1zsT7NM377x46zbutUfZQfq0qePNJ6PB8f31q3+yhWxIJJy5xs2ODuP\nZ5R7bm58KI5Tp4CDB/2TLh1OVhZw9Chw/LhpSZynuFjixv1Ghw5S0qK01LQkzrN+vT93wIDsgp3u\nyuQZ5Z6TAxw5EvwY3b175R/w8stNSxI57duL4gi6aYYZOHDAPzVl6pKVJa0Bg86HH/rPmWrRs6cU\n43MSzyh3K0Y36B1/VqwAevUyLUX0JCcHv2G25fvp0MGsHNESD5/R+fOy8vVy4/KmSElxvo+FZ5Q7\nIDG6Qd9Obt3qj/rgjTF+fPBDVjdt8u92H5C476CHrO7ZIyUH/BYpYzFihPPtRT2l3Lt1c36rYpp9\n+yQW2a9ce61sh4PM7t3eb9nWFKmpwY88277dH70QGiM93Xn/laeUe2qqtDULMitXik3Ur+TkAIsX\nm5bCWZYv968tFxDZDx2S4lRBZcUKf1XsrEvbtvLjZMNsTyn30aOD7QhiBj79VBqU+JXBg+X3CLLj\nu6rKnzHuFh06SHGqILevrKqS2uh+ZvJkZ83QnlLuaWlAdXVw27lVVEiMq99S2sNJTJR2bkHNSaip\nEVuon7f8gDhVg+y/2rJFfkc/0727s74RTyn3yy4D2rQJrsOuqEjC6/yWUVeX/v2Dm5Ng7RyvvNKs\nHLGSmxvclntnz0o4rh9zRcJx+jPylHIHRPkF1dO/e3dt6rGfycysresRNLZv97fZzCItTerRB5H9\n+/0dKWORleVszojnlHtyMrBqlWkpnGHlSn+WHahLampw46hXrfL/dh8IdpG3oiKpie53UlKkVMSR\nI86M7znlPmZMcB1BFRVS2Mnv5OUFtzhVWZn/6oM3RL9+wMmT0hgmaGzd6q/m8o3Rvr2EFjul7zyn\n3FNSghkxwyzx4X7q7NMY/ftLen4QI2Z27QrGyt3qkRDEePd9+4CkJNNS2EPPns7V3/eccu/fX+y5\nQevKZN2d/VhTpi7t28vR6cJHblNTI41U/JrSHg6RmC4++MC0JPbz7rv+alHZFMnJztXf95xy79RJ\nOuAELQtyyxYxOQWFSZOCp9w/+ghISAC6dDEtiT2MHx+8tojMEi4dBLMMICZApywVnlPugNSk3rTJ\ntBT2snu3lFcICt27B2/Lv2lTMBzeFklJwYs8s0wYV11lVg676NNHFn5O4EnlPnhw8GJ016zxd9mB\nugwZErxY97Vr5bsXFIL4f7Rxo5RXaNXKtCT20L+/ZK070VzFk8o9M1O2XkFi9+5gKfe0tOCZzvbt\n839majiDB0txqvPnTUtiH1VVwfCJWFxyiZiinagQ6VnlHqQCYjU1Er4VJOWemSlmmSCViigsDJZy\nb9NGfAjbtpmWxD7WrAlGjHs4KSnOOL6jVu5EdBkRvUZE24mojIiGElEnIiogokoiWkJEl0Uz9uDB\nUtUuKIpjzx6JXvB7Rl04V14JtGsXnHj38+dl5T5kiGlJ7CUvL1j+q8pK/xcMq0t+vjN291hW7v8L\nYBEzpwMYAKAcwOMACpg5FcDS0POIueIKKYfpVPyn25SXB6PsQF2s1XsQsCJlgnQDBmSVGyTz2a5d\nwXJ6A5LI5IQZOirlTkQdAYxi5hcAgJnPMfMxANMBzAmdNgfAjdGNL79wUGJ0CwuDkRhTlz59gmM+\nKymRMrl+L+pWl7Q0oKDAtBT2cOCANJi/9lrTkthLVhawbJn940a7cu8F4BMiepGINhLRX4ioPYAu\nzHwwdM5BAFFHDE+ZEpwwrqoqiTkOGuPGBSebeNs2YOxY01LYz5gx4swPAiUlEl2SmGhaEnvJygJO\nnLDf8R3tnykRwEAAjzLzBiL6H9QxwTAzExE3dPHs2bO/fJyfn4/8Bop5XHVVcBIwysqABx4wLYX9\n9O4dHGcqw2UuAAAarklEQVTdzp3BykOwSE8XX8K5c/5XihUVwVu1A5Lx3a6d6Inw8iSFhYUojCF9\nlZgb1L9NX0TUFcAaZu4Vej4SwCwAvQGMZeYDRNQNwHJmTqtzLbdkzgULgO9+1/kmsk5TUyMxudXV\nsu0PEp98Ijfhs2f9rzjS04GnngJuvdW0JPbTqpWsev2esn/77fI5PfmkaUnsZ9gw4OGHgQcfbPwc\nIgIzt9hwGJVZhpkPANhHRKmhlyYA2AZgIYCZoddmApgfzfiAFLIPwnby00/lGDTFDkjEDJHYQv1O\nRUXwImUshg0LRqXVPXuCFU4cTk6O/QvZWKJlvg3gJSLaDImW+SWApwFMJKJKAONCz6PCSi92spi9\nG6xZE8ytpEWfPv53fFdXS82SoEXKWPTuDaxfb1qK2Nmwwf+7j8ZITrY/mzhq5c7Mm5l5CDNnMfPN\nzHyMmQ8z8wRmTmXmScx8NGrBEqQrk5Pdwd2gpCQY9cEbY8wY/8dRl5RIqGrr1qYlcYZRo/y/crd2\nh0GMOgOAESPsby/qyQxViz59/B+ju39/sFfuPXoAH39sWorY2LMneLHT4fTo4f+We2Vl8hkFLVTV\nYsAAuYHZGTHjaeWemgosWWJaith4++1gNOhojKwsYOFC01LERkGBfNeCyoABkgHp54zvdeuAXr1M\nS+EcHTrI0c4y2p5W7mPH+tupyiwr96DUnm6IYcOAw4clKsiv7NoVzBh3i27dJNTOz03Ng1h2oC6T\nJwOlpfaN52nlnp4utUuiiNb0BPv2ybFrV7NyOMkVV4h/xM8hq9u2AX37mpbCWVJSpHidX6mqkh4C\nQaZrV3vN0J5W7pZS9GvETFGR+A2CUnu6IRIS5Cbs12iMQ4fk2KOHWTmcJifHv1FNzMCqVcGqtd8Q\nmZn2fkaeVu6ARMzY7UV2i4oKYOhQ01I4T26uf6tDlpVJBEZQHXUWWVn+LcT3+edyzMw0K4fTDB5s\nbzkPzyv3Hj38u53cuFG6mwedXr38G7JaVBS8+uANkZ4OrF5tWoroWLeuNmEuyPTvL1YKuyJmPK/c\nc3MlDtmPbNkSbGeqxYgR/m2WXVICjBxpWgrnGThQnPtnzpiWJHI2bgRGjzYthfN07iwNVuwqo+15\n5Z6cXOuY9BuVlcHNqAvH2vL70fFdXS1+kaBz1VXSI8GP/0v798fH7gqQ1XvcKPfBg2Vb5jfFYYWd\nBTWlPZzOneXoxxLNK1aIszHoEEm0iR+dqosWBd/ebtG7t309Ejyv3C2btd+yIIuLxaQUdDuhxejR\n/rO7W0Xd0tKaPi8oTJvmP/8Vs+w24sF0BgATJtgXnOB55Q5IjK4TPQadZOdOICnJtBTu0b27/2Ld\nt2wRh3283ICvvtp/iUyffgqcPh3sEh7h9OplXx8LXyj3AQP8t51cuTK45UkbIitLfmc/sXp1sEtD\n1GXgQOD9901LERnFxZLvEtSibnXJzpZF0qlTsY/lC+U+aJD/yhBUVcVHjLvF0KH+i3XftSu4Ndwb\nYtgwSdryk/+qrCz4ZQfCufJK4OKL7clU9YVyT02VWs5+gVm2Vv36mZbEPTIz5QZsdx9IJykujo9I\nGYtLLpGjn5ICt2yJH5OMRWqqBJHEii+U++DBEh7kF8URT5EyFp07y9bZLxEzNTXiXAx6Sns4RJKT\nUFRkWpKWU1ICDB9uWgp3ycuThUes+EK5W3duqw6I16moiC9brsWAAf4xzViVLONp5Q7IqtBPse47\ndsRHrkg4vXrZEx3oC+VOJKvg994zLUnLWLYsfpIuwklOlt/dDyxfDnTqJIXP4om+ff3TI+HAAeDk\nyfgo4RFOVhawYEHs4/jmq33zzf4Jh6yokHjVeGP8eP+s3DdvBm67zbQU7jNqlH/CITduFF9OvETK\nWAwZItEyp0/HNo5vlHv37v5pubdzZ/ytNgDZrdiVOu00H34YXz4Ri379xCzjB//Vzp3B7r7UGJde\nKj+xNu7wjXLPyQGWLjUtRfOcPSvNH+Ihpb0uWVnyD2lHjK7TLFsmMcXxRseOcvRDMb6CgviKOLMg\nkt97zZrYxvGNch82DPj3v70fo1tdDSQmAtdcY1oS97FidL2eqcosDaNHjDAtiRkmTfKHcq+sDHb7\nw6bIy4vdxOkb5e6XGN2iomA3W26O9HTvZxNbnb06dTIrhyn80COBOX6jzgAx68bqY4xJuRNRKyIq\nIaKFoeediKiAiCqJaAkRXRabeOFzSbyr1xsOrF4df3G54eTnez+OuqhIUvHjLVLGwg+x7lZGerdu\nZuUwxdChsRfii/Xr/RiAMgCWseRxAAXMnApgaei5bQwY4P0yBB9+GD/lSRuiTx+pv+1l9uyRHUa8\nYmUTe5ny8vhdtQPiv/r889giZqJW7kTUHcA0AH8FYNXVmw5gTujxHAA3Ri9afTIzvR/rvmhRfDpT\nLbKzgbfeMi1F07z9tsR7xytpaZIkc+yYaUka55134i/BLJzERPmJpRhfLCv3/wbwQwA1Ya91YeaD\noccHAXSJYfx65OV5e8Vx5oxEisRTSntdrBvb8eNm5WiKXbuAiRNNS2GOSy4Rh7+X80bKy4HrrjMt\nhVluvTU200xiNBcR0fUADjFzCRHlN3QOMzMRNRjbMnv27C8f5+fnIz+/wSHqkZ4u9Z1PnQLatYtU\naucpL5d/nPbtTUtijrZtgS5dvNub9Nw5MRvFs+kMkNX7tm3erbi4Y0d8ZnmHU1NTiNdeK8SJE9Fd\nTxxFbCER/QrAvQDOAWgH4FIAbwAYAiCfmQ8QUTcAy5k5rc61HM2cFomJYppp4f3AVZ59Fvjb3/zX\nkchuJkyQn8dt9bjYw9q14vD2ekit0/zgB3KTmzvXtCT1OXlSQmo//RS44grT0pjjn/8EfvrT2oxi\nIgIzt7i1TFRmGWb+MTMnMXMvAHcCWMbM9wJYAGBm6LSZAOZHM35TzJgBbNpk96j2UF4OTJliWgrz\njBzp3eqQJSXA9deblsI8I0d6N5u4slKSreJZsQNSziOWxvN2BYNZ0z8NYCIRVQIYF3puK0lJ9rWh\nsputWyWGON7xcv397dullEW807+/d3eY69bFT1/bprjqKjnu3Rvd9TErd2Z+n5mnhx4fZuYJzJzK\nzJOY+Wis49dl2DBg1Sq7R40dZolxz801LYl5hg8Xe64X65esWiXfoXgnOVmOXiz/u369d30BbtKq\nlfiGoi1D4Ls0jmHDvJmleuSIKLN4qz3dEFbRtE8+MSpGg5SXx1f7w8YgkgAFL+6Cq6vjO1Q1nIED\nazOqI8V3yj0pSVbJXltxLF8utVVatTItiXmIxPThtUJvBw+Ksy7eozAs+vQB3n3XtBT1efdd6Zus\niHlq+fLorvWdcm/VSrK31q83LcmFbNokzl5FmD7de3HURUXyz9KmjWlJvMHUqd77jKzdXjxW7GyI\nUaOi3135TrkD4rDzWlOI6mp11IWTlOS93VVFhW73w8nIEAezlygpEX8AtTjgL9hkZ0vI6pkzkV/r\nS+U+YICk+XuJ+fN1tRFOTg4wb55pKS5k8eL4rldSl+xsWZQcPmxaklqWLNEEs3Csarjr1kV+rS+V\n++TJ3nIEnT8PHD0av7WnG2LMGMkkPnvWtCS1lJfLd0cROnaU0F0vBSjoZ1Sfm26KroqnL5V7375i\nm/vsM9OSCJs2iR3XussqUh7ikku84xs5eVJWqboqvJDevWNv52YnGuNenx49ovuMfKncL70U6NzZ\nO4kyK1ZIUTO1E15IXl5sVe3sZONGqflz+eWmJfEWubne+YxOnJCSA/FceK8hRo4UHRMpvlTugCTK\neGU7uWtXfJf5bYzsbO9U8dy61ZuFzEyTk+OdtohVVWIquvRS05J4i7y86GLdfavc+/b1Tm33RYs0\neakhvFTbfdmy+G5/2Bi5uWIKqalp/lyneestjWZqiC5RFk73rXKfMMEbfSDPnZOVz+jRpiXxHiNH\nShiXF5yqW7bEdw33xujVS45eKPRWUgLcaGt7n2BAFF0VXN8q90GDRKmaLt26b5/88a+91qwcXqRb\nN3E0e2HbX16uprPGGDLEG0XEduzQlXtjpKREfo1vlXvnznIsKTErxzvviDdbyw7UJyFBojEWLzYr\nh5Woc801ZuXwKgMGmP+MTp0CNm+WG41Sn2gsA75V7oDUTo+2YppdbNoE3HmnWRm8zO23m09x/+AD\nYNw4jWZqjKlTzeeN7NghjtSkJLNyeJW77478Gl8r9+Rk8yv30tLa8qlKfVJSzDdXKSmptS0r9enX\nDyguNitDUZGaZJoimoWJr5V7fj5QWGhu/vPnZecwfLg5GbzOsGGiXE+dMidDYaFmDzeFFUVksl5T\nQQEwYoS5+YOIr5X7yJES/2nKqXrokBwzMszM7weSk4HWrWv7QLoNs+RDaIx74xBJSGQ0Ke52UV6u\nyt1ufK3crTZUpraUixfLdl9tuY1DJNv+ZcvMzG+lbasztWnS0oD33zcz9+nTsrvTDln24mvlnpAg\nziBTppnVqzUutyVMnmzO8b1ihZhkEhPNzO8XJk6MrvKgHWzbBnTooOHEduNr5Q5Iq7CqKjNzV1Zq\nIaqWkJlpzp6rn1HLyM015/jetk0a8Cj24nvlPmIEMGeO+/OeOSMFl9SW2zx5ebIqPHHC/bn/8Q/d\n7reEPn3kuG2b+3O//rr6rZzA98p98mSJxDh92t15KyuBiy7S8K2W0KsX0KmT+4XezpyROvtTp7o7\nrx9JSAAmTYqu+mCslJUBN9/s/rxBx/fKvX17qSS3dq27865ZI45CpWVkZLj/GW3cKDfgyy5zd16/\n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\nQP4/b2pkLWP6hfIAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nYbgAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAEKCAYAAADpfBXhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXl8VfWZ/z9PCIuCoogCSthCQhYgCUtYwhL2RcVdsbbF\nam1nrFPbmVen0toRa2112unMtH0582tHLW2VvtxAUFBSIAKyJgQIhCSETSICUhaVneT5/fHcYy7Z\n773nnO855z7v1yuvc5dzvt8nuTfP+X6flZgZiqIoSrBIMC2AoiiKYj+q3BVFUQKIKndFUZQAospd\nURQlgKhyVxRFCSCq3BVFUQKIKncl8BDRWCIqNy2HoriJKncl8DDzGmZOa825RJRPRAfrvTabiMqJ\n6BQRHSOit4joxtB77YjoRSLaT0SfEVEJEU134vdQlEhQ5a4oLfMhgHHM3BlAbwBnAPw69F4igI9C\n718N4EkArxFRbyOSKkoIVe5KICCiWiLqF/b8j0T0TOjxZavx0Cr7X4hoGxGdJKK/ElF7IuoIYBmA\nG4no89BKvDszH2Tmo9blAGoAfAIAzHyGmZ9m5o9Cz98FsA/AEFd+cUVpAlXuSlDh0E9T790DYBqA\nvgAGA3iQmU8DmA7gEDNfxcxXM/NhACCiMUR0EsBnAHoB+GFjAxNRNwCpAHba+csoSqSocleCDDXz\n3m+Y+TAznwCwBEB2c9cw81pmvgZATwAXAfyywWREbQG8AuCPzFwZk+SKEiOq3JV45XDY47MAOrXm\nImY+BOAnAL4e/joRJQD4M4BzAB6zSUZFiRpV7kpQOAPgyrDnPdC0WaY5WnNN29B8AAAiIgAvArge\nwF3MXBPFvIpiK6rclaCwFcADRNQmFIo4LspxjgC4joiutl4goq8QUVLocW8AzwJ4M+ya/wGQBmAW\nM5+Pcl5FsRVV7kpQeBzArQBOAPgKgIX13m9uRf6l85WZywEsALCXiI4TUQ8AGQDWEdEXAAoBrAfw\nr8CXyv5bALIAHA5F2XxORPfb9YspSjRQc806iOglADcDOMrMg+q99y8Qp1JXZj4eem0ugIcgoWLf\nZeblTgmuKIqiNE1LK/eXIaFhlxHaok4BcCDstQwA90FWOdMBvBByMimKoigu06zyZeY1kG1ufX6N\n0LY0jNsALGDmi8y8H0AVgFw7hFQURVEiI+KVNRHdBqCambfXe+tGANVhz6sB3BSDbIqiKEqUJEZy\nMhFdCeBHEJPMly83c4l231YURTFARModQDKAPgC2SWgvegIoJqIRAD4GkBR2bs/Qa5dBRKrwFUVR\nooCZm1tMX0ZEZhlmLmXmbszcl5n7QkwvQ5j5CIDFAGaHSqD2BZACYFMT4+iPTT9PPfWUcRmC9KN/\nT/17evUnUppV7kS0AMA6AKlEdJCIvlFfT4cp7DIArwEog1TWe5SjkUhRFEWJmWbNMszcbCIGM/er\n9/znAH5ug1yKoihKDGgcus/Jz883LUKg0L+nvejf0xzNZqg6MiGRWmsURVEihIjATjlUFUVRFH+g\nyl1RFCWAqHJXFEUJIKrcFUVRAogqd0VRlACiyl1RFCWAqHJXFEUJIKrcFUVRAogqd0VRlACiyl1R\nFCWAqHJXFEUJIKrcFUVRAogqd0VRlAASaZs9xYNcvAiUlzf+Xmoq0L69u/IoDWGWz+jSpYbv9eoF\ndO7svkxKQ/buBU6fbvh6t27ADTe4L08saMnfAPCnPwHf+x5w002Xv374MPCTnwDf/a4ZuZQ6tmwB\nxowBkpMvf/3ECWDmTOD3vzcjl1LH6dPAtdcCAwZc/vrZs6LcP/zQjFwWkZb8NdEHkBX7WLaMOS+P\n+Qc/aPjez37GPGwY85Il7sul1FFSwnzrrcwzZzZ8b9Ei5n79mH/3O/flUuo4dIj5oYeYe/Vq+F5V\nFXPnzsw//jFzba37slmEdGerda3a3H3OH/8oK41HHmn43te+BgwZArz0kutiKWEsWSKms3/7t4bv\nTZgAfPObwHPPuS+XUseGDUBxMfC//9vwvb59gV/9Cvj1r4HPPnNftqiJ5E5gxw905W4bTz7JnJDA\nvH590+cUF8s5//qv7sml1LFwITMR84svNn3O2bPMnTo1vrJXnKesjLltW+bvf7/587KzmXv3dkWk\nRkGEK3e1ufuUo0eBoUOB558HvvKV5s99803gsceAkhKge3d35FOACxeAadOAnBxZ9TVHeTmQng6U\nlclRcY/vfAeoqAAKCgBqxqJdWwu0aQOsXCk7LrfRNntxwuuvA2fOiJOuJUaOlCiNBQucl0upY+tW\noLAQuPPOls/t1w8YOFC2/4p7nD4NvPAC8K1vNa/YASAhAbj/fuD733dHtljRlbsPOX0auOoqYN68\nxu24jfH888ATTwCnTgFXX+2oeEqIwYMlyqKgoHXnv/MOcOutwI4dQGams7IpwuOPA3/4gyyUWsP+\n/WKDf+MN4K67HBWtAbau3InoJSI6QkSlYa/9koh2EdE2InqLiDqHvTeXiHYTUTkRTY3uV1BaYvNm\nWUX88z+3/prHHgOuuAJYv945uZQ6Tp4ESksjc2ZPnw4MHw4sWuScXEod588Df/0r8OKLrb+mTx8J\nXnjlFcfEso2WzDIvA5he77XlADKZOQtAJYC5AEBEGQDuA5ARuuYFIlKzjwM88QRw881Ap06tv6Zj\nR1kV/vCHzsml1PHUU7JqT0pq/TWJicCDDwJPPilJT4qzvPKK+K4mTYrsuq9+FVi4ENi3zxm57KJZ\n5cvMawCcqPdaATPXhp5uBNAz9Pg2AAuY+SIz7wdQBSDXXnGVPXuAjRuBn/408muffhrYtg2orLRf\nLqWOL74A5s9v2YnaGI8+Ksf33rNXJqUh//M/slCKNPN03DggO9v7iWexrqwfArA09PhGANVh71UD\nuKnBFUpMFBZKXHs0NtnUVHHarVhhu1hKGGVlwLlzknkaDfffL/Z3xTkuXQKKihrPD2kNDz7o/Rtw\n1LVliOjHAC4w86vNnNbo5nLevHlfPs7Pz0d+fn60YsQd3/wm8OMfyxY+UhISgNmzZXX4j/9ov2yK\n8KMfAbm5wDXXRHf9V78qZrdnngG6dLFXNkX4xS/k2K9fdNffdZeU/NiwQaLRnKCwsBCFhYVRX99i\ntAwR9QGwhJkHhb32IIBHAExi5nOh154AAGZ+LvT8PQBPMfPGeuNptEyUHDok9WPOnYu+GFhNjdwY\n9u0T55BiL2fOyDb//feBvLzox+nXT5T7Aw/YJ5siMANZWRJk8K1vRT/OvfcCPXtGZ36LBsfj3Ilo\nOoAfALjNUuwhFgOYTUTtiKgvgBQAmyIdX2ma118HMjJiq/LYpo3YC19/3T65lDrWr5ct/8CBsY2T\nny9OO8V+jhyRSKaJE2MbJz8feOstW0RyhJZCIRcAWAdgABEdJKKHAPwWQCcABURUQkQvAAAzlwF4\nDUAZgGUAHtUlur386leyWoiV2bOBf//32MdRGvLb30pWaqwlfB98UDKLjx+3RSwljJdekkzt/v1j\nG+fee4EDByTz24toEpNPOHsWuPJK+We/9trYxvriC0mC+uwzOSr2UFsrJpkFC4ApU2Ifq3t34M9/\nlpuFYh+TJ8vnY0dY8LRpsoKfOzf2sVpCyw8ElAULJLM0VsUOSHx8t26SmafYR3Ex8Pe/S82fWElI\nAEaNAv7yl9jHUuo4fVqixabXz96JkjFj5AbsRVS5+4QFC4Bvf9u+8f7pn7xtL/Qjr70GTJ1qX4TL\nww9LSGRtbcvnKq1j6VIxmWVl2TPeAw8Au3YBn3xiz3h2osrdJ6xbB9x+u33j3XKLliKwm6IiYMYM\n+8abNEnKGBw7Zt+Y8c6HH9r7f9S3r7RJLCqyb0y7UOXuA9aulRA7O7b7FpmZsiLUhCZ7+PRTSTCz\nU7l37Ch299/9zr4x453//m9Z2NgFETB6NPCb39g3pl2ocvcBS5ZIhIudja4TE4E5c2RsJXZWrQJS\nUhr234yVJ58EPvjA3jHjlY8/lmNrSjBHwj/8g/hbamrsHTdWVLn7gA8/tHfVbjF0qOwKlNhZvVqy\nUu0mL0/GVmJnxQrZsSbYrPWys6XR+Z499o4bK6rcPc6pU6Lc7dxKWtx8c12EhxIb//d/znxGluNv\nzRr7x443/vAHCVu0m86dpXvWG2/YP3YsqHL3OFu2SOy03dt9QFLck5KkPrwSPZ9/LrXB777b/rGJ\ngPvuA5Yvt3/seKK2Vpye3/iGM+N/9avAJo/l46ty9zhLl0oPzpZagEVLTo7MoUTPwoVAjx7RFXNr\nDUOGAO++68zY8UJpqdRkSktzZvwxY4C333Zm7GhR5e5x3nnH2XZed92l5WVjZckS4J57nBt/1ixJ\ncT971rk5gs7y5VKHvWNHZ8a3ehmXlzszfjSocvcwzPJlccKWa3HLLVIhUhNloqe0FJgwwbnxU1OB\ndu2857DzE7t2ScavUyQkSEjkhx86N0ekqHL3MFYMeo8ezs1hZVOqaSY6Dh8GKirkH9spEhKAQYOk\nu5MSHS+/HHsVyJYYNsxb5SJUuXuYFSvEUeM0Dz0EFBQ4P08QWbtWIiUibdUWKd/8prRXVCKnOtQf\nLtZibi1xzz3A9u3e6X+ryt3DlJaK4nCa7Gxvpk/7gZISYPBg5+fJzdVyEdGyZo3EtzsVlGCRnS1V\nW48edXae1qLK3aNcuiQREpMnOz/X1KlSu+b8eefnChqvvAKMHev8PIMHy3di507n5woar78OjBjh\n/DydOskOzismTlXuHmXfPjkOH+78XAMGiMNu927n5woSly5JswYno5ksEhPlRq/ZqpGzfbuz0Uzh\nPPCA9FX1AqrcPcry5bLNc3oraZGdrYkykbJhg7QtvP56d+ZLSdGEs0g5e1aijHJy3JkvKwtYudKd\nuVpClbtHWbECmDnTvflmztQKkZGyYoVUgWzTxp35Jk8Gli1zZ66gsHatxLZ36+bOfJMnA1VV0u3M\nNKrcPUpFhTt2QotRo7yVgOEHdu+W8De3mDZNQi8vXXJvTr9TXOxum8Ibb5TWlVVV7s3ZFKrcPcin\nnwJlZe7Y2y2GDAH27gUOHXJvTr/z6qvu3oA7dhTbu5rPWs/bb9vXdak1EElkjhdKEahy9yCbNkln\ndieTl+rTtSuQkaHhdq3l1CmJZ3aiymBz3H+/t7IgvUxtLbBjh1Q/dZM775Qdg2lUuXuQHTvk7u82\nAwdqqF1rKSoCevYEOnRwd94BA8Rkp7TMp5+K7dvt/6XBgyVCxzSq3D3IG2+4a8u1GD7cezWpvcqS\nJVISwG3GjgXefNP9ef1IQYFEMrl9Ax4+XEJkTfe+bVa5E9FLRHSEiErDXutCRAVEVElEy4nomrD3\n5hLRbiIqJ6KpTgoeZCoqgNtuc3/eW2+VAkteSZ/2Mjt2AHfc4f68VsLU8ePuz+03ioqkPaXbdOki\nZlXTppmWVu4vA5he77UnABQwcyqAFaHnIKIMAPcByAhd8wIR6c4gQo4eleYPycnuz927t0RiaPXB\nliksdNdRZ0Ekn1Nhoftz+43Nm6WipgnS0szXAmpW+TLzGgAn6r08C4BVn24+gNtDj28DsICZLzLz\nfgBVABzoKhls1q4VW+6VV7o/d4cOorDWrXN/bj9RXS3NkIcMMTP/hAmaqdoSFy/K99hth7fFhAnm\ni/FFs7LuxsxHQo+PALDSA24EUB12XjWAm2KQLS4pLQXGjzc3/7Bh6rBrieJisbc71XmpJbKz68pT\nKI1jhfSaCEwApDGI6eCEmL6ezMxE1JyFttH35s2b9+Xj/Px85Ju6vXqQJUuAe+81N//gwcDvfw88\n+6w5GbzOypXuVOtsipEjge99z9z8fmDFCjHJuFW+oz7p6cCJE5J01r17dGMUFhaiMAb7G3EL3jMi\n6gNgCTMPCj0vB5DPzIeJqAeAVcycRkRPAAAzPxc67z0ATzHzxnrjcUtzxivMUllu/Xp3ysg2xq5d\nYpo5d06aRCgNGT0aePhh+TFBba2UPDh61L26Nn7jO9+RYnj/+Z/mZBgwAHj+eeD221s+tzUQEZi5\n1beraP59FwOYE3o8B8CisNdnE1E7IuoLIAWAx/qBe5u//x04c8a5Jr6tISVF7JVHjrR8bryydauZ\nUFWLhASJxti61ZwMXmffPvkbmSQrSzLNTdFSKOQCAOsADCCig0T0DQDPAZhCRJUAJoaeg5nLALwG\noAzAMgCPNrVE37vXvl8gSKxZA3TuLCsOUyQmyjZSozEa5+BBqTSYkWFWjgEDgEWLWj4vHqmtlQJr\neXlm5cjJETOrKVqKlrmfmW9k5nbMnMTMLzPzcWaezMypzDyVmU+Gnf9zZu7PzGnM/H5T43ql3rHX\n2LLFvbrTzXHHHeZjdL3K5s3A0KFA27Zm5bjrLjGhKQ35+GM5ZmeblWPaNLM9EoxYVU17kb1KWRnQ\nq5dpKWQ7u2WLaSm8SWkp0LevaSlk56C13Rtn0yazpk2L1FQxtZ482fK5TmBEueuWv3GWLQPGjDEt\nhcQGr1qlmaqNUVgo5ZFNk5UldVNMp7h7kQ8+8MZn1KmTFOTbZMjzaES563ayIWfOiC3XjX6cLWFt\nZ0+dMiuHFykv94bi6NBBMlVLS1s+N97Ys8dcgll9xowxZ6kwotxPnNBojPps3CjOVFOJMeEkJIhT\nddUq05J4Cytu2bQz1SI9XT+jxli6VPwiXiA1VXYSJjCi3FNSpKiPUsfmzcDEiaalqGPGDLW716e4\nGEhKkpuwF5g6VT+j+lj2bZOhquFMmmQuZNWIcs/IMOtF9iJeiMsNp1cv4JNPTEvhLSorpea9V0hP\n1/+j+mzbJt9d09FMFsOGSfnf2lr35zai3AcOBBYvNjGzd3njDe/YCQGJ0X3tNdNSeIslS8zVKmmM\noUPlhvP556Yl8Q7Ll3trkdSlixxNhBYbUe7Tp+uKI5yaGol6mDTJtCR1jB8vSkObMddRWSnmKq9w\n/fXSilEbm9dRUQHMmmVaisu55RYzETPGVu7V1VK/RJHoocRE4LrrTEtSR+fOwBVXeKNdmBeoqZHM\nahPdl5qjXz+zKe5eo7wc6NPHtBSX06uXmQhBI8r9mmsklEvDuIQ1a8QM4qVCXUSy7Tfl6fcalgL1\nWqGunBypUqnIYnHnTm+ZNwGp4mmiqbkxdTJqlGaqWlRWSqVBrzFqFFBVZVoKb1Ba6s3PaMQIre1u\nceCA1GVKSjItyeUMH27GdGZMuffrpx1/LDZvlvBQrzFggPlWYV5h/Xr5znqNrCzZ+SmSPeyVHIRw\n+vSRXUV1dYun2oox5T55spYsBSTFf+tW2bp5jREjZMVqIozLa2zdCkyZYlqKhljKTMsQePcz6tBB\n/IxuR8wYU+4ZGVr6FwA++ww4fdpcc47mSEsDLlyQ4kfxzt693ihGVZ82bWRHof4rqQbphaJujZGa\nCnz0kbtzGlPuKSmiNKxeh/HKxo1Ax47eSboIx4rgWb/etCRmOXZMvqcmW+s1R//+WoYAkDwEr5Qd\nqE9qqvv1940p9yuukNVqvJtmtm3zXlxuOLfeCpSUmJbCLNu2if/hqqtMS9I4U6dqOORnn8lx+HCz\ncjTFjBni8HUTo8F3vXtLpEg8s2+fJKJ4laQk/YwqKuS76lX69wd27DAthVm2bgVuuslcQ+yWyMiQ\napVultE2qtyzs6VLeTxTUOC9uNxwRozQWPcVK8x39WmO3Fy5AV24YFoSc2zY4K26P/Xp2lWObi6U\njCr3MWO0DEFVlTTH8CojR4qjKp4bd1RVme/H2Rw9eohj1WovF4/s3u2dSpBNkZsrJj63MKrcBw+W\nFUe8htpZNrju3c3K0RxW4aN4vQkzSwkGL0YzhZOWFt85CWvWeDOaKZzkZHc/I6PK3VJq8RoSWVws\nSqNNG9OSNA2ROKnitf6+tRr2Wr2S+uTlxW/j+ZoaWSR6eXcFSL8GN+vvG69mkpUVvw67AwckCsPr\npKYCBw+alsIM5eXeXxECImO8fkaffipHr9+A09OB/fvdm8+4cu/XL36dqosX+0O5p6e7H6PrFVat\n8mbZgfoMHQq8/bZpKcywbh1www3ejZSxyMwU5f7FF+7MF7VyJ6K5RLSTiEqJ6FUiak9EXYiogIgq\niWg5EV3T0jiTJ8dvw+x9+4Bp00xL0TJTprgfo+sVKiq8mdJen2HDxDxx8aJpSdyntFTyMbzONdfI\nTcitImJRKXci6gPgEQBDmHkQgDYAZgN4AkABM6cCWBF63iwDBsRnjG5trShMLxY6qk9GhrTci0fF\nsWeP1OP2OldeCVx9dXxWWj1wwNu5IuH07y8LBjeIduX+GYCLAK4kokQAVwI4BGAWgPmhc+YDuL2l\ngYYMEVvhmTNRSuJTrN2KFY3iZTp1ki1vvDXuOH9ekmO8mtJen7S0+HSqFhZKXXs/MGiQ5La4QVTK\nnZmPA/gPAB9BlPpJZi4A0I2Zj4ROOwKgW0tjXXutdP3ZsycaSfzL9u3e9+6HM2FC/O2wDhwA2rf3\ndnZqOKNHx1/IKrOYN0eNMi1J6xg71j1dlxjNRUSUDOB7APoAOAXgdSL6avg5zMxE1Gjqy7x58758\nnJ+fj9TUfBQVea+FmZOUlvpHaQAia7yt3IuK/OHwtujTR4pnxROWL+iGG8zK0VoyM1u/uyosLERh\nYWHUc0Wl3AEMA7COmf8OAET0FoBRAA4TUXdmPkxEPQAcbezicOUOyIqjuBj4xjeilMaHFBUBt91m\nWorWM3o08Je/mJbCXYqLvdl9qSlGjAB++lPTUrhLcbEsCr2cKxJOZqY0nT91SiwWzZGfn4/8sPT1\np59+OqK5orW5lwMYSURXEBEBmAygDMASAHNC58wB0KoAuuTk+Cv9u3+/d0vINkZGRvy1c/v4Y3GA\n+YWcHOD4cVEe8cKBA/76P2rbVgqcuRExE63NfRuAPwEoAmBt1n8P4DkAU4ioEsDE0PMWycqKr+3k\n+fNiG/V6Sns4GRnSbMCtGF0v8O67/jIVtm8vR7c7/phkxQpvtqhsjn793CnGF3WcOzP/OzNnMvMg\nZp7DzBeZ+TgzT2bmVGaeyswnWzPW0KGy2oiXqna7d8uWzKoU5wfcjtE1zaVLciPLzTUtSWTMnBlf\n9ff37PF24b3GcCu3x3iGKiCdiDp3jp+GA+Xl/lttACKzWzG6ptm9WxrKtGQX9Ro9e8ZXwllFhb/M\nMoDkTbhh4vSEcgekfkm8tHP74ANxrPiNzExg9WrTUrjDhg1ib/d6Snt9Bg2SuO94wKrTcuONRsWI\nmKFDPW6WsZsxY+KngNjevf6Jyw1n5Mj4yUeoqADGjTMtReTEU4+ErVul7ILfbsBWU5HPP3d2Hs8o\n9z594idJprjYn2aZAQPix1m3Y4c/yg7Up39/aTwfD47vHTv8lStiQSTlzjdvdnYezyj33Nz4UBzn\nzgFHjvgnXTqcrCzg5Eng9GnTkjhPcbHEjfuNTp2kpEVpqWlJnGfTJn/ugAHZBTvdlckzyj0nBzhx\nIvgxugcOyD/gtdealiRyOnYUxRF00wwzcPiwf2rK1CcrS1oDBp2PPvKfM9WiTx8pxucknlHuVoxu\n0Dv+rF4N9O1rWoroSU4OfsNsy/fTqZNZOaIlHj6jmhpZ+Xq5cXlzpKQ438fCM8odkBjdoG8nd+zw\nR33wppg0Kfghq1u3+ne7D0jcd9BDVvfvl5IDfouUsRg92vn2op5S7j16OL9VMc3BgxKL7Fd69ZLt\ncJDZt8/7LduaIzU1+JFnu3b5oxdCU6SnO++/8pRyT02VtmZBZs0asYn6lZwcYNky01I4y6pV/rXl\nAiL70aNSnCqorF7tr4qd9WnfXn6cbJjtKeU+blywHUHMwLFj0qDErwwbJr9HkB3fVVX+jHG36NRJ\nilMFuX1lVZXURvcz06Y5a4b2lHJPSwOqq4Pbzq2iQmJc/ZbSHk5iorRzC2pOQm2t2EL9vOUHxKka\nZP/V9u3yO/qZnj2d9Y14Srlfcw3Qrl1wHXZFRRJe57eMuvoMGhTcnARr53j99WbliJXc3OC23Lt4\nUcJx/ZgrEo7Tn5GnlDsgyi+onv59++pSj/1MZmZdXY+gsWuXv81mFmlpUo8+iBw65O9IGYusLGdz\nRjyn3JOTgbVrTUvhDGvW+LPsQH1SU4MbR712rf+3+0Cwi7wVFUlNdL+TkiKlIk6ccGZ8zyn38eOD\n6wiqqJDCTn4nLy+4xanKyvxXH7wxBg4Ezp6VxjBBY8cOfzWXb4qOHSW02Cl95znlnpISzIgZZokP\n91Nnn6YYNEjS84MYMbN3bzBW7laPhCDGux88CCQlmZbCHvr0ca7+vueU+6BBYs8NWlcm6+7sx5oy\n9enYUY5OFz5ym9paaaTi15T2cIjEdPHhh6YlsZ/33/dXi8rmSE52rv6+55R7ly7SASdoWZDbt4vJ\nKShMnRo85f7xx0BCAtCtm2lJ7GHSpOC1RWSWcOkgmGUAMQE6ZanwnHIHpCb11q2mpbCXffukvEJQ\n6NkzeFv+rVuD4fC2SEoKXuSZZcK44QazcthF//6y8HMCTyr3YcOCF6O7fr2/yw7UZ/jw4MW6b9gg\n372gEMT/oy1bpLxCmzamJbGHQYMka92J5iqeVO6ZmbL1ChL79gVLuaelBc90dvCg/zNTwxk2TIpT\n1dSYlsQ+qqqC4ROxuOoqMUU7USHSs8o9SAXEamslfCtIyj0zU8wyQSoVUVgYLOXerp34EHbuNC2J\nfaxfH4wY93BSUpxxfEet3InoGiJ6g4h2EVEZEY0goi5EVEBElUS0nIiuiWbsYcOkql1QFMf+/RK9\n4PeMunCuvx7o0CE48e41NbJyHz7ctCT2kpcXLP9VZaX/C4bVJz/fGbt7LCv3/wawlJnTAQwGUA7g\nCQAFzJwKYEXoecRcd52Uw3Qq/tNtysuDUXagPtbqPQhYkTJBugEDssoNkvls795gOb0BSWRywgwd\nlXInos4AxjLzSwDAzJeY+RSAWQDmh06bD+D26MaXXzgoMbqFhcFIjKlP//7BMZ+VlEiZXL8XdatP\nWhpQUGBaCns4fFgazPfqZVoSe8nKAlautH/caFfufQF8SkQvE9EWIvoDEXUE0I2Zj4TOOQIg6ojh\n6dODE8YxpImeAAAbFklEQVRVVSUxx0Fj4sTgZBPv3AlMmGBaCvsZP16c+UGgpESiSxITTUtiL1lZ\nwJkz9ju+o/0zJQIYAuAxZt5MRP+FeiYYZmYi4sYunjdv3peP8/Pzkd9IMY8bbghOAkZZGfDQQ6al\nsJ9+/YLjrNuzJ1h5CBbp6eJLuHTJ/0qxoiJ4q3ZAMr47dBA9EV6epLCwEIUxpK8Sc6P6t/mLiLoD\nWM/MfUPPxwCYC6AfgAnMfJiIegBYxcxp9a7l1sy5eDHwve8530TWaWprJSa3ulq2/UHi00/lJnzx\nov8VR3o68MwzwN13m5bEftq0kVWv31P2771XPqennzYtif2MHAk88gjw8MNNn0NEYOZWGw6jMssw\n82EAB4koNfTSZAA7ASwBMCf02hwAi6IZH5BC9kHYTh47JsegKXZAImaIxBbqdyoqghcpYzFyZDAq\nre7fH6xw4nBycuxfyMYSLfNPAF4hom2QaJlnATwHYAoRVQKYGHoeFVZ6sZPF7N1g/fpgbiUt+vf3\nv+O7ulpqlgQtUsaiXz9g0ybTUsTO5s3+3300RXKy/dnEUSt3Zt7GzMOZOYuZ72TmU8x8nJknM3Mq\nM09l5pNRC5YgXZmc7A7uBiUlwagP3hTjx/s/jrqkREJV27Y1LYkzjB3r/5W7tTsMYtQZAIwebX97\nUU9mqFr07+//GN1Dh4K9cu/dG/jkE9NSxMb+/cGLnQ6nd2//t9wrK5PPKGihqhaDB8sNzM6IGU8r\n99RUYPly01LExrvvBqNBR1NkZQFLlpiWIjYKCuS7FlQGD5YMSD9nfG/cCPTta1oK5+jUSY52ltH2\ntHKfMMHfTlVmWbkHpfZ0Y4wcCRw/LlFBfmXv3mDGuFv06CGhdn5uah7EsgP1mTYNKC21bzxPK/f0\ndKldEkW0pic4eFCO3bublcNJrrtO/CN+DlnduRMYMMC0FM6SkiLF6/xKVZX0EAgy3bvba4b2tHK3\nlKJfI2aKisRvEJTa042RkCA3Yb9GYxw9Ksfevc3K4TQ5Of6NamIG1q4NVq39xsjMtPcz8rRyByRi\nxm4vsltUVAAjRpiWwnlyc/1bHbKsTCIwguqos8jK8m8hvs8/l2Nmplk5nGbYMHvLeXheuffu7d/t\n5JYt0t086PTt69+Q1aKi4NUHb4z0dGDdOtNSRMfGjXUJc0Fm0CCxUtgVMeN55Z6bK3HIfmT79mA7\nUy1Gj/Zvs+ySEmDMGNNSOM+QIeLcv3DBtCSRs2ULMG6caSmcp2tXabBiVxltzyv35OQ6x6TfqKwM\nbkZdONaW34+O7+pq8YsEnRtukB4JfvxfOnQoPnZXgKze40a5Dxsm2zK/KQ4r7CyoKe3hdO0qRz+W\naF69WpyNQYdIok386FRdujT49naLfv3s65HgeeVu2az9lgVZXCwmpaDbCS3GjfOf3d0q6paW1vx5\nQWHmTP/5r5hltxEPpjMAmDzZvuAEzyt3QGJ0negx6CR79gBJSaalcI+ePf0X6759uzjs4+UGfOON\n/ktkOnYMOH8+2CU8wunb174+Fr5Q7oMH+287uWZNcMuTNkZWlvzOfmLdumCXhqjPkCHABx+YliIy\niosl3yWoRd3qk50ti6Rz52IfyxfKfehQ/5UhqKqKjxh3ixEj/BfrvndvcGu4N8bIkZK05Sf/VVlZ\n8MsOhHP99cCVV9qTqeoL5Z6aKrWc/QKzbK0GDjQtiXtkZsoN2O4+kE5SXBwfkTIWV10lRz8lBW7f\nHj8mGYvUVAkiiRVfKPdhwyQ8yC+KI54iZSy6dpWts18iZmprxbkY9JT2cIgkJ6GoyLQkraekBBg1\nyrQU7pKXJwuPWPGFcrfu3FYdEK9TURFftlyLwYP9Y5qxKlnG08odkFWhn2Ldd++Oj1yRcPr2tSc6\n0BfKnUhWwX/7m2lJWsfKlfGTdBFOcrL87n5g1SqgSxcpfBZPDBjgnx4Jhw8DZ8/GRwmPcLKygMWL\nYx/HN1/tO+/0TzhkRYXEq8Ybkyb5Z+W+bRtwzz2mpXCfsWP9Ew65ZYv4cuIlUsZi+HCJljl/PrZx\nfKPce/b0T8u9PXvib7UByG7FrtRpp/noo/jyiVgMHChmGT/4r/bsCXb3paa4+mr5ibVxh2+Ue04O\nsGKFaSla5uJFaf4QDynt9cnKkn9IO2J0nWblSokpjjc6d5ajH4rxFRTEV8SZBZH83uvXxzaOb5T7\nyJHA3//u/Rjd6mogMRG46SbTkriPFaPr9UxVZmkYPXq0aUnMMHWqP5R7ZWWw2x82R15e7CZO3yh3\nv8ToFhUFu9lyS6Snez+b2Ors1aWLWTlM4YceCczxG3UGiFk3Vh9jTMqdiNoQUQkRLQk970JEBURU\nSUTLieia2MQLn0viXb3ecGDduviLyw0nP9/7cdRFRZKKH2+RMhZ+iHW3MtJ79DArhylGjIi9EF+s\nX+/HAZQBsIwlTwAoYOZUACtCz21j8GDvlyH46KP4KU/aGP37S/1tL7N/v+ww4hUrm9jLlJfH76od\nEP/V55/HFjETtXInop4AZgL4PwBWXb1ZAOaHHs8HcHv0ojUkM9P7se5Ll8anM9UiOxt45x3TUjTP\nu+9KvHe8kpYmSTKnTpmWpGneey/+EszCSUyUn1iK8cWycv9PAD8AUBv2WjdmPhJ6fARAtxjGb0Be\nnrdXHBcuSKRIPKW018e6sZ0+bVaO5ti7F5gyxbQU5rjqKnH4ezlvpLwcuPlm01KY5e67YzPNJEZz\nERHdAuAoM5cQUX5j5zAzE1GjsS3z5s378nF+fj7y8xsdogHp6VLf+dw5oEOHSKV2nvJy+cfp2NG0\nJOZo3x7o1s27vUkvXRKzUTybzgBZve/c6d2Ki7t3x2eWdzi1tYV4441CnDkT3fXEUcQWEtHPAXwN\nwCUAHQBcDeAtAMMB5DPzYSLqAWAVM6fVu5ajmdMiMVFMM628H7jKb34D/PGP/utIZDeTJ8vPE7Z6\nXOxhwwZxeHs9pNZp/uVf5Ca3YIFpSRpy9qyE1B47Blx3nWlpzPGXvwBPPlmXUUxEYOZWt5aJyizD\nzD9i5iRm7gtgNoCVzPw1AIsBzAmdNgfAomjGb47bbgO2brV7VHsoLwemTzcthXnGjPFudciSEuCW\nW0xLYZ4xY7ybTVxZKclW8azYASnnEUvjebuCwazpnwMwhYgqAUwMPbeVpCT72lDZzY4dEkMc73i5\n/v6uXVLKIt4ZNMi7O8yNG+Onr21z3HCDHA8ciO76mJU7M3/AzLNCj48z82RmTmXmqcx8Mtbx6zNy\nJLB2rd2jxg6zxLjn5pqWxDyjRok914v1S9aule9QvJOcLEcvlv/dtMm7vgA3adNGfEPRliHwXRrH\nyJHezFI9cUKUWbzVnm4Mq2jap58aFaNRysvjq/1hUxBJgIIXd8HV1fEdqhrOkCF1GdWR4jvlnpQk\nq2SvrThWrZLaKm3amJbEPERi+vBaobcjR8RZF+9RGBb9+wPvv29aioa8/770TVbEPLVqVXTX+k65\nt2kj2VubNpmW5HK2bhVnryLMmuW9OOqiIvlnadfOtCTeYMYM731G1m4vHit2NsbYsdHvrnyn3AFx\n2HmtKUR1tTrqwklK8t7uqqJCt/vhZGSIg9lLlJSIP4BaHfAXbLKzJWT1woXIr/Wlch88WNL8vcSi\nRbraCCcnB1i40LQUl7NsWXzXK6lPdrYsSo4fNy1JHcuXa4JZOFY13I0bI7/Wl8p92jRvOYJqaoCT\nJ+O39nRjjB8vmcQXL5qWpI7ycvnuKELnzhK666UABf2MGnLHHdFV8fSlch8wQGxzn31mWhJh61ax\n41p3WUXKQ1x1lXd8I2fPyipVV4WX069f7O3c7ERj3BvSu3d0n5EvlfvVVwNdu3onUWb1ailqpnbC\ny8nLi62qnZ1s2SI1f6691rQk3iI31zuf0ZkzUnIgngvvNcaYMaJjIsWXyh2QRBmvbCf37o3vMr9N\nkZ3tnSqeO3Z4s5CZaXJyvNMWsapKTEVXX21aEm+RlxddrLtvlfuAAd6p7b50qSYvNYaXaruvXBnf\n7Q+bIjdXTCG1tS2f6zTvvKPRTI3RLcrC6b5V7pMne6MP5KVLsvIZN860JN5jzBgJ4/KCU3X79viu\n4d4UffvK0QuF3kpKgNttbe8TDIiiq4LrW+U+dKgoVdOlWw8elD9+r15m5fAiPXqIo9kL2/7ycjWd\nNcXw4d4oIrZ7t67cmyIlJfJrfKvcu3aVY0mJWTnee0+82Vp2oCEJCRKNsWyZWTmsRJ2bbjIrh1cZ\nPNj8Z3TuHLBtm9xolIZEYxnwrXIHpHZ6tBXT7GLrVmD2bLMyeJl77zWf4v7hh8DEiRrN1BQzZpjP\nG9m9WxypSUlm5fAqDzwQ+TW+Vu7JyeZX7qWldeVTlYakpJhvrlJSUmdbVhoycCBQXGxWhqIiNck0\nRzQLE18r9/x8oLDQ3Pw1NbJzGDXKnAxeZ+RIUa7nzpmTobBQs4ebw4oiMlmvqaAAGD3a3PxBxNfK\nfcwYif805VQ9elSOGRlm5vcDyclA27Z1fSDdhlnyITTGvWmIJCQymhR3uygvV+VuN75W7lYbKlNb\nymXLZLuvttymIZJt/8qVZua30rbVmdo8aWnABx+Ymfv8edndaYcse/G1ck9IEGeQKdPMunUal9sa\npk0z5/hevVpMMomJZub3C1OmRFd50A527gQ6ddJwYrvxtXIHpFVYVZWZuSsrtRBVa8jMNGfP1c+o\ndeTmmnN879wpDXgUe/G9ch89Gpg/3/15L1yQgktqy22ZvDxZFZ454/7cf/6zbvdbQ//+cty50/25\n33xT/VZO4HvlPm2aRGKcP+/uvJWVwBVXaPhWa+jbF+jSxf1CbxcuSJ39GTPcndePJCQAU6dGV30w\nVsrKgDvvdH/eoON75d6xo1SS27DB3XnXrxdHodI6MjLc/4y2bJEb8DXXuDuvX+nXz/2EswsXxGSn\npSHsJyrlTkRJRLSKiHYS0Q4i+m7o9S5EVEBElUS0nIgc/7ciEtPI8uVOz3Q5772nxcIiYexY6Wrv\nJlbsdILvlzDuMGGCmEjcZM0aKd0RbeVDpWmi/dpfBPB9Zs4EMBLAd4goHcATAAqYORXAitBzxxk7\n1v2qdmVl0kpOaR35+e7bc3ft0s8oEm6+WTqcXbrk3pwbN0obOcV+olLuzHyYmbeGHn8BYBeAmwDM\nAmC5N+cDcCVQcPhw4O233ZhJOH5cki60Y0zrycmRxh2HD7s355IlUj1UaR0dOwLt2wOrVrk359/+\nptFMThHzhpWI+gDIAbARQDdmPhJ66wgAVzZbeXmy2nBLcWzcCPTsKSVtldZx/fUSkeFWvPuxY8AX\nX6jpLFJuv929Jjg1NeKHmT7dnfnijZhSO4ioE4A3ATzOzJ9TWKomMzMRNVoYYN68eV8+zs/PR340\nlejDaN9eClRt3gzcemtMQ7WKXbt0RRgNOTnumc+Ki4E+fSQ5Rmk9OTnuOb4PH5bG5epMbZzCwkIU\nxpChSRxlYRYiagvgHQDLmPm/Qq+VA8hn5sNE1APAKmZOq3cdRztnc9xzjzhXX3vN9qEbkJ4OfOUr\nwE9+4vxcQeKXvwReeMGdvqpf/7qEQS5e7PxcQWLzZklocqNe0+9+B/zsZ+6a6vwMEYGZW13sJNpo\nGQLwIoAyS7GHWAxgTujxHACLohk/Gr72tbo6Ik5SUyMZsffc4/xcQeOuu6SAmBtt97ZtEwWvRIbl\nRzpwwPm51q8H/uEfnJ8nXonW5p4H4KsAJhBRSehnOoDnAEwhokoAE0PPXSE3V5ycFy44O095udj3\ntT545CQlSdib0zfhmhqJ187NdXaeIEIknZncCFvdsEGdqU4SbbTMWmZOYOZsZs4J/bzHzMeZeTIz\npzLzVGY+abfATdG9uygOpz39CxcCQ4aInV+JjLZtgREjnI+lXrtWjlqIKjqmTpXvuZMcPSq9dTVU\n1TkCld5x991SqdFJtmzRVOlYuOMO5wtUrVmjsdOxMHOmlOB10u6+ebPsfq2y3Yr9BEq5Dx0KvPWW\ns3MsXKjFwmJh3Dhg6VJn53j7bY3AiIWsLODIEWmE4xRvv62VIJ0mUMr99tuBHTuAzz93Zvy9e+Wo\nyj16rO72u3Y5M/6ZM9JRSHdX0dOliyyUnLS7L18O3Hefc+MrAVPuycnSQd0pxfHhh/Klb9PGmfHj\nASLpOeuU+ayiQoqFpaW1fK7SNHl5zjm+L1yQaBxNXnKWQCn3hARg0CDgpZecGf8//kNrg9vB6NES\n8+4E8+dLBUq9AcfG1KnA//t/zoxtOdS1WqezBEq5AxI368Sq8NIl2RF8+9v2jx1vPPKIlHl1Imx1\n7Vrg0UftHzfemDlTjh99ZP/Y778PfP/79o+rXE7glPv48bKdPHvW3nHLyiT5JiXF3nHjkb59ZZe1\nbZu94166JGUHYqxmoaAu3v3dd+0fe9WqOt+L4hyBU+5JSUC7dvbH6b7yimTvdehg77jxSLt2Yt56\n8UV7x12yRI79+tk7brwyY4b9n9Hu3bIbmDrV3nGVhgROuQPAt74FrFhh75jr1mk6u5088oj95rPl\ny+WzV+zh61+XnZCd9d3/9je5sV93nX1jKo0TSOU+aZK9TtWTJ8WWO3GifWPGO+PGifns6FH7xnzx\nRTXJ2ElyshzXrLFvzAULtCyEWwRSuVtlf+3qB7lkibQB0w7t9tGnD9C7N7DIptJy5eXiE9H4dvto\n316yvufPb/nc1nDypNwo5sxp+VwldgKp3Nu0kX6Qdplm1q2TBCnFXmbNsq92+IoVEputNX/s5Y47\n7PuMSksl/HHwYHvGU5onkModkASJH/wg9nEuXAD+939VuTvB7bcDL78sWaWx8sMfAlOmxD6OcjmT\nJ0timB0K/qc/lcJxiTG1CFJaS9TNOqKe0KFmHfU5fVq68Bw4EFt1wPfflzrkX3xhn2xKHdddJ/6R\n226LfozqaomSOn4cuPZa+2RThLvukgikWBLPzp2TVotLl0pDeyVyXGnW4Qc6dgQGDgRefz22cd56\nC5g2zR6ZlIZMnRq73X3RIiA1VTMenWLsWIlEioVt2yT3RIuFuUdgV+4A8PzzwNNPR7/tP35cVpaL\nFsW2slSa5r33JJ76yJHoy7926QJ897tAWGtexUY++kic3+vXR19+4+abZTcdQ0vQuCfSlXuglfv5\n85J09PHHwI03Rn79woXAP/4jcOiQZFQq9lNbKxmrzz8PzJ4d+fVHj0ok0xdfyG5NcYbbbpPs7F/9\nKvJrz5yRRdLy5WqSiQU1y4TRvr2EL/7iF9Fd/9vfikNJFbtzJCSII/Q3v4nu+l/+UuzBqtid5c47\npXBeNLz5piy01CTjLoFeuQPAq68C3/iGrL4jyYorLZWQrc2b65oGK86wfbv84xcXSwvD1nLqFNCj\nB/DCC8CDDzomngLpypSQIIo60lyCAQOAW26J/uagCLpyr8esWVLfu6gosuvefVeKG2VnOyOXUsfA\ngVLj/Z13IrtuyxYpcKWJS85DJKUd/vrXyK47cQKorAT++Z+dkUtpmsAr906dgHvuiawxwKlTwNy5\nwEMPaUyuGyQkAN/8JvDUU8CxY62/buJEiZW/+mrnZFPq+NrXJPosknIEDzwgPpGbbnJOLqVxAm+W\nAYCaGlHS77wjXvuW+NnPJHGputp52ZQ6kpOB+++Xv39LFBRIGOX581JlUnGH++6TNpbvvNOyL2rn\nTjG3rV4tDVqU2DBuliGi6URUTkS7ieiHdo8fDW3aAA8/LBlyreGZZyTjUXGXuXOBZ59t3bnPPCOr\nQlXs7vLoo8CyZcAnn7R87p/+BGRmarkBYzCzbT8A2gCoAtAHQFsAWwGk1zuHTVBVxZyYyDx3bvPn\nzZ7N3L4984UL7sgVK6tWrTItgm3U1DBfeSXznXc2f95TTzG3bctcVma/DEH6ezrF8OHMKSnM5883\nfc6rrzJ37Mg8d+4q1+QKOiHd2Wp9bPfKPRdAFTPvZ+aLAP4KwBPpP8nJUm70vfeadq5+8AGwciWw\naRPQtq278kVLYYCyQhISJGKmsFC69TTGli2Swv7HPwLp6fbLEKS/p1OsWCGmmTfeaLxV4u7dktn9\n+ONA27aFrsunCHYr95sAHAx7Xh16zRPk5Uno3IwZDd87cUJsuOPHA2lp7sumCP37y+cwc6Zkrdbn\n1lslI1WTYcxx1VUSbPD44407Vx97DDh4UD4rarWFWLEbu2NB3PWURkiPHsDixRIaadV8tzhzRmqM\nv/aaEdGUEImJssMaNEgyVjt1uvz9o0flM1Rbu1mefRbYu1d8Uz16XP7exo2y88rJkZ2yYgZbo2WI\naCSAecw8PfR8LoBaZn4+7BxP3wAURVG8CpuqLUNEiQAqAEwCcAjAJgD3M/Mu2yZRFEVRWsRWswwz\nXyKixwC8D4mceVEVu6Ioivu4nsSkKIqiOI9r5QeI6B4i2klENUQ0pN57c0NJT+VENNUtmYICEc0j\nomoiKgn9RFBsQQG8mXznZ4hoPxFtD30fN5mWx28Q0UtEdISISsNe60JEBURUSUTLiajZ9jRu1pYp\nBXAHgNXhLxJRBoD7AGQAmA7gBSIKfM0bm2EAv2bmnNCPxihEABG1AfA7yPcvA8D9RORAFH1cwQDy\nQ9/HXNPC+JCXId/HcJ4AUMDMqQBWhJ43iWtKlJnLmbmykbduA7CAmS8y835Ihqt+GSJHI4qjx7PJ\ndz5Hv5NRwsxrAJyo9/IsAPNDj+cDuL25MbywQr4Rkuxk4anEJx/xT0S0jYhebGm7pjTA08l3PoUB\n/I2IiojoEdPCBIRuzGyl9h0B0K25k22NliGiAgDdG3nrR8y8JIKh1Mtbj2b+tj8G8D8ArLJozwD4\nDwAPuyRaENDvm/3kMfMnRHQ9gAIiKg+tRhUbYGZuKWfI7lDIKVFc9jGApLDnPUOvKWG09m9LRP8H\nIJIbqdLwO5iEy3eTSoQw8yeh46dEtBBi+lLlHhtHiKg7Mx8moh4AjjZ3simzTLgtbjGA2UTUjoj6\nAkiBJD8prST0QVvcAXFeK62nCEAKEfUhonYQB/9iwzL5FiK6koiuCj3uCGAq9DtpB4sBzAk9ngNg\nUXMnu9ZniIjuAPAbAF0BvEtEJcw8g5nLiOg1AGUALgF4lDX4PlKeJ6JsiHlhH4BvG5bHV2jyne10\nA7CQpGpYIoBXmHm5WZH8BREtADAeQFciOgjg3wA8B+A1InoYwH4A9zY7hupRRVGU4OGFaBlFURTF\nZlS5K4qiBBBV7oqiKAFElbuiKEoAUeWuKIoSQFS5K4qiBBBV7oqiKAFElbuiKEoA+f+fhI8+bU5T\nVgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nS+U+daq3HEHV1cCJE/Fbe7ohxo2TTOILF0xLUktZmXx3FKFjRwnd9VKAgn5G9bn11uiqePpSuffr\nJ7a5Tz4xLYmwbZvYca27rCLlIa64wju+kTNnZJWqq8JL6dMn9nZudqIx7vXp2TO6z8iXyv3KK4HO\nnb2TKLNmjRQ1UzvhpeTmxlbVzk62bpWaP1dfbVoSb5GT453P6PRpKTkQz4X3GmL0aNExkeJL5Q5I\nooxXtpP79sV3md/GGDTIO1U8d+70ZiEz02Rne6ctYmWlmIquvNK0JN4iNze6WHffKvd+/bxT233p\nUk1eaggv1XZftSq+2x82Rk6OmEJqapo/12mWLNFopoboEmXhdN8q90mTvNEH8uJFWfmMHWtaEu8x\nerSEcXnBqbpjR3zXcG+M3r3l0QuF3oqLgVtsbe8TDIiiq4LrW+U+ZIgoVdOlWw8dkj9+jx5m5fAi\n3bqJo9kL2/6yMjWdNcawYd4oIrZnj67cGyMlJfJrfKvcO3eWx+Jis3IsXy7ebC07UJ+EBInGWLbM\nrBxWos4NN5iVw6sMHGj+Mzp7Fti+XW40Sn2isQz4VrkDUjs92oppdrFtGzB7tlkZvMydd5pPcX/3\nXWDCBI1maozp083njezZI47UpCSzcniVe+6J/BpfK/fkZPMr95KS2vKpSn1SUsw3VykurrUtK/Xp\n3x8oKjIrQ2GhmmSaIpqFia+Ve14eUFBgbv7qatk5jBxpTgavM2KEKNezZ83JUFCg2cNNYUURmazX\nlJ8PjBplbv4g4mvlPnq0xH+acqoePSqPGRlm5vcDyclA69a1fSDdhlnyITTGvXGIJCQymhR3uygr\nU+VuN75W7lYbKlNbymXLZLuvttzGIZJt/6pVZua30rbVmdo0aWnAO++YmfvcOdndaYcse/G1ck9I\nEGeQKdPM+vUal9sSpk415/hes0ZMMomJZub3C5MnR1d50A527QI6dNBwYrvxtXIHpFVYZaWZuSsq\ntBBVS8jMNGfP1c+oZeTkmHN879olDXgUe/G9ch81Cpg/3/15z5+Xgktqy22e3FxZFZ4+7f7cf/+7\nbvdbQt++8rhrl/tzv/aa+q2cwPfKfepUicQ4d87deSsqgMsu0/CtltC7N9Cpk/uF3s6flzr706e7\nO68fSUgApkyJrvpgrJSWArfd5v68Qcf3yr19e6kkt3Gju/Nu2CCOQqVlZGS4/xlt3So34Kuucnde\n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\nUQLI/wcEZmlODAnLYgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for dtype in dtypes:\n", + " x = np.load('data/sine_{}.npy'.format(dtype))\n", + " #x = np.load('data/matlab_sine_{}.npy'.format(dtype))\n", + " plt.figure()\n", + " plt.plot(t, x)\n", + " plt.title(dtype)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nARqF3UJps1JTM/ZfV/Iyk9OVkhfWdbaEkuDNc6GzxPN+3OP6pkp1Ji7aXp9SCiKWtWkCh20Us4PK\ncjlpMu1MpSnQnMkbTEBkplrqTBZsMAxoc6ureb2pO32I1g1VA5m8mJVvrs1yIAS64MliPupzmlEq\np8MJ9WoBE2nh/HJlGPfWideeebpwvb7Qe+tOM8pu71lT4vn5MxVPXia8JI533wUJHO+O7E8jL4+f\nuU4vvH37lnHcU4uaeGtNnJ+fOZ1GDrs9fYyM+yOPHz/Cmui73mTv85XHbz/Te+VHf+L7zGXh7hQR\nhWG359OnJ+7vTqCFeZl4c7+jFBpcB9MMa8p89+0bljSZdiB1pCUx55UxQNbAtCZUA0Ecgmc6X/FB\nON0/sJYFsjN6IXaNhm6wBbjzhBhRqaRrwq+JfYzcshudb4kwBks46YzD7QJVlFSvlLUQxj16+RYX\nhJfLZ/PC7oTrXM1fZrKCO449d8ejLV1z5vOnzwy7nn4YmNeV9bxyRDgGT4iOKa9cl5VaPZdZubzM\n3B8OvHtzIJfC8/OZIJ6+7xGBLtpEWxYTrYXdAcYRjS105Vb0GltsgxOQ31sE2yS4FdoNJnUOahW7\n3hSjJd4CJF4LuRN9Fdz83J+NA8CmIrUCrrdOG3EIRkEspZDFWccutvA2+w+zCLgV8tb53wy52sfW\nZertQ255F9rWl1Ut6/NLqOTVz+X31VNuGQz/qMvOfxw3S8optyfWe4evhsNtp2qMZjpSVFnTigsB\n1/U4qSCFNc1UlFBsDFbf+Nnw+kKCddEtqgmgFm0pJo09U0tbamRjn6gtXqxTLq1rN5/0jVlTS0WL\n/Q61CRmcD4R+wDmjJpWUcA5cMGVl148EL9SUWGtCFSrmD+18oLbCqsFGN9rixsYK19StdpK7urmx\nuebf4hvG7ZBqf242COZBU27/toPJtQt5g6OUXBvNyrfYvVJI1brzUgxyUlFyKfRxNMsEKcTeM0/P\nnJ9mRApeBM0Lz9eJ2A9I7OiHgbdvv2I6v1A0c3j3fUpRPj9+bQdXqVwuZ3Rd+OrhAecdaZl58+Yd\nvjM7WwmRYbBg38tl5uPHv08McH93wAdBzzYpvf/+ezoPpSZqLrZIdQZ99CEwPZ8JrjAEixc7z2fO\n55nQ7ej6jmVJJuDoBkpKLDndBFmdi1zWhPeOpJllyXhXOe16vFfO5wtFIRfl7v5kO4O1cDhFUlpZ\n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\nfPxvQ8aJPRRLRYEAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\nCz7+N4zxgZlipIQBAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for dtype in dtypes:\n", + " img = np.load('data/chelsea_{}.npy'.format(dtype))\n", + " #img = np.load('data/matlab_chelsea_{}.npy'.format(dtype))\n", + " plt.figure()\n", + " plt.imshow(img.astype('uint8'))\n", + " plt.title(dtype)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/downloaded/npy-matlab-master/tests/test_npy_roundtrip.py b/downloaded/npy-matlab-master/tests/test_npy_roundtrip.py new file mode 100644 index 0000000..8b8331e --- /dev/null +++ b/downloaded/npy-matlab-master/tests/test_npy_roundtrip.py @@ -0,0 +1,93 @@ +"""Roundtrip testing of npy-matlab. + +Write data in NPY format to be read and rewritten using npy-matlab. Then +re-read the matlab written data again and check if it is still the same. + +""" +import os +import os.path as op +from subprocess import call + +import numpy as np +import skimage.data + +# For numpy data types see: +# https://docs.scipy.org/doc/numpy-1.15.0/user/basics.types.html +SUPPORTED_DTYPES = ['uint8', 'uint16', 'uint32', 'uint64', 'int8', 'int16', + 'int32', 'int64', 'float32', 'float64'] + +# Directory of this file +test_dir = op.dirname(op.realpath(__file__)) + + +def _save_testing_data(): + """Write testing data to /tests/data. + + Returns + ------- + all_saved_data : list of tuples + all_saved_data[i][0] is the path to written data + all_saved_data[i][1] is actual data + + """ + # Make a data directory + data_dir = op.join(test_dir, 'data') + if not op.exists(data_dir): + op.mkdir(data_dir) + + # Test 1D data + n = 10000 + t = np.linspace(-10., 10., n) + sine = (1 + np.sin(t)) * 64 + + # Test 3D data + chelsea = skimage.data.chelsea() + + # Save all test data in NPY format + all_saved_data = list() + for dtype in SUPPORTED_DTYPES: + sine_tr = sine.astype(dtype) + fpath = op.join(data_dir, 'sine_{}.npy'.format(dtype)) + np.save(fpath, sine_tr) + all_saved_data.append((fpath, sine_tr)) + + chelsea_tr = chelsea.astype(dtype) + fpath = op.join(data_dir, 'chelsea_{}.npy'.format(dtype)) + np.save(fpath, chelsea_tr) + all_saved_data.append((fpath, chelsea_tr)) + + return all_saved_data + + +def test_roundtrip(): + """Test roundtrip.""" + # Write testing data from Python + all_saved_data = _save_testing_data() + + # General command structure for calling octave + # note, there is no closing `"` sign. Must be added later. + main_dir = os.sep.join(test_dir.split(os.sep)[:-1]) + func_dir = op.join(main_dir, 'npy-matlab') + cmd_octave = 'octave --no-gui --eval "' + cmd_octave += "addpath('{}');".format(func_dir) + + # Now for each data type and testing data: + # read with octave + # re-write with octave + # re-read with numpy and assert it is the same + for i in range(len(all_saved_data)): + # Get the original data + fpath = all_saved_data[i][0] + original_data = all_saved_data[i][1] + + # Read into octave and write back from octave + new_fpath = op.join(op.split(fpath)[0], 'matlab_' + op.split(fpath)[1]) + cmd_read = "new_data=readNPY('{}');".format(fpath) + cmd_write = "writeNPY(new_data, '{}');".format(new_fpath) + cmd_complete = cmd_octave + cmd_read + cmd_write + '"' + print(cmd_complete) + call(cmd_complete, shell=True) + + # Read back with numpy and assert it's the same + new_data = np.load(new_fpath) + np.testing.assert_array_equal(original_data, new_data.squeeze()) diff --git a/downloaded/npy-matlab-master/tests/test_readNPY.m b/downloaded/npy-matlab-master/tests/test_readNPY.m new file mode 100644 index 0000000..8eb3610 --- /dev/null +++ b/downloaded/npy-matlab-master/tests/test_readNPY.m @@ -0,0 +1,58 @@ + + +%% Test the readNPY function with given data +dtypes = {'uint8','uint16','uint32','uint64','int8','int16','int32','int64','float32','float64'}; +figure; +for d = 1:length(dtypes) + + data = readNPY(['data/sine_' dtypes{d} '.npy']); + + subplot(length(dtypes),1,d) + plot(data) + title(dtypes{d}); + +end + + +figure; +for d = 1:length(dtypes) + + data = readNPY(['data/chelsea_' dtypes{d} '.npy']); + data(1:3,1:3,:) + subplot(length(dtypes),1,d) + imagesc(double(data)./255) + title(dtypes{d}); + +end + + +%% test readNPY and writeNPY +dtypes = {'uint8','uint16','uint32','uint64','int8','int16','int32','int64','float32','float64'}; + +figure; +for d = 1:length(dtypes) + + data = readNPY(['data/sine_' dtypes{d} '.npy']); + writeNPY(data, ['data/matlab_sine_' dtypes{d} '.npy']); + data = readNPY(['data/matlab_sine_' dtypes{d} '.npy']); + + subplot(length(dtypes),1,d) + plot(data) + title(dtypes{d}); + +end + + +figure; +for d = 1:length(dtypes) + + data = readNPY(['data/chelsea_' dtypes{d} '.npy']); + writeNPY(data, ['data/matlab_chelsea_' dtypes{d} '.npy']); + data = readNPY(['data/matlab_chelsea_' dtypes{d} '.npy']); + + data(1:3,1:3,:) + subplot(length(dtypes),1,d) + imagesc(double(data)./255) + title(dtypes{d}); + +end \ No newline at end of file diff --git a/downloaded/redblue.m b/downloaded/redblue.m new file mode 100644 index 0000000..fb5f24e --- /dev/null +++ b/downloaded/redblue.m @@ -0,0 +1,39 @@ +function c = redblue(m) +%REDBLUE Shades of red and blue color map +% REDBLUE(M), is an M-by-3 matrix that defines a colormap. +% The colors begin with bright blue, range through shades of +% blue to white, and then through shades of red to bright red. +% REDBLUE, by itself, is the same length as the current figure's +% colormap. If no figure exists, MATLAB creates one. +% +% For example, to reset the colormap of the current figure: +% +% colormap(redblue) +% +% See also HSV, GRAY, HOT, BONE, COPPER, PINK, FLAG, +% COLORMAP, RGBPLOT. + +% Adam Auton, 9th October 2009 + +if nargin < 1, m = size(get(gcf,'colormap'),1); end + +if (mod(m,2) == 0) + % From [0 0 1] to [1 1 1], then [1 1 1] to [1 0 0]; + m1 = m*0.5; + b = (0:m1-1)'/max(m1-1,1); + g = b; + b = [b; ones(m1,1)]; + g = [g; flipud(g)]; + r = flipud(b); +else + % From [0 0 1] to [1 1 1] to [1 0 0]; + m1 = floor(m*0.5); + b = (0:m1-1)'/max(m1,1); + g = b; + b = [b; ones(m1+1,1)]; + g = [g; 1; flipud(g)]; + r = flipud(b); +end + +c = [r g b]; + diff --git a/downloaded/replay_pid20148.log b/downloaded/replay_pid20148.log new file mode 100644 index 0000000..96738db --- /dev/null +++ b/downloaded/replay_pid20148.log @@ -0,0 +1,7844 @@ +JvmtiExport can_access_local_variables 0 +JvmtiExport can_hotswap_or_post_breakpoint 0 +JvmtiExport can_post_on_exceptions 0 +# 318 ciObject found +ciMethod java/lang/Object ()V 4097 1 1018847 0 96 +ciMethod java/lang/Object clone ()Ljava/lang/Object; 2049 1 256 0 -1 +ciMethod java/lang/String ([BII)V 1441 1 1128 0 -1 +ciMethod java/lang/System arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V 93185 1 11648 0 -1 +ciMethod java/lang/Throwable getMessage ()Ljava/lang/String; 289 1 36 0 -1 +ciMethod java/lang/Thread setPriority (I)V 2057 1 1384 0 0 +ciMethod java/lang/Thread getThreadGroup ()Ljava/lang/ThreadGroup; 1025 1 128 0 -1 +ciMethod java/lang/Thread checkAccess ()V 2049 1 1490 0 -1 +ciMethod java/lang/Thread setPriority0 (I)V 2049 1 256 0 -1 +ciMethod java/lang/ThreadGroup getMaxPriority ()I 1025 1 128 0 -1 +ciMethod java/util/Hashtable ()V 3081 1 6376 0 -1 +ciMethod java/util/Hashtable put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 2057 937 5868 0 -1 +ciMethod sun/misc/Unsafe compareAndSwapObject (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z 2049 1 256 0 -1 +ciMethod java/io/InputStream ()V 2089 1 19813 0 0 +ciMethod java/io/InputStream read ()I 0 0 1 0 -1 +ciMethod java/io/InputStream read ([BII)I 0 0 1 0 -1 +ciMethod java/io/InputStream available ()I 0 0 1 0 -1 +ciMethod java/io/InputStream close ()V 0 0 1 0 -1 +ciMethod java/lang/NullPointerException ()V 0 0 3 0 -1 +ciMethod java/lang/Math max (II)I 465 1 139347 0 -1 +ciMethod java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 4097 1 5451 0 0 +ciMethod java/io/BufferedInputStream getBufIfOpen ()[B 4097 1 37153 0 64 +ciMethod java/io/BufferedInputStream (Ljava/io/InputStream;)V 4097 1 2267 0 0 +ciMethod java/io/BufferedInputStream (Ljava/io/InputStream;I)V 4097 1 2274 0 0 +ciMethod java/io/BufferedInputStream fill ()V 2273 1 4180 0 0 +ciMethod java/io/BufferedInputStream read ()I 4097 1 5641 0 960 +ciMethod java/io/BufferedInputStream read1 ([BII)I 4097 1 14490 0 0 +ciMethod java/io/BufferedInputStream read ([BII)I 3073 4417 14313 0 0 +ciMethod java/io/FilterInputStream (Ljava/io/InputStream;)V 4097 1 10998 0 0 +ciMethod java/io/FilterInputStream read ([BII)I 3425 1 5551 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 0 0 1 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl accessCheck (Ljava/lang/Object;)V 9 1 660 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl valueCheck (Ljava/lang/Object;)V 9 1 660 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 9 1 660 0 0 +ciMethod java/lang/IllegalArgumentException (Ljava/lang/String;)V 17 1 4 0 -1 +ciMethodData java/lang/Object ()V 2 1018855 orig 264 136 98 31 106 0 0 0 0 104 4 20 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 57 79 124 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethod java/util/zip/Inflater (Z)V 2049 1 1784 0 0 +ciMethod java/util/zip/Inflater ()V 825 1 471 0 0 +ciMethod java/util/zip/Inflater getRemaining ()I 2089 1 645 0 -1 +ciMethod java/util/zip/Inflater needsInput ()Z 2137 1 3648 0 -1 +ciMethod java/util/zip/Inflater needsDictionary ()Z 2137 1 3648 0 -1 +ciMethod java/util/zip/Inflater finished ()Z 2553 1 4338 0 -1 +ciMethod java/util/zip/Inflater inflate ([BII)I 4097 1 5656 0 -1 +ciMethod java/util/zip/Inflater getBytesRead ()J 3089 1 758 0 -1 +ciMethod java/util/zip/Inflater getBytesWritten ()J 3089 1 1752 0 -1 +ciMethod java/util/zip/Inflater init (Z)J 2089 1 261 0 -1 +ciMethod java/util/zip/ZStreamRef (J)V 2041 1 1784 0 0 +ciMethod java/util/zip/InflaterInputStream ensureOpen ()V 4089 1 8534 0 -1 +ciMethod java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V 3201 1 5523 0 768 +ciMethod java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;)V 825 1 471 0 0 +ciMethod java/util/zip/InflaterInputStream read ([BII)I 3089 2129 5539 0 3104 +ciMethod java/util/zip/InflaterInputStream fill ()V 2489 1 2616 0 -1 +ciMethod java/util/jar/JarVerifier update (I[BIILsun/security/util/ManifestEntryVerifier;)V 81 1 1441 0 -1 +ciMethod java/lang/ArrayIndexOutOfBoundsException ()V 0 0 1 0 -1 +ciMethod java/util/jar/JarInputStream read ([BII)I 4097 1 4140 0 0 +ciMethod java/util/zip/ZipInputStream ensureOpen ()V 4097 1 8867 0 0 +ciMethod java/util/zip/ZipInputStream read ([BII)I 4097 1 4140 0 0 +ciMethod java/util/zip/ZipInputStream readEnd (Ljava/util/zip/ZipEntry;)V 849 1 645 0 -1 +ciMethod java/util/zip/ZipInputStream readFully ([BII)V 4097 4089 4270 0 -1 +ciMethod java/io/PushbackInputStream ensureOpen ()V 4097 1 6413 0 -1 +ciMethod java/io/PushbackInputStream read ([BII)I 4097 1 5768 0 704 +ciMethod java/io/PushbackInputStream unread ([BII)V 3089 1 645 0 -1 +ciMethod java/util/zip/CRC32 update ([BII)V 1409 1 1694 0 0 +ciMethod java/util/zip/CRC32 getValue ()J 841 1 660 0 0 +ciMethod java/util/zip/CRC32 updateBytes (I[BII)I 0 0 1 0 -1 +ciMethod java/util/zip/ZipUtils get32 ([BI)J 4097 1 8932 0 -1 +ciMethod java/util/zip/ZipUtils get64 ([BI)J 0 0 1 0 -1 +ciMethodData java/io/InputStream ()V 2 19813 orig 264 136 98 31 106 0 0 0 0 232 209 27 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 1 0 0 1 99 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x4c60 oops 0 +ciMethodData java/util/zip/ZipInputStream ensureOpen ()V 2 8867 orig 264 136 98 31 106 0 0 0 0 72 40 67 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 25 5 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 6 0x40007 0x20a3 0x30 0x0 0xd0002 0x0 oops 0 +ciMethodData java/io/BufferedInputStream getBufIfOpen ()[B 2 37188 orig 264 136 98 31 106 0 0 0 0 136 2 36 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 33 122 4 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 6 0x60007 0x8f44 0x30 0x0 0xf0002 0x0 oops 0 +ciMethodData java/util/zip/InflaterInputStream read ([BII)I 2 7025 orig 264 136 98 31 106 0 0 0 0 64 14 55 104 0 0 0 0 48 4 0 0 192 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 1 0 0 9 161 0 0 57 211 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 51 0 2 0 0 0 208 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 90 0x10002 0x1421 0x50007 0x1421 0x30 0x0 0xc0002 0x0 0x110007 0x0 0x60 0x1421 0x150007 0x0 0x40 0x1421 0x1d0007 0x1421 0x30 0x0 0x240002 0x0 0x290007 0x1421 0x20 0x0 0x350005 0x0 0xc6e778b0 0x2157 0x0 0x0 0x3b0007 0x11a3 0x158 0xfb5 0x420005 0x0 0xc6e778b0 0xfb5 0x0 0x0 0x450007 0x27f 0x70 0xd36 0x4c0005 0x0 0xc6e778b0 0xd36 0x0 0x0 0x4f0007 0xd36 0x20 0x0 0x5d0005 0x0 0xc6e778b0 0xd36 0x0 0x0 0x600007 0x0 0xfffffffffffffee0 0xd36 0x640005 0x7 0x6b7a9460 0x639 0xf798b0b0 0x6f6 0x670003 0xd36 0xfffffffffffffe90 0x710005 0x0 0x0 0x0 0x0 0x0 0x7c0007 0x0 0x38 0x0 0x810003 0x0 0x18 0x860002 0x0 oops 6 28 java/util/zip/Inflater 38 java/util/zip/Inflater 48 java/util/zip/Inflater 58 java/util/zip/Inflater 68 java/util/jar/JarInputStream 70 java/util/zip/ZipFile$ZipFileInflaterInputStream +ciMethodData java/io/PushbackInputStream read ([BII)I 2 5768 orig 264 136 98 31 106 0 0 0 0 248 85 67 104 0 0 0 0 8 3 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 65 164 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 30 0 2 0 0 0 168 1 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 53 0x10002 0x1488 0x50007 0x1488 0x30 0x0 0xc0002 0x0 0x110007 0x0 0x60 0x1488 0x150007 0x0 0x40 0x1488 0x1d0007 0x1488 0x30 0x0 0x240002 0x0 0x290007 0x1488 0x20 0x0 0x3c0007 0xfc8 0x50 0x4c0 0x420007 0x25 0x20 0x49b 0x540002 0x4c0 0x6d0007 0x49b 0x88 0xfed 0x740002 0xfed 0x7a0007 0xfed 0x58 0x0 0x7f0007 0x0 0x38 0x0 0x830003 0x0 0x18 oops 0 +ciMethodData java/io/FilterInputStream (Ljava/io/InputStream;)V 2 10998 orig 264 136 98 31 106 0 0 0 0 216 15 36 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 177 71 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x28f6 oops 0 +ciMethodData java/util/jar/JarInputStream read ([BII)I 2 4140 orig 264 136 98 31 106 0 0 0 0 184 21 67 104 0 0 0 0 248 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 97 113 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 152 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 19 0x40007 0x0 0x48 0xe2c 0xb0002 0xe2c 0x100003 0xe2c 0x18 0x1a0007 0xe2c 0x50 0x0 0x2a0005 0x0 0x0 0x0 0x0 0x0 oops 0 +ciMethodData java/util/zip/ZipInputStream read ([BII)I 2 4140 orig 264 136 98 31 106 0 0 0 0 32 46 67 104 0 0 0 0 200 5 0 0 72 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 97 113 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 35 0 2 0 0 0 104 4 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 141 0x10002 0xe2c 0x50007 0x0 0x60 0xe2c 0x90007 0x0 0x40 0xe2c 0x110007 0xe2c 0x30 0x0 0x180002 0x0 0x1d0007 0xe2c 0x20 0x0 0x260007 0xa02 0x20 0x42a 0x320008 0x6 0x0 0x398 0x14 0xc8 0x27 0x40 0x500002 0x818 0x560007 0x5ee 0x48 0x22a 0x5e0002 0x22a 0x6b0003 0x22a 0x48 0x750005 0x0 0xc8198f40 0x5ee 0x0 0x0 0x800007 0xd 0x20 0x1dd 0x960007 0x0 0x20 0xd 0xa60005 0x0 0xc819ad40 0xd 0x0 0x0 0xac0007 0xd 0x30 0x0 0xb50002 0x0 0xc00005 0x0 0xc8198f40 0xd 0x0 0x0 0xd40007 0x0 0x200 0xd 0xe20005 0x0 0xc8198f40 0xd 0x0 0x0 0xe60007 0xd 0x1b0 0x0 0xf10002 0x0 0xf60005 0x0 0x0 0x0 0x0 0x0 0x1000002 0x0 0x1030005 0x0 0x0 0x0 0x0 0x0 0x1080005 0x0 0x0 0x0 0x0 0x0 0x10f0005 0x0 0x0 0x0 0x0 0x0 0x1120002 0x0 0x1150005 0x0 0x0 0x0 0x0 0x0 0x11a0005 0x0 0x0 0x0 0x0 0x0 0x11d0005 0x0 0x0 0x0 0x0 0x0 0x1200002 0x0 0x12c0002 0x0 oops 4 45 java/util/zip/CRC32 59 java/io/PushbackInputStream 71 java/util/zip/CRC32 81 java/util/zip/CRC32 +ciMethodData java/util/zip/CRC32 update ([BII)V 2 1694 orig 264 136 98 31 106 0 0 0 0 192 103 67 104 0 0 0 0 16 2 0 0 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 176 0 0 0 113 47 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 176 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 22 0x10007 0x5ee 0x30 0x0 0x80002 0x0 0xd0007 0x0 0x60 0x5ee 0x110007 0x0 0x40 0x5ee 0x190007 0x5ee 0x30 0x0 0x200002 0x0 0x2c0002 0x5ee oops 0 +ciMethodData java/util/zip/CRC32 getValue ()J 2 660 orig 264 136 98 31 106 0 0 0 0 152 106 67 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 0 0 0 89 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/util/zip/ZipInputStream readEnd (Ljava/util/zip/ZipEntry;)V 1 645 orig 264 136 98 31 106 0 0 0 0 184 52 67 104 0 0 0 0 72 10 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 106 0 0 0 217 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 60 0 2 0 0 0 248 8 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 287 0x40005 0x0 0xc6e778b0 0x21b 0x0 0x0 0x90007 0x0 0x80 0x21b 0x100004 0x0 0xc819ad40 0x21b 0x0 0x0 0x1e0005 0x0 0xc819ad40 0x21b 0x0 0x0 0x2a0007 0x1b4 0x2e8 0x67 0x310005 0x0 0xc6e778b0 0x67 0x0 0x0 0x380007 0x0 0x70 0x67 0x3f0005 0x0 0xc6e778b0 0x67 0x0 0x0 0x460007 0x67 0x140 0x0 0x510002 0x0 0x590002 0x0 0x620007 0x0 0xb8 0x0 0x700002 0x0 0x7d0002 0x0 0x870004 0x0 0x0 0x0 0x0 0x0 0x910005 0x0 0x0 0x0 0x0 0x0 0x940003 0x0 0x48 0x9d0002 0x0 0xaa0002 0x0 0xb70002 0x0 0xbd0003 0x0 0x120 0xc80002 0x67 0xd00002 0x67 0xd90007 0x67 0xb8 0x0 0xe70002 0x0 0xf40002 0x0 0xfe0004 0x0 0x0 0x0 0x0 0x0 0x1080005 0x0 0x0 0x0 0x0 0x0 0x10b0003 0x0 0x48 0x1140002 0x67 0x1210002 0x67 0x12e0002 0x67 0x13c0005 0x0 0xc6e778b0 0x21b 0x0 0x0 0x1400007 0x21b 0x190 0x0 0x14b0002 0x0 0x1500005 0x0 0x0 0x0 0x0 0x0 0x1570005 0x0 0x0 0x0 0x0 0x0 0x15c0005 0x0 0x0 0x0 0x0 0x0 0x1630005 0x0 0x0 0x0 0x0 0x0 0x1660005 0x0 0x0 0x0 0x0 0x0 0x16b0005 0x0 0x0 0x0 0x0 0x0 0x16e0005 0x0 0x0 0x0 0x0 0x0 0x1710002 0x0 0x17d0005 0x0 0xc6e778b0 0x21b 0x0 0x0 0x1810007 0x21b 0x190 0x0 0x18c0002 0x0 0x1910005 0x0 0x0 0x0 0x0 0x0 0x1980005 0x0 0x0 0x0 0x0 0x0 0x19d0005 0x0 0x0 0x0 0x0 0x0 0x1a40005 0x0 0x0 0x0 0x0 0x0 0x1a70005 0x0 0x0 0x0 0x0 0x0 0x1ac0005 0x0 0x0 0x0 0x0 0x0 0x1af0005 0x0 0x0 0x0 0x0 0x0 0x1b20002 0x0 0x1be0005 0x0 0xc8198f40 0x21b 0x0 0x0 0x1c20007 0x21b 0x1b0 0x0 0x1cd0002 0x0 0x1d20005 0x0 0x0 0x0 0x0 0x0 0x1d90002 0x0 0x1dc0005 0x0 0x0 0x0 0x0 0x0 0x1e10005 0x0 0x0 0x0 0x0 0x0 0x1e80005 0x0 0x0 0x0 0x0 0x0 0x1eb0002 0x0 0x1ee0005 0x0 0x0 0x0 0x0 0x0 0x1f30005 0x0 0x0 0x0 0x0 0x0 0x1f60005 0x0 0x0 0x0 0x0 0x0 0x1f90002 0x0 oops 8 2 java/util/zip/Inflater 12 java/io/PushbackInputStream 18 java/io/PushbackInputStream 28 java/util/zip/Inflater 38 java/util/zip/Inflater 117 java/util/zip/Inflater 173 java/util/zip/Inflater 229 java/util/zip/CRC32 +ciMethodData java/io/BufferedInputStream read1 ([BII)I 2 14497 orig 264 136 98 31 106 0 0 0 0 248 6 36 104 0 0 0 0 152 2 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 9 181 1 0 1 0 0 0 53 21 0 0 0 0 0 0 2 0 0 0 0 0 25 0 2 0 0 0 56 1 0 0 255 255 255 255 7 0 13 0 0 0 0 0 data 39 0xd0007 0x29c5 0xe0 0xcdc 0x120002 0xcdc 0x160007 0x8e5 0x80 0x3f7 0x1de007 0x3 0x60 0x3f5 0x210002 0x3f5 0x27f005 0x6 0x6b7a9460 0x3e7 0x6b7a9510 0xc 0x2c0002 0x8e8 0x3c0007 0x5b2 0x20 0x336 0x440007 0x28a4 0x38 0x6d3 0x490003 0x6d3 0x18 0x500002 0x2f77 0x5b0002 0x2f77 oops 2 18 java/util/jar/JarInputStream 20 java/io/FileInputStream +ciMethodData java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 2 5497 orig 264 136 98 31 106 0 0 0 0 224 1 36 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 155 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 6 0x60007 0x1379 0x30 0x0 0xf0002 0x0 oops 0 +ciMethodData java/io/BufferedInputStream fill ()V 2 4255 orig 264 136 98 31 106 0 0 0 0 64 5 36 104 0 0 0 0 136 3 0 0 208 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 1 0 0 25 124 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 39 0 2 0 0 0 64 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 72 0x10002 0xf83 0x90007 0x671 0x38 0x912 0x110003 0x912 0x1b0 0x1a0007 0x66e 0x198 0x3 0x210007 0x3 0x48 0x0 0x360002 0x0 0x430003 0x0 0x148 0x4c0007 0x0 0x38 0x3 0x590003 0x3 0x110 0x610007 0x0 0x30 0x0 0x6a0002 0x0 0x7a0007 0x0 0x38 0x0 0x830003 0x0 0x18 0x8f0007 0x0 0x20 0x0 0xa30002 0x0 0xac0005 0x0 0x0 0x0 0x0 0x0 0xaf0007 0x0 0x30 0x0 0xb80002 0x0 0xc70002 0xf83 0xd60005 0x7f6 0x6b7a9460 0x582 0xf798b0b0 0x20b 0xdb0007 0x338 0x20 0xc4b oops 2 64 java/util/jar/JarInputStream 66 java/util/zip/ZipFile$ZipFileInflaterInputStream +ciMethodData java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 1 680 orig 264 136 98 31 106 0 0 0 0 120 54 36 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 57 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 13 0 2 0 0 0 80 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 10 0x20002 0x2a7 0x70002 0x2a7 0x140005 0x100 0x0 0x0 0x0 0x0 oops 0 +ciMethodData java/io/BufferedInputStream read ([BII)I 2 14323 orig 264 136 98 31 106 0 0 0 0 248 7 36 104 0 0 0 0 208 2 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 40 2 0 0 153 179 1 0 137 54 0 0 101 22 0 0 106 5 0 0 2 0 0 0 1 0 23 0 2 0 0 0 112 1 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 46 0x10002 0x3673 0x130007 0x3673 0x30 0x0 0x1a0002 0x0 0x1f0007 0x3673 0x20 0x0 0x310002 0x3d44 0x380007 0x37e8 0x58 0x55c 0x3d0007 0x1db 0x38 0x381 0x420003 0x381 0x18 0x520007 0x87c 0x20 0x2f6c 0x600007 0x0 0x70 0x87c 0x650005 0x3b9 0x6b7a9460 0x476 0x6b7a9510 0x4d 0x680007 0x6d1 0x20 0x1ab 0x6e0003 0x6d1 0xffffffffffffff08 oops 2 35 java/util/jar/JarInputStream 37 java/io/FileInputStream +ciMethodData java/util/zip/Inflater (Z)V 2 1784 orig 264 136 98 31 106 0 0 0 0 104 222 54 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 193 47 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 6 0x10002 0x5f8 0x110002 0x5f8 0x140002 0x5f8 oops 0 +ciMethodData java/util/zip/ZStreamRef (J)V 2 1784 orig 264 136 98 31 106 0 0 0 0 240 248 54 104 0 0 0 0 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 0 0 0 201 47 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x5f9 oops 0 +ciMethodData java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V 2 5523 orig 264 136 98 31 106 0 0 0 0 48 11 55 104 0 0 0 0 200 1 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 144 1 0 0 25 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 10 0 2 0 0 0 144 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 18 0x20002 0x1403 0x250007 0x0 0x40 0x1403 0x290007 0x1403 0x30 0x0 0x300002 0x0 0x350007 0x1403 0x30 0x0 0x3e0002 0x0 oops 0 +ciMethodData java/io/BufferedInputStream (Ljava/io/InputStream;)V 2 2273 orig 264 136 98 31 106 0 0 0 0 32 3 36 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 9 55 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 5 0 0 0 0 0 data 2 0x50002 0x6e1 oops 0 +ciMethodData java/io/BufferedInputStream (Ljava/io/InputStream;I)V 2 2274 orig 264 136 98 31 106 0 0 0 0 200 3 36 104 0 0 0 0 112 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 17 55 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 8 0x20002 0x6e2 0xb0007 0x6e2 0x30 0x0 0x140002 0x0 oops 0 +ciMethod java/awt/Color (III)V 673 1 315 0 -1 +ciMethod java/awt/image/ColorModel getRGBdefault ()Ljava/awt/image/ColorModel; 1257 1 3226 0 0 +ciMethod java/awt/image/ColorModel (I[ILjava/awt/color/ColorSpace;ZZII)V 1625 4937 164 0 -1 +ciMethod java/awt/image/ColorModel getDefaultTransferType (I)I 1257 1 151 0 0 +ciMethod java/awt/image/DirectColorModel (IIIII)V 9 1 61 0 -1 +ciMethod java/awt/color/ColorSpace getInstance (I)Ljava/awt/color/ColorSpace; 913 1 491 0 0 +ciMethod java/awt/color/ColorSpace getType ()I 1041 1 130 0 -1 +ciMethod java/awt/color/ColorSpace getNumComponents ()I 1241 1 155 0 -1 +ciMethod java/awt/color/ICC_Profile getInstance (I)Ljava/awt/color/ICC_Profile; 9 1 1 0 -1 +ciMethod java/awt/color/ICC_ColorSpace (Ljava/awt/color/ICC_Profile;)V 9 1 1 0 -1 +ciMethod java/awt/image/IndexColorModel (II[B[B[B)V 0 0 1 0 0 +ciMethod java/awt/image/IndexColorModel (II[B[B[BI)V 0 0 1 0 0 +ciMethod java/awt/image/IndexColorModel (II[B[B[B[B)V 0 0 3 0 0 +ciMethod java/awt/image/IndexColorModel setRGBs (I[B[B[B[B)V 33 4233 3 0 0 +ciMethod java/awt/image/IndexColorModel calcRealMapSize (II)I 801 1 94 0 0 +ciMethod java/awt/image/IndexColorModel setTransparentPixel (I)V 769 1 91 0 -1 +ciMethod java/awt/image/IndexColorModel setTransparency (I)V 1457 1 174 0 0 +ciMethod java/awt/image/IndexColorModel calculatePixelMask ()V 801 1 94 0 0 +ciMethod sun/awt/image/InputStreamImageSource startProduction ()V 153 1 643 0 -1 +ciMethod sun/awt/image/InputStreamImageSource doneDecoding (Lsun/awt/image/ImageDecoder;)V 4097 1 10010 0 512 +ciMethod sun/awt/image/InputStreamImageSource latchConsumers (Lsun/awt/image/ImageDecoder;)V 4097 1 9053 0 512 +ciMethod java/awt/image/ImageConsumer setDimensions (II)V 0 0 1 0 -1 +ciMethod java/awt/image/ImageConsumer setColorModel (Ljava/awt/image/ColorModel;)V 0 0 1 0 -1 +ciMethod java/awt/image/ImageConsumer setHints (I)V 0 0 1 0 -1 +ciMethod java/awt/image/ImageConsumer setPixels (IIIILjava/awt/image/ColorModel;[III)V 0 0 1 0 -1 +ciMethod java/awt/image/ImageConsumer imageComplete (I)V 0 0 1 0 -1 +ciMethod sun/awt/image/PNGImageDecoder property (Ljava/lang/String;Ljava/lang/Object;)V 809 1 657 0 0 +ciMethod sun/awt/image/PNGImageDecoder property (Ljava/lang/String;F)V 49 1 50 0 -1 +ciMethod sun/awt/image/PNGImageDecoder pngassert (Z)V 0 0 4 0 -1 +ciMethod sun/awt/image/PNGImageDecoder handleChunk (I[BII)Z 3129 5737 2323 0 0 +ciMethod sun/awt/image/PNGImageDecoder produceImage ()V 825 372985 470 0 -1 +ciMethod sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 2177 1 6806 0 160 +ciMethod sun/awt/image/PNGImageDecoder sendPixels (IIII[BII)Z 0 0 47 0 0 +ciMethod sun/awt/image/PNGImageDecoder filterRow ([B[BIII)V 897 49249 5315 0 -1 +ciMethod sun/awt/image/PNGImageDecoder need (I)Z 2097 1 4646 0 -1 +ciMethod sun/awt/image/PNGImageDecoder getInt (I)I 3153 1 1477 0 -1 +ciMethod sun/awt/image/PNGImageDecoder getShort (I)I 0 0 10 0 -1 +ciMethod sun/awt/image/PNGImageDecoder getByte (I)I 2081 1 2710 0 -1 +ciMethod sun/awt/image/PNGImageDecoder getChunk ()Z 3097 1 2323 0 0 +ciMethod sun/awt/image/PNGImageDecoder getData ()Z 825 3305 470 0 0 +ciMethod sun/awt/image/PNGImageDecoder crc ([BII)I 3097 1 2323 0 -1 +ciMethod sun/awt/image/ImageDecoder nextConsumer (Lsun/awt/image/ImageConsumerQueue;)Lsun/awt/image/ImageConsumerQueue; 4097 1 6618 0 0 +ciMethod sun/awt/image/ImageDecoder setDimensions (II)I 1057 1057 558 0 0 +ciMethod sun/awt/image/ImageDecoder setColorModel (Ljava/awt/image/ColorModel;)I 1057 1057 558 0 0 +ciMethod sun/awt/image/ImageDecoder setHints (I)I 1057 1057 558 0 0 +ciMethod sun/awt/image/ImageDecoder headerComplete ()V 1065 1 558 0 0 +ciMethod sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[BII)I 4097 4089 1941 0 -1 +ciMethod sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[III)I 2049 2049 6662 0 2464 +ciMethod sun/awt/image/ImageDecoder imageComplete (IZ)I 1065 1065 554 0 0 +ciMethod sun/awt/image/ImageDecoder close ()V 1065 1 556 0 0 +ciMethod sun/awt/image/PNGImageDecoder$Chromaticities (IIIIIIII)V 49 1 34 0 -1 +ciMethod java/util/Calendar getTime ()Ljava/util/Date; 0 0 53 0 -1 +ciMethodData java/io/BufferedInputStream read ()I 2 5641 orig 264 136 98 31 106 0 0 0 0 0 6 36 104 0 0 0 0 128 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 73 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 11 0 2 0 0 0 96 0 0 0 255 255 255 255 7 0 8 0 0 0 0 0 data 12 0x80007 0x13ec 0x50 0x1d 0xc0002 0x1d 0x170007 0x1d 0x20 0x0 0x1d0002 0x1409 oops 0 +ciMethod java/util/GregorianCalendar (IIIIII)V 0 0 10 0 -1 +ciMethodData sun/awt/image/ImageDecoder nextConsumer (Lsun/awt/image/ImageConsumerQueue;)Lsun/awt/image/ImageConsumerQueue; 2 6952 orig 264 136 98 31 106 0 0 0 0 152 209 130 104 0 0 0 0 240 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 65 201 0 0 1 0 0 0 140 20 0 0 0 0 0 0 2 0 0 0 1 0 20 0 2 0 0 0 200 0 0 0 255 255 255 255 7 224 11 0 0 0 0 0 data 25 0xbe007 0x1928 0x20 0x1 0x130007 0xc94 0x38 0xc94 0x1a0003 0xc94 0x18 0x230007 0xc94 0x58 0xc94 0x2a0007 0x0 0x20 0xc94 0x360003 0x0 0xffffffffffffffc0 0x3b0003 0xc94 0x18 oops 0 +ciMethodData sun/awt/image/InputStreamImageSource doneDecoding (Lsun/awt/image/ImageDecoder;)V 2 10057 orig 264 136 98 31 106 0 0 0 0 40 154 129 104 0 0 0 0 160 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 73 42 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 80 0 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 10 0x50007 0x238d 0x50 0x1bc 0x110007 0x1bc 0x30 0x0 0x150002 0x0 oops 0 +ciMethodData sun/awt/image/InputStreamImageSource latchConsumers (Lsun/awt/image/ImageDecoder;)V 2 9085 orig 264 136 98 31 106 0 0 0 0 184 154 129 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 233 11 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 10 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 2 0 0 0 0 0 data 6 0x20005 0x25c 0x7f3e0fb0 0x120 0x7f3e0f00 0x1e01 oops 2 2 sun/awt/image/ByteArrayImageSource 4 sun/awt/image/URLImageSource +ciMethodData java/awt/image/ColorModel getRGBdefault ()Ljava/awt/image/ColorModel; 2 3244 orig 264 136 98 31 106 0 0 0 0 168 254 117 104 0 0 0 0 72 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 0 0 0 121 96 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 6 0x30007 0xc0f 0x30 0x0 0x150002 0x0 oops 0 +ciMethodData sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[III)I 2 6662 orig 264 136 98 31 106 0 0 0 0 104 214 130 104 0 0 0 0 80 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 49 200 0 0 49 200 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 14 0 2 0 0 0 200 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 25 0x50005 0x0 0x7f3e0f00 0x1906 0x0 0x0 0x110005 0x0 0x11cdc94e0 0x320c 0x0 0x0 0x170007 0x1906 0x68 0x1906 0x2c0005 0x0 0xc70f2780 0x1906 0x0 0x0 0x340003 0x1906 0xffffffffffffff80 oops 3 2 sun/awt/image/URLImageSource 8 sun/awt/image/PNGImageDecoder 18 sun/awt/image/ImageRepresentation +ciMethodData sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 2 6806 orig 264 136 98 31 106 0 0 0 0 8 183 130 104 0 0 0 0 8 2 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 0 0 49 204 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 136 0 0 0 255 255 255 255 5 0 16 0 0 0 0 0 data 17 0x100005 0x0 0x11cdc94e0 0x1986 0x0 0x0 0x170007 0x1986 0x20 0x0 0x230007 0x0 0x38 0x1986 0x270003 0x1986 0x18 oops 1 2 sun/awt/image/PNGImageDecoder +ciMethodData sun/awt/image/PNGImageDecoder filterRow ([B[BIII)V 2 419841 orig 264 136 98 31 106 0 0 0 0 24 186 130 104 0 0 0 0 88 5 0 0 144 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 24 0 0 49 163 0 0 169 127 50 0 97 10 0 0 78 200 2 0 2 0 0 0 8 0 57 0 2 0 0 0 240 3 0 0 255 255 255 255 8 0 4 0 0 0 0 0 data 126 0x40008 0xc 0x0 0x3e0 0x5 0x70 0xf 0x88 0x11 0xc0 0x3 0x118 0x3a 0x1e0 0x280003 0x317 0x380 0x330007 0x3a9 0x368 0x13b44 0x480003 0x13b44 0xffffffffffffffe0 0x4ce007 0xd 0x330 0x62c 0x530007 0x62c 0x310 0x245e9 0x650003 0x245e9 0xffffffffffffffe0 0x69e007 0x2 0x90 0x35 0x700007 0x35 0x38 0xcc 0x880003 0xcc 0xffffffffffffffe0 0x8f0007 0x35 0x280 0x10c2 0xb30003 0x10c2 0xffffffffffffffe0 0xbe0007 0x2 0x248 0xa0 0xd90003 0xa0 0xffffffffffffffe0 0xdde007 0x2 0x1c8 0x737 0xe40007 0x737 0x38 0x1b5a 0xf60003 0x1b5a 0xffffffffffffffe0 0xfd0007 0x734 0x1b8 0x2a0ac 0x1320007 0x23ca1 0x38 0x640b 0x13a0003 0x640b 0x18 0x1480007 0x231db 0x38 0x6ed1 0x1500003 0x6ed1 0x18 0x15e0007 0x2076c 0x38 0x9940 0x1660003 0x9940 0x18 0x1790007 0x8ab3 0x58 0x215f9 0x1800007 0x6d0 0x38 0x20f29 0x1850003 0x20f29 0x50 0x18c0007 0xc13 0x38 0x8570 0x1910003 0x8570 0x18 0x19c0003 0x2a0ac 0xfffffffffffffea8 0x1a70007 0x2 0x48 0x78 0x1bc0003 0x78 0xffffffffffffffe0 0x1c60002 0x0 oops 0 +ciMethodData java/lang/Thread setPriority (I)V 2 1438 orig 264 136 98 31 106 0 0 0 0 64 193 22 104 0 0 0 0 176 2 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 233 36 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 18 0 2 0 0 0 96 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 44 0x10005 0x7 0x6b7a3ae0 0x440 0x6b4a78e0 0x56 0x70007 0x0 0x40 0x49d 0xc0007 0x49d 0x30 0x0 0x130002 0x0 0x180005 0x7 0x6b7a3ae0 0x440 0x6b4a78e0 0x56 0x1d0007 0x0 0xb0 0x49d 0x220005 0x1 0x6b4a7970 0x49c 0x0 0x0 0x250007 0x49d 0x50 0x0 0x290005 0x0 0x0 0x0 0x0 0x0 0x340002 0x49d oops 5 2 sun/awt/image/ImageFetcher 4 java/lang/Thread 18 sun/awt/image/ImageFetcher 20 java/lang/Thread 28 java/lang/ThreadGroup +ciMethodData sun/awt/image/PNGImageDecoder getChunk ()Z 2 2418 orig 264 136 98 31 106 0 0 0 0 104 192 130 104 0 0 0 0 8 3 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 131 1 0 0 121 63 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 192 1 0 0 255 255 255 255 2 0 8 0 0 0 0 0 data 56 0x80002 0x7ef 0xb0007 0x7ef 0x20 0x0 0x160002 0x7ef 0x240002 0x7ef 0x2e0007 0x7ef 0xd0 0x0 0x3a0002 0x0 0x3f0005 0x0 0x0 0x0 0x0 0x0 0x460005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0x0 0x0 0x0 0x0 0x4c0002 0x0 0x580002 0x7ef 0x5b0007 0x7ef 0x20 0x0 0x6e0002 0x7ef 0x8f0002 0x7ef 0x980007 0x7ef 0x50 0x0 0x9e0007 0x0 0x30 0x0 0xa80002 0x0 oops 0 +ciMethodData sun/awt/image/PNGImageDecoder handleChunk (I[BII)Z 2 5905 orig 264 136 98 31 106 0 0 0 0 8 174 130 104 0 0 0 0 128 12 0 0 192 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 205 2 0 0 89 63 0 0 33 162 0 0 0 0 0 0 0 0 0 0 2 0 0 0 4 0 140 0 2 0 0 0 240 10 0 0 255 255 255 255 8 0 1 0 0 0 0 0 data 350 0x10008 0x1e 0x0 0xaf0 0x4 0x4e0 0x0 0x4e0 0x4 0x4f8 0x0 0x5f0 0x0 0x100 0x0 0x388 0x0 0x440 0x0 0x4c8 0x4 0x640 0x0 0x658 0x4 0x670 0x0 0x730 0x0 0x7f8 0x0 0xaf0 0x830008 0x12 0x0 0x240 0x0 0x1e8 0x0 0x240 0x0 0xa0 0x0 0x110 0x0 0x1e8 0x0 0x240 0x0 0xa0 0x0 0x110 0xb50007 0x0 0x38 0x4 0xb90003 0x4 0x18 0xbd0002 0x4 0xdd0002 0x4 0xe20003 0x4 0x148 0xe90007 0x0 0x38 0x0 0xed0003 0x0 0x18 0xf10002 0x0 0x1020007 0x0 0x58 0x0 0x10c0007 0x0 0x38 0x0 0x1100003 0x0 0x18 0x1140002 0x0 0x13c0002 0x0 0x1410003 0x0 0x70 0x1480007 0x0 0x38 0x0 0x14c0003 0x0 0x18 0x1500002 0x0 0x1660002 0x0 0x16d0007 0x0 0x7b0 0x4 0x1750002 0x4 0x1780003 0x4 0x780 0x1840002 0x1d 0x18b0002 0x1d 0x1930002 0x1d 0x19b0002 0x1d 0x1a30002 0x1d 0x1ab0002 0x1d 0x1b30002 0x1d 0x1bb0002 0x1d 0x1be0002 0x1d 0x1c10002 0x1d 0x1c40003 0x1d 0x6c8 0x1ca0007 0x2d 0x30 0x0 0x1d40002 0x0 0x1db0002 0x2d 0x1e70007 0x0 0x670 0x2d 0x1f50002 0x2d 0x1f80003 0x2d 0x640 0x1fb0003 0x0 0x628 0x2000003 0x0 0x610 0x2070007 0x0 0x80 0x1cb 0x20d0002 0x1cb 0x2140007 0x0 0x50 0x1cb 0x21c0002 0x1cb 0x2230007 0x1cb 0x30 0x0 0x22d0002 0x0 0x2370002 0x1cb 0x2430002 0x1cb 0x24f0002 0x1cb 0x25b0002 0x1cb 0x2670002 0x1cb 0x26d0003 0x1cb 0x518 0x2980007 0x4 0x38 0x211 0x2c60003 0x211 0xffffffffffffffe0 0x2c90003 0x4 0x4c8 0x2cc0003 0x173 0x4b0 0x2cf0003 0x68 0x498 0x2d90007 0x0 0x58 0x13b2 0x2e20007 0x1ea 0x38 0x11c8 0x2e80003 0x11c8 0xffffffffffffffc0 0x2ef0007 0x0 0x428 0x1ea 0x2fa0002 0x1ea 0x3110002 0x1ea 0x31b0002 0x1ea 0x31e0003 0x1ea 0x3d8 0x32c0002 0xa 0x3330002 0xa 0x33c0002 0xa 0x3430002 0xa 0x34a0002 0xa 0x3520002 0xa 0x3550002 0xa 0x3580005 0x0 0x11c7a7e60 0xa 0x0 0x0 0x35b0002 0xa 0x35e0003 0xa 0x310 0x3650008 0x12 0x0 0x2e0 0x0 0x250 0x0 0x2e0 0x0 0x140 0x0 0xa0 0x0 0x250 0x0 0x2e0 0x0 0x140 0x0 0xa0 0x39c0007 0x0 0x20 0x4 0x3b90007 0x3 0x38 0x1 0x3be0003 0x1 0x18 0x3c30002 0x4 0x3cd0007 0x4 0x1d8 0x6b 0x3d80003 0x6b 0xffffffffffffffe0 0x3e00007 0x0 0x38 0x0 0x3e40003 0x0 0x18 0x3e80002 0x0 0x3f10007 0x0 0x80 0x0 0x4030007 0x0 0x48 0x0 0x4110002 0x0 0x4190003 0x0 0xffffffffffffffd0 0x41c0003 0x0 0xf0 0x4240002 0x0 0x4320002 0x0 0x4410002 0x0 0x44c0003 0x0 0xa8 0x4530007 0x0 0x38 0x0 0x4570003 0x0 0x18 0x45b0002 0x0 0x4600002 0x0 0x46e0007 0x0 0x38 0x0 0x4760003 0x0 0x18 0x4900003 0x4 0x18 oops 1 246 java/util/GregorianCalendar +ciMethodData sun/awt/image/PNGImageDecoder property (Ljava/lang/String;Ljava/lang/Object;)V 1 679 orig 264 136 98 31 106 0 0 0 0 160 167 130 104 0 0 0 0 216 1 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 17 18 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 16 0x10007 0x242 0x20 0x0 0x90007 0xa8 0x30 0x19a 0x110002 0x19a 0x1d0005 0x0 0x6b4a7a90 0x242 0x0 0x0 oops 1 12 java/util/Hashtable +ciMethodData sun/awt/image/PNGImageDecoder produceImage ()V 2 255319 orig 264 136 98 31 106 0 0 0 0 80 182 130 104 0 0 0 0 136 16 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 180 0 0 121 11 0 0 193 121 25 0 17 1 0 0 71 160 1 0 2 0 0 0 10 0 180 0 2 0 0 0 208 14 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 474 0x70007 0x16f 0x98 0xb78 0x170005 0x0 0x11cdca7d0 0xb78 0x0 0x0 0x1a0007 0xb78 0x30 0x0 0x240002 0x0 0x2b0003 0xb78 0xffffffffffffff80 0x3e0002 0x16f 0x410002 0x16f 0x440002 0x16f 0x490005 0x0 0x11cdc94e0 0x16f 0x0 0x0 0x5e0008 0xc 0x0 0xe8 0x0 0x70 0x0 0x88 0x0 0xa0 0x5 0xb8 0x0 0xd0 0x930003 0x0 0x88 0x990003 0x0 0x70 0x9f0003 0x0 0x58 0xa50003 0x16f 0x40 0xab0003 0x0 0x28 0xb50002 0x0 0xbd0007 0x14d 0x38 0x22 0xcf0003 0x22 0x18 0xe90007 0x0 0x38 0x16f 0xee0003 0x16f 0x18 0xfe0008 0x12 0x0 0x298 0x0 0x140 0x0 0x298 0x1 0x270 0x0 0xa0 0x0 0x270 0x0 0x298 0x4 0x270 0x0 0xa0 0x1300007 0x2 0x30 0x0 0x13a0002 0x0 0x1420007 0x2 0x48 0x0 0x15f0002 0x0 0x1650003 0x0 0x28 0x1860002 0x3 0x1910003 0x3 0x180 0x1970007 0x0 0x38 0x0 0x19b0003 0x0 0x18 0x1ad0007 0x0 0xe0 0x0 0x1c50007 0x0 0x38 0x0 0x1dc0003 0x0 0xffffffffffffffe0 0x1e40007 0x0 0x48 0x0 0x1f90002 0x0 0x1ff0003 0x0 0x28 0x21c0002 0x0 0x22b0004 0x0 0x0 0x0 0x0 0x0 0x2310003 0x0 0x50 0x2350002 0x16d 0x2400003 0x16d 0x28 0x24a0002 0x0 0x2570005 0x0 0x11cdc94e0 0x170 0x0 0x0 0x2600005 0x0 0x11cdc94e0 0x170 0x0 0x0 0x2680007 0x14e 0x38 0x22 0x26d0003 0x22 0x18 0x2770005 0x0 0x11cdc94e0 0x170 0x0 0x0 0x27c0005 0x0 0x11cdc94e0 0x170 0x0 0x0 0x2850007 0x16d 0x38 0x3 0x2890003 0x3 0x88 0x2920007 0x0 0x38 0x16d 0x2960003 0x16d 0x18 0x2a00007 0x21 0x38 0x14c 0x2a40003 0x14c 0x18 0x2c10007 0x22 0x38 0x14e 0x2ca0003 0x14e 0x18 0x2db0007 0x16c 0x658 0x23c 0x32d0007 0x23c 0x38 0x0 0x3300003 0x0 0xffffffffffffffc0 0x3370007 0xee 0x38 0x14e 0x3410003 0x14e 0x18 0x3630007 0x238 0x538 0x2039 0x3670005 0x0 0x11cdca7d0 0x2039 0x0 0x0 0x3730007 0x2038 0x98 0x2039 0x3800005 0x0 0x11cdca7d0 0x2039 0x0 0x0 0x3870007 0x2038 0x30 0x0 0x3910002 0x0 0x39c0003 0x2038 0xffffffffffffff80 0x3a40007 0x1dfc 0x38 0x23c 0x3a80003 0x23c 0x18 0x3b30002 0x2038 0x3c60007 0x2035 0x378 0x2e109 0x3ca0007 0x2e1 0x248 0x2de28 0x3cf0008 0xe 0x0 0x218 0xd91 0xb0 0x0 0x1e8 0x1699 0x80 0x0 0xe8 0x0 0x200 0x0 0x98 0x4480003 0x20bbe 0x2a0 0x48c0003 0x0 0x288 0x4be0007 0x0 0x20 0xd26a 0x4d40003 0xd26a 0x250 0x5040007 0x0 0x38 0x0 0x5080003 0x0 0x18 0x5130007 0x0 0x90 0x0 0x51a0007 0x0 0x70 0x0 0x5360007 0x0 0x38 0x0 0x53a0003 0x0 0x18 0x5440003 0x0 0xffffffffffffff88 0x5490007 0x0 0x20 0x0 0x55f0003 0x0 0x150 0x5940003 0x0 0x138 0x5c90003 0x0 0x120 0x5d30002 0x0 0x5db0008 0xc 0x0 0xe8 0x0 0x70 0x0 0x88 0x0 0xa0 0x100 0xb8 0x0 0xd0 0x6290003 0x0 0x88 0x6490003 0x0 0x70 0x66a0003 0x0 0x58 0x67c0003 0x2e1 0x40 0x68e0003 0x0 0x28 0x6980002 0x0 0x6a30003 0x2e109 0xfffffffffffffca0 0x6aa0007 0x8cf 0x78 0x1766 0x6ae0007 0x2f 0x48 0x1737 0x6c00002 0x1737 0x6c40003 0x1737 0x28 0x6d60002 0x2f 0x6fa0003 0x2035 0xfffffffffffffae0 0x7010007 0x14c 0x78 0xec 0x7050007 0x0 0x48 0xec 0x7190002 0xec 0x71d0003 0xec 0x28 0x7310002 0x0 0x7350003 0x238 0xfffffffffffff9c0 0x73b0005 0x0 0x11cdc94e0 0x16c 0x0 0x0 0x7400005 0x0 0x11cdc94e0 0x16c 0x0 0x0 0x7430003 0x16c 0x138 0x7470003 0x0 0x120 0x74f0007 0x0 0x60 0x0 0x7560002 0x0 0x75c0005 0x0 0x0 0x0 0x0 0x0 0x7630005 0x0 0x0 0x0 0x0 0x0 0x7660003 0x0 0x78 0x76a0003 0x0 0x60 0x7700005 0x0 0x0 0x0 0x0 0x0 0x7730003 0x0 0x18 oops 10 6 java/io/BufferedInputStream 27 sun/awt/image/PNGImageDecoder 163 sun/awt/image/PNGImageDecoder 169 sun/awt/image/PNGImageDecoder 182 sun/awt/image/PNGImageDecoder 188 sun/awt/image/PNGImageDecoder 244 java/io/BufferedInputStream 254 java/io/BufferedInputStream 425 sun/awt/image/PNGImageDecoder 431 sun/awt/image/PNGImageDecoder +ciMethodData java/util/zip/Inflater ()V 1 473 orig 264 136 98 31 106 0 0 0 0 248 222 54 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 145 11 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 2 0x20002 0x172 oops 0 +ciMethodData java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;)V 1 473 orig 264 136 98 31 106 0 0 0 0 200 11 55 104 0 0 0 0 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 145 11 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 6 0 0 0 0 0 data 2 0x60002 0x172 oops 0 +ciMethodData sun/awt/image/PNGImageDecoder getData ()Z 1 2549 orig 264 136 98 31 106 0 0 0 0 224 193 130 104 0 0 0 0 56 2 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 157 1 0 0 145 11 0 0 193 66 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 13 0 2 0 0 0 240 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 30 0x40007 0x172 0xb8 0x675 0x80002 0x675 0xb0007 0x0 0x88 0x675 0x1f0005 0x0 0x11cdc94e0 0x675 0x0 0x0 0x220007 0x172 0xffffffffffffff80 0x503 0x2a0003 0x503 0xffffffffffffff60 0x310007 0x0 0x38 0x172 0x350003 0x172 0x18 oops 1 12 sun/awt/image/PNGImageDecoder +ciMethodData java/awt/image/IndexColorModel (II[B[B[B)V 1 0 orig 264 136 98 31 106 0 0 0 0 192 109 119 104 0 0 0 0 16 2 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 160 0 0 0 255 255 255 255 2 0 8 0 0 0 0 0 data 20 0x80002 0x0 0xf0002 0x0 0x120002 0x0 0x290007 0x0 0x40 0x0 0x2f0007 0x0 0x30 0x0 0x380002 0x0 0x440002 0x0 0x480002 0x0 oops 0 +ciMethodData java/awt/image/IndexColorModel (II[B[B[BI)V 1 0 orig 264 136 98 31 106 0 0 0 0 160 110 119 104 0 0 0 0 40 2 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 176 0 0 0 255 255 255 255 2 0 8 0 0 0 0 0 data 22 0x80002 0x0 0xf0002 0x0 0x120002 0x0 0x290007 0x0 0x40 0x0 0x2f0007 0x0 0x30 0x0 0x380002 0x0 0x440002 0x0 0x4a0002 0x0 0x4e0002 0x0 oops 0 +ciMethodData java/awt/image/IndexColorModel (II[B[B[B[B)V 1 3 orig 264 136 98 31 106 0 0 0 0 120 111 119 104 0 0 0 0 24 2 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 160 0 0 0 255 255 255 255 2 0 8 0 0 0 0 0 data 20 0x80002 0x3 0xf0002 0x3 0x120002 0x3 0x290007 0x0 0x40 0x3 0x2f0007 0x3 0x30 0x0 0x380002 0x0 0x450002 0x3 0x490002 0x3 oops 0 +ciMethodData sun/awt/image/ImageDecoder setDimensions (II)I 1 566 orig 264 136 98 31 106 0 0 0 0 72 210 130 104 0 0 0 0 240 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 0 0 0 145 13 0 0 145 13 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 152 0 0 0 255 255 255 255 5 0 7 0 0 0 0 0 data 19 0x70005 0x0 0x11cdc94e0 0x2f0 0xc70f26d0 0x74 0xc0007 0x1b2 0x68 0x1b2 0x150005 0x3 0xc70f2780 0x1ac 0xc70f2830 0x3 0x1d0003 0x1b2 0xffffffffffffff80 oops 4 2 sun/awt/image/PNGImageDecoder 4 sun/awt/image/GifImageDecoder 12 sun/awt/image/ImageRepresentation 14 java/awt/image/ReplicateScaleFilter +ciMethodData sun/awt/image/ImageDecoder setColorModel (Ljava/awt/image/ColorModel;)I 1 566 orig 264 136 98 31 106 0 0 0 0 152 211 130 104 0 0 0 0 232 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 0 0 0 145 13 0 0 145 13 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 152 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 19 0x60005 0x0 0x11cdc94e0 0x2f0 0xc70f26d0 0x74 0xb0007 0x1b2 0x68 0x1b2 0x130005 0x3 0xc70f2780 0x1ac 0xc70f2830 0x3 0x1b0003 0x1b2 0xffffffffffffff80 oops 4 2 sun/awt/image/PNGImageDecoder 4 sun/awt/image/GifImageDecoder 12 sun/awt/image/ImageRepresentation 14 java/awt/image/ReplicateScaleFilter +ciMethodData sun/awt/image/ImageDecoder setHints (I)I 1 567 orig 264 136 98 31 106 0 0 0 0 64 212 130 104 0 0 0 0 232 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 0 0 0 153 13 0 0 153 13 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 152 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 19 0x60005 0x0 0x11cdc94e0 0x2f0 0xc70f26d0 0x76 0xb0007 0x1b3 0x68 0x1b3 0x130005 0x3 0xc70f2780 0x1ad 0xc70f2830 0x3 0x1b0003 0x1b3 0xffffffffffffff80 oops 4 2 sun/awt/image/PNGImageDecoder 4 sun/awt/image/GifImageDecoder 12 sun/awt/image/ImageRepresentation 14 java/awt/image/ReplicateScaleFilter +ciMethodData sun/awt/image/ImageDecoder headerComplete ()V 1 567 orig 264 136 98 31 106 0 0 0 0 216 212 130 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 0 0 0 145 13 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 6 0x50005 0x40 0x6b7a3ae0 0x172 0x0 0x0 oops 1 2 sun/awt/image/ImageFetcher +ciMethodData sun/awt/image/PNGImageDecoder sendPixels (IIII[BII)Z 1 63 orig 264 136 98 31 106 0 0 0 0 192 183 130 104 0 0 0 0 8 2 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 249 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 136 0 0 0 255 255 255 255 5 0 16 0 0 0 0 0 data 17 0x100005 0x0 0x11cdc94e0 0x3f 0x0 0x0 0x170007 0x3f 0x20 0x0 0x230007 0x0 0x38 0x3f 0x270003 0x3f 0x18 oops 1 2 sun/awt/image/PNGImageDecoder +ciMethodData sun/awt/image/ImageDecoder imageComplete (IZ)I 1 572 orig 264 136 98 31 106 0 0 0 0 48 215 130 104 0 0 0 0 112 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 0 0 0 185 13 0 0 185 13 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 23 0 2 0 0 0 24 1 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 35 0x50005 0x52 0x7f3e0f00 0x163 0x7f3e0fb0 0x2 0x90007 0x1 0x50 0x1b6 0x160005 0x52 0x7f3e0f00 0x162 0x7f3e0fb0 0x2 0x200005 0x0 0x11cdc94e0 0x2f6 0xc70f26d0 0x78 0x250007 0x1b7 0x68 0x1b7 0x2d0005 0x3 0xc70f2780 0x1b1 0xc70f2830 0x3 0x350003 0x1b7 0xffffffffffffff80 oops 8 2 sun/awt/image/URLImageSource 4 sun/awt/image/ByteArrayImageSource 12 sun/awt/image/URLImageSource 14 sun/awt/image/ByteArrayImageSource 18 sun/awt/image/PNGImageDecoder 20 sun/awt/image/GifImageDecoder 28 sun/awt/image/ImageRepresentation 30 java/awt/image/ReplicateScaleFilter +ciMethodData sun/awt/image/ImageDecoder close ()V 1 575 orig 264 136 98 31 106 0 0 0 0 16 217 130 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 0 0 0 209 13 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 13 0x40007 0x0 0x68 0x1ba 0xb0005 0x0 0x11cdca7d0 0x1ba 0x0 0x0 0xe0003 0x1ba 0x18 oops 1 6 java/io/BufferedInputStream +ciMethodData java/awt/color/ColorSpace getInstance (I)Ljava/awt/color/ColorSpace; 1 539 orig 264 136 98 31 106 0 0 0 0 224 153 118 104 0 0 0 0 248 3 0 0 136 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 114 0 0 0 73 13 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 50 0 2 0 0 0 176 2 0 0 255 255 255 255 8 0 1 0 0 0 0 0 data 86 0x10008 0xc 0x0 0x2a0 0x81 0x70 0x0 0xe0 0x0 0x150 0x0 0x1c0 0x0 0x230 0x2c0007 0x1a9 0x40 0x0 0x320002 0x0 0x3b0002 0x0 0x470003 0x1a9 0x18 0x510003 0x1a9 0x1e8 0x5c0007 0x0 0x40 0x0 0x620002 0x0 0x6b0002 0x0 0x770003 0x0 0x18 0x810003 0x0 0x178 0x8c0007 0x0 0x40 0x0 0x920002 0x0 0x9b0002 0x0 0xa70003 0x0 0x18 0xb10003 0x0 0x108 0xbc0007 0x0 0x40 0x0 0xc20002 0x0 0xcb0002 0x0 0xdd0003 0x0 0x18 0xe70003 0x0 0x98 0xf20007 0x0 0x40 0x0 0xf80002 0x0 0x1010002 0x0 0x1130003 0x0 0x18 0x11d0003 0x0 0x28 0x1260002 0x0 oops 0 +instanceKlass org/apache/commons/logging/impl/SimpleLog$1 +instanceKlass org/apache/xerces/impl/xs/XSDeclarationPool +instanceKlass org/apache/xerces/impl/xs/opti/SchemaDOMParser$BooleanStack +instanceKlass org/apache/commons/logging/impl/SimpleLog +instanceKlass org/apache/commons/logging/Log +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$1 +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$2 +instanceKlass org/apache/xerces/impl/xs/opti/DefaultXMLDocumentHandler +instanceKlass sun/swing/plaf/synth/SynthIcon +instanceKlass org/apache/xerces/impl/xs/util/SimpleLocator +instanceKlass org/apache/xerces/impl/xs/traversers/XSDocumentInfo +instanceKlass org/apache/xerces/impl/xs/XSParticleDecl +instanceKlass org/apache/xerces/xs/XSParticle +instanceKlass org/apache/commons/logging/LogFactory$2 +instanceKlass org/apache/commons/logging/LogFactory$3 +instanceKlass org/apache/xerces/impl/xs/XSAttributeGroupDecl +instanceKlass org/apache/xerces/xs/XSAttributeGroupDefinition +instanceKlass org/apache/xerces/impl/xs/XSAttributeDecl +instanceKlass org/apache/xerces/xs/XSAttributeDeclaration +instanceKlass org/apache/commons/logging/LogFactory$4 +instanceKlass org/apache/xerces/impl/xs/opti/DefaultNode +instanceKlass org/netbeans/editor/ext/ToolTipSupport$3 +instanceKlass org/apache/commons/logging/impl/WeakHashtable$Referenced +instanceKlass org/apache/commons/logging/LogFactory$1 +instanceKlass org/apache/commons/logging/LogFactory$6 +instanceKlass org/apache/commons/logging/LogFactory +instanceKlass org/apache/commons/httpclient/params/HttpParams +instanceKlass org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser +instanceKlass org/apache/commons/httpclient/HttpClient +instanceKlass org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory +instanceKlass org/apache/xerces/impl/xs/traversers/XSDHandler +instanceKlass org/apache/commons/httpclient/protocol/DefaultProtocolSocketFactory +instanceKlass org/apache/xerces/impl/xs/models/XSEmptyCM +instanceKlass org/apache/commons/httpclient/protocol/Protocol +instanceKlass org/apache/xerces/impl/xs/models/XSCMValidator +instanceKlass org/apache/commons/httpclient/Credentials +instanceKlass org/apache/xerces/impl/xs/models/CMBuilder +instanceKlass org/apache/commons/httpclient/protocol/SecureProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/ProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/HttpConnectionManager +instanceKlass org/apache/xerces/impl/dtd/models/CMNode +instanceKlass org/apache/commons/httpclient/HttpMethod +instanceKlass org/apache/xerces/impl/xs/models/CMNodeFactory +instanceKlass com/mathworks/webservices/client/core/http/MathWorksHttpClient +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler$OneSubGroup +instanceKlass org/apache/xerces/impl/xs/XSElementDecl +instanceKlass org/apache/xerces/xs/XSElementDeclaration +instanceKlass org/apache/xerces/xs/XSTerm +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler +instanceKlass org/apache/xerces/impl/xs/XSGrammarBucket +instanceKlass org/apache/xerces/impl/xs/XSMessageFormatter +instanceKlass org/apache/xerces/util/DefaultErrorHandler +instanceKlass com/mathworks/webservices/authenticationws/client/rest/request/BaseLoginServiceRequest +instanceKlass com/mathworks/webservices/authenticationws/client/rest/http/ResponseHandler +instanceKlass org/w3c/dom/DOMStringList +instanceKlass org/apache/xerces/impl/xs/SchemaGrammar +instanceKlass org/apache/xerces/xs/XSNamespaceItem +instanceKlass org/apache/xerces/xni/grammars/XSGrammar +instanceKlass org/apache/xerces/xni/grammars/XMLSchemaDescription +instanceKlass org/apache/xerces/xs/XSModel +instanceKlass com/mathworks/webservices/client/core/http/ResponseHandler +instanceKlass com/mathworks/webservices/client/core/MathWorksWebServiceClient +instanceKlass org/apache/xerces/impl/xs/XMLSchemaLoader +instanceKlass org/apache/xerces/xs/XSLoader +instanceKlass com/mathworks/webservices/client/core/ClientConfiguration +instanceKlass javax/xml/transform/sax/SAXSource +instanceKlass javax/xml/transform/stream/StreamSource +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClient +instanceKlass com/mathworks/webservices/client/core/WebServiceClient +instanceKlass javax/xml/validation/Schema +instanceKlass org/apache/xerces/jaxp/validation/XSGrammarPoolContainer +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClientFactory +instanceKlass org/apache/xerces/util/XMLGrammarPoolImpl +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities$1 +instanceKlass com/mathworks/matlab_login/WebServiceProxy +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities +instanceKlass javax/xml/validation/SchemaFactoryFinder$2 +instanceKlass javax/xml/validation/SecuritySupport$8 +instanceKlass javax/xml/validation/SecuritySupport$2 +instanceKlass javax/xml/validation/SchemaFactoryFinder +instanceKlass com/mathworks/widgets/text/mcode/MLint$AutoFixChange +instanceKlass com/mathworks/internal/activationws/client/ActivationService +instanceKlass javax/xml/validation/SecuritySupport$1 +instanceKlass javax/xml/validation/SecuritySupport +instanceKlass com/mathworks/widgets/text/mcode/MLint$Message +instanceKlass javax/xml/validation/SchemaFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameList +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Intercepter +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/ChildLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty$ReceiverImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/UnmarshallerChain +instanceKlass javax/xml/bind/annotation/W3CDomHandler +instanceKlass javax/xml/bind/annotation/DomHandler +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeArrayInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ArrayInfo +instanceKlass com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl$1 +instanceKlass javax/xml/bind/JAXBElement$GlobalScope +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils +instanceKlass com/mathworks/widgets/text/mcode/MLint$DefaultCodeAnalyzerContentType +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/TagAndType +instanceKlass com/sun/xml/internal/bind/v2/runtime/LifecycleMethods +instanceKlass com/mathworks/matlab_login/LoginWorkspace +instanceKlass com/mathworks/mwswing/AppearanceFocusEvent +instanceKlass com/mathworks/matlab_login/MatlabLogin$3 +instanceKlass javax/swing/text/JTextComponent$InputMethodRequestsHandler +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor +instanceKlass java/text/AttributedString$AttributedStringIterator +instanceKlass com/sun/xml/internal/bind/v2/runtime/Name +instanceKlass com/mathworks/eps/notificationclient/impl/utils/NotificationLog +instanceKlass sun/awt/im/CompositionAreaHandler +instanceKlass com/mathworks/apache/commons/lang3/text/StrTokenizer +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/AccessorInjector +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Ref +instanceKlass java/awt/KeyboardFocusManager$3 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Bean +instanceKlass com/mathworks/apache/commons/lang3/text/StrBuilder +instanceKlass java/awt/KeyboardFocusManager$4 +instanceKlass com/sun/xml/internal/bind/v2/bytecode/ClassTailor +instanceKlass com/mathworks/widgets/find/FindClientRegistry$6 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory +instanceKlass com/mathworks/widgets/find/LookinItem +instanceKlass com/mathworks/widgets/find/FindClientRegistry$RegisteredComponent +instanceKlass com/sun/xml/internal/bind/v2/ClassFactory +instanceKlass com/mathworks/widgets/find/FindClientRegistry$3 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils$1 +instanceKlass com/mathworks/apache/commons/lang3/text/StrLookup +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils +instanceKlass com/mathworks/widgets/find/FindClientRegistry +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister$2 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/ListIterator +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$4 +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$2 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeMapPropertyInfo +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1$1 +instanceKlass com/sun/xml/internal/bind/v2/model/core/MapPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeReferencePropertyInfo +instanceKlass com/mathworks/mlwidgets/array/ArrayDialog +instanceKlass com/sun/xml/internal/bind/v2/model/core/ReferencePropertyInfo +instanceKlass com/mathworks/mde/desk/MLDesktop$9$1 +instanceKlass com/mathworks/apache/commons/lang3/StringUtils +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Property +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/StructureLoaderBuilder +instanceKlass com/sun/xml/internal/bind/v2/runtime/AttributeAccessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader +instanceKlass javax/xml/bind/Marshaller +instanceKlass com/mathworks/apache/commons/lang3/text/StrMatcher +instanceKlass javax/xml/bind/Unmarshaller +instanceKlass com/sun/xml/internal/bind/v2/runtime/JaxBeanInfo +instanceKlass com/mathworks/widgets/messagepanel/DefaultMessagePanelPainter +instanceKlass com/mathworks/apache/commons/lang3/text/StrSubstitutor +instanceKlass com/sun/xml/internal/bind/v2/util/FlattenIterator +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl$PropertyImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementInfo +instanceKlass javax/xml/bind/annotation/XmlElementDecl$GLOBAL +instanceKlass javax/xml/bind/annotation/XmlSeeAlso +instanceKlass java/util/Collections$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AttributePropertyInfoImpl$1 +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnvImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeAttributePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/AttributePropertyInfo +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnv +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeRefImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElementRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElementRef +instanceKlass com/mathworks/webservices/urlmanager/UrlManagerFactory +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/TODO +instanceKlass com/sun/xml/internal/bind/annotation/XmlLocation +instanceKlass javax/xml/bind/annotation/XmlSchemaTypes +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ParameterizedTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$BinderArg +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapters +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Util +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl +instanceKlass com/mathworks/brsanthu/dataexporter/DataExporter +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/PropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$1 +instanceKlass com/mathworks/apache/commons/cli/CommandLineParser +instanceKlass com/sun/xml/internal/bind/v2/model/impl/FieldPropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl$RuntimePropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationSource +instanceKlass com/mathworks/webservices/urlmanager/UrlManager +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Accessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Receiver +instanceKlass org/netbeans/editor/CodeFoldingSideBar$PaintInfo +instanceKlass java/net/PasswordAuthentication +instanceKlass com/mathworks/notification_client_util/ProxyInfo +instanceKlass javax/xml/bind/annotation/XmlElement$DEFAULT +instanceKlass com/mathworks/notification_client_util/MATLABNotificationClientParams +instanceKlass com/sun/xml/internal/bind/AccessorFactoryImpl +instanceKlass com/sun/xml/internal/bind/InternalAccessorFactory +instanceKlass com/sun/xml/internal/bind/AccessorFactory +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientParamsMLWrapper +instanceKlass javax/xml/bind/annotation/XmlAccessorOrder +instanceKlass com/mathworks/eps/notificationclient/impl/utils/LogMessageTask +instanceKlass javax/xml/bind/annotation/XmlNs +instanceKlass com/mathworks/installservicehandler/xml/package-info +instanceKlass com/sun/xml/internal/bind/annotation/OverrideAnnotationOf +instanceKlass javax/xml/bind/annotation/XmlMixed +instanceKlass javax/xml/bind/annotation/XmlAnyElement +instanceKlass javax/xml/bind/annotation/XmlElements +instanceKlass javax/xml/bind/annotation/XmlAnyAttribute +instanceKlass javax/xml/bind/annotation/XmlList +instanceKlass javax/xml/bind/annotation/XmlElementWrapper +instanceKlass javax/xml/bind/annotation/XmlAttachmentRef +instanceKlass javax/xml/bind/annotation/XmlMimeType +instanceKlass com/mathworks/eps/notificationclient/impl/executors/LabelledThreadFactory +instanceKlass javax/xml/bind/annotation/XmlInlineBinaryData +instanceKlass javax/xml/bind/annotation/XmlIDREF +instanceKlass javax/xml/bind/annotation/XmlID +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoImpl +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexArrayFactory +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/Element +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeClassInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ClassInfo +instanceKlass com/mathworks/webintegration/vrd/VRDController$ValidateCommandWorker$1 +instanceKlass com/mathworks/eps/notificationclient/impl/executors/ExecutorServiceGroup +instanceKlass javax/xml/bind/annotation/XmlType$DEFAULT +instanceKlass com/mathworks/eps/notificationclient/messages/utils/APSConstants +instanceKlass javax/xml/bind/annotation/XmlAccessorType +instanceKlass com/mathworks/vrd/command/ValidateCommandInternal +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/MethodLocatable +instanceKlass javax/xml/bind/JAXBElement +instanceKlass com/mathworks/installservicehandler/xml/ServiceContainerType +instanceKlass com/mathworks/vrd/command/ValidateCommandImpl +instanceKlass com/mathworks/installservicehandler/xml/ServiceType +instanceKlass org/apache/http/HttpEntity +instanceKlass com/mathworks/installservicehandler/xml/ServiceConfigType +instanceKlass org/apache/http/client/CredentialsProvider +instanceKlass org/apache/http/auth/Credentials +instanceKlass com/mathworks/eps/notificationclient/impl/utils/APSUtils +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RegistryInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/model/core/RegistryInfo +instanceKlass com/mathworks/vrd/license/LicenseUtil +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/SecureLoader +instanceKlass javax/xml/bind/annotation/XmlValue +instanceKlass javax/xml/bind/annotation/XmlType +instanceKlass javax/xml/bind/annotation/XmlTransient +instanceKlass javax/xml/bind/annotation/XmlSchemaType +instanceKlass javax/xml/bind/annotation/XmlRootElement +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationTransporter +instanceKlass javax/xml/bind/annotation/XmlEnum +instanceKlass javax/xml/bind/annotation/XmlElementRefs +instanceKlass javax/xml/bind/annotation/XmlElementRef +instanceKlass javax/xml/bind/annotation/XmlElementDecl +instanceKlass javax/xml/bind/annotation/XmlElement +instanceKlass javax/xml/bind/annotation/XmlAttribute +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Quick +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Init +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/LocatableAnnotation +instanceKlass com/mathworks/eps/notificationclient/messages/request/NotificationRequestMessage +instanceKlass javax/xml/bind/annotation/XmlRegistry +instanceKlass com/sun/xml/internal/bind/v2/model/core/Ref +instanceKlass com/sun/xml/internal/bind/api/CompositeStructure +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationsException$Builder +instanceKlass com/sun/xml/internal/bind/v2/runtime/RuntimeUtil +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AnyTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl$1 +instanceKlass javax/xml/datatype/Duration +instanceKlass com/mathworks/eps/notificationclient/api/NotificationClient +instanceKlass com/mathworks/eps/notificationclient/impl/RemoteClientCreator +instanceKlass com/mathworks/eps/notificationclient/api/ClientCreator +instanceKlass javax/xml/datatype/XMLGregorianCalendar +instanceKlass javax/activation/DataHandler +instanceKlass javax/xml/datatype/DatatypeConstants$Field +instanceKlass javax/xml/datatype/DatatypeConstants +instanceKlass javax/xml/namespace/QName$1 +instanceKlass javax/xml/namespace/QName +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/LeafInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/Transducer +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeBuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElement +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/BuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/LeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/MaybeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Locatable +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfoSet +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder$1 +instanceKlass com/sun/xml/internal/bind/v2/model/core/ErrorHandler +instanceKlass com/sun/xml/internal/bind/v2/runtime/Location +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/model/nav/TypeVisitor +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator +instanceKlass com/sun/xml/internal/bind/v2/model/nav/Navigator +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalarFactory +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils +instanceKlass com/sun/xml/internal/bind/WhiteSpaceProcessor +instanceKlass javax/xml/bind/annotation/XmlSchema +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder +instanceKlass com/mathworks/eps/notificationclient/api/utils/ClassLoaderUtils +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilderI +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameBuilder +instanceKlass com/sun/istack/internal/Pool$Impl +instanceKlass com/sun/istack/internal/Pool +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap$Entry +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap +instanceKlass com/mathworks/eps/notificationclient/api/classloader/ClassLoaderHelper +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$6 +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AbstractInlineAnnotationReaderImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$JAXBContextBuilder +instanceKlass com/sun/xml/internal/bind/v2/util/TypeCast +instanceKlass com/sun/xml/internal/bind/Util +instanceKlass com/mathworks/eps/notificationclient/api/ClientFactory +instanceKlass com/mathworks/installservicehandler/xml/ObjectFactory +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler$Extension +instanceKlass com/mathworks/eps/notificationclient/api/ClientParamsBuilder +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/RuntimeAnnotationReader +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationReader +instanceKlass com/sun/xml/internal/bind/v2/ContextFactory +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber$InternalServiceCaller +instanceKlass com/mathworks/notification_client_util/UIMessage +instanceKlass javax/xml/bind/GetPropertyAction +instanceKlass com/mathworks/notification_client_util/UICallback +instanceKlass javax/xml/bind/ContextFinder +instanceKlass com/mathworks/notification_client_util/NotificationServiceCaller +instanceKlass javax/xml/bind/JAXBContext +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfoImpl +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber +instanceKlass com/mathworks/update_notification_subscriber/NotificationSubscriber +instanceKlass com/mathworks/installservicehandler/InstallServiceHandlerFactory +instanceKlass com/mathworks/widgets/desk/PreferencePanel +instanceKlass com/mathworks/widgets/spreadsheet/data/ValueSummaryFactory +instanceKlass com/mathworks/matlab_login/MATLABLoginLogoutHandler +instanceKlass com/mathworks/supportsoftwarematlabmanagement/utilities/SsiSettings +instanceKlass com/mathworks/instutil/licensefiles/LicenseUtil$LicFileFilter +instanceKlass com/mathworks/mde/desk/ContributedTools$ToolBoxInfo +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1$1 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/SsiUpgradePreChecksUtils +instanceKlass java/net/InetAddress$CacheEntry +instanceKlass sun/net/InetAddressCachePolicy$2 +instanceKlass sun/net/InetAddressCachePolicy$1 +instanceKlass sun/net/InetAddressCachePolicy +instanceKlass java/net/Inet4AddressImpl +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$2 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade$1 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade +instanceKlass com/mathworks/instutil/licensefiles/LicenseNamesBase +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$10 +instanceKlass com/mathworks/net/hyperlink/AbstractHyperlinkProvider +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$StartRequestedState +instanceKlass com/mathworks/instwiz/resources/ComponentName +instanceKlass com/mathworks/instutil/wizard/ComponentName +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$1 +instanceKlass com/mathworks/mde/vrd/ProxyLicenseActions +instanceKlass com/mathworks/webintegration/vrd/PostActionHandler +instanceKlass com/mathworks/webintegration/vrd/VRDController +instanceKlass com/mathworks/mlservices/WorkspaceVariable +instanceKlass com/mathworks/vrd/command/ValidateCommand +instanceKlass com/mathworks/vrd/command/ValidateCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/RefreshCommand +instanceKlass com/mathworks/vrd/command/RefreshCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/DeactivateCommand +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactoryDefault +instanceKlass com/mathworks/webintegration/vrd/CurrentMatlabSearchPathLicenseFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfo +instanceKlass com/mathworks/vrd/model/VRDModelImpl +instanceKlass com/mathworks/mlwebservices/WSSwingWorker +instanceKlass com/mathworks/mlwebservices/DefaultService +instanceKlass com/mathworks/vrd/model/VRDModel +instanceKlass com/mathworks/mlwebservices/ValidationService +instanceKlass com/mathworks/mlwebservices/Service +instanceKlass com/mathworks/vrd/model/VRDModelFactoryDefault +instanceKlass com/mathworks/webproxy/AbstractSystemProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxyConfiguration +instanceKlass com/mathworks/webproxy/PropertiesProxyConfigurationImpl +instanceKlass com/mathworks/webproxy/SystemPropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/AbstractCompositeProxyConfiguration +instanceKlass com/mathworks/addon_matlab_path_service_provider/DefaultCompletionObserver +instanceKlass com/mathworks/addon_enable_disable_management/AddonEnableDisableManager +instanceKlass com/mathworks/addon_enable_disable_management/java_class_path_service_provider/AddonJavaClassPathServiceProvider +instanceKlass com/mathworks/addon_matlab_path_service_provider/AddonMATLABPathServiceProvider +instanceKlass com/mathworks/addon_enable_disable_management/EnableDisableManagementNotifierImpl +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifier +instanceKlass com/mathworks/addons_common/notificationframework/RegistrationManager +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers$1 +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObserver +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers +instanceKlass com/mathworks/webproxy/NativeProxySettings +instanceKlass java/util/concurrent/ConcurrentHashMap$MapEntry +instanceKlass com/mathworks/webproxy/ProxyAuthenticator +instanceKlass com/mathworks/webproxy/PropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxySettings +instanceKlass com/mathworks/webproxy/WebproxyFactory +instanceKlass com/mathworks/instutil/WinSecurity +instanceKlass com/mathworks/instutil/WindowsSecurityOverride +instanceKlass com/mathworks/instutil/services/ServiceThread +instanceKlass com/mathworks/instutil/services/ServiceThreadFactoryImpl +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseAdapter +instanceKlass com/mathworks/vrd/license/LicenseFileFilterImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParserImpl +instanceKlass com/mathworks/instutil/SystemEnvironment +instanceKlass com/mathworks/addons_common/notificationframework/FolderRegistry +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinderDefault +instanceKlass com/mathworks/addons_common/notificationframework/AddonStateInitializer +instanceKlass com/mathworks/instutil/Environment +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseFileFinder +instanceKlass sun/font/SunFontManager$9 +instanceKlass com/mathworks/instutil/wizard/CJKFontSize +instanceKlass com/mathworks/instutil/wizard/FontSizeStrategy +instanceKlass com/mathworks/instutil/FontHandlerImpl +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$InitialState +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$LoggerState +instanceKlass com/mathworks/addons_zip/legacy_format_support/PopulateLegacyZipsListTask +instanceKlass com/mathworks/toolboxmanagement/legacy_format_support/LegacyMltbxInstallsRetriever +instanceKlass com/mathworks/addons_zip/legacy_format_support/LegacyZipsRetriever +instanceKlass com/mathworks/appmanagement/legacy_format_support/LegacyMlappinstallInstallsRetriever +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsRetriever +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsUtil +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$2 +instanceKlass com/mathworks/metadata_serializer/DocumentationMetadataSerializer +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$4 +instanceKlass com/mathworks/metadata_serializer/PathMetadataSerializer +instanceKlass com/mathworks/instwiz/WIResourceBundle +instanceKlass com/mathworks/instwiz/arch/ArchGuiBase +instanceKlass com/mathworks/instwiz/arch/ArchGui +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactoryImpl +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB$8 +instanceKlass com/mathworks/instutil/services/ProxyTester +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$1 +instanceKlass com/sun/imageio/plugins/common/ReaderUtil +instanceKlass com/mathworks/instutil/InstUtilResourceBundle +instanceKlass sun/java2d/cmm/CMSManager +instanceKlass com/mathworks/instutil/FontHandler +instanceKlass com/sun/imageio/plugins/png/PNGImageDataEnumeration +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactory +instanceKlass javax/imageio/IIOParam +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB +instanceKlass javax/xml/stream/XMLStreamWriter +instanceKlass javax/imageio/ImageIO$CanDecodeInputFilter +instanceKlass org/apache/axiom/om/OMElement +instanceKlass com/sun/imageio/stream/CloseableDisposerRecord +instanceKlass org/apache/axiom/om/OMContainer +instanceKlass org/apache/axiom/om/OMNode +instanceKlass org/apache/axiom/om/OMSerializable +instanceKlass org/apache/axiom/om/OMDataSource +instanceKlass javax/xml/stream/XMLStreamReader +instanceKlass javax/xml/stream/XMLStreamConstants +instanceKlass com/mathworks/internal/activationws/client/MWAMachineAttribute +instanceKlass org/apache/axis2/databinding/ADBBean +instanceKlass com/mathworks/metadata_serializer/MetadataSerializerLoader +instanceKlass com/mathworks/metadata_serializer/AddonCoreMetadataSerializer +instanceKlass com/mathworks/metadata_core/MetadataCoreLoader +instanceKlass com/mathworks/jniutils_java/NativeObjectContainer +instanceKlass com/mathworks/metadata_core/CompatibilityMetadata +instanceKlass com/mathworks/addons_metadata/AddonMetadataProviderWithFolder +instanceKlass com/mathworks/metadata_core/DocumentationMetadata +instanceKlass com/mathworks/metadata_core/PathMetadata +instanceKlass com/mathworks/metadata_core/IncludedAppsMetadata +instanceKlass com/mathworks/instutil/NativeUtility +instanceKlass com/mathworks/metadata_core/AddonCoreMetadata +instanceKlass com/mathworks/instutil/DisplayProperties +instanceKlass com/mathworks/instutil/MachineInfo +instanceKlass com/mathworks/vrd/command/ValidateCommandFactory +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils +instanceKlass com/mathworks/vrd/command/RefreshCommandFactory +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactory +instanceKlass com/mathworks/vrd/license/LicenseFactory +instanceKlass com/mathworks/vrd/license/License +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyFolderStructureUtils +instanceKlass com/mathworks/vrd/model/VRDModelFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinder +instanceKlass com/mathworks/vrd/license/LicenseFileFilter +instanceKlass com/mathworks/instutil/services/ServiceThreadFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParser +instanceKlass com/mathworks/vrd/view/VRDView +instanceKlass com/mathworks/instutil/services/ServiceThreadView +instanceKlass com/mathworks/resources_folder/ResourcesFolderUtils +instanceKlass com/mathworks/webintegration/vrd/VRDConfigMATLAB +instanceKlass com/mathworks/vrd/config/VRDConfig +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderView +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderViewFactory +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils$2 +instanceKlass java/nio/file/Files$3 +instanceKlass java/nio/file/FileTreeWalker$Event +instanceKlass java/nio/file/FileTreeWalker$DirectoryNode +instanceKlass com/mathworks/appmanagement/model/LegacyPackagingApi +instanceKlass com/mathworks/appmanagement/model/PackagingApi +instanceKlass sun/nio/fs/AbstractBasicFileAttributeView +instanceKlass com/mathworks/addons_metadata/AddonMetadataProvider +instanceKlass sun/nio/fs/WindowsFileAttributeViews +instanceKlass java/nio/file/attribute/BasicFileAttributeView +instanceKlass java/nio/file/FileTreeWalker +instanceKlass com/mathworks/appmanagement/model/InstalledAppMetadata +instanceKlass com/mathworks/appmanagement/model/AppMetadata +instanceKlass com/mathworks/addons_common/util/InstallationFoldersWalker +instanceKlass com/mathworks/vrd/config/VRDConfigFactory +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils +instanceKlass com/mathworks/matlab_login/UserLoginInfo +instanceKlass com/mathworks/appmanagement/MlappinstallUtil +instanceKlass com/mathworks/matlab_login/PersistLoginInfo +instanceKlass com/mathworks/matlab_login/LoginLevel4Impl +instanceKlass com/mathworks/matlab_login/LoginLevel3Impl +instanceKlass com/mathworks/addons_zip/tasks/GetInstalledTask +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$ActionList +instanceKlass com/mathworks/toolboxmanagement/tasks/GetInstalledTask +instanceKlass com/mathworks/matlab_login/LoginLevel2Impl +instanceKlass com/mathworks/matlab_login/LoginLevel1Impl +instanceKlass com/mathworks/addons_app/tasks/GetInstalledTask +instanceKlass com/mathworks/webintegration/vrd/LicenseActions +instanceKlass com/mathworks/matlab_login/LoginLevel0Impl +instanceKlass com/mathworks/matlab_login/LoginLevel +instanceKlass com/mathworks/addons_common/util/FolderNameUtils +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory$LazyHolder +instanceKlass com/mathworks/mde/vrd/NoOpLicenseActions +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory +instanceKlass com/mathworks/matlab_login/Task +instanceKlass com/mathworks/matlab_login/MatlabLogin +instanceKlass com/mathworks/mde/vrd/LicenseActions +instanceKlass com/mathworks/mde/vrd/LicenseActionsFactory +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnInformation +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$3 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$1 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$2 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader +instanceKlass com/mathworks/addons_product/ProductManager$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$1 +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder$1 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifierFactory +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$9 +instanceKlass com/mathworks/addons_product/ProductDocumentationProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$8 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$13 +instanceKlass com/mathworks/product/util/ProductIdentifierMap +instanceKlass java/text/BreakIterator +instanceKlass com/mathworks/services/lmgr/FeatureInfo +instanceKlass javax/swing/text/GlyphView$GlyphPainter +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder$TooltipBuilderArgumentAppender +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder +instanceKlass com/google/common/primitives/Ints +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$3 +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory$LoggingUncaughtExceptionHandler +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory +instanceKlass com/mathworks/toolbox/parallel/pctutil/logging/RootLog +instanceKlass com/mathworks/toolbox/distcomp/RootLog +instanceKlass com/mathworks/toolbox/distcomp/ui/PackageInfo +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$PoolIconDecorator +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$3 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifier +instanceKlass com/mathworks/toolbox/distcomp/mjs/service/DistcompServiceInfo +instanceKlass com/mathworks/toolbox/distcomp/wsclients/cloudconsole/CloudConsoleClusterInfo +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTip +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$HyperlinkHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$TooltipDetailsUpdater +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory$Fireable +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionService +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionInfo +instanceKlass com/mathworks/toolbox/parallel/util/concurrent/PredicateCondition +instanceKlass com/mathworks/services/lmgr/NonDemoFeatureInfoList +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionEvent +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClientSessionInfoProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/SessionInfoProvider +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionListener +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudCreationListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionCreationListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator +instanceKlass com/mathworks/install/InstalledProduct +instanceKlass com/mathworks/toolbox/distcomp/ui/MatlabPoolIndicator +instanceKlass com/mathworks/ddux/JSBridge$DataSubscriber +instanceKlass com/mathworks/ddux/JSBridge$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$5 +instanceKlass com/mathworks/toolstrip/accessories/TSRobot +instanceKlass java/awt/AWTEvent$2 +instanceKlass java/awt/LightweightDispatcher$1 +instanceKlass java/awt/Container$MouseEventTargetFilter +instanceKlass java/awt/Container$EventTargetFilter +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$UpdateEvent +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28$1 +instanceKlass java/awt/KeyboardFocusManager$LightweightFocusRequest +instanceKlass java/awt/DefaultKeyboardFocusManager$TypeAheadMarker +instanceKlass java/awt/KeyboardFocusManager$HeavyweightFocusRequest +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$38 +instanceKlass com/mathworks/util/tree/TreeUtils$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$4$1 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$6 +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$3 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannel$a +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$11 +instanceKlass com/google/gson/internal/bind/TypeAdapters$32 +instanceKlass com/google/gson/internal/JsonReaderInternalAccess +instanceKlass com/mathworks/install_impl/usage/NonCustomerFacingUsageStrategy +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$3 +instanceKlass com/mathworks/mde/liveeditor/ActionManager$3 +instanceKlass com/mathworks/mde/liveeditor/ActionManager$1 +instanceKlass com/mathworks/mde/liveeditor/ActionManager$8 +instanceKlass com/mathworks/connector/json/OpaqueMessage +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils$1 +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils +instanceKlass com/mathworks/pathdataservice/PathDataService$1 +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceListener +instanceKlass com/mathworks/searchservice/SearchService$1 +instanceKlass com/mathworks/mde/liveeditor/ActionManager +instanceKlass com/mathworks/fileiconprovider/FileIconProvider$1 +instanceKlass javax/swing/OverlayLayout +instanceKlass sun/awt/image/ImageDecoder$1 +instanceKlass com/google/gson/internal/Primitives +instanceKlass com/google/gson/internal/ConstructorConstructor$3 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService$1$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService$1$1 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$1 +instanceKlass com/jidesoft/popup/JidePopup$17 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceImpl$2 +instanceKlass com/jidesoft/popup/JidePopup$16 +instanceKlass com/jidesoft/popup/JidePopup$15 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceImpl +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$4 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$2 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$2 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$3 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$5 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$4 +instanceKlass sun/awt/EventListenerAggregate +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$1 +instanceKlass com/mathworks/install_impl/usage/CustomerFacingUsageStrategy +instanceKlass com/mathworks/install/usage/UsageStrategy +instanceKlass com/mathworks/install_impl/usage/UsageStrategyFactory +instanceKlass com/mathworks/install_impl/InstallableProductImpl$InstallableComponentVisitor +instanceKlass org/jdom/output/Format$DefaultEscapeStrategy +instanceKlass org/jdom/output/Format$TextMode +instanceKlass org/jdom/output/EscapeStrategy +instanceKlass org/jdom/output/Format +instanceKlass org/jdom/output/NamespaceStack +instanceKlass org/jdom/output/XMLOutputter +instanceKlass com/mathworks/install_impl/ComponentContainerImpl$ComponentDataFlyweight +instanceKlass com/mathworks/install_impl/ProductImpl +instanceKlass com/mathworks/install_impl/UninstallerComponentContainerHandler +instanceKlass com/mathworks/install_impl/AbstractFileListParser +instanceKlass com/mathworks/install/FileListParser +instanceKlass java/io/SerialCallbackContext +instanceKlass java/io/ObjectStreamClass$ClassDataSlot +instanceKlass java/io/ObjectStreamClass$FieldReflector +instanceKlass java/io/ObjectStreamClass$2 +instanceKlass java/io/ObjectStreamClass$EntryFuture +instanceKlass java/io/ObjectStreamClass$Caches +instanceKlass java/io/ObjectStreamClass +instanceKlass java/io/Bits +instanceKlass sun/misc/ObjectInputFilter$Config$$Lambda$21 +instanceKlass sun/misc/ObjectInputFilter +instanceKlass sun/misc/ObjectInputFilter$Config +instanceKlass java/io/ObjectInputStream$ValidationList +instanceKlass java/io/ObjectInputStream$HandleTable$HandleList +instanceKlass java/io/ObjectInputStream$HandleTable +instanceKlass java/io/ObjectInputStream$$Lambda$20 +instanceKlass sun/misc/JavaObjectInputStreamAccess +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/misc/ObjectStreamClassValidator +instanceKlass java/io/ObjectInputStream$1 +instanceKlass sun/misc/JavaOISAccess +instanceKlass com/mathworks/install/OwningProductResponse +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl$FileCollectionVisitor +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl +instanceKlass com/mathworks/instutil/FolderUtilsImpl +instanceKlass com/mathworks/instutil/ParentFolderOperation +instanceKlass com/mathworks/instutil/FileIO +instanceKlass com/google/inject/internal/InjectorImpl$2$1 +instanceKlass com/google/inject/internal/CircularDependencyProxy +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$5 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$4 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$7 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService$1 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$5 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$4 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$3 +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapIterator +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$2 +instanceKlass com/mathworks/peermodel/events/PeerModelListener +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService +instanceKlass com/mathworks/services/actiondataservice/ActionDataService +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceFactory +instanceKlass com/google/inject/internal/InternalContext$DependencyStack +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService$1 +instanceKlass com/google/inject/internal/InternalContext +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService +instanceKlass com/google/inject/internal/InternalInjectorCreator$1 +instanceKlass com/google/common/collect/Iterators$5 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$2 +instanceKlass com/google/common/collect/TransformedIterator +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser$1 +instanceKlass com/mathworks/mlwidgets/html/MatlabRequestDataListener +instanceKlass com/google/common/collect/FluentIterable +instanceKlass com/mathworks/html/ZoomMouseListener +instanceKlass com/google/common/collect/Iterables +instanceKlass java/lang/reflect/WeakCache$LookupValue +instanceKlass com/google/inject/internal/InjectorImpl$2 +instanceKlass com/mathworks/install/command/NativeDotNet +instanceKlass com/mathworks/html/jxbrowser/chromium/TempDirPermissionUtils +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDownloadHandler +instanceKlass javax/print/attribute/PrintRequestAttributeSet +instanceKlass javax/print/attribute/Attribute +instanceKlass com/mathworks/html/jxbrowser/chromium/MWPrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDialogHandler +instanceKlass com/teamdev/jxbrowser/chromium/swing/a +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/u +instanceKlass com/teamdev/jxbrowser/chromium/internal/TaskExecutor +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/NativeKeyCodes +instanceKlass java/awt/geom/LineIterator +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileLocation +instanceKlass com/teamdev/jxbrowser/chromium/internal/MouseDragEventConverter +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport$a +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/WidgetView$c +instanceKlass com/mathworks/install/input/DeltaData +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/MemoryImage +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport +instanceKlass com/teamdev/jxbrowser/chromium/KeyFilter +instanceKlass com/teamdev/jxbrowser/chromium/events/ConsoleListener +instanceKlass com/mathworks/install/input/ComponentData +instanceKlass com/teamdev/jxbrowser/chromium/events/StatusListener +instanceKlass com/mathworks/install/input/ProductData +instanceKlass com/teamdev/jxbrowser/chromium/events/RenderListener +instanceKlass com/teamdev/jxbrowser/chromium/events/PrintJobListener +instanceKlass com/teamdev/jxbrowser/chromium/LoadHTMLParams +instanceKlass com/teamdev/jxbrowser/chromium/BrowserFunction +instanceKlass com/teamdev/jxbrowser/chromium/JSContext +instanceKlass com/teamdev/jxbrowser/chromium/SearchResult +instanceKlass com/teamdev/jxbrowser/chromium/SearchParams +instanceKlass com/teamdev/jxbrowser/chromium/events/TitleListener +instanceKlass com/teamdev/jxbrowser/chromium/PopupHandler +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMNodeAtPoint +instanceKlass com/teamdev/jxbrowser/chromium/JSValue +instanceKlass com/teamdev/jxbrowser/chromium/LoadDataParams +instanceKlass com/mathworks/install/input/ComponentURLProvider +instanceKlass com/teamdev/jxbrowser/chromium/LoadURLParams +instanceKlass com/mathworks/install/input/InstallationInputFile +instanceKlass com/teamdev/jxbrowser/chromium/ContextMenuHandler +instanceKlass com/teamdev/jxbrowser/chromium/NavigationEntry +instanceKlass sun/awt/image/OffScreenImageSource +instanceKlass com/teamdev/jxbrowser/chromium/FullScreenHandler +instanceKlass com/teamdev/jxbrowser/chromium/internal/ReflectionUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/MacShortcutSupport +instanceKlass com/mathworks/install/udc/UdcResourceKey +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsButtonUI$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$DeactivationListener +instanceKlass com/teamdev/jxbrowser/chromium/events/DisposeListener +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry +instanceKlass com/teamdev/jxbrowser/chromium/u +instanceKlass com/mathworks/instutil/InstallerDownloadURLInfo +instanceKlass com/teamdev/jxbrowser/chromium/r +instanceKlass java/awt/geom/RoundRectIterator +instanceKlass sun/java2d/pipe/ShapeSpanIterator +instanceKlass sun/java2d/pipe/SpanIterator +instanceKlass com/teamdev/jxbrowser/chromium/v +instanceKlass java/awt/PointerInfo +instanceKlass sun/awt/DefaultMouseInfoPeer +instanceKlass java/awt/peer/MouseInfoPeer +instanceKlass java/awt/MouseInfo +instanceKlass com/teamdev/jxbrowser/chromium/x +instanceKlass com/mathworks/install/InputStreamProvider +instanceKlass com/mathworks/install/input/Contents +instanceKlass com/teamdev/jxbrowser/chromium/internal/d +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/p +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$16 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$15 +instanceKlass java/lang/Deprecated +instanceKlass java/util/function/BiConsumer +instanceKlass com/google/inject/util/Types +instanceKlass com/mathworks/install/ComponentAggregator +instanceKlass com/mathworks/install_impl/ProductInstallerImpl$ComponentVisitor +instanceKlass com/mathworks/install_impl/XMLParserImpl +instanceKlass com/mathworks/install/XMLParser +instanceKlass com/mathworks/install/ComponentContainerHandler +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler$1 +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$2 +instanceKlass com/mathworks/install/input/ComponentSourceProvider +instanceKlass com/mathworks/install/InstallableComponent +instanceKlass com/mathworks/install_impl/InstallableProductImpl +instanceKlass com/mathworks/install/InstallableProduct +instanceKlass com/mathworks/install/ComponentData +instanceKlass com/google/inject/internal/SingleParameterInjector +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$1 +instanceKlass com/google/inject/internal/cglib/reflect/$FastMember +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory +instanceKlass com/google/inject/internal/ConstructorInjector +instanceKlass com/google/inject/internal/ConstructionProxy +instanceKlass com/google/inject/internal/cglib/proxy/$CallbackFilter +instanceKlass com/google/inject/internal/ProxyFactory +instanceKlass com/google/inject/internal/MembersInjectorImpl +instanceKlass com/google/inject/internal/EncounterImpl +instanceKlass com/google/inject/internal/ConstructorBindingImpl$Factory +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserEvent +instanceKlass com/google/inject/ProvidedBy +instanceKlass com/google/inject/ImplementedBy +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback$ProvisionCallback +instanceKlass com/google/inject/internal/ProviderInternalFactory +instanceKlass com/google/inject/spi/ProvidesMethodTargetVisitor +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback +instanceKlass com/google/common/cache/LocalCache$AbstractReferenceEntry +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore$KeyBinding +instanceKlass com/google/inject/internal/InternalFactoryToProviderAdapter +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory$ReentrantCycleDetectingLock +instanceKlass com/google/inject/internal/ConstructionContext +instanceKlass com/google/inject/internal/SingletonScope$1 +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter +instanceKlass com/google/inject/internal/FactoryProxy +instanceKlass com/google/inject/internal/util/Classes +instanceKlass com/google/inject/spi/ExposedBinding +instanceKlass com/google/inject/internal/CreationListener +instanceKlass com/google/inject/internal/InjectorShell$LoggerFactory +instanceKlass com/google/inject/internal/InjectorShell$InjectorFactory +instanceKlass com/google/inject/internal/Initializables$1 +instanceKlass com/google/inject/internal/Initializables +instanceKlass com/google/inject/internal/ConstantFactory +instanceKlass com/google/inject/internal/InjectorShell +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadAdapter +instanceKlass com/teamdev/jxbrowser/chromium/w +instanceKlass com/teamdev/jxbrowser/chromium/internal/PluginManagerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCacheStorage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCookieStorage +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore +instanceKlass com/teamdev/jxbrowser/chromium/internal/DialogHandlerDelegate +instanceKlass com/google/inject/spi/TypeEncounter +instanceKlass com/google/inject/internal/SingleMemberInjector +instanceKlass com/google/inject/internal/MembersInjectorStore +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$4 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$2 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$1 +instanceKlass com/google/inject/spi/TypeConverterBinding +instanceKlass com/google/inject/matcher/AbstractMatcher +instanceKlass com/google/inject/matcher/Matchers +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$5 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter$a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageUIDGenerator +instanceKlass com/google/inject/internal/ConstructionProxyFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelIDGenerator +instanceKlass com/google/inject/internal/FailableCache +instanceKlass com/google/inject/internal/ConstructorInjectorStore +instanceKlass com/teamdev/jxbrowser/chromium/internal/ProxyParams +instanceKlass com/google/inject/internal/DeferredLookups +instanceKlass com/google/inject/internal/InjectorImpl$BindingsMultimap +instanceKlass com/google/inject/spi/ConvertedConstantBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/o +instanceKlass com/google/inject/spi/ProviderBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannel +instanceKlass com/google/inject/internal/InjectorImpl +instanceKlass com/google/inject/internal/Lookups +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketInfo +instanceKlass com/google/inject/internal/InjectorImpl$InjectorOptions +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageField +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageSerializer +instanceKlass com/mathworks/mlwidgets/workspace/MatlabCustomClassRegistry +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessagesBufferIterator +instanceKlass java/net/Socket$3 +instanceKlass java/net/Socket$2 +instanceKlass com/google/inject/spi/DefaultBindingScopingVisitor +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Channel +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/n +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelReader +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelStream +instanceKlass java/net/Proxy +instanceKlass com/mathworks/webproxy/ProxyConfigurationVisitor +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$5 +instanceKlass com/mathworks/instutil/IOObserver +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$4 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$3 +instanceKlass com/mathworks/install/InstallFlowControlHandler +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$2 +instanceKlass com/mathworks/install/archive/Archive +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$1 +instanceKlass com/mathworks/instutil/DefaultSecurityOverrideImpl +instanceKlass sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter +instanceKlass sun/util/locale/provider/TimeZoneNameUtility +instanceKlass java/util/logging/LogRecord +instanceKlass com/google/gson/annotations/SerializedName +instanceKlass com/mathworks/settings_service/SettingsService$1 +instanceKlass com/mathworks/mde/desk/PrefsFetcher$2 +instanceKlass com/mathworks/mde/desk/PrefsFetcher$1 +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService$1 +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService$1 +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer$2 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$3 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$2 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$1 +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService$1 +instanceKlass com/mathworks/mldosharingservice/SharingDataService +instanceKlass com/mathworks/addons_product/MatlabOnlineStrategy +instanceKlass com/mathworks/instutil/ResourceDefaultLocaleImpl +instanceKlass com/mathworks/instutil/ResourceLocale +instanceKlass com/mathworks/settings_service/SettingsService +instanceKlass com/mathworks/instutil/ResourceLocaleFactory +instanceKlass org/jdom/ContentList$FilterListIterator +instanceKlass com/mathworks/searchservice/SearchService +instanceKlass com/mathworks/pathdataservice/PathDataService +instanceKlass org/jdom/filter/AbstractFilter +instanceKlass com/mathworks/fileiconprovider/FileIconProvider +instanceKlass org/jdom/Namespace +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer +instanceKlass org/jdom/filter/Filter +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService +instanceKlass org/jdom/Verifier +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService +instanceKlass com/mathworks/mde/explorer/JavaScriptCurrentFolderInstance +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$LocatorProxy +instanceKlass org/xml/sax/ext/Locator2 +instanceKlass com/mathworks/widgets/desk/PreferencePanel$Tool +instanceKlass com/mathworks/mde/desk/ContributedTools +instanceKlass com/mathworks/mde/desk/PrefsFetcher$Handler +instanceKlass com/mathworks/mde/desk/PrefsFetcher +instanceKlass com/mathworks/matlabserver/connector/impl/ConnectorLifecycleHelperImpl$1 +instanceKlass org/apache/xerces/util/URI +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycle +instanceKlass com/mathworks/mde/desk/ToolsFetcher$ToolData +instanceKlass com/mathworks/mde/desk/ToolsFetcher$Handler +instanceKlass com/mathworks/mde/desk/ToolsFetcher +instanceKlass org/apache/xerces/util/SAXMessageFormatter +instanceKlass org/jdom/input/BuilderErrorHandler +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$3 +instanceKlass org/apache/xerces/parsers/SecuritySupport$3 +instanceKlass org/xml/sax/DocumentHandler +instanceKlass javax/xml/parsers/SAXParser +instanceKlass javax/xml/parsers/SAXParserFactory +instanceKlass org/jdom/input/JAXPParserFactory +instanceKlass org/jdom/Document +instanceKlass org/jdom/input/TextBuffer +instanceKlass org/jdom/Content +instanceKlass org/jdom/Parent +instanceKlass org/xml/sax/ext/DeclHandler +instanceKlass org/xml/sax/ext/LexicalHandler +instanceKlass org/jdom/DefaultJDOMFactory +instanceKlass org/jdom/JDOMFactory +instanceKlass org/jdom/input/SAXBuilder +instanceKlass com/mathworks/instutil/VersionInfo +instanceKlass sun/nio/fs/WindowsUriSupport +instanceKlass com/mathworks/instutil/logging/AbstractAppLogger +instanceKlass com/mathworks/instutil/ExecutorServiceManagerImpl +instanceKlass com/mathworks/webproxy/ProxyConfiguration +instanceKlass com/mathworks/matlabserver/connectorcommon/embeddedwebserver/WebServerConfig +instanceKlass com/mathworks/instutil/Downloader +instanceKlass com/mathworks/peermodel/impl/ObservableImpl$PeerNodeListenerAdapter +instanceKlass com/google/common/collect/SortedIterable +instanceKlass com/mathworks/peermodel/PeerNodeVisitor$Cancellable +instanceKlass com/mathworks/peermodel/impl/PeerNodeImpl +instanceKlass com/mathworks/peermodel/PeerNodeSyncable +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/a +instanceKlass com/mathworks/instutil/ExecutorServiceManager +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcessLogger +instanceKlass com/mathworks/install_impl/command/DotNetFrameworkImpl +instanceKlass com/mathworks/peermodel/ManagerInfo +instanceKlass java/lang/ProcessImpl$2 +instanceKlass com/mathworks/install/command/DotNetFramework +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$2 +instanceKlass com/mathworks/instutil/RegistryImpl +instanceKlass com/mathworks/instutil/ProcessExecutorImpl +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$1 +instanceKlass com/mathworks/instutil/ProcessExecutor +instanceKlass com/mathworks/instutil/MWNativeLibraryLoader +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer +instanceKlass com/mathworks/instutil/logging/AppLogger +instanceKlass com/mathworks/instutil/WinTaskSchedulerImpl +instanceKlass com/mathworks/instutil/WinTaskScheduler +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactoryImpl +instanceKlass com/mathworks/peermodel/impl/ObservableImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactory +instanceKlass com/mathworks/install_impl/ApplicationSpecificCommandAdapter +instanceKlass com/mathworks/install/ApplicationSpecificCommand +instanceKlass com/mathworks/install_impl/InstallOptionProviderImpl +instanceKlass com/mathworks/install/InstallOptionProvider +instanceKlass java/lang/Process +instanceKlass com/mathworks/peermodel/events/Event +instanceKlass com/mathworks/peermodel/PeerNodeVisitor +instanceKlass java/lang/ProcessBuilder +instanceKlass com/mathworks/peermodel/PeerNode +instanceKlass com/mathworks/instutil/SecurityOverride +instanceKlass com/mathworks/peermodel/events/PeerNodeListenable +instanceKlass com/mathworks/instutil/LocalizedHelpPathFinder +instanceKlass com/mathworks/instutil/PlatformImpl +instanceKlass com/mathworks/peermodel/impl/PeerModelManagerImpl +instanceKlass com/mathworks/peermodel/PeerModelManagerSyncable +instanceKlass com/mathworks/peermodel/events/ObservableSyncable +instanceKlass com/mathworks/instutil/LicenseNumberProvider +instanceKlass com/mathworks/install/CommandContainer +instanceKlass com/mathworks/peermodel/events/PeerNodeAdapter +instanceKlass com/mathworks/peermodel/events/PeerNodeListener +instanceKlass com/mathworks/mde/liveeditor/debug/PeerModelBreakpointDataStoreService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointFileService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$2 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$5 +instanceKlass com/mathworks/install_impl/input/UpdateComponentContainerImpl +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService +instanceKlass com/mathworks/install/UpdateComponentContainer +instanceKlass com/mathworks/install_impl/input/UpdateProductContainerImpl +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService +instanceKlass com/mathworks/install/UpdateProductContainer +instanceKlass com/mathworks/install_impl/input/JSONInstallationFileParserImpl +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$7 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$6 +instanceKlass com/mathworks/install/JSONInstallationFileParser +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$5 +instanceKlass com/mathworks/install_impl/input/AbstractInstallationInputFileStrategy +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$3 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$8 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$4 +instanceKlass com/mathworks/install/input/InstallationInputFileStrategy +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$2 +instanceKlass com/mathworks/install_impl/input/InstallationInputFileFactoryImpl +instanceKlass com/mathworks/connector/message_service/bayeux/PublishRequest +instanceKlass com/mathworks/install/input/InstallationInputFileFactory +instanceKlass com/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator +instanceKlass com/mathworks/install/input/ComponentSourceFactory +instanceKlass com/google/gson/internal/Streams +instanceKlass com/google/gson/internal/LinkedTreeMap$Node +instanceKlass com/google/gson/internal/LinkedTreeMap$1 +instanceKlass com/google/inject/internal/MoreTypes$WildcardTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$GenericArrayTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl +instanceKlass sun/reflect/generics/tree/VoidDescriptor +instanceKlass sun/reflect/generics/tree/ArrayTypeSignature +instanceKlass com/google/gson/internal/ConstructorConstructor$11 +instanceKlass com/google/inject/internal/MoreTypes$ParameterizedTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$CompositeType +instanceKlass sun/reflect/generics/tree/TypeVariableSignature +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/ExtraStepOnLastLineOfFunctionInterceptor +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$StackCallback +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$9 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller +instanceKlass com/google/inject/internal/asm/$Handler +instanceKlass com/mathworks/services/mlx/service/SerializationService$3 +instanceKlass com/mathworks/services/mlx/service/SerializationService$2 +instanceKlass com/mathworks/services/mlx/service/SerializationService$1 +instanceKlass com/mathworks/services/mlx/service/SerializationService +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$4 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$2 +instanceKlass com/google/inject/internal/cglib/core/$Block +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService$Subscription +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$14 +instanceKlass com/mathworks/messageservice/MessageUtils +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$13 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$2 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$12 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$SingletonHolder +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$11 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$10 +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientPropertiesResponse +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$GetIndexCallback +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientProperties +instanceKlass com/google/inject/internal/cglib/core/$MethodInfoTransformer +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProductsResponse +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$6 +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProducts +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$5 +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDirResponse +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$3 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$1 +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDir +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl$OpenWithBrowser +instanceKlass com/google/inject/internal/asm/$Context +instanceKlass com/google/inject/internal/asm/$Attribute +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenOrCreateInEditor +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenToLineInEditor +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonceResponse +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonce +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonceResponse +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonce +instanceKlass com/mathworks/matlabserver/connector/http/AddStaticContentPath +instanceKlass com/teamdev/jxbrowser/chromium/internal/LibraryLoader +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener$MatlabExecutionStateReturnVal +instanceKlass com/google/inject/internal/asm/$ClassReader +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener +instanceKlass com/google/inject/internal/cglib/core/$DebuggingClassWriter$1 +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoResponse +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$9 +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoRequest +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$8 +instanceKlass com/google/inject/internal/cglib/core/$Local +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$2 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$7 +instanceKlass com/google/inject/internal/asm/$Edge +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$1 +instanceKlass com/google/inject/internal/cglib/core/$ClassEmitter$FieldInfo +instanceKlass com/mathworks/connector/Promise +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ArrayDelimiters +instanceKlass com/mathworks/connector/Future +instanceKlass com/google/inject/internal/cglib/core/$ProcessArrayCallback +instanceKlass com/mathworks/connector/cosg/CosgRegisterOpaqueType +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ParameterTyper +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$CosgHandlerContainer +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateResponseMessageDO +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateRequestMessageDO +instanceKlass com/mathworks/cosg/CosgResponseWrapper +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateImpl +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$2 +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$1 +instanceKlass com/google/inject/internal/cglib/core/$Customizer +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper$MethodWrapperKey +instanceKlass com/mathworks/peermodel/synchronizer/utils/ClientPagedDataJSONConverter +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper +instanceKlass com/google/inject/internal/cglib/core/$DuplicatesPredicate +instanceKlass org/aopalliance/intercept/MethodInterceptor +instanceKlass com/mathworks/peermodel/pageddata/PagedDataFactory +instanceKlass org/aopalliance/intercept/Interceptor +instanceKlass org/aopalliance/aop/Advice +instanceKlass com/mathworks/peermodel/pageddata/impl/PagedDataImpl +instanceKlass com/mathworks/peermodel/pageddata/ClientPagedData +instanceKlass com/mathworks/peermodel/pageddata/ServerPagedData +instanceKlass com/google/inject/spi/Message +instanceKlass com/google/inject/spi/ProvisionListener +instanceKlass com/google/inject/spi/TypeListener +instanceKlass com/google/inject/spi/TypeConverter +instanceKlass com/google/inject/matcher/Matcher +instanceKlass com/mathworks/peermodel/PeerSynchronizerFactory +instanceKlass com/google/inject/MembersInjector +instanceKlass com/mathworks/peermodel/synchronizer/PeerSynchronizer +instanceKlass java/lang/AssertionStatusDirectives +instanceKlass com/mathworks/peermodel/events/Observer +instanceKlass com/mathworks/peermodel/PeerSynchronizer +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$2 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$1 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils +instanceKlass com/google/inject/internal/cglib/core/$VisibilityPredicate +instanceKlass com/mathworks/peermodel/PeerModelManagers +instanceKlass com/mathworks/peermodel/PeerModelManager +instanceKlass com/mathworks/peermodel/events/PeerModelListenable +instanceKlass com/mathworks/peermodel/events/PeerEventObservable +instanceKlass com/google/inject/internal/asm/$Frame +instanceKlass com/mathworks/peermodel/events/Observable +instanceKlass com/google/inject/internal/cglib/core/$LocalVariablesSorter$State +instanceKlass com/mathworks/peermodel/PeerModelBuilderImpl +instanceKlass com/google/inject/internal/cglib/core/$MethodInfo +instanceKlass com/mathworks/peermodel/PeerModelBuilder +instanceKlass com/mathworks/peermodel/synchronizer/utils/PeerModelInitialize +instanceKlass com/google/inject/internal/asm/$Label +instanceKlass com/mathworks/connector/message_service/impl/JniMessageServiceAdaptorImpl$1 +instanceKlass com/mathworks/messageservice/MessageServiceFactory +instanceKlass com/google/gson/BufferedImageConverter +instanceKlass com/mathworks/messageservice/json/converters/JSONTypeConverter +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$1 +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl$MessageJSONCustomConverter +instanceKlass com/google/inject/internal/cglib/core/$Constants +instanceKlass com/google/inject/internal/asm/$Opcodes +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl +instanceKlass com/google/inject/internal/asm/$Type +instanceKlass com/mathworks/messageservice/json/JSONCustomConverters +instanceKlass com/google/inject/internal/cglib/core/$Signature +instanceKlass com/mathworks/messageservice/MessageService +instanceKlass com/google/inject/internal/cglib/core/$CollectionUtils +instanceKlass com/mathworks/messageservice/Message +instanceKlass com/mathworks/messageservice/ContextState +instanceKlass com/google/inject/internal/cglib/core/$TypeUtils +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService +instanceKlass com/google/inject/internal/cglib/core/$ObjectSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$ProcessSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$Transformer +instanceKlass com/google/inject/internal/cglib/core/$ClassInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/SharedMemoryLibrary +instanceKlass com/mathworks/messageservice/MessageServiceOpaque +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/d +instanceKlass java/net/Socket +instanceKlass com/google/inject/internal/asm/$Item +instanceKlass com/google/inject/internal/asm/$ByteVector +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/LatchUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/e +instanceKlass sun/net/ResourceManager +instanceKlass com/google/inject/internal/asm/$FieldVisitor +instanceKlass java/net/DatagramPacket +instanceKlass java/net/DatagramSocket$1 +instanceKlass java/net/AbstractPlainDatagramSocketImpl$1 +instanceKlass java/net/DatagramSocketImpl +instanceKlass com/google/inject/internal/asm/$MethodVisitor +instanceKlass java/net/DefaultDatagramSocketImplFactory$1 +instanceKlass java/net/DefaultDatagramSocketImplFactory +instanceKlass java/net/DatagramSocket +instanceKlass com/google/inject/internal/asm/$AnnotationVisitor +instanceKlass sun/net/NetHooks +instanceKlass java/net/InetSocketAddress$InetSocketAddressHolder +instanceKlass java/net/PlainSocketImpl$1 +instanceKlass com/google/inject/internal/asm/$ClassVisitor +instanceKlass java/net/AbstractPlainSocketImpl$1 +instanceKlass com/google/inject/internal/cglib/core/$DefaultGeneratorStrategy +instanceKlass java/net/SocketImpl +instanceKlass java/net/SocketOptions +instanceKlass com/google/inject/internal/cglib/reflect/$FastClass +instanceKlass java/net/SocksConsts +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$Source +instanceKlass java/net/ServerSocket +instanceKlass sun/net/util/IPAddressUtil +instanceKlass com/google/inject/internal/cglib/core/$Predicate +instanceKlass com/google/inject/internal/cglib/core/$GeneratorStrategy +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketUtil +instanceKlass com/teamdev/jxbrowser/chromium/Browser$b +instanceKlass com/google/inject/internal/cglib/core/$DefaultNamingPolicy +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator +instanceKlass com/google/inject/internal/cglib/core/$ClassGenerator +instanceKlass com/teamdev/jxbrowser/chromium/ProxyConfig +instanceKlass com/mathworks/html/jxbrowser/chromium/ProxyHandler +instanceKlass com/teamdev/jxbrowser/chromium/PluginManager +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMDocument +instanceKlass com/teamdev/jxbrowser/chromium/dom/SearchContext +instanceKlass com/google/inject/internal/cglib/core/$NamingPolicy +instanceKlass com/google/inject/internal/BytecodeGen +instanceKlass com/teamdev/jxbrowser/chromium/DownloadItem +instanceKlass com/teamdev/jxbrowser/chromium/Callback +instanceKlass com/google/inject/Exposed +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadListener +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserListener +instanceKlass com/teamdev/jxbrowser/chromium/CacheStorage +instanceKlass com/teamdev/jxbrowser/chromium/CookieStorage +instanceKlass com/google/inject/internal/ProviderMethod +instanceKlass com/teamdev/jxbrowser/chromium/Browser +instanceKlass com/google/inject/spi/ProvidesMethodBinding +instanceKlass com/google/inject/spi/ProviderWithExtensionVisitor +instanceKlass com/google/inject/spi/ProviderLookup$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/MWNetworkDelegate +instanceKlass com/google/inject/spi/ProviderWithDependencies +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultNetworkDelegate +instanceKlass com/google/inject/spi/ProviderLookup +instanceKlass com/teamdev/jxbrowser/chromium/internal/BrowserContextIDGenerator +instanceKlass com/google/inject/spi/Dependency +instanceKlass com/google/inject/internal/Nullability +instanceKlass com/teamdev/jxbrowser/chromium/FormData +instanceKlass com/teamdev/jxbrowser/chromium/PostData +instanceKlass com/mathworks/install_impl/archive/zip/commonscompress/CommonsCompressArchiveFactory +instanceKlass com/teamdev/jxbrowser/chromium/HttpHeaders +instanceKlass com/mathworks/install/archive/ArchiveFactory +instanceKlass com/mathworks/install_impl/DefaultProductCorrelatorImpl +instanceKlass com/mathworks/install/ProductCorrelator +instanceKlass com/mathworks/install/udc/NoOpUsageDataCollectorImpl +instanceKlass com/mathworks/install/udc/UsageDataCollector +instanceKlass com/teamdev/jxbrowser/chromium/NetworkService +instanceKlass com/mathworks/install_impl/InstallerDownloadInfoContainerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelAdapter +instanceKlass com/mathworks/install/InstallerDownloadInfoContainer +instanceKlass com/mathworks/install_impl/XMLParseStrategyForInstall +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelAdapter +instanceKlass com/mathworks/install/XMLParseStrategy +instanceKlass com/mathworks/install_impl/ProductDownloaderImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/c +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumEventQueue +instanceKlass com/mathworks/install/ProductDownloader +instanceKlass com/mathworks/install_impl/ContentOptimizerImpl +instanceKlass com/teamdev/jxbrowser/chromium/ZoomService +instanceKlass com/mathworks/install/ContentOptimizer +instanceKlass com/mathworks/install_impl/XMLInstallationFileParserImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/b +instanceKlass com/mathworks/install/input/XMLInstallationFileParser +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerAdapter +instanceKlass com/mathworks/install_impl/InstalledProductDataVersionImpl +instanceKlass com/mathworks/install/InstalledProductDataVersion +instanceKlass com/mathworks/install_impl/InstallConfigurationPersistenceImpl +instanceKlass com/mathworks/net/hyperlink/HyperlinkProvider +instanceKlass com/teamdev/jxbrowser/chromium/internal/FileUtil +instanceKlass com/mathworks/install/Installer +instanceKlass com/mathworks/install/SoftwareManager +instanceKlass com/mathworks/instutil/IO +instanceKlass com/mathworks/instutil/FolderUtils +instanceKlass com/mathworks/install/service/ServiceFactory +instanceKlass com/mathworks/install/InstallConfigurationPersistence +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor$a +instanceKlass com/mathworks/install/InstallerRequirements +instanceKlass com/mathworks/install/command/CommandFactory +instanceKlass com/mathworks/install/Product +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor +instanceKlass com/google/inject/util/Providers$ConstantProvider +instanceKlass com/google/inject/util/Providers +instanceKlass com/google/inject/Inject +instanceKlass javax/inject/Inject +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMembers +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMember +instanceKlass com/google/inject/spi/InjectionPoint +instanceKlass java/text/DontCareFieldPosition$1 +instanceKlass java/text/CalendarBuilder +instanceKlass com/mathworks/install_impl/ProductInstallerImpl +instanceKlass com/mathworks/install_impl/status/InstallStatusObserverAdapter +instanceKlass javax/inject/Named +instanceKlass com/google/inject/Key$AnnotationInstanceStrategy +instanceKlass com/google/common/util/concurrent/Uninterruptibles +instanceKlass com/google/common/base/Platform +instanceKlass com/google/common/base/Stopwatch +instanceKlass com/google/common/util/concurrent/ExecutionList +instanceKlass com/teamdev/jxbrowser/chromium/ao +instanceKlass com/google/common/util/concurrent/AbstractFuture +instanceKlass com/google/common/util/concurrent/ListenableFuture +instanceKlass com/google/common/cache/LocalCache$LoadingValueReference +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/l +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/k +instanceKlass java/lang/annotation/Documented +instanceKlass java/lang/annotation/Inherited +instanceKlass java/lang/annotation/Target +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler +instanceKlass sun/reflect/annotation/AnnotationParser$1 +instanceKlass sun/reflect/annotation/ExceptionProxy +instanceKlass com/teamdev/jxbrowser/chromium/al +instanceKlass sun/reflect/annotation/AnnotationType$1 +instanceKlass com/teamdev/jxbrowser/chromium/an +instanceKlass java/lang/annotation/Retention +instanceKlass javax/inject/Qualifier +instanceKlass com/google/inject/BindingAnnotation +instanceKlass javax/inject/Scope +instanceKlass com/google/inject/ScopeAnnotation +instanceKlass com/teamdev/jxbrowser/chromium/am +instanceKlass com/google/inject/internal/Annotations$AnnotationChecker +instanceKlass com/google/inject/internal/Annotations$3 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcess +instanceKlass com/google/inject/internal/Annotations +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelListener +instanceKlass com/google/inject/name/NamedImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelStream +instanceKlass com/google/inject/name/Named +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamListener +instanceKlass com/google/inject/name/Names +instanceKlass com/mathworks/install/status/InstallStatusObserver +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Server +instanceKlass com/mathworks/install_impl/XMLParserFactoryImpl +instanceKlass com/mathworks/install/XMLParserFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC$a +instanceKlass com/mathworks/install_impl/ComponentInstallerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChromiumProcessListener +instanceKlass com/mathworks/install/ComponentInstaller +instanceKlass com/mathworks/install_impl/ComponentContainerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerListener +instanceKlass com/mathworks/install/ComponentContainer +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Sender +instanceKlass com/mathworks/install_impl/ProductContainerImpl +instanceKlass com/teamdev/jxbrowser/chromium/BrowserContext +instanceKlass com/google/inject/internal/Scoping +instanceKlass com/google/inject/internal/InternalFactory +instanceKlass com/google/inject/spi/ProviderKeyBinding +instanceKlass com/google/inject/spi/ProviderInstanceBinding +instanceKlass sun/nio/fs/WindowsSecurity +instanceKlass sun/nio/fs/AbstractAclFileAttributeView +instanceKlass sun/nio/fs/DynamicFileAttributeView +instanceKlass java/nio/file/attribute/AclFileAttributeView +instanceKlass java/nio/file/attribute/FileOwnerAttributeView +instanceKlass com/google/inject/internal/DelayedInitialize +instanceKlass com/google/inject/spi/ConstructorBinding +instanceKlass sun/nio/fs/WindowsLinkSupport +instanceKlass sun/nio/fs/WindowsFileSystemProvider$1 +instanceKlass com/google/inject/spi/InstanceBinding +instanceKlass com/google/inject/spi/HasDependencies +instanceKlass com/google/inject/spi/LinkedKeyBinding +instanceKlass com/google/inject/spi/UntargettedBinding +instanceKlass com/google/inject/internal/BindingImpl +instanceKlass com/google/common/base/Suppliers$MemoizingSupplier +instanceKlass com/google/inject/Key$1 +instanceKlass com/google/inject/Key$AnnotationStrategy +instanceKlass com/mathworks/install/ProductContainer +instanceKlass com/google/common/base/Optional +instanceKlass com/google/inject/Provides +instanceKlass com/google/inject/internal/ProviderMethodsModule$Signature +instanceKlass com/teamdev/jxbrowser/chromium/ProductInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumBuild +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserVersionInfo +instanceKlass com/teamdev/jxbrowser/chromium/NetworkDelegate +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserContextRegistry +instanceKlass com/google/common/collect/ImmutableMap$Builder +instanceKlass com/mathworks/html/jxbrowser/chromium/ChromiumLocaleUtils +instanceKlass com/google/inject/internal/MoreTypes +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DebugWindowListener +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DefaultDebugListener +instanceKlass com/google/inject/TypeLiteral +instanceKlass com/teamdev/jxbrowser/chromium/internal/Environment +instanceKlass com/teamdev/jxbrowser/chromium/DownloadHandler +instanceKlass com/google/inject/spi/ModuleAnnotatedMethodScanner +instanceKlass javax/inject/Singleton +instanceKlass com/teamdev/jxbrowser/chromium/PrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/DialogHandler +instanceKlass com/google/inject/spi/ElementSource +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserViewBuilder +instanceKlass com/google/inject/spi/ScopeBinding +instanceKlass com/google/inject/Scopes$2 +instanceKlass com/teamdev/jxbrowser/chromium/BrowserPreferences +instanceKlass com/google/inject/Scopes$1 +instanceKlass com/google/common/collect/AbstractMapEntry +instanceKlass com/google/common/collect/LinkedHashMultimap$ValueSetLink +instanceKlass com/google/common/collect/SetMultimap +instanceKlass com/google/inject/internal/CycleDetectingLock +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory +instanceKlass com/google/inject/Provider +instanceKlass javax/inject/Provider +instanceKlass com/google/inject/internal/SingletonScope +instanceKlass com/google/inject/Scope +instanceKlass com/google/inject/Scopes +instanceKlass com/google/inject/Singleton +instanceKlass com/google/inject/spi/Elements$ModuleInfo +instanceKlass com/google/inject/PrivateModule +instanceKlass com/google/inject/internal/util/StackTraceElements$InMemoryStackTraceElement +instanceKlass com/google/inject/internal/util/StackTraceElements +instanceKlass com/google/inject/spi/ModuleSource +instanceKlass com/google/inject/internal/InternalFlags$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$1 +instanceKlass com/mathworks/util/TypeFilter$1 +instanceKlass com/google/inject/internal/InternalFlags +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileTypeFinder +instanceKlass com/google/inject/internal/ProviderMethodsModule +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2$1 +instanceKlass com/google/common/collect/Hashing +instanceKlass com/google/inject/internal/AbstractBindingBuilder +instanceKlass com/google/inject/binder/ConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedElementBuilder +instanceKlass com/google/inject/binder/AnnotatedConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedBindingBuilder +instanceKlass com/google/inject/binder/LinkedBindingBuilder +instanceKlass com/google/inject/binder/ScopedBindingBuilder +instanceKlass com/google/inject/spi/Elements$RecordingBinder +instanceKlass com/google/inject/PrivateBinder +instanceKlass com/google/inject/Binding +instanceKlass com/google/inject/spi/DefaultBindingTargetVisitor +instanceKlass com/google/inject/spi/BindingTargetVisitor +instanceKlass com/google/inject/spi/Elements +instanceKlass com/google/inject/internal/InjectorShell$RootModule +instanceKlass sun/awt/geom/Edge +instanceKlass sun/awt/geom/ChainEnd +instanceKlass sun/awt/geom/CurveLink +instanceKlass sun/awt/geom/AreaOp$1 +instanceKlass sun/awt/geom/AreaOp +instanceKlass sun/awt/geom/Curve +instanceKlass java/awt/geom/Area +instanceKlass java/util/concurrent/ConcurrentLinkedQueue$Node +instanceKlass com/google/common/cache/Weigher +instanceKlass com/google/common/cache/LocalCache$1 +instanceKlass com/google/common/util/concurrent/ListeningScheduledExecutorService +instanceKlass com/google/common/util/concurrent/ListeningExecutorService +instanceKlass com/google/common/util/concurrent/MoreExecutors +instanceKlass com/jidesoft/grid/HasFocusCellRenderer +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$RowLoadRequest +instanceKlass com/mathworks/util/TypeFilter$TargetedRequest +instanceKlass com/google/common/cache/LocalCache$ReferenceEntry +instanceKlass com/jidesoft/swing/NavigationComponent +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUIDelegate$Cell +instanceKlass com/google/common/cache/CacheLoader +instanceKlass com/google/common/cache/LocalCache$LocalManualCache +instanceKlass com/jidesoft/grid/HeaderStyleModel +instanceKlass com/google/inject/internal/WeakKeySet$1 +instanceKlass com/google/common/cache/LocalCache$StrongValueReference +instanceKlass com/google/common/cache/LocalCache$ValueReference +instanceKlass com/google/common/cache/CacheBuilder$2 +instanceKlass com/google/common/cache/CacheStats +instanceKlass com/google/common/base/Suppliers$SupplierOfInstance +instanceKlass com/google/common/base/Suppliers +instanceKlass com/google/common/cache/CacheBuilder$1 +instanceKlass com/google/common/cache/AbstractCache$StatsCounter +instanceKlass com/google/common/cache/LoadingCache +instanceKlass com/google/common/cache/Cache +instanceKlass com/google/common/base/Supplier +instanceKlass com/jidesoft/plaf/vsnet/VsnetUtils +instanceKlass com/google/common/cache/CacheBuilder +instanceKlass com/google/common/cache/RemovalListener +instanceKlass com/google/inject/internal/WeakKeySet +instanceKlass com/google/inject/internal/State$1 +instanceKlass com/google/inject/internal/InheritingState +instanceKlass java/awt/geom/Path2D$Iterator +instanceKlass com/google/inject/internal/ProcessedBindingData +instanceKlass sun/dc/pr/Rasterizer$ConsumerDisposer +instanceKlass sun/dc/pr/PathDasher$1 +instanceKlass sun/dc/pr/PathDasher +instanceKlass com/google/inject/spi/Element +instanceKlass sun/awt/geom/PathConsumer2D +instanceKlass com/google/inject/spi/DefaultElementVisitor +instanceKlass sun/dc/pr/PathStroker$1 +instanceKlass sun/dc/pr/PathStroker +instanceKlass com/google/inject/internal/State +instanceKlass com/google/inject/internal/InjectorShell$Builder +instanceKlass com/google/inject/internal/Initializable +instanceKlass sun/dc/pr/PathFiller$1 +instanceKlass sun/dc/pr/PathFiller +instanceKlass sun/dc/path/PathConsumer +instanceKlass com/google/inject/internal/Initializer +instanceKlass sun/dc/pr/Rasterizer +instanceKlass sun/java2d/pipe/AATileGenerator +instanceKlass com/google/common/collect/CollectPreconditions +instanceKlass com/google/common/collect/ImmutableCollection$Builder +instanceKlass com/google/inject/internal/util/SourceProvider +instanceKlass com/google/inject/Key +instanceKlass com/google/inject/internal/Errors$Converter +instanceKlass com/google/common/collect/Platform +instanceKlass com/google/inject/internal/Errors +instanceKlass com/google/inject/internal/util/Stopwatch +instanceKlass com/google/inject/internal/ContextualCallable +instanceKlass com/google/inject/Injector +instanceKlass com/google/inject/internal/InternalInjectorCreator +instanceKlass com/google/inject/Guice +instanceKlass com/google/inject/spi/BindingScopingVisitor +instanceKlass com/google/inject/Binder +instanceKlass com/mathworks/instutil/Machine +instanceKlass com/mathworks/instutil/Registry +instanceKlass com/mathworks/instutil/system/HostIdProvider +instanceKlass org/netbeans/editor/DrawGraphics$GraphicsDG$1 +instanceKlass com/google/inject/util/Modules$RealOverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules$EmptyModule +instanceKlass com/google/inject/spi/ElementVisitor +instanceKlass com/google/inject/util/Modules$OverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules +instanceKlass com/mathworks/install/archive/ArchiveInputStreamExtractor +instanceKlass com/mathworks/install/archive/zip/commonscompress/ArchiveEntryExtractor +instanceKlass com/mathworks/install/archive/ArchiveFileExtractor +instanceKlass com/mathworks/install/InstallOption +instanceKlass com/mathworks/install/command/Command +instanceKlass com/mathworks/install_impl/InstallConfigurationAdapter +instanceKlass com/mathworks/install/InstalledProductDataFactory +instanceKlass com/mathworks/install/DefaultDirectoryProvider +instanceKlass com/mathworks/install/InstallerBuilder +instanceKlass com/mathworks/install/SoftwareManagerBuilder +instanceKlass com/mathworks/install/DownloaderBuilderFactory +instanceKlass com/mathworks/install/InstalledProductData +instanceKlass com/mathworks/instutil/MinimalProducts +instanceKlass com/mathworks/install/ProductInstaller +instanceKlass com/mathworks/install/InstallerFactory +instanceKlass com/mathworks/install/InstallConfiguration +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/NonBlockingMessage +instanceKlass com/google/inject/AbstractModule +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/CommonMessage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/Message +instanceKlass com/google/inject/Module +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace +instanceKlass com/mathworks/install_impl/InstalledProductFactory$1 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$Task +instanceKlass com/mathworks/install_impl/InstalledProductFactory +instanceKlass com/mathworks/addons_product/ProductManagerUtils +instanceKlass com/mathworks/addons_product/MatlabDesktopStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategyFactory +instanceKlass org/netbeans/editor/DrawEngine$DrawInfo +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils$1 +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils +instanceKlass org/netbeans/editor/DrawContext +instanceKlass com/mathworks/html/jxbrowser/chromium/logging/JxBrowserChromiumLogger +instanceKlass com/mathworks/html/HtmlPanelSupport +instanceKlass org/netbeans/editor/DrawEngine +instanceKlass com/mathworks/html/jxbrowser/chromium/NavigationHelper +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserChromiumFactory +instanceKlass java/util/Formattable +instanceKlass com/mathworks/mlwidgets/html/ChromiumConfig$1 +instanceKlass org/netbeans/editor/DrawGraphics$AbstractDG +instanceKlass com/mathworks/addons_common/notificationframework/StartupCacheInitializationTask +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager$ZoomLevel +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager +instanceKlass com/mathworks/addons_toolbox/AddOnInstallationObserverAdapter +instanceKlass com/mathworks/appmanagement/addons/AppManagerUtils +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder$1 +instanceKlass com/mathworks/addons_zip/tasks/AddOnInstallationObservers +instanceKlass com/mathworks/html/ProxySettings$1 +instanceKlass com/mathworks/widgets/text/MWEditorUIUtils +instanceKlass com/mathworks/html/ProxySettings +instanceKlass com/teamdev/jxbrowser/chromium/LoadHandler +instanceKlass com/mathworks/html/HtmlActionGroup +instanceKlass com/mathworks/addons_common/AddonCustomMetadata +instanceKlass java/nio/file/SimpleFileVisitor +instanceKlass com/mathworks/addons_zip/utils/ZipManagerUtils +instanceKlass java/awt/PrintGraphics +instanceKlass java/awt/print/PrinterGraphics +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser +instanceKlass com/mathworks/addons_app/AppManager +instanceKlass sun/swing/ImageCache$Entry +instanceKlass com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$1 +instanceKlass com/mathworks/html/ProxyAuthenticationFailureHandler +instanceKlass com/sun/java/swing/plaf/windows/AnimationController +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserFactory +instanceKlass com/mathworks/toolboxmanagement/ToolboxContributedToolsLoader +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$1 +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserverCollection +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory +instanceKlass java/awt/geom/RectIterator +instanceKlass java/awt/geom/PathIterator +instanceKlass com/mathworks/toolboxmanagement/DefaultToolboxManagementObserver +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/OpenToLineColumn +instanceKlass com/mathworks/toolboxmanagement/ExecutorServiceFactory +instanceKlass com/mathworks/toolboxmanagement/CustomToolboxManager +instanceKlass com/mathworks/html/LightweightBrowser +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserver +instanceKlass com/mathworks/addons_toolbox/ToolboxManagerForAddOns +instanceKlass java/awt/GradientPaintContext +instanceKlass com/mathworks/services/lmgr/FeatureInfoList +instanceKlass com/mathworks/addons_product/CommandBuilder +instanceKlass com/mathworks/addons_common/DocumentationProvider +instanceKlass com/mathworks/addons_product/ProductManager +instanceKlass com/mathworks/supportsoftwarematlabmanagement/api/UninstallAPI +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$3 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$1 +instanceKlass com/mathworks/install_task/BackgroundTask +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory +instanceKlass com/mathworks/supportsoftwareinstaller/api/InstallAPI +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport +instanceKlass java/net/URLEncoder +instanceKlass java/net/URLDecoder +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheDecorator +instanceKlass com/mathworks/hwsmanagement/HwsManager +instanceKlass com/mathworks/supportsoftwareinstaller/addons/SupportSoftwareInstallerObserver +instanceKlass com/mathworks/cmlink/management/cache/NullCmStatusCache +instanceKlass com/mathworks/cmlink/management/queue/CMQueue +instanceKlass com/mathworks/cmlink/util/interactor/NullTerminator +instanceKlass com/mathworks/cmlink/util/system/CommandInstalledChecker +instanceKlass com/mathworks/addons_common/InstalledAddon +instanceKlass com/mathworks/cmlink/util/system/PersistentAvailabilityCheck +instanceKlass java/awt/datatransfer/FlavorListener +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService +instanceKlass sun/java2d/opengl/OGLGraphicsConfig +instanceKlass com/mathworks/addons_zip/ZipManager +instanceKlass com/mathworks/cmlink/util/system/AvailabilityCheck +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNExecutor +instanceKlass sun/java2d/pipe/hw/AccelGraphicsConfig +instanceKlass sun/java2d/pipe/hw/BufferedContextProvider +instanceKlass com/mathworks/addons_mlconnector/MLConnectorManager +instanceKlass com/mathworks/mde/liveeditor/LiveEditorSectionsInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorFunctionsInfo +instanceKlass com/mathworks/mde/liveeditor/BackingStoreUpdater +instanceKlass sun/awt/SunGraphicsCallback +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserverImpl +instanceKlass com/mathworks/cmlink/implementations/svncore/SVNCoreAdapterFactoryDecorator +instanceKlass javax/swing/RepaintManager$4 +instanceKlass com/mathworks/mde/liveeditor/LiveEditor +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache$LazyHolder +instanceKlass com/mathworks/mwswing/MJFileChooserPerPlatform +instanceKlass com/mathworks/mwswing/NativeDialogLauncher +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserver +instanceKlass javax/swing/RepaintManager$2$1 +instanceKlass javax/swing/RepaintManager$3 +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService$WrappedCallable +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache +instanceKlass com/mathworks/cmlink/util/CMExecutorService$2 +instanceKlass com/mathworks/cmlink/util/CMExecutorService$1 +instanceKlass com/mathworks/addons/launchers/InitializeCacheAndRegisterAddonsAndAddSupportPackages +instanceKlass com/mathworks/cmlink/util/CMExecutorService +instanceKlass com/mathworks/widgets/text/fold/FoldInfo +instanceKlass com/mathworks/html/PageChangedListener +instanceKlass com/mathworks/cmlink/management/queue/CMAdapterFactoryQueued$1 +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher$IgnoresAncestorKeyBindings +instanceKlass com/mathworks/widgets/text/mcode/MFoldInfoCollector +instanceKlass com/mathworks/jmi/MatlabEvent +instanceKlass com/mathworks/cmlink/implementations/localcm/resources/SQLiteCMResources +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IAbortPoll +instanceKlass com/mathworks/mwswing/MJScrollPane$1 +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IProgressReporter +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMBase +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$2 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$1 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory +instanceKlass com/mathworks/mde/liveeditor/LiveEditorInitializationManager +instanceKlass com/mathworks/mde/desk/MLDesktop$7$1 +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/resources/SVNKitResources +instanceKlass com/mathworks/cmlink/util/adapter/AdapterFactoryComparator +instanceKlass com/mathworks/mde/cmdwin/CmdWinSyntaxWrapper +instanceKlass com/mathworks/cmlink/util/CMAdapterFactoryDecorator +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryListCollection +instanceKlass com/mathworks/cmlink/management/registration/FactoryHidingFactoryList +instanceKlass com/mathworks/cmlink/management/registration/QueuedCMAdapterFactoryList +instanceKlass com/mathworks/mde/cmdhist/AltHistory$16 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$15 +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCILogger +instanceKlass com/mathworks/mde/cmdhist/AltHistory$13 +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader$SccProviderInstallRegEntry +instanceKlass com/mathworks/mde/cmdhist/AltHistory$12 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$11 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$PreferenceListener +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17 +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCIRegistryReader +instanceKlass com/mathworks/mde/cmdhist/AltHistory$31 +instanceKlass com/mathworks/cmlink/management/registration/MSSCCICMAdapterFactoryList +instanceKlass com/mathworks/cmlink/api/version/r14a/CMAdapterFactory +instanceKlass com/mathworks/cmlink/api/version/r16b/CMAdapterFactory +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMAdapterFactory +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/DepthAwareCaller +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$DragListener +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/Caller +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$2 +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterCaller +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$1 +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNAdapterFactory +instanceKlass com/mathworks/cmlink/api/StatusListener +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/DefaultMethodInvocation +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterFactoryWrapper +instanceKlass org/eclipse/jgit/transport/Transport +instanceKlass org/eclipse/jgit/transport/PackTransport +instanceKlass org/eclipse/jgit/transport/WalkTransport +instanceKlass ca/odell/glazedlists/impl/gui/ThreadProxyEventList$UpdateRunner +instanceKlass org/eclipse/jgit/lib/Repository +instanceKlass ca/odell/glazedlists/swing/GlazedListsSwing +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$HistoryTableFormat +instanceKlass org/eclipse/jgit/transport/PacketLineIn +instanceKlass org/eclipse/jgit/transport/PacketLineOut +instanceKlass org/eclipse/jgit/util/FS +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeNode +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$WriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$ReadLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$Sync +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock +instanceKlass ca/odell/glazedlists/matchers/AbstractMatcherEditor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecordListListener +instanceKlass org/eclipse/jgit/transport/CredentialsProvider +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandSaver +instanceKlass java/security/Timestamp +instanceKlass sun/security/timestamp/TimestampToken +instanceKlass sun/security/pkcs/PKCS9Attributes +instanceKlass com/mathworks/cmlink/implementations/git/GitAdapterFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$TimeoutTask +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$DaemonThreadFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/io/ISVNConnectionListener +instanceKlass org/tmatesoft/svn/core/io/ISVNSession +instanceKlass org/tmatesoft/svn/core/wc/admin/SVNAdminBasicClient +instanceKlass org/tmatesoft/svn/core/wc/ISVNEventHandler +instanceKlass sun/nio/ch/Util$5 +instanceKlass sun/nio/ch/FileChannelImpl$Unmapper +instanceKlass java/nio/channels/FileChannel$MapMode +instanceKlass org/tmatesoft/svn/core/wc/SVNBasicClient +instanceKlass org/tmatesoft/svn/core/wc/SVNClientManager +instanceKlass org/tmatesoft/svn/core/wc/ISVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$SimplePasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$3 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$2 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$1 +instanceKlass org/apache/commons/io/filefilter/IOFileFilter +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetStringCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetKeyringInfoCallback +instanceKlass org/apache/commons/io/FileUtils +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationDoneCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNMacOsKeychain +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$WinCryptPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$IPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWinCrypt +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptions +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$1 +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$CacheAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$DumbAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorageOptions +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationProvider +instanceKlass javax/net/ssl/TrustManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNProxyManager +instanceKlass org/tmatesoft/svn/core/auth/SVNAuthentication +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNSSHHostVerifier +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNSSLPasspharsePromptSupport +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNCompositeConfigFile +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNConfigFile +instanceKlass org/tmatesoft/svn/core/wc/ISVNMerger +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNOptions +instanceKlass org/tmatesoft/svn/core/wc/ISVNMergerFactory +instanceKlass com/sun/jna/Structure$ByReference +instanceKlass com/sun/jna/Function$PostCallRead +instanceKlass java/lang/reflect/AnnotatedType +instanceKlass com/sun/jna/Library$Handler$FunctionInfo +instanceKlass com/sun/jna/WeakIdentityHashMap +instanceKlass com/sun/jna/Structure$StructField +instanceKlass com/sun/jna/Structure$LayoutInfo +instanceKlass com/sun/jna/NativeMappedConverter +instanceKlass com/sun/jna/TypeConverter +instanceKlass java/lang/reflect/Proxy$1 +instanceKlass com/sun/jna/FunctionMapper +instanceKlass com/sun/jna/NativeLibrary +instanceKlass com/sun/jna/Library$Handler +instanceKlass com/sun/jna/Native$7 +instanceKlass com/sun/jna/Native$2 +instanceKlass com/sun/jna/Structure$FFIType$FFITypes +instanceKlass com/sun/jna/Native$ffi_callback +instanceKlass com/sun/jna/PointerType +instanceKlass com/sun/jna/NativeMapped +instanceKlass com/sun/jna/WString +instanceKlass com/sun/jna/CallbackProxy +instanceKlass com/sun/jna/Callback +instanceKlass com/sun/jna/Structure$ByValue +instanceKlass com/sun/jna/ToNativeContext +instanceKlass com/sun/jna/FromNativeContext +instanceKlass com/sun/jna/FromNativeConverter +instanceKlass com/sun/jna/ToNativeConverter +instanceKlass com/sun/jna/Structure +instanceKlass com/sun/jna/Pointer +instanceKlass java/io/DeleteOnExitHook$1 +instanceKlass java/io/DeleteOnExitHook +instanceKlass java/io/File$TempDirectory +instanceKlass com/sun/jna/Platform +instanceKlass com/sun/jna/Native$5 +instanceKlass com/sun/jna/Native$1 +instanceKlass com/sun/jna/Callback$UncaughtExceptionHandler +instanceKlass com/sun/jna/Native +instanceKlass com/sun/jna/Version +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsCFLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNCLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWin32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNKernel32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWinCryptLibrary +instanceKlass com/sun/jna/win32/StdCallLibrary +instanceKlass com/sun/jna/win32/StdCall +instanceKlass com/sun/jna/AltCallingConvention +instanceKlass org/tmatesoft/svn/core/internal/util/jna/JNALibraryLoader +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWin32Util +instanceKlass org/tmatesoft/svn/util/SVNLogType +instanceKlass com/sun/jna/Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNJNAUtil +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/wc/SVNWCUtil +instanceKlass org/tmatesoft/svn/core/wc/ISVNOptions +instanceKlass org/tmatesoft/svn/core/io/ISVNTunnelProvider +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer$AuthenticatingClientManager +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitCanceller +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnection +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnector +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap$TableEntry +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap +instanceKlass org/tmatesoft/svn/core/io/ISVNReporter +instanceKlass org/tmatesoft/svn/core/io/SVNRepository +instanceKlass org/tmatesoft/svn/core/io/SVNRepositoryFactory +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/NoUpgradeSVNAdminFactorySelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminArea +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$1 +instanceKlass com/mathworks/util/CircularBuffer +instanceKlass com/mathworks/services/SystemServices +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecord +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$ProductionPrefsProvider +instanceKlass java/time/Instant +instanceKlass java/time/temporal/TemporalAdjuster +instanceKlass java/time/temporal/Temporal +instanceKlass java/time/temporal/TemporalAccessor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$PrefsProvider +instanceKlass java/nio/file/FileVisitor +instanceKlass java/nio/file/FileStore +instanceKlass java/nio/file/attribute/FileAttributeView +instanceKlass java/nio/file/attribute/AttributeView +instanceKlass java/nio/file/attribute/UserPrincipal +instanceKlass java/util/function/BiPredicate +instanceKlass java/nio/file/attribute/FileTime +instanceKlass java/nio/file/CopyOption +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil +instanceKlass com/mathworks/mde/cmdhist/AltHistory$FocusAppearanceUpdater +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNClassLoader +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory$DefaultSelector +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/CategorizedView +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/ViewBuilder +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory +instanceKlass org/tmatesoft/svn/util/SVNDebugLog +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection +instanceKlass org/tmatesoft/svn/util/SVNDebugLogAdapter +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$4 +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/BooleanMapUtil +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$SpecialCharacter +instanceKlass org/tmatesoft/svn/util/ISVNDebugLog +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/logging/SVNKitLogFactory +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/ISVNAdminAreaFactorySelector +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$AnnotatedInfo +instanceKlass com/mathworks/cmlink/api/CMRepository +instanceKlass com/mathworks/cmlink/api/CMAdapter +instanceKlass com/mathworks/cmlink/api/CMInteractor +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitAdapterFactory +instanceKlass com/mathworks/cmlink/api/CMAdapterFactory +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$7 +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMRepository +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/Cancellable +instanceKlass org/tmatesoft/svn/core/ISVNCanceller +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/BuiltInSVNAdapterFactory +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r11b/R11bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r14a/R14aToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r16b/R16bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/InternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/management/registration/OsgiCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/SingletonCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingTerminator$1 +instanceKlass com/mathworks/cmlink/management/pool/shared/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingExceptionHandler +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingStatusBroadcaster +instanceKlass com/mathworks/widgets/grouptable/ColorStyle$1 +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects$CombinedToolTipGenerator +instanceKlass com/mathworks/util/collections/CopyOnWriteList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingProgressIndicator +instanceKlass com/mathworks/cmlink/management/pool/shared/SharedInteractor +instanceKlass com/mathworks/cmlink/api/TerminationListener +instanceKlass com/mathworks/cmlink/management/pool/shared/CMProcessTerminator +instanceKlass com/mathworks/cmlink/management/pool/AutoRefreshedRecord +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor$1 +instanceKlass java/util/concurrent/SynchronousQueue$TransferStack$SNode +instanceKlass java/util/concurrent/SynchronousQueue$Transferer +instanceKlass com/mathworks/toolbox/shared/computils/threads/CountingThreadFactory +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/PreferenceManager +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$PathToolTipGenerator +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCache +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheQueries +instanceKlass com/mathworks/cmlink/management/cache/RootSearchingCmStatusCacheFactory +instanceKlass com/mathworks/cmlink/management/pool/adapter/PrefBackedAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/util/adapter/transformer/MutableTransformableCMAdapterFactoryProvider$NullAdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/transformer/AdapterTransformer +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemFilter +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProviderDecorator +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheEntry +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemUtils +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheProvider +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/management/pool/CmStatusCacheProvider +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance$StatusToolTipGenerator +instanceKlass com/mathworks/cmlink/management/pool/shared/SingletonPooledCmStatusCacheProvider +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects +instanceKlass sun/text/normalizer/ReplaceableString +instanceKlass sun/text/normalizer/Replaceable +instanceKlass sun/text/normalizer/UCharacterIterator +instanceKlass sun/text/CollatorUtilities +instanceKlass java/text/CollationElementIterator +instanceKlass sun/text/normalizer/UTF16 +instanceKlass sun/text/ComposedCharIter +instanceKlass java/text/EntryPair +instanceKlass java/text/PatternEntry +instanceKlass java/text/PatternEntry$Parser +instanceKlass java/text/MergeCollation +instanceKlass sun/text/normalizer/NormalizerImpl$DecomposeArgs +instanceKlass sun/text/normalizer/UnicodeSet +instanceKlass sun/text/normalizer/UnicodeMatcher +instanceKlass sun/text/normalizer/CharTrie$FriendAgent +instanceKlass sun/text/normalizer/Trie +instanceKlass sun/text/normalizer/NormalizerImpl$AuxTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$NormTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$FCDTrieImpl +instanceKlass sun/text/normalizer/Trie$DataManipulate +instanceKlass sun/text/normalizer/ICUBinary +instanceKlass sun/text/normalizer/NormalizerDataReader +instanceKlass sun/text/normalizer/ICUBinary$Authenticate +instanceKlass sun/text/normalizer/ICUData +instanceKlass sun/text/normalizer/NormalizerImpl +instanceKlass sun/text/UCompactIntArray +instanceKlass sun/text/IntHashtable +instanceKlass java/text/RBCollationTables$BuildAPI +instanceKlass java/text/RBTableBuilder +instanceKlass java/text/RBCollationTables +instanceKlass java/text/Collator +instanceKlass com/mathworks/fileutils/UIFileUtils$NameTokenizer +instanceKlass com/mathworks/fileutils/UIFileUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$GrayedOutStyle +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1$1 +instanceKlass com/mathworks/widgets/grouptable/ColorStyle +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$2 +instanceKlass com/mathworks/util/Disposable$Parent +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger$MyActionListener +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger +instanceKlass com/mathworks/widgets/grouptable/RowComparator +instanceKlass com/mathworks/widgets/grouptable/OldAscendingSortComparator +instanceKlass com/mathworks/widgets/grouptable/AscendingSortComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection +instanceKlass com/mathworks/jmi/AWTUtilities$WatchedRunnable +instanceKlass com/mathworks/jmi/AWTUtilities$WatchDog +instanceKlass com/mathworks/jmi/AWTUtilities +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$3 +instanceKlass java/awt/EventQueue$4 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$CategoryActionsProvider +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryPopupListenerShower +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteMenuContributor +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandToolSet$FavoriteToolTipContentProvider +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$7 +instanceKlass com/mathworks/mde/desk/MLDesktop$9 +instanceKlass com/mathworks/mde/desk/MLDesktop$6 +instanceKlass com/mathworks/mde/desk/MLDesktop$18 +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$RestoreData +instanceKlass java/awt/SequencedEvent$1 +instanceKlass sun/awt/AWTAccessor$SequencedEventAccessor +instanceKlass com/mathworks/mde/cmdhist/CommandStyleInfo +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointRenderUtils +instanceKlass java/awt/GridBagLayoutInfo +instanceKlass javax/swing/JTable$5 +instanceKlass com/jidesoft/swing/StyleRange +instanceKlass com/jidesoft/swing/StyledLabelBuilder +instanceKlass com/jidesoft/grid/HeaderLineWrapModel +instanceKlass com/mathworks/mde/explorer/Explorer$19 +instanceKlass com/mathworks/toolstrip/impl/ToolstripSectionComponentWithHeader$1 +instanceKlass com/mathworks/toolstrip/plaf/SplitButtonUI$Layout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$1 +instanceKlass com/google/common/collect/Iterators$2 +instanceKlass com/google/common/collect/PeekingIterator +instanceKlass com/google/common/collect/Iterators +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$Section +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout$Sizes +instanceKlass javax/swing/SizeRequirements +instanceKlass com/mathworks/jmi/NativeWindows +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1 +instanceKlass org/openide/util/WeakListenerImpl +instanceKlass org/openide/util/WeakListeners +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireEnabler +instanceKlass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange +instanceKlass javax/accessibility/AccessibleTableModelChange +instanceKlass com/jidesoft/grid/JideTable$s_ +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$2 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyFocusListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyMouseListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyKeyListener +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$RootProvider +instanceKlass com/mathworks/util/event/EventUtils +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher$1 +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$MnemonicEventListener +instanceKlass com/google/common/collect/Sets +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory$1 +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$Collector +instanceKlass com/mathworks/util/async/Callback +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManager +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$KeyboardFocusProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$MnemonicsManagerFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers +instanceKlass com/mathworks/ddux/UIEventLog +instanceKlass com/mathworks/mde/desk/DDUXLoggerBridge +instanceKlass com/mathworks/mwswing/UIEventLogger$Implementation +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1$1 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1 +instanceKlass com/mathworks/widgets/editor/EditorRegionImpl +instanceKlass com/mathworks/matlab/api/editor/EditorRegion +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/Cell +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$6 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$13 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$9 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$8 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$7 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$5 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$2 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveUtils +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor +instanceKlass com/mathworks/mde/editor/EditorViewClient$1$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$3 +instanceKlass com/mathworks/widgets/text/STPIncSearch +instanceKlass com/mathworks/mde/editor/EditorStatusBar$2 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$FunctionNameListener +instanceKlass com/mathworks/mwswing/MJCheckBox$ActionPropertyHandler +instanceKlass com/mathworks/mde/editor/EditorOptions +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$4 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1$1 +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory$WindowAction$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$4 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$3 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7$1 +instanceKlass com/mathworks/widgets/util/EmptyIcon +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$2 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$8 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActions$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$RunTestsToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/LiveMatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptionsListener +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/MatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActionController +instanceKlass com/mathworks/mde/editor/EditorUtils$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$8 +instanceKlass com/mathworks/mlwidgets/debug/MatlabDebuggerActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$15 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$14 +instanceKlass com/mathworks/mde/editor/ProfilerButton$1 +instanceKlass com/mathworks/mde/editor/ProfilerButton +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$4 +instanceKlass com/mathworks/mde/editor/EditorUtils$5 +instanceKlass com/mathworks/mde/editor/EditorUtils$4 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListListenerBridge +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$15 +instanceKlass java/rmi/server/UID +instanceKlass org/apache/commons/lang/exception/Nestable +instanceKlass org/apache/commons/lang/StringEscapeUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$9 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager$SelectableMenuItem +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu$2 +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$10 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$13 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$12 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$7 +instanceKlass com/jidesoft/swing/JideMenu$1 +instanceKlass com/jidesoft/swing/JideMenu$MenuCreator +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuOriginCalculator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$2 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$1 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector$PropertyChangeHandler +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$LoadBundle +instanceKlass ca/odell/glazedlists/impl/SimpleIterator +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorNode +instanceKlass java/util/IdentityHashMap$EntryIterator$Entry +instanceKlass com/jidesoft/introspector/BeanIntrospector$LazyValue +instanceKlass com/jidesoft/utils/TypeUtils +instanceKlass com/jidesoft/introspector/BeanIntrospector +instanceKlass com/jidesoft/introspector/Introspector +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/PersistenceUtils +instanceKlass com/jidesoft/converter/EnumConverter +instanceKlass com/jidesoft/converter/YearNameConverter +instanceKlass com/jidesoft/converter/MonthNameConverter +instanceKlass com/jidesoft/converter/MultilineStringConverter +instanceKlass com/jidesoft/converter/FontConverter +instanceKlass com/jidesoft/converter/QuarterNameConverter +instanceKlass com/jidesoft/converter/StringArrayConverter +instanceKlass com/jidesoft/converter/ColorConverter +instanceKlass com/jidesoft/converter/MonthConverter +instanceKlass java/text/DateFormatSymbols +instanceKlass com/jidesoft/converter/DateConverter +instanceKlass com/jidesoft/converter/FontNameConverter +instanceKlass com/jidesoft/converter/FileConverter +instanceKlass com/jidesoft/converter/BooleanConverter +instanceKlass com/jidesoft/converter/ArrayConverter +instanceKlass com/jidesoft/converter/NumberConverter +instanceKlass com/jidesoft/converter/ObjectConverterManager +instanceKlass com/jidesoft/converter/DefaultObjectConverter +instanceKlass com/jidesoft/converter/ObjectConverter +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationJideUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/PublishOptions +instanceKlass com/mathworks/mlwidgets/configeditor/ui/UiSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$PersistenceSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution +instanceKlass com/mathworks/widgets/menus/DefaultMenuID +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolInfoImpl +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor$DiffToolMenuContribution +instanceKlass com/mathworks/jmi/MatlabWorker$2 +instanceKlass com/mathworks/jmi/MatlabWorker$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$4 +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$3 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution +instanceKlass com/mathworks/mde/editor/codepad/CodepadMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor +instanceKlass com/mathworks/mde/editor/ActionManager$1 +instanceKlass com/mathworks/mde/editor/ActionManager$CodeFoldsMenuItemValidationListener +instanceKlass com/mathworks/mde/editor/ActionManager$3 +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuGroup +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuMenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/ConfigurationPopupMenuCustomizer +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuCustomizer +instanceKlass com/mathworks/widgets/DropdownButton$ArrowIcon +instanceKlass com/mathworks/widgets/DropdownButton$1 +instanceKlass com/mathworks/widgets/PickerButton$2 +instanceKlass com/mathworks/widgets/PickerButton$ToolTippableButton +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration$Type +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$3 +instanceKlass com/mathworks/widgets/PopupMenuCustomizer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$1 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$2 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor$ToolBarItem +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarBuilder +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBars +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$34 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DefaultActionInput +instanceKlass com/mathworks/mde/editor/PathActionInputSource +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreActionProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$DocumentTabActionProvider +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUnhandledException +instanceKlass com/mathworks/mde/editor/EditorToolstripTabFactory +instanceKlass com/mathworks/mde/editor/EditorViewClient$7 +instanceKlass com/mathworks/mde/editor/EditorView$8 +instanceKlass com/mathworks/mde/editor/EditorView$12 +instanceKlass org/apache/xerces/dom/NodeListCache +instanceKlass com/mathworks/widgets/STPStateManagerImpl +instanceKlass com/mathworks/widgets/StateMRUFiles +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl$1 +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl +instanceKlass com/mathworks/mde/editor/EditorStateManager +instanceKlass com/mathworks/mde/editor/EditorStateManagerFactory +instanceKlass org/netbeans/editor/JumpList$Entry +instanceKlass com/mathworks/mde/editor/codepad/Codepad$3 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/AbstractEditorHighlighter +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo$BaseDocumentCell +instanceKlass org/netbeans/editor/AdjustFinder +instanceKlass com/mathworks/widgets/text/mcode/cell/CellUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$1 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadCaretListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadDocumentListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager +instanceKlass com/mathworks/mde/editor/codepad/Codepad$CodepadPrefListener +instanceKlass java/text/ParsePosition +instanceKlass com/mathworks/mde/editor/codepad/Codepad$1 +instanceKlass com/mathworks/mde/editor/PopupAction$Callback +instanceKlass com/mathworks/mde/editor/EditorView$13 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$1 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$2 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$TextEventHandler +instanceKlass com/mathworks/mde/editor/MatlabExecutionDisplayAdapter$DebugInterests$2 +instanceKlass com/mathworks/widgets/text/mcode/MExecutionDisplayAdapter +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter$RepaintListener +instanceKlass com/mathworks/mde/editor/breakpoints/BreakpointInstallationResult +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeIterator +instanceKlass ca/odell/glazedlists/FilterList$PrivateMatcherEditorListener +instanceKlass ca/odell/glazedlists/impl/matchers/TrueMatcher +instanceKlass ca/odell/glazedlists/matchers/Matchers +instanceKlass ca/odell/glazedlists/impl/adt/Barcode +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils$1 +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor$Listener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointViewPopupBuilder +instanceKlass com/mathworks/matlab/api/debug/BreakpointStyle +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUiInfoProvider +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointView +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$5 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$2 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$4 +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$JUnitExpose +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextViewListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextEventHandler +instanceKlass com/mathworks/widgets/text/mcode/CmdManager +instanceKlass com/mathworks/matlab/api/debug/ContextMenuListener +instanceKlass com/mathworks/matlab/api/debug/BreakpointMarginPopUpMenu +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$ClearBkptListener +instanceKlass com/mathworks/matlab/api/debug/BreakpointUiInfoProvider +instanceKlass com/mathworks/matlab/api/debug/BreakpointModel +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdLineListener +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointMargin +instanceKlass com/mathworks/jmi/MLFileUtils +instanceKlass com/mathworks/widgets/datamodel/FutureFileStorageLocation +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationSelectionListener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMarginProvider +instanceKlass com/mathworks/mde/functionhints/FunctionHintUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$2 +instanceKlass com/mathworks/widgets/editor/SelfRemovingEditorEventListener +instanceKlass com/mathworks/mlwidgets/debug/RunOrContinueAction$2 +instanceKlass com/mathworks/matlab/api/menus/MenuID +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabKeyBindingContributor +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$ViewHierarchyChangeListenerImpl +instanceKlass com/mathworks/widgets/text/fold/MWCodeFoldingSideBar$ViewHierarchyChangeNotifier +instanceKlass org/netbeans/editor/CodeFoldingSideBar$1 +instanceKlass org/netbeans/editor/CodeFoldingSideBar$SideBarFoldHierarchyListener +instanceKlass org/netbeans/editor/CodeFoldingSideBar$Mark +instanceKlass com/mathworks/widgets/text/MWEditorUI$3 +instanceKlass org/netbeans/editor/GlyphGutter$EditorUIListener +instanceKlass org/netbeans/editor/GlyphGutter$3 +instanceKlass org/netbeans/editor/GlyphGutter$Observer +instanceKlass org/netbeans/editor/Annotations$2 +instanceKlass org/netbeans/editor/Annotations$1 +instanceKlass org/netbeans/editor/Annotations$MenuComparator +instanceKlass org/netbeans/editor/GlyphGutter$GlyphGutterFoldHierarchyListener +instanceKlass org/netbeans/editor/Annotations +instanceKlass com/mathworks/mwswing/TextComponentUtils +instanceKlass com/mathworks/widgets/text/DocumentUtils +instanceKlass com/mathworks/widgets/SyntaxTextPane$2$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6$1 +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$UpperOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$LowerOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/util/swing/ElementUtilities +instanceKlass org/netbeans/editor/Syntax$BaseStateInfo +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenInfo +instanceKlass com/mathworks/util/IntBuffer +instanceKlass com/mathworks/widgets/text/matlab/LexicalBuffer +instanceKlass org/netbeans/editor/SyntaxUpdateTokens +instanceKlass org/netbeans/editor/FixLineSyntaxState +instanceKlass org/netbeans/editor/BaseDocument$NotifyModifyStatus +instanceKlass org/netbeans/editor/ext/ExtUtilities +instanceKlass com/mathworks/widgets/text/mcode/MTreeUtils +instanceKlass java/util/DualPivotQuicksort +instanceKlass com/mathworks/widgets/text/mcode/MDocumentUtils +instanceKlass com/mathworks/mwswing/TextComponentUtils$FullIdentifier +instanceKlass com/mathworks/widgets/text/mcode/variables/Variable +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$1 +instanceKlass org/netbeans/editor/BaseCaret$3 +instanceKlass org/netbeans/editor/ext/FormatSupport +instanceKlass org/netbeans/editor/ext/AbstractFormatLayer +instanceKlass org/netbeans/editor/StatusBar$1 +instanceKlass org/netbeans/editor/StatusBar$CaretListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$DocUpdateHandler +instanceKlass com/mathworks/util/tree/TreeUtils$3 +instanceKlass com/mathworks/util/tree/DefaultMutableTree +instanceKlass com/mathworks/util/Cache$Entry +instanceKlass java/util/JumboEnumSet$EnumSetIterator +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldsInfo +instanceKlass com/mathworks/widgets/text/mcode/MTree$1 +instanceKlass com/mathworks/util/Cache +instanceKlass com/mathworks/widgets/text/mcode/MTree$Node +instanceKlass com/mathworks/util/Cache$Loader +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider$1 +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider +instanceKlass com/mathworks/widgets/text/mcode/MTreeBaseDocumentCache +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl$HierarchyUpdateListener +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl +instanceKlass com/mathworks/widgets/text/fold/FoldStateManager +instanceKlass com/mathworks/widgets/StateManager +instanceKlass com/mathworks/widgets/STPStateManagerFactory +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldSettingsListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabState +instanceKlass com/mathworks/widgets/text/matlab/LexicalAccumulator +instanceKlass com/mathworks/widgets/text/matlab/MatlabLexer +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxFactory +instanceKlass com/mathworks/widgets/text/matlab/AbstractTokenManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenManager +instanceKlass com/mathworks/widgets/text/STPMessagePanel$9 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataFactory +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$9 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener$1 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightPrefs +instanceKlass com/mathworks/widgets/text/STPMessagePanel$2 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$8 +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$1 +instanceKlass java/awt/GradientPaint +instanceKlass com/mathworks/widgets/text/STPMessagePanel$7 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessagePainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelListener +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$TextAlignmentProvider +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelPainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$2 +instanceKlass com/mathworks/widgets/text/mcode/MLintPrefsUtils +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$8 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$MLintRunnable +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$1 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread +instanceKlass com/mathworks/widgets/menus/DefaultMenuGroupID +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageBarContributor +instanceKlass com/mathworks/widgets/text/LayerMarkList +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$7 +instanceKlass com/mathworks/widgets/text/mcode/MLint$MessageDefinition +instanceKlass com/mathworks/widgets/text/mcode/MLint$CodeAnalyzerContentType +instanceKlass com/mathworks/widgets/text/mcode/MLint +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightActions +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerActions +instanceKlass com/mathworks/mde/editor/EditorTabCompletion +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$1 +instanceKlass com/mathworks/widgets/text/mcode/MTokenColorMap +instanceKlass com/mathworks/widgets/text/mcode/MColorScheme +instanceKlass com/mathworks/widgets/text/matlab/ColorScheme +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerUtils +instanceKlass com/mathworks/widgets/text/ColoringFactory +instanceKlass java/awt/LightweightDispatcher$2 +instanceKlass com/jidesoft/popup/JidePopup$14 +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$2 +instanceKlass sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar +instanceKlass sun/util/locale/InternalLocaleBuilder +instanceKlass sun/util/locale/StringTokenIterator +instanceKlass sun/util/locale/ParseStatus +instanceKlass sun/awt/im/InputMethodAdapter +instanceKlass java/awt/im/spi/InputMethod +instanceKlass java/awt/im/spi/InputMethodContext +instanceKlass java/awt/im/InputContext +instanceKlass java/awt/Window$1DisposeAction +instanceKlass com/jidesoft/document/DefaultStringConverter +instanceKlass com/jidesoft/swing/AbstractLayoutPersistence +instanceKlass com/jidesoft/swing/StringConverter +instanceKlass com/jidesoft/document/DocumentComponent +instanceKlass com/jidesoft/document/FloatingDocumentContainer +instanceKlass com/jidesoft/document/IDocumentGroup +instanceKlass com/jidesoft/swing/LayoutPersistence +instanceKlass com/jidesoft/swing/IContour +instanceKlass com/jidesoft/document/IDocumentPane +instanceKlass sun/awt/GlobalCursorManager$NativeUpdater +instanceKlass sun/awt/GlobalCursorManager +instanceKlass com/jidesoft/popup/JidePopup$9 +instanceKlass com/jidesoft/popup/JidePopup$6 +instanceKlass com/jidesoft/popup/JidePopup$4 +instanceKlass com/jidesoft/plaf/vsnet/ResizeFrameBorder +instanceKlass com/jidesoft/swing/Resizable +instanceKlass com/jidesoft/utils/PortingUtils +instanceKlass java/awt/peer/DialogPeer +instanceKlass java/awt/BufferCapabilities +instanceKlass java/awt/AttributeValue +instanceKlass sun/awt/NullComponentPeer +instanceKlass java/awt/peer/LightweightPeer +instanceKlass sun/awt/im/ExecutableInputMethodManager$3 +instanceKlass sun/awt/im/InputMethodLocator +instanceKlass sun/awt/windows/WInputMethodDescriptor +instanceKlass java/awt/im/spi/InputMethodDescriptor +instanceKlass sun/awt/im/InputMethodManager +instanceKlass sun/awt/FontConfiguration$2 +instanceKlass sun/awt/NativeLibLoader$1 +instanceKlass sun/awt/NativeLibLoader +instanceKlass sun/awt/PlatformFont +instanceKlass java/awt/peer/FontPeer +instanceKlass javax/swing/RepaintManager$2 +instanceKlass sun/awt/windows/WComponentPeer$2 +instanceKlass sun/awt/windows/WColor +instanceKlass sun/java2d/StateTracker$2 +instanceKlass sun/java2d/StateTracker$1 +instanceKlass sun/java2d/StateTracker +instanceKlass sun/java2d/SurfaceDataProxy +instanceKlass sun/awt/image/SurfaceManager$FlushableCacheData +instanceKlass sun/java2d/windows/GDIRenderer +instanceKlass sun/java2d/ScreenUpdateManager +instanceKlass sun/awt/im/InputMethodWindow +instanceKlass sun/awt/ExtendedKeyCodes +instanceKlass sun/awt/RepaintArea +instanceKlass sun/awt/windows/WWindowPeer$GuiDisposedListener +instanceKlass sun/awt/windows/WWindowPeer$ActiveWindowListener +instanceKlass java/awt/peer/CanvasPeer +instanceKlass java/awt/peer/PanelPeer +instanceKlass java/awt/peer/FramePeer +instanceKlass java/awt/peer/WindowPeer +instanceKlass java/awt/peer/ContainerPeer +instanceKlass java/awt/SplashScreen +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$1 +instanceKlass com/jidesoft/tooltip/c +instanceKlass com/jidesoft/tooltip/ExpandedTip +instanceKlass com/jidesoft/tooltip/d$a_ +instanceKlass com/jidesoft/tooltip/BalloonTipUI$a_ +instanceKlass com/jidesoft/tooltip/composite/EdgeEffectComposite +instanceKlass com/jidesoft/tooltip/ShadowComposite +instanceKlass com/jidesoft/tooltip/shadows/PerspectiveShadow +instanceKlass com/jidesoft/tooltip/shapes/RoundedRectangularBalloonShape +instanceKlass com/jidesoft/tooltip/ShadowSettings +instanceKlass com/jidesoft/tooltip/ShadowStyle +instanceKlass com/mathworks/widgets/tooltip/CalloutRectangularBalloonShape +instanceKlass com/mathworks/mwswing/MJDialog$1 +instanceKlass com/mathworks/mwswing/MJDialog$DoShow +instanceKlass com/mathworks/mwswing/MJDialog$KeyCatcher +instanceKlass com/mathworks/mwswing/TransparentWindowFactory +instanceKlass com/jidesoft/tooltip/BalloonShape +instanceKlass com/mathworks/widgets/messagepanel/MessageModelListener +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$1 +instanceKlass com/mathworks/matlab/api/editor/EditorMessageBarContributor +instanceKlass com/mathworks/mwswing/api/UndoListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$OSGiEditorLayerProviderContributor +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$EditorLayerProviderContributor +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$4 +instanceKlass com/mathworks/mde/editor/EditorView$10 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$EditorKitInfo +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils +instanceKlass com/mathworks/mde/editor/EditorMKit$1 +instanceKlass com/mathworks/mlwidgets/MatlabHyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/LayerUtils +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabMKit$MatlabHelper +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$MTreeListener +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer +instanceKlass com/mathworks/matlab/api/editor/EditorLayer +instanceKlass com/mathworks/widgets/messagepanel/AbstractMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessageModel +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$NonLocalDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$CodeAnalyzerDocHelper +instanceKlass com/mathworks/matlab/api/editor/EditorTipDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$VariableHighlightingLayerStatusInfoProvider +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/EditorTip$CommandHelper +instanceKlass org/netbeans/editor/ext/FormatLayer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabEditorKitProvider +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$3 +instanceKlass com/mathworks/mwswing/MJRadioButtonMenuItem$ActionPropertyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1 +instanceKlass com/mathworks/widgets/SplitScreenActions +instanceKlass com/mathworks/mde/editor/EditorApplicationComponentActivator +instanceKlass com/mathworks/widgets/text/ComponentActivator +instanceKlass com/mathworks/mde/editor/EditorSyntaxTextPane$EditorDropTargetListener +instanceKlass com/mathworks/widgets/text/SmartFormatter +instanceKlass com/mathworks/widgets/text/MWCaret$1 +instanceKlass com/mathworks/widgets/text/TextDragAndDrop +instanceKlass com/mathworks/widgets/text/MWDrawLayerFactory +instanceKlass org/netbeans/editor/BaseCaret$2 +instanceKlass org/netbeans/editor/SegmentCache +instanceKlass org/netbeans/editor/DocumentUtilities +instanceKlass org/netbeans/editor/BaseCaret$1 +instanceKlass org/netbeans/editor/Syntax$StateInfo +instanceKlass com/mathworks/widgets/Tokenizer$TokenInfo +instanceKlass com/mathworks/widgets/TokenizerFactory +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingImpl +instanceKlass org/netbeans/editor/Mark$MarkComparator +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingController +instanceKlass org/netbeans/editor/Mark +instanceKlass org/netbeans/editor/BaseCaret +instanceKlass org/netbeans/editor/AtomicLockListener +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$2 +instanceKlass org/netbeans/editor/view/spi/FlyView$Parent +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$OffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$1 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$2 +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter$HighlighterUpdateListener +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager +instanceKlass com/mathworks/widgets/text/MWEditorUI$4 +instanceKlass org/netbeans/editor/FontMetricsCache$InfoImpl +instanceKlass org/netbeans/editor/EditorUI$3 +instanceKlass com/mathworks/widgets/text/MWToolTipSupport$DismissEventListener +instanceKlass org/netbeans/editor/ext/ToolTipSupport$2 +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl$CollapsedFoldIterator +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl +instanceKlass org/netbeans/editor/FontMetricsCache$Info +instanceKlass org/netbeans/editor/FontMetricsCache +instanceKlass com/mathworks/widgets/text/MWEditorUI$2 +instanceKlass org/netbeans/editor/EditorUI$ComponentLock +instanceKlass org/netbeans/editor/PopupManager$HorizontalBounds +instanceKlass org/netbeans/editor/PopupManager$Placement +instanceKlass com/mathworks/widgets/text/layer/EditorTip +instanceKlass com/mathworks/widgets/text/layer/EditorTip$MEditorTipStrategy +instanceKlass com/mathworks/widgets/text/MWEditorUI$1 +instanceKlass org/netbeans/editor/EditorUI$1 +instanceKlass org/netbeans/editor/PopupManager +instanceKlass org/netbeans/editor/StatusBar +instanceKlass org/netbeans/editor/SideBarFactory +instanceKlass org/netbeans/editor/Annotations$AnnotationsListener +instanceKlass org/netbeans/api/editor/fold/FoldUtilities +instanceKlass org/netbeans/spi/editor/fold/FoldHierarchyTransaction +instanceKlass org/netbeans/api/editor/fold/FoldStateChange +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyTransactionImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$1 +instanceKlass org/netbeans/api/editor/fold/Fold +instanceKlass org/netbeans/modules/editor/fold/SpiPackageAccessor +instanceKlass org/netbeans/spi/editor/fold/FoldOperation +instanceKlass org/netbeans/modules/editor/fold/FoldOperationImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution +instanceKlass org/netbeans/modules/editor/fold/ApiPackageAccessor +instanceKlass org/netbeans/api/editor/fold/FoldHierarchy +instanceKlass org/netbeans/lib/editor/util/PriorityMutex +instanceKlass org/netbeans/lib/editor/view/GapObjectArray +instanceKlass org/netbeans/lib/editor/view/GapObjectArray$RemoveUpdater +instanceKlass org/netbeans/editor/BaseTextUI$UIWatcher +instanceKlass com/mathworks/widgets/SyntaxTextPane$2 +instanceKlass com/mathworks/widgets/SyntaxTextPane$1 +instanceKlass org/netbeans/editor/LocaleSupport$Localizer +instanceKlass org/netbeans/editor/LocaleSupport +instanceKlass org/openide/util/Task +instanceKlass org/openide/util/Cancellable +instanceKlass org/openide/util/Utilities$RE +instanceKlass org/openide/util/Utilities +instanceKlass org/openide/util/RequestProcessor +instanceKlass org/openide/util/NbBundle$LocaleIterator +instanceKlass org/openide/util/NbBundle +instanceKlass com/mathworks/widgets/SyntaxTextPane$EmptyUniqueKeyProvider +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedFocusListener +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedCaretListener +instanceKlass com/mathworks/mwswing/undo/FilterUndoableEdit +instanceKlass com/mathworks/widgets/SyntaxTextPane$ActionManager +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$3 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$1 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$KitStore +instanceKlass org/netbeans/editor/Settings$KitAndValue +instanceKlass org/netbeans/api/editor/fold/FoldHierarchyListener +instanceKlass org/netbeans/editor/ActionFactory$JumpListNextAction$1 +instanceKlass org/netbeans/editor/JumpList$1 +instanceKlass org/netbeans/editor/JumpList +instanceKlass org/netbeans/editor/ActionFactory$JumpListPrevAction$1 +instanceKlass com/mathworks/widgets/text/layer/LayerActions +instanceKlass com/mathworks/widgets/text/MWKit$InstancesNotEqual +instanceKlass org/netbeans/lib/editor/util/swing/DocumentListenerPriority +instanceKlass org/netbeans/editor/BaseDocument$PropertyEvaluator +instanceKlass org/netbeans/editor/MarkChain +instanceKlass org/netbeans/editor/view/spi/EstimatedSpanView +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState$Parent +instanceKlass org/netbeans/editor/FindSupport +instanceKlass org/netbeans/editor/BaseDocument$1 +instanceKlass org/netbeans/editor/Registry +instanceKlass org/netbeans/editor/Analyzer +instanceKlass org/openide/ErrorManager +instanceKlass org/netbeans/editor/Utilities +instanceKlass java/lang/Package$1 +instanceKlass org/netbeans/editor/FinderFactory$AbstractFinder +instanceKlass org/netbeans/spi/editor/fold/FoldManager +instanceKlass com/mathworks/widgets/text/mcode/MFoldManagerFactory +instanceKlass org/netbeans/spi/editor/fold/FoldManagerFactory +instanceKlass org/netbeans/modules/editor/fold/FoldManagerFactoryProvider +instanceKlass com/mathworks/widgets/text/fold/CustomFoldManagerFactoryProvider +instanceKlass org/netbeans/editor/WeakPropertyChangeSupport +instanceKlass org/netbeans/editor/AnnotationTypes +instanceKlass org/netbeans/editor/SettingsAdapter +instanceKlass com/mathworks/widgets/text/mcode/codepad/CodepadOptions +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults$1 +instanceKlass com/mathworks/mwswing/GraphicsUtils +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults +instanceKlass org/netbeans/editor/Formatter +instanceKlass org/netbeans/editor/MultiKeymap +instanceKlass org/netbeans/editor/ext/Completion +instanceKlass org/netbeans/editor/ext/CompletionJavaDoc +instanceKlass org/netbeans/editor/SettingsUtil$PrintColoringEvaluator +instanceKlass org/netbeans/editor/SettingsUtil +instanceKlass org/netbeans/editor/LineElement +instanceKlass org/netbeans/lib/editor/util/swing/GapBranchElement +instanceKlass org/netbeans/lib/editor/util/PriorityListenerList +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities$ModificationTextElement +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities +instanceKlass org/netbeans/editor/DrawLayerList +instanceKlass org/netbeans/editor/AcceptorFactory$4 +instanceKlass org/netbeans/editor/AcceptorFactory$3 +instanceKlass org/netbeans/editor/AcceptorFactory$2 +instanceKlass org/netbeans/editor/AcceptorFactory$1 +instanceKlass org/netbeans/editor/AcceptorFactory$TwoChar +instanceKlass org/netbeans/editor/AcceptorFactory$Char +instanceKlass org/netbeans/editor/AcceptorFactory$Fixed +instanceKlass org/netbeans/editor/Acceptor +instanceKlass org/netbeans/editor/AcceptorFactory +instanceKlass org/netbeans/editor/SettingsDefaults +instanceKlass org/netbeans/editor/BasePosition +instanceKlass org/netbeans/editor/MultiMark +instanceKlass org/netbeans/editor/MarkVector +instanceKlass org/netbeans/editor/DocumentContent +instanceKlass org/netbeans/editor/GapStart +instanceKlass org/netbeans/editor/PrintContainer +instanceKlass javax/swing/text/DocumentFilter$FilterBypass +instanceKlass org/netbeans/editor/Finder +instanceKlass org/netbeans/editor/CharSeq +instanceKlass org/netbeans/editor/DrawGraphics +instanceKlass org/netbeans/editor/AtomicLockDocument +instanceKlass com/mathworks/widgets/STPPrefsManager$PrintColoringEvaluator +instanceKlass com/mathworks/widgets/text/ErrorLogger +instanceKlass org/netbeans/api/editor/fold/FoldType +instanceKlass com/mathworks/widgets/text/mcode/MTree +instanceKlass com/mathworks/widgets/text/simscape/SimscapeSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxHighlighting +instanceKlass org/netbeans/modules/xml/text/syntax/XMLTokenIDs +instanceKlass com/mathworks/widgets/text/xml/XMLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cuda/CudaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cplusplus/CAndCPlusPlusSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/vhdl/VHDLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/verilog/VerilogSyntaxHighlighting +instanceKlass org/netbeans/editor/ImageTokenID +instanceKlass org/netbeans/editor/BaseTokenCategory +instanceKlass com/mathworks/widgets/text/java/JavaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/CommonResources +instanceKlass org/netbeans/editor/TokenContextPath$ArrayMatcher +instanceKlass org/netbeans/editor/TokenContextPath +instanceKlass org/netbeans/editor/BaseTokenID +instanceKlass com/mathworks/widgets/text/DefaultSyntaxColor +instanceKlass com/mathworks/widgets/text/tlc/TLCSyntaxHighlighting +instanceKlass com/mathworks/widgets/SyntaxHighlightingUtils +instanceKlass com/mathworks/widgets/STPPrefsManager$STPPrefsListener +instanceKlass org/netbeans/editor/SettingsNames +instanceKlass com/mathworks/widgets/text/EditorPrefsAccessor +instanceKlass org/netbeans/editor/Settings$Evaluator +instanceKlass org/netbeans/editor/TokenContext +instanceKlass com/mathworks/widgets/STPPrefsManager +instanceKlass org/netbeans/editor/Settings$AbstractInitializer +instanceKlass org/netbeans/editor/Settings$Initializer +instanceKlass org/netbeans/editor/Settings +instanceKlass org/netbeans/editor/BaseKit$1 +instanceKlass org/netbeans/editor/Syntax +instanceKlass org/netbeans/editor/ImplementationProvider +instanceKlass org/netbeans/editor/SyntaxSupport +instanceKlass com/mathworks/mwswing/undo/UndoManagerListener +instanceKlass com/mathworks/matlab/api/editor/SyntaxHighlightingColor +instanceKlass java/text/AttributedCharacterIterator +instanceKlass org/netbeans/editor/DrawLayer$AbstractLayer +instanceKlass org/netbeans/editor/DrawLayer +instanceKlass org/netbeans/editor/Coloring +instanceKlass com/mathworks/widgets/text/ViewHierarchyModificationComponent +instanceKlass org/netbeans/editor/EditorUI +instanceKlass org/netbeans/editor/SettingsChangeListener +instanceKlass org/netbeans/editor/TokenID +instanceKlass org/netbeans/editor/TokenCategory +instanceKlass java/text/AttributedString +instanceKlass com/mathworks/widgets/text/print/TextPrintable +instanceKlass java/awt/print/Printable +instanceKlass javax/print/DocPrintJob +instanceKlass com/mathworks/mwswing/api/ExtendedUndoManager +instanceKlass com/mathworks/mwswing/api/UndoabilityChangeListener +instanceKlass com/mathworks/widgets/text/ViewHierarchyChangeListener +instanceKlass java/awt/im/InputMethodRequests +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$LastActiveFocusListener +instanceKlass com/mathworks/mde/editor/EditorView$4 +instanceKlass com/mathworks/mde/editor/EditorView$7 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$PostKeyListener +instanceKlass com/mathworks/mde/editor/EditorView$6 +instanceKlass com/mathworks/mde/editor/EditorView$5 +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager$1 +instanceKlass com/mathworks/mde/editor/codepad/CodepadAction +instanceKlass com/mathworks/mde/editor/ActionManager$OSGiKeyBindingContributorProvider +instanceKlass com/mathworks/widgets/editor/SaveOnBlurImpl +instanceKlass com/mathworks/mde/editor/EditorView$1 +instanceKlass com/mathworks/mde/editor/EditorView$EditorPrefListener +instanceKlass com/mathworks/mde/editor/EditorView$11 +instanceKlass com/mathworks/mde/editor/EditorView$3 +instanceKlass com/mathworks/mde/editor/EditorView$2 +instanceKlass com/mathworks/matlab/api/debug/BreakpointMargin +instanceKlass com/mathworks/util/AbsoluteFile +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay +instanceKlass com/mathworks/mde/editor/codepad/Codepad +instanceKlass com/mathworks/mde/editor/EditorView$OSGiEditorLayerProviderDistributor +instanceKlass com/mathworks/mde/editor/EditorViewClient$8 +instanceKlass com/mathworks/mde/editor/codepad/CodepadContainer +instanceKlass com/mathworks/matlab/api/debug/ViewProvider +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter +instanceKlass com/mathworks/widgets/SyntaxTextPane$UniqueKeyProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStoreEventListener +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView +instanceKlass com/mathworks/matlab/api/editor/SaveOnBlur +instanceKlass com/mathworks/matlab/api/editor/DirtyState +instanceKlass com/mathworks/mde/editor/EditorView$EditorLayerProviderDistributor +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$2 +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPopupMenuListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxListSelectionListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPropertyChangeListener +instanceKlass com/mathworks/mwswing/ComboBoxItem +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$3 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$2 +instanceKlass javax/swing/JList$ListSelectionHandler +instanceKlass com/mathworks/toolstrip/plaf/ToolstripListUI$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$StackCallback +instanceKlass com/mathworks/widgets/datamodel/StorageLocationUtils +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefreshListenerManager +instanceKlass com/mathworks/mde/editor/MatlabEditor$EditorVisibilityListener +instanceKlass com/mathworks/matlab/api/debug/ExecutionArrowMargin +instanceKlass com/mathworks/mde/editor/TextFileUiInfoProvider$1 +instanceKlass com/mathworks/matlab/api/dataview/BasicUiInfoProvider +instanceKlass com/mathworks/widgets/datamodel/FileStorageLocation +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$DefaultEncodingProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultDialogProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyFileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$AlwaysSaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyDefaultFileNameProvider +instanceKlass org/apache/commons/io/IOCase +instanceKlass com/mathworks/widgets/text/EditorPreferences +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils$1 +instanceKlass com/mathworks/widgets/text/vhdl/VHDLLanguage +instanceKlass com/mathworks/widgets/text/verilog/VerilogLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CLanguage +instanceKlass com/mathworks/widgets/text/tlc/TLCLanguage +instanceKlass com/mathworks/widgets/text/simscape/SimscapeLanguage +instanceKlass com/mathworks/widgets/text/xml/XMLLanguage +instanceKlass com/mathworks/widgets/text/java/JavaLanguage +instanceKlass com/mathworks/widgets/text/cuda/CudaLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CPlusPlusLanguage +instanceKlass com/mathworks/widgets/text/plain/PlainLanguage +instanceKlass com/mathworks/widgets/text/mcode/MLanguage +instanceKlass com/mathworks/project/impl/PRJLanguage +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils +instanceKlass com/mathworks/widgets/text/STPViewModificationInterface +instanceKlass com/mathworks/matlab/api/debug/ViewProviderKey +instanceKlass com/mathworks/widgets/SyntaxTextPaneUtilities +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DialogInfoUserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore$UserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/DialogProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$12 +instanceKlass com/mathworks/mde/editor/EditorViewClient$11 +instanceKlass com/mathworks/mde/editor/EditorViewClient$2 +instanceKlass com/mathworks/mde/editor/MatlabEditor +instanceKlass com/mathworks/mde/editor/EditorViewClient$6 +instanceKlass com/mathworks/mde/editor/EditorViewClient$5 +instanceKlass com/mathworks/mde/editor/EditorViewClient$4 +instanceKlass com/mathworks/mde/editor/EditorViewClient$3 +instanceKlass com/mathworks/mwswing/api/DirtyStateChangeListener +instanceKlass com/mathworks/mde/editor/EditorViewCallback +instanceKlass com/mathworks/mde/editor/EditorViewListener +instanceKlass com/mathworks/widgets/debug/DebuggerManager$DebuggerManagerStateListener +instanceKlass com/mathworks/jmi/MatlabMCR$AWTReplyEvent +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$DBStackCallback +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry +instanceKlass com/mathworks/mwswing/UIEventLogger +instanceKlass com/mathworks/widgets/desk/DTEvent +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$2 +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$WSBPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LoggingActionListener +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$VariableInfo +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$PlottingSelectionListener +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDialogs +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$1 +instanceKlass com/mathworks/mlwidgets/workspace/VariableRecordlistModel$SizeStringComparator +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDnDListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger$LoggingProxyActionListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceSelectionPopupMenu$LoggingActionListener +instanceKlass com/mathworks/widgets/spreadsheet/IClipboardOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/IPrintingOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/ISaveOpProvider +instanceKlass com/mathworks/mlwidgets/array/UpdatableData +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$WorkspaceTableActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$AppFocusL +instanceKlass com/mathworks/widgets/recordlist/RecordlistResources +instanceKlass com/mathworks/widgets/recordlist/ObserverAdapter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$3 +instanceKlass javax/swing/JTable$4 +instanceKlass javax/swing/JTable$2 +instanceKlass javax/swing/JTable$Resizable3 +instanceKlass javax/swing/JTable$Resizable2 +instanceKlass com/mathworks/widgets/spreadsheet/UndoActionFactory +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$FieldEditor$1 +instanceKlass javax/swing/DefaultCellEditor$EditorDelegate +instanceKlass com/mathworks/widgets/recordlist/FullRLTCellRenderer +instanceKlass com/mathworks/mlwidgets/workspace/util/WorkspaceIcon +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ColumnSelectionRecorder +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$SelectionRecorder +instanceKlass com/mathworks/util/ArrayUtils$EmptyObjects +instanceKlass com/mathworks/widgets/recordlist/RecordlistSelectionTracker +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ActionHelper +instanceKlass com/mathworks/widgets/recordlist/ActionUtils +instanceKlass com/mathworks/mwswing/table/PlatformDelegatingHeaderRenderer +instanceKlass com/mathworks/mwswing/TableUtils +instanceKlass javax/swing/tree/TreeCellEditor +instanceKlass com/mathworks/util/ArrayUtils$EmptyPrimitives +instanceKlass com/mathworks/mlwidgets/graphics/PlotPickerOpener +instanceKlass com/mathworks/widgets/recordlist/IEditingObserver +instanceKlass com/mathworks/widgets/recordlist/IOpeningObserver +instanceKlass com/mathworks/widgets/recordlist/ICopyingObserver +instanceKlass com/mathworks/widgets/recordlist/IDuplicationObserver +instanceKlass com/mathworks/widgets/recordlist/ICreationObserver +instanceKlass com/mathworks/mwswing/TableCell +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$RowLocationData +instanceKlass com/mathworks/widgets/recordlist/IRecordFilter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$ViewUpdater +instanceKlass com/mathworks/mwswing/table/RestrictedSortTableModel +instanceKlass com/mathworks/mwswing/table/PresortedTableModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistListener +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$ActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$InputMapActionProvider +instanceKlass com/mathworks/mwswing/MJTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/spreadsheet/IUndoManagerProvider +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$8 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4$1 +instanceKlass com/mathworks/widgets/recordlist/IDeletionObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordOperationObserver +instanceKlass com/mathworks/mlservices/MLExecutionEvent$1 +instanceKlass com/mathworks/widgets/recordlist/IRecordSecondaryIconProvider +instanceKlass com/mathworks/widgets/recordlist/InternalActionHelper +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspacePrefs +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceLog +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WhosObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterObserver +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceMCRProvider +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceCommands +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceChange +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$LocalWorkspaceEventObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$3 +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterFreeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WorkspaceChangeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener +instanceKlass com/mathworks/mlwidgets/workspace/FetchedValueBuffer +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$MWMCompletionObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$RQI +instanceKlass com/mathworks/mlwidgets/workspace/NestingInformation +instanceKlass com/mathworks/mlwidgets/workspace/WhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/ClassicWhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceResources +instanceKlass com/mathworks/widgets/spreadsheet/format/FormatIdentifier$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordQueryInformant +instanceKlass com/mathworks/widgets/datatransfer/VariableLiteral +instanceKlass com/mathworks/widgets/recordlist/AbstractRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IVirtualRecordContainer +instanceKlass com/mathworks/widgets/recordlist/IRecordIconProvider +instanceKlass com/mathworks/mlwidgets/workspace/ValueLookup +instanceKlass com/mathworks/widgets/recordlist/IRecordlistRefresher +instanceKlass com/mathworks/widgets/recordlist/IRestrictedSortRecordlist +instanceKlass com/mathworks/widgets/recordlist/IRecordEditor +instanceKlass com/mathworks/widgets/recordlist/IRecordOpener +instanceKlass com/mathworks/widgets/recordlist/IRecordDuplicator +instanceKlass com/mathworks/widgets/recordlist/IRecordDeleter +instanceKlass com/mathworks/widgets/recordlist/IRecordCreator +instanceKlass com/mathworks/widgets/recordlist/IRecordFieldCopier +instanceKlass com/mathworks/widgets/recordlist/IRecordCopier +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LocalChangeListener +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$StackInfoChange +instanceKlass com/mathworks/widgets/spreadsheet/IUndoOpProvider +instanceKlass com/mathworks/widgets/recordlist/IRecordValueMutator +instanceKlass com/mathworks/widgets/recordlist/IRecordlistMutator +instanceKlass com/mathworks/mlwidgets/graphics/IPlotPickerDisplayTrigger +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphingActionListener +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphableInfoProvider +instanceKlass com/mathworks/mlwidgets/workspace/IWorkspaceActionProvider +instanceKlass com/mathworks/widgets/recordlist/IActionProvider +instanceKlass com/mathworks/widgets/recordlist/IGenericNameSupplier +instanceKlass com/mathworks/widgets/recordlist/IRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistFieldConfig +instanceKlass com/mathworks/widgets/recordlist/IRecordContainer +instanceKlass com/mathworks/jmi/AWTUtilities$Latch +instanceKlass com/mathworks/jmi/AWTUtilities$MatlabWait +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$FlushRunnable +instanceKlass com/mathworks/mde/cmdwin/CommandWindowRegistrar +instanceKlass com/mathworks/mlservices/MLCommandWindow +instanceKlass com/mathworks/mlservices/MLCommandWindowRegistrar +instanceKlass org/netbeans/editor/WeakTimerListener +instanceKlass java/util/Observable +instanceKlass com/mathworks/widgets/incSearch/IncSearchStatusBar$1 +instanceKlass com/mathworks/widgets/incSearch/IncSearch$IncSearchResults +instanceKlass com/mathworks/mwswing/ClipboardMonitor$TypeChangedNotifier +instanceKlass com/mathworks/mde/cmdwin/CmdWinEditorKit$1 +instanceKlass com/mathworks/mwswing/ClipboardMonitor +instanceKlass java/text/StringCharacterIterator +instanceKlass com/mathworks/mwswing/text/MTextAction$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionExecutionListener +instanceKlass com/mathworks/mde/cmdwin/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionInterface +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletion +instanceKlass com/mathworks/mde/cmdhist/AltHistory$RecallListener +instanceKlass com/mathworks/mde/cmdwin/CmdWin$1 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$1 +instanceKlass javax/accessibility/AccessibleBundle +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$MyAppearanceFocusListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$5 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$2 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$1 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$SearchData +instanceKlass com/mathworks/mwswing/text/DocumentSearch +instanceKlass com/mathworks/widgets/Tokenizer +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup +instanceKlass com/mathworks/services/KeyboardPrefs +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$Options +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup$TokenMatchListener +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$8 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWPrefsListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWCaretListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$FindClientImpl +instanceKlass com/mathworks/mde/cmdwin/CWDragDropImpl +instanceKlass com/mathworks/mde/cmdwin/XCaret$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$3 +instanceKlass com/mathworks/util/Assert +instanceKlass com/mathworks/widgets/find/FindDialog +instanceKlass com/mathworks/widgets/find/FindParentListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CmdWinFontListener +instanceKlass com/mathworks/widgets/incSearch/IncSearchData +instanceKlass com/mathworks/widgets/find/FindClientInterface +instanceKlass javax/print/DocFlavor +instanceKlass javax/print/attribute/AttributeSet +instanceKlass com/mathworks/mwswing/datatransfer/AutoScroller +instanceKlass com/mathworks/services/PrefEvent +instanceKlass com/mathworks/mwswing/ClipboardListener +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$4 +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$2 +instanceKlass com/mathworks/mwswing/MJComboBox$2 +instanceKlass com/mathworks/mwswing/MJComboBox$3 +instanceKlass com/mathworks/mwswing/MJComboBox$DelegatingMouseListener +instanceKlass com/mathworks/mwswing/MacAppearanceUtils +instanceKlass com/mathworks/mwswing/MJToggleButton$ActionPropertyHandler +instanceKlass com/mathworks/widgets/desk/DTTabbedDocumentPane$1 +instanceKlass org/jdesktop/animation/timing/interpolation/LengthItem +instanceKlass org/jdesktop/animation/timing/interpolation/SplineInterpolator +instanceKlass org/jdesktop/animation/timing/interpolation/Interpolator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$TabDragger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$Animator +instanceKlass com/mathworks/widgets/desk/Range +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingAdditions +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingRemovals +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$EdgeListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$TileAction$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$AnimationDoneListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$Tiling +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties +instanceKlass com/mathworks/widgets/desk/DTTitleBar$2 +instanceKlass com/mathworks/widgets/desk/DTTitleButton$ActionPropertyListener +instanceKlass com/mathworks/widgets/desk/DTTitleButton$IconData +instanceKlass com/mathworks/widgets/desk/DTBorderFactory$SelectionDependent +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$BarState +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ContainerState +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$State +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step$1 +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Condition +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder +instanceKlass com/mathworks/mde/explorer/Explorer$1 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils$3 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils +instanceKlass com/mathworks/widgets/desk/DTToolSet$1 +instanceKlass com/mathworks/widgets/desk/DTToolSet$KeyOwnerCombo +instanceKlass com/mathworks/widgets/desk/DTToolBarFactory +instanceKlass com/mathworks/widgets/desk/DTToolSet$ItemInfo +instanceKlass com/mathworks/widgets/desk/DTToolSet +instanceKlass com/mathworks/mde/explorer/Explorer$9 +instanceKlass com/mathworks/mde/explorer/Explorer$17 +instanceKlass com/mathworks/mde/explorer/Explorer$15 +instanceKlass com/mathworks/mde/explorer/Explorer$16 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$3 +instanceKlass com/mathworks/services/ColorPrefs$ColorListener +instanceKlass com/mathworks/services/ColorPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ColorListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/util/ExplicitColorAndFontProvider +instanceKlass com/mathworks/util/tree/TreeUtils$8 +instanceKlass com/mathworks/util/tree/TreeUtils$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$5 +instanceKlass com/mathworks/util/tree/VisitStrategy +instanceKlass com/mathworks/util/tree/TreeUtils$9 +instanceKlass com/mathworks/util/tree/Visitor +instanceKlass com/mathworks/util/tree/TreeUtils +instanceKlass com/mathworks/util/tree/ComponentTree +instanceKlass com/mathworks/services/OldFontPrefs +instanceKlass com/mathworks/mde/functionbrowser/FunctionBrowserFontPrefs +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils$ClipboardPrefListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs$DecimalSeparatorListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs +instanceKlass com/mathworks/widgets/spreadsheet/format/SupplementalFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/CompositeFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory$BooleanFormatterImpl +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalar +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$GEBestFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$1 +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/Formatter +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils +instanceKlass com/mathworks/mde/array/ArrayEditorFontPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowserResources +instanceKlass com/mathworks/mde/workspace/WorkspaceFontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$ExplorerFontPrefs +instanceKlass com/mathworks/mde/editor/EditorFontPrefs +instanceKlass com/mathworks/mde/cmdhist/CmdHistoryPrefs +instanceKlass com/mathworks/services/FontPrefs$FontItem +instanceKlass com/mathworks/services/PrefsAWT +instanceKlass com/mathworks/services/FontPrefs$HtmlFontPrefs +instanceKlass com/mathworks/services/FontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ComponentListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$1 +instanceKlass com/mathworks/util/tree/Tree +instanceKlass com/mathworks/services/FontListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils +instanceKlass com/mathworks/mde/explorer/Explorer$4 +instanceKlass com/mathworks/mde/explorer/Explorer$3 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$5 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$4 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$Header$1 +instanceKlass java/awt/GridBagConstraints +instanceKlass java/awt/GridBagLayout +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$2 +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder +instanceKlass javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneBorder +instanceKlass com/mathworks/sourcecontrol/ThreadUtils$1 +instanceKlass com/mathworks/sourcecontrol/ThreadUtils +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$2 +instanceKlass java/util/UUID$Holder +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$1 +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$2 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$2 +instanceKlass com/mathworks/widgets/tooltip/TooltipUtils +instanceKlass com/mathworks/mwswing/ComponentUtils +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$2 +instanceKlass javax/swing/text/html/AccessibleHTML$DocumentHandler +instanceKlass javax/swing/text/html/AccessibleHTML$ElementInfo +instanceKlass javax/swing/text/html/AccessibleHTML$PropertyChangeHandler +instanceKlass javax/swing/text/html/AccessibleHTML +instanceKlass javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable +instanceKlass java/util/Formatter$Conversion +instanceKlass java/util/Formatter$Flags +instanceKlass java/util/Formatter$FormatSpecifier +instanceKlass java/util/Formatter$FixedString +instanceKlass java/util/Formatter$FormatString +instanceKlass java/util/Formatter +instanceKlass com/mathworks/util/HTMLUtils +instanceKlass javax/swing/text/GapContent$UndoPosRef +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer$ElemChanges +instanceKlass javax/swing/text/DefaultStyledDocument$ElementSpec +instanceKlass com/mathworks/services/settings/SettingLevel$1 +instanceKlass javax/swing/text/html/parser/ContentModelState +instanceKlass javax/swing/text/html/parser/TagStack +instanceKlass javax/swing/text/html/parser/TagElement +instanceKlass javax/swing/text/html/parser/Parser +instanceKlass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction +instanceKlass javax/swing/text/html/HTMLEditorKit$ParserCallback +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$6 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$1 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$5 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$3 +instanceKlass javax/swing/text/TabableView +instanceKlass javax/swing/text/html/StyleSheet$1 +instanceKlass javax/swing/text/html/CSSBorder$StrokePainter +instanceKlass javax/swing/text/html/CSSBorder$SolidPainter +instanceKlass javax/swing/text/html/CSSBorder$NullPainter +instanceKlass javax/swing/text/html/CSSBorder$BorderPainter +instanceKlass javax/swing/text/html/StyleSheet$BoxPainter +instanceKlass javax/swing/text/html/StyleSheet$SearchBuffer +instanceKlass javax/swing/text/html/MuxingAttributeSet +instanceKlass javax/swing/text/FlowView$FlowStrategy +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler +instanceKlass javax/swing/text/html/parser/AttributeList +instanceKlass javax/swing/text/html/parser/ContentModel +instanceKlass javax/swing/text/html/parser/ParserDelegator$1 +instanceKlass javax/swing/text/html/parser/Entity +instanceKlass javax/swing/text/html/parser/Element +instanceKlass javax/swing/text/html/parser/DTD +instanceKlass javax/swing/text/html/parser/DTDConstants +instanceKlass javax/swing/text/html/HTMLEditorKit$Parser +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer +instanceKlass javax/swing/text/html/CSS$ShorthandMarginParser +instanceKlass javax/swing/text/html/CSS$LengthUnit +instanceKlass javax/swing/text/html/CSSParser +instanceKlass javax/swing/text/html/StyleSheet$CssParser +instanceKlass javax/swing/text/html/CSSParser$CSSParserCallback +instanceKlass javax/swing/text/html/HTMLEditorKit$1 +instanceKlass javax/swing/text/html/StyleSheet$SelectorMapping +instanceKlass javax/swing/text/html/CSS$CssValue +instanceKlass javax/swing/text/html/CSS$Value +instanceKlass javax/swing/text/html/CSS$Attribute +instanceKlass javax/swing/text/html/CSS +instanceKlass javax/swing/text/StyledEditorKit$AttributeTracker +instanceKlass javax/swing/text/html/HTML$Attribute +instanceKlass javax/swing/text/html/HTML +instanceKlass javax/swing/text/html/HTML$Tag +instanceKlass javax/swing/text/html/HTMLEditorKit$HTMLFactory +instanceKlass javax/swing/text/StyledEditorKit$StyledViewFactory +instanceKlass javax/swing/text/StyledDocument +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$1 +instanceKlass javax/swing/event/HyperlinkListener +instanceKlass com/mathworks/widgets/HyperlinkTextLabel +instanceKlass com/mathworks/toolbox/shared/computils/widgets/DisposableBusyAffordance$1 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$9 +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$SourceControlUIHolder +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$MainContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DynamicMenuContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$4 +instanceKlass com/mathworks/matlab/api/explorer/CutCopyPasteActionValidator +instanceKlass java/util/function/Predicate +instanceKlass java/util/function/Consumer +instanceKlass java/util/function/UnaryOperator +instanceKlass sun/awt/datatransfer/DataTransferer$IndexedComparator +instanceKlass sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder +instanceKlass java/awt/datatransfer/SystemFlavorMap$2 +instanceKlass sun/net/DefaultProgressMeteringPolicy +instanceKlass sun/net/ProgressMeteringPolicy +instanceKlass sun/net/ProgressMonitor +instanceKlass java/awt/EventQueue$1AWTInvocationLock +instanceKlass java/awt/datatransfer/SystemFlavorMap$1 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$6 +instanceKlass sun/awt/Mutex +instanceKlass sun/awt/datatransfer/ToolkitThreadBlockedHandler +instanceKlass java/util/WeakHashMap$HashIterator +instanceKlass com/mathworks/util/RequestFilter$1$1 +instanceKlass sun/awt/datatransfer/DataTransferer +instanceKlass java/awt/datatransfer/Clipboard +instanceKlass com/mathworks/widgets/grouptable/transfer/Transfer +instanceKlass com/mathworks/mlwidgets/explorer/util/MLPathUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$1 +instanceKlass com/mathworks/sourcecontrol/EmptyProject +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$1 +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$2 +instanceKlass com/mathworks/cmlink/util/status/CMStatusChangeServer +instanceKlass com/mathworks/sourcecontrol/SCProcessTerminator +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressState +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster$EventDispatcher +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/controller/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/api/ProgressIndicator +instanceKlass com/mathworks/cmlink/api/ExceptionHandler +instanceKlass com/mathworks/cmlink/api/StatusBroadcaster +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$2 +instanceKlass com/mathworks/cmlink/util/interactor/CMMonitor +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$4 +instanceKlass com/mathworks/cmlink/util/adapter/TriggerableTerminator +instanceKlass com/mathworks/cmlink/api/Terminator +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$SCAdapterConnectionManagerHolder +instanceKlass com/mathworks/cmlink/management/cache/CMStatusCacheListener +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapter +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMInteractor +instanceKlass com/mathworks/hg/util/HGPeerQueue +instanceKlass com/mathworks/cmlink/util/interactor/MonitoringApplicationInteractor +instanceKlass com/mathworks/cmlink/api/ApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager +instanceKlass com/mathworks/sourcecontrol/prefs/SCSettingsUtilities +instanceKlass com/mathworks/util/LazyFilter$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$2 +instanceKlass com/mathworks/util/LazyFilter +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ApplicableChecker +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$6 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$5 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$4 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$3 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$2 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$9 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$8 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$1 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$4 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$3 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$2 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$1 +instanceKlass sun/awt/windows/WDesktopPeer +instanceKlass java/awt/peer/DesktopPeer +instanceKlass java/awt/Desktop +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DeleteActionCode +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/MenuUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$32 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$1 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$7 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$6 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$5 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$4 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$3 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$2 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$1 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$8 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$7 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$6 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$5 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$4 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$3 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/WritablePathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$33 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider$ReportRunner +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$5 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$4 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$1 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$3 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveIconFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider$1 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$2 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$2 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$2 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$1 +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration$1 +instanceKlass com/mathworks/toolboxmanagement/tasks/ToolboxInstallTask +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$1 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$3 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$1 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$4 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$3 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$2 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$3 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$4 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$CachedData +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$ImmutableEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem$MountPoint +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicate +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput$1 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$6 +instanceKlass com/mathworks/util/ObjectPool$Entry +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$1 +instanceKlass com/mathworks/util/ObjectPool +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/CommonsCompressZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipInput +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$2 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$InputFailoverChain +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderBinding +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl$ProviderBinding +instanceKlass com/mathworks/util/ExtendedIterable +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DeferHandler +instanceKlass com/mathworks/matlab/api/explorer/ActionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$ActionList +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$1 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$2 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProviderProvider +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$4 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DecorationResolvingInstantiator +instanceKlass com/mathworks/widgets/WorkMonitor$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabCodeFileDetailPanel +instanceKlass com/mathworks/matlab/api/explorer/DetailPanel +instanceKlass javax/accessibility/AccessibleExtendedTable +instanceKlass javax/accessibility/AccessibleTable +instanceKlass javax/accessibility/AccessibleSelection +instanceKlass com/mathworks/explorer/VariableTransferHandler +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/H1Retriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TransferFileGroup +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$2 +instanceKlass java/awt/datatransfer/MimeType +instanceKlass java/awt/datatransfer/MimeTypeParameterList +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$5 +instanceKlass java/awt/datatransfer/DataFlavor +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/FileTransferHandler +instanceKlass com/mathworks/mwswing/table/ListColorUtils +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$20 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$19 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$18 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$3 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$1 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$1 +instanceKlass com/mathworks/fileutils/MLFileUtils +instanceKlass com/mathworks/mwswing/CellViewer$4 +instanceKlass com/mathworks/mwswing/CellViewer$3 +instanceKlass com/mathworks/mwswing/CellViewer$2 +instanceKlass com/mathworks/mwswing/CellViewer$1 +instanceKlass com/mathworks/mwswing/CellViewer +instanceKlass com/mathworks/fl/i18n/XMLMessageSystemJNI +instanceKlass com/mathworks/mwswing/CellPainterProvider +instanceKlass com/mathworks/mwswing/CellViewerUtils$Context +instanceKlass com/mathworks/mwswing/CellViewerUtils +instanceKlass com/mathworks/mwswing/DefaultTableCellViewerCustomizer +instanceKlass com/mathworks/fl/i18n/XMLMessageSystem +instanceKlass com/mathworks/widgets/grouptable/RightClickSelectionHandler +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$1 +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler$3 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfo +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$2 +instanceKlass com/mathworks/matlab/api/explorer/FileDecorators +instanceKlass com/mathworks/matlab/api/explorer/FileDecorations +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$1 +instanceKlass com/mathworks/matlab/api/explorer/CoreFileDecoration +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$5 +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionRunner +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$26 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Element +instanceKlass com/jidesoft/grid/SortableTableModel$a_ +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$8 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$4 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$3 +instanceKlass com/mathworks/util/RequestQueue$3 +instanceKlass com/mathworks/util/RequestQueue$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileListExpansionContext +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider$State +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$2 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$1 +instanceKlass java/util/concurrent/ConcurrentHashMap$Traverser +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$2 +instanceKlass sun/font/SunFontManager$TTorT1Filter +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$3 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$1 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener +instanceKlass sun/font/SunFontManager$4 +instanceKlass com/mathworks/widgets/grouptable/ToolTipSupport +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$37 +instanceKlass java/awt/font/LineMetrics +instanceKlass sun/font/CoreMetrics +instanceKlass sun/font/StandardGlyphVector$GlyphStrike +instanceKlass java/awt/font/GlyphVector +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$20 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$25 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$24 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$8 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$14 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$13 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$12 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$11 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$10 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$7 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$9 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$30 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$29 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$27 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$19 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$18 +instanceKlass sun/font/SunFontManager$13 +instanceKlass com/mathworks/hg/util/HGUtils$ComponentImageRunnable +instanceKlass java/awt/Cursor$CursorDisposer +instanceKlass com/mathworks/hg/util/HGUtils +instanceKlass java/awt/image/PixelGrabber +instanceKlass java/awt/image/FilteredImageSource +instanceKlass java/awt/image/ImageFilter +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$DebugStateListener$1 +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$2 +instanceKlass java/awt/Cursor$2 +instanceKlass java/awt/Cursor$3 +instanceKlass java/awt/dnd/DragSource +instanceKlass java/awt/dnd/DragSourceAdapter +instanceKlass java/awt/dnd/DragSourceMotionListener +instanceKlass java/awt/dnd/DragSourceListener +instanceKlass java/awt/dnd/DragGestureListener +instanceKlass com/mathworks/widgets/grouptable/transfer/TransferController +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$2 +instanceKlass com/mathworks/util/RequestAggregator$2 +instanceKlass com/mathworks/util/RequestFilter$Request +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$3 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$5 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$4 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$2 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$1 +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$4 +instanceKlass com/mathworks/mwswing/MJCheckBoxMenuItem$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$1 +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$ToggleSelectionPolicy +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$SelectionPolicy +instanceKlass java/util/concurrent/Semaphore +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$DefaultEditHandler +instanceKlass com/mathworks/hg/peer/DebugUtilities$1 +instanceKlass com/mathworks/hg/peer/DebugUtilities +instanceKlass com/mathworks/jmi/AWTUtilities$Synchronizer +instanceKlass com/mathworks/hg/peer/FigureRenderLocker +instanceKlass com/jidesoft/grid/TreeTable$0 +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch$1 +instanceKlass com/jidesoft/grid/SortableTable$0 +instanceKlass com/jidesoft/grid/SortItemSupport +instanceKlass com/jidesoft/grid/g +instanceKlass com/jidesoft/grid/TableModelsWrapper +instanceKlass com/jidesoft/grid/SortItemSupport$SortOrderHandler +instanceKlass com/jidesoft/grid/CellStyleTable$0 +instanceKlass com/jidesoft/grid/JideTable$14 +instanceKlass java/awt/datatransfer/Transferable +instanceKlass javax/swing/TransferHandler$DropLocation +instanceKlass com/jidesoft/grid/JideTable$11 +instanceKlass com/jidesoft/grid/RendererWrapper +instanceKlass com/jidesoft/swing/DelegateMouseInputListener +instanceKlass javax/swing/plaf/basic/BasicTableUI$Handler +instanceKlass com/jidesoft/grid/NavigableModel +instanceKlass com/jidesoft/grid/StyleModel +instanceKlass com/jidesoft/grid/IndexedRowTableModelWrapper +instanceKlass com/jidesoft/grid/IFilterableTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableHeaderAdapter +instanceKlass com/jidesoft/plaf/basic/BasicJideTableUIDelegate +instanceKlass com/jidesoft/plaf/TableUIDelegate +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator$a_ +instanceKlass com/jidesoft/grid/EditorStyleTableModel +instanceKlass com/jidesoft/grid/GroupModelProvider +instanceKlass com/jidesoft/grid/ColumnTableModelWrapper +instanceKlass com/jidesoft/grid/RowTableModelWrapper +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator +instanceKlass com/jidesoft/grid/CellStyleTableHeader$0 +instanceKlass com/jidesoft/utils/SortedList +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$1 +instanceKlass com/jidesoft/plaf/DelegateTableHeaderUI +instanceKlass sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon +instanceKlass com/jidesoft/grid/TableHeaderCellDecorator +instanceKlass javax/swing/JTable$$Lambda$19 +instanceKlass javax/swing/JTable$$Lambda$18 +instanceKlass javax/swing/JTable$$Lambda$17 +instanceKlass javax/swing/JTable$$Lambda$16 +instanceKlass javax/swing/JTable$$Lambda$15 +instanceKlass javax/swing/JTable$$Lambda$14 +instanceKlass javax/swing/JTable$$Lambda$13 +instanceKlass javax/swing/JTable$$Lambda$12 +instanceKlass javax/swing/JTable$$Lambda$11 +instanceKlass javax/swing/JTable$$Lambda$10 +instanceKlass javax/swing/JTable$$Lambda$9 +instanceKlass com/jidesoft/grid/JideTable$8 +instanceKlass com/jidesoft/grid/JideTable$7 +instanceKlass com/jidesoft/plaf/TableHeaderUIDelegate +instanceKlass com/jidesoft/grid/TableUtils +instanceKlass com/jidesoft/grid/TableModelWrapper +instanceKlass com/jidesoft/grid/TableModelWrapperUtils +instanceKlass com/jidesoft/grid/ColumnWidthTableModel +instanceKlass com/jidesoft/grid/ColumnIdentifierTableModel +instanceKlass com/jidesoft/grid/h +instanceKlass com/jidesoft/swing/AlignmentSupport +instanceKlass com/jidesoft/swing/ComponentStateSupport +instanceKlass com/jidesoft/swing/ButtonStyle +instanceKlass javax/swing/table/DefaultTableColumnModel +instanceKlass javax/swing/table/TableColumnModel +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/TableActionInput +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler +instanceKlass com/mathworks/widgets/grouptable/ColumnActions +instanceKlass com/mathworks/matlab/api/explorer/Status +instanceKlass com/mathworks/widgets/ClosableToolTipData +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager +instanceKlass com/mathworks/widgets/grouptable/GroupingTableLayout +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler +instanceKlass com/jidesoft/grid/TableStyleProvider +instanceKlass com/jidesoft/grid/CellStyleCustomizer +instanceKlass com/jidesoft/grid/CellStyleProvider +instanceKlass com/jidesoft/grid/CellStyle +instanceKlass com/jidesoft/swing/Prioritized +instanceKlass com/jidesoft/validation/Validator +instanceKlass javax/swing/undo/UndoableEditSupport +instanceKlass com/jidesoft/grid/SortTableHeaderRenderer +instanceKlass com/jidesoft/validation/RowValidator +instanceKlass com/jidesoft/grid/GridColorProvider +instanceKlass javax/swing/table/TableColumn +instanceKlass com/jidesoft/grid/JideCellEditorListener +instanceKlass com/jidesoft/grid/JideTable$q_ +instanceKlass com/jidesoft/grid/RowHeights +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$10 +instanceKlass com/mathworks/widgets/BusyAffordance$3 +instanceKlass com/mathworks/widgets/WorkMonitor$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUtils +instanceKlass com/mathworks/widgets/WorkMonitor$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$7 +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget +instanceKlass com/mathworks/widgets/WorkMonitor$3 +instanceKlass com/mathworks/widgets/WorkMonitor$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableResources +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$6 +instanceKlass com/mathworks/widgets/grouptable/FlatExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$ConfigurationListener +instanceKlass com/mathworks/util/TypeFilter +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionCombiner +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$RootContextChangeListener +instanceKlass java/lang/Math$RandomNumberGeneratorHolder +instanceKlass com/jidesoft/grid/DefaultExpandable$0 +instanceKlass com/jidesoft/grid/Cacheable +instanceKlass com/jidesoft/grid/ExpandableCell +instanceKlass com/jidesoft/grid/c +instanceKlass com/jidesoft/grid/AbstractNode +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$GroupingTableDefaultIntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$IntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Target +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget$Adapter +instanceKlass com/mathworks/widgets/grouptable/ExpansionChangeListener +instanceKlass javax/swing/tree/TreePath +instanceKlass com/jidesoft/grid/ExpandableRow +instanceKlass com/jidesoft/grid/Expandable +instanceKlass javax/swing/table/AbstractTableModel +instanceKlass com/jidesoft/grid/IndexChangeEventGenerator +instanceKlass com/jidesoft/grid/ITreeTableModel +instanceKlass com/jidesoft/grid/MultiTableModel +instanceKlass com/jidesoft/grid/ContextSensitiveTableModel +instanceKlass com/jidesoft/grid/SpanTableModel +instanceKlass com/jidesoft/grid/SpanModel +instanceKlass com/jidesoft/utils/CacheMap +instanceKlass com/mathworks/matlab/api/explorer/ActionInput +instanceKlass javax/swing/event/TreeWillExpandListener +instanceKlass com/mathworks/widgets/grouptable/NonRectangularCellRenderer +instanceKlass javax/swing/event/TreeExpansionListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$MessageFactory +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$EditHandler +instanceKlass com/jidesoft/grid/Row +instanceKlass com/jidesoft/grid/Node +instanceKlass com/jidesoft/grid/ISortableTableModel +instanceKlass com/jidesoft/converter/AbstractContext +instanceKlass javax/swing/AbstractCellEditor +instanceKlass com/jidesoft/grid/JideCellEditor +instanceKlass com/jidesoft/grid/EditorStyleSupport +instanceKlass com/jidesoft/grid/EditorContextSupport +instanceKlass com/jidesoft/converter/ConverterContextSupport +instanceKlass com/mathworks/mde/explorer/Explorer$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$6 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$7 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance$1 +instanceKlass com/mathworks/util/ReturnRunnable +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance +instanceKlass com/mathworks/mde/explorer/DirectoryVsFileSeparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$1 +instanceKlass com/mathworks/widgets/grouptable/Group +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4 +instanceKlass com/jidesoft/grid/TableColumnWidthKeeper +instanceKlass com/jidesoft/grid/FilterableTableModelListener +instanceKlass com/jidesoft/swing/AutoCompletion +instanceKlass com/jidesoft/validation/ValidationResult +instanceKlass com/jidesoft/grid/RowHeightChangeListener +instanceKlass com/jidesoft/grid/TableSelectionListener +instanceKlass com/jidesoft/grid/TableSelectionModel +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$3 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnSize +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DescriptionAttribute +instanceKlass com/mathworks/widgets/grouptable/VerticalAttribute +instanceKlass com/jidesoft/grid/CellSpan +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePair +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSizeGenerator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/StatusGroupingMode +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$2 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$1 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$IconConverter +instanceKlass com/mathworks/sourcecontrol/resources/CFBSCResources +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn +instanceKlass com/mathworks/sourcecontrol/SourceControlUI +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableEditor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileTypeComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn +instanceKlass com/mathworks/widgets/grouptable/GroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn +instanceKlass com/mathworks/widgets/grouptable/ExpansionContext +instanceKlass com/mathworks/mde/explorer/Explorer$14 +instanceKlass com/mathworks/mde/explorer/Explorer$13 +instanceKlass com/mathworks/mde/explorer/Explorer$12 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/GlobalShutdownEventListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/EmptyPoller +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$9 +instanceKlass javax/swing/event/UndoableEditListener +instanceKlass javax/swing/text/DefaultCaret$1 +instanceKlass javax/swing/text/AbstractDocument$UndoRedoDocumentEvent +instanceKlass javax/swing/event/DocumentEvent$ElementChange +instanceKlass javax/swing/text/SegmentCache +instanceKlass javax/swing/text/Utilities +instanceKlass javax/swing/event/DocumentEvent$EventType +instanceKlass javax/swing/undo/AbstractUndoableEdit +instanceKlass javax/swing/undo/UndoableEdit +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$3 +instanceKlass com/mathworks/mwswing/DefaultListCellViewerCustomizer +instanceKlass java/awt/dnd/DragGestureRecognizer +instanceKlass com/mathworks/mwswing/MJList$ListAppearanceFocusListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$1 +instanceKlass javax/swing/JComponent$ActionStandin +instanceKlass com/jidesoft/hints/AbstractIntelliHints$2 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$4 +instanceKlass com/sun/java/swing/plaf/windows/WindowsGraphicsUtils +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager +instanceKlass javax/swing/JComboBox$KeySelectionManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$Handler +instanceKlass javax/swing/plaf/basic/BasicComboBoxEditor +instanceKlass javax/swing/ComboBoxEditor +instanceKlass javax/swing/plaf/basic/BasicScrollPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ModelListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsScrollBarUI$Grid +instanceKlass javax/swing/JScrollBar$ModelListener +instanceKlass java/awt/Adjustable +instanceKlass javax/swing/ViewportLayout +instanceKlass javax/swing/ScrollPaneLayout +instanceKlass javax/swing/plaf/basic/BasicComboPopup$Handler +instanceKlass javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass +instanceKlass javax/swing/plaf/basic/ComboPopup +instanceKlass com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2 +instanceKlass javax/swing/JComboBox$1 +instanceKlass javax/swing/MutableComboBoxModel +instanceKlass javax/swing/ComboBoxModel +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupPropertyChangeListener +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupLayout +instanceKlass com/jidesoft/swing/DraggableHandle +instanceKlass com/jidesoft/swing/Alignable +instanceKlass com/jidesoft/swing/ResizableSupport +instanceKlass com/jidesoft/popup/JidePopupFactory +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8 +instanceKlass com/jidesoft/swing/JideScrollPaneConstants +instanceKlass com/jidesoft/hints/AbstractIntelliHints +instanceKlass com/jidesoft/hints/IntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarTextFieldUtils +instanceKlass com/mathworks/util/RequestFilter$1 +instanceKlass com/mathworks/util/RequestAggregator +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$1 +instanceKlass com/mathworks/util/Combiner +instanceKlass com/mathworks/util/RequestFilter +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent +instanceKlass org/apache/commons/lang/StringUtils +instanceKlass com/mathworks/util/ParameterRunnable +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/PaintingUtils +instanceKlass java/awt/geom/Line2D +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarIcon +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButton +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/StatToEntryAdapter +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList$1 +instanceKlass com/mathworks/util/AsyncReceiverUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList$1 +instanceKlass com/mathworks/util/Holder +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$State +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/IconLabel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$8 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel$StateChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton +instanceKlass com/mathworks/util/MulticastChangeListener +instanceKlass com/mathworks/mde/explorer/Explorer$11 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$3 +instanceKlass com/mathworks/addons_common/util/settings/AddOnsSettingsUtils +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation$LazyHolder +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation +instanceKlass com/mathworks/addons_common/util/settings/InstallationFolderUtils +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryFacadeImpl +instanceKlass java/util/concurrent/CopyOnWriteArrayList$COWIterator +instanceKlass com/mathworks/addons/AddOnsAddressBarAPIPlugin +instanceKlass com/mathworks/filesystem_adapter/services/MATLABOnlineAddressBarPlugin +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAddressBarPlugin +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager$AddressBarPluginManagerHolder +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager +instanceKlass com/mathworks/mlwidgets/explorer/util/MacEncodingBugWorkaround +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$HistoryItem +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$4 +instanceKlass com/mathworks/util/MRUList +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory +instanceKlass com/mathworks/mde/explorer/Explorer$8 +instanceKlass com/mathworks/widgets/WorkMonitor$Task +instanceKlass com/mathworks/mde/explorer/Explorer$18 +instanceKlass com/mathworks/sourcecontrol/SourceControlManagerPluginImpl +instanceKlass com/mathworks/mlwidgets/explorer/SourceControlManager +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntry +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntryFactory +instanceKlass com/mathworks/cfbutils/StatEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualTarget +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext$State +instanceKlass java/util/concurrent/RunnableScheduledFuture +instanceKlass java/util/concurrent/ScheduledFuture +instanceKlass java/util/concurrent/ScheduledExecutorService +instanceKlass com/mathworks/util/NamedDaemonThreadFactory +instanceKlass com/mathworks/util/ExecutorServiceFactory +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerRefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/PathModel +instanceKlass com/mathworks/mlwidgets/explorer/util/MLFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$Node +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1 +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore +instanceKlass com/mathworks/matlab/api/editor/Editor +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$12 +instanceKlass com/mathworks/cfbutils/FileSystemAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/DebugAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$5 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$3 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$4 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$MessageHandler +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier +instanceKlass ca/odell/glazedlists/impl/WeakReferenceProxy +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$SubjectAndListener +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/SimpleTree +instanceKlass ca/odell/glazedlists/impl/sort/ComparableComparator +instanceKlass ca/odell/glazedlists/CollectionList$Model +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor +instanceKlass ca/odell/glazedlists/ThresholdList$Evaluator +instanceKlass ca/odell/glazedlists/FunctionList$Function +instanceKlass ca/odell/glazedlists/TextFilterator +instanceKlass ca/odell/glazedlists/gui/TableFormat +instanceKlass ca/odell/glazedlists/Filterator +instanceKlass ca/odell/glazedlists/ObservableElementList$Connector +instanceKlass ca/odell/glazedlists/GlazedLists +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/Element +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorTree +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/ListToByteCoder +instanceKlass ca/odell/glazedlists/impl/event/Tree4Deltas +instanceKlass ca/odell/glazedlists/impl/adt/gnutrove/TIntArrayList +instanceKlass ca/odell/glazedlists/impl/event/BlockSequence +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter$ListEventFormat +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$EventFormat +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$PublisherAdapter +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$AssemblerHelper +instanceKlass com/mathworks/html/Url +instanceKlass ca/odell/glazedlists/event/ListEventAssembler +instanceKlass ca/odell/glazedlists/impl/java15/LockAdapter +instanceKlass com/mathworks/help/helpui/DocUrlParser +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50ReadWriteLock +instanceKlass com/mathworks/helpsearch/SearchConfig +instanceKlass com/mathworks/helpsearch/product/DocumentationSet +instanceKlass ca/odell/glazedlists/util/concurrent/ReadWriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/Lock +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50LockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/DelegateLockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/LockFactory +instanceKlass ca/odell/glazedlists/SortedList$ElementRawOrderComparator +instanceKlass ca/odell/glazedlists/SortedList$ElementComparator +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$6 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$RegistrationListener +instanceKlass ca/odell/glazedlists/AbstractEventList +instanceKlass ca/odell/glazedlists/event/ListEventListener +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger +instanceKlass com/mathworks/matlab/api/debug/Debugger +instanceKlass ca/odell/glazedlists/EventList +instanceKlass ca/odell/glazedlists/matchers/Matcher +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$SaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultFileNameProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStore +instanceKlass com/mathworks/matlab/api/dataview/UiInfoProvider +instanceKlass com/mathworks/matlab/api/datamodel/PropertyChangeProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$FileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$EncodingProvider +instanceKlass com/mathworks/matlab/api/debug/DebugListener +instanceKlass com/mathworks/jmi/AWTUtilities$InvocationRunnable +instanceKlass com/mathworks/mde/autosave/AutoSaveImplementor +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication +instanceKlass com/mathworks/matlab/api/editor/EditorApplication +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem +instanceKlass com/mathworks/util/ThrowableClosure +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/RealFileSystem +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/debug/MatlabDebuggerActionsProvider +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileSystem +instanceKlass com/mathworks/matlab/api/explorer/FileSystemTransaction +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugStackPruner +instanceKlass com/mathworks/matlab/api/explorer/FileList +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptor +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackInfo +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugEventTranslator +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileMounter +instanceKlass com/mathworks/fileutils/MatlabPath$PathEntry +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider +instanceKlass com/mathworks/jmi/Matlab$6 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/jmi/MatlabPath$PathEntry +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller +instanceKlass com/mathworks/fileutils/MatlabPath$3 +instanceKlass com/mathworks/fileutils/MatlabPath$2 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass com/mathworks/fileutils/MatlabPath$1 +instanceKlass com/mathworks/fileutils/MatlabPath +instanceKlass java/awt/DisplayMode +instanceKlass com/mathworks/hg/util/JavaSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/AbstractSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/DisplayChangeManager +instanceKlass com/mathworks/cfbutils/NativeCfb +instanceKlass com/mathworks/hg/util/NativeHG +instanceKlass com/mathworks/hg/GraphicsOpenGL +instanceKlass com/mathworks/fileutils/MLFileIconUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/JSZipFileIconInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/EditorFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider +instanceKlass com/mathworks/jmi/mdt/MatlabCallable +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider +instanceKlass com/mathworks/matlab/api/explorer/StateChangeNotifier +instanceKlass com/mathworks/mde/explorer/PathActionProvider +instanceKlass com/mathworks/util/AsyncReceiver +instanceKlass com/mathworks/mlwidgets/explorer/util/TransactionLogic +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider +instanceKlass com/mathworks/util/RequestQueue +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileContentInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabDesktopReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategyFactory +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TextFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFolderInfoProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivityImpl +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireAction +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivity +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculatorImpl +instanceKlass java/util/concurrent/Executors$DefaultThreadFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculator +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireHandler +instanceKlass com/mathworks/storage/matlabdrivedesktop/ActionFinishListener +instanceKlass com/mathworks/storage/mldrivetripwireaccess/NativeMLDriveTripwireAccess +instanceKlass com/mathworks/storage/mldrivetripwireaccess/MLDriveTripwireAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/SettingsFeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/NativeMatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/FeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/FIGFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MEXFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/PFileInfoProvider +instanceKlass com/mathworks/explorer/MATFileInfoProvider +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider +instanceKlass com/mathworks/mde/liveeditor/MlxFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider +instanceKlass com/mathworks/util/DeferrableRetriever +instanceKlass com/mathworks/jmi/ComponentBridge +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/ImageFileInfoProvider +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/SupportPackageData +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$CMFileProvider +instanceKlass com/mathworks/sourcecontrol/SccFileProvider +instanceKlass com/mathworks/cmlink/api/customization/CMWidget +instanceKlass com/mathworks/cmlink/api/customization/CustomizationWidgetFactory +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider +instanceKlass com/mathworks/sourcecontrol/SccFileListener +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/common/SignpostFileInfoProvider +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider +instanceKlass com/mathworks/toolboxmanagement/ToolboxFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider +instanceKlass com/mathworks/mde/difftool/DiffToolUtils +instanceKlass com/mathworks/comparisons/util/AbstractNamedData +instanceKlass com/mathworks/comparisons/source/ComparisonSource +instanceKlass com/mathworks/comparisons/util/GetPropertyValue +instanceKlass com/mathworks/comparisons/source/ComparisonSourceType +instanceKlass com/mathworks/mde/difftool/ComparisonControl +instanceKlass com/mathworks/mde/difftool/DiffReportImplementor +instanceKlass com/mathworks/mde/difftool/DiffToolControl +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$DocumentDiffToolInfo +instanceKlass com/mathworks/mde/difftool/SelectedFilesDiffToolInfo +instanceKlass com/mathworks/mde/difftool/DiffActionProvider +instanceKlass com/mathworks/explorer/KeyBindingProvider +instanceKlass com/mathworks/mlservices/MLLicenseChecker +instanceKlass com/mathworks/matlab/api/explorer/ActionComponentProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider +instanceKlass com/mathworks/project/impl/ProjectFileInfoProvider +instanceKlass com/mathworks/help/helpui/DocRoot +instanceKlass com/mathworks/helpsearch/DocPathBuilder +instanceKlass com/mathworks/helpsearch/product/ProductFilter +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocConfigExceptionHandler +instanceKlass com/mathworks/help/helpui/DocConfigBase +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocSetAdapter +instanceKlass com/mathworks/help/helpui/AbstractDocConfig +instanceKlass com/mathworks/toolbox/slproject/resources/SlProjectResources +instanceKlass org/xml/sax/helpers/DefaultHandler +instanceKlass org/xml/sax/DTDHandler +instanceKlass com/mathworks/toolbox/slproject/project/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/AutosaveFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/FileDecoration +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/PackageInfoLoader +instanceKlass com/mathworks/util/Converter +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider +instanceKlass com/mathworks/toolbox/coder/plugin/CoderResources +instanceKlass com/mathworks/matlab/api/explorer/MenuSection +instanceKlass com/mathworks/matlab/api/explorer/ActionDefinition +instanceKlass com/mathworks/matlab/api/explorer/StatusRunnable +instanceKlass com/mathworks/toolbox/coder/screener/ScreenerActionProvider +instanceKlass com/mathworks/matlab/api/explorer/ActionProvider +instanceKlass com/mathworks/matlab/api/explorer/FileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/AutoMounter +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerExtensionRegistry +instanceKlass com/mathworks/widgets/WorkMonitor +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem +instanceKlass com/mathworks/matlab/api/explorer/ExtensionRegistry +instanceKlass com/mathworks/matlab/api/explorer/SearchCriteria +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPanePrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext +instanceKlass com/mathworks/instutil/Platform +instanceKlass com/mathworks/instutil/FilePermissionsUtil +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar +instanceKlass com/mathworks/instutil/FilePermissions +instanceKlass com/mathworks/matlab/api/explorer/FileLocation +instanceKlass com/mathworks/mde/explorer/ExplorerToolbar +instanceKlass com/mathworks/jmi/AutoConvertStringToMatlabChar +instanceKlass com/mathworks/widgets/desk/DTToolBarInfo +instanceKlass com/mathworks/widgets/desk/DTTitleChangeHandler +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$1 +instanceKlass com/mathworks/widgets/desk/Desktop$ClientListenerData +instanceKlass com/mathworks/mde/help/MLHelpBrowserGroup$DDuxResizedActionListener +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory$1 +instanceKlass com/mathworks/html/NewBrowserListener +instanceKlass com/mathworks/html/HtmlPanelSupportFactory +instanceKlass com/mathworks/html/HtmlContextMenuBuilder +instanceKlass com/mathworks/html/RequestHandler +instanceKlass com/mathworks/html/HtmlPanel +instanceKlass com/mathworks/mlwidgets/html/BrowserTypeConfig +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1 +instanceKlass com/jniwrapper/r +instanceKlass com/jniwrapper/af +instanceKlass com/jniwrapper/PlatformContext +instanceKlass java/security/cert/CertPathValidatorException$Reason +instanceKlass com/teamdev/jxbrowser/BrowserType +instanceKlass sun/security/util/ManifestEntryVerifier$SunProviderHolder +instanceKlass sun/nio/cs/Surrogate +instanceKlass sun/nio/cs/Surrogate$Parser +instanceKlass java/util/Base64$Encoder +instanceKlass java/util/Base64$Decoder +instanceKlass java/util/Base64 +instanceKlass java/security/cert/CertPath +instanceKlass sun/security/rsa/RSAPadding +instanceKlass sun/security/rsa/RSACore +instanceKlass java/security/interfaces/RSAPrivateCrtKey +instanceKlass sun/security/pkcs/PKCS8Key +instanceKlass java/security/interfaces/RSAPrivateKey +instanceKlass java/security/PrivateKey +instanceKlass sun/security/jca/ServiceId +instanceKlass java/security/SignatureSpi +instanceKlass javax/crypto/SecretKey +instanceKlass javax/security/auth/Destroyable +instanceKlass sun/security/util/Length +instanceKlass sun/security/util/KeyUtil +instanceKlass sun/text/normalizer/NormalizerBase$1 +instanceKlass sun/text/normalizer/NormalizerBase$QuickCheckResult +instanceKlass sun/text/normalizer/NormalizerBase$Mode +instanceKlass sun/text/normalizer/NormalizerBase +instanceKlass java/text/Normalizer +instanceKlass sun/security/pkcs/PKCS9Attribute +instanceKlass sun/security/x509/AVAKeyword +instanceKlass sun/security/util/ConstraintsParameters +instanceKlass sun/security/pkcs/SignerInfo +instanceKlass sun/security/x509/NetscapeCertTypeExtension$MapEntry +instanceKlass sun/security/x509/AccessDescription +instanceKlass java/security/cert/PolicyQualifierInfo +instanceKlass sun/security/x509/CertificatePolicyId +instanceKlass sun/security/x509/PolicyInformation +instanceKlass sun/security/x509/DNSName +instanceKlass sun/security/x509/URIName +instanceKlass sun/security/x509/GeneralName +instanceKlass sun/security/x509/GeneralNames +instanceKlass sun/security/x509/DistributionPoint +instanceKlass sun/security/util/MemoryCache$CacheEntry +instanceKlass sun/security/x509/X509AttributeName +instanceKlass sun/security/x509/KeyIdentifier +instanceKlass sun/security/x509/OIDMap$OIDInfo +instanceKlass sun/security/x509/PKIXExtensions +instanceKlass sun/security/x509/OIDMap +instanceKlass sun/security/x509/Extension +instanceKlass java/security/cert/Extension +instanceKlass sun/security/x509/CertificateExtensions +instanceKlass java/security/interfaces/RSAPublicKey +instanceKlass java/security/interfaces/RSAKey +instanceKlass java/security/spec/RSAPrivateKeySpec +instanceKlass java/security/spec/RSAPublicKeySpec +instanceKlass java/security/KeyFactorySpi +instanceKlass sun/security/rsa/SunRsaSignEntries +instanceKlass sun/security/jca/ProviderList$ServiceList$1 +instanceKlass java/security/KeyFactory +instanceKlass java/security/spec/EncodedKeySpec +instanceKlass java/security/spec/KeySpec +instanceKlass sun/security/util/BitArray +instanceKlass sun/security/x509/X509Key +instanceKlass java/security/PublicKey +instanceKlass java/security/Key +instanceKlass sun/security/x509/CertificateX509Key +instanceKlass sun/security/x509/CertificateValidity +instanceKlass sun/security/x509/AVA +instanceKlass sun/security/x509/RDN +instanceKlass javax/security/auth/x500/X500Principal +instanceKlass sun/security/x509/X500Name$1 +instanceKlass sun/security/x509/X500Name +instanceKlass sun/security/x509/GeneralNameInterface +instanceKlass sun/security/x509/CertificateAlgorithmId +instanceKlass sun/security/x509/SerialNumber +instanceKlass sun/security/x509/CertificateSerialNumber +instanceKlass sun/security/x509/CertificateVersion +instanceKlass sun/security/x509/X509CertInfo +instanceKlass sun/security/x509/CertAttrSet +instanceKlass sun/security/util/Cache$EqualByteArray +instanceKlass java/security/cert/X509Extension +instanceKlass sun/security/util/Cache +instanceKlass java/security/cert/CertificateFactorySpi +instanceKlass java/security/cert/CertificateFactory +instanceKlass sun/security/x509/AlgorithmId +instanceKlass sun/security/util/ByteArrayTagOrder +instanceKlass sun/security/util/ByteArrayLexOrder +instanceKlass sun/security/util/DerEncoder +instanceKlass sun/security/util/DerValue +instanceKlass sun/security/util/ObjectIdentifier +instanceKlass sun/security/pkcs/ContentInfo +instanceKlass sun/security/util/DerIndefLenConverter +instanceKlass sun/security/util/DerInputStream +instanceKlass sun/security/pkcs/PKCS7 +instanceKlass sun/security/util/ManifestDigester$Entry +instanceKlass sun/security/util/ManifestDigester$Position +instanceKlass sun/security/util/ManifestDigester +instanceKlass com/mathworks/html/jxbrowser/BrowserHolder +instanceKlass com/mathworks/html/HtmlComponentIdentifier +instanceKlass com/mathworks/html/BrowserSettings +instanceKlass com/mathworks/html/HtmlActions +instanceKlass com/mathworks/html/HtmlComponent +instanceKlass com/mathworks/html/HtmlCallbackProvider +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory +instanceKlass com/mathworks/help/helpui/HelpBrowserResourceBundle +instanceKlass com/mathworks/help/helpui/HelpBrowserUtils +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DefaultDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs +instanceKlass com/mathworks/mlwidgets/help/messages/HelpPanelCurrentLocationHandler$PageInfoObserver +instanceKlass java/awt/dnd/DropTargetAdapter +instanceKlass com/mathworks/comparisons/util/ResourceManager +instanceKlass com/mathworks/mde/webbrowser/WebBrowserUtils +instanceKlass com/mathworks/matlab/api/editor/EditorApplicationListener +instanceKlass com/mathworks/mde/editor/EditorGroup$4 +instanceKlass com/mathworks/mde/editor/EditorGroup$3 +instanceKlass com/mathworks/mde/editor/EditorGroup$2 +instanceKlass com/mathworks/matlab/api/menus/MenuContext +instanceKlass com/mathworks/widgets/text/STPInterface +instanceKlass com/mathworks/widgets/text/STPBaseInterface +instanceKlass com/mathworks/widgets/text/STPViewInterface +instanceKlass com/mathworks/widgets/text/STPModelInterface +instanceKlass com/mathworks/widgets/text/STPBaseModelInterface +instanceKlass com/mathworks/matlab/api/toolbars/ToolBars +instanceKlass com/mathworks/matlab/api/menus/MenuBuilder +instanceKlass com/mathworks/matlab/api/menus/MenuGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarBuilder +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarGroupID +instanceKlass com/mathworks/mde/editor/ActionManager$KeyBindingContributorProvider +instanceKlass com/mathworks/mde/editor/ActionManager +instanceKlass com/mathworks/mde/editor/EditorGroup$1 +instanceKlass com/mathworks/mde/editor/EditorGroup$8 +instanceKlass com/mathworks/matlab_login/StatusUpdateListener +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1 +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener$3 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkHandler +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$2 +instanceKlass com/mathworks/toolstrip/components/popups/ListItem +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$2 +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$1 +instanceKlass javax/swing/plaf/basic/BasicListUI$Handler +instanceKlass javax/swing/DefaultListSelectionModel +instanceKlass javax/swing/ListSelectionModel +instanceKlass javax/swing/AbstractListModel +instanceKlass com/mathworks/mwswing/FocusReturnHandler +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$SearchActionListener +instanceKlass com/jidesoft/swing/SelectAllUtils +instanceKlass com/mathworks/widgets/SearchTextField$4 +instanceKlass com/jgoodies/forms/factories/ComponentFactory2 +instanceKlass com/jgoodies/forms/factories/ComponentFactory +instanceKlass com/jgoodies/forms/builder/AbstractFormBuilder +instanceKlass com/jgoodies/forms/layout/CellConstraints$Alignment +instanceKlass com/jgoodies/forms/layout/CellConstraints +instanceKlass com/jgoodies/forms/layout/FormLayout$CachingMeasure +instanceKlass com/jgoodies/forms/layout/FormLayout$ComponentSizeCache +instanceKlass com/jgoodies/forms/util/FormUtils +instanceKlass com/jgoodies/forms/layout/FormSpecParser +instanceKlass com/jgoodies/forms/layout/BoundedSize +instanceKlass com/jgoodies/forms/util/LayoutStyle +instanceKlass com/jgoodies/forms/layout/Sizes$ComponentSize +instanceKlass com/jgoodies/forms/layout/ConstantSize$Unit +instanceKlass com/jgoodies/forms/layout/ConstantSize +instanceKlass com/jgoodies/forms/util/UnitConverter +instanceKlass com/jgoodies/forms/layout/Sizes +instanceKlass com/jgoodies/forms/layout/FormSpec$DefaultAlignment +instanceKlass com/jgoodies/forms/layout/FormSpec +instanceKlass com/jgoodies/forms/layout/Size +instanceKlass com/jgoodies/forms/factories/FormFactory +instanceKlass com/jgoodies/forms/layout/LayoutMap +instanceKlass com/jgoodies/forms/layout/FormLayout$Measure +instanceKlass com/jgoodies/forms/layout/FormLayout +instanceKlass com/mathworks/widgets/WindowsWidgetFactory$SearchAndClearButton$1 +instanceKlass javax/swing/text/Segment +instanceKlass java/text/CharacterIterator +instanceKlass com/mathworks/widgets/WindowsWidgetFactory +instanceKlass com/mathworks/widgets/SearchTextField$6 +instanceKlass com/mathworks/widgets/WidgetUtils +instanceKlass javax/accessibility/AccessibleExtendedText +instanceKlass javax/accessibility/AccessibleEditableText +instanceKlass javax/swing/event/CaretListener +instanceKlass com/mathworks/widgets/PromptingTextField$1 +instanceKlass org/apache/commons/lang/ArrayUtils +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener$2 +instanceKlass com/mathworks/mwswing/MJPopupMenu$CloseListener +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindings +instanceKlass javax/swing/JTextField$ScrollRepainter +instanceKlass javax/swing/DefaultBoundedRangeModel +instanceKlass javax/swing/BoundedRangeModel +instanceKlass javax/swing/plaf/synth/SynthUI +instanceKlass javax/swing/plaf/synth/SynthConstants +instanceKlass javax/swing/text/JTextComponent$DefaultKeymap +instanceKlass javax/swing/text/Keymap +instanceKlass javax/swing/text/TabExpander +instanceKlass javax/swing/TransferHandler$TransferSupport +instanceKlass javax/swing/TransferHandler$DropHandler +instanceKlass javax/swing/text/DefaultHighlighter$SafeDamager +instanceKlass javax/swing/text/LayeredHighlighter$LayerPainter +instanceKlass javax/swing/text/Highlighter$HighlightPainter +instanceKlass javax/swing/text/Highlighter$Highlight +instanceKlass javax/swing/text/LayeredHighlighter +instanceKlass javax/swing/text/Highlighter +instanceKlass javax/swing/text/DefaultCaret$Handler +instanceKlass java/awt/datatransfer/ClipboardOwner +instanceKlass javax/swing/text/Caret +instanceKlass javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag +instanceKlass javax/swing/plaf/basic/BasicTextUI$UpdateHandler +instanceKlass javax/swing/text/View +instanceKlass javax/swing/text/Position$Bias +instanceKlass javax/swing/TransferHandler +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener +instanceKlass com/mathworks/mwswing/MJTextField$TextAppearanceFocusListener +instanceKlass com/mathworks/mwswing/AppearanceFocusDispatcher +instanceKlass javax/swing/text/JTextComponent$1 +instanceKlass sun/swing/SwingAccessor$JTextComponentAccessor +instanceKlass com/mathworks/mwswing/AppearanceFocusListener +instanceKlass com/mathworks/widgets/SearchTextField +instanceKlass com/mathworks/mlwidgets/help/DocCenterLocale +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$DefaultDependencyProvider +instanceKlass com/mathworks/html/UrlTransformer +instanceKlass com/mathworks/helpsearch/index/LocalizedFileLocator +instanceKlass com/mathworks/mlwidgets/help/LocalizationFilter +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$HelpDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/HelpUtils +instanceKlass com/mathworks/helpsearch/suggestion/DocumentationSuggestionProvider +instanceKlass com/mathworks/helpsearch/product/DocSetItemResolver +instanceKlass com/mathworks/search/SearchField +instanceKlass com/mathworks/helpsearch/facets/Facetable +instanceKlass com/mathworks/mde/help/suggestion/SuggestionRequest +instanceKlass com/mathworks/help/helpui/DocConfig +instanceKlass com/mathworks/widgets/SearchTextField$Listener +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox +instanceKlass com/mathworks/services/binding/PreferenceState +instanceKlass com/mathworks/widgets/desk/DTKeyBindings +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$1 +instanceKlass com/mathworks/mwswing/MouseLatch +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$EdgeOccupant +instanceKlass com/mathworks/mde/desk/MLMainFrame$1 +instanceKlass com/mathworks/mde/desk/MLMainFrame$StatusTextListener +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$2 +instanceKlass com/mathworks/mwswing/SystemGraphicsEnvironment +instanceKlass com/mathworks/mwswing/ScreenInformationProvider +instanceKlass com/mathworks/mwswing/WindowUtils +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$1 +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu$ContextEventListener +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$1 +instanceKlass com/mathworks/toolstrip/impl/ToolstripTabContentPanel$1 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabContentUI$MyBorder +instanceKlass com/mathworks/toolstrip/plaf/SectionWithHeaderUI$SectionWithHeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$3 +instanceKlass com/mathworks/mwswing/SimpleStringTrimmer +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$1 +instanceKlass com/mathworks/util/event/AWTMouseListener +instanceKlass com/mathworks/util/event/AWTKeyListener +instanceKlass com/mathworks/widgets/desk/DTFrame$7 +instanceKlass com/mathworks/widgets/desk/DTFrame$6 +instanceKlass java/util/EnumMap$EnumMapIterator +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryButton$1 +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager +instanceKlass com/mathworks/mwswing/StringTrimmer +instanceKlass com/mathworks/toolstrip/accessories/ToolTipContentProvider +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager$Client +instanceKlass com/mathworks/util/async/Status +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$4 +instanceKlass com/mathworks/util/AllPredicate +instanceKlass com/mathworks/widgets/desk/DTFrame$QuickAccessBarContextFilter +instanceKlass com/mathworks/mde/desk/MLDesktop$13 +instanceKlass com/mathworks/widgets/desk/DTFrame$5 +instanceKlass com/mathworks/widgets/desk/DTBorderFactory +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ToolBarData +instanceKlass com/mathworks/mde/desk/MLDesktop$12 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$3 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$TabCollectionListener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$2 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$1 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$6 +instanceKlass com/mathworks/widgets/desk/Desktop$54 +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$Listener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$ToolBarPopulator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$2 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$5 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$12 +instanceKlass com/mathworks/mde/desk/PlotGalleryManager$2 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1$1 +instanceKlass com/mathworks/mwswing/MJRadioButton$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon +instanceKlass com/mathworks/widgets/BusyAffordance$2$1 +instanceKlass com/mathworks/widgets/BusyAffordance$2 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel$1 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryDisposer +instanceKlass com/mathworks/toolstrip/factory/TSFactory$8 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$4 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$3 +instanceKlass com/mathworks/widgets/BusyAffordance$UpdateListener +instanceKlass com/mathworks/widgets/BusyAffordance +instanceKlass com/mathworks/widgets/ComponentBuilder +instanceKlass com/mathworks/toolstrip/components/gallery/view/BusyAffordanceProxy +instanceKlass com/mathworks/toolstrip/Previewer +instanceKlass com/mathworks/toolstrip/components/gallery/model/Item +instanceKlass com/mathworks/toolstrip/components/gallery/view/ItemPopupMenuCustomizer +instanceKlass com/mathworks/services/GalleryViewSettingImpl +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryViewSetting +instanceKlass com/mathworks/toolstrip/factory/TSFactory$7 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryRestoreData +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryResources +instanceKlass com/mathworks/toolstrip/components/gallery/model/Category +instanceKlass com/mathworks/toolstrip/components/gallery/model/DefaultGalleryModel +instanceKlass com/mathworks/toolstrip/components/TSUtil +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$11 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$10 +instanceKlass javax/swing/ButtonGroup +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$7 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$VariableLabelDecorator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$6 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$PlotUpdateListener +instanceKlass com/mathworks/mlwidgets/help/ddux/HelpDduxCommandWrapper$Mock +instanceKlass com/mathworks/help/helpui/ddux/DummyDduxCommandWrapper +instanceKlass com/mathworks/help/helpui/ddux/DduxCommandWrapper +instanceKlass com/mathworks/mlwidgets/help/ddux/DummyDduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1 +instanceKlass javax/swing/tree/MutableTreeNode +instanceKlass com/mathworks/mlwidgets/graphics/ModelStateFactory +instanceKlass com/mathworks/mlwidgets/help/ddux/DduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4$1 +instanceKlass com/mathworks/mde/desk/MLFeatures +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1$1 +instanceKlass java/awt/datatransfer/SystemFlavorMap$SoftCache +instanceKlass java/awt/datatransfer/SystemFlavorMap +instanceKlass java/awt/datatransfer/FlavorTable +instanceKlass java/awt/datatransfer/FlavorMap +instanceKlass java/awt/dnd/DropTargetContext +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandDropListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator$1 +instanceKlass com/google/common/collect/ObjectArrays +instanceKlass com/mathworks/toolstrip/sections/IconifiedSectionLayout +instanceKlass com/mathworks/toolstrip/sections/PreferredSectionLayout +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayout +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$2 +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$1 +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayoutPolicy +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies +instanceKlass com/mathworks/toolstrip/components/DropDownActionListener +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListPopupListener +instanceKlass com/mathworks/toolstrip/components/TSDropDownButton$PopupComponentMouseListener +instanceKlass com/mathworks/util/Disposer$Node +instanceKlass com/mathworks/util/Disposer$1 +instanceKlass com/mathworks/util/Disposer +instanceKlass com/google/common/base/Joiner$MapJoiner +instanceKlass com/google/common/base/Joiner +instanceKlass com/google/common/collect/Collections2 +instanceKlass com/google/common/collect/SortedMapDifference +instanceKlass com/google/common/collect/MapDifference +instanceKlass com/google/common/collect/Maps$EntryTransformer +instanceKlass java/util/NavigableSet +instanceKlass com/google/common/collect/UnmodifiableIterator +instanceKlass com/google/common/collect/BiMap +instanceKlass com/google/common/base/Converter +instanceKlass com/google/common/base/Function +instanceKlass com/google/common/collect/ImmutableMap +instanceKlass com/google/common/collect/Maps +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection$WrappedIterator +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ButtonTrigger +instanceKlass com/mathworks/toolstrip/factory/TSFactory$TriggerDisposer +instanceKlass javax/swing/AncestorNotifier +instanceKlass javax/swing/ClientPropertyKey$1 +instanceKlass sun/awt/AWTAccessor$ClientPropertyKeyAccessor +instanceKlass com/mathworks/toolstrip/components/PopupListener$PopupCallback +instanceKlass com/mathworks/toolstrip/plaf/LAFUtil +instanceKlass com/mathworks/toolstrip/plaf/ToolstripButtonUI$ToolstripButtonListener +instanceKlass com/mathworks/toolstrip/plaf/ComponentMnemonicsProvider +instanceKlass com/mathworks/toolstrip/components/LayoutMode +instanceKlass com/mathworks/desktop/mnemonics/Mnemonic +instanceKlass com/mathworks/toolstrip/factory/TSFactory$9 +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder$Column +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$ColumnLayout +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$SectionLayout +instanceKlass com/mathworks/desktop/overlay/Overlay +instanceKlass com/mathworks/toolstrip/sections/SectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections +instanceKlass com/mathworks/toolstrip/factory/TSToolPath +instanceKlass com/mathworks/toolstrip/factory/TSFactory$1 +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/SupportPkgInstallerToolSetFactory +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$ProfileAnalyzerInstanceHolder +instanceKlass com/mathworks/toolbox/distcomp/util/mvm/ResultHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$OperationNotifier +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/DefaultProfileName +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$ProfilePropertyChangeListener +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeSupportAdaptor +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileNamesProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeObservable +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/I18nMatlabIdentifiedException +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/HasI18nMatlabIdentifiedMessage +instanceKlass com/mathworks/util/MatlabIdentified +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileUpdateListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu +instanceKlass com/mathworks/toolbox/distcomp/mwlogin/MatlabLoginController$LoginStatusListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/MLDesktopParallelMenu +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/GalleryPopup$Listener +instanceKlass com/mathworks/toolstrip/components/gallery/model/GalleryModel +instanceKlass javax/swing/ListCellRenderer +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolPropertyListener +instanceKlass com/mathworks/toolstrip/components/PopupShower +instanceKlass com/mathworks/toolstrip/factory/TSFactory +instanceKlass com/mathworks/mwswing/binding/InputMapActionListener +instanceKlass com/mathworks/mde/vrd/LicenseToolSetFactory +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$3 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$2 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$TearOffOptionsListDecorator +instanceKlass com/mathworks/toolstrip/accessories/Resources +instanceKlass com/mathworks/toolstrip/accessories/CollapseToolstripAction$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$FactoryLayout +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$Listener +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory +instanceKlass com/mathworks/matlab/api/explorer/MatlabPlatformUtil +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerResources +instanceKlass com/mathworks/mde/desk/CodeReportActionProvider +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$18 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$17 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$16 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$15 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$14 +instanceKlass com/mathworks/desktop/client/ClientCollectionListener$Event +instanceKlass com/google/common/collect/Lists +instanceKlass com/mathworks/desktop/client/DefaultClientCollection +instanceKlass com/mathworks/desktop/attr/AttributeChangeEvent +instanceKlass com/mathworks/desktop/attr/DefaultAttributes +instanceKlass com/mathworks/desktop/client/ClientCollection +instanceKlass com/mathworks/desktop/client/BasicClient +instanceKlass com/mathworks/desktop/client/ClientCollectionListener +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport$DirtyStateListener +instanceKlass com/mathworks/mde/liveeditor/AbstractLiveEditorToolSet +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsKeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsRunnerOptions +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandReceiver +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$ToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/ToolSetActionController +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptions +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/KeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/rptgenxmlcomp/comparison/node/customization/CustomizationManager +instanceKlass com/mathworks/matlab/api/editor/EditorLayerProvider +instanceKlass com/mathworks/matlab/api/editor/EditorSyntaxHighlighting +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapterFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/CheckRunnerProvider +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/WorkingFolderExtensionFactory +instanceKlass com/mathworks/cmlink/util/icon/FileIconFactoryProducer +instanceKlass com/mathworks/toolbox/slproject/project/archiving/ProjectArchiverFactory +instanceKlass com/mathworks/toolbox/slproject/project/sharing/api/r15a/ShareExtensionFactory +instanceKlass com/mathworks/toolbox/slproject/project/metadata/MetadataManagerFactory +instanceKlass com/mathworks/toolbox/slproject/project/GUI/projectui/ProjectViewNodeFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/ProjectExtensionFactory +instanceKlass com/mathworks/addons_common/notificationframework/BalloonTooltipNotificationClickedCallback +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifierAPI +instanceKlass com/mathworks/addressbar_api/AddressBarAPI +instanceKlass com/mathworks/mde/find/FileTypeContentsProvider +instanceKlass com/mathworks/find_files_api/FileTypeSpecificOpenToLineActionProvider +instanceKlass com/mathworks/find_files_api/OpenActionProvider +instanceKlass com/mathworks/mde/editor/debug/DebuggerActionsProvider +instanceKlass com/mathworks/matlab/api/editor/actions/KeyBindingContributor +instanceKlass com/mathworks/matlab/api/editor/EditorKitProvider +instanceKlass com/mathworks/matlab/api/editor/actions/EditorToolTipDelegate +instanceKlass com/mathworks/widgets/editor/breakpoints/MarginProvider +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor +instanceKlass com/mathworks/matlab/api/editor/actions/SelectionDelegate +instanceKlass com/mathworks/matlab/api/editor/EditorLanguagePreferencesPanel +instanceKlass com/mathworks/matlab/api/menus/MenuContributor +instanceKlass com/mathworks/comparisons/plugin/ComparisonPlugin +instanceKlass com/mathworks/matlab/api/editor/EditorLanguage +instanceKlass com/mathworks/addons_common/AddonManager +instanceKlass com/mathworks/cmlink/creation/api/RepositoryLocationCreatorFactory +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallsRetriever +instanceKlass com/mathworks/addon_service_management_api/RegistrationPointServiceProvider +instanceKlass com/mathworks/addon_service_management_api/AddonServiceProvider +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripTabContributor +instanceKlass com/mathworks/matlab/api/editor/actions/Prioritizable +instanceKlass com/mathworks/mlwidgets/explorer/util/SourceControlManagerPlugin +instanceKlass com/mathworks/project/impl/model/TargetFactory +instanceKlass com/mathworks/mwswing/api/FileExtensionFilterContributor +instanceKlass com/mathworks/util/ImplementorsCacheImpl +instanceKlass com/mathworks/util/ImplementorsCache +instanceKlass com/mathworks/util/ImplementorsCacheFactory$LazyHolder +instanceKlass com/mathworks/util/ImplementorsCacheFactory +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabErrorHandlingOptionsListDecorator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabDebugActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$5 +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripOptions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$6 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$1 +instanceKlass com/mathworks/mde/editor/EditorAction +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$20 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$19 +instanceKlass com/mathworks/services/settings/SettingUtils +instanceKlass com/mathworks/services/mlx/MlxFileUtils +instanceKlass com/mathworks/matlab/api/explorer/AbstractNewFileTemplateWithIcon +instanceKlass com/mathworks/matlab/api/explorer/IconProvider +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$2 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$1 +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarID +instanceKlass com/mathworks/mde/editor/RealMatlab +instanceKlass com/mathworks/matlab/api/datamodel/StorageLocation +instanceKlass com/mathworks/mwswing/FilePatternFilter +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarID +instanceKlass com/mathworks/mde/editor/EditorMatlab +instanceKlass com/mathworks/mde/editor/EditorUtils +instanceKlass com/mathworks/cfbutils/FileSystemNotificationUtils +instanceKlass com/mathworks/util/FileSystemNotifier$1 +instanceKlass com/mathworks/cfbutils/FileSystemListener +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeListener +instanceKlass com/mathworks/util/FileSystemNotifier +instanceKlass com/mathworks/util/FileSystemUtils +instanceKlass com/mathworks/util/FileSystemAdapter +instanceKlass com/mathworks/util/FileSystemListener +instanceKlass com/mathworks/mde/editor/EditorStartup +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$BusyIdleListener +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory$1 +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandUtilities +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCategoryIcons +instanceKlass org/apache/xerces/dom/CharacterDataImpl$1 +instanceKlass org/apache/xerces/dom/NamedNodeMapImpl +instanceKlass org/w3c/dom/NamedNodeMap +instanceKlass org/apache/xerces/dom/DeepNodeListImpl +instanceKlass org/apache/xerces/dom/DeferredDocumentImpl$RefCount +instanceKlass org/w3c/dom/traversal/NodeIterator +instanceKlass org/w3c/dom/events/MutationEvent +instanceKlass org/w3c/dom/events/Event +instanceKlass org/w3c/dom/traversal/TreeWalker +instanceKlass com/mathworks/mde/difftool/FileDiffToolInfo +instanceKlass org/w3c/dom/ranges/Range +instanceKlass com/mathworks/mde/difftool/UnsavedChangesDiffToolInfo +instanceKlass java/util/Observer +instanceKlass org/w3c/dom/CDATASection +instanceKlass org/w3c/dom/Comment +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu +instanceKlass org/w3c/dom/DocumentFragment +instanceKlass org/w3c/dom/ProcessingInstruction +instanceKlass org/w3c/dom/Text +instanceKlass org/w3c/dom/DOMConfiguration +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$RunButtonStateChangeListener +instanceKlass com/mathworks/matlab/api/editor/EditorEventListener +instanceKlass org/w3c/dom/Attr +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$4 +instanceKlass org/w3c/dom/Notation +instanceKlass javax/swing/event/ListDataListener +instanceKlass org/w3c/dom/DocumentType +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$3 +instanceKlass org/w3c/dom/TypeInfo +instanceKlass org/w3c/dom/EntityReference +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$2 +instanceKlass org/apache/xerces/xs/XSSimpleTypeDefinition +instanceKlass org/apache/xerces/xs/XSTypeDefinition +instanceKlass org/apache/xerces/xs/XSObject +instanceKlass com/mathworks/mwswing/CustomizablePopupMenu +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistrant +instanceKlass org/apache/xerces/xs/ItemPSVI +instanceKlass com/mathworks/toolstrip/components/AcceptsMnemonic +instanceKlass org/w3c/dom/Entity +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$1 +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$OpenWorkspaceVariableAction$1 +instanceKlass org/w3c/dom/DOMError +instanceKlass org/w3c/dom/ranges/DocumentRange +instanceKlass org/w3c/dom/events/DocumentEvent +instanceKlass org/w3c/dom/traversal/DocumentTraversal +instanceKlass org/apache/xerces/dom/DeferredNode +instanceKlass org/apache/xerces/dom/NodeImpl +instanceKlass org/w3c/dom/events/EventTarget +instanceKlass org/w3c/dom/NodeList +instanceKlass org/w3c/dom/CharacterData +instanceKlass org/apache/xerces/jaxp/TeeXMLDocumentFilterImpl +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator +instanceKlass org/apache/xerces/impl/xs/identity/FieldActivator +instanceKlass org/apache/xerces/jaxp/JAXPConstants +instanceKlass javax/xml/parsers/DocumentBuilder +instanceKlass javax/xml/parsers/SecuritySupport$1 +instanceKlass javax/xml/parsers/SecuritySupport$2 +instanceKlass javax/xml/parsers/SecuritySupport +instanceKlass javax/xml/parsers/FactoryFinder +instanceKlass javax/xml/parsers/DocumentBuilderFactory +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1 +instanceKlass java/util/Vector$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/Shortcut +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutUtils +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$LocalExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$2 +instanceKlass java/util/concurrent/CountDownLatch +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2 +instanceKlass sun/java2d/loops/FontInfo +instanceKlass sun/font/CMap +instanceKlass sun/font/T2KFontScaler$1 +instanceKlass sun/font/FontScaler +instanceKlass sun/font/StrikeCache$DisposableStrike +instanceKlass sun/font/FontStrikeDisposer +instanceKlass sun/java2d/Disposer$PollDisposable +instanceKlass sun/font/FontStrikeDesc +instanceKlass sun/font/FontDesignMetrics$MetricsKey +instanceKlass java/awt/FontMetrics +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteIconContainer +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandIcons +instanceKlass java/text/FieldPosition$Delegate +instanceKlass java/text/Format$FieldDelegate +instanceKlass java/text/DigitList +instanceKlass java/util/Currency$CurrencyNameGetter +instanceKlass java/util/Currency$1 +instanceKlass java/util/Currency +instanceKlass java/text/DecimalFormatSymbols +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference$Pair +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference +instanceKlass javax/swing/Timer$1 +instanceKlass java/text/FieldPosition +instanceKlass com/mathworks/mde/desk/MLDesktopRegistrar +instanceKlass com/mathworks/mlservices/MatlabDesktopRegistrar +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutIconUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandResources +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$GalleryModelReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$GalleryModelCreator +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryOptions +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolSupplier +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$Listener +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ListDecorator +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar$1 +instanceKlass com/mathworks/toolstrip/accessories/TSContextMenuContributor +instanceKlass com/mathworks/toolstrip/components/popups/ListActionListener +instanceKlass javax/swing/ListModel +instanceKlass com/mathworks/widgets/desk/DTWindowPopupAction$1 +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Tool +instanceKlass com/mathworks/beans/EnumPair +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Dependency +instanceKlass com/mathworks/jmi/bean/UDDMethodDescription +instanceKlass com/mathworks/mwswing/IconSet$IconSizeComparator +instanceKlass com/mathworks/jmi/bean/UDDPropertyDescription +instanceKlass com/mathworks/mwswing/IconSet +instanceKlass com/mathworks/mwswing/ResizableIcon +instanceKlass com/mathworks/jmi/bean/UDDBeanClass +instanceKlass com/mathworks/jmi/bean/OpCode +instanceKlass com/mathworks/jmi/bean/ClassFileConstants +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolParameters +instanceKlass com/mathworks/jmi/bean/UDDListener +instanceKlass org/apache/commons/lang/builder/HashCodeBuilder +instanceKlass com/mathworks/util/Pair +instanceKlass com/mathworks/toolstrip/factory/XMLUtils +instanceKlass com/mathworks/mwswing/SimpleDOMUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$ToolParameters +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Section +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory$Registrar +instanceKlass com/mathworks/mde/liveeditor/LiveEditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$Registrar +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar +instanceKlass com/mathworks/toolstrip/components/gallery/model/ActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$ToolSetReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$Registrar +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolDecorator +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$FocusTracker +instanceKlass com/mathworks/widgets/desk/DTFrame$1 +instanceKlass java/util/SortedSet +instanceKlass com/google/common/collect/Multiset +instanceKlass com/google/common/collect/AbstractMultimap +instanceKlass com/mathworks/mwswing/modality/ModalLevel +instanceKlass com/mathworks/mwswing/modality/ModalStackImpl +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl$ModalityManagerAWTEventListener +instanceKlass com/mathworks/mwswing/modality/ModalStack +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl +instanceKlass com/mathworks/mwswing/MJFrame$1 +instanceKlass com/mathworks/mwswing/window/MJFullWindowRegistry +instanceKlass javax/swing/LayoutComparator +instanceKlass java/util/function/IntBinaryOperator +instanceKlass java/util/function/LongBinaryOperator +instanceKlass java/util/function/DoubleBinaryOperator +instanceKlass java/util/function/BinaryOperator +instanceKlass java/util/function/IntToDoubleFunction +instanceKlass java/util/function/IntToLongFunction +instanceKlass java/util/function/IntUnaryOperator +instanceKlass java/util/function/IntFunction +instanceKlass java/util/stream/LongStream +instanceKlass java/util/stream/DoubleStream +instanceKlass java/util/stream/Stream +instanceKlass java/util/stream/IntStream +instanceKlass java/util/stream/BaseStream +instanceKlass java/util/Spliterator$OfDouble +instanceKlass java/util/Spliterator$OfInt +instanceKlass java/util/Spliterator$OfLong +instanceKlass java/util/Spliterator$OfPrimitive +instanceKlass java/util/Spliterator +instanceKlass javax/swing/SortingFocusTraversalPolicy$1 +instanceKlass javax/swing/RepaintManager$PaintManager +instanceKlass javax/swing/JRootPane$RootLayout +instanceKlass com/mathworks/mde/desk/PlotGalleryManager +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$ClientMenuInfo +instanceKlass com/mathworks/toolstrip/factory/TSToolSet +instanceKlass java/io/ObjectOutput +instanceKlass com/mathworks/widgets/desk/DTToolBarLocation +instanceKlass com/mathworks/toolstrip/Toolstrip +instanceKlass com/mathworks/widgets/desk/DTFrame$DeferredMenuBarUpdate +instanceKlass com/mathworks/mwswing/modality/ModalManager +instanceKlass com/mathworks/util/NativeEvent$Listener +instanceKlass com/mathworks/mwswing/MJFrame$FullScreenListener +instanceKlass com/mathworks/services/Branding +instanceKlass com/mathworks/widgets/desk/DTFrame$MenuToStatusBarBridge +instanceKlass com/mathworks/mde/desk/MLFeatures$Listener +instanceKlass com/mathworks/toolstrip/components/TSComponent +instanceKlass com/mathworks/desktop/mnemonics/HasMnemonic +instanceKlass com/mathworks/toolstrip/ToolstripSection +instanceKlass com/mathworks/widgets/desk/DTComponentBar$DragOffListener +instanceKlass com/mathworks/toolstrip/components/TSUtil$KeyTriggerListener +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry$ActivatorData +instanceKlass com/mathworks/mde/desk/MLDesktop$Initializer +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$GoToNullPrompt +instanceKlass com/mathworks/jmi/mldisplay/VariableDisplayEvent +instanceKlass com/mathworks/jmi/diagnostic/IssuedWarningEvent +instanceKlass com/mathworks/jmi/correction/SuggestionEvent +instanceKlass com/mathworks/mvm/MvmWrapper +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$2 +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$1 +instanceKlass com/mathworks/mde/cmdwin/Prompt +instanceKlass javax/swing/text/StyleContext$KeyEnumeration +instanceKlass javax/swing/text/GapContent$StickyPosition +instanceKlass javax/swing/text/Position +instanceKlass javax/swing/text/AbstractDocument$1 +instanceKlass javax/swing/text/AbstractDocument$AbstractElement +instanceKlass javax/swing/tree/TreeNode +instanceKlass javax/swing/text/Element +instanceKlass java/util/Collections$3 +instanceKlass javax/swing/text/StyleContext$SmallAttributeSet +instanceKlass java/util/Collections$EmptyEnumeration +instanceKlass javax/swing/text/StyleContext$NamedStyle +instanceKlass javax/swing/text/Style +instanceKlass javax/swing/text/SimpleAttributeSet$EmptyAttributeSet +instanceKlass javax/swing/text/SimpleAttributeSet +instanceKlass javax/swing/text/MutableAttributeSet +instanceKlass javax/swing/text/AttributeSet +instanceKlass javax/swing/text/StyleContext$FontKey +instanceKlass javax/swing/text/AttributeSet$ParagraphAttribute +instanceKlass javax/swing/text/AttributeSet$ColorAttribute +instanceKlass javax/swing/text/AttributeSet$FontAttribute +instanceKlass javax/swing/text/AttributeSet$CharacterAttribute +instanceKlass javax/swing/text/StyleConstants +instanceKlass javax/swing/text/StyleContext +instanceKlass javax/swing/text/AbstractDocument$AttributeContext +instanceKlass javax/swing/text/GapVector +instanceKlass javax/swing/event/DocumentEvent +instanceKlass javax/swing/text/AbstractDocument$Content +instanceKlass javax/swing/event/DocumentListener +instanceKlass javax/swing/text/AbstractDocument +instanceKlass com/mathworks/widgets/text/print/PrintableTextDocument +instanceKlass javax/swing/text/Document +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF +instanceKlass com/mathworks/mde/cmdwin/KeystrokeRequestedEvent +instanceKlass com/mathworks/mde/cmdwin/LoadNativeCmdWin +instanceKlass com/mathworks/mde/cmdwin/CmdWinSinkRegistrar +instanceKlass com/mathworks/mlwidgets/prefs/ConfirmationDialogPrefsPanel$DialogItem +instanceKlass com/mathworks/mwswing/table/AccessibleTextProvider +instanceKlass javax/swing/table/TableCellEditor +instanceKlass javax/swing/CellEditor +instanceKlass javax/swing/table/TableCellRenderer +instanceKlass com/mathworks/mde/cmdwin/CmdWinPrefs +instanceKlass com/mathworks/services/FontPrefsComponent +instanceKlass com/mathworks/services/lmgr/NativeLmgr +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService$nativeBorrowAPI +instanceKlass com/mathworks/services/lmgr/BorrowAPI +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrServiceFactory +instanceKlass com/mathworks/jmi/Support +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManagerImpl +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI$LazyHolder +instanceKlass com/mathworks/jmi/MatlabWorker +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManager +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$3 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$2 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$4 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$2 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$2 +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager +instanceKlass com/mathworks/mde/editor/EditorPauseAction$3 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager$BusyIdleListener +instanceKlass com/mathworks/mwswing/ToolTipProvider +instanceKlass com/mathworks/mde/editor/EditorPauseAction +instanceKlass com/mathworks/mlservices/MatlabDebugAdapter +instanceKlass com/mathworks/services/PrefChangeListener +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$DebugAction$13$1 +instanceKlass com/mathworks/mlservices/MatlabDebugServices$1 +instanceKlass com/mathworks/mlservices/MatlabExecutionErrorHandler +instanceKlass com/mathworks/mde/cmdwin/CmdWinExecuteServices +instanceKlass com/mathworks/mlservices/MLExecuteRegistrar +instanceKlass com/mathworks/mlservices/MLExecute +instanceKlass com/mathworks/mlservices/MLServicesRegistry$EventMulticaster +instanceKlass com/mathworks/mlservices/MLServicesRegistry +instanceKlass com/mathworks/mlservices/MLExecuteServices$ServicesRegistryListener +instanceKlass com/mathworks/mlservices/MLServicesRegistry$Listener +instanceKlass com/mathworks/mlservices/MLServices +instanceKlass com/mathworks/mlservices/MatlabDebugServices$InterestCallback +instanceKlass sun/util/logging/LoggingSupport$2 +instanceKlass java/util/logging/Formatter +instanceKlass java/util/logging/ErrorManager +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager$InterceptorComparator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager +instanceKlass com/mathworks/mlservices/MatlabDebugServices$BusyExecutionListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$CtrlCListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabPauseObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabDebugObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackCallback +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackDispatch +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch$DebugExitStackCheck +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch +instanceKlass com/mathworks/matlab/api/debug/Breakpoint +instanceKlass com/mathworks/mlservices/BreakpointBase +instanceKlass com/mathworks/mlservices/MatlabDebugServices +instanceKlass com/mathworks/mlservices/MatlabDebugObserver +instanceKlass com/mathworks/mlwidgets/debug/DebugActions +instanceKlass com/mathworks/widgets/desk/Desktop$43 +instanceKlass com/mathworks/widgets/debug/DebuggerManager$IdleMatlabDebugger +instanceKlass com/mathworks/widgets/debug/DebuggerManager +instanceKlass com/mathworks/matlab/api/editor/actions/DebuggerActions +instanceKlass com/mathworks/jmi/Matlab$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$2 +instanceKlass com/mathworks/toolstrip/ToolstripTab +instanceKlass com/mathworks/desktop/client/Client +instanceKlass com/mathworks/desktop/attr/Attributes +instanceKlass com/mathworks/widgets/desk/DTGroup$DeferredPropertyChange +instanceKlass com/mathworks/widgets/desk/DTGroup$1 +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge +instanceKlass java/awt/event/WindowAdapter +instanceKlass com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper +instanceKlass javax/swing/MenuSelectionManager +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$1 +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper +instanceKlass javax/swing/Popup +instanceKlass com/mathworks/mwswing/MJMenuItem$ActionPropertyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$PropertyChangeHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuKeyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuDragMouseHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MouseInputHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon +instanceKlass javax/swing/plaf/basic/BasicMenuItemUI$Handler +instanceKlass javax/swing/event/MenuDragMouseListener +instanceKlass javax/swing/event/MenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler +instanceKlass com/mathworks/mwswing/MJMenu$WindowsVistaPropertyChangeListener +instanceKlass sun/swing/MenuItemLayoutHelper +instanceKlass javax/swing/plaf/basic/BasicGraphicsUtils +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuUI$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor +instanceKlass javax/swing/JMenuItem$MenuItemFocusListener +instanceKlass javax/swing/JMenu$MenuChangeListener +instanceKlass sun/swing/UIAction +instanceKlass javax/swing/plaf/basic/BasicMenuBarUI$Handler +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2 +instanceKlass javax/swing/plaf/basic/BasicBorders +instanceKlass javax/swing/DefaultSingleSelectionModel +instanceKlass javax/swing/SingleSelectionModel +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler +instanceKlass com/mathworks/mwswing/MJButton$ActionPropertyHandler +instanceKlass javax/swing/ActionPropertyChangeListener +instanceKlass javax/swing/KeyboardManager$ComponentKeyStrokePair +instanceKlass javax/swing/KeyboardManager +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ActionTrigger +instanceKlass com/google/common/collect/ListMultimap +instanceKlass com/google/common/collect/Multimap +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager +instanceKlass com/mathworks/widgets/desk/DTMenuMergeTag +instanceKlass com/mathworks/services/PrefUtils +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferenceUtils +instanceKlass org/apache/xerces/impl/Constants$ArrayEnumeration +instanceKlass org/apache/xerces/impl/Constants +instanceKlass com/mathworks/mwswing/binding/ContextID +instanceKlass com/mathworks/mwswing/binding/ContextActionData +instanceKlass com/mathworks/mwswing/binding/ContextReader +instanceKlass java/util/Collections$UnmodifiableList$1 +instanceKlass com/mathworks/mwswing/binding/MetaBindingUtils +instanceKlass com/mathworks/mwswing/binding/NavigationalBindingUtils +instanceKlass java/util/LinkedList$ListItr +instanceKlass com/mathworks/util/InitializationHelper +instanceKlass com/mathworks/util/InitializeBeforeAccess +instanceKlass org/apache/xerces/util/XMLSymbols +instanceKlass org/apache/xerces/util/XMLChar +instanceKlass org/apache/xerces/xni/parser/XMLInputSource +instanceKlass org/xml/sax/InputSource +instanceKlass org/apache/xerces/util/ErrorHandlerWrapper +instanceKlass com/mathworks/xml/EncodingParser$QuietErrorHandler +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$AttributesProxy +instanceKlass org/xml/sax/ext/Attributes2 +instanceKlass org/apache/xerces/impl/msg/XMLMessageFormatter +instanceKlass org/apache/xerces/impl/XMLVersionDetector +instanceKlass org/apache/xerces/impl/validation/ValidationManager +instanceKlass org/apache/xerces/impl/dv/dtd/NMTOKENDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/NOTATIONDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ENTITYDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ListDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDREFDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/StringDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/DatatypeValidator +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$2 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$1 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport +instanceKlass org/apache/xerces/impl/dv/ObjectFactory +instanceKlass org/apache/xerces/impl/dv/DTDDVFactory +instanceKlass org/apache/xerces/impl/dtd/DTDGrammarBucket +instanceKlass org/apache/xerces/impl/dtd/XMLAttributeDecl +instanceKlass org/apache/xerces/impl/dtd/XMLSimpleType +instanceKlass org/apache/xerces/impl/dtd/XMLElementDecl +instanceKlass org/apache/xerces/impl/validation/ValidationState +instanceKlass org/apache/xerces/impl/dv/ValidationContext +instanceKlass org/apache/xerces/impl/dtd/DTDGrammar +instanceKlass org/apache/xerces/xni/grammars/Grammar +instanceKlass org/apache/xerces/impl/validation/EntityState +instanceKlass org/apache/xerces/impl/dtd/XMLEntityDecl +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$TrailingMiscDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$DTDDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$PrologDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$XMLDeclDispatcher +instanceKlass org/apache/xerces/util/NamespaceSupport +instanceKlass org/apache/xerces/util/XMLAttributesImpl$Attribute +instanceKlass org/apache/xerces/util/XMLAttributesImpl +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$FragmentContentDispatcher +instanceKlass org/apache/xerces/xni/QName +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$ElementStack +instanceKlass org/apache/xerces/xni/grammars/XMLDTDDescription +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarDescription +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$Dispatcher +instanceKlass org/apache/xerces/xni/XMLAttributes +instanceKlass org/apache/xerces/xni/XMLString +instanceKlass org/apache/xerces/impl/XMLErrorReporter +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBuffer +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBufferPool +instanceKlass org/apache/xerces/impl/XMLEntityManager$ByteBufferPool +instanceKlass org/apache/xerces/util/AugmentationsImpl$AugmentationsItemsContainer +instanceKlass org/apache/xerces/util/AugmentationsImpl +instanceKlass org/apache/xerces/util/XMLResourceIdentifierImpl +instanceKlass org/apache/xerces/impl/XMLEntityManager$1 +instanceKlass org/apache/xerces/xni/Augmentations +instanceKlass org/apache/xerces/impl/XMLEntityScanner +instanceKlass org/apache/xerces/impl/XMLEntityManager$Entity +instanceKlass org/apache/xerces/xni/XMLResourceIdentifier +instanceKlass org/apache/xerces/impl/XMLEntityManager +instanceKlass org/apache/xerces/util/SymbolTable$Entry +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarPool +instanceKlass org/apache/xerces/util/SymbolTable +instanceKlass org/apache/xerces/xni/NamespaceContext +instanceKlass org/apache/xerces/xni/XMLLocator +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidator +instanceKlass org/apache/xerces/impl/RevalidationHandler +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarLoader +instanceKlass org/apache/xerces/impl/dtd/XMLDTDProcessor +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDScanner +instanceKlass org/apache/xerces/util/MessageFormatter +instanceKlass org/apache/xerces/impl/XMLScanner +instanceKlass org/apache/xerces/impl/XMLEntityHandler +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidatorFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentScanner +instanceKlass org/apache/xerces/xni/parser/XMLDocumentSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDSource +instanceKlass org/apache/xerces/xni/parser/XMLComponent +instanceKlass org/apache/xerces/util/ParserConfigurationSettings +instanceKlass org/apache/xerces/parsers/XML11Configurable +instanceKlass org/apache/xerces/xni/parser/XMLPullParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLComponentManager +instanceKlass org/apache/xerces/parsers/SecuritySupport$6 +instanceKlass org/apache/xerces/parsers/SecuritySupport$7 +instanceKlass org/apache/xerces/parsers/SecuritySupport$4 +instanceKlass org/apache/xerces/parsers/SecuritySupport$2 +instanceKlass org/apache/xerces/parsers/SecuritySupport$1 +instanceKlass org/apache/xerces/parsers/SecuritySupport +instanceKlass org/apache/xerces/parsers/ObjectFactory +instanceKlass org/xml/sax/helpers/LocatorImpl +instanceKlass org/apache/xerces/xni/parser/XMLErrorHandler +instanceKlass org/apache/xerces/xni/parser/XMLEntityResolver +instanceKlass org/xml/sax/Locator +instanceKlass org/xml/sax/Attributes +instanceKlass org/xml/sax/AttributeList +instanceKlass org/apache/xerces/parsers/XMLParser +instanceKlass org/apache/xerces/xni/XMLDTDContentModelHandler +instanceKlass org/apache/xerces/xni/XMLDTDHandler +instanceKlass org/apache/xerces/xni/XMLDocumentHandler +instanceKlass org/xml/sax/XMLReader +instanceKlass org/xml/sax/Parser +instanceKlass org/apache/xerces/xs/PSVIProvider +instanceKlass org/xml/sax/EntityResolver +instanceKlass org/xml/sax/ErrorHandler +instanceKlass org/xml/sax/ContentHandler +instanceKlass javax/xml/transform/Result +instanceKlass javax/xml/transform/Source +instanceKlass com/mathworks/xml/XMLUtils +instanceKlass org/apache/commons/io/IOUtils +instanceKlass com/mathworks/mwswing/binding/KeyBindingReaderUtils +instanceKlass com/mathworks/mwswing/binding/ActionDataReader +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferences +instanceKlass com/mathworks/mwswing/binding/ActionDataID +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindingSetID +instanceKlass com/mathworks/mwswing/binding/AbstractNamedUniqueID +instanceKlass com/mathworks/mwswing/binding/UniqueID +instanceKlass com/mathworks/mwswing/binding/KeyBindingManager +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistry +instanceKlass com/mathworks/services/binding/KeyBindingPreferences +instanceKlass com/mathworks/services/binding/MatlabKeyBindings +instanceKlass com/mathworks/mwswing/MJToolBar$LocalContainerListener +instanceKlass javax/accessibility/AccessibleRelationSet +instanceKlass javax/accessibility/AccessibleContext$1 +instanceKlass sun/awt/AWTAccessor$AccessibleContextAccessor +instanceKlass javax/accessibility/AccessibleExtendedComponent +instanceKlass javax/accessibility/AccessibleComponent +instanceKlass javax/accessibility/AccessibleText +instanceKlass javax/accessibility/AccessibleValue +instanceKlass javax/accessibility/AccessibleAction +instanceKlass com/mathworks/mwswing/MJToolBar$2 +instanceKlass java/beans/VetoableChangeListener +instanceKlass javax/swing/plaf/basic/BasicButtonListener +instanceKlass javax/swing/AbstractButton$Handler +instanceKlass javax/swing/DefaultButtonModel +instanceKlass javax/swing/ButtonModel +instanceKlass com/mathworks/mwswing/Painter +instanceKlass com/mathworks/mwswing/MJButton$LocalHierarchyListener +instanceKlass java/awt/VKCollection +instanceKlass javax/swing/plaf/basic/BasicToolBarUI$Handler +instanceKlass javax/swing/event/MouseInputListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsBorders +instanceKlass javax/swing/BoxLayout +instanceKlass javax/swing/JToolBar$DefaultToolBarLayout +instanceKlass com/mathworks/mwswing/CellViewerCustomizer +instanceKlass javax/swing/event/PopupMenuListener +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch +instanceKlass com/mathworks/hg/peer/EchoEvent +instanceKlass com/mathworks/hg/peer/EchoListener +instanceKlass com/mathworks/hg/peer/Echo +instanceKlass com/mathworks/hg/peer/event/ToolbuttonListener +instanceKlass com/mathworks/hg/peer/AbstractToolbuttonPeer +instanceKlass com/mathworks/hg/peer/ToolbarPeer +instanceKlass com/mathworks/hg/peer/event/UiMenuListener +instanceKlass com/mathworks/hg/peer/AbstractSplitButtonPeer +instanceKlass com/mathworks/hg/peer/ContextMenuPeer +instanceKlass com/mathworks/hg/peer/utils/MatlabIconComponent +instanceKlass com/mathworks/hg/peer/MenuPeer +instanceKlass com/mathworks/hg/peer/FigurePeerAcceleratorKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerButtonMotionListener +instanceKlass com/mathworks/hg/peer/AxisComponent +instanceKlass com/mathworks/hg/peer/FigureComponentProxy +instanceKlass com/mathworks/hg/peer/CanvasComponentCreationListener +instanceKlass com/mathworks/hg/peer/FigureNotification +instanceKlass com/mathworks/jmi/Callback +instanceKlass com/mathworks/hg/peer/FigurePeerFocusListener +instanceKlass com/mathworks/hg/peer/FigurePeerPaintListener +instanceKlass com/mathworks/hg/peer/FigurePeerScrollWheelListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStateListener +instanceKlass com/mathworks/hg/peer/FigurePeerMouseListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStyleListener +instanceKlass com/mathworks/hg/peer/AbstractUicontrolPeer +instanceKlass com/mathworks/hg/types/GUIDEViewProvider +instanceKlass com/mathworks/hg/peer/CallbackTrigger +instanceKlass com/mathworks/hg/UicontrolPeer +instanceKlass com/mathworks/hg/BaseControl +instanceKlass com/mathworks/hg/peer/FigurePeerKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerComponentListener +instanceKlass com/mathworks/hg/peer/FigureChild +instanceKlass java/util/TreeMap$PrivateEntryIterator +instanceKlass sun/reflect/annotation/AnnotationParser +instanceKlass java/beans/Transient +instanceKlass com/sun/beans/WildcardTypeImpl +instanceKlass sun/reflect/generics/tree/MethodTypeSignature +instanceKlass sun/reflect/generics/tree/Wildcard +instanceKlass sun/reflect/generics/tree/BottomSignature +instanceKlass com/sun/beans/TypeResolver +instanceKlass java/beans/MethodRef +instanceKlass com/sun/beans/util/Cache$CacheEntry +instanceKlass com/sun/beans/util/Cache +instanceKlass com/sun/beans/finder/AbstractFinder +instanceKlass java/beans/SimpleBeanInfo +instanceKlass com/sun/beans/finder/ClassFinder +instanceKlass java/beans/BeanInfo +instanceKlass com/sun/beans/finder/InstanceFinder +instanceKlass java/beans/WeakIdentityMap +instanceKlass java/beans/ThreadGroupContext +instanceKlass java/beans/FeatureDescriptor +instanceKlass com/sun/beans/WeakCache +instanceKlass java/beans/Introspector +instanceKlass com/mathworks/hg/peer/LightWeightManager +instanceKlass com/mathworks/hg/peer/FigureEditableComponent +instanceKlass com/mathworks/hg/peer/FigureFrameProxyBase +instanceKlass com/mathworks/hg/peer/PositionableFigureClient +instanceKlass javax/swing/event/AncestorListener +instanceKlass com/mathworks/hg/peer/event/HGSendPollable +instanceKlass com/mathworks/jmi/bean/Coalesceable +instanceKlass com/mathworks/hg/util/HGPeerRunnable +instanceKlass com/mathworks/hg/peer/FigureJavaComponentListener$FigureJavaComponentSizeListener +instanceKlass com/mathworks/hg/peer/FigurePeer +instanceKlass com/mathworks/hg/peer/UIComponentParentWithLayout +instanceKlass com/mathworks/hg/peer/UIComponentParent +instanceKlass com/mathworks/hg/peer/FigureValidator +instanceKlass com/mathworks/hg/peer/FigureNotificationHandler +instanceKlass com/mathworks/hg/util/HGPeerQueueUser +instanceKlass com/mathworks/widgets/desk/DTGroupProperty$1 +instanceKlass com/mathworks/widgets/desk/DTGroupBase +instanceKlass com/mathworks/jmi/ClassLoaderManager +instanceKlass com/mathworks/mwswing/BorderUtils +instanceKlass javax/swing/plaf/basic/BasicHTML +instanceKlass java/awt/Component$3 +instanceKlass sun/reflect/ClassDefiner$1 +instanceKlass sun/reflect/ClassDefiner +instanceKlass sun/reflect/MethodAccessorGenerator$1 +instanceKlass sun/reflect/Label$PatchInfo +instanceKlass sun/reflect/Label +instanceKlass sun/reflect/UTF8 +instanceKlass sun/reflect/ClassFileAssembler +instanceKlass sun/reflect/ByteVectorImpl +instanceKlass sun/reflect/ByteVector +instanceKlass sun/reflect/ByteVectorFactory +instanceKlass sun/reflect/AccessorGenerator +instanceKlass sun/reflect/ClassFileConstants +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager$1 +instanceKlass com/mathworks/widgets/desk/DTClient$LocationListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$State +instanceKlass javax/swing/event/MenuListener +instanceKlass com/mathworks/widgets/desk/TargetedAction +instanceKlass com/mathworks/widgets/desk/DTDocumentArranger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties$Listener +instanceKlass com/mathworks/mwswing/MJAbstractAction$1 +instanceKlass com/mathworks/mwswing/binding/KeyStrokeList +instanceKlass java/awt/event/KeyEvent$1 +instanceKlass sun/awt/AWTAccessor$KeyEventAccessor +instanceKlass com/mathworks/widgets/desk/DTNestingContainer$TreeState +instanceKlass com/mathworks/mwswing/binding/KeyStrokeUtils +instanceKlass javax/swing/ArrayTable +instanceKlass com/mathworks/mwswing/ActionUtils +instanceKlass com/mathworks/mwswing/binding/ExtendedActionBridge +instanceKlass com/mathworks/mwswing/KeyControlledDragger +instanceKlass java/awt/TrayIcon +instanceKlass com/mathworks/widgets/desk/DTDropTarget +instanceKlass java/awt/MenuComponent +instanceKlass java/awt/EventQueue$3 +instanceKlass sun/awt/dnd/SunDragSourceContextPeer +instanceKlass java/awt/dnd/peer/DragSourceContextPeer +instanceKlass sun/awt/EventQueueDelegate +instanceKlass java/awt/ModalEventFilter +instanceKlass java/awt/EventDispatchThread$HierarchyEventFilter +instanceKlass java/awt/EventFilter +instanceKlass java/awt/EventDispatchThread$1 +instanceKlass java/awt/Conditional +instanceKlass com/mathworks/mlwidgets/util/MatlabDropTargetListener +instanceKlass java/awt/EventQueue$5 +instanceKlass java/awt/event/InvocationEvent$1 +instanceKlass sun/awt/AWTAccessor$InvocationEventAccessor +instanceKlass java/awt/ActiveEvent +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy$1 +instanceKlass com/mathworks/widgets/desk/DTGroup$LocationListener +instanceKlass java/awt/event/ComponentAdapter +instanceKlass com/mathworks/mwswing/SimpleDOMParser +instanceKlass com/sun/java/swing/SwingUtilities3 +instanceKlass javax/swing/RepaintManager$ProcessingRunnable +instanceKlass sun/reflect/misc/Trampoline +instanceKlass sun/reflect/misc/MethodUtil$1 +instanceKlass java/awt/FlowLayout +instanceKlass com/mathworks/mwswing/PopupMenuCustomizer +instanceKlass com/mathworks/mwswing/ExtendedButton +instanceKlass com/mathworks/widgets/grouptable/transfer/ReceiveHandler +instanceKlass com/mathworks/widgets/grouptable/transfer/SendHandler +instanceKlass com/mathworks/widgets/grouptable/Affordance +instanceKlass com/mathworks/widgets/grouptable/ExpansionProvider +instanceKlass com/mathworks/widgets/grouptable/TableConfigurationSerializer +instanceKlass com/mathworks/widgets/grouptable/GroupingTableSelectionListener +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/TitleChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/util/ComponentInjector +instanceKlass com/jidesoft/grid/IndexChangeListener +instanceKlass com/jidesoft/grid/TableAdapter +instanceKlass com/jidesoft/grid/SortListener +instanceKlass com/mathworks/mwswing/table/SortedTable +instanceKlass com/mathworks/matlab/api/explorer/ActionInputSource +instanceKlass com/mathworks/matlab/api/explorer/FileSystem +instanceKlass com/mathworks/mde/desk/DesktopExplorerAdapterImpl +instanceKlass com/mathworks/mde/desk/MLDesktop$doMatlabStatus +instanceKlass com/mathworks/widgets/desk/DTToolBarConfiguration +instanceKlass com/mathworks/widgets/desk/DTPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTProperty +instanceKlass javax/swing/AbstractAction +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry +instanceKlass com/mathworks/widgets/desk/DefaultViewTabFactory +instanceKlass com/mathworks/widgets/desk/DTGroupPropertyProvider +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Listener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar +instanceKlass com/mathworks/widgets/desk/DTMainToolBarSupplier +instanceKlass javax/swing/ActionMap +instanceKlass com/mathworks/widgets/desk/RecentFiles +instanceKlass org/w3c/dom/Element +instanceKlass org/w3c/dom/Document +instanceKlass com/mathworks/mwswing/SimpleNode +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary +instanceKlass com/mathworks/mde/desk/MLDesktop$MatlabReadyListener +instanceKlass com/mathworks/widgets/desk/DTLazyPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTClientPropertyProvider +instanceKlass com/mathworks/mde/liveeditor/ToolstripManager +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefresher +instanceKlass com/mathworks/widgets/desk/DTRecoverable +instanceKlass com/mathworks/toolstrip/factory/TSRegistry +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper +instanceKlass com/mathworks/mde/desk/MLDesktop$DesktopStatusPauseObserver +instanceKlass com/mathworks/widgets/desk/DeferredDesktopFacade +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalLocationListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalArrangementListener +instanceKlass com/mathworks/widgets/desk/DTGroupAdapter +instanceKlass com/mathworks/widgets/desk/DTClientAdapter +instanceKlass com/mathworks/widgets/desk/DTLocation$Listener +instanceKlass com/mathworks/widgets/desk/DTGroupListener +instanceKlass com/mathworks/widgets/desk/DTClientListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager +instanceKlass com/mathworks/desktop/attr/AttributeChangeListener +instanceKlass com/mathworks/desktop/attr/Attribute +instanceKlass com/mathworks/widgets/desk/DTSelectionManager +instanceKlass javax/swing/TimerQueue$DelayedTimer +instanceKlass java/util/concurrent/Delayed +instanceKlass javax/swing/TimerQueue$1 +instanceKlass javax/swing/TimerQueue +instanceKlass com/mathworks/ddux/JSBridge$1 +instanceKlass com/mathworks/messageservice/Subscriber +instanceKlass com/mathworks/ddux/JSBridge +instanceKlass com/mathworks/mvm/eventmgr/EventListening +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr +instanceKlass com/mathworks/mvm/MvmSession +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks$1 +instanceKlass com/mathworks/matlab/environment/context/Util +instanceKlass com/mathworks/addons_common/util/MatlabPlatformUtil +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer$1 +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFacade +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFactory +instanceKlass com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator +instanceKlass java/lang/reflect/TypeVariable +instanceKlass sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$SupportedProducts +instanceKlass sun/reflect/generics/visitor/Reifier +instanceKlass sun/reflect/generics/visitor/TypeTreeVisitor +instanceKlass sun/reflect/generics/tree/ClassSignature +instanceKlass sun/reflect/generics/tree/Signature +instanceKlass sun/reflect/generics/tree/ClassTypeSignature +instanceKlass sun/reflect/generics/tree/SimpleClassTypeSignature +instanceKlass sun/reflect/generics/tree/FieldTypeSignature +instanceKlass sun/reflect/generics/tree/BaseType +instanceKlass sun/reflect/generics/tree/TypeSignature +instanceKlass sun/reflect/generics/tree/ReturnType +instanceKlass sun/reflect/generics/tree/TypeArgument +instanceKlass sun/reflect/generics/tree/FormalTypeParameter +instanceKlass sun/reflect/generics/tree/TypeTree +instanceKlass sun/reflect/generics/tree/Tree +instanceKlass sun/reflect/generics/parser/SignatureParser +instanceKlass sun/reflect/generics/factory/CoreReflectionFactory +instanceKlass sun/reflect/generics/factory/GenericsFactory +instanceKlass sun/reflect/generics/scope/AbstractScope +instanceKlass sun/reflect/generics/scope/Scope +instanceKlass com/mathworks/connector/client_services/UserManagerImpl +instanceKlass com/mathworks/matlabserver/internalservices/workersecurity/UserManager +instanceKlass com/mathworks/connector/client_services/ClientCommandWindowServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientCommandWindowService +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientBrowserService +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientEditorService +instanceKlass com/mathworks/matlabserver/workercommon/client/services/MessageProducer +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryImpl +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycleHelper +instanceKlass com/mathworks/connector/json/impl/JsonDeserializationServiceProvider +instanceKlass com/mathworks/connector/json/impl/JsonSerializationServiceProvider +instanceKlass com/mathworks/connector/MessageBase +instanceKlass com/google/gson/TreeTypeAdapter$SingleTypeFactory +instanceKlass com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl +instanceKlass java/lang/reflect/ParameterizedType +instanceKlass java/lang/reflect/GenericArrayType +instanceKlass java/lang/reflect/WildcardType +instanceKlass com/google/gson/internal/$Gson$Types +instanceKlass com/google/gson/reflect/TypeToken +instanceKlass com/google/gson/InstanceCreator +instanceKlass com/google/gson/internal/$Gson$Preconditions +instanceKlass com/google/gson/JsonSerializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl$GenericMessageDeserializer +instanceKlass com/google/gson/JsonDeserializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/MapTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/CollectionTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/ArrayTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/SqlDateTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TimeTypeAdapter$1 +instanceKlass java/util/Date +instanceKlass com/google/gson/internal/bind/DateTypeAdapter$1 +instanceKlass java/text/Format +instanceKlass com/google/gson/internal/bind/ObjectTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TypeAdapters$26 +instanceKlass com/google/gson/internal/bind/TypeAdapters$30 +instanceKlass com/google/gson/internal/bind/TypeAdapters$22 +instanceKlass java/util/UUID +instanceKlass com/google/gson/internal/bind/TypeAdapters$31 +instanceKlass com/google/gson/internal/bind/TypeAdapters$29 +instanceKlass com/google/gson/internal/bind/TypeAdapters$28 +instanceKlass com/google/gson/internal/bind/TypeAdapters +instanceKlass com/google/gson/internal/ObjectConstructor +instanceKlass com/google/gson/internal/ConstructorConstructor +instanceKlass com/google/gson/Gson$2 +instanceKlass com/google/gson/Gson$1 +instanceKlass com/google/gson/JsonSerializationContext +instanceKlass com/google/gson/JsonDeserializationContext +instanceKlass com/google/gson/stream/JsonReader +instanceKlass com/google/gson/stream/JsonWriter +instanceKlass com/google/gson/Gson +instanceKlass com/google/gson/JsonElement +instanceKlass com/google/gson/TypeAdapter +instanceKlass com/google/gson/internal/Excluder +instanceKlass com/google/gson/TypeAdapterFactory +instanceKlass com/google/gson/FieldNamingStrategy +instanceKlass com/google/gson/GsonBuilder +instanceKlass com/mathworks/cosg/CosgRegistryFactory +instanceKlass com/mathworks/connector/Message +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl +instanceKlass com/mathworks/connector/Address +instanceKlass com/mathworks/connector/impl/ContextImpl +instanceKlass com/mathworks/cosg/CosgRegistry +instanceKlass com/mathworks/connector/cosg/impl/CosgServiceProvider +instanceKlass com/mathworks/messageservice/builders/MessageServiceBuilder +instanceKlass com/mathworks/connector/Future$Continuation +instanceKlass com/mathworks/connector/native_bridge/impl/NativeBridgeServiceProvider +instanceKlass com/mathworks/connector/Context +instanceKlass com/mathworks/connector/impl/ConnectorImpl +instanceKlass com/mathworks/cosg/CosgMessageHandler +instanceKlass com/mathworks/matlabserver/connector/api/Server +instanceKlass com/mathworks/matlabserver/connector/util/SessionNonceHelper +instanceKlass com/mathworks/connector/Connector +instanceKlass com/mathworks/connector/json/JsonSerializer +instanceKlass com/mathworks/connector/native_bridge/NativeBridge +instanceKlass com/mathworks/connector/ServiceProvider +instanceKlass com/mathworks/connector/message_service/api/JniMessageServiceAdaptor +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistry +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost$1 +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost +instanceKlass com/mathworks/matlabserver/connector/api/Connector +instanceKlass com/mathworks/matlabserver/connector/api/AutoStart +instanceKlass com/mathworks/jmi/MatlabPath$PathCallback +instanceKlass com/mathworks/services/message/MWHandler +instanceKlass com/mathworks/jmi/MatlabMCR +instanceKlass com/mathworks/jmi/MatlabPath +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder$1 +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTheme +instanceKlass javax/swing/text/ViewFactory +instanceKlass com/mathworks/toolstrip/plaf/TSComponentUI +instanceKlass com/mathworks/mde/desk/MLDesktop$ClientInfo +instanceKlass sun/java2d/pipe/AlphaPaintPipe$TileContext +instanceKlass java/awt/ColorPaintContext +instanceKlass java/awt/PaintContext +instanceKlass com/mathworks/mwswing/ColorUtils +instanceKlass com/mathworks/mwswing/IconUtils +instanceKlass com/mathworks/mwswing/ContrastingIcon +instanceKlass com/mathworks/mwswing/ExtendedAction +instanceKlass com/mathworks/widgets/desk/DTUtilities +instanceKlass java/lang/StrictMath +instanceKlass java/io/RandomAccessFile$1 +instanceKlass javax/imageio/metadata/IIOMetadata +instanceKlass javax/imageio/stream/FileCacheImageInputStream$StreamDisposerRecord +instanceKlass com/sun/imageio/stream/StreamCloser$2 +instanceKlass com/sun/imageio/stream/StreamCloser$1 +instanceKlass com/sun/imageio/stream/StreamCloser$CloseAction +instanceKlass com/sun/imageio/stream/StreamCloser +instanceKlass sun/nio/fs/WindowsChannelFactory$2 +instanceKlass sun/nio/fs/WindowsChannelFactory$Flags +instanceKlass sun/nio/fs/WindowsChannelFactory$1 +instanceKlass sun/nio/fs/WindowsChannelFactory +instanceKlass sun/nio/fs/WindowsSecurityDescriptor +instanceKlass java/nio/file/OpenOption +instanceKlass sun/nio/fs/WindowsPath$1 +instanceKlass sun/nio/fs/BasicFileAttributesHolder +instanceKlass sun/nio/fs/WindowsDirectoryStream$WindowsDirectoryIterator +instanceKlass sun/nio/fs/WindowsFileAttributes +instanceKlass java/nio/file/attribute/DosFileAttributes +instanceKlass java/nio/file/attribute/BasicFileAttributes +instanceKlass sun/nio/fs/NativeBuffer$Deallocator +instanceKlass sun/nio/fs/NativeBuffer +instanceKlass sun/nio/fs/NativeBuffers +instanceKlass sun/nio/fs/WindowsNativeDispatcher$BackupResult +instanceKlass sun/nio/fs/WindowsNativeDispatcher$CompletionStatus +instanceKlass sun/nio/fs/WindowsNativeDispatcher$AclInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$Account +instanceKlass sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace +instanceKlass sun/nio/fs/WindowsNativeDispatcher$VolumeInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstStream +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstFile +instanceKlass sun/nio/fs/WindowsNativeDispatcher$1 +instanceKlass sun/nio/fs/WindowsNativeDispatcher +instanceKlass sun/nio/fs/WindowsDirectoryStream +instanceKlass java/nio/file/DirectoryStream +instanceKlass java/nio/file/Files$AcceptAllFilter +instanceKlass java/nio/file/DirectoryStream$Filter +instanceKlass java/net/NetworkInterface$2 +instanceKlass java/net/DefaultInterface +instanceKlass java/net/InterfaceAddress +instanceKlass java/net/NetworkInterface$1 +instanceKlass java/net/NetworkInterface +instanceKlass sun/security/provider/ByteArrayAccess +instanceKlass sun/security/provider/SeedGenerator$1 +instanceKlass sun/security/provider/SeedGenerator +instanceKlass sun/security/provider/SecureRandom$SeederHolder +instanceKlass sun/security/jca/GetInstance$Instance +instanceKlass java/security/MessageDigestSpi +instanceKlass sun/security/jca/GetInstance +instanceKlass java/security/SecureRandomSpi +instanceKlass java/security/Provider$UString +instanceKlass java/security/Provider$Service +instanceKlass sun/security/provider/NativePRNG$NonBlocking +instanceKlass sun/security/provider/NativePRNG$Blocking +instanceKlass sun/security/provider/NativePRNG +instanceKlass sun/security/provider/SunEntries$1 +instanceKlass sun/security/provider/SunEntries +instanceKlass sun/security/jca/ProviderConfig$2 +instanceKlass sun/security/jca/ProviderList$2 +instanceKlass sun/misc/FDBigInteger +instanceKlass java/security/Provider$EngineDescription +instanceKlass java/security/Provider$ServiceKey +instanceKlass sun/security/jca/ProviderConfig +instanceKlass sun/security/jca/ProviderList +instanceKlass sun/security/jca/Providers +instanceKlass java/util/Random +instanceKlass sun/nio/fs/AbstractPath +instanceKlass java/net/URI$Parser +instanceKlass java/net/URI +instanceKlass sun/nio/fs/Util +instanceKlass sun/nio/fs/WindowsPathParser$Result +instanceKlass sun/nio/fs/WindowsPathParser +instanceKlass java/nio/file/FileSystem +instanceKlass java/nio/file/spi/FileSystemProvider +instanceKlass sun/nio/fs/DefaultFileSystemProvider +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder$1 +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder +instanceKlass java/nio/file/FileSystems +instanceKlass java/nio/file/Paths +instanceKlass java/nio/file/TempFileHelper +instanceKlass java/nio/file/Files +instanceKlass javax/imageio/stream/ImageInputStreamImpl +instanceKlass javax/imageio/ImageIO$CacheInfo +instanceKlass javax/imageio/ImageIO$ImageReaderIterator +instanceKlass javax/imageio/spi/FilterIterator +instanceKlass javax/imageio/spi/PartialOrderIterator +instanceKlass javax/imageio/ImageIO$ContainsFilter +instanceKlass javax/imageio/spi/ServiceRegistry$Filter +instanceKlass javax/imageio/ImageTypeSpecifier +instanceKlass javax/imageio/ImageWriter +instanceKlass javax/imageio/ImageTranscoder +instanceKlass javax/imageio/metadata/IIOMetadataFormat +instanceKlass javax/imageio/ImageReader +instanceKlass javax/imageio/spi/IIORegistry$1 +instanceKlass com/sun/imageio/plugins/jpeg/JPEG +instanceKlass javax/imageio/stream/ImageOutputStream +instanceKlass javax/imageio/spi/DigraphNode +instanceKlass javax/imageio/stream/ImageInputStream +instanceKlass javax/imageio/spi/SubRegistry +instanceKlass javax/imageio/spi/IIOServiceProvider +instanceKlass javax/imageio/spi/RegisterableService +instanceKlass javax/imageio/spi/ServiceRegistry +instanceKlass javax/imageio/ImageIO +instanceKlass org/apache/batik/transcoder/TranscoderOutput +instanceKlass com/mathworks/util/IconUtils +instanceKlass com/mathworks/util/Predicate +instanceKlass com/mathworks/widgets/desk/MacScreenMenuProxy +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory +instanceKlass com/mathworks/widgets/desk/DTMnemonicsProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsProvider +instanceKlass com/mathworks/widgets/incSearch/IncSearchInterface +instanceKlass java/awt/dnd/Autoscroll +instanceKlass com/mathworks/widgets/desk/ToolstripInfoRegistrar +instanceKlass com/mathworks/toolstrip/components/PopupListener +instanceKlass com/mathworks/matlab/api/explorer/NewFileTemplate +instanceKlass javax/swing/InputMap +instanceKlass com/mathworks/widgets/desk/RecentFiles$Opener +instanceKlass com/mathworks/widgets/desk/RecentFiles$IconSupplier +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$DoneListener +instanceKlass com/mathworks/mvm/eventmgr/MvmListener +instanceKlass com/mathworks/services/PrefListener +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentListener +instanceKlass com/mathworks/mlservices/MatlabPauseObserver +instanceKlass com/mathworks/explorer/DesktopExplorerAdapter +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction$DoneListener +instanceKlass com/mathworks/mwswing/ControlKeyOverride +instanceKlass com/mathworks/mwswing/MJTiledPane$GridListener +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$ChangeListener +instanceKlass com/mathworks/widgets/desk/DTMenuContributor +instanceKlass com/mathworks/widgets/desk/DTContainer +instanceKlass org/w3c/dom/Node +instanceKlass com/mathworks/widgets/desk/Desktop$CallableWrapper +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction +instanceKlass com/mathworks/widgets/desk/DTCloseReplyListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$ArrangementListener +instanceKlass com/mathworks/mwswing/modality/ModalParticipant +instanceKlass com/mathworks/util/HWndProvider +instanceKlass java/io/Externalizable +instanceKlass com/mathworks/widgets/desk/DTLocation +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$Listener +instanceKlass com/mathworks/widgets/desk/DTOccupant +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry$Registrant +instanceKlass com/mathworks/widgets/desk/DTAsyncWindowCloser +instanceKlass com/mathworks/widgets/desk/DTWindowCloser +instanceKlass com/mathworks/widgets/desk/DTSelectable +instanceKlass com/mathworks/mwswing/SynchronousInvokeUtility$SynchronousEvent +instanceKlass com/mathworks/widgets/desk/Desktop +instanceKlass com/mathworks/widgets/desk/DTWindowActivator +instanceKlass com/mathworks/mlservices/MatlabDesktop +instanceKlass com/mathworks/mlservices/MLExecutionListener +instanceKlass com/mathworks/toolstrip/plaf/TSLookAndFeel +instanceKlass com/mathworks/mwswing/EdtUncaughtExceptionHandler +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsCustomizer +instanceKlass com/jidesoft/plaf/basic/BasicPainter +instanceKlass com/jidesoft/plaf/basic/ThemePainter +instanceKlass com/jidesoft/plaf/vsnet/HeaderCellBorder +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$14 +instanceKlass java/util/TimSort +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$2 +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$1 +instanceKlass sun/java2d/loops/GeneralRenderer +instanceKlass sun/java2d/loops/CustomComponent +instanceKlass sun/java2d/pipe/ValidatePipe +instanceKlass java/awt/BasicStroke +instanceKlass java/awt/Stroke +instanceKlass java/awt/AlphaComposite +instanceKlass sun/java2d/loops/XORComposite +instanceKlass java/awt/Composite +instanceKlass sun/awt/ConstrainableGraphics +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr +instanceKlass sun/java2d/loops/GraphicsPrimitive +instanceKlass sun/java2d/loops/CompositeType +instanceKlass sun/java2d/DefaultDisposerRecord +instanceKlass sun/java2d/loops/RenderLoops +instanceKlass sun/awt/image/BufImgSurfaceData$ICMColorData +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$13 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$12 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$11 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$10 +instanceKlass com/jidesoft/chart/Product +instanceKlass com/jidesoft/shortcut/Product +instanceKlass com/jidesoft/wizard/Product +instanceKlass com/jidesoft/grid/Product +instanceKlass com/jidesoft/document/Product +instanceKlass com/jidesoft/action/Product +instanceKlass com/jidesoft/docking/Product +instanceKlass sun/awt/image/GifFrame +instanceKlass java/awt/Graphics +instanceKlass com/jidesoft/icons/IconsFactory +instanceKlass com/jidesoft/icons/JideIconsFactory +instanceKlass javax/swing/plaf/BorderUIResource +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory$CheckBoxIcon +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$9 +instanceKlass com/jidesoft/plaf/basic/Painter +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$8 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$7 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$6 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$5 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$4 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$3 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$2 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$1 +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty +instanceKlass com/jidesoft/swing/JideSwingUtilities$10 +instanceKlass com/jidesoft/utils/SystemInfo$JavaVersion +instanceKlass com/jidesoft/utils/SystemInfo +instanceKlass com/jidesoft/utils/SecurityUtils +instanceKlass com/jidesoft/dialog/ButtonNames +instanceKlass com/jidesoft/dialog/ButtonListener +instanceKlass javax/swing/event/RowSorterListener +instanceKlass javax/swing/event/CellEditorListener +instanceKlass javax/swing/event/ListSelectionListener +instanceKlass javax/swing/event/TableColumnModelListener +instanceKlass javax/swing/event/TableModelListener +instanceKlass javax/swing/table/TableModel +instanceKlass javax/swing/event/ChangeListener +instanceKlass com/jidesoft/swing/JideSwingUtilities$Handler +instanceKlass com/jidesoft/swing/JideSwingUtilities$GetHandler +instanceKlass com/jidesoft/swing/JideSwingUtilities +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty +instanceKlass com/jidesoft/plaf/vsnet/ConvertListener +instanceKlass com/jidesoft/plaf/basic/BasicLookAndFeelExtension +instanceKlass com/jidesoft/plaf/LookAndFeelExtension +instanceKlass java/util/Vector$Itr +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsInitializer +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$1 +instanceKlass com/jidesoft/plaf/UIDefaultsLookup +instanceKlass com/jidesoft/plaf/LookAndFeelFactory +instanceKlass java/math/MutableBigInteger +instanceKlass com/jidesoft/utils/Q +instanceKlass sun/util/calendar/CalendarUtils +instanceKlass sun/util/calendar/CalendarDate +instanceKlass sun/util/locale/LanguageTag +instanceKlass sun/util/resources/LocaleData$1 +instanceKlass sun/util/resources/LocaleData +instanceKlass sun/util/locale/provider/LocaleResources +instanceKlass sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter +instanceKlass sun/util/locale/provider/SPILocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool +instanceKlass sun/util/locale/provider/CalendarDataUtility +instanceKlass java/util/Calendar$Builder +instanceKlass sun/util/locale/provider/JRELocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleDataMetaInfo +instanceKlass sun/util/locale/provider/AvailableLanguageTags +instanceKlass sun/util/locale/provider/LocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/ResourceBundleBasedAdapter +instanceKlass sun/util/locale/provider/LocaleProviderAdapter +instanceKlass java/util/spi/LocaleServiceProvider +instanceKlass java/util/Locale$1 +instanceKlass java/util/TimeZone$1 +instanceKlass sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule +instanceKlass sun/util/calendar/ZoneInfoFile$1 +instanceKlass sun/util/calendar/ZoneInfoFile +instanceKlass sun/util/calendar/CalendarSystem +instanceKlass java/util/TimeZone +instanceKlass java/util/Calendar +instanceKlass javax/swing/RootPaneContainer +instanceKlass javax/swing/WindowConstants +instanceKlass com/jidesoft/utils/Lm +instanceKlass com/jidesoft/utils/ProductNames +instanceKlass com/mathworks/mwswing/MJStartup$2 +instanceKlass java/awt/event/KeyAdapter +instanceKlass java/awt/event/MouseMotionAdapter +instanceKlass javax/swing/ToolTipManager$stillInsideTimerAction +instanceKlass javax/swing/ToolTipManager$outsideTimerAction +instanceKlass javax/swing/Timer$DoPostEvent +instanceKlass javax/swing/event/EventListenerList +instanceKlass javax/swing/ToolTipManager$insideTimerAction +instanceKlass javax/swing/Timer +instanceKlass java/awt/event/MouseAdapter +instanceKlass java/awt/event/FocusAdapter +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher +instanceKlass com/mathworks/mwswing/MKeyEventDispatcher +instanceKlass com/mathworks/mwswing/BareSwingDetector +instanceKlass com/mathworks/mwswing/MJStartup$1 +instanceKlass com/mathworks/mwswing/MJStartup +instanceKlass com/mathworks/mwswing/MJStartupForDesktop$EscapeKeyHandler +instanceKlass com/mathworks/mwswing/plaf/PlafUtils$SystemColorTracker +instanceKlass sun/font/TrueTypeFont$DirectoryEntry +instanceKlass java/nio/DirectByteBuffer$Deallocator +instanceKlass sun/nio/ch/Util$BufferCache +instanceKlass sun/nio/ch/Util$2 +instanceKlass sun/nio/ch/Util +instanceKlass sun/nio/ch/IOStatus +instanceKlass sun/nio/ch/NativeThread +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel$1 +instanceKlass sun/nio/ch/FileDispatcherImpl$1 +instanceKlass sun/nio/ch/NativeDispatcher +instanceKlass sun/nio/ch/NativeThreadSet +instanceKlass java/net/Inet6Address$Inet6AddressHolder +instanceKlass java/net/InetAddress$2 +instanceKlass sun/net/spi/nameservice/NameService +instanceKlass java/net/Inet6AddressImpl +instanceKlass java/net/InetAddressImpl +instanceKlass java/net/InetAddressImplFactory +instanceKlass java/net/InetAddress$Cache +instanceKlass java/net/InetAddress$InetAddressHolder +instanceKlass java/net/InetAddress$1 +instanceKlass java/net/InetAddress +instanceKlass sun/nio/ch/IOUtil$1 +instanceKlass sun/nio/ch/IOUtil +instanceKlass java/nio/file/attribute/FileAttribute +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel +instanceKlass java/nio/channels/InterruptibleChannel +instanceKlass java/nio/channels/ScatteringByteChannel +instanceKlass java/nio/channels/GatheringByteChannel +instanceKlass java/nio/channels/SeekableByteChannel +instanceKlass java/nio/channels/ByteChannel +instanceKlass java/nio/channels/WritableByteChannel +instanceKlass java/nio/channels/ReadableByteChannel +instanceKlass java/nio/channels/Channel +instanceKlass java/io/RandomAccessFile +instanceKlass sun/font/TrueTypeFont$1 +instanceKlass sun/font/TrueTypeFont$TTDisposerRecord +instanceKlass sun/font/SunFontManager$5 +instanceKlass sun/font/SunFontManager$FamilyDescription +instanceKlass sun/awt/Win32FontManager$2 +instanceKlass sun/font/SunFontManager$3 +instanceKlass sun/font/FontFamily +instanceKlass sun/font/Font2DHandle +instanceKlass sun/font/CompositeFontDescriptor +instanceKlass sun/awt/FontDescriptor +instanceKlass sun/awt/FontConfiguration +instanceKlass sun/font/SunFontManager$FontRegistrationInfo +instanceKlass sun/font/SunFontManager$2 +instanceKlass sun/awt/Win32FontManager$1 +instanceKlass sun/font/GlyphList +instanceKlass sun/font/StrikeCache$1 +instanceKlass sun/font/StrikeCache +instanceKlass sun/font/FontStrike +instanceKlass sun/font/CharToGlyphMapper +instanceKlass java/awt/geom/Path2D +instanceKlass sun/font/StrikeMetrics +instanceKlass sun/font/Font2D +instanceKlass sun/font/FontManagerNativeLibrary$1 +instanceKlass sun/font/FontManagerNativeLibrary +instanceKlass sun/font/SunFontManager$1 +instanceKlass sun/font/SunFontManager$T1Filter +instanceKlass sun/font/SunFontManager$TTFilter +instanceKlass java/io/FilenameFilter +instanceKlass sun/font/SunFontManager +instanceKlass sun/font/FontManagerForSGE +instanceKlass sun/font/FontManager +instanceKlass sun/java2d/FontSupport +instanceKlass sun/font/FontManagerFactory$1 +instanceKlass sun/font/FontManagerFactory +instanceKlass sun/font/FontUtilities$1 +instanceKlass sun/font/FontUtilities +instanceKlass org/apache/commons/lang/Validate +instanceKlass com/mathworks/mwswing/FontSize +instanceKlass com/mathworks/mwswing/FontUtils +instanceKlass com/mathworks/services/DisplayScaleFactorSetting +instanceKlass com/mathworks/util/ResolutionUtils +instanceKlass com/mathworks/mwswing/ScreenSizeChangeHandler +instanceKlass com/mathworks/cfbutils/StatEntryReceiver +instanceKlass com/mathworks/util/NativeJava +instanceKlass javax/swing/Scrollable +instanceKlass com/mathworks/mwswing/ExtendedInputMap +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerListener +instanceKlass javax/swing/Action +instanceKlass com/mathworks/mwswing/MJUtilities +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon +instanceKlass javax/swing/BorderFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1 +instanceKlass java/util/EnumMap$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$CheckBoxMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory +instanceKlass java/awt/ItemSelectable +instanceKlass javax/swing/MenuElement +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon +instanceKlass sun/swing/SwingLazyValue$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory +instanceKlass sun/swing/MenuItemCheckIconFactory +instanceKlass sun/util/ResourceBundleEnumeration +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon +instanceKlass sun/swing/SwingUtilities2$AATextInfo +instanceKlass com/sun/java/swing/plaf/windows/XPStyle$Skin +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty +instanceKlass com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon +instanceKlass javax/swing/UIDefaults$LazyInputMap +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$2 +instanceKlass sun/swing/SwingUtilities2$2 +instanceKlass javax/swing/border/AbstractBorder +instanceKlass javax/swing/UIDefaults$ActiveValue +instanceKlass sun/swing/SwingLazyValue +instanceKlass javax/swing/UIDefaults$LazyValue +instanceKlass javax/swing/plaf/UIResource +instanceKlass java/awt/SystemColor$$Lambda$8 +instanceKlass sun/awt/AWTAccessor$SystemColorAccessor +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor +instanceKlass javax/swing/plaf/ComponentUI +instanceKlass javax/swing/UIManager$2 +instanceKlass sun/awt/PaintEventDispatcher +instanceKlass sun/swing/SwingAccessor +instanceKlass javax/swing/RepaintManager$1 +instanceKlass sun/swing/SwingAccessor$RepaintManagerAccessor +instanceKlass javax/swing/RepaintManager$DisplayChangedHandler +instanceKlass javax/swing/RepaintManager +instanceKlass javax/swing/UIManager$1 +instanceKlass sun/swing/ImageCache +instanceKlass sun/swing/CachedPainter +instanceKlass com/sun/java/swing/plaf/windows/XPStyle +instanceKlass sun/swing/DefaultLookup +instanceKlass javax/swing/UIManager$LAFState +instanceKlass sun/swing/SwingUtilities2$LSBCacheEntry +instanceKlass java/awt/font/FontRenderContext +instanceKlass sun/swing/SwingUtilities2 +instanceKlass sun/swing/StringUIClientPropertyKey +instanceKlass sun/swing/UIClientPropertyKey +instanceKlass javax/swing/LookAndFeel +instanceKlass java/util/IdentityHashMap$IdentityHashMapIterator +instanceKlass java/awt/Toolkit$DesktopPropertyChangeSupport$1 +instanceKlass java/util/ComparableTimSort +instanceKlass java/util/Arrays$LegacyMergeSort +instanceKlass sun/awt/SunHints$Value +instanceKlass java/awt/RenderingHints$Key +instanceKlass sun/awt/SunHints +instanceKlass java/awt/RenderingHints +instanceKlass sun/awt/windows/WDesktopProperties$WinPlaySound +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock +instanceKlass java/util/concurrent/locks/ReadWriteLock +instanceKlass sun/awt/windows/ThemeReader +instanceKlass sun/awt/windows/WDesktopProperties +instanceKlass sun/awt/OSInfo$1 +instanceKlass sun/awt/OSInfo$WindowsVersion +instanceKlass sun/awt/OSInfo +instanceKlass javax/swing/UIManager$LookAndFeelInfo +instanceKlass javax/swing/UIManager +instanceKlass javax/swing/border/Border +instanceKlass com/mathworks/mwswing/plaf/PlafUtils +instanceKlass java/awt/AWTEventMulticaster +instanceKlass java/awt/event/TextListener +instanceKlass java/awt/event/AdjustmentListener +instanceKlass java/awt/event/ItemListener +instanceKlass java/awt/event/ActionListener +instanceKlass java/awt/event/WindowStateListener +instanceKlass java/awt/event/WindowFocusListener +instanceKlass java/awt/event/ContainerListener +instanceKlass java/awt/Toolkit$SelectiveAWTEventListener +instanceKlass java/util/EventListenerProxy +instanceKlass javax/swing/ScrollPaneConstants +instanceKlass com/mathworks/mwswing/MouseWheelRedirector +instanceKlass com/google/common/collect/MapMakerInternalMap$StrongEntry +instanceKlass java/awt/image/BufferedImage$1 +instanceKlass java/awt/image/WritableRenderedImage +instanceKlass java/awt/image/RenderedImage +instanceKlass java/awt/image/SampleModel +instanceKlass java/awt/image/DataBuffer$1 +instanceKlass sun/awt/image/SunWritableRaster$DataStealer +instanceKlass java/awt/image/DataBuffer +instanceKlass java/awt/image/Raster +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/ImageWatched$WeakLink$$Lambda$7 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/PNGImageDecoder$Chromaticities +instanceKlass sun/awt/image/ImageDecoder +instanceKlass sun/awt/image/ImageFetcher$1 +instanceKlass sun/awt/image/FetcherInfo +instanceKlass sun/awt/image/ImageConsumerQueue +instanceKlass sun/awt/image/ImageWatched$Link +instanceKlass sun/awt/image/ImageWatched +instanceKlass java/awt/image/ImageConsumer +instanceKlass sun/awt/image/MultiResolutionImage +instanceKlass java/awt/MediaEntry +instanceKlass sun/awt/image/NativeLibLoader$1 +instanceKlass sun/awt/image/NativeLibLoader +instanceKlass sun/awt/image/InputStreamImageSource +instanceKlass sun/awt/image/ImageFetchable +instanceKlass java/awt/image/ImageProducer +instanceKlass java/awt/MediaTracker +instanceKlass javax/accessibility/AccessibleContext +instanceKlass sun/awt/EventQueueItem +instanceKlass java/awt/event/InputMethodListener +instanceKlass java/awt/event/MouseWheelListener +instanceKlass java/awt/event/MouseMotionListener +instanceKlass java/awt/event/MouseListener +instanceKlass java/awt/event/KeyListener +instanceKlass java/awt/event/HierarchyBoundsListener +instanceKlass java/awt/event/HierarchyListener +instanceKlass java/awt/event/FocusListener +instanceKlass java/awt/event/ComponentListener +instanceKlass java/awt/dnd/DropTarget +instanceKlass java/awt/dnd/DropTargetListener +instanceKlass java/awt/image/BufferStrategy +instanceKlass javax/swing/ImageIcon$2 +instanceKlass javax/swing/ImageIcon$1 +instanceKlass javax/swing/ImageIcon +instanceKlass com/mathworks/util/StringUtils +instanceKlass java/util/concurrent/atomic/AtomicReferenceArray +instanceKlass com/google/common/collect/MapMaker$RemovalListener +instanceKlass com/google/common/base/Ticker +instanceKlass com/google/common/base/Predicate +instanceKlass com/google/common/base/Equivalence +instanceKlass com/google/common/base/Objects +instanceKlass com/google/common/collect/MapMakerInternalMap$1 +instanceKlass com/google/common/collect/MapMakerInternalMap$ReferenceEntry +instanceKlass com/google/common/base/Preconditions +instanceKlass com/google/common/collect/MapMakerInternalMap$ValueReference +instanceKlass com/google/common/collect/GenericMapMaker +instanceKlass com/mathworks/util/logger/impl/LegacyLoggerFactory +instanceKlass com/mathworks/util/logger/LoggerFactory +instanceKlass com/mathworks/util/logger/Log +instanceKlass javax/swing/Icon +instanceKlass com/mathworks/common/icons/IconEnumerationUtils +instanceKlass com/mathworks/common/icons/IconContainer +instanceKlass sun/awt/KeyboardFocusManagerPeerImpl +instanceKlass java/awt/peer/KeyboardFocusManagerPeer +instanceKlass java/awt/FocusTraversalPolicy +instanceKlass java/awt/DefaultKeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor +instanceKlass java/awt/AWTKeyStroke$1 +instanceKlass java/awt/AWTKeyStroke +instanceKlass java/awt/KeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$KeyboardFocusManagerAccessor +instanceKlass java/awt/KeyboardFocusManager +instanceKlass java/awt/KeyEventPostProcessor +instanceKlass java/awt/KeyEventDispatcher +instanceKlass java/awt/Window$WindowDisposerRecord +instanceKlass sun/awt/windows/WToolkit$$Lambda$6 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass sun/awt/windows/WToolkit$$Lambda$5 +instanceKlass sun/awt/windows/WToolkit$$Lambda$4 +instanceKlass sun/awt/windows/WToolkit$$Lambda$3 +instanceKlass sun/awt/AWTAutoShutdown +instanceKlass sun/misc/ThreadGroupUtils +instanceKlass sun/java2d/Disposer$$Lambda$2 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/java2d/Disposer$1 +instanceKlass sun/java2d/Disposer +instanceKlass sun/awt/windows/WToolkit$ToolkitDisposer +instanceKlass sun/java2d/DisposerRecord +instanceKlass sun/misc/PerformanceLogger$TimeData +instanceKlass sun/misc/PerformanceLogger +instanceKlass sun/awt/SunToolkit$ModalityListenerList +instanceKlass sun/awt/ModalityListener +instanceKlass java/beans/ChangeListenerMap +instanceKlass java/beans/PropertyChangeSupport +instanceKlass java/awt/Toolkit$2 +instanceKlass java/awt/BorderLayout +instanceKlass java/awt/LayoutManager2 +instanceKlass java/awt/GraphicsConfiguration +instanceKlass sun/awt/image/SurfaceManager$ProxiedGraphicsConfig +instanceKlass java/awt/GraphicsDevice +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryConverter +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIConverter +instanceKlass sun/misc/FloatingDecimal +instanceKlass sun/java2d/SunGraphicsEnvironment$1 +instanceKlass sun/awt/SunDisplayChanger +instanceKlass sun/java2d/SurfaceManagerFactory +instanceKlass sun/java2d/windows/WindowsFlags$1 +instanceKlass sun/java2d/windows/WindowsFlags +instanceKlass sun/awt/windows/WToolkit$2 +instanceKlass sun/awt/image/SurfaceManager +instanceKlass sun/awt/image/SurfaceManager$ImageAccessor +instanceKlass java/awt/ImageCapabilities +instanceKlass java/awt/Image +instanceKlass sun/java2d/DestSurfaceProvider +instanceKlass sun/java2d/loops/RenderCache$Entry +instanceKlass sun/java2d/loops/RenderCache +instanceKlass sun/java2d/pipe/DrawImage +instanceKlass sun/java2d/pipe/GeneralCompositePipe +instanceKlass sun/java2d/pipe/SpanShapeRenderer +instanceKlass sun/java2d/pipe/AlphaPaintPipe +instanceKlass sun/java2d/pipe/AAShapePipe +instanceKlass sun/java2d/pipe/RegionIterator +instanceKlass sun/java2d/pipe/Region +instanceKlass sun/java2d/pipe/SpanClipRenderer +instanceKlass sun/java2d/pipe/PixelToShapeConverter +instanceKlass sun/java2d/pipe/AlphaColorPipe +instanceKlass sun/java2d/pipe/CompositePipe +instanceKlass sun/java2d/pipe/GlyphListPipe +instanceKlass sun/java2d/pipe/OutlineTextRenderer +instanceKlass sun/java2d/pipe/RenderingEngine$1 +instanceKlass sun/java2d/pipe/RenderingEngine +instanceKlass sun/java2d/pipe/LoopPipe +instanceKlass sun/java2d/pipe/LoopBasedPipe +instanceKlass sun/java2d/pipe/ParallelogramPipe +instanceKlass sun/java2d/pipe/NullPipe +instanceKlass sun/java2d/pipe/DrawImagePipe +instanceKlass sun/java2d/pipe/TextPipe +instanceKlass sun/java2d/pipe/ShapeDrawPipe +instanceKlass sun/java2d/pipe/PixelFillPipe +instanceKlass sun/java2d/pipe/PixelDrawPipe +instanceKlass sun/java2d/StateTrackableDelegate$2 +instanceKlass sun/java2d/StateTrackableDelegate +instanceKlass java/awt/color/ICC_Profile$1 +instanceKlass sun/java2d/cmm/ProfileActivator +instanceKlass sun/java2d/cmm/ProfileDeferralMgr +instanceKlass java/awt/color/ICC_Profile +instanceKlass java/awt/color/ColorSpace +instanceKlass java/awt/image/ColorModel$1 +instanceKlass java/awt/image/ColorModel +instanceKlass sun/awt/image/PixelConverter +instanceKlass sun/java2d/loops/SurfaceType +instanceKlass sun/java2d/SurfaceData +instanceKlass sun/java2d/Surface +instanceKlass sun/java2d/StateTrackable +instanceKlass sun/java2d/DisposerTarget +instanceKlass sun/awt/windows/WToolkit$1 +instanceKlass sun/awt/DisplayChangedListener +instanceKlass java/awt/Cursor$1 +instanceKlass sun/awt/AWTAccessor$CursorAccessor +instanceKlass java/awt/geom/Point2D +instanceKlass java/awt/Cursor +instanceKlass java/awt/ComponentOrientation +instanceKlass java/awt/Frame$1 +instanceKlass sun/awt/AWTAccessor$FrameAccessor +instanceKlass java/awt/Window$1 +instanceKlass sun/awt/AWTAccessor$WindowAccessor +instanceKlass java/awt/event/WindowListener +instanceKlass sun/awt/PostEventQueue +instanceKlass sun/awt/MostRecentKeyValue +instanceKlass java/awt/Queue +instanceKlass java/awt/EventQueue$2 +instanceKlass sun/awt/AWTAccessor$EventQueueAccessor +instanceKlass java/awt/EventQueue$1 +instanceKlass java/awt/EventQueue +instanceKlass sun/awt/AppContext$1 +instanceKlass sun/awt/KeyboardFocusManagerPeerProvider +instanceKlass sun/awt/InputMethodSupport +instanceKlass sun/awt/ComponentFactory +instanceKlass sun/awt/WindowClosingListener +instanceKlass sun/awt/WindowClosingSupport +instanceKlass sun/awt/AppContext$2 +instanceKlass sun/awt/AppContext$3 +instanceKlass sun/awt/AppContext$6 +instanceKlass sun/misc/JavaAWTAccess +instanceKlass sun/awt/AppContext$GetAppContextLock +instanceKlass sun/awt/AppContext +instanceKlass javax/swing/SwingUtilities +instanceKlass javax/swing/SwingConstants +instanceKlass javax/swing/JComponent$1 +instanceKlass java/awt/Container$1 +instanceKlass sun/awt/AWTAccessor$ContainerAccessor +instanceKlass java/awt/geom/Dimension2D +instanceKlass java/awt/LightweightDispatcher +instanceKlass java/awt/LayoutManager +instanceKlass java/awt/Component$DummyRequestFocusController +instanceKlass sun/awt/RequestFocusController +instanceKlass java/awt/Component$1 +instanceKlass sun/awt/AWTAccessor$ComponentAccessor +instanceKlass java/text/AttributedCharacterIterator$Attribute +instanceKlass sun/font/AttributeValues +instanceKlass java/awt/geom/AffineTransform +instanceKlass sun/font/FontAccess +instanceKlass sun/awt/windows/WObjectPeer +instanceKlass java/awt/dnd/peer/DropTargetPeer +instanceKlass java/awt/peer/ComponentPeer +instanceKlass java/awt/event/InputEvent$1 +instanceKlass sun/awt/AWTAccessor$InputEventAccessor +instanceKlass java/awt/event/NativeLibLoader$1 +instanceKlass java/awt/event/NativeLibLoader +instanceKlass java/awt/AWTEvent$1 +instanceKlass sun/awt/AWTAccessor$AWTEventAccessor +instanceKlass java/util/EventObject +instanceKlass java/awt/Insets +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InnerClassLambdaMetafactory$1 +instanceKlass java/awt/GraphicsEnvironment$$Lambda$1 +instanceKlass java/lang/invoke/InfoFromMemberName +instanceKlass java/lang/invoke/MethodHandleInfo +instanceKlass sun/security/util/SecurityConstants +instanceKlass java/security/AccessController$1 +instanceKlass java/lang/invoke/AbstractValidatingLambdaMetafactory +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass jdk/internal/org/objectweb/asm/FieldVisitor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory$1 +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData$1 +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaFormBuffer +instanceKlass java/lang/invoke/LambdaFormEditor +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/MethodHandleImpl$Lazy +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/util/SubList$1 +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$CpPatch +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/invoke/empty/Empty +instanceKlass sun/invoke/util/VerifyType +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$2 +instanceKlass jdk/internal/org/objectweb/asm/AnnotationVisitor +instanceKlass jdk/internal/org/objectweb/asm/Frame +instanceKlass jdk/internal/org/objectweb/asm/Label +instanceKlass jdk/internal/org/objectweb/asm/Type +instanceKlass jdk/internal/org/objectweb/asm/MethodVisitor +instanceKlass jdk/internal/org/objectweb/asm/Item +instanceKlass jdk/internal/org/objectweb/asm/ByteVector +instanceKlass jdk/internal/org/objectweb/asm/ClassVisitor +instanceKlass java/lang/invoke/InvokerBytecodeGenerator +instanceKlass java/util/AbstractList$Itr +instanceKlass java/util/Collections$UnmodifiableCollection$1 +instanceKlass java/lang/invoke/DirectMethodHandle$Lazy +instanceKlass sun/invoke/util/BytecodeDescriptor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData +instanceKlass java/lang/invoke/LambdaForm$NamedFunction +instanceKlass java/lang/invoke/LambdaForm$Name +instanceKlass sun/invoke/util/ValueConversions +instanceKlass sun/invoke/util/VerifyAccess +instanceKlass java/lang/Character$CharacterCache +instanceKlass java/lang/Short$ShortCache +instanceKlass java/lang/Byte$ByteCache +instanceKlass sun/invoke/util/Wrapper$Format +instanceKlass java/lang/invoke/MethodHandles +instanceKlass java/lang/invoke/Invokers +instanceKlass java/lang/invoke/MethodTypeForm +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet +instanceKlass java/lang/invoke/MethodHandles$Lookup +instanceKlass java/lang/invoke/LambdaMetafactory +instanceKlass java/awt/GraphicsEnvironment +instanceKlass java/awt/Toolkit$1 +instanceKlass java/awt/Toolkit$3 +instanceKlass java/util/ResourceBundle$RBClassLoader$1 +instanceKlass java/awt/Toolkit$5 +instanceKlass sun/awt/AWTAccessor +instanceKlass java/awt/Toolkit$4 +instanceKlass sun/awt/AWTAccessor$ToolkitAccessor +instanceKlass java/awt/Toolkit +instanceKlass java/awt/Component$AWTTreeLock +instanceKlass java/util/logging/Logger$1 +instanceKlass java/awt/Component +instanceKlass java/awt/MenuContainer +instanceKlass java/awt/image/ImageObserver +instanceKlass javax/swing/TransferHandler$HasGetTransferHandler +instanceKlass javax/accessibility/Accessible +instanceKlass java/awt/event/AWTEventListener +instanceKlass com/mathworks/mwswing/MJStartupForDesktop +instanceKlass com/mathworks/services/AntialiasedFontPrefs +instanceKlass org/apache/log4j/helpers/AppenderAttachableImpl +instanceKlass org/apache/log4j/CategoryKey +instanceKlass org/apache/log4j/helpers/LogLog +instanceKlass org/apache/log4j/helpers/Loader +instanceKlass org/apache/log4j/spi/Configurator +instanceKlass org/apache/log4j/helpers/OptionConverter +instanceKlass org/apache/log4j/spi/DefaultRepositorySelector +instanceKlass org/apache/log4j/DefaultCategoryFactory +instanceKlass org/apache/log4j/or/DefaultRenderer +instanceKlass org/apache/log4j/or/ObjectRenderer +instanceKlass org/apache/log4j/or/RendererMap +instanceKlass org/apache/log4j/spi/LoggerFactory +instanceKlass org/apache/log4j/Hierarchy +instanceKlass org/apache/log4j/spi/RendererSupport +instanceKlass org/apache/log4j/spi/RepositorySelector +instanceKlass org/apache/log4j/spi/LoggerRepository +instanceKlass org/apache/log4j/LogManager +instanceKlass org/apache/log4j/Category +instanceKlass org/apache/log4j/spi/AppenderAttachable +instanceKlass org/apache/log4j/helpers/OnlyOnceErrorHandler +instanceKlass org/apache/log4j/spi/ErrorHandler +instanceKlass org/apache/log4j/Priority +instanceKlass org/apache/log4j/AppenderSkeleton +instanceKlass org/apache/log4j/spi/OptionHandler +instanceKlass org/apache/log4j/Appender +instanceKlass com/mathworks/services/Log4JConfiguration +instanceKlass com/mathworks/html/HtmlDataListener +instanceKlass com/mathworks/html/SystemBrowserLauncher +instanceKlass com/mathworks/mlwidgets/html/MatlabSystemBrowserStrategy +instanceKlass java/net/SocketAddress +instanceKlass com/mathworks/net/transport/AbstractTransportClientProperties +instanceKlass java/util/logging/LogManager$5 +instanceKlass sun/reflect/UnsafeFieldAccessorFactory +instanceKlass java/util/logging/LoggingProxyImpl +instanceKlass sun/util/logging/LoggingProxy +instanceKlass sun/util/logging/LoggingSupport$1 +instanceKlass sun/util/logging/LoggingSupport +instanceKlass sun/util/logging/PlatformLogger$LoggerProxy +instanceKlass sun/util/logging/PlatformLogger$1 +instanceKlass sun/util/logging/PlatformLogger +instanceKlass java/util/logging/LogManager$LoggerContext$1 +instanceKlass java/util/logging/LogManager$3 +instanceKlass java/util/logging/LogManager$2 +instanceKlass java/lang/Shutdown$Lock +instanceKlass java/lang/Shutdown +instanceKlass java/lang/ApplicationShutdownHooks$1 +instanceKlass java/lang/ApplicationShutdownHooks +instanceKlass java/util/logging/LogManager$LogNode +instanceKlass java/util/logging/LogManager$LoggerContext +instanceKlass java/util/logging/LogManager$1 +instanceKlass java/util/logging/LogManager +instanceKlass java/util/concurrent/CopyOnWriteArrayList +instanceKlass java/util/logging/Logger$LoggerBundle +instanceKlass java/util/logging/Level$KnownLevel +instanceKlass java/util/logging/Level +instanceKlass java/util/logging/Handler +instanceKlass java/util/logging/Logger +instanceKlass java/net/Authenticator +instanceKlass com/mathworks/net/transport/MWTransportClientProperties +instanceKlass com/mathworks/net/transport/MWTransportClientPropertiesFactory +instanceKlass com/mathworks/html/SystemBrowserStrategy +instanceKlass com/mathworks/mlwidgets/html/HTMLPrefs +instanceKlass com/mathworks/services/Prefs$1 +instanceKlass com/mathworks/services/DefaultFontPrefs +instanceKlass com/mathworks/services/settings/SettingValidator +instanceKlass com/mathworks/services/RGBInteger +instanceKlass java/util/RegularEnumSet$EnumSetIterator +instanceKlass java/lang/Class$4 +instanceKlass com/mathworks/services/settings/SettingInfo +instanceKlass com/mathworks/services/settings/SettingAdapter +instanceKlass java/util/TreeMap$Entry +instanceKlass java/lang/ProcessEnvironment$CheckedEntry +instanceKlass java/lang/ProcessEnvironment$CheckedEntrySet$1 +instanceKlass java/util/NavigableMap +instanceKlass java/util/SortedMap +instanceKlass java/util/Collections$UnmodifiableMap +instanceKlass sun/nio/ch/Interruptible +instanceKlass java/lang/ProcessEnvironment$EntryComparator +instanceKlass java/util/concurrent/locks/LockSupport +instanceKlass java/lang/ProcessEnvironment$NameComparator +instanceKlass java/util/concurrent/atomic/AtomicReference +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference$1 +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference +instanceKlass com/mathworks/mvm/eventmgr/MvmDynamicEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/HomeEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/CLCEvent +instanceKlass com/mathworks/mvm/eventmgr/SinkTextEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/DebugLoopEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/IqmInputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/InputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$MvmNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$FactoryNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$SessionNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$NativeMethods +instanceKlass com/mathworks/mvm/eventmgr/InsecureReflection +instanceKlass com/mathworks/mvm/exec/FutureResult +instanceKlass com/mathworks/mvm/exec/MatlabIIP +instanceKlass com/mathworks/mvm/exec/NativeFutureResult +instanceKlass com/mathworks/mvm/exec/MatlabRequest +instanceKlass com/mathworks/mvm/MvmImpl +instanceKlass com/mathworks/mvm/MVM +instanceKlass com/mathworks/mvm/eventmgr/EventMgr +instanceKlass com/mathworks/mvm/MvmFactory +instanceKlass com/mathworks/mvm/context/ThreadContext +instanceKlass com/mathworks/mvm/context/MvmContext +instanceKlass com/mathworks/services/settings/SettingTestEnvironment +instanceKlass com/mathworks/services/settings/SettingTransaction +instanceKlass com/mathworks/services/settings/SettingLevel$Helper +instanceKlass java/awt/geom/RectangularShape +instanceKlass java/awt/Shape +instanceKlass java/awt/Color +instanceKlass java/awt/Paint +instanceKlass java/awt/Transparency +instanceKlass java/awt/Font +instanceKlass com/mathworks/services/settings/SettingConverter +instanceKlass com/mathworks/services/settings/Setting +instanceKlass java/io/FileFilter +instanceKlass javax/swing/text/EditorKit +instanceKlass com/mathworks/cfbutils/FileUtils +instanceKlass com/mathworks/util/FileUtils +instanceKlass com/mathworks/services/Prefs$pairSet +instanceKlass com/mathworks/util/Log +instanceKlass com/mathworks/util/CharBuffer +instanceKlass com/mathworks/services/Prefs$TwoWayMap +instanceKlass com/mathworks/services/lmgr/events/HeartbeatShutdown +instanceKlass com/mathworks/services/lmgr/events/LicServerReconnectAttempt +instanceKlass sun/net/www/protocol/jar/JarFileFactory +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController +instanceKlass java/net/URLClassLoader$2 +instanceKlass java/util/ResourceBundle$Control$1 +instanceKlass java/util/ResourceBundle$CacheKeyReference +instanceKlass java/util/ResourceBundle$CacheKey +instanceKlass java/util/ResourceBundle$Control +instanceKlass java/net/URLClassLoader$3$1 +instanceKlass sun/misc/CompoundEnumeration +instanceKlass java/util/Collections$EmptyIterator +instanceKlass java/net/URLClassLoader$3 +instanceKlass sun/misc/URLClassPath$1 +instanceKlass java/lang/ClassLoader$2 +instanceKlass sun/misc/URLClassPath$2 +instanceKlass java/util/zip/ZipUtils +instanceKlass java/util/zip/CRC32 +instanceKlass java/util/zip/Checksum +instanceKlass sun/misc/Launcher$BootClassPathHolder$1 +instanceKlass sun/misc/Launcher$BootClassPathHolder +instanceKlass java/util/ServiceLoader$1 +instanceKlass java/util/ServiceLoader$LazyIterator +instanceKlass java/util/ServiceLoader +instanceKlass java/util/spi/ResourceBundleControlProvider +instanceKlass java/util/ResourceBundle +instanceKlass com/mathworks/services/Prefs$PrefString +instanceKlass com/mathworks/services/settings/SettingListener +instanceKlass org/apache/commons/io/FilenameUtils +instanceKlass com/mathworks/services/Prefs +instanceKlass com/mathworks/util/ManifestAttributeProviderImpl +instanceKlass com/mathworks/util/ManifestAttributeProvider +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$LazyHolder +instanceKlass com/mathworks/util/LanguageUtils +instanceKlass com/mathworks/util/SystemPropertiesInitializer +instanceKlass java/util/concurrent/Executors$RunnableAdapter +instanceKlass java/util/concurrent/FutureTask$WaitNode +instanceKlass java/util/concurrent/Callable +instanceKlass java/util/concurrent/FutureTask +instanceKlass java/util/concurrent/RunnableFuture +instanceKlass java/util/concurrent/Future +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$1 +instanceKlass java/util/concurrent/LinkedBlockingQueue$Node +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +instanceKlass java/util/concurrent/locks/Condition +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$Node +instanceKlass java/util/concurrent/locks/AbstractOwnableSynchronizer +instanceKlass java/util/concurrent/BlockingQueue +instanceKlass java/util/concurrent/ThreadPoolExecutor$AbortPolicy +instanceKlass java/util/concurrent/RejectedExecutionHandler +instanceKlass java/util/concurrent/AbstractExecutorService +instanceKlass java/util/concurrent/ExecutorService +instanceKlass java/util/concurrent/Executor +instanceKlass java/util/concurrent/Executors +instanceKlass com/mathworks/util/DaemonThreadFactory +instanceKlass java/util/concurrent/ThreadFactory +instanceKlass com/mathworks/util/ThreadUtils +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory +instanceKlass com/mathworks/util/PostVMInit$StartupClass +instanceKlass com/mathworks/util/PostVMInit +instanceKlass java/lang/reflect/WeakCache$Value +instanceKlass sun/misc/ProxyGenerator$ExceptionTableEntry +instanceKlass sun/misc/ProxyGenerator$PrimitiveTypeInfo +instanceKlass java/lang/Void +instanceKlass sun/misc/ProxyGenerator$FieldInfo +instanceKlass java/util/ArrayList$Itr +instanceKlass java/io/DataOutput +instanceKlass sun/misc/ProxyGenerator$ConstantPool$Entry +instanceKlass sun/misc/ProxyGenerator$MethodInfo +instanceKlass java/util/HashMap$HashIterator +instanceKlass sun/misc/ProxyGenerator$ProxyMethod +instanceKlass sun/misc/ProxyGenerator$ConstantPool +instanceKlass java/lang/Class$MethodArray +instanceKlass sun/security/action/GetBooleanAction +instanceKlass sun/misc/ProxyGenerator +instanceKlass java/lang/reflect/WeakCache$Factory +instanceKlass java/util/function/Supplier +instanceKlass java/lang/reflect/Proxy$ProxyClassFactory +instanceKlass java/lang/reflect/Proxy$KeyFactory +instanceKlass java/util/function/BiFunction +instanceKlass java/lang/reflect/WeakCache +instanceKlass java/lang/reflect/Proxy +instanceKlass com/mathworks/util/event/EventListenerList$1 +instanceKlass com/mathworks/util/Disposable +instanceKlass java/lang/reflect/InvocationHandler +instanceKlass com/mathworks/util/event/EventListenerList +instanceKlass java/util/Collections$SynchronizedMap +instanceKlass com/mathworks/util/event/GlobalEventManager +instanceKlass com/mathworks/jmi/Matlab$4 +instanceKlass java/util/Timer$1 +instanceKlass java/util/TaskQueue +instanceKlass java/util/Timer +instanceKlass com/mathworks/jmi/bean/IMatlabObjectListener +instanceKlass com/mathworks/jmi/bean/UDDObject +instanceKlass com/mathworks/jmi/bean/DynamicProperties +instanceKlass com/mathworks/jmi/bean/MTObject +instanceKlass com/mathworks/services/Browseable +instanceKlass com/mathworks/jmi/bean/TreeObject +instanceKlass com/mathworks/jmi/types/MLArrayRef +instanceKlass com/mathworks/jmi/idlebusy/MatlabIdleBusyStatusEvent +instanceKlass com/mathworks/mvm/eventmgr/FirableMvmEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmTypedEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmEvent +instanceKlass java/lang/ClassLoaderHelper +instanceKlass com/mathworks/util/NativeJavaSwitch +instanceKlass com/mathworks/util/ClassLoaderBridge +instanceKlass com/mathworks/jmi/Matlab$2 +instanceKlass java/beans/PropertyChangeListener +instanceKlass com/mathworks/util/PlatformInfo +instanceKlass com/mathworks/util/FactoryUtilAdapter +instanceKlass com/mathworks/jmi/Matlab$MatlabQuitListener +instanceKlass java/lang/Long$LongCache +instanceKlass com/mathworks/jmi/MatlabLooper +instanceKlass com/mathworks/jmi/CompletionObserver +instanceKlass com/mathworks/util/ClassLoaderSupplier +instanceKlass com/mathworks/util/FactoryUtilSupplier +instanceKlass com/mathworks/jmi/MatlabListener +instanceKlass java/util/TimerTask +instanceKlass com/mathworks/util/event/GlobalEventListener +instanceKlass java/util/EventListener +instanceKlass com/mathworks/jmi/Matlab +instanceKlass com/mathworks/mvm/helpers/MatlabPrintStreamManager +instanceKlass com/mathworks/jmi/MatlabLanguage +instanceKlass com/mathworks/jmi/NativeMatlab$MCRIDGetter +instanceKlass com/mathworks/jmi/NativeMatlab +instanceKlass com/mathworks/util/FactoryUtils +instanceKlass java/io/ObjectStreamConstants +instanceKlass java/io/ObjectInput +instanceKlass java/io/DataInput +instanceKlass com/mathworks/jmi/OpaqueJavaInterface +instanceKlass java/io/FilePermission$1 +instanceKlass sun/net/www/MessageHeader +instanceKlass java/net/URLConnection +instanceKlass java/security/PermissionCollection +instanceKlass sun/nio/ByteBuffered +instanceKlass sun/security/util/ManifestEntryVerifier +instanceKlass sun/security/util/DisabledAlgorithmConstraints$1 +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraint +instanceKlass java/util/regex/Matcher +instanceKlass java/util/regex/MatchResult +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraints +instanceKlass java/util/ArrayList$SubList$1 +instanceKlass java/util/ListIterator +instanceKlass java/util/Properties$LineReader +instanceKlass java/security/Security$1 +instanceKlass java/security/Security +instanceKlass sun/security/util/AbstractAlgorithmConstraints$1 +instanceKlass java/util/regex/ASCII +instanceKlass java/util/regex/Pattern$TreeInfo +instanceKlass java/util/regex/Pattern$Node +instanceKlass java/util/regex/Pattern +instanceKlass sun/security/util/AlgorithmDecomposer +instanceKlass sun/security/util/AbstractAlgorithmConstraints +instanceKlass java/security/AlgorithmConstraints +instanceKlass sun/security/util/SignatureFileVerifier +instanceKlass java/lang/Package +instanceKlass java/util/jar/JarVerifier$3 +instanceKlass java/security/CodeSigner +instanceKlass java/util/jar/JarVerifier +instanceKlass sun/misc/ASCIICaseInsensitiveComparator +instanceKlass java/util/jar/Attributes$Name +instanceKlass java/lang/StringCoding$StringDecoder +instanceKlass java/util/jar/Attributes +instanceKlass sun/misc/Resource +instanceKlass sun/misc/IOUtils +instanceKlass java/util/zip/ZStreamRef +instanceKlass java/util/zip/Inflater +instanceKlass sun/misc/ExtensionDependency +instanceKlass java/util/LinkedList$Node +instanceKlass java/util/zip/ZipEntry +instanceKlass sun/misc/JarIndex +instanceKlass sun/nio/ch/DirectBuffer +instanceKlass sun/misc/PerfCounter$CoreCounters +instanceKlass sun/misc/Perf +instanceKlass sun/misc/Perf$GetPerfAction +instanceKlass sun/misc/PerfCounter +instanceKlass java/util/zip/ZipCoder +instanceKlass java/util/Deque +instanceKlass java/util/Queue +instanceKlass java/nio/charset/StandardCharsets +instanceKlass java/util/jar/JavaUtilJarAccessImpl +instanceKlass sun/misc/JavaUtilJarAccess +instanceKlass sun/misc/FileURLMapper +instanceKlass sun/misc/URLClassPath$JarLoader$1 +instanceKlass sun/nio/cs/ThreadLocalCoders$Cache +instanceKlass sun/nio/cs/ThreadLocalCoders +instanceKlass java/util/zip/ZipFile$1 +instanceKlass sun/misc/JavaUtilZipFileAccess +instanceKlass java/util/zip/ZipFile +instanceKlass java/util/zip/ZipConstants +instanceKlass sun/misc/URLClassPath$Loader +instanceKlass sun/misc/URLClassPath$3 +instanceKlass sun/net/util/URLUtil +instanceKlass java/net/URLClassLoader$1 +instanceKlass java/io/FileOutputStream$1 +instanceKlass java/lang/StringCoding$StringEncoder +instanceKlass java/lang/ThreadLocal$ThreadLocalMap +instanceKlass java/lang/StringCoding +instanceKlass sun/usagetracker/UsageTrackerClient$3 +instanceKlass jdk/internal/util/EnvUtils +instanceKlass sun/usagetracker/UsageTrackerClient$2 +instanceKlass sun/usagetracker/UsageTrackerClient$4 +instanceKlass sun/usagetracker/UsageTrackerClient$1 +instanceKlass java/util/concurrent/atomic/AtomicBoolean +instanceKlass sun/usagetracker/UsageTrackerClient +instanceKlass sun/misc/PostVMInitHook +instanceKlass java/lang/invoke/MethodHandleStatics$1 +instanceKlass java/lang/invoke/MethodHandleStatics +instanceKlass java/lang/invoke/MemberName$Factory +instanceKlass java/lang/ClassValue$Version +instanceKlass java/lang/ClassValue$Identity +instanceKlass java/lang/ClassValue +instanceKlass java/lang/invoke/MethodHandleImpl$3 +instanceKlass java/lang/invoke/MethodHandleImpl$2 +instanceKlass java/util/function/Function +instanceKlass java/lang/invoke/MethodHandleImpl$1 +instanceKlass java/lang/Integer$IntegerCache +instanceKlass java/lang/invoke/MethodHandleImpl +instanceKlass java/lang/SystemClassLoaderAction +instanceKlass java/util/LinkedHashMap$LinkedHashIterator +instanceKlass sun/misc/Launcher$AppClassLoader$1 +instanceKlass sun/misc/URLClassPath +instanceKlass java/security/Principal +instanceKlass java/security/ProtectionDomain$Key +instanceKlass java/security/ProtectionDomain$2 +instanceKlass sun/misc/JavaSecurityProtectionDomainAccess +instanceKlass java/security/ProtectionDomain$JavaSecurityAccessImpl +instanceKlass sun/misc/JavaSecurityAccess +instanceKlass java/net/URLStreamHandler +instanceKlass java/net/Parts +instanceKlass java/util/BitSet +instanceKlass sun/net/www/ParseUtil +instanceKlass java/io/FileInputStream$1 +instanceKlass sun/util/locale/LocaleUtils +instanceKlass java/util/Locale$LocaleKey +instanceKlass sun/util/locale/BaseLocale$Key +instanceKlass sun/util/locale/BaseLocale +instanceKlass java/util/concurrent/ConcurrentHashMap$CollectionView +instanceKlass java/util/concurrent/ConcurrentHashMap$CounterCell +instanceKlass java/util/concurrent/ConcurrentHashMap$Node +instanceKlass java/util/concurrent/locks/ReentrantLock +instanceKlass java/util/concurrent/locks/Lock +instanceKlass java/util/concurrent/ConcurrentMap +instanceKlass sun/util/locale/LocaleObjectCache +instanceKlass java/util/Locale +instanceKlass java/lang/reflect/Array +instanceKlass java/nio/charset/CoderResult$Cache +instanceKlass java/nio/charset/CoderResult +instanceKlass java/nio/charset/CharsetDecoder +instanceKlass sun/nio/cs/ArrayDecoder +instanceKlass java/io/Reader +instanceKlass java/lang/Readable +instanceKlass sun/misc/MetaIndex +instanceKlass sun/misc/Launcher$ExtClassLoader$1 +instanceKlass java/util/StringTokenizer +instanceKlass java/net/URLClassLoader$7 +instanceKlass sun/misc/JavaNetAccess +instanceKlass java/lang/ClassLoader$ParallelLoaders +instanceKlass sun/security/util/Debug +instanceKlass sun/misc/Launcher$Factory +instanceKlass java/net/URLStreamHandlerFactory +instanceKlass java/lang/Compiler$1 +instanceKlass java/lang/Compiler +instanceKlass java/lang/System$2 +instanceKlass sun/misc/JavaLangAccess +instanceKlass sun/io/Win32ErrorMode +instanceKlass sun/misc/OSEnvironment +instanceKlass sun/misc/NativeSignalHandler +instanceKlass sun/misc/Signal +instanceKlass java/lang/Terminator$1 +instanceKlass sun/misc/SignalHandler +instanceKlass java/lang/Terminator +instanceKlass java/lang/ClassLoader$NativeLibrary +instanceKlass java/io/ExpiringCache$Entry +instanceKlass java/lang/ClassLoader$3 +instanceKlass java/nio/file/Path +instanceKlass java/nio/file/Watchable +instanceKlass java/lang/Enum +instanceKlass java/io/ExpiringCache +instanceKlass java/io/FileSystem +instanceKlass java/io/DefaultFileSystem +instanceKlass java/lang/Runtime +instanceKlass java/nio/Bits$1 +instanceKlass sun/misc/JavaNioAccess +instanceKlass java/nio/ByteOrder +instanceKlass java/nio/Bits +instanceKlass java/nio/charset/CodingErrorAction +instanceKlass java/nio/charset/CharsetEncoder +instanceKlass sun/nio/cs/ArrayEncoder +instanceKlass sun/reflect/ReflectionFactory$1 +instanceKlass java/lang/Class$1 +instanceKlass sun/nio/cs/SingleByte +instanceKlass sun/nio/cs/HistoricallyNamedCharset +instanceKlass sun/security/action/GetPropertyAction +instanceKlass java/lang/ThreadLocal +instanceKlass java/nio/charset/spi/CharsetProvider +instanceKlass java/nio/charset/Charset +instanceKlass java/io/Writer +instanceKlass java/util/Arrays +instanceKlass sun/reflect/misc/ReflectUtil +instanceKlass java/lang/reflect/ReflectAccess +instanceKlass sun/reflect/LangReflectAccess +instanceKlass java/lang/reflect/Modifier +instanceKlass sun/reflect/annotation/AnnotationType +instanceKlass java/lang/Class$AnnotationData +instanceKlass sun/reflect/generics/repository/AbstractRepository +instanceKlass java/lang/Class$Atomic +instanceKlass java/lang/Class$ReflectionData +instanceKlass java/lang/Class$3 +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 +instanceKlass java/security/PrivilegedExceptionAction +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater +instanceKlass java/io/OutputStream +instanceKlass java/io/Flushable +instanceKlass java/io/FileDescriptor$1 +instanceKlass sun/misc/JavaIOFileDescriptorAccess +instanceKlass java/io/FileDescriptor +instanceKlass sun/misc/Version +instanceKlass java/lang/CharacterData +instanceKlass java/util/Hashtable$Enumerator +instanceKlass java/util/Iterator +instanceKlass java/util/Enumeration +instanceKlass java/util/Objects +instanceKlass java/util/Collections$SynchronizedCollection +instanceKlass java/lang/Math +instanceKlass java/util/Hashtable$Entry +instanceKlass sun/misc/VM +instanceKlass java/util/HashMap$Node +instanceKlass java/util/Map$Entry +instanceKlass sun/reflect/Reflection +instanceKlass sun/misc/SharedSecrets +instanceKlass java/lang/ref/Reference$1 +instanceKlass sun/misc/JavaLangRefAccess +instanceKlass java/lang/ref/ReferenceQueue$Lock +instanceKlass java/lang/ref/ReferenceQueue +instanceKlass java/util/Collections$UnmodifiableCollection +instanceKlass java/util/AbstractMap +instanceKlass java/util/Set +instanceKlass java/util/Collections +instanceKlass java/lang/ref/Reference$Lock +instanceKlass sun/reflect/ReflectionFactory +instanceKlass java/util/AbstractCollection +instanceKlass java/util/RandomAccess +instanceKlass java/util/List +instanceKlass java/util/Collection +instanceKlass java/lang/Iterable +instanceKlass java/security/cert/Certificate +instanceKlass sun/reflect/ReflectionFactory$GetReflectionFactoryAction +instanceKlass java/security/PrivilegedAction +instanceKlass java/security/AccessController +instanceKlass java/security/Permission +instanceKlass java/security/Guard +instanceKlass java/lang/String$CaseInsensitiveComparator +instanceKlass java/util/Comparator +instanceKlass java/io/ObjectStreamField +instanceKlass java/lang/Number +instanceKlass java/lang/Character +instanceKlass java/lang/Boolean +instanceKlass java/nio/Buffer +instanceKlass java/lang/StackTraceElement +instanceKlass java/security/CodeSource +instanceKlass sun/misc/Launcher +instanceKlass java/util/jar/Manifest +instanceKlass java/net/URL +instanceKlass java/io/File +instanceKlass java/io/InputStream +instanceKlass java/io/Closeable +instanceKlass java/lang/AutoCloseable +instanceKlass sun/misc/Unsafe +instanceKlass java/lang/AbstractStringBuilder +instanceKlass java/lang/Appendable +instanceKlass java/lang/invoke/CallSite +instanceKlass java/lang/invoke/MethodType +instanceKlass java/lang/invoke/LambdaForm +instanceKlass java/lang/invoke/MethodHandleNatives +instanceKlass java/lang/invoke/MemberName +instanceKlass java/lang/invoke/MethodHandle +instanceKlass sun/reflect/CallerSensitive +instanceKlass java/lang/annotation/Annotation +instanceKlass sun/reflect/FieldAccessor +instanceKlass sun/reflect/ConstantPool +instanceKlass sun/reflect/ConstructorAccessor +instanceKlass sun/reflect/MethodAccessor +instanceKlass sun/reflect/MagicAccessorImpl +instanceKlass java/lang/reflect/Parameter +instanceKlass java/lang/reflect/Member +instanceKlass java/lang/reflect/AccessibleObject +instanceKlass java/util/Dictionary +instanceKlass java/util/Map +instanceKlass java/lang/ThreadGroup +instanceKlass java/lang/Thread$UncaughtExceptionHandler +instanceKlass java/lang/Thread +instanceKlass java/lang/Runnable +instanceKlass java/lang/ref/Reference +instanceKlass java/security/AccessControlContext +instanceKlass java/security/ProtectionDomain +instanceKlass java/lang/SecurityManager +instanceKlass java/lang/Throwable +instanceKlass java/lang/System +instanceKlass java/lang/ClassLoader +instanceKlass java/lang/Cloneable +instanceKlass java/lang/Class +instanceKlass java/lang/reflect/Type +instanceKlass java/lang/reflect/GenericDeclaration +instanceKlass java/lang/reflect/AnnotatedElement +instanceKlass java/lang/String +instanceKlass java/lang/CharSequence +instanceKlass java/lang/Comparable +instanceKlass java/io/Serializable +ciInstanceKlass java/lang/Object 1 1 75 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 7 7 7 7 1 1 1 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/io/Serializable 1 1 5 1 1 100 100 +ciInstanceKlass java/lang/String 1 1 537 3 3 3 3 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 100 100 7 100 7 7 100 7 7 100 7 7 100 7 100 7 100 100 7 7 7 7 100 7 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 +staticfield java/lang/String serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/String CASE_INSENSITIVE_ORDER Ljava/util/Comparator; java/lang/String$CaseInsensitiveComparator +ciInstanceKlass java/lang/Class 1 1 1187 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 8 8 8 8 8 7 7 7 100 100 100 7 7 100 7 100 7 7 7 7 100 7 7 100 7 100 100 100 7 100 100 100 100 100 100 7 7 7 7 100 100 100 7 7 7 100 100 7 7 100 100 7 7 100 7 100 7 7 100 100 7 7 7 7 7 7 7 7 7 100 7 7 100 7 7 100 100 7 7 7 7 100 100 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 +staticfield java/lang/Class serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/Cloneable 1 1 5 1 1 100 100 +instanceKlass com/mathworks/eps/notificationclient/api/classloader/FilteredClassLoader +instanceKlass com/google/inject/internal/BytecodeGen$BridgeClassLoader +instanceKlass com/mathworks/util/jarloader/SimpleClassLoader +instanceKlass com/mathworks/jmi/CustomClassLoader +instanceKlass java/util/ResourceBundle$RBClassLoader +instanceKlass sun/reflect/DelegatingClassLoader +instanceKlass java/security/SecureClassLoader +ciInstanceKlass java/lang/ClassLoader 1 1 839 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 7 7 100 100 100 7 7 100 7 7 7 7 7 7 100 7 100 100 7 7 100 100 7 7 7 7 100 7 100 100 7 100 100 7 7 100 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 1 +staticfield java/lang/ClassLoader nocerts [Ljava/security/cert/Certificate; 0 [Ljava/security/cert/Certificate; +ciInstanceKlass java/lang/System 1 1 366 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 100 7 100 100 100 100 100 100 7 7 100 100 7 100 100 7 7 7 7 100 100 100 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/lang/System in Ljava/io/InputStream; java/io/BufferedInputStream +staticfield java/lang/System out Ljava/io/PrintStream; java/io/PrintStream +staticfield java/lang/System err Ljava/io/PrintStream; java/io/PrintStream +instanceKlass java/lang/Exception +instanceKlass java/lang/Error +ciInstanceKlass java/lang/Throwable 1 1 324 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 100 100 100 100 100 7 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Throwable UNASSIGNED_STACK [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Throwable SUPPRESSED_SENTINEL Ljava/util/List; java/util/Collections$UnmodifiableRandomAccessList +staticfield java/lang/Throwable EMPTY_THROWABLE_ARRAY [Ljava/lang/Throwable; 0 [Ljava/lang/Throwable; +staticfield java/lang/Throwable $assertionsDisabled Z 1 +instanceKlass com/google/common/util/concurrent/ExecutionError +instanceKlass org/apache/xerces/impl/dv/ObjectFactory$ConfigurationError +instanceKlass org/apache/xerces/parsers/ObjectFactory$ConfigurationError +instanceKlass java/awt/AWTError +instanceKlass java/lang/AssertionError +instanceKlass java/lang/VirtualMachineError +instanceKlass java/lang/LinkageError +instanceKlass java/lang/ThreadDeath +ciInstanceKlass java/lang/Error 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +ciInstanceKlass java/lang/ThreadDeath 0 0 15 1 1 1 1 1 1 1 1 5 0 100 100 12 10 +instanceKlass org/apache/xerces/impl/xs/XMLSchemaException +instanceKlass com/mathworks/apache/commons/cli/ParseException +instanceKlass com/mathworks/eps/notificationclient/api/exception/NotificationClientException +instanceKlass javax/xml/stream/XMLStreamException +instanceKlass com/mathworks/install/XMLParseException +instanceKlass com/mathworks/install/InvalidInstallationFolderException +instanceKlass org/jdom/JDOMException +instanceKlass com/mathworks/install/exception/InstallerRequirementNotSatisfiedException +instanceKlass sun/nio/fs/WindowsException +instanceKlass com/google/inject/internal/ErrorsException +instanceKlass org/dom4j/DocumentException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceBadConfigurationException +instanceKlass javax/xml/bind/JAXBException +instanceKlass com/mathworks/supportsoftwareinstaller/api/SsiException +instanceKlass com/mathworks/addons_common/exceptions/AddOnNotFoundException +instanceKlass com/mathworks/addons_common/exceptions/MultipleVersionsFoundException +instanceKlass com/mathworks/addons_common/exceptions/IdentifierNotFoundException +instanceKlass com/mathworks/cmlink/util/system/SystemCommandException +instanceKlass org/tmatesoft/svn/core/SVNException +instanceKlass com/mathworks/jmi/AWTUtilities$ConversionException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutRangeException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutException +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils$MFileTypeUnsupportedException +instanceKlass java/awt/AWTException +instanceKlass org/openide/util/RequestProcessor$Item +instanceKlass org/netbeans/editor/InvalidMarkException +instanceKlass com/mathworks/widgets/desk/DTUnableToOpenException +instanceKlass com/mathworks/cmlink/api/ConfigurationManagementException +instanceKlass com/mathworks/widgets/ToolTipSourceParentIsNullException +instanceKlass javax/swing/tree/ExpandVetoException +instanceKlass com/mathworks/mlwidgets/help/WebDocUnavailableException +instanceKlass com/mathworks/instutil/JNIException +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentCreationException +instanceKlass com/mathworks/html/BrowserCreationException +instanceKlass java/util/concurrent/ExecutionException +instanceKlass com/mathworks/toolbox/distcomp/mjs/MJSException +instanceKlass com/mathworks/services/lmgr/JNIException +instanceKlass org/apache/xerces/impl/dv/DatatypeException +instanceKlass org/xml/sax/SAXException +instanceKlass com/mathworks/mwswing/binding/ReadWriteException +instanceKlass java/beans/PropertyVetoException +instanceKlass com/mathworks/hg/peer/LightWeightManager$InvalidConfigurationException +instanceKlass java/util/TooManyListenersException +instanceKlass java/awt/datatransfer/UnsupportedFlavorException +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/InvalidLocationException +instanceKlass java/text/ParseException +instanceKlass java/net/URISyntaxException +instanceKlass java/lang/CloneNotSupportedException +instanceKlass com/mathworks/jmi/MatlabException +instanceKlass java/util/concurrent/BrokenBarrierException +instanceKlass javax/xml/transform/TransformerException +instanceKlass javax/xml/parsers/ParserConfigurationException +instanceKlass java/util/zip/DataFormatException +instanceKlass java/awt/FontFormatException +instanceKlass javax/swing/UnsupportedLookAndFeelException +instanceKlass java/util/concurrent/TimeoutException +instanceKlass java/security/GeneralSecurityException +instanceKlass javax/swing/text/BadLocationException +instanceKlass com/mathworks/services/settings/SettingException +instanceKlass java/beans/IntrospectionException +instanceKlass com/mathworks/util/MatlabThreadException +instanceKlass java/security/PrivilegedActionException +instanceKlass java/io/IOException +instanceKlass java/lang/InterruptedException +instanceKlass java/lang/ReflectiveOperationException +instanceKlass java/lang/RuntimeException +ciInstanceKlass java/lang/Exception 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass org/apache/commons/logging/LogConfigurationException +instanceKlass com/mathworks/webservices/client/core/MathWorksServiceException +instanceKlass com/mathworks/webservices/client/core/MathWorksClientException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceNotRegisteredException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceHandlerInternalException +instanceKlass com/mathworks/instutil/NoParentException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelException +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader$EarlyExitException +instanceKlass com/teamdev/jxbrowser/chromium/BrowserException +instanceKlass com/google/inject/internal/cglib/core/$CodeGenerationException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractorException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ServerException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPCException +instanceKlass com/teamdev/jxbrowser/chromium/internal/EnvironmentException +instanceKlass com/google/common/util/concurrent/UncheckedExecutionException +instanceKlass com/google/common/cache/CacheLoader$InvalidCacheLoadException +instanceKlass com/google/inject/ProvisionException +instanceKlass com/google/inject/ConfigurationException +instanceKlass com/google/inject/CreationException +instanceKlass org/eclipse/jgit/errors/UnsupportedCredentialItem +instanceKlass org/apache/commons/lang/exception/NestableRuntimeException +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration$FormatException +instanceKlass org/openide/util/Utilities$UnorderableException +instanceKlass javax/swing/undo/CannotRedoException +instanceKlass javax/swing/undo/CannotUndoException +instanceKlass com/jidesoft/grid/EditingNotStoppedException +instanceKlass com/mathworks/mladdonpackaging/AddonPackageException +instanceKlass com/mathworks/comparisons/main/NoSuitableComparisonTypeException +instanceKlass com/jgoodies/forms/layout/FormSpecParser$FormLayoutParseException +instanceKlass java/util/ConcurrentModificationException +instanceKlass org/w3c/dom/events/EventException +instanceKlass org/w3c/dom/DOMException +instanceKlass com/mathworks/desktop/attr/AttributeParseException +instanceKlass org/apache/xerces/impl/dv/DVFactoryException +instanceKlass org/apache/xerces/xni/XNIException +instanceKlass com/mathworks/mvm/eventmgr/InvalidEventTypeException +instanceKlass java/util/NoSuchElementException +instanceKlass com/google/gson/JsonParseException +instanceKlass com/mathworks/util/ShutdownRuntimeException +instanceKlass java/lang/invoke/WrongMethodTypeException +instanceKlass java/util/MissingResourceException +instanceKlass java/util/concurrent/RejectedExecutionException +instanceKlass com/mathworks/mvm/MvmTerminatedException +instanceKlass com/mathworks/services/settings/SettingLevelRuntimeException +instanceKlass com/mathworks/services/settings/SettingNameRuntimeException +instanceKlass java/lang/UnsupportedOperationException +instanceKlass com/mathworks/services/settings/SettingUnsupportedTypeRuntimeException +instanceKlass java/lang/IllegalStateException +instanceKlass java/lang/reflect/UndeclaredThrowableException +instanceKlass java/lang/IndexOutOfBoundsException +instanceKlass java/lang/SecurityException +instanceKlass com/mathworks/util/AggregateException +instanceKlass java/lang/IllegalArgumentException +instanceKlass java/lang/ArithmeticException +instanceKlass java/lang/NullPointerException +instanceKlass java/lang/IllegalMonitorStateException +instanceKlass java/lang/ArrayStoreException +instanceKlass java/lang/ClassCastException +ciInstanceKlass java/lang/RuntimeException 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 1 12 12 12 12 12 10 10 10 10 10 +ciInstanceKlass java/lang/SecurityManager 0 0 372 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/security/ProtectionDomain 1 1 275 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 100 100 100 7 7 100 7 7 100 7 7 7 100 100 100 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 +staticfield java/security/ProtectionDomain debug Lsun/security/util/Debug; null +ciInstanceKlass java/security/AccessControlContext 1 1 302 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 +instanceKlass sun/reflect/misc/MethodUtil +instanceKlass java/net/URLClassLoader +ciInstanceKlass java/security/SecureClassLoader 1 1 127 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/security/SecureClassLoader debug Lsun/security/util/Debug; null +instanceKlass java/lang/InstantiationException +instanceKlass java/lang/NoSuchMethodException +instanceKlass java/lang/IllegalAccessException +instanceKlass java/lang/NoSuchFieldException +instanceKlass java/lang/reflect/InvocationTargetException +instanceKlass java/lang/ClassNotFoundException +ciInstanceKlass java/lang/ReflectiveOperationException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/ClassNotFoundException 1 1 29 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 1 1 1 12 12 12 9 10 10 +instanceKlass java/lang/ClassFormatError +instanceKlass java/lang/UnsatisfiedLinkError +instanceKlass java/lang/ExceptionInInitializerError +instanceKlass java/lang/IncompatibleClassChangeError +instanceKlass java/lang/BootstrapMethodError +instanceKlass java/lang/NoClassDefFoundError +ciInstanceKlass java/lang/LinkageError 1 1 21 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 10 10 10 +ciInstanceKlass java/lang/NoClassDefFoundError 0 0 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ClassCastException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ArrayStoreException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/InternalError +instanceKlass java/lang/StackOverflowError +instanceKlass java/lang/OutOfMemoryError +ciInstanceKlass java/lang/VirtualMachineError 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/OutOfMemoryError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/StackOverflowError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/IllegalMonitorStateException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/ref/PhantomReference +instanceKlass java/lang/ref/FinalReference +instanceKlass java/lang/ref/WeakReference +instanceKlass java/lang/ref/SoftReference +ciInstanceKlass java/lang/ref/Reference 1 1 131 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 7 100 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +instanceKlass com/google/common/cache/LocalCache$SoftValueReference +instanceKlass org/openide/util/TimedSoftReference +instanceKlass sun/security/util/MemoryCache$SoftCacheEntry +instanceKlass sun/font/FontDesignMetrics$KeyReference +instanceKlass sun/font/StrikeCache$SoftDisposerRef +instanceKlass sun/util/locale/provider/LocaleResources$ResourceReference +instanceKlass com/google/common/collect/MapMakerInternalMap$SoftValueReference +instanceKlass sun/misc/SoftCache$ValueCell +instanceKlass java/lang/invoke/LambdaFormEditor$Transform +instanceKlass java/util/ResourceBundle$BundleReference +instanceKlass sun/util/locale/LocaleObjectCache$CacheEntry +ciInstanceKlass java/lang/ref/SoftReference 1 1 32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +instanceKlass org/apache/commons/logging/impl/WeakHashtable$WeakKey +instanceKlass java/lang/reflect/Proxy$Key2 +instanceKlass java/io/ObjectStreamClass$FieldReflectorKey +instanceKlass java/io/ObjectStreamClass$WeakClassKey +instanceKlass com/google/common/cache/LocalCache$WeakEntry +instanceKlass com/google/common/cache/LocalCache$WeakValueReference +instanceKlass com/sun/jna/CallbackReference +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference$1 +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty$WeakPCL +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge$WeakLink +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler$DocReference +instanceKlass javax/swing/text/GapContent$MarkData +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$ProxyListener +instanceKlass javax/swing/ActionPropertyChangeListener$OwnedWeakReference +instanceKlass java/beans/WeakIdentityMap$Entry +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty$WeakPCL +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL +instanceKlass sun/awt/image/ImageWatched$AccWeakReference +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry +instanceKlass java/util/logging/LogManager$LoggerWeakRef +instanceKlass java/util/ResourceBundle$LoaderReference +instanceKlass java/lang/reflect/WeakCache$CacheValue +instanceKlass java/lang/reflect/Proxy$Key1 +instanceKlass java/lang/reflect/WeakCache$CacheKey +instanceKlass java/lang/ThreadLocal$ThreadLocalMap$Entry +instanceKlass java/lang/ClassValue$Entry +instanceKlass java/util/WeakHashMap$Entry +ciInstanceKlass java/lang/ref/WeakReference 1 1 17 1 1 1 1 1 1 7 100 1 1 1 1 12 12 10 10 +instanceKlass java/lang/ref/Finalizer +ciInstanceKlass java/lang/ref/FinalReference 1 1 13 1 1 1 1 1 100 7 1 1 1 12 10 +instanceKlass sun/misc/Cleaner +ciInstanceKlass java/lang/ref/PhantomReference 1 1 16 1 1 1 1 1 1 1 1 100 7 1 1 1 12 10 +ciInstanceKlass sun/misc/Cleaner 1 1 71 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 11 +staticfield sun/misc/Cleaner dummyQueue Ljava/lang/ref/ReferenceQueue; java/lang/ref/ReferenceQueue +ciInstanceKlass java/lang/ref/Finalizer 1 1 145 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 100 7 7 100 100 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/ref/Finalizer lock Ljava/lang/Object; java/lang/Object +instanceKlass com/mathworks/eps/notificationclient/impl/executors/ExecutorServiceGroup$1 +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager$1 +instanceKlass com/jidesoft/utils/PortingUtils$1 +instanceKlass java/awt/EventDispatchThread +instanceKlass sun/awt/image/ImageFetcher +instanceKlass java/util/logging/LogManager$Cleaner +instanceKlass java/util/TimerThread +instanceKlass java/lang/ref/Finalizer$FinalizerThread +instanceKlass java/lang/ref/Reference$ReferenceHandler +ciInstanceKlass java/lang/Thread 1 1 536 3 3 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 100 100 100 100 100 100 7 100 100 7 100 100 7 7 7 100 7 100 7 7 100 100 100 100 100 100 7 7 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Thread EMPTY_STACK_TRACE [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Thread SUBCLASS_IMPLEMENTATION_PERMISSION Ljava/lang/RuntimePermission; java/lang/RuntimePermission +ciInstanceKlass java/lang/ThreadGroup 1 1 265 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 7 100 100 7 7 100 100 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +instanceKlass java/util/Hashtable +ciInstanceKlass java/util/Dictionary 1 1 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 1 1 1 1 1 1 12 10 +instanceKlass org/apache/commons/logging/impl/WeakHashtable +instanceKlass org/netbeans/editor/BaseDocument$LazyPropertyMap +instanceKlass javax/swing/UIDefaults +instanceKlass java/util/Properties +ciInstanceKlass java/util/Hashtable 1 1 413 3 3 4 4 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 100 7 100 100 100 7 100 7 100 100 7 100 100 7 100 7 100 100 100 7 100 7 7 100 7 7 7 7 100 7 7 7 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 +instanceKlass java/security/Provider +instanceKlass com/mathworks/services/Prefs$PrefsProperties +ciInstanceKlass java/util/Properties 1 1 260 3 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 +staticfield java/util/Properties hexDigit [C 16 +instanceKlass java/lang/reflect/Executable +instanceKlass java/lang/reflect/Field +ciInstanceKlass java/lang/reflect/AccessibleObject 1 1 141 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/reflect/AccessibleObject ACCESS_PERMISSION Ljava/security/Permission; java/lang/reflect/ReflectPermission +staticfield java/lang/reflect/AccessibleObject reflectionFactory Lsun/reflect/ReflectionFactory; sun/reflect/ReflectionFactory +ciInstanceKlass java/lang/reflect/Field 1 1 359 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 7 100 7 7 100 7 100 7 7 7 7 7 7 7 7 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass java/lang/reflect/Parameter 0 0 207 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +instanceKlass java/lang/reflect/Constructor +instanceKlass java/lang/reflect/Method +ciInstanceKlass java/lang/reflect/Executable 1 1 375 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 100 100 100 100 7 100 7 7 100 100 100 7 100 7 100 7 7 7 7 7 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1 +ciInstanceKlass java/lang/reflect/Method 1 1 343 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass java/lang/reflect/Constructor 1 1 327 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 7 100 100 7 7 100 100 100 100 100 7 7 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +instanceKlass sun/reflect/FieldAccessorImpl +instanceKlass sun/reflect/ConstructorAccessorImpl +instanceKlass sun/reflect/MethodAccessorImpl +ciInstanceKlass sun/reflect/MagicAccessorImpl 1 1 10 1 1 1 1 1 7 100 12 10 +instanceKlass sun/reflect/GeneratedMethodAccessor26 +instanceKlass sun/reflect/GeneratedMethodAccessor25 +instanceKlass sun/reflect/GeneratedMethodAccessor24 +instanceKlass sun/reflect/GeneratedMethodAccessor23 +instanceKlass sun/reflect/GeneratedMethodAccessor22 +instanceKlass sun/reflect/GeneratedMethodAccessor21 +instanceKlass sun/reflect/GeneratedMethodAccessor20 +instanceKlass sun/reflect/GeneratedMethodAccessor19 +instanceKlass sun/reflect/GeneratedMethodAccessor18 +instanceKlass sun/reflect/GeneratedMethodAccessor17 +instanceKlass sun/reflect/GeneratedMethodAccessor16 +instanceKlass sun/reflect/GeneratedMethodAccessor15 +instanceKlass sun/reflect/GeneratedMethodAccessor14 +instanceKlass sun/reflect/GeneratedMethodAccessor13 +instanceKlass sun/reflect/GeneratedMethodAccessor12 +instanceKlass sun/reflect/GeneratedMethodAccessor11 +instanceKlass sun/reflect/GeneratedMethodAccessor10 +instanceKlass sun/reflect/GeneratedMethodAccessor9 +instanceKlass sun/reflect/GeneratedMethodAccessor8 +instanceKlass sun/reflect/GeneratedMethodAccessor7 +instanceKlass sun/reflect/GeneratedMethodAccessor6 +instanceKlass sun/reflect/GeneratedMethodAccessor5 +instanceKlass sun/reflect/GeneratedMethodAccessor4 +instanceKlass sun/reflect/GeneratedMethodAccessor3 +instanceKlass sun/reflect/GeneratedMethodAccessor2 +instanceKlass sun/reflect/GeneratedMethodAccessor1 +instanceKlass sun/reflect/DelegatingMethodAccessorImpl +instanceKlass sun/reflect/NativeMethodAccessorImpl +ciInstanceKlass sun/reflect/MethodAccessorImpl 1 1 19 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 12 10 +instanceKlass sun/reflect/GeneratedConstructorAccessor14 +instanceKlass sun/reflect/GeneratedConstructorAccessor13 +instanceKlass sun/reflect/SerializationConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor12 +instanceKlass sun/reflect/GeneratedConstructorAccessor11 +instanceKlass sun/reflect/GeneratedConstructorAccessor10 +instanceKlass sun/reflect/GeneratedConstructorAccessor9 +instanceKlass sun/reflect/GeneratedConstructorAccessor8 +instanceKlass sun/reflect/GeneratedConstructorAccessor7 +instanceKlass sun/reflect/GeneratedConstructorAccessor6 +instanceKlass sun/reflect/GeneratedConstructorAccessor5 +instanceKlass sun/reflect/GeneratedConstructorAccessor4 +instanceKlass sun/reflect/GeneratedConstructorAccessor3 +instanceKlass sun/reflect/GeneratedConstructorAccessor2 +instanceKlass sun/reflect/BootstrapConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor1 +instanceKlass sun/reflect/DelegatingConstructorAccessorImpl +instanceKlass sun/reflect/NativeConstructorAccessorImpl +ciInstanceKlass sun/reflect/ConstructorAccessorImpl 1 1 21 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 12 10 +ciInstanceKlass sun/reflect/DelegatingClassLoader 1 1 10 1 1 1 1 7 100 1 12 10 +ciInstanceKlass sun/reflect/ConstantPool 1 1 103 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/reflect/UnsafeFieldAccessorImpl +ciInstanceKlass sun/reflect/FieldAccessorImpl 1 1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 10 +instanceKlass sun/reflect/UnsafeLongFieldAccessorImpl +instanceKlass sun/reflect/UnsafeBooleanFieldAccessorImpl +instanceKlass sun/reflect/UnsafeDoubleFieldAccessorImpl +instanceKlass sun/reflect/UnsafeIntegerFieldAccessorImpl +instanceKlass sun/reflect/UnsafeObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeFieldAccessorImpl 1 1 226 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/reflect/UnsafeFieldAccessorImpl unsafe Lsun/misc/Unsafe; sun/misc/Unsafe +instanceKlass sun/reflect/UnsafeStaticObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl 1 1 35 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +ciInstanceKlass sun/reflect/CallerSensitive 0 0 15 1 1 1 1 1 1 1 100 100 100 1 1 1 1 +instanceKlass java/lang/invoke/DelegatingMethodHandle +instanceKlass java/lang/invoke/BoundMethodHandle +instanceKlass java/lang/invoke/DirectMethodHandle +ciInstanceKlass java/lang/invoke/MethodHandle 1 1 435 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 7 100 100 7 7 7 100 7 7 7 7 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/invoke/MethodHandle FORM_OFFSET J 20 +staticfield java/lang/invoke/MethodHandle $assertionsDisabled Z 1 +instanceKlass java/lang/invoke/DirectMethodHandle$Special +instanceKlass java/lang/invoke/DirectMethodHandle$Accessor +ciInstanceKlass java/lang/invoke/DirectMethodHandle 1 1 689 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 100 7 100 100 100 7 100 7 100 100 7 7 100 7 7 100 7 7 100 7 7 7 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 1 1 1 1 +staticfield java/lang/invoke/DirectMethodHandle IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/DirectMethodHandle ACCESSOR_FORMS [Ljava/lang/invoke/LambdaForm; 132 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/DirectMethodHandle $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MemberName 1 1 639 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 7 7 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 100 7 7 7 7 7 100 7 7 100 100 100 100 7 100 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 +staticfield java/lang/invoke/MemberName $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodHandleNatives 1 1 424 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +staticfield java/lang/invoke/MethodHandleNatives COUNT_GWT Z 1 +staticfield java/lang/invoke/MethodHandleNatives $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/LambdaForm 1 1 964 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 8 100 100 100 100 7 7 100 100 100 7 100 100 100 100 100 100 100 100 7 7 7 100 7 7 100 100 100 7 100 7 100 100 7 7 7 7 7 100 100 7 7 7 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1 1 +staticfield java/lang/invoke/LambdaForm COMPILE_THRESHOLD I 0 +staticfield java/lang/invoke/LambdaForm INTERNED_ARGUMENTS [[Ljava/lang/invoke/LambdaForm$Name; 5 [[Ljava/lang/invoke/LambdaForm$Name; +staticfield java/lang/invoke/LambdaForm IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/LambdaForm LF_identityForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm LF_zeroForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm NF_identity [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm NF_zero [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm DEBUG_NAME_COUNTERS Ljava/util/HashMap; null +staticfield java/lang/invoke/LambdaForm TRACE_INTERPRETER Z 0 +staticfield java/lang/invoke/LambdaForm $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodType 1 1 588 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 7 100 100 100 7 100 100 7 100 7 100 100 100 100 100 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 +staticfield java/lang/invoke/MethodType internTable Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; java/lang/invoke/MethodType$ConcurrentWeakInternSet +staticfield java/lang/invoke/MethodType NO_PTYPES [Ljava/lang/Class; 0 [Ljava/lang/Class; +staticfield java/lang/invoke/MethodType objectOnlyTypes [Ljava/lang/invoke/MethodType; 20 [Ljava/lang/invoke/MethodType; +staticfield java/lang/invoke/MethodType serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/invoke/MethodType rtypeOffset J 12 +staticfield java/lang/invoke/MethodType ptypesOffset J 16 +staticfield java/lang/invoke/MethodType $assertionsDisabled Z 1 +ciInstanceKlass java/lang/BootstrapMethodError 0 0 35 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass java/lang/invoke/VolatileCallSite +instanceKlass java/lang/invoke/MutableCallSite +instanceKlass java/lang/invoke/ConstantCallSite +ciInstanceKlass java/lang/invoke/CallSite 1 1 308 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 100 100 100 7 100 7 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/invoke/CallSite GET_TARGET Ljava/lang/invoke/MethodHandle; java/lang/invoke/DirectMethodHandle +staticfield java/lang/invoke/CallSite THROW_UCS Ljava/lang/invoke/MethodHandle; java/lang/invoke/MethodHandleImpl$AsVarargsCollector +staticfield java/lang/invoke/CallSite TARGET_OFFSET J 12 +ciInstanceKlass java/lang/invoke/ConstantCallSite 1 1 39 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 1 1 12 12 12 12 12 12 9 9 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/MutableCallSite 0 0 54 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/VolatileCallSite 0 0 30 1 1 1 1 1 1 1 1 1 1 1 1 100 100 1 1 1 12 12 12 12 12 12 10 10 10 10 10 10 +instanceKlass java/lang/StringBuilder +instanceKlass java/lang/StringBuffer +ciInstanceKlass java/lang/AbstractStringBuilder 1 1 315 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 7 7 100 100 7 7 7 100 7 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/StringBuffer 1 1 368 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 7 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/StringBuffer serialPersistentFields [Ljava/io/ObjectStreamField; 3 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/StringBuilder 1 1 323 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass sun/misc/Unsafe 1 1 386 8 8 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 7 100 100 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/misc/Unsafe theUnsafe Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BYTE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_SHORT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_CHAR_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_INT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_LONG_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_FLOAT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_OBJECT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_BYTE_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_SHORT_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_CHAR_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_INT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_LONG_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_FLOAT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_OBJECT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ADDRESS_SIZE I 8 +instanceKlass com/sun/imageio/plugins/common/InputStreamAdapter +instanceKlass java/io/ObjectInputStream$PeekInputStream +instanceKlass java/io/ObjectInputStream$BlockDataInputStream +instanceKlass java/lang/ProcessBuilder$NullInputStream +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil$2 +instanceKlass org/tmatesoft/svn/core/internal/util/SVNLogInputStream +instanceKlass java/util/jar/JarVerifier$VerifierStream +instanceKlass org/apache/xerces/impl/XMLEntityManager$RewindableInputStream +instanceKlass java/io/SequenceInputStream +instanceKlass org/apache/commons/io/input/ClosedInputStream +instanceKlass sun/java2d/cmm/ProfileDeferralInfo +instanceKlass java/io/ObjectInputStream +instanceKlass java/util/zip/ZipFile$ZipFileInputStream +instanceKlass java/io/FilterInputStream +instanceKlass java/io/FileInputStream +instanceKlass java/io/ByteArrayInputStream +ciInstanceKlass java/io/InputStream 1 1 58 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 100 100 100 7 100 100 100 7 12 12 12 12 12 10 10 10 10 10 10 10 +instanceKlass sun/security/util/DerInputBuffer +ciInstanceKlass java/io/ByteArrayInputStream 1 1 59 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 7 100 7 1 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 +instanceKlass sun/awt/shell/ShellFolder +ciInstanceKlass java/io/File 1 1 575 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 7 7 7 7 7 100 7 7 7 100 100 100 100 100 7 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 +staticfield java/io/File fs Ljava/io/FileSystem; java/io/WinNTFileSystem +staticfield java/io/File separatorChar C 92 +staticfield java/io/File separator Ljava/lang/String; "\" +staticfield java/io/File pathSeparatorChar C 59 +staticfield java/io/File pathSeparator Ljava/lang/String; ";" +staticfield java/io/File PATH_OFFSET J 16 +staticfield java/io/File PREFIX_LENGTH_OFFSET J 12 +staticfield java/io/File UNSAFE Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield java/io/File $assertionsDisabled Z 1 +instanceKlass com/mathworks/eps/notificationclient/api/classloader/DirectLoadURLClassLoader +instanceKlass com/mathworks/jmi/ClassLoaderManager$StandaloneURLClassLoader +instanceKlass com/mathworks/jmi/CustomURLClassLoader +instanceKlass sun/misc/Launcher$ExtClassLoader +instanceKlass sun/misc/Launcher$AppClassLoader +ciInstanceKlass java/net/URLClassLoader 1 1 518 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 100 100 7 7 7 100 100 7 100 100 100 7 100 7 100 7 100 7 7 7 7 7 100 100 100 7 7 100 100 100 7 7 7 7 100 7 100 100 100 7 7 7 100 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 +ciInstanceKlass java/net/URL 1 1 547 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 7 100 7 7 100 100 100 100 100 7 7 100 7 7 100 100 100 100 7 100 100 7 100 7 7 7 100 100 7 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/net/URL serialPersistentFields [Ljava/io/ObjectStreamField; 7 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/util/jar/Manifest 1 1 227 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 7 7 100 7 7 100 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass sun/misc/Launcher 1 1 215 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 100 100 100 100 7 100 7 100 7 7 100 7 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 +ciInstanceKlass sun/misc/Launcher$AppClassLoader 1 1 198 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 7 100 7 100 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield sun/misc/Launcher$AppClassLoader $assertionsDisabled Z 1 +ciInstanceKlass sun/misc/Launcher$ExtClassLoader 1 1 222 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 7 7 100 100 7 7 100 100 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +ciInstanceKlass java/security/CodeSource 1 1 321 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 100 100 100 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +ciInstanceKlass java/lang/StackTraceElement 1 1 95 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/nio/DoubleBuffer +instanceKlass java/nio/FloatBuffer +instanceKlass java/nio/ShortBuffer +instanceKlass java/nio/IntBuffer +instanceKlass java/nio/LongBuffer +instanceKlass java/nio/CharBuffer +instanceKlass java/nio/ByteBuffer +ciInstanceKlass java/nio/Buffer 1 1 100 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 7 100 7 100 100 100 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/Boolean 1 1 107 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 7 100 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Boolean TRUE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean FALSE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Character 1 1 456 3 3 3 3 3 3 3 3 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 5 0 100 100 7 7 100 100 100 7 100 7 100 100 100 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 1 1 +staticfield java/lang/Character TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Character $assertionsDisabled Z 1 +instanceKlass com/google/gson/BufferedImageConverter$OptimizedImageElementNumber +instanceKlass com/sun/jna/IntegerType +instanceKlass java/math/BigDecimal +instanceKlass com/google/gson/internal/LazilyParsedNumber +instanceKlass java/math/BigInteger +instanceKlass com/mathworks/util/types/UnsignedNumber +instanceKlass java/util/concurrent/atomic/AtomicLong +instanceKlass java/util/concurrent/atomic/AtomicInteger +instanceKlass java/lang/Long +instanceKlass java/lang/Integer +instanceKlass java/lang/Short +instanceKlass java/lang/Byte +instanceKlass java/lang/Double +instanceKlass java/lang/Float +ciInstanceKlass java/lang/Number 1 1 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 12 12 10 10 +ciInstanceKlass java/lang/Float 1 1 166 3 3 3 4 4 4 4 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 4 4 5 0 7 100 100 7 100 7 7 100 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Float TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Double 1 1 220 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 100 7 100 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Double TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Byte 1 1 150 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 7 7 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Byte TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Short 1 1 156 3 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Short TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Integer 1 1 306 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 100 7 7 100 100 7 7 100 7 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Integer TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Integer digits [C 36 +staticfield java/lang/Integer DigitTens [C 100 +staticfield java/lang/Integer DigitOnes [C 100 +staticfield java/lang/Integer sizeTable [I 10 +ciInstanceKlass java/lang/Long 1 1 353 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 7 7 100 100 7 7 7 7 100 7 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Long TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/NullPointerException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass java/lang/ArithmeticException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/Math 1 1 278 3 3 3 3 3 3 4 4 4 4 4 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 100 100 7 7 7 7 100 7 7 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Math $assertionsDisabled Z 1 +instanceKlass java/net/SocketInputStream +ciInstanceKlass java/io/FileInputStream 1 1 148 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 100 100 7 100 7 100 100 7 100 7 7 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/util/zip/CheckedInputStream +instanceKlass java/io/DataInputStream +instanceKlass sun/awt/image/PNGFilterInputStream +instanceKlass sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream +instanceKlass java/io/PushbackInputStream +instanceKlass java/util/jar/Manifest$FastInputStream +instanceKlass java/util/zip/InflaterInputStream +instanceKlass java/io/BufferedInputStream +ciInstanceKlass java/io/FilterInputStream 1 1 48 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 1 1 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/io/BufferedInputStream 1 1 129 3 3 8 8 8 8 8 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 7 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/io/BufferedInputStream bufUpdater Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl +ciInstanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater 1 1 66 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 10 10 10 10 10 11 11 1 +ciInstanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl 1 1 245 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 100 100 7 100 7 7 7 100 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl U Lsun/misc/Unsafe; sun/misc/Unsafe +instanceKlass java/lang/IllegalThreadStateException +instanceKlass org/jdom/IllegalNameException +instanceKlass org/jdom/IllegalDataException +instanceKlass org/jdom/IllegalAddException +instanceKlass java/util/regex/PatternSyntaxException +instanceKlass java/util/IllegalFormatException +instanceKlass java/nio/file/InvalidPathException +instanceKlass java/lang/NumberFormatException +ciInstanceKlass java/lang/IllegalArgumentException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +instanceKlass java/util/jar/JarEntry +ciInstanceKlass java/util/zip/ZipEntry 1 1 223 3 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 100 7 100 100 100 100 7 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry +instanceKlass java/util/jar/JarFile$JarFileEntry +ciInstanceKlass java/util/jar/JarEntry 1 1 44 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 1 1 1 1 1 1 12 12 12 12 12 12 9 9 9 10 10 10 10 10 +instanceKlass java/io/InterruptedIOException +instanceKlass javax/net/ssl/SSLException +instanceKlass org/apache/commons/httpclient/HttpException +instanceKlass java/util/InvalidPropertiesFormatException +instanceKlass java/nio/file/FileSystemException +instanceKlass java/net/UnknownHostException +instanceKlass java/net/SocketException +instanceKlass org/apache/commons/io/FileExistsException +instanceKlass java/io/ObjectStreamException +instanceKlass java/io/CharConversionException +instanceKlass org/apache/xerces/util/URI$MalformedURIException +instanceKlass com/google/gson/stream/MalformedJsonException +instanceKlass java/io/EOFException +instanceKlass java/net/MalformedURLException +instanceKlass java/io/UnsupportedEncodingException +instanceKlass java/io/FileNotFoundException +ciInstanceKlass java/io/IOException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/util/zip/Inflater 1 1 150 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 100 100 100 7 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/util/zip/Inflater defaultBuf [B 0 +staticfield java/util/zip/Inflater $assertionsDisabled Z 1 +ciInstanceKlass java/util/zip/ZStreamRef 1 1 17 1 1 1 1 1 1 1 1 1 1 7 7 12 12 9 10 +instanceKlass java/util/zip/ZipInputStream +instanceKlass java/util/zip/ZipFile$ZipFileInflaterInputStream +ciInstanceKlass java/util/zip/InflaterInputStream 1 1 154 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 7 7 100 100 100 100 100 100 7 7 100 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/util/zip/ZipFile$ZipFileInflaterInputStream 1 1 109 3 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 7 7 7 7 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 11 1 1 +ciInstanceKlass java/util/jar/JarVerifier 1 1 549 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 7 7 100 7 7 100 100 7 100 100 7 7 7 100 7 100 100 7 100 7 7 100 7 100 100 7 100 7 100 100 7 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 +staticfield java/util/jar/JarVerifier debug Lsun/security/util/Debug; null +ciInstanceKlass sun/security/util/ManifestEntryVerifier 1 1 282 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 100 7 100 100 7 100 7 7 7 7 7 7 7 100 7 7 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 +staticfield sun/security/util/ManifestEntryVerifier debug Lsun/security/util/Debug; null +staticfield sun/security/util/ManifestEntryVerifier hexc [C 16 +instanceKlass java/lang/StringIndexOutOfBoundsException +instanceKlass java/lang/ArrayIndexOutOfBoundsException +ciInstanceKlass java/lang/IndexOutOfBoundsException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass java/lang/ArrayIndexOutOfBoundsException 1 1 35 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 1 1 12 12 12 12 12 10 10 10 10 10 10 +instanceKlass java/util/jar/JarInputStream +ciInstanceKlass java/util/zip/ZipInputStream 1 1 291 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 100 100 100 7 7 100 100 100 100 100 100 100 100 7 7 7 7 7 100 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/util/jar/JarInputStream 1 1 148 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 7 100 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/io/PushbackInputStream 1 1 90 3 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 7 100 100 100 7 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/util/calendar/ZoneInfoFile$Checksum +ciInstanceKlass java/util/zip/CRC32 1 1 89 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 7 100 100 100 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/util/zip/CRC32 $assertionsDisabled Z 1 +ciInstanceKlass java/util/zip/ZipUtils 1 1 116 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 7 100 7 7 7 7 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass javax/swing/plaf/ColorUIResource +instanceKlass java/awt/SystemColor +ciInstanceKlass java/awt/Color 1 1 326 3 4 4 4 4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 6 0 6 0 100 7 7 7 100 7 100 100 100 100 7 7 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/awt/Color white Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color WHITE Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color lightGray Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color LIGHT_GRAY Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color gray Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color GRAY Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color darkGray Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color DARK_GRAY Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color black Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color BLACK Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color red Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color RED Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color pink Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color PINK Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color orange Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color ORANGE Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color yellow Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color YELLOW Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color green Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color GREEN Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color magenta Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color MAGENTA Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color cyan Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color CYAN Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color blue Ljava/awt/Color; java/awt/Color +staticfield java/awt/Color BLUE Ljava/awt/Color; java/awt/Color +instanceKlass java/awt/image/ComponentColorModel +instanceKlass java/awt/image/IndexColorModel +instanceKlass java/awt/image/PackedColorModel +ciInstanceKlass java/awt/image/ColorModel 1 1 409 3 3 3 3 3 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 6 0 6 0 100 7 100 100 100 7 100 7 7 7 100 100 100 7 100 100 100 7 100 100 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 +ciInstanceKlass java/awt/image/DirectColorModel 1 1 346 3 4 4 4 4 4 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 7 7 7 7 7 100 7 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/awt/color/ICC_ColorSpace +ciInstanceKlass java/awt/color/ColorSpace 1 1 219 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 100 7 7 100 100 7 100 100 100 100 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 +instanceKlass java/awt/color/ICC_ProfileRGB +ciInstanceKlass java/awt/color/ICC_Profile 1 1 686 3 3 3 3 3 3 3 3 3 3 4 4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 100 100 100 100 7 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 +ciInstanceKlass java/awt/color/ICC_ColorSpace 1 1 138 3 4 4 4 4 4 4 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 7 7 7 100 100 100 100 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass java/awt/image/IndexColorModel 1 1 375 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 100 7 100 7 100 100 100 7 100 7 7 100 100 7 100 100 100 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +instanceKlass sun/awt/image/FileImageSource +instanceKlass sun/awt/image/ByteArrayImageSource +instanceKlass sun/awt/image/URLImageSource +ciInstanceKlass sun/awt/image/InputStreamImageSource 1 1 268 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 7 100 7 100 100 100 100 7 100 7 7 7 100 7 100 100 7 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass sun/awt/image/URLImageSource 1 1 156 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 100 100 100 7 7 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/awt/image/ImageConsumer 1 0 36 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 100 100 1 1 1 1 1 +ciInstanceKlass sun/awt/image/ImageRepresentation 1 1 437 3 3 3 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 7 7 7 7 100 100 7 7 7 7 100 100 100 7 7 7 100 100 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass sun/awt/image/ImageConsumerQueue 1 1 97 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 +ciInstanceKlass sun/awt/image/ImageFetcher 1 1 206 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 100 100 100 7 100 7 7 7 7 100 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +instanceKlass sun/awt/image/GifImageDecoder +instanceKlass sun/awt/image/PNGImageDecoder +ciInstanceKlass sun/awt/image/ImageDecoder 1 1 144 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 7 7 100 7 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 +ciInstanceKlass sun/awt/image/PNGImageDecoder 1 1 442 3 3 3 4 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 100 100 7 7 7 7 100 7 100 7 7 100 7 100 7 7 7 7 7 100 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +staticfield sun/awt/image/PNGImageDecoder startingRow [B 8 +staticfield sun/awt/image/PNGImageDecoder startingCol [B 8 +staticfield sun/awt/image/PNGImageDecoder rowIncrement [B 8 +staticfield sun/awt/image/PNGImageDecoder colIncrement [B 8 +staticfield sun/awt/image/PNGImageDecoder blockHeight [B 8 +staticfield sun/awt/image/PNGImageDecoder blockWidth [B 8 +staticfield sun/awt/image/PNGImageDecoder signature [B 8 +staticfield sun/awt/image/PNGImageDecoder crc_table [I 256 +ciInstanceKlass sun/awt/image/PNGFilterInputStream 1 1 71 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 7 7 7 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 +ciInstanceKlass sun/awt/image/PNGImageDecoder$Chromaticities 1 1 67 4 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 7 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 1 +instanceKlass java/util/GregorianCalendar +ciInstanceKlass java/util/Calendar 1 1 738 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 7 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 100 7 100 7 100 7 100 100 100 100 100 7 100 100 100 100 100 7 100 100 100 7 7 100 100 7 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1 1 1 1 +staticfield java/util/Calendar cachedLocaleData Ljava/util/concurrent/ConcurrentMap; java/util/concurrent/ConcurrentHashMap +staticfield java/util/Calendar FIELD_NAME [Ljava/lang/String; 17 [Ljava/lang/String; +staticfield java/util/Calendar $assertionsDisabled Z 1 +ciInstanceKlass java/util/GregorianCalendar 1 1 745 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 100 100 100 100 7 100 100 100 100 100 100 100 100 7 100 100 100 100 7 7 100 7 100 100 7 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/util/GregorianCalendar MONTH_LENGTH [I 12 +staticfield java/util/GregorianCalendar LEAP_MONTH_LENGTH [I 12 +staticfield java/util/GregorianCalendar MIN_VALUES [I 17 +staticfield java/util/GregorianCalendar LEAST_MAX_VALUES [I 17 +staticfield java/util/GregorianCalendar MAX_VALUES [I 17 +staticfield java/util/GregorianCalendar gcal Lsun/util/calendar/Gregorian; sun/util/calendar/Gregorian +staticfield java/util/GregorianCalendar $assertionsDisabled Z 1 +ciInstanceKlass sun/awt/image/ByteArrayImageSource 1 1 40 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 1 1 1 1 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 +ciInstanceKlass sun/awt/image/GifImageDecoder 1 1 277 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 6 0 100 100 7 100 7 100 7 7 100 100 7 7 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass sun/awt/image/BufImgSurfaceData$ICMColorData 1 1 24 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 12 12 12 9 10 10 1 +ciInstanceKlass java/util/zip/DataFormatException 0 0 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/sql/Timestamp +instanceKlass java/sql/Date +instanceKlass java/sql/Time +ciInstanceKlass java/util/Date 1 1 478 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 5 0 100 100 100 100 100 7 100 100 100 100 100 7 7 7 7 100 100 100 100 7 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/util/Date gcal Lsun/util/calendar/BaseCalendar; sun/util/calendar/Gregorian +staticfield java/util/Date wtb [Ljava/lang/String; 32 [Ljava/lang/String; +staticfield java/util/Date ttb [I 32 +ciInstanceKlass java/awt/image/ReplicateScaleFilter 1 1 115 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 7 7 7 100 100 100 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass sun/java2d/cmm/CMSManager 1 1 58 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 100 100 100 1 1 1 1 1 12 12 12 12 12 12 9 10 10 10 10 10 10 10 1 +compile sun/awt/image/PNGImageDecoder produceImage ()V -1 4 inline 48 0 -1 sun/awt/image/PNGImageDecoder produceImage ()V 1 23 java/io/BufferedInputStream read ()I 2 29 java/io/BufferedInputStream getBufIfOpen ()[B 1 62 java/util/zip/Inflater ()V 2 2 java/util/zip/Inflater (Z)V 3 1 java/lang/Object ()V 3 20 java/util/zip/ZStreamRef (J)V 4 1 java/lang/Object ()V 1 65 java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;)V 2 6 java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;I)V 3 2 java/io/FilterInputStream (Ljava/io/InputStream;)V 4 1 java/io/InputStream ()V 5 1 java/lang/Object ()V 1 68 java/io/BufferedInputStream (Ljava/io/InputStream;)V 2 5 java/io/BufferedInputStream (Ljava/io/InputStream;I)V 3 2 java/io/FilterInputStream (Ljava/io/InputStream;)V 4 1 java/io/InputStream ()V 5 1 java/lang/Object ()V 1 73 sun/awt/image/PNGImageDecoder getData ()Z 1 390 java/awt/image/IndexColorModel (II[B[B[B[B)V 2 15 java/awt/image/ColorModel getDefaultTransferType (I)I 2 69 java/awt/image/IndexColorModel setRGBs (I[B[B[B[B)V 2 73 java/awt/image/IndexColorModel calculatePixelMask ()V 1 565 java/awt/image/ColorModel getRGBdefault ()Ljava/awt/image/ColorModel; 1 599 sun/awt/image/ImageDecoder setDimensions (II)I 1 608 sun/awt/image/ImageDecoder setColorModel (Ljava/awt/image/ColorModel;)I 1 631 sun/awt/image/ImageDecoder setHints (I)I 1 636 sun/awt/image/ImageDecoder headerComplete ()V 1 871 java/io/BufferedInputStream read ()I 2 29 java/io/BufferedInputStream getBufIfOpen ()[B 1 896 java/io/BufferedInputStream read ([BII)I 2 1 java/io/BufferedInputStream getBufIfOpen ()[B 2 49 java/io/BufferedInputStream read1 ([BII)I 3 18 java/io/BufferedInputStream getBufIfOpen ()[B 3 33 java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 3 39 java/util/jar/JarInputStream read ([BII)I 4 11 java/util/zip/ZipInputStream read ([BII)I 5 1 java/util/zip/ZipInputStream ensureOpen ()V 5 117 java/util/zip/CRC32 update ([BII)V 5 226 java/util/zip/CRC32 getValue ()J 3 44 java/io/BufferedInputStream fill ()V 4 1 java/io/BufferedInputStream getBufIfOpen ()[B 4 199 java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 3 80 java/io/BufferedInputStream getBufIfOpen ()[B 1 1728 sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 1 1817 sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 1 1851 sun/awt/image/ImageDecoder imageComplete (IZ)I 1 1856 sun/awt/image/ImageDecoder close ()V diff --git a/downloaded/replay_pid23120.log b/downloaded/replay_pid23120.log new file mode 100644 index 0000000..225b77a --- /dev/null +++ b/downloaded/replay_pid23120.log @@ -0,0 +1,7323 @@ +JvmtiExport can_access_local_variables 0 +JvmtiExport can_hotswap_or_post_breakpoint 0 +JvmtiExport can_post_on_exceptions 0 +# 255 ciObject found +ciMethod org/jdom/Text getText ()Ljava/lang/String; 25905 1 3238 0 0 +ciMethod org/jdom/Text normalizeString (Ljava/lang/String;)Ljava/lang/String; 0 0 1 0 -1 +ciMethod org/jdom/Element getAdditionalNamespaces ()Ljava/util/List; 4105 1 10237 0 0 +ciMethod org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/String; 12377 1 10137 0 0 +ciMethod org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;Ljava/lang/String;)Ljava/lang/String; 5129 1 9223 0 0 +ciMethod org/jdom/Element getAttributes ()Ljava/util/List; 66145 1 8268 0 0 +ciMethod org/jdom/Element getContent ()Ljava/util/List; 81193 1 10149 0 0 +ciMethod org/jdom/Element getName ()Ljava/lang/String; 36745 1 4593 0 0 +ciMethod org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 25161 1 3145 0 0 +ciMethod org/jdom/EntityRef getValue ()Ljava/lang/String; 0 0 1 0 -1 +ciMethod org/jdom/ContentList get (I)Ljava/lang/Object; 117585 1 22873 0 160 +ciMethod org/jdom/ContentList size ()I 36873 1 4609 0 0 +ciMethod org/jdom/AttributeList get (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/Object; 4097 1 9202 0 0 +ciMethod org/jdom/AttributeList indexOf (Ljava/lang/String;Lorg/jdom/Namespace;)I 90705 1 19872 0 0 +ciMethod org/jdom/AttributeList size ()I 81857 1 10232 0 0 +ciMethod org/jdom/Namespace getPrefix ()Ljava/lang/String; 25105 1 3138 0 0 +ciMethod org/jdom/Namespace getURI ()Ljava/lang/String; 72441 1 9055 0 0 +ciMethodData java/io/StringWriter write (Ljava/lang/String;)V 2 25466 orig 264 136 98 31 106 0 0 0 0 248 201 62 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 209 11 3 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 6 0x50005 0x11a5 0x6b4b6a70 0x4fcc 0x6b4b6a70 0x1 oops 2 2 java/lang/StringBuffer 4 java/lang/StringBuffer +ciMethodData java/util/Vector lastIndexOf (Ljava/lang/Object;)I 2 8881 orig 264 136 98 31 106 0 0 0 0 48 196 33 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 17 244 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 8 0 0 0 0 0 data 6 0x80005 0x0 0x10ab873d0 0x1e87 0x0 0x0 oops 1 2 java/util/Stack +ciMethodData java/util/Vector lastIndexOf (Ljava/lang/Object;I)I 2 19891 orig 264 136 98 31 106 0 0 0 0 32 197 33 104 0 0 0 0 112 3 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 241 252 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 18 0 2 0 0 0 24 2 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 67 0x50007 0x1f8f 0x100 0x0 0x100002 0x0 0x140005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x200005 0x0 0x0 0x0 0x0 0x0 0x230005 0x0 0x0 0x0 0x0 0x0 0x260002 0x0 0x2b0007 0x1f89 0x90 0x0 0x310007 0x0 0x58 0x0 0x3a0007 0x0 0x20 0x0 0x420003 0x0 0xffffffffffffffc0 0x450003 0x0 0xa0 0x4b0007 0x1f8a 0x88 0x0 0x550005 0x0 0x0 0x0 0x0 0x0 0x580007 0x0 0x20 0x0 0x600003 0x0 0xffffffffffffff90 oops 0 +ciMethod org/jdom/output/XMLOutputter endsWithWhite (Ljava/lang/String;)Z 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter escapeElementEntities (Ljava/lang/String;)Ljava/lang/String; 66025 659097 12221 0 864 +ciMethod org/jdom/output/XMLOutputter indent (Ljava/io/Writer;I)V 41681 159161 12871 0 2880 +ciMethod org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 3345 8193 10865 0 608 +ciMethod org/jdom/output/XMLOutputter isWhitespace (C)Z 4097 1 27308 0 0 +ciMethod org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 24681 1 12706 0 1920 +ciMethod org/jdom/output/XMLOutputter nextNonText (Ljava/util/List;I)I 4097 3553 14914 0 544 +ciMethod org/jdom/output/XMLOutputter printAdditionalNamespaces (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 80913 76817 19836 0 0 +ciMethod org/jdom/output/XMLOutputter printAttributes (Ljava/io/Writer;Ljava/util/List;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 80913 76817 19837 0 0 +ciMethod org/jdom/output/XMLOutputter printCDATA (Ljava/io/Writer;Lorg/jdom/CDATA;)V 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter printComment (Ljava/io/Writer;Lorg/jdom/Comment;)V 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter printContentRange (Ljava/io/Writer;Ljava/util/List;IIILorg/jdom/output/XMLOutputter$NamespaceStack;)V 19177 167009 4792 0 0 +ciMethod org/jdom/output/XMLOutputter printElement (Ljava/io/Writer;Lorg/jdom/Element;ILorg/jdom/output/XMLOutputter$NamespaceStack;)V 82105 77993 19868 0 0 +ciMethod org/jdom/output/XMLOutputter printElementNamespace (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 92201 1 19897 0 0 +ciMethod org/jdom/output/XMLOutputter printEntityRef (Ljava/io/Writer;Lorg/jdom/EntityRef;)V 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter printNamespace (Ljava/io/Writer;Lorg/jdom/Namespace;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter printProcessingInstruction (Ljava/io/Writer;Lorg/jdom/ProcessingInstruction;)V 0 0 1 0 -1 +ciMethod org/jdom/output/XMLOutputter printQualifiedName (Ljava/io/Writer;Lorg/jdom/Element;)V 35569 1 19259 0 1952 +ciMethod org/jdom/output/XMLOutputter printString (Ljava/io/Writer;Ljava/lang/String;)V 60473 1 13399 0 0 +ciMethod org/jdom/output/XMLOutputter printTextRange (Ljava/io/Writer;Ljava/util/List;II)V 4097 4089 13393 0 0 +ciMethod org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 4097 5449 17681 0 1152 +ciMethod org/jdom/output/XMLOutputter skipTrailingWhite (Ljava/util/List;I)I 4097 4089 13393 0 0 +ciMethod org/jdom/output/XMLOutputter startsWithWhite (Ljava/lang/String;)Z 0 0 1 0 -1 +ciMethodData org/jdom/ContentList get (I)Ljava/lang/Object; 2 22873 orig 264 136 98 31 106 0 0 0 0 176 183 85 84 0 0 0 0 160 2 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 121 255 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 80 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 42 0x10007 0x0 0x40 0x1fef 0x90007 0x1fef 0x130 0x0 0x160002 0x0 0x1a0005 0x0 0x0 0x0 0x0 0x0 0x1f0005 0x0 0x0 0x0 0x0 0x0 0x230005 0x0 0x0 0x0 0x0 0x0 0x260005 0x0 0x0 0x0 0x0 0x0 0x290005 0x0 0x0 0x0 0x0 0x0 0x2c0002 0x0 oops 0 +ciMethod org/jdom/output/NamespaceStack getURI (Ljava/lang/String;)Ljava/lang/String; 4097 1 8878 0 0 +ciMethod org/jdom/output/NamespaceStack pop ()Ljava/lang/String; 0 0 1 0 -1 +ciMethod org/jdom/output/NamespaceStack size ()I 4097 1 14317 0 480 +ciMethod org/jdom/output/EscapeStrategy shouldEscape (C)Z 0 0 1 0 -1 +ciMethod org/jdom/output/Format$DefaultEscapeStrategy shouldEscape (C)Z 4097 1 19983 0 64 +ciMethodData org/jdom/output/XMLOutputter isWhitespace (C)Z 2 27308 orig 264 136 98 31 106 0 0 0 0 144 19 160 88 0 0 0 0 160 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 97 69 3 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 128 0 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 16 0x30007 0x497c 0x80 0x1fbe 0x90007 0xcc5 0x60 0x1375 0xf0007 0x0 0x40 0x1376 0x150007 0x1376 0x20 0x0 oops 0 +ciMethodData org/jdom/output/Format$DefaultEscapeStrategy shouldEscape (C)Z 2 19983 orig 264 136 98 31 106 0 0 0 0 248 241 160 88 0 0 0 0 24 3 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 121 96 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 19 0 2 0 0 0 200 1 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 57 0x60007 0x0 0x20 0x4c0d 0x110007 0x0 0x40 0x0 0x180007 0x0 0x20 0x0 0x250007 0x0 0x40 0x0 0x2b0007 0x0 0x20 0x0 0x360007 0x0 0x128 0x0 0x3d0007 0x0 0x108 0x0 0x530002 0x0 0x560004 0x0 0x0 0x0 0x0 0x0 0x570005 0x0 0x0 0x0 0x0 0x0 0x5a0004 0x0 0x0 0x0 0x0 0x0 0x5f0005 0x0 0x0 0x0 0x0 0x0 0x660003 0x0 0x18 oops 0 +ciMethodData org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 2 29870 orig 264 136 98 31 106 0 0 0 0 208 18 160 88 0 0 0 0 200 3 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 121 70 1 0 113 133 3 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 31 0 2 0 0 0 120 2 0 0 255 255 255 255 4 0 3 0 0 0 0 0 data 79 0x30004 0xffffffffffffd732 0x109ff0e40 0x683 0xf7bce430 0x209 0x60007 0x28cc 0x68 0x0 0xa0004 0x0 0x0 0x0 0x0 0x0 0xe0003 0x0 0x130 0x120004 0xfffffffffffff60f 0x109ff0e40 0x1f3c 0xf7bce430 0x209 0x150007 0x9f1 0x98 0x1f3b 0x190004 0x0 0x109ff0e40 0x1f37 0x0 0x0 0x1c0005 0x0 0x109ff0e40 0x1f39 0x0 0x0 0x200003 0x1f38 0x68 0x240004 0xfffffffffffff60f 0xf7bce430 0x209 0x0 0x0 0x270007 0x9f1 0x20 0x0 0x300003 0x1f36 0x78 0x350005 0x1525 0x66053380 0x5194 0x0 0x0 0x380002 0x66b4 0x3b0007 0x5489 0x20 0x1312 0x450005 0x1787 0x66053380 0x5b83 0x0 0x0 0x480007 0x66ba 0xffffffffffffff70 0xc73 oops 9 2 org/jdom/Text 4 org/jdom/Element 21 org/jdom/Text 23 org/jdom/Element 31 org/jdom/Text 37 org/jdom/Text 46 org/jdom/Element 59 java/lang/String 71 java/lang/String +ciMethodData org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 2 25530 orig 264 136 98 31 106 0 0 0 0 64 81 160 88 0 0 0 0 160 2 0 0 176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 2 0 0 137 24 2 0 137 8 3 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 18 0 2 0 0 0 72 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 41 0x10007 0x430b 0x20 0x0 0x90005 0x0 0xf7bceda0 0x4311 0x0 0x0 0x1a0007 0x0 0xd8 0x4301 0x270007 0x0 0xb8 0x4301 0x340007 0x0 0xb8 0x4303 0x370003 0x4303 0x78 0x3d0005 0x0 0xf7bceda0 0x58e4 0x0 0x0 0x420002 0x5908 0x450007 0x20e2 0x20 0x399d 0x500007 0x5908 0xffffffffffffffa0 0x9a2 oops 2 6 org/jdom/ContentList 27 org/jdom/ContentList +ciMethodData org/jdom/output/NamespaceStack size ()I 2 14317 orig 264 136 98 31 106 0 0 0 0 16 105 160 88 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 105 175 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 6 0x40005 0x0 0x10ab873d0 0x38e3 0x0 0x0 oops 1 2 java/util/Stack +ciMethodData org/jdom/output/XMLOutputter printQualifiedName (Ljava/io/Writer;Lorg/jdom/Element;)V 2 19259 orig 264 136 98 31 106 0 0 0 0 208 70 160 88 0 0 0 0 160 3 0 0 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 233 206 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 72 2 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 73 0x10005 0x0 0xf7bce430 0x39c8 0x0 0x0 0x40005 0x3a1b 0x0 0x0 0x0 0x0 0x70005 0x3a17 0x0 0x0 0x0 0x0 0xa0007 0x0 0x98 0x3a04 0xf0005 0x0 0xf7bce430 0x3a05 0x0 0x0 0x120005 0x0 0xf7bcecf0 0x3a10 0x0 0x0 0x150003 0x3a12 0x138 0x1a0005 0x0 0x0 0x0 0x0 0x0 0x1d0005 0x0 0x0 0x0 0x0 0x0 0x200005 0x0 0x0 0x0 0x0 0x0 0x260005 0x0 0x0 0x0 0x0 0x0 0x2b0005 0x0 0x0 0x0 0x0 0x0 0x2e0005 0x0 0x0 0x0 0x0 0x0 oops 3 2 org/jdom/Element 24 org/jdom/Element 30 java/io/StringWriter +ciMethodData org/jdom/output/XMLOutputter nextNonText (Ljava/util/List;I)I 2 18536 orig 264 136 98 31 106 0 0 0 0 72 23 160 88 0 0 0 0 168 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 17 194 1 0 97 53 2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 14 0 2 0 0 0 88 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 43 0x10007 0x383f 0x20 0x0 0x90005 0x0 0xf7bceda0 0x3836 0x0 0x0 0xf0003 0x3851 0xe8 0x140005 0x0 0xf7bceda0 0x30e0 0x0 0x0 0x1d0004 0xffffffffffffe1d6 0xf7bce430 0x4bb 0x109ff0e40 0x138e 0x200007 0x138f 0x70 0x1e25 0x250004 0xffffffffffffe1dc 0xf7bce430 0x4bb 0x0 0x0 0x280007 0x0 0x20 0x1e22 0x320007 0x30f4 0xffffffffffffff30 0x1ada oops 5 6 org/jdom/ContentList 15 org/jdom/ContentList 21 org/jdom/Element 23 org/jdom/Text 31 org/jdom/Element +ciMethodData org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 2 12706 orig 264 136 98 31 106 0 0 0 0 56 22 160 88 0 0 0 0 160 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 169 44 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 80 0 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 10 0x70007 0x0 0x50 0x258f 0x120005 0x0 0xf7bcecf0 0x2597 0x0 0x0 oops 1 6 java/io/StringWriter +ciMethodData org/jdom/output/XMLOutputter indent (Ljava/io/Writer;I)V 2 42139 orig 264 136 98 31 106 0 0 0 0 176 17 160 88 0 0 0 0 48 2 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 194 5 0 0 105 239 0 0 33 183 2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 11 0 2 0 0 0 216 0 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 27 0x70007 0x0 0x70 0x1de6 0x130005 0x1df0 0x0 0x0 0x0 0x0 0x160007 0x1e05 0x20 0x0 0x1c0003 0x1e02 0x48 0x270005 0x0 0xf7bcecf0 0x56cd 0x0 0x0 0x2f0007 0x56f3 0xffffffffffffffd0 0x1dd7 oops 1 19 java/io/StringWriter +ciMethodData org/jdom/output/XMLOutputter printElement (Ljava/io/Writer;Lorg/jdom/Element;ILorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 19868 orig 264 136 98 31 106 0 0 0 0 32 64 160 88 0 0 0 0 208 6 0 0 208 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 41 44 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 50 0 2 0 0 0 104 5 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 173 0x10005 0x0 0xf7bce430 0x2583 0x0 0x0 0x70005 0x0 0xf7bce430 0x25a8 0x0 0x0 0x110007 0x0 0x50 0x258f 0x1a0005 0x0 0xf7bce430 0x2599 0x0 0x0 0x290005 0x2572 0x0 0x0 0x0 0x0 0x2c0007 0x2572 0x38 0x0 0x370003 0x0 0x68 0x3e0005 0x2571 0x0 0x0 0x0 0x0 0x410007 0x2575 0x20 0x0 0x4e0005 0x0 0xf7bcecf0 0x2576 0x0 0x0 0x540002 0x2597 0x590005 0x0 0xf7bce500 0x25ad 0x0 0x0 0x630002 0x259f 0x6b0002 0x256d 0x700007 0x0 0x50 0x2570 0x7a0005 0x0 0xf7bce130 0x256c 0x0 0x0 0x810002 0x2544 0x880005 0x0 0xf7bceda0 0x2524 0x0 0x0 0x930007 0x210c 0x110 0x448 0x9d0007 0x448 0xa8 0x0 0xa30005 0x0 0x0 0x0 0x0 0x0 0xa90002 0x0 0xaf0005 0x0 0x0 0x0 0x0 0x0 0xb20003 0x0 0x1e0 0xb80005 0x0 0xf7bcecf0 0x448 0x0 0x0 0xbb0003 0x448 0x198 0xc10005 0x0 0xf7bcecf0 0x210a 0x0 0x0 0xc80002 0x213d 0xcd0007 0x17a3 0x78 0x9b7 0xd20002 0x9b7 0xe20002 0x9b9 0xe70002 0x9b8 0xed0002 0x9b9 0xf00003 0x9bb 0x28 0xfb0002 0x17a2 0x1010005 0x0 0xf7bcecf0 0x2172 0x0 0x0 0x1070002 0x217f 0x10d0005 0x0 0xf7bcecf0 0x2185 0x0 0x0 0x1100003 0x218c 0x48 0x1150005 0x0 0x0 0x0 0x0 0x0 0x11b0005 0x0 0xf7bce500 0x25c2 0x0 0x0 0x1200007 0x0 0xffffffffffffffa0 0x25b7 oops 12 2 org/jdom/Element 8 org/jdom/Element 18 org/jdom/Element 47 java/io/StringWriter 55 org/jdom/output/XMLOutputter$NamespaceStack 69 org/jdom/output/XMLOutputter 77 org/jdom/ContentList 108 java/io/StringWriter 117 java/io/StringWriter 142 java/io/StringWriter 150 java/io/StringWriter 165 org/jdom/output/XMLOutputter$NamespaceStack +ciMethodData org/jdom/AttributeList get (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/Object; 2 9202 orig 264 136 98 31 106 0 0 0 0 80 83 88 84 0 0 0 0 168 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 145 15 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 80 0 0 0 255 255 255 255 5 0 3 0 0 0 0 0 data 10 0x30005 0x0 0xc8e73510 0x21f0 0x0 0x0 0x80007 0x0 0x20 0x21f9 oops 1 2 org/jdom/AttributeList +ciMethodData org/jdom/AttributeList indexOf (Ljava/lang/String;Lorg/jdom/Namespace;)I 2 19872 orig 264 136 98 31 106 0 0 0 0 152 84 88 84 0 0 0 0 224 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 177 10 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 14 0 2 0 0 0 136 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 49 0x10005 0x2157 0x0 0x0 0x0 0x0 0x90007 0x2155 0x158 0x0 0xf0003 0x0 0x118 0x1d0005 0x0 0x0 0x0 0x0 0x0 0x240005 0x0 0x0 0x0 0x0 0x0 0x2c0005 0x0 0x0 0x0 0x0 0x0 0x2f0007 0x0 0x70 0x0 0x350005 0x0 0x0 0x0 0x0 0x0 0x380007 0x0 0x20 0x0 0x470007 0x0 0xffffffffffffff00 0x0 oops 0 +ciMethodData org/jdom/output/XMLOutputter printAdditionalNamespaces (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 19836 orig 264 136 98 31 106 0 0 0 0 128 53 160 88 0 0 0 0 136 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 209 47 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 17 0 2 0 0 0 40 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 37 0x10005 0x0 0xf7bce430 0x25f9 0x0 0x0 0x80007 0x0 0xf8 0x260d 0xe0003 0x260d 0x88 0x150005 0x0 0x0 0x0 0x0 0x0 0x1a0004 0x0 0x0 0x0 0x0 0x0 0x240002 0x0 0x2e0005 0x0 0x10a1b0c80 0x260c 0x0 0x0 0x330007 0x0 0xffffffffffffff60 0x260d oops 2 2 org/jdom/Element 29 java/util/Collections$EmptyList +ciMethodData org/jdom/Element getAdditionalNamespaces ()Ljava/util/List; 2 10237 orig 264 136 98 31 106 0 0 0 0 56 229 84 84 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 225 47 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 6 0x40007 0x0 0x20 0x25ff 0xf0002 0x0 oops 0 +ciMethodData org/jdom/output/XMLOutputter printAttributes (Ljava/io/Writer;Ljava/util/List;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 19837 orig 264 136 98 31 106 0 0 0 0 248 54 160 88 0 0 0 0 16 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 217 47 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 11 0 2 0 0 0 168 2 0 0 255 255 255 255 3 0 3 0 0 0 0 0 data 85 0x30003 0x25f7 0x258 0x90005 0x0 0x0 0x0 0x0 0x0 0xe0004 0x0 0x0 0x0 0x0 0x0 0x150005 0x0 0x0 0x0 0x0 0x0 0x1f0007 0x0 0x50 0x0 0x270007 0x0 0x30 0x0 0x300002 0x0 0x360005 0x0 0x0 0x0 0x0 0x0 0x3d0002 0x0 0x430005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0x0 0x0 0x0 0x0 0x500005 0x0 0x0 0x0 0x0 0x0 0x530005 0x0 0x0 0x0 0x0 0x0 0x560005 0x0 0x0 0x0 0x0 0x0 0x5c0005 0x0 0x0 0x0 0x0 0x0 0x650005 0x0 0xc8e73510 0x25f0 0x0 0x0 0x6a0007 0x0 0xfffffffffffffd90 0x25f9 oops 1 77 org/jdom/AttributeList +ciMethodData org/jdom/output/NamespaceStack getURI (Ljava/lang/String;)Ljava/lang/String; 2 8878 orig 264 136 98 31 106 0 0 0 0 224 102 160 88 0 0 0 0 0 2 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 113 5 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 176 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 22 0x50005 0x0 0x10ab873d0 0x20b9 0x0 0x0 0xb0007 0x0 0x20 0x209a 0x150005 0x0 0x0 0x0 0x0 0x0 0x180004 0x0 0x0 0x0 0x0 0x0 oops 1 2 java/util/Stack +ciMethodData org/jdom/output/XMLOutputter printElementNamespace (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 19897 orig 264 136 98 31 106 0 0 0 0 32 65 160 88 0 0 0 0 48 2 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 161 5 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 208 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 26 0x10005 0x0 0xf7bce430 0x20ac 0x0 0x0 0xb0007 0x20a9 0x20 0x0 0x140007 0x0 0x70 0x20ae 0x1a0005 0x0 0xf7bce500 0x20ab 0x0 0x0 0x1d0007 0x2095 0x30 0x0 0x250002 0x0 oops 2 2 org/jdom/Element 16 org/jdom/output/XMLOutputter$NamespaceStack +ciMethodData org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/String; 2 10137 orig 264 136 98 31 106 0 0 0 0 216 232 84 84 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 2 0 0 113 12 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 6 0x40005 0x0 0xf7bce430 0x218a 0x0 0x0 oops 1 2 org/jdom/Element +ciMethodData org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;Ljava/lang/String;)Ljava/lang/String; 2 9223 orig 264 136 98 31 106 0 0 0 0 200 233 84 84 0 0 0 0 40 2 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 2 0 0 49 12 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 200 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 25 0x60005 0x0 0xc8e73510 0x2179 0x0 0x0 0x90104 0x0 0x0 0x0 0x0 0x0 0x100007 0x0 0x38 0x216f 0x140003 0x216b 0x48 0x190005 0x0 0x0 0x0 0x0 0x0 oops 1 2 org/jdom/AttributeList +ciMethodData org/jdom/output/XMLOutputter escapeElementEntities (Ljava/lang/String;)Ljava/lang/String; 2 116805 orig 264 136 98 31 106 0 0 0 0 8 16 160 88 0 0 0 0 48 6 0 0 88 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 16 0 0 1 124 0 0 145 51 4 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 42 0 2 0 0 0 224 4 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 156 0x50007 0xf79 0x20 0x0 0x180003 0xf70 0x408 0x1e0005 0x8667 0x0 0x0 0x0 0x0 0x230008 0xc 0x8652 0xe8 0x0 0xd0 0x0 0xb8 0x0 0xa0 0x0 0x70 0x0 0x88 0x580003 0x0 0x190 0x5f0003 0x0 0x178 0x660003 0x0 0x160 0x6d0003 0x0 0x148 0x790003 0x0 0x130 0x7f0005 0x0 0x100cf7b10 0x8648 0x0 0x0 0x840007 0x8666 0xe8 0x0 0x8d0002 0x0 0x910002 0x0 0x940005 0x0 0x0 0x0 0x0 0x0 0x990005 0x0 0x0 0x0 0x0 0x0 0x9c0005 0x0 0x0 0x0 0x0 0x0 0xa10003 0x0 0x18 0xa80007 0x0 0x128 0x8657 0xad0007 0x865e 0x1a0 0x0 0xb50005 0x0 0x0 0x0 0x0 0x0 0xbb0002 0x0 0xc40005 0x0 0x0 0x0 0x0 0x0 0xc70005 0x0 0x0 0x0 0x0 0x0 0xce0005 0x0 0x0 0x0 0x0 0x0 0xd20003 0x0 0xb0 0xd70007 0x0 0x68 0x0 0xdc0005 0x0 0x0 0x0 0x0 0x0 0xe00003 0x0 0x48 0xe60005 0x0 0x0 0x0 0x0 0x0 0xf00005 0x947f 0x0 0x0 0x0 0x0 0xf30007 0x8668 0xfffffffffffffbe0 0xf79 0xf70007 0x0 0x38 0xf79 0xfb0003 0xf7d 0x48 0xff0005 0x0 0x0 0x0 0x0 0x0 oops 1 44 org/jdom/output/Format$DefaultEscapeStrategy +ciMethodData org/jdom/output/XMLOutputter skipTrailingWhite (Ljava/util/List;I)I 2 13418 orig 264 136 98 31 106 0 0 0 0 144 82 160 88 0 0 0 0 160 2 0 0 176 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 137 146 1 0 89 147 1 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 18 0 2 0 0 0 72 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 41 0x10005 0x0 0xf7bceda0 0x326f 0x0 0x0 0x90007 0x3274 0x20 0x0 0x1b0007 0x0 0xd8 0x3274 0x280007 0x0 0xb8 0x3275 0x350007 0x0 0xb8 0x326f 0x380003 0x3271 0x78 0x410005 0x0 0xf7bceda0 0x3265 0x0 0x0 0x460002 0x3266 0x490007 0x3262 0x40 0x0 0x510007 0x3269 0xffffffffffffffa0 0x0 oops 2 2 org/jdom/ContentList 27 org/jdom/ContentList +ciMethodData org/jdom/output/XMLOutputter printTextRange (Ljava/io/Writer;Ljava/util/List;II)V 2 21659 orig 264 136 98 31 106 0 0 0 0 40 75 160 88 0 0 0 0 152 7 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 137 146 1 0 225 148 2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 86 0 2 0 0 0 48 6 0 0 255 255 255 255 2 0 6 0 0 0 0 0 data 198 0x60002 0x3245 0xb0005 0x0 0xf7bceda0 0x3243 0x0 0x0 0x150007 0x0 0x5f0 0x3243 0x1c0002 0x3244 0x240003 0x325f 0x5a0 0x2a0005 0x0 0xf7bceda0 0x3258 0x0 0x0 0x330004 0x0 0x109ff0e40 0x3258 0x0 0x0 0x360007 0x0 0x98 0x3257 0x3b0004 0x0 0x109ff0e40 0x3258 0x0 0x0 0x3e0005 0x0 0x109ff0e40 0x3258 0x0 0x0 0x430003 0x3259 0x190 0x480004 0x0 0x0 0x0 0x0 0x0 0x4b0007 0x0 0x138 0x0 0x540002 0x0 0x590004 0x0 0x0 0x0 0x0 0x0 0x5c0005 0x0 0x0 0x0 0x0 0x0 0x5f0005 0x0 0x0 0x0 0x0 0x0 0x640005 0x0 0x0 0x0 0x0 0x0 0x670005 0x0 0x0 0x0 0x0 0x0 0x6c0003 0x0 0x28 0x750002 0x0 0x7b0007 0x0 0x318 0x3258 0x820005 0x1215 0x66053380 0x2045 0x0 0x0 0x850007 0x3262 0x38 0x0 0x880003 0x0 0x2a8 0x8d0007 0x3263 0xf0 0x0 0x9a0007 0x0 0x40 0x0 0xa70007 0x0 0xb0 0x0 0xad0002 0x0 0xb00007 0x0 0x50 0x0 0xb60002 0x0 0xb90007 0x0 0x50 0x0 0xbf0005 0x0 0x0 0x0 0x0 0x0 0xc40004 0xffffffffffffcda0 0x109ff0e40 0x121c 0x0 0x0 0xc70007 0x325f 0x98 0x0 0xce0004 0x0 0x0 0x0 0x0 0x0 0xd10005 0x0 0x0 0x0 0x0 0x0 0xd40003 0x0 0xf0 0xd90004 0xffffffffffffcda6 0x109ff0e40 0x1216 0x0 0x0 0xdc0007 0x325c 0x98 0x0 0xe30004 0x0 0x0 0x0 0x0 0x0 0xe60005 0x0 0x0 0x0 0x0 0x0 0xe90003 0x0 0x28 0xf00002 0x325b 0xfe0007 0x325c 0xfffffffffffffa78 0x327a oops 8 4 org/jdom/ContentList 19 org/jdom/ContentList 25 org/jdom/Text 35 org/jdom/Text 41 org/jdom/Text 101 java/lang/String 144 org/jdom/Text 169 org/jdom/Text +ciMethodData org/jdom/output/XMLOutputter printString (Ljava/io/Writer;Ljava/lang/String;)V 2 13399 orig 264 136 98 31 106 0 0 0 0 200 71 160 88 0 0 0 0 80 2 0 0 104 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 2 0 0 129 182 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 248 0 0 0 255 255 255 255 7 0 10 0 0 0 0 0 data 31 0xa0007 0x16cf 0x48 0x0 0xe0002 0x0 0x120003 0x0 0x68 0x1f0007 0x0 0x50 0x16d0 0x230005 0x16ce 0x0 0x0 0x0 0x0 0x2a0005 0x0 0xf7bce130 0x16d6 0x0 0x0 0x2d0005 0x0 0xf7bcecf0 0x16eb 0x0 0x0 oops 2 21 org/jdom/output/XMLOutputter 27 java/io/StringWriter +ciMethodData org/jdom/output/XMLOutputter printContentRange (Ljava/io/Writer;Ljava/util/List;IIILorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 41124 orig 264 136 98 31 106 0 0 0 0 232 58 160 88 0 0 0 0 224 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 15 0 0 217 74 0 0 193 120 2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 32 0 2 0 0 0 104 4 0 0 255 255 255 255 3 0 3 0 0 0 0 0 data 141 0x30003 0x95b 0x448 0x90007 0x45d9 0x38 0x95a 0xd0003 0x95a 0x18 0x160005 0x0 0xf7bceda0 0x4ea2 0x0 0x0 0x1f0004 0xffffffffffffd82c 0xf7bce430 0x27d2 0x109ff0e40 0x2840 0x220007 0x283f 0x70 0x27d4 0x270004 0xffffffffffffd82d 0xf7bce430 0x27d3 0x0 0x0 0x2a0007 0x27d0 0xc8 0x0 0x310002 0x283c 0x390002 0x2806 0x420007 0x27e8 0x308 0x0 0x470007 0x0 0x30 0x0 0x4c0002 0x0 0x530002 0x0 0x5d0002 0x0 0x600003 0x0 0x298 0x650007 0x959 0x30 0x1ec5 0x6a0002 0x1ec3 0x710002 0x281c 0x760004 0xffffffffffffd7de 0xf7bce430 0x281a 0x0 0x0 0x790007 0x281e 0x98 0x0 0x800004 0x0 0x0 0x0 0x0 0x0 0x830005 0x0 0x0 0x0 0x0 0x0 0x860003 0x0 0x190 0x8b0004 0x0 0xf7bce430 0x281b 0x0 0x0 0x8e0007 0x0 0x98 0x281b 0x950004 0x0 0xf7bce430 0x281d 0x0 0x0 0x9c0005 0x0 0xf7bce130 0x281d 0x0 0x0 0x9f0003 0x284c 0xc8 0xa40004 0x0 0x0 0x0 0x0 0x0 0xa70007 0x0 0x80 0x0 0xae0004 0x0 0x0 0x0 0x0 0x0 0xb10005 0x0 0x0 0x0 0x0 0x0 0xbb0007 0x4ece 0xfffffffffffffbd0 0x95b oops 8 12 org/jdom/ContentList 18 org/jdom/Element 20 org/jdom/Text 28 org/jdom/Element 67 org/jdom/Element 92 org/jdom/Element 102 org/jdom/Element 108 org/jdom/output/XMLOutputter +ciMethod java/lang/Object ()V 4097 1 1017286 0 96 +ciMethod java/lang/Object equals (Ljava/lang/Object;)Z 2081 1 30209 0 -1 +ciMethod java/lang/String ([CII)V 4097 1 6395 0 704 +ciMethod java/lang/String length ()I 4097 1 356992 0 64 +ciMethod java/lang/String charAt (I)C 4097 1 1515603 0 160 +ciMethod java/lang/String getChars (II[CI)V 4097 1 6684 0 320 +ciMethod java/lang/String equals (Ljava/lang/Object;)Z 2505 32769 20517 0 -1 +ciMethod java/lang/String substring (II)Ljava/lang/String; 4097 1 5689 0 960 +ciMethod java/lang/String trim ()Ljava/lang/String; 3425 17 6330 0 1216 +ciMethod java/lang/System arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V 93185 1 11648 0 -1 +ciMethod java/lang/StringBuffer (I)V 121 1 8141 0 -1 +ciMethod java/lang/StringBuffer (Ljava/lang/String;)V 425 1 174 0 -1 +ciMethod java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 2049 1 37957 0 1728 +ciMethod java/lang/StringBuffer append (C)Ljava/lang/StringBuffer; 4097 1 226367 0 -1 +ciMethod java/lang/StringBuffer toString ()Ljava/lang/String; 105 1 5160 0 -1 +ciMethod java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 4097 1 683697 0 672 +ciMethod java/lang/AbstractStringBuilder newCapacity (I)I 4097 1 8951 0 160 +ciMethod java/lang/AbstractStringBuilder hugeCapacity (I)I 0 0 1 0 -1 +ciMethod java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 4097 1 6674 0 1056 +ciMethod java/lang/AbstractStringBuilder appendNull ()Ljava/lang/AbstractStringBuilder; 9 1 29 0 0 +ciMethod java/lang/Integer toHexString (I)Ljava/lang/String; 0 0 213 0 -1 +ciMethod java/util/List size ()I 0 0 1 0 -1 +ciMethod java/util/List get (I)Ljava/lang/Object; 0 0 1 0 -1 +ciMethod java/util/Vector size ()I 1025 1 128 0 0 +ciMethod java/util/Vector lastIndexOf (Ljava/lang/Object;)I 8569 1 8881 0 0 +ciMethod java/util/Vector lastIndexOf (Ljava/lang/Object;I)I 94377 1 19891 0 0 +ciMethod java/util/Vector elementAt (I)Ljava/lang/Object; 305 1 6231 0 -1 +ciMethod java/util/Collections unmodifiableList (Ljava/util/List;)Ljava/util/List; 4097 1 24795 0 -1 +ciMethod java/util/Collections$EmptyList size ()I 1025 1 128 0 0 +ciMethod java/lang/Math min (II)I 4097 1 89655 0 -1 +ciMethod java/util/Arrays copyOf ([CI)[C 4097 1 26676 0 0 +ciMethod java/util/Arrays copyOfRange ([CII)[C 4097 1 5638 0 512 +ciMethod java/io/Writer write (I)V 0 0 1 0 -1 +ciMethod java/io/Writer write (Ljava/lang/String;)V 0 0 1 0 -1 +ciMethodData java/lang/String charAt (I)C 2 1515603 orig 264 136 98 31 106 0 0 0 0 240 59 22 104 0 0 0 0 120 1 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 153 242 184 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 10 0x10007 0x0 0x40 0x171e47 0xa0007 0x171e41 0x30 0x0 0x120002 0x0 oops 0 +ciMethodData java/lang/Object ()V 2 1017287 orig 264 136 98 31 106 0 0 0 0 104 4 22 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 57 30 124 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/lang/String length ()I 2 356992 orig 264 136 98 31 106 0 0 0 0 176 58 22 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 132 43 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/lang/String ([CII)V 2 6395 orig 264 136 98 31 106 0 0 0 0 120 48 22 104 0 0 0 0 80 2 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 217 183 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 240 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 30 0x10002 0x16fb 0x50007 0x16fb 0x30 0x0 0xd0002 0x0 0x120007 0x16f9 0x70 0x2 0x160007 0x2 0x30 0x0 0x1e0002 0x0 0x250007 0x0 0x20 0x2 0x370007 0x16f9 0x30 0x0 0x410002 0x0 0x4b0002 0x16f9 oops 0 +ciMethodData java/util/Arrays copyOfRange ([CII)[C 2 5638 orig 264 136 98 31 106 0 0 0 0 32 155 39 104 0 0 0 0 120 2 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 49 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 32 1 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 36 0x50007 0x1406 0x100 0x0 0x100002 0x0 0x140005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x1d0005 0x0 0x0 0x0 0x0 0x0 0x200005 0x0 0x0 0x0 0x0 0x0 0x230002 0x0 0x360002 0x1406 0x390002 0x1406 oops 0 +ciMethodData java/lang/String substring (II)Ljava/lang/String; 2 5689 orig 264 136 98 31 106 0 0 0 0 32 89 22 104 0 0 0 0 40 2 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 161 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 248 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 31 0x10007 0x1439 0x30 0x0 0x90002 0x0 0x130007 0x1439 0x30 0x0 0x1b0002 0x0 0x240007 0x1439 0x30 0x0 0x2c0002 0x0 0x310007 0xb81 0x58 0x8b8 0x3a0007 0x7d7 0x38 0xe1 0x3e0003 0xe1 0x28 0x4b0002 0x1358 oops 0 +ciMethodData java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 2 683697 orig 264 136 98 31 106 0 0 0 0 112 250 28 104 0 0 0 0 144 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 137 101 83 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 11 0 2 0 0 0 64 0 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 8 0x70007 0xa26cb 0x40 0x45e3 0x110002 0x45e3 0x140002 0x45e3 oops 0 +ciMethodData java/lang/String getChars (II[CI)V 2 6684 orig 264 136 98 31 106 0 0 0 0 16 64 22 104 0 0 0 0 8 2 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 225 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 160 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 20 0x10007 0x181c 0x30 0x0 0x90002 0x0 0x130007 0x181c 0x30 0x0 0x1b0002 0x0 0x210007 0x181c 0x30 0x0 0x2b0002 0x0 0x3a0002 0x181c oops 0 +ciMethodData java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 2 6674 orig 264 136 98 31 106 0 0 0 0 88 3 29 104 0 0 0 0 240 1 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 145 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 160 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 20 0x10007 0x1811 0x30 0x1 0x50002 0x1 0xa0005 0xc1a 0x66053380 0xbf7 0x0 0x0 0x150002 0x1811 0x230005 0xc1a 0x66053380 0xbf7 0x0 0x0 oops 2 8 java/lang/String 16 java/lang/String +ciMethodData java/util/Arrays copyOf ([CI)[C 2 26676 orig 264 136 98 31 106 0 0 0 0 208 147 39 104 0 0 0 0 112 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 161 49 3 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 7 0 2 0 0 0 32 0 0 0 255 255 255 255 2 0 11 0 0 0 0 0 data 4 0xb0002 0x6634 0xe0002 0x6634 oops 0 +ciMethodData java/lang/AbstractStringBuilder newCapacity (I)I 2 8951 orig 264 136 98 31 106 0 0 0 0 32 251 28 104 0 0 0 0 176 1 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 185 7 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 18 0 2 0 0 0 136 0 0 0 255 255 255 255 7 0 13 0 0 0 0 0 data 17 0xd0007 0x18d2 0x20 0x825 0x130007 0x0 0x40 0x20f7 0x1a0007 0x20f7 0x48 0x0 0x1f0002 0x0 0x220003 0x0 0x18 oops 0 +ciMethodData java/lang/AbstractStringBuilder appendNull ()Ljava/lang/AbstractStringBuilder; 1 29 orig 264 136 98 31 106 0 0 0 0 88 6 29 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 225 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 9 0 0 0 0 0 data 2 0x90002 0x1c oops 0 +ciMethod java/io/StringWriter write (Ljava/lang/String;)V 4097 1 25466 0 1824 +ciMethodData java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 2 37957 orig 264 136 98 31 106 0 0 0 0 248 186 28 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 41 154 4 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 7 0 0 0 0 0 data 2 0x70002 0x9347 oops 0 +ciMethodData java/lang/String trim ()Ljava/lang/String; 2 6330 orig 264 136 98 31 106 0 0 0 0 224 104 22 104 0 0 0 0 128 2 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 169 1 0 0 113 184 0 0 129 22 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 20 0 2 0 0 0 56 1 0 0 255 255 255 255 7 0 15 0 0 0 0 0 data 39 0xf0007 0x3 0x58 0x19db 0x170007 0x170b 0x38 0x2d0 0x1d0003 0x2d0 0xffffffffffffffc0 0x220007 0x3 0x58 0x170b 0x2c0007 0x170b 0x38 0x0 0x320003 0x0 0xffffffffffffffc0 0x360007 0x1fd 0x40 0x1511 0x3f0007 0x1511 0x68 0x0 0x450005 0x0 0x66053380 0x1fd 0x0 0x0 0x480003 0x1fd 0x18 oops 1 32 java/lang/String +instanceKlass com/mathworks/mlwebservices/DefaultService +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsUtil +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$2 +instanceKlass com/mathworks/vrd/model/VRDModel +instanceKlass com/mathworks/mlwebservices/ValidationService +instanceKlass com/mathworks/mlwebservices/Service +instanceKlass com/mathworks/vrd/model/VRDModelFactoryDefault +instanceKlass com/mathworks/metadata_serializer/DocumentationMetadataSerializer +instanceKlass com/mathworks/webproxy/AbstractSystemProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxyConfiguration +instanceKlass com/mathworks/webproxy/PropertiesProxyConfigurationImpl +instanceKlass com/mathworks/webproxy/SystemPropertiesProxyConfiguration +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$4 +instanceKlass com/mathworks/webproxy/AbstractCompositeProxyConfiguration +instanceKlass com/mathworks/metadata_serializer/PathMetadataSerializer +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$1 +instanceKlass com/mathworks/webproxy/NativeProxySettings +instanceKlass com/mathworks/webproxy/PropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/ProxyAuthenticator +instanceKlass com/mathworks/webproxy/SystemProxySettings +instanceKlass com/mathworks/webproxy/WebproxyFactory +instanceKlass com/sun/imageio/plugins/common/ReaderUtil +instanceKlass com/mathworks/instutil/WinSecurity +instanceKlass sun/java2d/cmm/CMSManager +instanceKlass com/mathworks/instutil/WindowsSecurityOverride +instanceKlass com/mathworks/instutil/services/ServiceThread +instanceKlass com/mathworks/instutil/services/ServiceThreadFactoryImpl +instanceKlass com/sun/imageio/plugins/png/PNGImageDataEnumeration +instanceKlass javax/imageio/IIOParam +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseAdapter +instanceKlass com/mathworks/vrd/license/LicenseFileFilterImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParserImpl +instanceKlass javax/imageio/ImageIO$CanDecodeInputFilter +instanceKlass com/mathworks/instutil/SystemEnvironment +instanceKlass com/sun/imageio/stream/CloseableDisposerRecord +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinderDefault +instanceKlass com/mathworks/instutil/Environment +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseFileFinder +instanceKlass sun/font/SunFontManager$9 +instanceKlass com/mathworks/instutil/wizard/CJKFontSize +instanceKlass com/mathworks/instutil/wizard/FontSizeStrategy +instanceKlass com/mathworks/metadata_serializer/MetadataSerializerLoader +instanceKlass com/mathworks/instutil/FontHandlerImpl +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$InitialState +instanceKlass com/mathworks/metadata_serializer/AddonCoreMetadataSerializer +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$LoggerState +instanceKlass com/mathworks/metadata_core/MetadataCoreLoader +instanceKlass com/mathworks/jniutils_java/NativeObjectContainer +instanceKlass com/mathworks/metadata_core/CompatibilityMetadata +instanceKlass com/mathworks/addons_metadata/AddonMetadataProviderWithFolder +instanceKlass com/mathworks/metadata_core/DocumentationMetadata +instanceKlass com/mathworks/metadata_core/PathMetadata +instanceKlass com/mathworks/metadata_core/IncludedAppsMetadata +instanceKlass com/mathworks/metadata_core/AddonCoreMetadata +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils$2 +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyFolderStructureUtils +instanceKlass com/mathworks/addons_metadata/AddonMetadataProvider +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils +instanceKlass com/mathworks/resources_folder/ResourcesFolderUtils +instanceKlass com/mathworks/instwiz/WIResourceBundle +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderView +instanceKlass com/mathworks/instwiz/arch/ArchGuiBase +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderViewFactory +instanceKlass java/nio/file/Files$3 +instanceKlass com/mathworks/instwiz/arch/ArchGui +instanceKlass java/nio/file/FileTreeWalker$Event +instanceKlass java/nio/file/FileTreeWalker$DirectoryNode +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactoryImpl +instanceKlass com/mathworks/appmanagement/model/LegacyPackagingApi +instanceKlass com/mathworks/appmanagement/model/PackagingApi +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB$8 +instanceKlass sun/nio/fs/AbstractBasicFileAttributeView +instanceKlass com/mathworks/appmanagement/model/InstalledAppMetadata +instanceKlass com/mathworks/appmanagement/model/AppMetadata +instanceKlass com/mathworks/instutil/services/ProxyTester +instanceKlass sun/nio/fs/WindowsFileAttributeViews +instanceKlass java/nio/file/attribute/BasicFileAttributeView +instanceKlass java/nio/file/FileTreeWalker +instanceKlass com/mathworks/addons_common/util/InstallationFoldersWalker +instanceKlass com/mathworks/appmanagement/MlappinstallUtil +instanceKlass com/mathworks/addons_zip/tasks/GetInstalledTask +instanceKlass com/mathworks/toolboxmanagement/tasks/GetInstalledTask +instanceKlass com/mathworks/addons_app/tasks/GetInstalledTask +instanceKlass com/mathworks/instutil/InstUtilResourceBundle +instanceKlass com/mathworks/instutil/FontHandler +instanceKlass com/mathworks/addons_common/util/FolderNameUtils +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactory +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnInformation +instanceKlass javax/xml/stream/XMLStreamWriter +instanceKlass org/apache/axiom/om/OMElement +instanceKlass com/mathworks/addons_product/ProductManager$1 +instanceKlass org/apache/axiom/om/OMContainer +instanceKlass org/apache/axiom/om/OMNode +instanceKlass org/apache/axiom/om/OMSerializable +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder$1 +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder +instanceKlass org/apache/axiom/om/OMDataSource +instanceKlass com/mathworks/addons_product/ProductDocumentationProvider +instanceKlass javax/xml/stream/XMLStreamReader +instanceKlass javax/xml/stream/XMLStreamConstants +instanceKlass com/mathworks/internal/activationws/client/MWAMachineAttribute +instanceKlass com/mathworks/product/util/ProductIdentifierMap +instanceKlass org/apache/axis2/databinding/ADBBean +instanceKlass com/mathworks/services/lmgr/FeatureInfo +instanceKlass com/mathworks/instutil/NativeUtility +instanceKlass com/mathworks/instutil/DisplayProperties +instanceKlass com/mathworks/instutil/MachineInfo +instanceKlass com/mathworks/vrd/command/ValidateCommandFactory +instanceKlass com/mathworks/vrd/command/RefreshCommandFactory +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactory +instanceKlass com/mathworks/vrd/license/LicenseFactory +instanceKlass com/mathworks/vrd/license/License +instanceKlass com/mathworks/vrd/model/VRDModelFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinder +instanceKlass com/mathworks/vrd/license/LicenseFileFilter +instanceKlass com/mathworks/instutil/services/ServiceThreadFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParser +instanceKlass com/mathworks/vrd/view/VRDView +instanceKlass com/mathworks/instutil/services/ServiceThreadView +instanceKlass com/mathworks/webintegration/vrd/VRDConfigMATLAB +instanceKlass com/mathworks/vrd/config/VRDConfig +instanceKlass com/mathworks/vrd/config/VRDConfigFactory +instanceKlass com/mathworks/matlab_login/UserLoginInfo +instanceKlass com/mathworks/matlab_login/PersistLoginInfo +instanceKlass com/mathworks/matlab_login/LoginLevel4Impl +instanceKlass com/mathworks/matlab_login/LoginLevel3Impl +instanceKlass com/mathworks/matlab_login/LoginLevel2Impl +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$ActionList +instanceKlass com/mathworks/matlab_login/LoginLevel1Impl +instanceKlass com/mathworks/webintegration/vrd/LicenseActions +instanceKlass com/mathworks/matlab_login/LoginLevel0Impl +instanceKlass com/mathworks/matlab_login/LoginLevel +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory$LazyHolder +instanceKlass com/mathworks/mde/vrd/NoOpLicenseActions +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory +instanceKlass com/mathworks/matlab_login/Task +instanceKlass com/mathworks/matlab_login/MatlabLogin +instanceKlass com/mathworks/mde/vrd/LicenseActions +instanceKlass com/mathworks/mde/vrd/LicenseActionsFactory +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$3 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$1 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$2 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$1 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifierFactory +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$9 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$8 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$13 +instanceKlass java/text/BreakIterator +instanceKlass javax/swing/text/GlyphView$GlyphPainter +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder$TooltipBuilderArgumentAppender +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder +instanceKlass com/google/common/primitives/Ints +instanceKlass com/mathworks/services/lmgr/NonDemoFeatureInfoList +instanceKlass com/mathworks/install/InstalledProduct +instanceKlass com/mathworks/mde/liveeditor/ActionManager$3 +instanceKlass com/mathworks/mde/liveeditor/ActionManager$1 +instanceKlass com/mathworks/mde/liveeditor/ActionManager$8 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$4 +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceListener +instanceKlass com/mathworks/mde/liveeditor/ActionManager +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$3 +instanceKlass javax/swing/OverlayLayout +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory$LoggingUncaughtExceptionHandler +instanceKlass sun/awt/image/ImageDecoder$1 +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$5 +instanceKlass com/mathworks/toolbox/parallel/pctutil/logging/RootLog +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$4 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$7 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$1 +instanceKlass com/mathworks/toolbox/distcomp/RootLog +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/PackageInfo +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$PoolIconDecorator +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$3 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$5 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$4 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$3 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$2 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifier +instanceKlass com/mathworks/toolbox/distcomp/wsclients/cloudconsole/CloudConsoleClusterInfo +instanceKlass com/mathworks/peermodel/events/PeerModelListener +instanceKlass com/mathworks/toolbox/distcomp/mjs/service/DistcompServiceInfo +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService +instanceKlass com/mathworks/services/actiondataservice/ActionDataService +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTip +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$2 +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$HyperlinkHandler +instanceKlass com/mathworks/mlwidgets/html/MatlabRequestDataListener +instanceKlass com/mathworks/html/ZoomMouseListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$TooltipDetailsUpdater +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionService +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory$Fireable +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionInfo +instanceKlass com/mathworks/toolbox/parallel/util/concurrent/PredicateCondition +instanceKlass com/mathworks/html/jxbrowser/chromium/TempDirPermissionUtils +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionEvent +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDownloadHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClientSessionInfoProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/SessionInfoProvider +instanceKlass javax/print/attribute/PrintRequestAttributeSet +instanceKlass javax/print/attribute/Attribute +instanceKlass com/mathworks/html/jxbrowser/chromium/MWPrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDialogHandler +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionListener +instanceKlass com/teamdev/jxbrowser/chromium/swing/a +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/u +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudCreationListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/TaskExecutor +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionCreationListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/NativeKeyCodes +instanceKlass com/mathworks/toolbox/distcomp/ui/MatlabPoolIndicator +instanceKlass com/teamdev/jxbrowser/chromium/internal/MouseDragEventConverter +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport$a +instanceKlass com/mathworks/ddux/JSBridge$DataSubscriber +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/WidgetView$c +instanceKlass com/mathworks/ddux/JSBridge$2 +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/MemoryImage +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport +instanceKlass com/teamdev/jxbrowser/chromium/KeyFilter +instanceKlass com/teamdev/jxbrowser/chromium/JSValue +instanceKlass com/teamdev/jxbrowser/chromium/LoadURLParams +instanceKlass com/teamdev/jxbrowser/chromium/LoadHTMLParams +instanceKlass com/teamdev/jxbrowser/chromium/BrowserFunction +instanceKlass com/teamdev/jxbrowser/chromium/LoadDataParams +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMNodeAtPoint +instanceKlass com/teamdev/jxbrowser/chromium/PopupHandler +instanceKlass com/teamdev/jxbrowser/chromium/JSContext +instanceKlass com/teamdev/jxbrowser/chromium/events/PrintJobListener +instanceKlass com/mathworks/toolstrip/accessories/TSRobot +instanceKlass com/teamdev/jxbrowser/chromium/SearchResult +instanceKlass com/teamdev/jxbrowser/chromium/SearchParams +instanceKlass com/teamdev/jxbrowser/chromium/events/TitleListener +instanceKlass com/teamdev/jxbrowser/chromium/events/StatusListener +instanceKlass com/teamdev/jxbrowser/chromium/events/ConsoleListener +instanceKlass java/awt/AWTEvent$2 +instanceKlass com/teamdev/jxbrowser/chromium/events/RenderListener +instanceKlass java/awt/LightweightDispatcher$1 +instanceKlass com/teamdev/jxbrowser/chromium/ContextMenuHandler +instanceKlass java/awt/Container$MouseEventTargetFilter +instanceKlass java/awt/Container$EventTargetFilter +instanceKlass com/teamdev/jxbrowser/chromium/NavigationEntry +instanceKlass com/teamdev/jxbrowser/chromium/FullScreenHandler +instanceKlass com/teamdev/jxbrowser/chromium/internal/ReflectionUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/MacShortcutSupport +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$UpdateEvent +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$DeactivationListener +instanceKlass com/teamdev/jxbrowser/chromium/events/DisposeListener +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry +instanceKlass com/teamdev/jxbrowser/chromium/u +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28$1 +instanceKlass java/awt/KeyboardFocusManager$LightweightFocusRequest +instanceKlass java/awt/DefaultKeyboardFocusManager$TypeAheadMarker +instanceKlass java/awt/KeyboardFocusManager$HeavyweightFocusRequest +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$2 +instanceKlass com/mathworks/install_impl/usage/NonCustomerFacingUsageStrategy +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$38 +instanceKlass com/mathworks/util/tree/TreeUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$6 +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$11 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$3 +instanceKlass com/mathworks/install_impl/usage/CustomerFacingUsageStrategy +instanceKlass com/mathworks/install/usage/UsageStrategy +instanceKlass com/mathworks/install_impl/usage/UsageStrategyFactory +instanceKlass com/mathworks/install_impl/InstallableProductImpl$InstallableComponentVisitor +instanceKlass com/teamdev/jxbrowser/chromium/r +instanceKlass org/jdom/output/Format$DefaultEscapeStrategy +instanceKlass com/teamdev/jxbrowser/chromium/v +instanceKlass org/jdom/output/Format$TextMode +instanceKlass org/jdom/output/EscapeStrategy +instanceKlass org/jdom/output/Format +instanceKlass com/teamdev/jxbrowser/chromium/x +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils +instanceKlass org/jdom/output/NamespaceStack +instanceKlass org/jdom/output/XMLOutputter +instanceKlass com/mathworks/install_impl/ComponentContainerImpl$ComponentDataFlyweight +instanceKlass com/mathworks/install_impl/ProductImpl +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService$1 +instanceKlass com/jidesoft/popup/JidePopup$17 +instanceKlass com/google/gson/annotations/SerializedName +instanceKlass com/jidesoft/popup/JidePopup$16 +instanceKlass com/jidesoft/popup/JidePopup$15 +instanceKlass com/mathworks/settings_service/SettingsService$1 +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService$1 +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/d +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/p +instanceKlass com/mathworks/mde/desk/PrefsFetcher$2 +instanceKlass com/mathworks/mde/desk/PrefsFetcher$1 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$3 +instanceKlass com/mathworks/install_impl/UninstallerComponentContainerHandler +instanceKlass com/mathworks/mde/desk/ToolsFetcher$2 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$1 +instanceKlass com/mathworks/install_impl/AbstractFileListParser +instanceKlass com/mathworks/install/FileListParser +instanceKlass java/io/SerialCallbackContext +instanceKlass java/io/ObjectStreamClass$ClassDataSlot +instanceKlass java/io/ObjectStreamClass$FieldReflector +instanceKlass java/io/ObjectStreamClass$2 +instanceKlass java/io/ObjectStreamClass$EntryFuture +instanceKlass java/io/ObjectStreamClass$Caches +instanceKlass java/io/ObjectStreamClass +instanceKlass java/io/Bits +instanceKlass sun/misc/ObjectInputFilter$Config$$Lambda$21 +instanceKlass sun/misc/ObjectInputFilter +instanceKlass sun/misc/ObjectInputFilter$Config +instanceKlass java/io/ObjectInputStream$ValidationList +instanceKlass java/io/ObjectInputStream$HandleTable$HandleList +instanceKlass java/io/ObjectInputStream$HandleTable +instanceKlass java/io/ObjectInputStream$$Lambda$20 +instanceKlass sun/misc/JavaObjectInputStreamAccess +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/misc/ObjectStreamClassValidator +instanceKlass java/io/ObjectInputStream$1 +instanceKlass sun/misc/JavaOISAccess +instanceKlass com/mathworks/install/OwningProductResponse +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl$FileCollectionVisitor +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl +instanceKlass com/mathworks/instutil/FolderUtilsImpl +instanceKlass com/mathworks/instutil/ParentFolderOperation +instanceKlass com/mathworks/instutil/FileIO +instanceKlass com/google/inject/internal/InjectorImpl$2$1 +instanceKlass com/google/inject/internal/CircularDependencyProxy +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter$1 +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapIterator +instanceKlass com/google/inject/internal/InternalContext$DependencyStack +instanceKlass com/google/inject/internal/InternalContext +instanceKlass com/google/inject/internal/InternalInjectorCreator$1 +instanceKlass com/google/common/collect/Iterators$5 +instanceKlass com/google/common/collect/TransformedIterator +instanceKlass com/google/common/collect/FluentIterable +instanceKlass com/google/common/collect/Iterables +instanceKlass java/lang/reflect/WeakCache$LookupValue +instanceKlass com/google/inject/internal/InjectorImpl$2 +instanceKlass com/mathworks/install/command/NativeDotNet +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileLocation +instanceKlass com/mathworks/install/input/DeltaData +instanceKlass com/mathworks/install/input/ComponentData +instanceKlass com/mathworks/install/input/ProductData +instanceKlass java/awt/geom/LineIterator +instanceKlass com/mathworks/install/input/ComponentURLProvider +instanceKlass com/mathworks/install/input/InstallationInputFile +instanceKlass com/mathworks/install/udc/UdcResourceKey +instanceKlass com/mathworks/instutil/InstallerDownloadURLInfo +instanceKlass sun/awt/image/OffScreenImageSource +instanceKlass com/mathworks/install/InputStreamProvider +instanceKlass com/mathworks/install/input/Contents +instanceKlass com/sun/java/swing/plaf/windows/WindowsButtonUI$1 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$16 +instanceKlass java/awt/geom/RoundRectIterator +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$15 +instanceKlass sun/java2d/pipe/ShapeSpanIterator +instanceKlass sun/java2d/pipe/SpanIterator +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer$2 +instanceKlass com/mathworks/pathdataservice/PathDataService$1 +instanceKlass java/awt/PointerInfo +instanceKlass com/mathworks/fileiconprovider/FileIconProvider$1 +instanceKlass sun/awt/DefaultMouseInfoPeer +instanceKlass java/awt/peer/MouseInfoPeer +instanceKlass java/awt/MouseInfo +instanceKlass com/mathworks/searchservice/SearchService$1 +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService$1 +instanceKlass java/lang/Deprecated +instanceKlass java/util/function/BiConsumer +instanceKlass com/mathworks/mldosharingservice/SharingDataService +instanceKlass com/google/inject/util/Types +instanceKlass com/mathworks/addons_product/MatlabOnlineStrategy +instanceKlass com/mathworks/settings_service/SettingsService +instanceKlass com/mathworks/install/ComponentAggregator +instanceKlass com/mathworks/install_impl/ProductInstallerImpl$ComponentVisitor +instanceKlass com/mathworks/searchservice/SearchService +instanceKlass com/mathworks/pathdataservice/PathDataService +instanceKlass com/mathworks/fileiconprovider/FileIconProvider +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService +instanceKlass com/mathworks/install_impl/XMLParserImpl +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService +instanceKlass com/mathworks/install/XMLParser +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService +instanceKlass com/mathworks/install/ComponentContainerHandler +instanceKlass com/mathworks/mde/explorer/JavaScriptCurrentFolderInstance +instanceKlass com/mathworks/widgets/desk/PreferencePanel$Tool +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserEvent +instanceKlass com/mathworks/mde/desk/ContributedTools +instanceKlass com/mathworks/mde/desk/PrefsFetcher$Handler +instanceKlass com/mathworks/mde/desk/PrefsFetcher +instanceKlass com/mathworks/matlabserver/connector/impl/ConnectorLifecycleHelperImpl$1 +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler$1 +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$2 +instanceKlass com/mathworks/install/InstallableComponent +instanceKlass com/mathworks/install/input/ComponentSourceProvider +instanceKlass com/mathworks/install_impl/InstallableProductImpl +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycle +instanceKlass com/mathworks/mde/desk/ToolsFetcher$ToolData +instanceKlass com/mathworks/install/InstallableProduct +instanceKlass com/mathworks/mde/desk/ToolsFetcher$Handler +instanceKlass com/mathworks/install/ComponentData +instanceKlass com/google/inject/internal/SingleParameterInjector +instanceKlass com/mathworks/mde/desk/ToolsFetcher +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$1 +instanceKlass com/google/inject/internal/cglib/reflect/$FastMember +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory +instanceKlass com/google/inject/internal/ConstructorInjector +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadAdapter +instanceKlass com/teamdev/jxbrowser/chromium/w +instanceKlass com/teamdev/jxbrowser/chromium/internal/PluginManagerImpl +instanceKlass com/google/inject/internal/ConstructionProxy +instanceKlass com/teamdev/jxbrowser/chromium/internal/a +instanceKlass com/google/inject/internal/cglib/proxy/$CallbackFilter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCacheStorage +instanceKlass com/google/inject/internal/ProxyFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCookieStorage +instanceKlass com/google/inject/internal/MembersInjectorImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/DialogHandlerDelegate +instanceKlass com/google/inject/internal/EncounterImpl +instanceKlass com/google/inject/internal/ConstructorBindingImpl$Factory +instanceKlass com/google/inject/ProvidedBy +instanceKlass com/google/inject/ImplementedBy +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter$a +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback$ProvisionCallback +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageUIDGenerator +instanceKlass com/google/inject/internal/ProviderInternalFactory +instanceKlass com/google/inject/spi/ProvidesMethodTargetVisitor +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelIDGenerator +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback +instanceKlass com/teamdev/jxbrowser/chromium/internal/ProxyParams +instanceKlass com/google/common/cache/LocalCache$AbstractReferenceEntry +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore$KeyBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/o +instanceKlass com/google/inject/internal/InternalFactoryToProviderAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannel +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory$ReentrantCycleDetectingLock +instanceKlass com/google/inject/internal/ConstructionContext +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketInfo +instanceKlass com/google/inject/internal/SingletonScope$1 +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter +instanceKlass com/google/inject/internal/FactoryProxy +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageField +instanceKlass com/google/inject/internal/util/Classes +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageSerializer +instanceKlass com/google/inject/spi/ExposedBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessagesBufferIterator +instanceKlass com/google/inject/internal/CreationListener +instanceKlass java/net/Socket$3 +instanceKlass java/net/Socket$2 +instanceKlass com/google/inject/internal/InjectorShell$LoggerFactory +instanceKlass com/google/inject/internal/InjectorShell$InjectorFactory +instanceKlass com/google/inject/internal/Initializables$1 +instanceKlass com/google/inject/internal/Initializables +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Channel +instanceKlass com/google/inject/internal/ConstantFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/n +instanceKlass com/google/inject/internal/InjectorShell +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelReader +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelStream +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore +instanceKlass com/google/inject/spi/TypeEncounter +instanceKlass com/google/inject/internal/SingleMemberInjector +instanceKlass com/google/inject/internal/MembersInjectorStore +instanceKlass com/mathworks/matlabserver/connectorcommon/embeddedwebserver/WebServerConfig +instanceKlass com/mathworks/peermodel/impl/ObservableImpl$PeerNodeListenerAdapter +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$4 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$2 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$1 +instanceKlass com/google/inject/spi/TypeConverterBinding +instanceKlass com/google/inject/matcher/AbstractMatcher +instanceKlass com/mathworks/peermodel/PeerNodeVisitor$Cancellable +instanceKlass com/google/inject/matcher/Matchers +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$5 +instanceKlass com/mathworks/peermodel/impl/PeerNodeImpl +instanceKlass com/mathworks/peermodel/PeerNodeSyncable +instanceKlass com/google/inject/internal/ConstructionProxyFactory +instanceKlass com/google/inject/internal/FailableCache +instanceKlass com/google/inject/internal/ConstructorInjectorStore +instanceKlass com/google/inject/internal/DeferredLookups +instanceKlass com/google/inject/internal/InjectorImpl$BindingsMultimap +instanceKlass com/mathworks/peermodel/ManagerInfo +instanceKlass com/google/inject/spi/ConvertedConstantBinding +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$2 +instanceKlass com/google/inject/spi/ProviderBinding +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$1 +instanceKlass com/google/inject/internal/InjectorImpl +instanceKlass com/google/inject/internal/Lookups +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer +instanceKlass com/google/inject/internal/InjectorImpl$InjectorOptions +instanceKlass com/mathworks/peermodel/impl/ObservableImpl +instanceKlass com/google/inject/spi/DefaultBindingScopingVisitor +instanceKlass com/mathworks/peermodel/events/Event +instanceKlass com/mathworks/peermodel/PeerNodeVisitor +instanceKlass com/mathworks/peermodel/PeerNode +instanceKlass com/mathworks/peermodel/events/PeerNodeListenable +instanceKlass com/mathworks/peermodel/impl/PeerModelManagerImpl +instanceKlass com/mathworks/peermodel/PeerModelManagerSyncable +instanceKlass com/mathworks/peermodel/events/ObservableSyncable +instanceKlass com/mathworks/peermodel/events/PeerNodeAdapter +instanceKlass com/mathworks/peermodel/events/PeerNodeListener +instanceKlass java/net/Proxy +instanceKlass com/mathworks/webproxy/ProxyConfigurationVisitor +instanceKlass com/mathworks/mde/liveeditor/debug/PeerModelBreakpointDataStoreService +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$5 +instanceKlass com/mathworks/instutil/IOObserver +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointFileService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$6 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$2 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$5 +instanceKlass com/mathworks/install/InstallFlowControlHandler +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$2 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService +instanceKlass com/mathworks/install/archive/Archive +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService +instanceKlass com/mathworks/instutil/DefaultSecurityOverrideImpl +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$7 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$6 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$5 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$3 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$8 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$4 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$2 +instanceKlass com/mathworks/connector/message_service/bayeux/PublishRequest +instanceKlass com/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator +instanceKlass com/google/gson/internal/Streams +instanceKlass sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter +instanceKlass sun/util/locale/provider/TimeZoneNameUtility +instanceKlass com/google/gson/internal/LinkedTreeMap$Node +instanceKlass com/google/gson/internal/LinkedTreeMap$1 +instanceKlass java/util/logging/LogRecord +instanceKlass com/google/gson/internal/ConstructorConstructor$11 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/ExtraStepOnLastLineOfFunctionInterceptor +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$StackCallback +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$9 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller +instanceKlass com/mathworks/services/mlx/service/SerializationService$3 +instanceKlass com/mathworks/services/mlx/service/SerializationService$2 +instanceKlass com/mathworks/services/mlx/service/SerializationService$1 +instanceKlass com/mathworks/services/mlx/service/SerializationService +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$2 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$1 +instanceKlass com/mathworks/instutil/ResourceDefaultLocaleImpl +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService +instanceKlass com/mathworks/instutil/ResourceLocale +instanceKlass com/mathworks/instutil/ResourceLocaleFactory +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService$Subscription +instanceKlass org/jdom/ContentList$FilterListIterator +instanceKlass com/mathworks/messageservice/MessageUtils +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$2 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$SingletonHolder +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager +instanceKlass org/jdom/filter/AbstractFilter +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientPropertiesResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientProperties +instanceKlass org/jdom/Namespace +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProductsResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProducts +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDirResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDir +instanceKlass org/jdom/filter/Filter +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl$OpenWithBrowser +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenOrCreateInEditor +instanceKlass org/jdom/Verifier +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenToLineInEditor +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonceResponse +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$LocatorProxy +instanceKlass org/xml/sax/ext/Locator2 +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonce +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonceResponse +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonce +instanceKlass org/apache/xerces/util/URI +instanceKlass com/mathworks/matlabserver/connector/http/AddStaticContentPath +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener$MatlabExecutionStateReturnVal +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoResponse +instanceKlass org/apache/xerces/util/SAXMessageFormatter +instanceKlass org/jdom/input/BuilderErrorHandler +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoRequest +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$2 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$3 +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$1 +instanceKlass org/apache/xerces/parsers/SecuritySupport$3 +instanceKlass com/mathworks/connector/Promise +instanceKlass org/xml/sax/DocumentHandler +instanceKlass com/mathworks/connector/Future +instanceKlass com/mathworks/connector/cosg/CosgRegisterOpaqueType +instanceKlass javax/xml/parsers/SAXParser +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$CosgHandlerContainer +instanceKlass javax/xml/parsers/SAXParserFactory +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateResponseMessageDO +instanceKlass org/jdom/input/JAXPParserFactory +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateRequestMessageDO +instanceKlass com/mathworks/cosg/CosgResponseWrapper +instanceKlass org/jdom/Document +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateImpl +instanceKlass org/jdom/input/TextBuffer +instanceKlass com/mathworks/peermodel/synchronizer/utils/ClientPagedDataJSONConverter +instanceKlass com/mathworks/peermodel/pageddata/PagedDataFactory +instanceKlass com/mathworks/peermodel/pageddata/impl/PagedDataImpl +instanceKlass com/mathworks/peermodel/pageddata/ClientPagedData +instanceKlass com/mathworks/peermodel/pageddata/ServerPagedData +instanceKlass org/jdom/Content +instanceKlass org/jdom/Parent +instanceKlass com/mathworks/peermodel/PeerSynchronizerFactory +instanceKlass org/xml/sax/ext/DeclHandler +instanceKlass org/xml/sax/ext/LexicalHandler +instanceKlass com/mathworks/peermodel/synchronizer/PeerSynchronizer +instanceKlass com/mathworks/peermodel/events/Observer +instanceKlass com/mathworks/peermodel/PeerSynchronizer +instanceKlass org/jdom/DefaultJDOMFactory +instanceKlass org/jdom/JDOMFactory +instanceKlass org/jdom/input/SAXBuilder +instanceKlass com/mathworks/instutil/VersionInfo +instanceKlass com/mathworks/peermodel/PeerModelManagers +instanceKlass com/mathworks/peermodel/PeerModelManager +instanceKlass com/mathworks/peermodel/events/PeerModelListenable +instanceKlass com/mathworks/peermodel/events/PeerEventObservable +instanceKlass com/mathworks/peermodel/events/Observable +instanceKlass sun/nio/fs/WindowsUriSupport +instanceKlass com/mathworks/peermodel/PeerModelBuilderImpl +instanceKlass com/mathworks/peermodel/PeerModelBuilder +instanceKlass com/mathworks/peermodel/synchronizer/utils/PeerModelInitialize +instanceKlass com/mathworks/instutil/logging/AbstractAppLogger +instanceKlass com/mathworks/instutil/ExecutorServiceManagerImpl +instanceKlass com/mathworks/connector/message_service/impl/JniMessageServiceAdaptorImpl$1 +instanceKlass com/mathworks/messageservice/MessageServiceFactory +instanceKlass com/google/gson/BufferedImageConverter +instanceKlass com/mathworks/messageservice/json/converters/JSONTypeConverter +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl$MessageJSONCustomConverter +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl +instanceKlass com/mathworks/messageservice/json/JSONCustomConverters +instanceKlass com/mathworks/messageservice/MessageService +instanceKlass com/mathworks/messageservice/Message +instanceKlass com/mathworks/messageservice/ContextState +instanceKlass com/mathworks/webproxy/ProxyConfiguration +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService +instanceKlass com/mathworks/instutil/Downloader +instanceKlass com/mathworks/messageservice/MessageServiceOpaque +instanceKlass com/google/common/collect/SortedIterable +instanceKlass com/mathworks/instutil/ExecutorServiceManager +instanceKlass com/mathworks/install_impl/command/DotNetFrameworkImpl +instanceKlass com/mathworks/install/command/DotNetFramework +instanceKlass com/mathworks/instutil/RegistryImpl +instanceKlass com/mathworks/instutil/ProcessExecutorImpl +instanceKlass com/mathworks/instutil/ProcessExecutor +instanceKlass com/mathworks/instutil/MWNativeLibraryLoader +instanceKlass com/mathworks/instutil/logging/AppLogger +instanceKlass com/mathworks/instutil/WinTaskSchedulerImpl +instanceKlass com/mathworks/instutil/WinTaskScheduler +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactoryImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/a +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcessLogger +instanceKlass com/mathworks/install_impl/ApplicationSpecificCommandAdapter +instanceKlass com/mathworks/install/ApplicationSpecificCommand +instanceKlass java/lang/ProcessImpl$2 +instanceKlass com/mathworks/install_impl/InstallOptionProviderImpl +instanceKlass com/mathworks/install/InstallOptionProvider +instanceKlass com/mathworks/instutil/LocalizedHelpPathFinder +instanceKlass com/mathworks/instutil/SecurityOverride +instanceKlass com/mathworks/instutil/PlatformImpl +instanceKlass com/mathworks/install/CommandContainer +instanceKlass com/mathworks/instutil/LicenseNumberProvider +instanceKlass java/lang/Process +instanceKlass java/lang/ProcessBuilder +instanceKlass com/mathworks/install_impl/input/UpdateComponentContainerImpl +instanceKlass com/mathworks/install/UpdateComponentContainer +instanceKlass com/mathworks/install_impl/input/UpdateProductContainerImpl +instanceKlass com/mathworks/install/UpdateProductContainer +instanceKlass com/mathworks/install_impl/input/JSONInstallationFileParserImpl +instanceKlass com/mathworks/install/JSONInstallationFileParser +instanceKlass com/mathworks/install_impl/input/AbstractInstallationInputFileStrategy +instanceKlass com/mathworks/install/input/InstallationInputFileStrategy +instanceKlass com/mathworks/install_impl/input/InstallationInputFileFactoryImpl +instanceKlass com/mathworks/install/input/InstallationInputFileFactory +instanceKlass com/mathworks/install/input/ComponentSourceFactory +instanceKlass com/google/inject/internal/MoreTypes$WildcardTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$GenericArrayTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl +instanceKlass sun/reflect/generics/tree/VoidDescriptor +instanceKlass sun/reflect/generics/tree/ArrayTypeSignature +instanceKlass com/google/inject/internal/MoreTypes$ParameterizedTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$CompositeType +instanceKlass sun/reflect/generics/tree/TypeVariableSignature +instanceKlass com/google/inject/internal/asm/$Handler +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$4 +instanceKlass com/google/inject/internal/cglib/core/$Block +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$14 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$13 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$12 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$11 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$10 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$GetIndexCallback +instanceKlass com/google/inject/internal/cglib/core/$MethodInfoTransformer +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$6 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$5 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$3 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$1 +instanceKlass com/google/inject/internal/asm/$Context +instanceKlass com/google/inject/internal/asm/$Attribute +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader +instanceKlass com/google/inject/internal/asm/$ClassReader +instanceKlass com/google/inject/internal/cglib/core/$DebuggingClassWriter$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/LibraryLoader +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$9 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$8 +instanceKlass com/google/inject/internal/cglib/core/$Local +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$7 +instanceKlass com/google/inject/internal/asm/$Edge +instanceKlass com/google/inject/internal/cglib/core/$ClassEmitter$FieldInfo +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ArrayDelimiters +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ParameterTyper +instanceKlass com/google/inject/internal/cglib/core/$ProcessArrayCallback +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$2 +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$1 +instanceKlass com/google/inject/internal/cglib/core/$Customizer +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper$MethodWrapperKey +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper +instanceKlass com/google/inject/internal/cglib/core/$DuplicatesPredicate +instanceKlass com/google/inject/spi/ProvisionListener +instanceKlass com/google/inject/spi/TypeListener +instanceKlass com/google/inject/spi/TypeConverter +instanceKlass com/google/inject/spi/Message +instanceKlass org/aopalliance/intercept/MethodInterceptor +instanceKlass org/aopalliance/intercept/Interceptor +instanceKlass org/aopalliance/aop/Advice +instanceKlass com/google/inject/matcher/Matcher +instanceKlass com/google/inject/MembersInjector +instanceKlass java/lang/AssertionStatusDirectives +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$2 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$1 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils +instanceKlass com/google/inject/internal/cglib/core/$VisibilityPredicate +instanceKlass com/google/inject/internal/asm/$Frame +instanceKlass com/google/inject/internal/cglib/core/$LocalVariablesSorter$State +instanceKlass com/google/inject/internal/cglib/core/$MethodInfo +instanceKlass com/google/inject/internal/asm/$Label +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$1 +instanceKlass com/google/inject/internal/cglib/core/$Constants +instanceKlass com/google/inject/internal/asm/$Opcodes +instanceKlass com/google/inject/internal/asm/$Type +instanceKlass com/google/inject/internal/cglib/core/$Signature +instanceKlass com/google/inject/internal/cglib/core/$CollectionUtils +instanceKlass com/google/inject/internal/cglib/core/$TypeUtils +instanceKlass com/google/inject/internal/cglib/core/$ProcessSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$Transformer +instanceKlass com/google/inject/internal/cglib/core/$ObjectSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$ClassInfo +instanceKlass com/google/inject/internal/asm/$Item +instanceKlass com/google/inject/internal/asm/$ByteVector +instanceKlass com/teamdev/jxbrowser/chromium/internal/SharedMemoryLibrary +instanceKlass com/google/inject/internal/asm/$FieldVisitor +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/d +instanceKlass java/net/Socket +instanceKlass com/google/inject/internal/asm/$MethodVisitor +instanceKlass com/google/inject/internal/asm/$AnnotationVisitor +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/LatchUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/e +instanceKlass com/google/inject/internal/asm/$ClassVisitor +instanceKlass sun/net/ResourceManager +instanceKlass java/net/DatagramPacket +instanceKlass com/google/inject/internal/cglib/core/$DefaultGeneratorStrategy +instanceKlass java/net/DatagramSocket$1 +instanceKlass java/net/AbstractPlainDatagramSocketImpl$1 +instanceKlass java/net/DatagramSocketImpl +instanceKlass com/google/inject/internal/cglib/reflect/$FastClass +instanceKlass java/net/DefaultDatagramSocketImplFactory$1 +instanceKlass java/net/DefaultDatagramSocketImplFactory +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$Source +instanceKlass java/net/DatagramSocket +instanceKlass com/google/inject/internal/cglib/core/$Predicate +instanceKlass com/google/inject/internal/cglib/core/$GeneratorStrategy +instanceKlass sun/net/NetHooks +instanceKlass java/net/InetSocketAddress$InetSocketAddressHolder +instanceKlass com/google/inject/internal/cglib/core/$DefaultNamingPolicy +instanceKlass java/net/PlainSocketImpl$1 +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator +instanceKlass java/net/AbstractPlainSocketImpl$1 +instanceKlass com/google/inject/internal/cglib/core/$ClassGenerator +instanceKlass java/net/SocketImpl +instanceKlass java/net/SocketOptions +instanceKlass java/net/SocksConsts +instanceKlass java/net/ServerSocket +instanceKlass sun/net/util/IPAddressUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketUtil +instanceKlass com/teamdev/jxbrowser/chromium/Browser$b +instanceKlass com/google/inject/internal/cglib/core/$NamingPolicy +instanceKlass com/google/inject/internal/BytecodeGen +instanceKlass com/teamdev/jxbrowser/chromium/ProxyConfig +instanceKlass com/mathworks/html/jxbrowser/chromium/ProxyHandler +instanceKlass com/google/inject/Exposed +instanceKlass com/teamdev/jxbrowser/chromium/PluginManager +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMDocument +instanceKlass com/teamdev/jxbrowser/chromium/dom/SearchContext +instanceKlass com/google/inject/internal/ProviderMethod +instanceKlass com/google/inject/spi/ProvidesMethodBinding +instanceKlass com/google/inject/spi/ProviderWithExtensionVisitor +instanceKlass com/teamdev/jxbrowser/chromium/DownloadItem +instanceKlass com/teamdev/jxbrowser/chromium/Callback +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadListener +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserListener +instanceKlass com/google/inject/spi/ProviderLookup$1 +instanceKlass com/google/inject/spi/ProviderWithDependencies +instanceKlass com/teamdev/jxbrowser/chromium/CacheStorage +instanceKlass com/google/inject/spi/ProviderLookup +instanceKlass com/teamdev/jxbrowser/chromium/CookieStorage +instanceKlass com/google/inject/spi/Dependency +instanceKlass com/teamdev/jxbrowser/chromium/Browser +instanceKlass com/google/inject/internal/Nullability +instanceKlass com/mathworks/install_impl/archive/zip/commonscompress/CommonsCompressArchiveFactory +instanceKlass com/mathworks/install/archive/ArchiveFactory +instanceKlass com/mathworks/install_impl/DefaultProductCorrelatorImpl +instanceKlass com/mathworks/install/ProductCorrelator +instanceKlass com/mathworks/install/udc/NoOpUsageDataCollectorImpl +instanceKlass com/mathworks/html/jxbrowser/chromium/MWNetworkDelegate +instanceKlass com/mathworks/install/udc/UsageDataCollector +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultNetworkDelegate +instanceKlass com/mathworks/install_impl/InstallerDownloadInfoContainerImpl +instanceKlass com/mathworks/install/InstallerDownloadInfoContainer +instanceKlass com/teamdev/jxbrowser/chromium/internal/BrowserContextIDGenerator +instanceKlass com/mathworks/install_impl/XMLParseStrategyForInstall +instanceKlass com/mathworks/install/XMLParseStrategy +instanceKlass com/mathworks/install_impl/ProductDownloaderImpl +instanceKlass com/mathworks/install/ProductDownloader +instanceKlass com/mathworks/install_impl/ContentOptimizerImpl +instanceKlass com/teamdev/jxbrowser/chromium/FormData +instanceKlass com/teamdev/jxbrowser/chromium/PostData +instanceKlass com/mathworks/install/ContentOptimizer +instanceKlass com/mathworks/install_impl/XMLInstallationFileParserImpl +instanceKlass com/teamdev/jxbrowser/chromium/HttpHeaders +instanceKlass com/mathworks/install/input/XMLInstallationFileParser +instanceKlass com/mathworks/install_impl/InstalledProductDataVersionImpl +instanceKlass com/mathworks/install/InstalledProductDataVersion +instanceKlass com/mathworks/install_impl/InstallConfigurationPersistenceImpl +instanceKlass com/teamdev/jxbrowser/chromium/NetworkService +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelAdapter +instanceKlass com/mathworks/net/hyperlink/HyperlinkProvider +instanceKlass com/mathworks/install/Installer +instanceKlass com/mathworks/install/SoftwareManager +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelAdapter +instanceKlass com/mathworks/install/InstallConfigurationPersistence +instanceKlass com/mathworks/install/service/ServiceFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/c +instanceKlass com/mathworks/install/InstallerRequirements +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumEventQueue +instanceKlass com/mathworks/instutil/IO +instanceKlass com/mathworks/instutil/FolderUtils +instanceKlass com/teamdev/jxbrowser/chromium/ZoomService +instanceKlass com/mathworks/install/command/CommandFactory +instanceKlass com/mathworks/install/Product +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/b +instanceKlass com/google/inject/util/Providers$ConstantProvider +instanceKlass com/google/inject/util/Providers +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerAdapter +instanceKlass com/google/inject/Inject +instanceKlass javax/inject/Inject +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMembers +instanceKlass com/teamdev/jxbrowser/chromium/internal/FileUtil +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMember +instanceKlass com/google/inject/spi/InjectionPoint +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor$a +instanceKlass com/mathworks/install_impl/ProductInstallerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor +instanceKlass com/mathworks/install_impl/status/InstallStatusObserverAdapter +instanceKlass javax/inject/Named +instanceKlass com/google/inject/Key$AnnotationInstanceStrategy +instanceKlass com/google/common/util/concurrent/Uninterruptibles +instanceKlass com/google/common/base/Platform +instanceKlass java/text/DontCareFieldPosition$1 +instanceKlass com/google/common/base/Stopwatch +instanceKlass java/text/CalendarBuilder +instanceKlass com/google/common/util/concurrent/ExecutionList +instanceKlass com/google/common/util/concurrent/AbstractFuture +instanceKlass com/google/common/util/concurrent/ListenableFuture +instanceKlass com/google/common/cache/LocalCache$LoadingValueReference +instanceKlass java/lang/annotation/Documented +instanceKlass java/lang/annotation/Inherited +instanceKlass java/lang/annotation/Target +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler +instanceKlass sun/reflect/annotation/AnnotationParser$1 +instanceKlass sun/reflect/annotation/ExceptionProxy +instanceKlass sun/reflect/annotation/AnnotationType$1 +instanceKlass java/lang/annotation/Retention +instanceKlass javax/inject/Qualifier +instanceKlass com/google/inject/BindingAnnotation +instanceKlass javax/inject/Scope +instanceKlass com/google/inject/ScopeAnnotation +instanceKlass com/teamdev/jxbrowser/chromium/ao +instanceKlass com/google/inject/internal/Annotations$AnnotationChecker +instanceKlass com/google/inject/internal/Annotations$3 +instanceKlass com/google/inject/internal/Annotations +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/l +instanceKlass com/google/inject/name/NamedImpl +instanceKlass com/google/inject/name/Named +instanceKlass com/google/inject/name/Names +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/k +instanceKlass com/mathworks/install/status/InstallStatusObserver +instanceKlass com/mathworks/install_impl/XMLParserFactoryImpl +instanceKlass com/mathworks/install/XMLParserFactory +instanceKlass com/mathworks/install_impl/ComponentInstallerImpl +instanceKlass com/mathworks/install/ComponentInstaller +instanceKlass com/teamdev/jxbrowser/chromium/al +instanceKlass com/mathworks/install_impl/ComponentContainerImpl +instanceKlass com/mathworks/install/ComponentContainer +instanceKlass com/teamdev/jxbrowser/chromium/an +instanceKlass com/mathworks/install_impl/ProductContainerImpl +instanceKlass com/teamdev/jxbrowser/chromium/am +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcess +instanceKlass com/google/inject/internal/Scoping +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelStream +instanceKlass com/google/inject/internal/InternalFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamListener +instanceKlass com/google/inject/spi/InstanceBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Server +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC$a +instanceKlass com/google/inject/spi/ConstructorBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChromiumProcessListener +instanceKlass com/google/inject/internal/DelayedInitialize +instanceKlass com/google/inject/spi/ProviderKeyBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerListener +instanceKlass com/google/inject/spi/ProviderInstanceBinding +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Sender +instanceKlass com/google/inject/spi/HasDependencies +instanceKlass com/google/inject/spi/LinkedKeyBinding +instanceKlass com/google/inject/spi/UntargettedBinding +instanceKlass com/teamdev/jxbrowser/chromium/BrowserContext +instanceKlass com/google/inject/internal/BindingImpl +instanceKlass com/google/common/base/Suppliers$MemoizingSupplier +instanceKlass com/google/inject/Key$1 +instanceKlass com/google/inject/Key$AnnotationStrategy +instanceKlass com/mathworks/install/ProductContainer +instanceKlass sun/nio/fs/WindowsSecurity +instanceKlass com/google/common/base/Optional +instanceKlass com/google/inject/Provides +instanceKlass sun/nio/fs/AbstractAclFileAttributeView +instanceKlass sun/nio/fs/DynamicFileAttributeView +instanceKlass java/nio/file/attribute/AclFileAttributeView +instanceKlass java/nio/file/attribute/FileOwnerAttributeView +instanceKlass sun/nio/fs/WindowsLinkSupport +instanceKlass com/google/inject/internal/ProviderMethodsModule$Signature +instanceKlass sun/nio/fs/WindowsFileSystemProvider$1 +instanceKlass com/google/common/collect/ImmutableMap$Builder +instanceKlass com/google/inject/internal/MoreTypes +instanceKlass com/google/inject/TypeLiteral +instanceKlass com/google/inject/spi/ModuleAnnotatedMethodScanner +instanceKlass javax/inject/Singleton +instanceKlass com/google/inject/spi/ElementSource +instanceKlass com/teamdev/jxbrowser/chromium/ProductInfo +instanceKlass com/google/inject/spi/ScopeBinding +instanceKlass com/google/inject/Scopes$2 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumBuild +instanceKlass com/google/inject/Scopes$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserVersionInfo +instanceKlass com/google/common/collect/AbstractMapEntry +instanceKlass com/teamdev/jxbrowser/chromium/NetworkDelegate +instanceKlass com/google/common/collect/LinkedHashMultimap$ValueSetLink +instanceKlass com/google/common/collect/SetMultimap +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserContextRegistry +instanceKlass com/google/inject/internal/CycleDetectingLock +instanceKlass com/mathworks/html/jxbrowser/chromium/ChromiumLocaleUtils +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DebugWindowListener +instanceKlass com/google/inject/Provider +instanceKlass javax/inject/Provider +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DefaultDebugListener +instanceKlass com/google/inject/internal/SingletonScope +instanceKlass com/teamdev/jxbrowser/chromium/internal/Environment +instanceKlass com/teamdev/jxbrowser/chromium/DownloadHandler +instanceKlass com/google/inject/Scope +instanceKlass com/google/inject/Scopes +instanceKlass com/teamdev/jxbrowser/chromium/PrintHandler +instanceKlass com/google/inject/Singleton +instanceKlass com/teamdev/jxbrowser/chromium/DialogHandler +instanceKlass com/google/inject/spi/Elements$ModuleInfo +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserViewBuilder +instanceKlass com/google/inject/PrivateModule +instanceKlass com/teamdev/jxbrowser/chromium/BrowserPreferences +instanceKlass com/google/inject/internal/util/StackTraceElements$InMemoryStackTraceElement +instanceKlass com/google/inject/internal/util/StackTraceElements +instanceKlass com/google/inject/spi/ModuleSource +instanceKlass com/google/inject/internal/InternalFlags$1 +instanceKlass com/google/inject/internal/InternalFlags +instanceKlass com/google/inject/internal/ProviderMethodsModule +instanceKlass com/google/common/collect/Hashing +instanceKlass com/google/inject/internal/AbstractBindingBuilder +instanceKlass com/google/inject/binder/ConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedElementBuilder +instanceKlass com/google/inject/binder/AnnotatedConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedBindingBuilder +instanceKlass com/google/inject/binder/LinkedBindingBuilder +instanceKlass com/google/inject/binder/ScopedBindingBuilder +instanceKlass com/google/inject/spi/Elements$RecordingBinder +instanceKlass com/google/inject/PrivateBinder +instanceKlass com/google/inject/Binding +instanceKlass com/google/inject/spi/DefaultBindingTargetVisitor +instanceKlass com/google/inject/spi/BindingTargetVisitor +instanceKlass com/google/inject/spi/Elements +instanceKlass com/google/inject/internal/InjectorShell$RootModule +instanceKlass java/util/concurrent/ConcurrentLinkedQueue$Node +instanceKlass com/google/common/cache/Weigher +instanceKlass com/google/common/cache/LocalCache$1 +instanceKlass com/google/common/util/concurrent/ListeningScheduledExecutorService +instanceKlass com/google/common/util/concurrent/ListeningExecutorService +instanceKlass com/google/common/util/concurrent/MoreExecutors +instanceKlass com/google/common/cache/LocalCache$ReferenceEntry +instanceKlass com/google/common/cache/CacheLoader +instanceKlass com/google/common/cache/LocalCache$LocalManualCache +instanceKlass com/google/inject/internal/WeakKeySet$1 +instanceKlass com/google/common/cache/LocalCache$StrongValueReference +instanceKlass com/google/common/cache/LocalCache$ValueReference +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$1 +instanceKlass com/mathworks/util/TypeFilter$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileTypeFinder +instanceKlass com/google/common/cache/CacheBuilder$2 +instanceKlass com/google/common/cache/CacheStats +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2$1 +instanceKlass com/google/common/base/Suppliers$SupplierOfInstance +instanceKlass com/google/common/base/Suppliers +instanceKlass com/google/common/cache/CacheBuilder$1 +instanceKlass com/google/common/cache/AbstractCache$StatsCounter +instanceKlass com/google/common/cache/LoadingCache +instanceKlass com/google/common/cache/Cache +instanceKlass com/google/common/base/Supplier +instanceKlass com/google/common/cache/CacheBuilder +instanceKlass com/google/common/cache/RemovalListener +instanceKlass com/google/inject/internal/WeakKeySet +instanceKlass com/google/inject/internal/State$1 +instanceKlass com/google/inject/internal/InheritingState +instanceKlass com/google/inject/internal/ProcessedBindingData +instanceKlass com/google/inject/spi/Element +instanceKlass com/google/inject/spi/DefaultElementVisitor +instanceKlass com/google/inject/internal/State +instanceKlass com/google/inject/internal/InjectorShell$Builder +instanceKlass com/google/inject/internal/Initializable +instanceKlass com/google/inject/internal/Initializer +instanceKlass sun/awt/geom/Edge +instanceKlass sun/awt/geom/ChainEnd +instanceKlass sun/awt/geom/CurveLink +instanceKlass sun/awt/geom/AreaOp$1 +instanceKlass com/google/common/collect/CollectPreconditions +instanceKlass sun/awt/geom/AreaOp +instanceKlass com/google/common/collect/ImmutableCollection$Builder +instanceKlass sun/awt/geom/Curve +instanceKlass java/awt/geom/Area +instanceKlass com/google/inject/internal/util/SourceProvider +instanceKlass com/google/inject/Key +instanceKlass com/google/inject/internal/Errors$Converter +instanceKlass com/google/common/collect/Platform +instanceKlass com/google/inject/internal/Errors +instanceKlass com/jidesoft/grid/HasFocusCellRenderer +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$RowLoadRequest +instanceKlass com/mathworks/util/TypeFilter$TargetedRequest +instanceKlass com/jidesoft/swing/NavigationComponent +instanceKlass com/google/inject/internal/util/Stopwatch +instanceKlass com/google/inject/internal/ContextualCallable +instanceKlass com/google/inject/Injector +instanceKlass com/google/inject/internal/InternalInjectorCreator +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUIDelegate$Cell +instanceKlass com/google/inject/Guice +instanceKlass com/google/inject/spi/BindingScopingVisitor +instanceKlass com/jidesoft/grid/HeaderStyleModel +instanceKlass com/google/inject/Binder +instanceKlass com/mathworks/instutil/Machine +instanceKlass com/mathworks/instutil/Registry +instanceKlass com/mathworks/instutil/system/HostIdProvider +instanceKlass com/mathworks/mlwidgets/workspace/MatlabCustomClassRegistry +instanceKlass com/google/inject/util/Modules$RealOverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules$EmptyModule +instanceKlass com/google/inject/spi/ElementVisitor +instanceKlass com/google/inject/util/Modules$OverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules +instanceKlass com/mathworks/install/archive/ArchiveInputStreamExtractor +instanceKlass com/mathworks/install/archive/ArchiveFileExtractor +instanceKlass com/mathworks/install/archive/zip/commonscompress/ArchiveEntryExtractor +instanceKlass com/mathworks/install/InstallOption +instanceKlass com/jidesoft/plaf/vsnet/VsnetUtils +instanceKlass com/mathworks/install/command/Command +instanceKlass com/mathworks/install_impl/InstallConfigurationAdapter +instanceKlass com/mathworks/install/InstalledProductData +instanceKlass com/mathworks/install/ProductInstaller +instanceKlass com/mathworks/install/InstallerBuilder +instanceKlass com/mathworks/install/SoftwareManagerBuilder +instanceKlass java/awt/geom/Path2D$Iterator +instanceKlass sun/dc/pr/Rasterizer$ConsumerDisposer +instanceKlass com/mathworks/install/DownloaderBuilderFactory +instanceKlass sun/dc/pr/PathDasher$1 +instanceKlass sun/dc/pr/PathDasher +instanceKlass com/mathworks/install/DefaultDirectoryProvider +instanceKlass com/mathworks/instutil/MinimalProducts +instanceKlass sun/awt/geom/PathConsumer2D +instanceKlass com/mathworks/install/InstallerFactory +instanceKlass sun/dc/pr/PathStroker$1 +instanceKlass sun/dc/pr/PathStroker +instanceKlass com/mathworks/install/InstalledProductDataFactory +instanceKlass com/mathworks/install/InstallConfiguration +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheDecorator +instanceKlass com/mathworks/cmlink/management/cache/NullCmStatusCache +instanceKlass com/google/inject/AbstractModule +instanceKlass com/mathworks/cmlink/management/queue/CMQueue +instanceKlass com/mathworks/cmlink/util/interactor/NullTerminator +instanceKlass com/google/inject/Module +instanceKlass sun/dc/pr/PathFiller$1 +instanceKlass sun/dc/pr/PathFiller +instanceKlass sun/dc/path/PathConsumer +instanceKlass com/mathworks/cmlink/util/system/CommandInstalledChecker +instanceKlass sun/dc/pr/Rasterizer +instanceKlass sun/java2d/pipe/AATileGenerator +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace +instanceKlass com/mathworks/cmlink/util/system/PersistentAvailabilityCheck +instanceKlass com/mathworks/install_impl/InstalledProductFactory$1 +instanceKlass com/mathworks/cmlink/util/system/AvailabilityCheck +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNExecutor +instanceKlass com/mathworks/install_impl/InstalledProductFactory$Task +instanceKlass com/mathworks/install_impl/InstalledProductFactory +instanceKlass com/mathworks/addons_product/ProductManagerUtils +instanceKlass com/mathworks/addons_product/MatlabDesktopStrategy +instanceKlass com/mathworks/cmlink/implementations/svncore/SVNCoreAdapterFactoryDecorator +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategy +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/NonBlockingMessage +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategyFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/CommonMessage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/Message +instanceKlass org/netbeans/editor/DrawGraphics$GraphicsDG$1 +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService$WrappedCallable +instanceKlass com/mathworks/cmlink/util/CMExecutorService$2 +instanceKlass com/mathworks/cmlink/util/CMExecutorService$1 +instanceKlass com/mathworks/cmlink/util/CMExecutorService +instanceKlass com/mathworks/cmlink/management/queue/CMAdapterFactoryQueued$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/logging/JxBrowserChromiumLogger +instanceKlass com/mathworks/html/HtmlPanelSupport +instanceKlass com/mathworks/html/jxbrowser/chromium/NavigationHelper +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserChromiumFactory +instanceKlass java/util/Formattable +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils +instanceKlass com/mathworks/mlwidgets/html/ChromiumConfig$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager$ZoomLevel +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager +instanceKlass com/mathworks/addons_common/notificationframework/StartupCacheInitializationTask +instanceKlass com/mathworks/addons_toolbox/AddOnInstallationObserverAdapter +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder$1 +instanceKlass com/mathworks/appmanagement/addons/AppManagerUtils +instanceKlass com/mathworks/html/ProxySettings$1 +instanceKlass com/mathworks/addons_zip/tasks/AddOnInstallationObservers +instanceKlass com/mathworks/html/ProxySettings +instanceKlass com/mathworks/cmlink/implementations/localcm/resources/SQLiteCMResources +instanceKlass com/teamdev/jxbrowser/chromium/LoadHandler +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IAbortPoll +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IProgressReporter +instanceKlass com/mathworks/html/HtmlActionGroup +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMBase +instanceKlass com/mathworks/addons_common/AddonCustomMetadata +instanceKlass java/nio/file/SimpleFileVisitor +instanceKlass org/netbeans/editor/DrawEngine$DrawInfo +instanceKlass org/netbeans/editor/DrawContext +instanceKlass com/mathworks/addons_zip/utils/ZipManagerUtils +instanceKlass org/netbeans/editor/DrawEngine +instanceKlass com/mathworks/addons_app/AppManager +instanceKlass org/netbeans/editor/DrawGraphics$AbstractDG +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$1 +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader +instanceKlass com/mathworks/widgets/text/MWEditorUIUtils +instanceKlass com/mathworks/toolboxmanagement/ToolboxContributedToolsLoader +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserverCollection +instanceKlass com/mathworks/toolboxmanagement/DefaultToolboxManagementObserver +instanceKlass com/mathworks/toolboxmanagement/ExecutorServiceFactory +instanceKlass com/mathworks/toolboxmanagement/CustomToolboxManager +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/resources/SVNKitResources +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserver +instanceKlass com/mathworks/addons_toolbox/ToolboxManagerForAddOns +instanceKlass com/mathworks/cmlink/util/adapter/AdapterFactoryComparator +instanceKlass com/mathworks/html/ProxyAuthenticationFailureHandler +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/OpenToLineColumn +instanceKlass com/mathworks/html/LightweightBrowser +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService +instanceKlass com/mathworks/addons_common/DocumentationProvider +instanceKlass com/mathworks/cmlink/util/CMAdapterFactoryDecorator +instanceKlass com/mathworks/services/lmgr/FeatureInfoList +instanceKlass com/mathworks/addons_product/CommandBuilder +instanceKlass com/mathworks/addons_product/ProductManager +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryListCollection +instanceKlass com/mathworks/cmlink/management/registration/FactoryHidingFactoryList +instanceKlass com/mathworks/cmlink/management/registration/QueuedCMAdapterFactoryList +instanceKlass com/mathworks/supportsoftwarematlabmanagement/api/UninstallAPI +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCILogger +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader$SccProviderInstallRegEntry +instanceKlass com/mathworks/install_task/BackgroundTask +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$2 +instanceKlass com/mathworks/supportsoftwareinstaller/api/InstallAPI +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$3 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$1 +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCIRegistryReader +instanceKlass java/awt/PrintGraphics +instanceKlass java/awt/print/PrinterGraphics +instanceKlass com/mathworks/cmlink/management/registration/MSSCCICMAdapterFactoryList +instanceKlass com/mathworks/hwsmanagement/HwsManager +instanceKlass com/mathworks/supportsoftwareinstaller/addons/SupportSoftwareInstallerObserver +instanceKlass sun/swing/ImageCache$Entry +instanceKlass com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey +instanceKlass com/mathworks/cmlink/api/version/r14a/CMAdapterFactory +instanceKlass com/sun/java/swing/plaf/windows/AnimationController +instanceKlass com/mathworks/cmlink/api/version/r16b/CMAdapterFactory +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMAdapterFactory +instanceKlass java/awt/geom/RectIterator +instanceKlass java/awt/geom/PathIterator +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/DepthAwareCaller +instanceKlass com/mathworks/addons_common/InstalledAddon +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/Caller +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterCaller +instanceKlass com/mathworks/addons_zip/ZipManager +instanceKlass com/mathworks/addons_mlconnector/MLConnectorManager +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNAdapterFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$1 +instanceKlass com/mathworks/cmlink/api/StatusListener +instanceKlass java/awt/GradientPaintContext +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/DefaultMethodInvocation +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterFactoryWrapper +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$1 +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserverImpl +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache$LazyHolder +instanceKlass java/net/URLEncoder +instanceKlass java/net/URLDecoder +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserver +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache +instanceKlass java/awt/datatransfer/FlavorListener +instanceKlass org/eclipse/jgit/transport/Transport +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService +instanceKlass com/mathworks/mde/liveeditor/BackingStoreUpdater +instanceKlass com/mathworks/mde/liveeditor/LiveEditorSectionsInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorFunctionsInfo +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport +instanceKlass com/mathworks/mde/liveeditor/LiveEditor +instanceKlass com/mathworks/mwswing/MJFileChooserPerPlatform +instanceKlass com/mathworks/mwswing/NativeDialogLauncher +instanceKlass org/eclipse/jgit/transport/PackTransport +instanceKlass org/eclipse/jgit/transport/WalkTransport +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument +instanceKlass sun/java2d/opengl/OGLGraphicsConfig +instanceKlass sun/java2d/pipe/hw/AccelGraphicsConfig +instanceKlass sun/java2d/pipe/hw/BufferedContextProvider +instanceKlass com/mathworks/addons/launchers/InitializeCacheAndRegisterAddonsAndAddSupportPackages +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher$IgnoresAncestorKeyBindings +instanceKlass sun/awt/SunGraphicsCallback +instanceKlass javax/swing/RepaintManager$4 +instanceKlass org/eclipse/jgit/lib/Repository +instanceKlass javax/swing/RepaintManager$2$1 +instanceKlass com/mathworks/html/PageChangedListener +instanceKlass javax/swing/RepaintManager$3 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$2 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$1 +instanceKlass org/eclipse/jgit/transport/PacketLineIn +instanceKlass com/mathworks/widgets/text/fold/FoldInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory +instanceKlass org/eclipse/jgit/transport/PacketLineOut +instanceKlass com/mathworks/mde/liveeditor/LiveEditorInitializationManager +instanceKlass com/mathworks/widgets/text/mcode/MFoldInfoCollector +instanceKlass com/mathworks/mde/desk/MLDesktop$7$1 +instanceKlass com/mathworks/mde/cmdwin/CmdWinSyntaxWrapper +instanceKlass com/mathworks/jmi/MatlabEvent +instanceKlass org/eclipse/jgit/util/FS +instanceKlass com/mathworks/mwswing/MJScrollPane$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$16 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$15 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$13 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$12 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$11 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$PreferenceListener +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17 +instanceKlass org/eclipse/jgit/transport/CredentialsProvider +instanceKlass com/mathworks/mde/cmdhist/AltHistory$31 +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$DragListener +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$2 +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$1 +instanceKlass java/security/Timestamp +instanceKlass sun/security/timestamp/TimestampToken +instanceKlass sun/security/pkcs/PKCS9Attributes +instanceKlass ca/odell/glazedlists/impl/gui/ThreadProxyEventList$UpdateRunner +instanceKlass ca/odell/glazedlists/swing/GlazedListsSwing +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$HistoryTableFormat +instanceKlass com/mathworks/cmlink/implementations/git/GitAdapterFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$TimeoutTask +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$DaemonThreadFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/io/ISVNConnectionListener +instanceKlass org/tmatesoft/svn/core/io/ISVNSession +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeNode +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$WriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$ReadLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$Sync +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock +instanceKlass ca/odell/glazedlists/matchers/AbstractMatcherEditor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecordListListener +instanceKlass org/tmatesoft/svn/core/wc/admin/SVNAdminBasicClient +instanceKlass org/tmatesoft/svn/core/wc/ISVNEventHandler +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandSaver +instanceKlass org/tmatesoft/svn/core/wc/SVNBasicClient +instanceKlass org/tmatesoft/svn/core/wc/SVNClientManager +instanceKlass org/tmatesoft/svn/core/wc/ISVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$SimplePasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$3 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$2 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$1 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetStringCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetKeyringInfoCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationDoneCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNMacOsKeychain +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$WinCryptPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$IPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWinCrypt +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptions +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$1 +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$CacheAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$DumbAuthenticationProvider +instanceKlass javax/net/ssl/TrustManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNProxyManager +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/auth/SVNAuthentication +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorageOptions +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNSSHHostVerifier +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNSSLPasspharsePromptSupport +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNCompositeConfigFile +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNConfigFile +instanceKlass org/tmatesoft/svn/core/wc/ISVNMerger +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNOptions +instanceKlass org/tmatesoft/svn/core/wc/ISVNMergerFactory +instanceKlass com/sun/jna/Structure$ByReference +instanceKlass com/sun/jna/Function$PostCallRead +instanceKlass java/lang/reflect/AnnotatedType +instanceKlass com/sun/jna/Library$Handler$FunctionInfo +instanceKlass com/sun/jna/WeakIdentityHashMap +instanceKlass com/sun/jna/Structure$StructField +instanceKlass com/sun/jna/Structure$LayoutInfo +instanceKlass com/sun/jna/NativeMappedConverter +instanceKlass com/sun/jna/TypeConverter +instanceKlass java/lang/reflect/Proxy$1 +instanceKlass sun/nio/ch/Util$5 +instanceKlass sun/nio/ch/FileChannelImpl$Unmapper +instanceKlass java/nio/channels/FileChannel$MapMode +instanceKlass org/apache/commons/io/filefilter/IOFileFilter +instanceKlass org/apache/commons/io/FileUtils +instanceKlass com/sun/jna/FunctionMapper +instanceKlass com/sun/jna/NativeLibrary +instanceKlass com/sun/jna/Library$Handler +instanceKlass com/sun/jna/Native$7 +instanceKlass com/sun/jna/Native$2 +instanceKlass com/sun/jna/Structure$FFIType$FFITypes +instanceKlass com/sun/jna/Native$ffi_callback +instanceKlass com/sun/jna/PointerType +instanceKlass com/sun/jna/NativeMapped +instanceKlass com/sun/jna/WString +instanceKlass com/sun/jna/CallbackProxy +instanceKlass com/sun/jna/Callback +instanceKlass com/sun/jna/Structure$ByValue +instanceKlass com/sun/jna/ToNativeContext +instanceKlass com/sun/jna/FromNativeContext +instanceKlass com/sun/jna/FromNativeConverter +instanceKlass com/sun/jna/ToNativeConverter +instanceKlass com/sun/jna/Structure +instanceKlass com/sun/jna/Pointer +instanceKlass java/io/DeleteOnExitHook$1 +instanceKlass java/io/DeleteOnExitHook +instanceKlass java/io/File$TempDirectory +instanceKlass com/sun/jna/Platform +instanceKlass com/sun/jna/Native$5 +instanceKlass com/sun/jna/Native$1 +instanceKlass com/sun/jna/Callback$UncaughtExceptionHandler +instanceKlass com/sun/jna/Native +instanceKlass com/sun/jna/Version +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsCFLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNCLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWin32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNKernel32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWinCryptLibrary +instanceKlass com/sun/jna/win32/StdCallLibrary +instanceKlass com/sun/jna/win32/StdCall +instanceKlass com/sun/jna/AltCallingConvention +instanceKlass org/tmatesoft/svn/core/internal/util/jna/JNALibraryLoader +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWin32Util +instanceKlass org/tmatesoft/svn/util/SVNLogType +instanceKlass com/sun/jna/Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNJNAUtil +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/wc/SVNWCUtil +instanceKlass org/tmatesoft/svn/core/wc/ISVNOptions +instanceKlass org/tmatesoft/svn/core/io/ISVNTunnelProvider +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer$AuthenticatingClientManager +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitCanceller +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnection +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnector +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$1 +instanceKlass com/mathworks/util/CircularBuffer +instanceKlass com/mathworks/services/SystemServices +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecord +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap$TableEntry +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$ProductionPrefsProvider +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$PrefsProvider +instanceKlass org/tmatesoft/svn/core/io/ISVNReporter +instanceKlass org/tmatesoft/svn/core/io/SVNRepository +instanceKlass org/tmatesoft/svn/core/io/SVNRepositoryFactory +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/NoUpgradeSVNAdminFactorySelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminArea +instanceKlass java/time/Instant +instanceKlass java/time/temporal/TemporalAdjuster +instanceKlass java/time/temporal/Temporal +instanceKlass java/time/temporal/TemporalAccessor +instanceKlass java/nio/file/FileVisitor +instanceKlass java/nio/file/FileStore +instanceKlass java/nio/file/attribute/FileAttributeView +instanceKlass java/nio/file/attribute/AttributeView +instanceKlass java/nio/file/attribute/UserPrincipal +instanceKlass java/util/function/BiPredicate +instanceKlass com/mathworks/mde/cmdhist/AltHistory$FocusAppearanceUpdater +instanceKlass java/nio/file/attribute/FileTime +instanceKlass java/nio/file/CopyOption +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/CategorizedView +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/ViewBuilder +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$4 +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$SpecialCharacter +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$AnnotatedInfo +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNClassLoader +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory$DefaultSelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory +instanceKlass org/tmatesoft/svn/util/SVNDebugLog +instanceKlass org/tmatesoft/svn/util/SVNDebugLogAdapter +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/BooleanMapUtil +instanceKlass org/tmatesoft/svn/util/ISVNDebugLog +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/logging/SVNKitLogFactory +instanceKlass com/mathworks/cmlink/api/CMAdapter +instanceKlass com/mathworks/cmlink/api/CMRepository +instanceKlass com/mathworks/cmlink/api/CMInteractor +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/ISVNAdminAreaFactorySelector +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitAdapterFactory +instanceKlass com/mathworks/cmlink/api/CMAdapterFactory +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$7 +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMRepository +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/Cancellable +instanceKlass org/tmatesoft/svn/core/ISVNCanceller +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/BuiltInSVNAdapterFactory +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r11b/R11bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r14a/R14aToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r16b/R16bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/InternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/management/registration/OsgiCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/SingletonCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingTerminator$1 +instanceKlass com/mathworks/cmlink/management/pool/shared/CMMonitorDispatcher +instanceKlass com/mathworks/widgets/grouptable/ColorStyle$1 +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects$CombinedToolTipGenerator +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingExceptionHandler +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingStatusBroadcaster +instanceKlass com/mathworks/util/collections/CopyOnWriteList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingProgressIndicator +instanceKlass com/mathworks/cmlink/management/pool/shared/SharedInteractor +instanceKlass com/mathworks/cmlink/api/TerminationListener +instanceKlass com/mathworks/cmlink/management/pool/shared/CMProcessTerminator +instanceKlass com/mathworks/cmlink/management/pool/AutoRefreshedRecord +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor$1 +instanceKlass java/util/concurrent/SynchronousQueue$TransferStack$SNode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$PathToolTipGenerator +instanceKlass java/util/concurrent/SynchronousQueue$Transferer +instanceKlass com/mathworks/toolbox/shared/computils/threads/CountingThreadFactory +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/PreferenceManager +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCache +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheQueries +instanceKlass com/mathworks/cmlink/management/cache/RootSearchingCmStatusCacheFactory +instanceKlass com/mathworks/cmlink/management/pool/adapter/PrefBackedAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/util/adapter/transformer/MutableTransformableCMAdapterFactoryProvider$NullAdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/transformer/AdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProviderDecorator +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheEntry +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheProvider +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemFilter +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/management/pool/CmStatusCacheProvider +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemUtils +instanceKlass com/mathworks/cmlink/management/pool/shared/SingletonPooledCmStatusCacheProvider +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance$StatusToolTipGenerator +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects +instanceKlass com/mathworks/util/Disposable$Parent +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger$MyActionListener +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger +instanceKlass sun/text/normalizer/ReplaceableString +instanceKlass sun/text/normalizer/Replaceable +instanceKlass sun/text/normalizer/UCharacterIterator +instanceKlass sun/text/CollatorUtilities +instanceKlass java/text/CollationElementIterator +instanceKlass sun/text/normalizer/UTF16 +instanceKlass sun/text/ComposedCharIter +instanceKlass java/text/EntryPair +instanceKlass java/text/PatternEntry +instanceKlass java/text/PatternEntry$Parser +instanceKlass java/text/MergeCollation +instanceKlass sun/text/normalizer/NormalizerImpl$DecomposeArgs +instanceKlass sun/text/normalizer/UnicodeSet +instanceKlass sun/text/normalizer/UnicodeMatcher +instanceKlass sun/text/normalizer/CharTrie$FriendAgent +instanceKlass sun/text/normalizer/Trie +instanceKlass sun/text/normalizer/NormalizerImpl$AuxTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$NormTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$FCDTrieImpl +instanceKlass sun/text/normalizer/Trie$DataManipulate +instanceKlass sun/text/normalizer/ICUBinary +instanceKlass sun/text/normalizer/NormalizerDataReader +instanceKlass sun/text/normalizer/ICUBinary$Authenticate +instanceKlass sun/text/normalizer/ICUData +instanceKlass sun/text/normalizer/NormalizerImpl +instanceKlass sun/text/UCompactIntArray +instanceKlass sun/text/IntHashtable +instanceKlass java/text/RBCollationTables$BuildAPI +instanceKlass java/text/RBTableBuilder +instanceKlass java/text/RBCollationTables +instanceKlass java/text/Collator +instanceKlass com/mathworks/fileutils/UIFileUtils$NameTokenizer +instanceKlass com/mathworks/fileutils/UIFileUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$GrayedOutStyle +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1$1 +instanceKlass com/mathworks/widgets/grouptable/ColorStyle +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$2 +instanceKlass com/mathworks/widgets/grouptable/RowComparator +instanceKlass com/mathworks/widgets/grouptable/OldAscendingSortComparator +instanceKlass com/mathworks/widgets/grouptable/AscendingSortComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection +instanceKlass com/mathworks/jmi/AWTUtilities$WatchedRunnable +instanceKlass com/mathworks/jmi/AWTUtilities$WatchDog +instanceKlass com/mathworks/jmi/AWTUtilities +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$3 +instanceKlass java/awt/EventQueue$4 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$CategoryActionsProvider +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryPopupListenerShower +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteMenuContributor +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandToolSet$FavoriteToolTipContentProvider +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$7 +instanceKlass com/mathworks/mde/desk/MLDesktop$9 +instanceKlass com/mathworks/mde/desk/MLDesktop$6 +instanceKlass com/mathworks/mde/desk/MLDesktop$18 +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$RestoreData +instanceKlass java/awt/SequencedEvent$1 +instanceKlass sun/awt/AWTAccessor$SequencedEventAccessor +instanceKlass com/mathworks/mde/cmdhist/CommandStyleInfo +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointRenderUtils +instanceKlass java/awt/GridBagLayoutInfo +instanceKlass javax/swing/JTable$5 +instanceKlass com/jidesoft/swing/StyleRange +instanceKlass com/jidesoft/swing/StyledLabelBuilder +instanceKlass com/jidesoft/grid/HeaderLineWrapModel +instanceKlass com/mathworks/mde/explorer/Explorer$19 +instanceKlass com/mathworks/toolstrip/impl/ToolstripSectionComponentWithHeader$1 +instanceKlass com/mathworks/toolstrip/plaf/SplitButtonUI$Layout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$1 +instanceKlass com/google/common/collect/Iterators$2 +instanceKlass com/google/common/collect/PeekingIterator +instanceKlass com/google/common/collect/Iterators +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$Section +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout$Sizes +instanceKlass javax/swing/SizeRequirements +instanceKlass com/mathworks/jmi/NativeWindows +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1 +instanceKlass org/openide/util/WeakListenerImpl +instanceKlass org/openide/util/WeakListeners +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireEnabler +instanceKlass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange +instanceKlass javax/accessibility/AccessibleTableModelChange +instanceKlass com/jidesoft/grid/JideTable$s_ +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$2 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyFocusListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyMouseListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyKeyListener +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$RootProvider +instanceKlass com/mathworks/util/event/EventUtils +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher$1 +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$MnemonicEventListener +instanceKlass com/google/common/collect/Sets +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory$1 +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$Collector +instanceKlass com/mathworks/util/async/Callback +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManager +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$KeyboardFocusProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$MnemonicsManagerFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers +instanceKlass com/mathworks/ddux/UIEventLog +instanceKlass com/mathworks/mde/desk/DDUXLoggerBridge +instanceKlass com/mathworks/mwswing/UIEventLogger$Implementation +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$2 +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$WSBPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LoggingActionListener +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$VariableInfo +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$PlottingSelectionListener +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDialogs +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$1 +instanceKlass com/mathworks/mlwidgets/workspace/VariableRecordlistModel$SizeStringComparator +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDnDListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger$LoggingProxyActionListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceSelectionPopupMenu$LoggingActionListener +instanceKlass com/mathworks/widgets/spreadsheet/IClipboardOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/IPrintingOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/ISaveOpProvider +instanceKlass com/mathworks/mlwidgets/array/UpdatableData +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$WorkspaceTableActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$AppFocusL +instanceKlass com/mathworks/widgets/recordlist/RecordlistResources +instanceKlass com/mathworks/widgets/recordlist/ObserverAdapter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$3 +instanceKlass javax/swing/JTable$4 +instanceKlass javax/swing/JTable$2 +instanceKlass javax/swing/JTable$Resizable3 +instanceKlass javax/swing/JTable$Resizable2 +instanceKlass com/mathworks/widgets/spreadsheet/UndoActionFactory +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$FieldEditor$1 +instanceKlass javax/swing/DefaultCellEditor$EditorDelegate +instanceKlass com/mathworks/widgets/recordlist/FullRLTCellRenderer +instanceKlass com/mathworks/mlwidgets/workspace/util/WorkspaceIcon +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ColumnSelectionRecorder +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$SelectionRecorder +instanceKlass com/mathworks/widgets/recordlist/RecordlistSelectionTracker +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ActionHelper +instanceKlass com/mathworks/widgets/recordlist/ActionUtils +instanceKlass com/mathworks/mwswing/table/PlatformDelegatingHeaderRenderer +instanceKlass com/mathworks/mwswing/TableUtils +instanceKlass javax/swing/tree/TreeCellEditor +instanceKlass com/mathworks/mlwidgets/graphics/PlotPickerOpener +instanceKlass com/mathworks/widgets/recordlist/ICopyingObserver +instanceKlass com/mathworks/widgets/recordlist/ICreationObserver +instanceKlass com/mathworks/widgets/recordlist/IOpeningObserver +instanceKlass com/mathworks/widgets/recordlist/IDuplicationObserver +instanceKlass com/mathworks/widgets/recordlist/IEditingObserver +instanceKlass com/mathworks/mwswing/TableCell +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$RowLocationData +instanceKlass com/mathworks/widgets/recordlist/IRecordFilter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$ViewUpdater +instanceKlass com/mathworks/mwswing/table/RestrictedSortTableModel +instanceKlass com/mathworks/mwswing/table/PresortedTableModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistListener +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$ActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$InputMapActionProvider +instanceKlass com/mathworks/mwswing/MJTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/spreadsheet/IUndoManagerProvider +instanceKlass com/mathworks/widgets/recordlist/IDeletionObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordOperationObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordSecondaryIconProvider +instanceKlass com/mathworks/widgets/recordlist/InternalActionHelper +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspacePrefs +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WhosObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterObserver +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceMCRProvider +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceChange +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$LocalWorkspaceEventObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$3 +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterFreeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WorkspaceChangeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener +instanceKlass com/mathworks/mlwidgets/workspace/FetchedValueBuffer +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$MWMCompletionObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$RQI +instanceKlass com/mathworks/mlwidgets/workspace/NestingInformation +instanceKlass com/mathworks/mlwidgets/workspace/WhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/ClassicWhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceResources +instanceKlass com/mathworks/widgets/spreadsheet/format/FormatIdentifier$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordQueryInformant +instanceKlass com/mathworks/widgets/datatransfer/VariableLiteral +instanceKlass com/mathworks/widgets/recordlist/AbstractRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IVirtualRecordContainer +instanceKlass com/mathworks/widgets/recordlist/IRecordIconProvider +instanceKlass com/mathworks/mlwidgets/workspace/ValueLookup +instanceKlass com/mathworks/widgets/recordlist/IRecordlistRefresher +instanceKlass com/mathworks/widgets/recordlist/IRestrictedSortRecordlist +instanceKlass com/mathworks/widgets/recordlist/IRecordEditor +instanceKlass com/mathworks/widgets/recordlist/IRecordOpener +instanceKlass com/mathworks/widgets/recordlist/IRecordDuplicator +instanceKlass com/mathworks/widgets/recordlist/IRecordDeleter +instanceKlass com/mathworks/widgets/recordlist/IRecordCreator +instanceKlass com/mathworks/widgets/recordlist/IRecordFieldCopier +instanceKlass com/mathworks/widgets/recordlist/IRecordCopier +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LocalChangeListener +instanceKlass com/mathworks/widgets/spreadsheet/IUndoOpProvider +instanceKlass com/mathworks/widgets/recordlist/IRecordValueMutator +instanceKlass com/mathworks/widgets/recordlist/IRecordlistMutator +instanceKlass com/mathworks/mlwidgets/graphics/IPlotPickerDisplayTrigger +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphingActionListener +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphableInfoProvider +instanceKlass com/mathworks/mlwidgets/workspace/IWorkspaceActionProvider +instanceKlass com/mathworks/widgets/recordlist/IActionProvider +instanceKlass com/mathworks/widgets/recordlist/IGenericNameSupplier +instanceKlass com/mathworks/widgets/recordlist/IRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistFieldConfig +instanceKlass com/mathworks/widgets/recordlist/IRecordContainer +instanceKlass com/mathworks/mwswing/GlobalCursor$MouseBlocker +instanceKlass com/mathworks/mwswing/GlobalCursor +instanceKlass java/util/AbstractList$1 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1$1 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1 +instanceKlass com/mathworks/widgets/editor/EditorRegionImpl +instanceKlass com/mathworks/matlab/api/editor/EditorRegion +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/Cell +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$6 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$13 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$9 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$8 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$7 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$5 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$2 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveUtils +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor +instanceKlass com/mathworks/mde/editor/EditorViewClient$1$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$3 +instanceKlass com/mathworks/widgets/text/STPIncSearch +instanceKlass com/mathworks/mde/editor/EditorStatusBar$2 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$FunctionNameListener +instanceKlass com/mathworks/mwswing/MJCheckBox$ActionPropertyHandler +instanceKlass com/mathworks/mde/editor/EditorOptions +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$4 +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory$WindowAction$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$4 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$3 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7$1 +instanceKlass com/mathworks/widgets/util/EmptyIcon +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$2 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$8 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActions$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$RunTestsToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/LiveMatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptionsListener +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/MatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActionController +instanceKlass com/mathworks/mde/editor/EditorUtils$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$8 +instanceKlass com/mathworks/mlwidgets/debug/MatlabDebuggerActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$15 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$14 +instanceKlass com/mathworks/mde/editor/ProfilerButton$1 +instanceKlass com/mathworks/mde/editor/ProfilerButton +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$4 +instanceKlass com/mathworks/mde/editor/EditorUtils$5 +instanceKlass com/mathworks/mde/editor/EditorUtils$4 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListListenerBridge +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$15 +instanceKlass java/rmi/server/UID +instanceKlass org/apache/commons/lang/exception/Nestable +instanceKlass org/apache/commons/lang/StringEscapeUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$9 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager$SelectableMenuItem +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu$2 +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$10 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$13 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$12 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$7 +instanceKlass com/jidesoft/swing/JideMenu$1 +instanceKlass com/jidesoft/swing/JideMenu$MenuCreator +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuOriginCalculator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$2 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$1 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector$PropertyChangeHandler +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$LoadBundle +instanceKlass ca/odell/glazedlists/impl/SimpleIterator +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorNode +instanceKlass java/util/IdentityHashMap$EntryIterator$Entry +instanceKlass com/jidesoft/introspector/BeanIntrospector$LazyValue +instanceKlass com/jidesoft/utils/TypeUtils +instanceKlass com/jidesoft/introspector/BeanIntrospector +instanceKlass com/jidesoft/introspector/Introspector +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/PersistenceUtils +instanceKlass com/mathworks/util/ArrayUtils$EmptyObjects +instanceKlass com/jidesoft/converter/EnumConverter +instanceKlass com/jidesoft/converter/YearNameConverter +instanceKlass com/jidesoft/converter/MonthNameConverter +instanceKlass com/jidesoft/converter/MultilineStringConverter +instanceKlass com/jidesoft/converter/FontConverter +instanceKlass com/jidesoft/converter/QuarterNameConverter +instanceKlass com/jidesoft/converter/StringArrayConverter +instanceKlass com/jidesoft/converter/ColorConverter +instanceKlass com/jidesoft/converter/MonthConverter +instanceKlass java/text/DateFormatSymbols +instanceKlass com/jidesoft/converter/DateConverter +instanceKlass com/jidesoft/converter/FontNameConverter +instanceKlass com/jidesoft/converter/FileConverter +instanceKlass com/jidesoft/converter/BooleanConverter +instanceKlass com/jidesoft/converter/ArrayConverter +instanceKlass com/jidesoft/converter/NumberConverter +instanceKlass com/jidesoft/converter/ObjectConverterManager +instanceKlass com/jidesoft/converter/DefaultObjectConverter +instanceKlass com/jidesoft/converter/ObjectConverter +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationJideUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/PublishOptions +instanceKlass com/mathworks/mlwidgets/configeditor/ui/UiSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$PersistenceSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution +instanceKlass com/mathworks/widgets/menus/DefaultMenuID +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolInfoImpl +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor$DiffToolMenuContribution +instanceKlass com/mathworks/jmi/MatlabWorker$2 +instanceKlass com/mathworks/jmi/MatlabWorker$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$4 +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$3 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution +instanceKlass com/mathworks/mde/editor/codepad/CodepadMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor +instanceKlass com/mathworks/mde/editor/ActionManager$1 +instanceKlass com/mathworks/mde/editor/ActionManager$CodeFoldsMenuItemValidationListener +instanceKlass com/mathworks/mde/editor/ActionManager$3 +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuGroup +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuMenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/ConfigurationPopupMenuCustomizer +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuCustomizer +instanceKlass com/mathworks/widgets/DropdownButton$ArrowIcon +instanceKlass com/mathworks/widgets/DropdownButton$1 +instanceKlass com/mathworks/widgets/PickerButton$2 +instanceKlass com/mathworks/widgets/PickerButton$ToolTippableButton +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration$Type +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$3 +instanceKlass com/mathworks/widgets/PopupMenuCustomizer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$1 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$2 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor$ToolBarItem +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarBuilder +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBars +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$34 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DefaultActionInput +instanceKlass com/mathworks/mde/editor/PathActionInputSource +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreActionProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$DocumentTabActionProvider +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUnhandledException +instanceKlass com/mathworks/mde/editor/EditorToolstripTabFactory +instanceKlass com/mathworks/mde/editor/EditorViewClient$7 +instanceKlass com/mathworks/mde/editor/EditorView$8 +instanceKlass com/mathworks/mde/editor/EditorView$12 +instanceKlass org/apache/xerces/dom/NodeListCache +instanceKlass com/mathworks/widgets/STPStateManagerImpl +instanceKlass com/mathworks/widgets/StateMRUFiles +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl$1 +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl +instanceKlass com/mathworks/mde/editor/EditorStateManager +instanceKlass com/mathworks/mde/editor/EditorStateManagerFactory +instanceKlass org/netbeans/editor/JumpList$Entry +instanceKlass com/mathworks/mde/editor/codepad/Codepad$3 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/AbstractEditorHighlighter +instanceKlass com/mathworks/util/ArrayUtils$EmptyPrimitives +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo$BaseDocumentCell +instanceKlass org/netbeans/editor/AdjustFinder +instanceKlass com/mathworks/widgets/text/mcode/cell/CellUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$1 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadCaretListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadDocumentListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager +instanceKlass com/mathworks/mde/editor/codepad/Codepad$CodepadPrefListener +instanceKlass java/text/ParsePosition +instanceKlass com/mathworks/mde/editor/codepad/Codepad$1 +instanceKlass com/mathworks/mde/editor/PopupAction$Callback +instanceKlass com/mathworks/mde/editor/EditorView$13 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$1 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$2 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$TextEventHandler +instanceKlass com/mathworks/mde/editor/MatlabExecutionDisplayAdapter$DebugInterests$2 +instanceKlass com/mathworks/widgets/text/mcode/MExecutionDisplayAdapter +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter$RepaintListener +instanceKlass com/mathworks/mde/editor/breakpoints/BreakpointInstallationResult +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeIterator +instanceKlass ca/odell/glazedlists/FilterList$PrivateMatcherEditorListener +instanceKlass ca/odell/glazedlists/impl/matchers/TrueMatcher +instanceKlass ca/odell/glazedlists/matchers/Matchers +instanceKlass ca/odell/glazedlists/impl/adt/Barcode +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils$1 +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor$Listener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointViewPopupBuilder +instanceKlass com/mathworks/matlab/api/debug/BreakpointStyle +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUiInfoProvider +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointView +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$5 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$2 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$4 +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$JUnitExpose +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextViewListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextEventHandler +instanceKlass com/mathworks/widgets/text/mcode/CmdManager +instanceKlass com/mathworks/matlab/api/debug/BreakpointMarginPopUpMenu +instanceKlass com/mathworks/matlab/api/debug/BreakpointModel +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$ClearBkptListener +instanceKlass com/mathworks/matlab/api/debug/BreakpointUiInfoProvider +instanceKlass com/mathworks/matlab/api/debug/ContextMenuListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdLineListener +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointMargin +instanceKlass com/mathworks/jmi/MLFileUtils +instanceKlass com/mathworks/widgets/datamodel/FutureFileStorageLocation +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationSelectionListener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMarginProvider +instanceKlass com/mathworks/mde/functionhints/FunctionHintUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$2 +instanceKlass com/mathworks/widgets/editor/SelfRemovingEditorEventListener +instanceKlass com/mathworks/mlwidgets/debug/RunOrContinueAction$2 +instanceKlass com/mathworks/matlab/api/menus/MenuID +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabKeyBindingContributor +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$ViewHierarchyChangeListenerImpl +instanceKlass com/mathworks/widgets/text/fold/MWCodeFoldingSideBar$ViewHierarchyChangeNotifier +instanceKlass org/netbeans/editor/CodeFoldingSideBar$1 +instanceKlass org/netbeans/editor/CodeFoldingSideBar$SideBarFoldHierarchyListener +instanceKlass org/netbeans/editor/CodeFoldingSideBar$Mark +instanceKlass com/mathworks/widgets/text/MWEditorUI$3 +instanceKlass org/netbeans/editor/GlyphGutter$EditorUIListener +instanceKlass org/netbeans/editor/GlyphGutter$3 +instanceKlass org/netbeans/editor/GlyphGutter$Observer +instanceKlass org/netbeans/editor/Annotations$2 +instanceKlass org/netbeans/editor/Annotations$1 +instanceKlass org/netbeans/editor/Annotations$MenuComparator +instanceKlass org/netbeans/editor/GlyphGutter$GlyphGutterFoldHierarchyListener +instanceKlass org/netbeans/editor/Annotations +instanceKlass com/mathworks/mwswing/TextComponentUtils +instanceKlass com/mathworks/widgets/text/DocumentUtils +instanceKlass com/mathworks/widgets/SyntaxTextPane$2$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6$1 +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$UpperOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$LowerOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/util/swing/ElementUtilities +instanceKlass org/netbeans/editor/Syntax$BaseStateInfo +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenInfo +instanceKlass com/mathworks/util/IntBuffer +instanceKlass com/mathworks/widgets/text/matlab/LexicalBuffer +instanceKlass org/netbeans/editor/SyntaxUpdateTokens +instanceKlass org/netbeans/editor/FixLineSyntaxState +instanceKlass org/netbeans/editor/BaseDocument$NotifyModifyStatus +instanceKlass org/netbeans/editor/ext/ExtUtilities +instanceKlass com/mathworks/widgets/text/mcode/MTreeUtils +instanceKlass java/util/DualPivotQuicksort +instanceKlass com/mathworks/widgets/text/mcode/MDocumentUtils +instanceKlass com/mathworks/mwswing/TextComponentUtils$FullIdentifier +instanceKlass com/mathworks/widgets/text/mcode/variables/Variable +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$1 +instanceKlass org/netbeans/editor/BaseCaret$3 +instanceKlass org/netbeans/editor/ext/FormatSupport +instanceKlass org/netbeans/editor/ext/AbstractFormatLayer +instanceKlass org/netbeans/editor/StatusBar$1 +instanceKlass org/netbeans/editor/StatusBar$CaretListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$DocUpdateHandler +instanceKlass com/mathworks/util/tree/TreeUtils$3 +instanceKlass com/mathworks/util/tree/DefaultMutableTree +instanceKlass com/mathworks/util/Cache$Entry +instanceKlass java/util/JumboEnumSet$EnumSetIterator +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldsInfo +instanceKlass com/mathworks/widgets/text/mcode/MTree$1 +instanceKlass com/mathworks/util/Cache +instanceKlass com/mathworks/widgets/text/mcode/MTree$Node +instanceKlass com/mathworks/util/Cache$Loader +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider$1 +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider +instanceKlass com/mathworks/widgets/text/mcode/MTreeBaseDocumentCache +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl$HierarchyUpdateListener +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl +instanceKlass com/mathworks/widgets/text/fold/FoldStateManager +instanceKlass com/mathworks/widgets/StateManager +instanceKlass com/mathworks/widgets/STPStateManagerFactory +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldSettingsListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabState +instanceKlass com/mathworks/widgets/text/matlab/LexicalAccumulator +instanceKlass com/mathworks/widgets/text/matlab/MatlabLexer +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxFactory +instanceKlass com/mathworks/widgets/text/matlab/AbstractTokenManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenManager +instanceKlass com/mathworks/widgets/text/STPMessagePanel$9 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataFactory +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$9 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener$1 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightPrefs +instanceKlass com/mathworks/widgets/text/STPMessagePanel$2 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$8 +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$1 +instanceKlass java/awt/GradientPaint +instanceKlass com/mathworks/widgets/text/STPMessagePanel$7 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessagePainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$TextAlignmentProvider +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelListener +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelPainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$2 +instanceKlass com/mathworks/widgets/text/mcode/MLintPrefsUtils +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$8 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$MLintRunnable +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$1 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread +instanceKlass com/mathworks/widgets/menus/DefaultMenuGroupID +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageBarContributor +instanceKlass com/mathworks/widgets/text/LayerMarkList +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$7 +instanceKlass com/mathworks/widgets/text/mcode/MLint$MessageDefinition +instanceKlass com/mathworks/widgets/text/mcode/MLint$CodeAnalyzerContentType +instanceKlass com/mathworks/widgets/text/mcode/MLint +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightActions +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerActions +instanceKlass com/mathworks/mde/editor/EditorTabCompletion +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$1 +instanceKlass com/mathworks/widgets/text/mcode/MTokenColorMap +instanceKlass com/mathworks/widgets/text/mcode/MColorScheme +instanceKlass com/mathworks/widgets/text/matlab/ColorScheme +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerUtils +instanceKlass com/mathworks/widgets/text/ColoringFactory +instanceKlass java/awt/LightweightDispatcher$2 +instanceKlass com/jidesoft/popup/JidePopup$14 +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$2 +instanceKlass sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar +instanceKlass sun/util/locale/InternalLocaleBuilder +instanceKlass sun/util/locale/StringTokenIterator +instanceKlass sun/util/locale/ParseStatus +instanceKlass sun/awt/im/InputMethodAdapter +instanceKlass java/awt/im/spi/InputMethod +instanceKlass java/awt/im/spi/InputMethodContext +instanceKlass java/awt/im/InputContext +instanceKlass java/awt/Window$1DisposeAction +instanceKlass com/jidesoft/document/DefaultStringConverter +instanceKlass com/jidesoft/swing/AbstractLayoutPersistence +instanceKlass com/jidesoft/swing/StringConverter +instanceKlass com/jidesoft/document/DocumentComponent +instanceKlass com/jidesoft/swing/LayoutPersistence +instanceKlass com/jidesoft/document/IDocumentGroup +instanceKlass com/jidesoft/document/FloatingDocumentContainer +instanceKlass com/jidesoft/swing/IContour +instanceKlass com/jidesoft/document/IDocumentPane +instanceKlass sun/awt/GlobalCursorManager$NativeUpdater +instanceKlass sun/awt/GlobalCursorManager +instanceKlass com/jidesoft/popup/JidePopup$9 +instanceKlass com/jidesoft/popup/JidePopup$6 +instanceKlass com/jidesoft/popup/JidePopup$4 +instanceKlass com/jidesoft/plaf/vsnet/ResizeFrameBorder +instanceKlass com/jidesoft/swing/Resizable +instanceKlass com/jidesoft/utils/PortingUtils +instanceKlass java/awt/peer/DialogPeer +instanceKlass java/awt/BufferCapabilities +instanceKlass java/awt/AttributeValue +instanceKlass sun/awt/NullComponentPeer +instanceKlass java/awt/peer/LightweightPeer +instanceKlass sun/awt/im/ExecutableInputMethodManager$3 +instanceKlass sun/awt/im/InputMethodLocator +instanceKlass sun/awt/windows/WInputMethodDescriptor +instanceKlass java/awt/im/spi/InputMethodDescriptor +instanceKlass sun/awt/im/InputMethodManager +instanceKlass sun/awt/FontConfiguration$2 +instanceKlass sun/awt/NativeLibLoader$1 +instanceKlass sun/awt/NativeLibLoader +instanceKlass sun/awt/PlatformFont +instanceKlass java/awt/peer/FontPeer +instanceKlass javax/swing/RepaintManager$2 +instanceKlass sun/awt/windows/WComponentPeer$2 +instanceKlass sun/awt/windows/WColor +instanceKlass sun/java2d/StateTracker$2 +instanceKlass sun/java2d/StateTracker$1 +instanceKlass sun/java2d/StateTracker +instanceKlass sun/java2d/SurfaceDataProxy +instanceKlass sun/awt/image/SurfaceManager$FlushableCacheData +instanceKlass sun/java2d/windows/GDIRenderer +instanceKlass sun/java2d/ScreenUpdateManager +instanceKlass sun/awt/im/InputMethodWindow +instanceKlass sun/awt/ExtendedKeyCodes +instanceKlass sun/awt/RepaintArea +instanceKlass sun/awt/windows/WWindowPeer$GuiDisposedListener +instanceKlass sun/awt/windows/WWindowPeer$ActiveWindowListener +instanceKlass java/awt/peer/CanvasPeer +instanceKlass java/awt/peer/PanelPeer +instanceKlass java/awt/peer/FramePeer +instanceKlass java/awt/peer/WindowPeer +instanceKlass java/awt/peer/ContainerPeer +instanceKlass java/awt/SplashScreen +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$1 +instanceKlass com/jidesoft/tooltip/c +instanceKlass com/jidesoft/tooltip/ExpandedTip +instanceKlass com/jidesoft/tooltip/d$a_ +instanceKlass com/jidesoft/tooltip/BalloonTipUI$a_ +instanceKlass com/jidesoft/tooltip/composite/EdgeEffectComposite +instanceKlass com/jidesoft/tooltip/ShadowComposite +instanceKlass com/jidesoft/tooltip/shadows/PerspectiveShadow +instanceKlass com/jidesoft/tooltip/shapes/RoundedRectangularBalloonShape +instanceKlass com/jidesoft/tooltip/ShadowSettings +instanceKlass com/jidesoft/tooltip/ShadowStyle +instanceKlass com/mathworks/widgets/tooltip/CalloutRectangularBalloonShape +instanceKlass com/mathworks/mwswing/MJDialog$1 +instanceKlass com/mathworks/mwswing/MJDialog$DoShow +instanceKlass com/mathworks/mwswing/MJDialog$KeyCatcher +instanceKlass com/mathworks/mwswing/TransparentWindowFactory +instanceKlass com/jidesoft/tooltip/BalloonShape +instanceKlass com/mathworks/widgets/messagepanel/MessageModelListener +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$1 +instanceKlass com/mathworks/matlab/api/editor/EditorMessageBarContributor +instanceKlass com/mathworks/mwswing/api/UndoListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$OSGiEditorLayerProviderContributor +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$EditorLayerProviderContributor +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$4 +instanceKlass com/mathworks/mde/editor/EditorView$10 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$EditorKitInfo +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils +instanceKlass com/mathworks/mde/editor/EditorMKit$1 +instanceKlass com/mathworks/mlwidgets/MatlabHyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/LayerUtils +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabMKit$MatlabHelper +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$MTreeListener +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer +instanceKlass com/mathworks/matlab/api/editor/EditorLayer +instanceKlass com/mathworks/widgets/messagepanel/AbstractMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessageModel +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$NonLocalDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$CodeAnalyzerDocHelper +instanceKlass com/mathworks/matlab/api/editor/EditorTipDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$VariableHighlightingLayerStatusInfoProvider +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/EditorTip$CommandHelper +instanceKlass org/netbeans/editor/ext/FormatLayer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabEditorKitProvider +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$3 +instanceKlass com/mathworks/mwswing/MJRadioButtonMenuItem$ActionPropertyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1 +instanceKlass com/mathworks/widgets/SplitScreenActions +instanceKlass com/mathworks/mde/editor/EditorApplicationComponentActivator +instanceKlass com/mathworks/widgets/text/ComponentActivator +instanceKlass com/mathworks/mde/editor/EditorSyntaxTextPane$EditorDropTargetListener +instanceKlass com/mathworks/widgets/text/SmartFormatter +instanceKlass com/mathworks/widgets/text/MWCaret$1 +instanceKlass com/mathworks/widgets/text/TextDragAndDrop +instanceKlass com/mathworks/widgets/text/MWDrawLayerFactory +instanceKlass org/netbeans/editor/BaseCaret$2 +instanceKlass org/netbeans/editor/SegmentCache +instanceKlass org/netbeans/editor/DocumentUtilities +instanceKlass org/netbeans/editor/BaseCaret$1 +instanceKlass org/netbeans/editor/Syntax$StateInfo +instanceKlass com/mathworks/widgets/Tokenizer$TokenInfo +instanceKlass com/mathworks/widgets/TokenizerFactory +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingImpl +instanceKlass org/netbeans/editor/Mark$MarkComparator +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingController +instanceKlass org/netbeans/editor/Mark +instanceKlass org/netbeans/editor/BaseCaret +instanceKlass org/netbeans/editor/AtomicLockListener +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$2 +instanceKlass org/netbeans/editor/view/spi/FlyView$Parent +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$OffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$1 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$2 +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter$HighlighterUpdateListener +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager +instanceKlass com/mathworks/widgets/text/MWEditorUI$4 +instanceKlass org/netbeans/editor/FontMetricsCache$InfoImpl +instanceKlass org/netbeans/editor/EditorUI$3 +instanceKlass com/mathworks/widgets/text/MWToolTipSupport$DismissEventListener +instanceKlass org/netbeans/editor/ext/ToolTipSupport$2 +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl$CollapsedFoldIterator +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl +instanceKlass org/netbeans/editor/FontMetricsCache$Info +instanceKlass org/netbeans/editor/FontMetricsCache +instanceKlass com/mathworks/widgets/text/MWEditorUI$2 +instanceKlass org/netbeans/editor/EditorUI$ComponentLock +instanceKlass org/netbeans/editor/PopupManager$HorizontalBounds +instanceKlass org/netbeans/editor/PopupManager$Placement +instanceKlass com/mathworks/widgets/text/layer/EditorTip +instanceKlass com/mathworks/widgets/text/layer/EditorTip$MEditorTipStrategy +instanceKlass com/mathworks/widgets/text/MWEditorUI$1 +instanceKlass org/netbeans/editor/EditorUI$1 +instanceKlass org/netbeans/editor/PopupManager +instanceKlass org/netbeans/editor/StatusBar +instanceKlass org/netbeans/editor/SideBarFactory +instanceKlass org/netbeans/editor/Annotations$AnnotationsListener +instanceKlass org/netbeans/api/editor/fold/FoldUtilities +instanceKlass org/netbeans/spi/editor/fold/FoldHierarchyTransaction +instanceKlass org/netbeans/api/editor/fold/FoldStateChange +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyTransactionImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$1 +instanceKlass org/netbeans/api/editor/fold/Fold +instanceKlass org/netbeans/modules/editor/fold/SpiPackageAccessor +instanceKlass org/netbeans/spi/editor/fold/FoldOperation +instanceKlass org/netbeans/modules/editor/fold/FoldOperationImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution +instanceKlass org/netbeans/modules/editor/fold/ApiPackageAccessor +instanceKlass org/netbeans/api/editor/fold/FoldHierarchy +instanceKlass org/netbeans/lib/editor/util/PriorityMutex +instanceKlass org/netbeans/lib/editor/view/GapObjectArray +instanceKlass org/netbeans/lib/editor/view/GapObjectArray$RemoveUpdater +instanceKlass org/netbeans/editor/BaseTextUI$UIWatcher +instanceKlass com/mathworks/widgets/SyntaxTextPane$2 +instanceKlass com/mathworks/widgets/SyntaxTextPane$1 +instanceKlass org/netbeans/editor/LocaleSupport$Localizer +instanceKlass org/netbeans/editor/LocaleSupport +instanceKlass org/openide/util/Task +instanceKlass org/openide/util/Cancellable +instanceKlass org/openide/util/Utilities$RE +instanceKlass org/openide/util/Utilities +instanceKlass org/openide/util/RequestProcessor +instanceKlass org/openide/util/NbBundle$LocaleIterator +instanceKlass org/openide/util/NbBundle +instanceKlass com/mathworks/widgets/SyntaxTextPane$EmptyUniqueKeyProvider +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedFocusListener +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedCaretListener +instanceKlass com/mathworks/mwswing/undo/FilterUndoableEdit +instanceKlass com/mathworks/widgets/SyntaxTextPane$ActionManager +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$3 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$1 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$KitStore +instanceKlass org/netbeans/editor/Settings$KitAndValue +instanceKlass org/netbeans/api/editor/fold/FoldHierarchyListener +instanceKlass org/netbeans/editor/ActionFactory$JumpListNextAction$1 +instanceKlass org/netbeans/editor/JumpList$1 +instanceKlass org/netbeans/editor/JumpList +instanceKlass org/netbeans/editor/ActionFactory$JumpListPrevAction$1 +instanceKlass com/mathworks/widgets/text/layer/LayerActions +instanceKlass com/mathworks/widgets/text/MWKit$InstancesNotEqual +instanceKlass org/netbeans/lib/editor/util/swing/DocumentListenerPriority +instanceKlass org/netbeans/editor/BaseDocument$PropertyEvaluator +instanceKlass org/netbeans/editor/MarkChain +instanceKlass org/netbeans/editor/view/spi/EstimatedSpanView +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState$Parent +instanceKlass org/netbeans/editor/FindSupport +instanceKlass org/netbeans/editor/BaseDocument$1 +instanceKlass org/netbeans/editor/Registry +instanceKlass org/netbeans/editor/Analyzer +instanceKlass org/openide/ErrorManager +instanceKlass org/netbeans/editor/Utilities +instanceKlass java/lang/Package$1 +instanceKlass org/netbeans/editor/FinderFactory$AbstractFinder +instanceKlass org/netbeans/spi/editor/fold/FoldManager +instanceKlass com/mathworks/widgets/text/mcode/MFoldManagerFactory +instanceKlass org/netbeans/spi/editor/fold/FoldManagerFactory +instanceKlass org/netbeans/modules/editor/fold/FoldManagerFactoryProvider +instanceKlass com/mathworks/widgets/text/fold/CustomFoldManagerFactoryProvider +instanceKlass org/netbeans/editor/WeakPropertyChangeSupport +instanceKlass org/netbeans/editor/AnnotationTypes +instanceKlass org/netbeans/editor/SettingsAdapter +instanceKlass com/mathworks/widgets/text/mcode/codepad/CodepadOptions +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults$1 +instanceKlass com/mathworks/mwswing/GraphicsUtils +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults +instanceKlass org/netbeans/editor/Formatter +instanceKlass org/netbeans/editor/MultiKeymap +instanceKlass org/netbeans/editor/ext/Completion +instanceKlass org/netbeans/editor/ext/CompletionJavaDoc +instanceKlass org/netbeans/editor/SettingsUtil$PrintColoringEvaluator +instanceKlass org/netbeans/editor/SettingsUtil +instanceKlass org/netbeans/editor/LineElement +instanceKlass org/netbeans/lib/editor/util/swing/GapBranchElement +instanceKlass org/netbeans/lib/editor/util/PriorityListenerList +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities$ModificationTextElement +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities +instanceKlass org/netbeans/editor/DrawLayerList +instanceKlass org/netbeans/editor/AcceptorFactory$4 +instanceKlass org/netbeans/editor/AcceptorFactory$3 +instanceKlass org/netbeans/editor/AcceptorFactory$2 +instanceKlass org/netbeans/editor/AcceptorFactory$1 +instanceKlass org/netbeans/editor/AcceptorFactory$TwoChar +instanceKlass org/netbeans/editor/AcceptorFactory$Char +instanceKlass org/netbeans/editor/AcceptorFactory$Fixed +instanceKlass org/netbeans/editor/Acceptor +instanceKlass org/netbeans/editor/AcceptorFactory +instanceKlass org/netbeans/editor/SettingsDefaults +instanceKlass org/netbeans/editor/BasePosition +instanceKlass org/netbeans/editor/MultiMark +instanceKlass org/netbeans/editor/MarkVector +instanceKlass org/netbeans/editor/DocumentContent +instanceKlass org/netbeans/editor/GapStart +instanceKlass org/netbeans/editor/PrintContainer +instanceKlass javax/swing/text/DocumentFilter$FilterBypass +instanceKlass org/netbeans/editor/Finder +instanceKlass org/netbeans/editor/CharSeq +instanceKlass org/netbeans/editor/DrawGraphics +instanceKlass org/netbeans/editor/AtomicLockDocument +instanceKlass com/mathworks/widgets/STPPrefsManager$PrintColoringEvaluator +instanceKlass com/mathworks/widgets/text/ErrorLogger +instanceKlass org/netbeans/api/editor/fold/FoldType +instanceKlass com/mathworks/widgets/text/mcode/MTree +instanceKlass com/mathworks/widgets/text/simscape/SimscapeSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxHighlighting +instanceKlass org/netbeans/modules/xml/text/syntax/XMLTokenIDs +instanceKlass com/mathworks/widgets/text/xml/XMLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cuda/CudaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cplusplus/CAndCPlusPlusSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/vhdl/VHDLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/verilog/VerilogSyntaxHighlighting +instanceKlass org/netbeans/editor/ImageTokenID +instanceKlass org/netbeans/editor/BaseTokenCategory +instanceKlass com/mathworks/widgets/text/java/JavaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/CommonResources +instanceKlass org/netbeans/editor/TokenContextPath$ArrayMatcher +instanceKlass org/netbeans/editor/TokenContextPath +instanceKlass org/netbeans/editor/BaseTokenID +instanceKlass com/mathworks/widgets/text/DefaultSyntaxColor +instanceKlass com/mathworks/widgets/text/tlc/TLCSyntaxHighlighting +instanceKlass com/mathworks/widgets/SyntaxHighlightingUtils +instanceKlass com/mathworks/widgets/STPPrefsManager$STPPrefsListener +instanceKlass org/netbeans/editor/SettingsNames +instanceKlass com/mathworks/widgets/text/EditorPrefsAccessor +instanceKlass org/netbeans/editor/TokenContext +instanceKlass org/netbeans/editor/Settings$Evaluator +instanceKlass com/mathworks/widgets/STPPrefsManager +instanceKlass org/netbeans/editor/Settings$AbstractInitializer +instanceKlass org/netbeans/editor/Settings$Initializer +instanceKlass org/netbeans/editor/Settings +instanceKlass org/netbeans/editor/BaseKit$1 +instanceKlass org/netbeans/editor/Syntax +instanceKlass org/netbeans/editor/ImplementationProvider +instanceKlass org/netbeans/editor/SyntaxSupport +instanceKlass com/mathworks/mwswing/undo/UndoManagerListener +instanceKlass com/mathworks/matlab/api/editor/SyntaxHighlightingColor +instanceKlass org/netbeans/editor/Coloring +instanceKlass org/netbeans/editor/DrawLayer$AbstractLayer +instanceKlass org/netbeans/editor/DrawLayer +instanceKlass java/text/AttributedCharacterIterator +instanceKlass com/mathworks/widgets/text/ViewHierarchyModificationComponent +instanceKlass org/netbeans/editor/EditorUI +instanceKlass org/netbeans/editor/SettingsChangeListener +instanceKlass org/netbeans/editor/TokenID +instanceKlass org/netbeans/editor/TokenCategory +instanceKlass java/text/AttributedString +instanceKlass com/mathworks/widgets/text/print/TextPrintable +instanceKlass java/awt/print/Printable +instanceKlass javax/print/DocPrintJob +instanceKlass com/mathworks/mwswing/api/ExtendedUndoManager +instanceKlass com/mathworks/mwswing/api/UndoabilityChangeListener +instanceKlass com/mathworks/widgets/text/ViewHierarchyChangeListener +instanceKlass java/awt/im/InputMethodRequests +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$LastActiveFocusListener +instanceKlass com/mathworks/mde/editor/EditorView$4 +instanceKlass com/mathworks/mde/editor/EditorView$7 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$PostKeyListener +instanceKlass com/mathworks/mde/editor/EditorView$6 +instanceKlass com/mathworks/mde/editor/EditorView$5 +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager$1 +instanceKlass com/mathworks/mde/editor/codepad/CodepadAction +instanceKlass com/mathworks/mde/editor/ActionManager$OSGiKeyBindingContributorProvider +instanceKlass com/mathworks/widgets/editor/SaveOnBlurImpl +instanceKlass com/mathworks/mde/editor/EditorView$1 +instanceKlass com/mathworks/mde/editor/EditorView$EditorPrefListener +instanceKlass com/mathworks/mde/editor/EditorView$11 +instanceKlass com/mathworks/mde/editor/EditorView$3 +instanceKlass com/mathworks/mde/editor/EditorView$2 +instanceKlass com/mathworks/matlab/api/debug/BreakpointMargin +instanceKlass com/mathworks/util/AbsoluteFile +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager +instanceKlass com/mathworks/mde/editor/codepad/Codepad +instanceKlass com/mathworks/mde/editor/EditorView$OSGiEditorLayerProviderDistributor +instanceKlass com/mathworks/mde/editor/EditorViewClient$8 +instanceKlass com/mathworks/mde/editor/codepad/CodepadContainer +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter +instanceKlass com/mathworks/widgets/SyntaxTextPane$UniqueKeyProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStoreEventListener +instanceKlass com/mathworks/matlab/api/debug/ViewProvider +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView +instanceKlass com/mathworks/matlab/api/editor/SaveOnBlur +instanceKlass com/mathworks/matlab/api/editor/DirtyState +instanceKlass com/mathworks/mde/editor/EditorView$EditorLayerProviderDistributor +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$2 +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPopupMenuListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxListSelectionListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPropertyChangeListener +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$8 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4$1 +instanceKlass com/mathworks/mlservices/MLExecutionEvent$1 +instanceKlass com/mathworks/jmi/MatlabMCR$AWTReplyEvent +instanceKlass com/mathworks/mwswing/ComboBoxItem +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$DBStackCallback +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$3 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$2 +instanceKlass javax/swing/JList$ListSelectionHandler +instanceKlass com/mathworks/toolstrip/plaf/ToolstripListUI$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$StackCallback +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$StackInfoChange +instanceKlass com/mathworks/widgets/datamodel/StorageLocationUtils +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefreshListenerManager +instanceKlass com/mathworks/mde/editor/MatlabEditor$EditorVisibilityListener +instanceKlass com/mathworks/matlab/api/debug/ExecutionArrowMargin +instanceKlass com/mathworks/mde/editor/TextFileUiInfoProvider$1 +instanceKlass com/mathworks/matlab/api/dataview/BasicUiInfoProvider +instanceKlass com/mathworks/widgets/datamodel/FileStorageLocation +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$DefaultEncodingProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultDialogProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyFileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$AlwaysSaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyDefaultFileNameProvider +instanceKlass org/apache/commons/io/IOCase +instanceKlass com/mathworks/widgets/text/EditorPreferences +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils$1 +instanceKlass com/mathworks/widgets/text/vhdl/VHDLLanguage +instanceKlass com/mathworks/widgets/text/verilog/VerilogLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CLanguage +instanceKlass com/mathworks/widgets/text/tlc/TLCLanguage +instanceKlass com/mathworks/widgets/text/simscape/SimscapeLanguage +instanceKlass com/mathworks/widgets/text/xml/XMLLanguage +instanceKlass com/mathworks/widgets/text/java/JavaLanguage +instanceKlass com/mathworks/widgets/text/cuda/CudaLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CPlusPlusLanguage +instanceKlass com/mathworks/widgets/text/plain/PlainLanguage +instanceKlass com/mathworks/widgets/text/mcode/MLanguage +instanceKlass com/mathworks/project/impl/PRJLanguage +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils +instanceKlass com/mathworks/widgets/text/STPViewModificationInterface +instanceKlass com/mathworks/matlab/api/debug/ViewProviderKey +instanceKlass com/mathworks/widgets/SyntaxTextPaneUtilities +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DialogInfoUserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore$UserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/DialogProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$12 +instanceKlass com/mathworks/mde/editor/EditorViewClient$11 +instanceKlass com/mathworks/mde/editor/EditorViewClient$2 +instanceKlass com/mathworks/mde/editor/MatlabEditor +instanceKlass com/mathworks/mde/editor/EditorViewClient$6 +instanceKlass com/mathworks/mde/editor/EditorViewClient$5 +instanceKlass com/mathworks/mde/editor/EditorViewClient$4 +instanceKlass com/mathworks/mde/editor/EditorViewClient$3 +instanceKlass com/mathworks/mde/editor/EditorViewListener +instanceKlass com/mathworks/mde/editor/EditorViewCallback +instanceKlass com/mathworks/mwswing/api/DirtyStateChangeListener +instanceKlass com/mathworks/widgets/debug/DebuggerManager$DebuggerManagerStateListener +instanceKlass com/mathworks/mwswing/UIEventLogger +instanceKlass com/mathworks/widgets/desk/DTEvent +instanceKlass com/mathworks/widgets/desk/DTTabbedPane$TitleTabUI$ScrollAdjuster +instanceKlass javax/swing/JTabbedPane$ModelListener +instanceKlass com/mathworks/mwswing/MJTabbedPane$TabMouseListener +instanceKlass com/mathworks/jmi/AWTUtilities$Latch +instanceKlass com/mathworks/jmi/AWTUtilities$MatlabWait +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$FlushRunnable +instanceKlass com/mathworks/mde/cmdwin/CommandWindowRegistrar +instanceKlass com/mathworks/mlservices/MLCommandWindow +instanceKlass com/mathworks/mlservices/MLCommandWindowRegistrar +instanceKlass org/netbeans/editor/WeakTimerListener +instanceKlass java/util/Observable +instanceKlass com/mathworks/widgets/incSearch/IncSearchStatusBar$1 +instanceKlass com/mathworks/widgets/incSearch/IncSearch$IncSearchResults +instanceKlass com/mathworks/mwswing/ClipboardMonitor$TypeChangedNotifier +instanceKlass com/mathworks/mde/cmdwin/CmdWinEditorKit$1 +instanceKlass com/mathworks/mwswing/ClipboardMonitor +instanceKlass java/text/StringCharacterIterator +instanceKlass com/mathworks/mwswing/text/MTextAction$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionExecutionListener +instanceKlass com/mathworks/mde/cmdwin/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionInterface +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletion +instanceKlass com/mathworks/mde/cmdhist/AltHistory$RecallListener +instanceKlass com/mathworks/mde/cmdwin/CmdWin$1 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$1 +instanceKlass javax/accessibility/AccessibleBundle +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$MyAppearanceFocusListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$5 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$2 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$1 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$SearchData +instanceKlass com/mathworks/mwswing/text/DocumentSearch +instanceKlass com/mathworks/widgets/Tokenizer +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup +instanceKlass com/mathworks/services/KeyboardPrefs +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$Options +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup$TokenMatchListener +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$8 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWPrefsListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWCaretListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$FindClientImpl +instanceKlass com/mathworks/mde/cmdwin/CWDragDropImpl +instanceKlass com/mathworks/mde/cmdwin/XCaret$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$3 +instanceKlass com/mathworks/util/Assert +instanceKlass com/mathworks/widgets/find/FindParentListener +instanceKlass com/mathworks/widgets/find/FindDialog +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CmdWinFontListener +instanceKlass com/mathworks/widgets/incSearch/IncSearchData +instanceKlass com/mathworks/widgets/find/FindClientInterface +instanceKlass javax/print/DocFlavor +instanceKlass javax/print/attribute/AttributeSet +instanceKlass com/mathworks/mwswing/datatransfer/AutoScroller +instanceKlass com/mathworks/services/PrefEvent +instanceKlass com/mathworks/mwswing/ClipboardListener +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$4 +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$2 +instanceKlass com/mathworks/mwswing/MJComboBox$2 +instanceKlass com/mathworks/mwswing/MJComboBox$3 +instanceKlass com/mathworks/mwswing/MJComboBox$DelegatingMouseListener +instanceKlass com/mathworks/mwswing/MacAppearanceUtils +instanceKlass com/mathworks/mwswing/MJToggleButton$ActionPropertyHandler +instanceKlass com/mathworks/widgets/desk/DTTabbedDocumentPane$1 +instanceKlass org/jdesktop/animation/timing/interpolation/LengthItem +instanceKlass org/jdesktop/animation/timing/interpolation/SplineInterpolator +instanceKlass org/jdesktop/animation/timing/interpolation/Interpolator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingRemovals +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingAdditions +instanceKlass com/mathworks/widgets/desk/Range +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$Animator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$TabDragger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$EdgeListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$TileAction$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$AnimationDoneListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$Tiling +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties +instanceKlass com/mathworks/widgets/desk/DTTitleBar$2 +instanceKlass com/mathworks/widgets/desk/DTTitleButton$ActionPropertyListener +instanceKlass com/mathworks/widgets/desk/DTTitleButton$IconData +instanceKlass com/mathworks/widgets/desk/DTBorderFactory$SelectionDependent +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$BarState +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ContainerState +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$State +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step$1 +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Condition +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder +instanceKlass com/mathworks/mde/explorer/Explorer$1 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils$3 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils +instanceKlass com/mathworks/widgets/desk/DTToolSet$1 +instanceKlass com/mathworks/widgets/desk/DTToolSet$KeyOwnerCombo +instanceKlass com/mathworks/widgets/desk/DTToolBarFactory +instanceKlass com/mathworks/widgets/desk/DTToolSet$ItemInfo +instanceKlass com/mathworks/widgets/desk/DTToolSet +instanceKlass com/mathworks/mde/explorer/Explorer$9 +instanceKlass com/mathworks/mde/explorer/Explorer$17 +instanceKlass com/mathworks/mde/explorer/Explorer$15 +instanceKlass com/mathworks/mde/explorer/Explorer$16 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$3 +instanceKlass com/mathworks/services/ColorPrefs$ColorListener +instanceKlass com/mathworks/services/ColorPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ColorListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/util/ExplicitColorAndFontProvider +instanceKlass com/mathworks/util/tree/TreeUtils$8 +instanceKlass com/mathworks/util/tree/TreeUtils$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$5 +instanceKlass com/mathworks/util/tree/VisitStrategy +instanceKlass com/mathworks/util/tree/TreeUtils$9 +instanceKlass com/mathworks/util/tree/Visitor +instanceKlass com/mathworks/util/tree/TreeUtils +instanceKlass com/mathworks/util/tree/ComponentTree +instanceKlass com/mathworks/services/OldFontPrefs +instanceKlass com/mathworks/mde/functionbrowser/FunctionBrowserFontPrefs +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils$ClipboardPrefListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs$DecimalSeparatorListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs +instanceKlass com/mathworks/widgets/spreadsheet/format/SupplementalFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/CompositeFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory$BooleanFormatterImpl +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalar +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$GEBestFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$1 +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/Formatter +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils +instanceKlass com/mathworks/mde/array/ArrayEditorFontPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowserResources +instanceKlass com/mathworks/mde/workspace/WorkspaceFontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$ExplorerFontPrefs +instanceKlass com/mathworks/mde/editor/EditorFontPrefs +instanceKlass com/mathworks/mde/cmdhist/CmdHistoryPrefs +instanceKlass com/mathworks/services/FontPrefs$FontItem +instanceKlass com/mathworks/services/PrefsAWT +instanceKlass com/mathworks/services/FontPrefs$HtmlFontPrefs +instanceKlass com/mathworks/services/FontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ComponentListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$1 +instanceKlass com/mathworks/util/tree/Tree +instanceKlass com/mathworks/services/FontListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils +instanceKlass com/mathworks/mde/explorer/Explorer$4 +instanceKlass com/mathworks/mde/explorer/Explorer$3 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$5 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$4 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$Header$1 +instanceKlass java/awt/GridBagConstraints +instanceKlass java/awt/GridBagLayout +instanceKlass java/util/function/Predicate +instanceKlass java/util/function/Consumer +instanceKlass java/util/function/UnaryOperator +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$2 +instanceKlass com/mathworks/services/settings/SettingLevel$1 +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder +instanceKlass javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout +instanceKlass com/mathworks/sourcecontrol/ThreadUtils$1 +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneBorder +instanceKlass com/mathworks/sourcecontrol/ThreadUtils +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$2 +instanceKlass java/util/UUID$Holder +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$1 +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$2 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$2 +instanceKlass com/mathworks/widgets/tooltip/TooltipUtils +instanceKlass com/mathworks/mwswing/ComponentUtils +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$2 +instanceKlass javax/swing/text/html/AccessibleHTML$DocumentHandler +instanceKlass javax/swing/text/html/AccessibleHTML$ElementInfo +instanceKlass javax/swing/text/html/AccessibleHTML$PropertyChangeHandler +instanceKlass javax/swing/text/html/AccessibleHTML +instanceKlass javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable +instanceKlass java/util/Formatter$Conversion +instanceKlass java/util/Formatter$Flags +instanceKlass java/util/Formatter$FormatSpecifier +instanceKlass java/util/Formatter$FixedString +instanceKlass java/util/Formatter$FormatString +instanceKlass java/util/Formatter +instanceKlass com/mathworks/util/HTMLUtils +instanceKlass javax/swing/text/GapContent$UndoPosRef +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer$ElemChanges +instanceKlass javax/swing/text/DefaultStyledDocument$ElementSpec +instanceKlass javax/swing/text/html/parser/ContentModelState +instanceKlass javax/swing/text/html/parser/TagStack +instanceKlass javax/swing/text/html/parser/TagElement +instanceKlass javax/swing/text/html/parser/Parser +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction +instanceKlass javax/swing/text/html/HTMLEditorKit$ParserCallback +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$6 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$4 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$5 +instanceKlass com/mathworks/hg/util/HGPeerQueue +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$3 +instanceKlass javax/swing/text/TabableView +instanceKlass javax/swing/text/html/StyleSheet$1 +instanceKlass javax/swing/text/html/CSSBorder$StrokePainter +instanceKlass javax/swing/text/html/CSSBorder$SolidPainter +instanceKlass javax/swing/text/html/CSSBorder$NullPainter +instanceKlass javax/swing/text/html/CSSBorder$BorderPainter +instanceKlass javax/swing/text/html/StyleSheet$BoxPainter +instanceKlass javax/swing/text/html/StyleSheet$SearchBuffer +instanceKlass javax/swing/text/html/MuxingAttributeSet +instanceKlass javax/swing/text/FlowView$FlowStrategy +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler +instanceKlass javax/swing/text/html/parser/AttributeList +instanceKlass javax/swing/text/html/parser/ContentModel +instanceKlass javax/swing/text/html/parser/ParserDelegator$1 +instanceKlass javax/swing/text/html/parser/Entity +instanceKlass javax/swing/text/html/parser/Element +instanceKlass javax/swing/text/html/parser/DTD +instanceKlass javax/swing/text/html/parser/DTDConstants +instanceKlass javax/swing/text/html/HTMLEditorKit$Parser +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer +instanceKlass javax/swing/text/html/CSS$ShorthandMarginParser +instanceKlass javax/swing/text/html/CSS$LengthUnit +instanceKlass javax/swing/text/html/CSSParser +instanceKlass javax/swing/text/html/StyleSheet$CssParser +instanceKlass javax/swing/text/html/CSSParser$CSSParserCallback +instanceKlass javax/swing/text/html/HTMLEditorKit$1 +instanceKlass javax/swing/text/html/StyleSheet$SelectorMapping +instanceKlass javax/swing/text/html/CSS$CssValue +instanceKlass javax/swing/text/html/CSS$Value +instanceKlass javax/swing/text/html/CSS$Attribute +instanceKlass javax/swing/text/html/CSS +instanceKlass javax/swing/text/StyledEditorKit$AttributeTracker +instanceKlass javax/swing/text/html/HTML$Attribute +instanceKlass javax/swing/text/html/HTML +instanceKlass javax/swing/text/html/HTML$Tag +instanceKlass javax/swing/text/html/HTMLEditorKit$HTMLFactory +instanceKlass javax/swing/text/StyledEditorKit$StyledViewFactory +instanceKlass javax/swing/text/StyledDocument +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$1 +instanceKlass javax/swing/event/HyperlinkListener +instanceKlass com/mathworks/widgets/HyperlinkTextLabel +instanceKlass com/mathworks/toolbox/shared/computils/widgets/DisposableBusyAffordance$1 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$9 +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$SourceControlUIHolder +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$MainContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DynamicMenuContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$4 +instanceKlass com/mathworks/matlab/api/explorer/CutCopyPasteActionValidator +instanceKlass java/awt/EventQueue$1AWTInvocationLock +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$6 +instanceKlass java/util/WeakHashMap$HashIterator +instanceKlass com/mathworks/util/RequestFilter$1$1 +instanceKlass sun/awt/datatransfer/DataTransferer$IndexedComparator +instanceKlass sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder +instanceKlass java/awt/datatransfer/SystemFlavorMap$2 +instanceKlass sun/net/DefaultProgressMeteringPolicy +instanceKlass sun/net/ProgressMeteringPolicy +instanceKlass sun/net/ProgressMonitor +instanceKlass java/awt/datatransfer/SystemFlavorMap$1 +instanceKlass sun/awt/Mutex +instanceKlass sun/awt/datatransfer/ToolkitThreadBlockedHandler +instanceKlass sun/awt/datatransfer/DataTransferer +instanceKlass java/awt/datatransfer/Clipboard +instanceKlass com/mathworks/widgets/grouptable/transfer/Transfer +instanceKlass com/mathworks/mlwidgets/explorer/util/MLPathUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$1 +instanceKlass com/mathworks/sourcecontrol/EmptyProject +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$1 +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$2 +instanceKlass com/mathworks/cmlink/util/status/CMStatusChangeServer +instanceKlass com/mathworks/sourcecontrol/SCProcessTerminator +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressState +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster$EventDispatcher +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/controller/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/api/ExceptionHandler +instanceKlass com/mathworks/cmlink/util/interactor/CMMonitor +instanceKlass com/mathworks/cmlink/api/ProgressIndicator +instanceKlass com/mathworks/cmlink/api/StatusBroadcaster +instanceKlass com/mathworks/cmlink/util/adapter/TriggerableTerminator +instanceKlass com/mathworks/cmlink/api/Terminator +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$SCAdapterConnectionManagerHolder +instanceKlass com/mathworks/cmlink/management/cache/CMStatusCacheListener +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapter +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMInteractor +instanceKlass com/mathworks/cmlink/util/interactor/MonitoringApplicationInteractor +instanceKlass com/mathworks/cmlink/api/ApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager +instanceKlass java/util/concurrent/ConcurrentHashMap$Traverser +instanceKlass sun/font/SunFontManager$TTorT1Filter +instanceKlass sun/font/SunFontManager$4 +instanceKlass com/mathworks/sourcecontrol/prefs/SCSettingsUtilities +instanceKlass com/mathworks/util/LazyFilter$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$2 +instanceKlass com/mathworks/util/LazyFilter +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ApplicableChecker +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$6 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$5 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$4 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$3 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$2 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$9 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$8 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$1 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$4 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$3 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$2 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$1 +instanceKlass sun/awt/windows/WDesktopPeer +instanceKlass java/awt/peer/DesktopPeer +instanceKlass java/awt/Desktop +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DeleteActionCode +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/MenuUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$32 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$1 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$7 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$6 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$5 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$4 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$3 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$2 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$1 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$8 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$7 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$6 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$5 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$4 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$3 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/WritablePathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$33 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier +instanceKlass sun/font/SunFontManager$13 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider$1 +instanceKlass com/mathworks/hg/util/HGUtils$ComponentImageRunnable +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider$ReportRunner +instanceKlass com/mathworks/hg/util/HGUtils +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$5 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$4 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$1 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$3 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$DebugStateListener$1 +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$2 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveIconFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider$1 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$2 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$2 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$2 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$1 +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration$1 +instanceKlass com/mathworks/toolboxmanagement/tasks/ToolboxInstallTask +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$1 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$3 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$1 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$4 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$3 +instanceKlass com/mathworks/hg/peer/DebugUtilities$1 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$2 +instanceKlass com/mathworks/hg/peer/DebugUtilities +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$1 +instanceKlass com/mathworks/jmi/AWTUtilities$Synchronizer +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider$1 +instanceKlass com/mathworks/hg/peer/FigureRenderLocker +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$3 +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$4 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$CachedData +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicate +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$ImmutableEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem$MountPoint +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$7 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput$1 +instanceKlass com/mathworks/util/ObjectPool$Entry +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$2 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$2 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderBinding +instanceKlass com/mathworks/util/ObjectPool +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/CommonsCompressZipInput +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipInput +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl$ProviderBinding +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$InputFailoverChain +instanceKlass com/mathworks/util/ExtendedIterable +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl +instanceKlass com/mathworks/matlab/api/explorer/ActionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$ActionList +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DeferHandler +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$5 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProviderProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$4 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$3 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$2 +instanceKlass com/mathworks/widgets/WorkMonitor$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$1 +instanceKlass javax/accessibility/AccessibleExtendedTable +instanceKlass javax/accessibility/AccessibleTable +instanceKlass javax/accessibility/AccessibleSelection +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveUtils +instanceKlass com/mathworks/explorer/VariableTransferHandler +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TransferFileGroup +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DecorationResolvingInstantiator +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabCodeFileDetailPanel +instanceKlass com/mathworks/matlab/api/explorer/DetailPanel +instanceKlass java/awt/datatransfer/MimeType +instanceKlass java/awt/datatransfer/MimeTypeParameterList +instanceKlass java/awt/datatransfer/DataFlavor +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/H1Retriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/FileTransferHandler +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2 +instanceKlass com/mathworks/mwswing/table/ListColorUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$20 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$19 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$18 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$3 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$1 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$1 +instanceKlass com/mathworks/mwswing/CellViewer$4 +instanceKlass com/mathworks/mwswing/CellViewer$3 +instanceKlass com/mathworks/mwswing/CellViewer$2 +instanceKlass com/mathworks/mwswing/CellViewer$1 +instanceKlass com/mathworks/fileutils/MLFileUtils +instanceKlass com/mathworks/mwswing/CellViewer +instanceKlass com/mathworks/mwswing/CellPainterProvider +instanceKlass com/mathworks/mwswing/CellViewerUtils$Context +instanceKlass com/mathworks/mwswing/CellViewerUtils +instanceKlass com/mathworks/fl/i18n/XMLMessageSystemJNI +instanceKlass com/mathworks/mwswing/DefaultTableCellViewerCustomizer +instanceKlass com/mathworks/widgets/grouptable/RightClickSelectionHandler +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler$3 +instanceKlass com/mathworks/fl/i18n/XMLMessageSystem +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$1 +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler$2 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfo +instanceKlass com/mathworks/matlab/api/explorer/FileDecorations +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$1 +instanceKlass com/mathworks/matlab/api/explorer/FileDecorators +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$5 +instanceKlass com/mathworks/matlab/api/explorer/CoreFileDecoration +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$26 +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionRunner +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Element +instanceKlass com/jidesoft/grid/SortableTableModel$a_ +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$8 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$4 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$3 +instanceKlass com/mathworks/util/RequestQueue$3 +instanceKlass com/mathworks/util/RequestQueue$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileListExpansionContext +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider$State +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$2 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$1 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$3 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$1 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener +instanceKlass com/mathworks/widgets/grouptable/ToolTipSupport +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$37 +instanceKlass java/awt/font/LineMetrics +instanceKlass sun/font/CoreMetrics +instanceKlass sun/font/StandardGlyphVector$GlyphStrike +instanceKlass java/awt/font/GlyphVector +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$20 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$25 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$24 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$8 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$14 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$13 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$12 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$11 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$10 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$7 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$9 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$30 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$29 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$27 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$19 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$18 +instanceKlass java/awt/Cursor$CursorDisposer +instanceKlass java/awt/image/PixelGrabber +instanceKlass java/awt/image/FilteredImageSource +instanceKlass java/awt/image/ImageFilter +instanceKlass java/awt/Cursor$2 +instanceKlass java/awt/Cursor$3 +instanceKlass java/awt/dnd/DragSource +instanceKlass java/awt/dnd/DragSourceAdapter +instanceKlass java/awt/dnd/DragSourceMotionListener +instanceKlass java/awt/dnd/DragSourceListener +instanceKlass java/awt/dnd/DragGestureListener +instanceKlass com/mathworks/widgets/grouptable/transfer/TransferController +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$2 +instanceKlass com/mathworks/util/RequestAggregator$2 +instanceKlass com/mathworks/util/RequestFilter$Request +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$3 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$5 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$4 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$2 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$1 +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$4 +instanceKlass com/mathworks/mwswing/MJCheckBoxMenuItem$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$1 +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$ToggleSelectionPolicy +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$SelectionPolicy +instanceKlass java/util/concurrent/Semaphore +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$DefaultEditHandler +instanceKlass com/jidesoft/grid/TreeTable$0 +instanceKlass com/jidesoft/grid/SortableTable$0 +instanceKlass com/jidesoft/grid/SortItemSupport +instanceKlass com/jidesoft/grid/g +instanceKlass com/jidesoft/grid/TableModelsWrapper +instanceKlass com/jidesoft/grid/SortItemSupport$SortOrderHandler +instanceKlass com/jidesoft/grid/CellStyleTable$0 +instanceKlass com/jidesoft/grid/JideTable$14 +instanceKlass java/awt/datatransfer/Transferable +instanceKlass javax/swing/TransferHandler$DropLocation +instanceKlass com/jidesoft/grid/JideTable$11 +instanceKlass com/jidesoft/grid/RendererWrapper +instanceKlass com/jidesoft/swing/DelegateMouseInputListener +instanceKlass javax/swing/plaf/basic/BasicTableUI$Handler +instanceKlass com/jidesoft/grid/NavigableModel +instanceKlass com/jidesoft/grid/StyleModel +instanceKlass com/jidesoft/grid/IndexedRowTableModelWrapper +instanceKlass com/jidesoft/grid/IFilterableTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableHeaderAdapter +instanceKlass com/jidesoft/plaf/basic/BasicJideTableUIDelegate +instanceKlass com/jidesoft/plaf/TableUIDelegate +instanceKlass com/jidesoft/grid/EditorStyleTableModel +instanceKlass com/jidesoft/grid/GroupModelProvider +instanceKlass com/jidesoft/grid/ColumnTableModelWrapper +instanceKlass com/jidesoft/grid/RowTableModelWrapper +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator$a_ +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator +instanceKlass com/jidesoft/grid/CellStyleTableHeader$0 +instanceKlass com/jidesoft/utils/SortedList +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$1 +instanceKlass com/jidesoft/plaf/DelegateTableHeaderUI +instanceKlass sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon +instanceKlass com/jidesoft/grid/TableHeaderCellDecorator +instanceKlass javax/swing/JTable$$Lambda$19 +instanceKlass javax/swing/JTable$$Lambda$18 +instanceKlass javax/swing/JTable$$Lambda$17 +instanceKlass javax/swing/JTable$$Lambda$16 +instanceKlass javax/swing/JTable$$Lambda$15 +instanceKlass javax/swing/JTable$$Lambda$14 +instanceKlass javax/swing/JTable$$Lambda$13 +instanceKlass javax/swing/JTable$$Lambda$12 +instanceKlass javax/swing/JTable$$Lambda$11 +instanceKlass javax/swing/JTable$$Lambda$10 +instanceKlass javax/swing/JTable$$Lambda$9 +instanceKlass com/jidesoft/grid/JideTable$8 +instanceKlass com/jidesoft/grid/JideTable$7 +instanceKlass com/jidesoft/plaf/TableHeaderUIDelegate +instanceKlass com/jidesoft/grid/TableUtils +instanceKlass com/jidesoft/grid/TableModelWrapper +instanceKlass com/jidesoft/grid/TableModelWrapperUtils +instanceKlass com/jidesoft/grid/ColumnWidthTableModel +instanceKlass com/jidesoft/grid/ColumnIdentifierTableModel +instanceKlass com/jidesoft/swing/AlignmentSupport +instanceKlass com/jidesoft/swing/ComponentStateSupport +instanceKlass com/jidesoft/swing/ButtonStyle +instanceKlass com/jidesoft/grid/h +instanceKlass javax/swing/table/DefaultTableColumnModel +instanceKlass javax/swing/table/TableColumnModel +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/TableActionInput +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler +instanceKlass com/mathworks/widgets/ClosableToolTipData +instanceKlass com/mathworks/matlab/api/explorer/Status +instanceKlass com/mathworks/widgets/grouptable/ColumnActions +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager +instanceKlass com/mathworks/widgets/grouptable/GroupingTableLayout +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler +instanceKlass com/jidesoft/grid/CellStyleCustomizer +instanceKlass com/jidesoft/grid/CellStyleProvider +instanceKlass com/jidesoft/grid/TableStyleProvider +instanceKlass com/jidesoft/grid/CellStyle +instanceKlass com/jidesoft/swing/Prioritized +instanceKlass javax/swing/undo/UndoableEditSupport +instanceKlass com/jidesoft/grid/GridColorProvider +instanceKlass com/jidesoft/grid/SortTableHeaderRenderer +instanceKlass com/jidesoft/validation/RowValidator +instanceKlass com/jidesoft/validation/Validator +instanceKlass javax/swing/table/TableColumn +instanceKlass com/jidesoft/grid/JideCellEditorListener +instanceKlass com/jidesoft/grid/JideTable$q_ +instanceKlass com/jidesoft/grid/RowHeights +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$10 +instanceKlass com/mathworks/widgets/BusyAffordance$3 +instanceKlass com/mathworks/widgets/WorkMonitor$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUtils +instanceKlass com/mathworks/widgets/WorkMonitor$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$7 +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget +instanceKlass com/mathworks/widgets/WorkMonitor$3 +instanceKlass com/mathworks/widgets/WorkMonitor$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableResources +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$6 +instanceKlass com/mathworks/widgets/grouptable/FlatExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$ConfigurationListener +instanceKlass com/mathworks/util/TypeFilter +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionCombiner +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$RootContextChangeListener +instanceKlass java/lang/Math$RandomNumberGeneratorHolder +instanceKlass com/jidesoft/grid/DefaultExpandable$0 +instanceKlass com/jidesoft/grid/Cacheable +instanceKlass com/jidesoft/grid/ExpandableCell +instanceKlass com/jidesoft/grid/c +instanceKlass com/jidesoft/grid/AbstractNode +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$GroupingTableDefaultIntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$IntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Target +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget$Adapter +instanceKlass com/mathworks/widgets/grouptable/ExpansionChangeListener +instanceKlass javax/swing/tree/TreePath +instanceKlass com/jidesoft/grid/ExpandableRow +instanceKlass com/jidesoft/grid/Expandable +instanceKlass javax/swing/table/AbstractTableModel +instanceKlass com/jidesoft/grid/IndexChangeEventGenerator +instanceKlass com/jidesoft/grid/ITreeTableModel +instanceKlass com/jidesoft/grid/MultiTableModel +instanceKlass com/jidesoft/grid/ContextSensitiveTableModel +instanceKlass com/jidesoft/grid/SpanTableModel +instanceKlass com/jidesoft/grid/SpanModel +instanceKlass com/jidesoft/utils/CacheMap +instanceKlass javax/swing/event/TreeWillExpandListener +instanceKlass com/mathworks/matlab/api/explorer/ActionInput +instanceKlass com/mathworks/widgets/grouptable/NonRectangularCellRenderer +instanceKlass javax/swing/event/TreeExpansionListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$MessageFactory +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$EditHandler +instanceKlass com/jidesoft/grid/Row +instanceKlass com/jidesoft/grid/Node +instanceKlass com/jidesoft/grid/ISortableTableModel +instanceKlass com/jidesoft/converter/AbstractContext +instanceKlass javax/swing/AbstractCellEditor +instanceKlass com/jidesoft/grid/JideCellEditor +instanceKlass com/jidesoft/grid/EditorStyleSupport +instanceKlass com/jidesoft/grid/EditorContextSupport +instanceKlass com/jidesoft/converter/ConverterContextSupport +instanceKlass com/mathworks/mde/explorer/Explorer$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$6 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$7 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance$1 +instanceKlass com/mathworks/util/ReturnRunnable +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance +instanceKlass com/mathworks/mde/explorer/DirectoryVsFileSeparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$1 +instanceKlass com/mathworks/widgets/grouptable/Group +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4 +instanceKlass com/jidesoft/grid/TableColumnWidthKeeper +instanceKlass com/jidesoft/grid/FilterableTableModelListener +instanceKlass com/jidesoft/swing/AutoCompletion +instanceKlass com/jidesoft/validation/ValidationResult +instanceKlass com/jidesoft/grid/TableSelectionModel +instanceKlass com/jidesoft/grid/TableSelectionListener +instanceKlass com/jidesoft/grid/RowHeightChangeListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$3 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnSize +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DescriptionAttribute +instanceKlass com/mathworks/widgets/grouptable/VerticalAttribute +instanceKlass com/jidesoft/grid/CellSpan +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePair +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSizeGenerator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/StatusGroupingMode +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$2 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$1 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$IconConverter +instanceKlass com/mathworks/sourcecontrol/resources/CFBSCResources +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn +instanceKlass com/mathworks/sourcecontrol/SourceControlUI +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableEditor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileTypeComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn +instanceKlass com/mathworks/widgets/grouptable/GroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn +instanceKlass com/mathworks/widgets/grouptable/ExpansionContext +instanceKlass com/mathworks/mde/explorer/Explorer$14 +instanceKlass com/mathworks/mde/explorer/Explorer$13 +instanceKlass com/mathworks/mde/explorer/Explorer$12 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/GlobalShutdownEventListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/EmptyPoller +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$9 +instanceKlass javax/swing/event/UndoableEditListener +instanceKlass javax/swing/text/DefaultCaret$1 +instanceKlass javax/swing/text/AbstractDocument$UndoRedoDocumentEvent +instanceKlass javax/swing/event/DocumentEvent$ElementChange +instanceKlass javax/swing/text/SegmentCache +instanceKlass javax/swing/text/Utilities +instanceKlass javax/swing/event/DocumentEvent$EventType +instanceKlass javax/swing/undo/AbstractUndoableEdit +instanceKlass javax/swing/undo/UndoableEdit +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$3 +instanceKlass com/mathworks/mwswing/DefaultListCellViewerCustomizer +instanceKlass java/awt/dnd/DragGestureRecognizer +instanceKlass com/mathworks/mwswing/MJList$ListAppearanceFocusListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$1 +instanceKlass javax/swing/JComponent$ActionStandin +instanceKlass com/jidesoft/hints/AbstractIntelliHints$2 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$4 +instanceKlass com/sun/java/swing/plaf/windows/WindowsGraphicsUtils +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager +instanceKlass javax/swing/JComboBox$KeySelectionManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$Handler +instanceKlass javax/swing/plaf/basic/BasicComboBoxEditor +instanceKlass javax/swing/ComboBoxEditor +instanceKlass javax/swing/plaf/basic/BasicScrollPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ModelListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsScrollBarUI$Grid +instanceKlass javax/swing/JScrollBar$ModelListener +instanceKlass java/awt/Adjustable +instanceKlass javax/swing/ViewportLayout +instanceKlass javax/swing/ScrollPaneLayout +instanceKlass javax/swing/plaf/basic/BasicComboPopup$Handler +instanceKlass javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass +instanceKlass javax/swing/plaf/basic/ComboPopup +instanceKlass com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2 +instanceKlass javax/swing/JComboBox$1 +instanceKlass javax/swing/MutableComboBoxModel +instanceKlass javax/swing/ComboBoxModel +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupPropertyChangeListener +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupLayout +instanceKlass com/jidesoft/swing/DraggableHandle +instanceKlass com/jidesoft/swing/Alignable +instanceKlass com/jidesoft/swing/ResizableSupport +instanceKlass com/jidesoft/popup/JidePopupFactory +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8 +instanceKlass com/jidesoft/swing/JideScrollPaneConstants +instanceKlass com/jidesoft/hints/AbstractIntelliHints +instanceKlass com/jidesoft/hints/IntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarTextFieldUtils +instanceKlass com/mathworks/util/RequestFilter$1 +instanceKlass com/mathworks/util/RequestAggregator +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$1 +instanceKlass com/mathworks/util/Combiner +instanceKlass com/mathworks/util/RequestFilter +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent +instanceKlass org/apache/commons/lang/StringUtils +instanceKlass com/mathworks/util/ParameterRunnable +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$4 +instanceKlass com/mathworks/html/Url +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$3 +instanceKlass com/mathworks/helpsearch/SearchConfig +instanceKlass com/mathworks/help/helpui/DocUrlParser +instanceKlass com/mathworks/helpsearch/product/DocumentationSet +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/PaintingUtils +instanceKlass java/awt/geom/Line2D +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarIcon +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButton +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/StatToEntryAdapter +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList$1 +instanceKlass com/mathworks/util/AsyncReceiverUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList$1 +instanceKlass com/mathworks/util/Holder +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$State +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/IconLabel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$8 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel$StateChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/debug/MatlabDebuggerActionsProvider +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugStackPruner +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugEventTranslator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptor +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackInfo +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$3 +instanceKlass com/mathworks/fileutils/MatlabPath$PathEntry +instanceKlass com/mathworks/jmi/Matlab$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$2 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton +instanceKlass com/mathworks/util/MulticastChangeListener +instanceKlass com/mathworks/mde/explorer/Explorer$11 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$3 +instanceKlass com/mathworks/addons_common/util/settings/AddOnsSettingsUtils +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation$LazyHolder +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation +instanceKlass com/mathworks/addons_common/util/settings/InstallationFolderUtils +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryFacadeImpl +instanceKlass com/mathworks/jmi/MatlabPath$PathEntry +instanceKlass java/util/concurrent/CopyOnWriteArrayList$COWIterator +instanceKlass com/mathworks/addons/AddOnsAddressBarAPIPlugin +instanceKlass com/mathworks/filesystem_adapter/services/MATLABOnlineAddressBarPlugin +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAddressBarPlugin +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager$AddressBarPluginManagerHolder +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager +instanceKlass com/mathworks/mlwidgets/explorer/util/MacEncodingBugWorkaround +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$HistoryItem +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$4 +instanceKlass com/mathworks/util/MRUList +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory +instanceKlass com/mathworks/mde/explorer/Explorer$8 +instanceKlass com/mathworks/widgets/WorkMonitor$Task +instanceKlass com/mathworks/mde/explorer/Explorer$18 +instanceKlass com/mathworks/fileutils/MatlabPath$3 +instanceKlass com/mathworks/sourcecontrol/SourceControlManagerPluginImpl +instanceKlass com/mathworks/fileutils/MatlabPath$2 +instanceKlass com/mathworks/mlwidgets/explorer/SourceControlManager +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass com/mathworks/fileutils/MatlabPath$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntry +instanceKlass com/mathworks/fileutils/MatlabPath +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntryFactory +instanceKlass com/mathworks/cfbutils/StatEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualTarget +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext$State +instanceKlass java/util/concurrent/RunnableScheduledFuture +instanceKlass java/util/concurrent/ScheduledFuture +instanceKlass java/util/concurrent/ScheduledExecutorService +instanceKlass com/mathworks/util/NamedDaemonThreadFactory +instanceKlass com/mathworks/util/ExecutorServiceFactory +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerRefreshDaemon +instanceKlass java/awt/DisplayMode +instanceKlass com/mathworks/mlwidgets/explorer/model/PathModel +instanceKlass com/mathworks/mlwidgets/explorer/util/MLFileSystemUtils +instanceKlass com/mathworks/hg/util/JavaSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/AbstractSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/DisplayChangeManager +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$Node +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1 +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore +instanceKlass com/mathworks/matlab/api/editor/Editor +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$12 +instanceKlass com/mathworks/cfbutils/FileSystemAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/DebugAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$5 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$3 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$4 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$MessageHandler +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier +instanceKlass ca/odell/glazedlists/impl/WeakReferenceProxy +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$SubjectAndListener +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/SimpleTree +instanceKlass ca/odell/glazedlists/impl/sort/ComparableComparator +instanceKlass ca/odell/glazedlists/gui/TableFormat +instanceKlass ca/odell/glazedlists/FunctionList$Function +instanceKlass ca/odell/glazedlists/Filterator +instanceKlass ca/odell/glazedlists/TextFilterator +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor +instanceKlass ca/odell/glazedlists/CollectionList$Model +instanceKlass ca/odell/glazedlists/ThresholdList$Evaluator +instanceKlass ca/odell/glazedlists/ObservableElementList$Connector +instanceKlass ca/odell/glazedlists/GlazedLists +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/Element +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorTree +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/ListToByteCoder +instanceKlass ca/odell/glazedlists/impl/event/Tree4Deltas +instanceKlass ca/odell/glazedlists/impl/adt/gnutrove/TIntArrayList +instanceKlass ca/odell/glazedlists/impl/event/BlockSequence +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter$ListEventFormat +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$EventFormat +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$PublisherAdapter +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$AssemblerHelper +instanceKlass ca/odell/glazedlists/event/ListEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventAssembler +instanceKlass ca/odell/glazedlists/impl/java15/LockAdapter +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50ReadWriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/Lock +instanceKlass ca/odell/glazedlists/util/concurrent/ReadWriteLock +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50LockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/DelegateLockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/LockFactory +instanceKlass com/mathworks/hg/util/NativeHG +instanceKlass ca/odell/glazedlists/SortedList$ElementRawOrderComparator +instanceKlass com/mathworks/hg/GraphicsOpenGL +instanceKlass ca/odell/glazedlists/SortedList$ElementComparator +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$6 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$RegistrationListener +instanceKlass ca/odell/glazedlists/AbstractEventList +instanceKlass ca/odell/glazedlists/event/ListEventListener +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger +instanceKlass com/mathworks/matlab/api/debug/Debugger +instanceKlass ca/odell/glazedlists/EventList +instanceKlass ca/odell/glazedlists/matchers/Matcher +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$SaveInterceptor +instanceKlass com/mathworks/matlab/api/debug/DebugListener +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$EncodingProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStore +instanceKlass com/mathworks/matlab/api/dataview/UiInfoProvider +instanceKlass com/mathworks/matlab/api/datamodel/PropertyChangeProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$FileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultFileNameProvider +instanceKlass com/mathworks/mde/autosave/AutoSaveImplementor +instanceKlass com/mathworks/jmi/AWTUtilities$InvocationRunnable +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication +instanceKlass com/mathworks/matlab/api/editor/EditorApplication +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem +instanceKlass com/mathworks/util/ThrowableClosure +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/RealFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileSystem +instanceKlass com/mathworks/matlab/api/explorer/FileSystemTransaction +instanceKlass com/mathworks/matlab/api/explorer/FileList +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileMounter +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider +instanceKlass com/mathworks/jmi/ComponentBridge +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/SupportPackageData +instanceKlass com/mathworks/cfbutils/NativeCfb +instanceKlass com/mathworks/help/helpui/DocRoot +instanceKlass com/mathworks/helpsearch/DocPathBuilder +instanceKlass com/mathworks/helpsearch/product/ProductFilter +instanceKlass com/mathworks/fileutils/MLFileIconUtils +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocConfigExceptionHandler +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider +instanceKlass com/mathworks/help/helpui/DocConfigBase +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/JSZipFileIconInfoProvider +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocSetAdapter +instanceKlass com/mathworks/help/helpui/AbstractDocConfig +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/EditorFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider +instanceKlass com/mathworks/jmi/mdt/MatlabCallable +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider +instanceKlass com/mathworks/matlab/api/explorer/StateChangeNotifier +instanceKlass com/mathworks/mde/explorer/PathActionProvider +instanceKlass com/mathworks/util/AsyncReceiver +instanceKlass com/mathworks/mlwidgets/explorer/util/TransactionLogic +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider +instanceKlass com/mathworks/util/RequestQueue +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileContentInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabDesktopReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategyFactory +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TextFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFolderInfoProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivityImpl +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireAction +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivity +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculatorImpl +instanceKlass java/util/concurrent/Executors$DefaultThreadFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculator +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireHandler +instanceKlass com/mathworks/storage/matlabdrivedesktop/ActionFinishListener +instanceKlass com/mathworks/storage/mldrivetripwireaccess/NativeMLDriveTripwireAccess +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/PackageInfoLoader +instanceKlass com/mathworks/storage/mldrivetripwireaccess/MLDriveTripwireAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/SettingsFeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/NativeMatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/FeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/FIGFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider +instanceKlass com/mathworks/instutil/Platform +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MEXFileInfoProvider +instanceKlass com/mathworks/instutil/FilePermissionsUtil +instanceKlass com/mathworks/instutil/FilePermissions +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/PFileInfoProvider +instanceKlass com/mathworks/explorer/MATFileInfoProvider +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider +instanceKlass com/mathworks/jmi/AutoConvertStringToMatlabChar +instanceKlass com/mathworks/mde/liveeditor/MlxFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider +instanceKlass com/mathworks/util/DeferrableRetriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/ImageFileInfoProvider +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$CMFileProvider +instanceKlass com/mathworks/cmlink/api/customization/CMWidget +instanceKlass com/mathworks/cmlink/api/customization/CustomizationWidgetFactory +instanceKlass com/mathworks/sourcecontrol/SccFileProvider +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider +instanceKlass com/mathworks/sourcecontrol/SccFileListener +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/common/SignpostFileInfoProvider +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider +instanceKlass com/mathworks/toolboxmanagement/ToolboxFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider +instanceKlass com/mathworks/mde/difftool/DiffToolUtils +instanceKlass com/mathworks/comparisons/util/AbstractNamedData +instanceKlass com/mathworks/comparisons/source/ComparisonSource +instanceKlass com/mathworks/comparisons/util/GetPropertyValue +instanceKlass com/mathworks/comparisons/source/ComparisonSourceType +instanceKlass com/mathworks/mde/difftool/ComparisonControl +instanceKlass com/mathworks/mde/difftool/DiffReportImplementor +instanceKlass com/mathworks/mde/difftool/DiffToolControl +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$DocumentDiffToolInfo +instanceKlass com/mathworks/mde/difftool/SelectedFilesDiffToolInfo +instanceKlass com/mathworks/mde/difftool/DiffActionProvider +instanceKlass com/mathworks/explorer/KeyBindingProvider +instanceKlass com/mathworks/mlservices/MLLicenseChecker +instanceKlass com/mathworks/matlab/api/explorer/ActionComponentProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider +instanceKlass com/mathworks/project/impl/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/slproject/resources/SlProjectResources +instanceKlass org/xml/sax/helpers/DefaultHandler +instanceKlass org/xml/sax/DTDHandler +instanceKlass com/mathworks/toolbox/slproject/project/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/AutosaveFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/FileDecoration +instanceKlass com/mathworks/util/Converter +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider +instanceKlass com/mathworks/toolbox/coder/plugin/CoderResources +instanceKlass com/mathworks/matlab/api/explorer/MenuSection +instanceKlass com/mathworks/matlab/api/explorer/ActionDefinition +instanceKlass com/mathworks/matlab/api/explorer/StatusRunnable +instanceKlass com/mathworks/toolbox/coder/screener/ScreenerActionProvider +instanceKlass com/mathworks/matlab/api/explorer/ActionProvider +instanceKlass com/mathworks/matlab/api/explorer/FileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/AutoMounter +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerExtensionRegistry +instanceKlass com/mathworks/matlab/api/explorer/SearchCriteria +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPanePrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem +instanceKlass com/mathworks/matlab/api/explorer/ExtensionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager +instanceKlass com/mathworks/widgets/WorkMonitor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar +instanceKlass com/mathworks/matlab/api/explorer/FileLocation +instanceKlass com/mathworks/mde/explorer/ExplorerToolbar +instanceKlass com/mathworks/widgets/desk/DTTitleChangeHandler +instanceKlass com/mathworks/widgets/desk/DTToolBarInfo +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$1 +instanceKlass com/mathworks/widgets/desk/Desktop$ClientListenerData +instanceKlass com/mathworks/mde/help/MLHelpBrowserGroup$DDuxResizedActionListener +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory$1 +instanceKlass com/mathworks/html/HtmlPanelSupportFactory +instanceKlass com/mathworks/html/NewBrowserListener +instanceKlass com/mathworks/html/HtmlContextMenuBuilder +instanceKlass com/mathworks/html/RequestHandler +instanceKlass com/mathworks/html/HtmlPanel +instanceKlass com/mathworks/mlwidgets/html/BrowserTypeConfig +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1 +instanceKlass com/jniwrapper/r +instanceKlass com/jniwrapper/af +instanceKlass com/jniwrapper/PlatformContext +instanceKlass java/security/cert/CertPathValidatorException$Reason +instanceKlass com/teamdev/jxbrowser/BrowserType +instanceKlass sun/security/util/ManifestEntryVerifier$SunProviderHolder +instanceKlass sun/nio/cs/Surrogate +instanceKlass sun/nio/cs/Surrogate$Parser +instanceKlass java/util/Base64$Encoder +instanceKlass java/util/Base64$Decoder +instanceKlass java/util/Base64 +instanceKlass java/security/cert/CertPath +instanceKlass sun/security/rsa/RSAPadding +instanceKlass sun/security/rsa/RSACore +instanceKlass java/security/interfaces/RSAPrivateCrtKey +instanceKlass sun/security/pkcs/PKCS8Key +instanceKlass java/security/interfaces/RSAPrivateKey +instanceKlass java/security/PrivateKey +instanceKlass sun/security/jca/ServiceId +instanceKlass java/security/SignatureSpi +instanceKlass javax/crypto/SecretKey +instanceKlass javax/security/auth/Destroyable +instanceKlass sun/security/util/Length +instanceKlass sun/security/util/KeyUtil +instanceKlass sun/text/normalizer/NormalizerBase$1 +instanceKlass sun/text/normalizer/NormalizerBase$QuickCheckResult +instanceKlass sun/text/normalizer/NormalizerBase$Mode +instanceKlass sun/text/normalizer/NormalizerBase +instanceKlass java/text/Normalizer +instanceKlass sun/security/pkcs/PKCS9Attribute +instanceKlass sun/security/x509/AVAKeyword +instanceKlass sun/security/util/ConstraintsParameters +instanceKlass sun/security/pkcs/SignerInfo +instanceKlass sun/security/x509/NetscapeCertTypeExtension$MapEntry +instanceKlass sun/security/x509/AccessDescription +instanceKlass java/security/cert/PolicyQualifierInfo +instanceKlass sun/security/x509/CertificatePolicyId +instanceKlass sun/security/x509/PolicyInformation +instanceKlass sun/security/x509/DNSName +instanceKlass sun/security/x509/URIName +instanceKlass sun/security/x509/GeneralName +instanceKlass sun/security/x509/GeneralNames +instanceKlass sun/security/x509/DistributionPoint +instanceKlass sun/security/util/MemoryCache$CacheEntry +instanceKlass sun/security/x509/X509AttributeName +instanceKlass sun/security/x509/KeyIdentifier +instanceKlass sun/security/x509/OIDMap$OIDInfo +instanceKlass sun/security/x509/PKIXExtensions +instanceKlass sun/security/x509/OIDMap +instanceKlass sun/security/x509/Extension +instanceKlass java/security/cert/Extension +instanceKlass sun/security/x509/CertificateExtensions +instanceKlass java/security/interfaces/RSAPublicKey +instanceKlass java/security/interfaces/RSAKey +instanceKlass java/security/spec/RSAPrivateKeySpec +instanceKlass java/security/spec/RSAPublicKeySpec +instanceKlass java/security/KeyFactorySpi +instanceKlass sun/security/rsa/SunRsaSignEntries +instanceKlass sun/security/jca/ProviderList$ServiceList$1 +instanceKlass java/security/KeyFactory +instanceKlass java/security/spec/EncodedKeySpec +instanceKlass java/security/spec/KeySpec +instanceKlass sun/security/util/BitArray +instanceKlass sun/security/x509/X509Key +instanceKlass java/security/PublicKey +instanceKlass java/security/Key +instanceKlass sun/security/x509/CertificateX509Key +instanceKlass sun/security/x509/CertificateValidity +instanceKlass sun/security/x509/AVA +instanceKlass sun/security/x509/RDN +instanceKlass javax/security/auth/x500/X500Principal +instanceKlass sun/security/x509/X500Name$1 +instanceKlass sun/security/x509/X500Name +instanceKlass sun/security/x509/GeneralNameInterface +instanceKlass sun/security/x509/CertificateAlgorithmId +instanceKlass sun/security/x509/SerialNumber +instanceKlass sun/security/x509/CertificateSerialNumber +instanceKlass sun/security/x509/CertificateVersion +instanceKlass sun/security/x509/X509CertInfo +instanceKlass sun/security/x509/CertAttrSet +instanceKlass sun/security/util/Cache$EqualByteArray +instanceKlass java/security/cert/X509Extension +instanceKlass sun/security/util/Cache +instanceKlass java/security/cert/CertificateFactorySpi +instanceKlass java/security/cert/CertificateFactory +instanceKlass sun/security/x509/AlgorithmId +instanceKlass sun/security/util/ByteArrayTagOrder +instanceKlass sun/security/util/ByteArrayLexOrder +instanceKlass sun/security/util/DerEncoder +instanceKlass sun/security/util/DerValue +instanceKlass sun/security/util/ObjectIdentifier +instanceKlass sun/security/pkcs/ContentInfo +instanceKlass sun/security/util/DerIndefLenConverter +instanceKlass sun/security/util/DerInputStream +instanceKlass sun/security/pkcs/PKCS7 +instanceKlass sun/security/util/ManifestDigester$Entry +instanceKlass sun/security/util/ManifestDigester$Position +instanceKlass sun/security/util/ManifestDigester +instanceKlass com/mathworks/html/jxbrowser/BrowserHolder +instanceKlass com/mathworks/html/HtmlComponentIdentifier +instanceKlass com/mathworks/html/BrowserSettings +instanceKlass com/mathworks/html/HtmlActions +instanceKlass com/mathworks/html/HtmlComponent +instanceKlass com/mathworks/html/HtmlCallbackProvider +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory +instanceKlass com/mathworks/help/helpui/HelpBrowserResourceBundle +instanceKlass com/mathworks/help/helpui/HelpBrowserUtils +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DefaultDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs +instanceKlass com/mathworks/mlwidgets/help/messages/HelpPanelCurrentLocationHandler$PageInfoObserver +instanceKlass java/awt/dnd/DropTargetAdapter +instanceKlass com/mathworks/comparisons/util/ResourceManager +instanceKlass com/mathworks/mde/webbrowser/WebBrowserUtils +instanceKlass com/mathworks/matlab/api/editor/EditorApplicationListener +instanceKlass com/mathworks/mde/editor/EditorGroup$4 +instanceKlass com/mathworks/mde/editor/EditorGroup$3 +instanceKlass com/mathworks/mde/editor/EditorGroup$2 +instanceKlass com/mathworks/matlab/api/toolbars/ToolBars +instanceKlass com/mathworks/widgets/text/STPInterface +instanceKlass com/mathworks/widgets/text/STPBaseInterface +instanceKlass com/mathworks/widgets/text/STPViewInterface +instanceKlass com/mathworks/widgets/text/STPModelInterface +instanceKlass com/mathworks/widgets/text/STPBaseModelInterface +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarBuilder +instanceKlass com/mathworks/matlab/api/menus/MenuBuilder +instanceKlass com/mathworks/matlab/api/menus/MenuGroupID +instanceKlass com/mathworks/matlab/api/menus/MenuContext +instanceKlass com/mathworks/mde/editor/ActionManager$KeyBindingContributorProvider +instanceKlass com/mathworks/mde/editor/ActionManager +instanceKlass com/mathworks/mde/editor/EditorGroup$1 +instanceKlass com/mathworks/mde/editor/EditorGroup$8 +instanceKlass com/mathworks/matlab_login/StatusUpdateListener +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1 +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener$3 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkHandler +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$2 +instanceKlass com/mathworks/toolstrip/components/popups/ListItem +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$2 +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$1 +instanceKlass javax/swing/plaf/basic/BasicListUI$Handler +instanceKlass javax/swing/DefaultListSelectionModel +instanceKlass javax/swing/ListSelectionModel +instanceKlass javax/swing/AbstractListModel +instanceKlass com/mathworks/mwswing/FocusReturnHandler +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$SearchActionListener +instanceKlass com/jidesoft/swing/SelectAllUtils +instanceKlass com/mathworks/widgets/SearchTextField$4 +instanceKlass com/jgoodies/forms/factories/ComponentFactory2 +instanceKlass com/jgoodies/forms/factories/ComponentFactory +instanceKlass com/jgoodies/forms/builder/AbstractFormBuilder +instanceKlass com/jgoodies/forms/layout/CellConstraints$Alignment +instanceKlass com/jgoodies/forms/layout/CellConstraints +instanceKlass com/jgoodies/forms/layout/FormLayout$CachingMeasure +instanceKlass com/jgoodies/forms/layout/FormLayout$ComponentSizeCache +instanceKlass com/jgoodies/forms/util/FormUtils +instanceKlass com/jgoodies/forms/layout/FormSpecParser +instanceKlass com/jgoodies/forms/layout/BoundedSize +instanceKlass com/jgoodies/forms/util/LayoutStyle +instanceKlass com/jgoodies/forms/layout/Sizes$ComponentSize +instanceKlass com/jgoodies/forms/layout/ConstantSize$Unit +instanceKlass com/jgoodies/forms/layout/ConstantSize +instanceKlass com/jgoodies/forms/util/UnitConverter +instanceKlass com/jgoodies/forms/layout/Sizes +instanceKlass com/jgoodies/forms/layout/FormSpec$DefaultAlignment +instanceKlass com/jgoodies/forms/layout/FormSpec +instanceKlass com/jgoodies/forms/layout/Size +instanceKlass com/jgoodies/forms/factories/FormFactory +instanceKlass com/jgoodies/forms/layout/LayoutMap +instanceKlass com/jgoodies/forms/layout/FormLayout$Measure +instanceKlass com/jgoodies/forms/layout/FormLayout +instanceKlass com/mathworks/widgets/WindowsWidgetFactory$SearchAndClearButton$1 +instanceKlass javax/swing/text/Segment +instanceKlass java/text/CharacterIterator +instanceKlass com/mathworks/widgets/WindowsWidgetFactory +instanceKlass com/mathworks/widgets/SearchTextField$6 +instanceKlass com/mathworks/widgets/WidgetUtils +instanceKlass javax/accessibility/AccessibleExtendedText +instanceKlass javax/accessibility/AccessibleEditableText +instanceKlass javax/swing/event/CaretListener +instanceKlass com/mathworks/widgets/PromptingTextField$1 +instanceKlass org/apache/commons/lang/ArrayUtils +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener$2 +instanceKlass com/mathworks/mwswing/MJPopupMenu$CloseListener +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindings +instanceKlass javax/swing/JTextField$ScrollRepainter +instanceKlass javax/swing/DefaultBoundedRangeModel +instanceKlass javax/swing/BoundedRangeModel +instanceKlass javax/swing/plaf/synth/SynthUI +instanceKlass javax/swing/plaf/synth/SynthConstants +instanceKlass javax/swing/text/JTextComponent$DefaultKeymap +instanceKlass javax/swing/text/Keymap +instanceKlass javax/swing/text/TabExpander +instanceKlass javax/swing/TransferHandler$TransferSupport +instanceKlass javax/swing/TransferHandler$DropHandler +instanceKlass javax/swing/text/DefaultHighlighter$SafeDamager +instanceKlass javax/swing/text/LayeredHighlighter$LayerPainter +instanceKlass javax/swing/text/Highlighter$HighlightPainter +instanceKlass javax/swing/text/Highlighter$Highlight +instanceKlass javax/swing/text/LayeredHighlighter +instanceKlass javax/swing/text/Highlighter +instanceKlass javax/swing/text/DefaultCaret$Handler +instanceKlass java/awt/datatransfer/ClipboardOwner +instanceKlass javax/swing/text/Caret +instanceKlass javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag +instanceKlass javax/swing/plaf/basic/BasicTextUI$UpdateHandler +instanceKlass javax/swing/text/View +instanceKlass javax/swing/text/Position$Bias +instanceKlass javax/swing/TransferHandler +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener +instanceKlass com/mathworks/mwswing/MJTextField$TextAppearanceFocusListener +instanceKlass com/mathworks/mwswing/AppearanceFocusDispatcher +instanceKlass javax/swing/text/JTextComponent$1 +instanceKlass sun/swing/SwingAccessor$JTextComponentAccessor +instanceKlass com/mathworks/mwswing/AppearanceFocusListener +instanceKlass com/mathworks/widgets/SearchTextField +instanceKlass com/mathworks/mlwidgets/help/DocCenterLocale +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$DefaultDependencyProvider +instanceKlass com/mathworks/helpsearch/index/LocalizedFileLocator +instanceKlass com/mathworks/html/UrlTransformer +instanceKlass com/mathworks/mlwidgets/help/LocalizationFilter +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$HelpDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/HelpUtils +instanceKlass com/mathworks/helpsearch/suggestion/DocumentationSuggestionProvider +instanceKlass com/mathworks/helpsearch/product/DocSetItemResolver +instanceKlass com/mathworks/search/SearchField +instanceKlass com/mathworks/helpsearch/facets/Facetable +instanceKlass com/mathworks/mde/help/suggestion/SuggestionRequest +instanceKlass com/mathworks/help/helpui/DocConfig +instanceKlass com/mathworks/widgets/SearchTextField$Listener +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox +instanceKlass com/mathworks/services/binding/PreferenceState +instanceKlass com/mathworks/widgets/desk/DTKeyBindings +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$1 +instanceKlass com/mathworks/mwswing/MouseLatch +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$EdgeOccupant +instanceKlass com/mathworks/mde/desk/MLMainFrame$1 +instanceKlass com/mathworks/mde/desk/MLMainFrame$StatusTextListener +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$2 +instanceKlass com/mathworks/mwswing/SystemGraphicsEnvironment +instanceKlass com/mathworks/mwswing/ScreenInformationProvider +instanceKlass com/mathworks/mwswing/WindowUtils +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$1 +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu$ContextEventListener +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$1 +instanceKlass com/mathworks/toolstrip/impl/ToolstripTabContentPanel$1 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabContentUI$MyBorder +instanceKlass com/mathworks/toolstrip/plaf/SectionWithHeaderUI$SectionWithHeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$3 +instanceKlass com/mathworks/mwswing/SimpleStringTrimmer +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$1 +instanceKlass com/mathworks/util/event/AWTMouseListener +instanceKlass com/mathworks/util/event/AWTKeyListener +instanceKlass com/mathworks/widgets/desk/DTFrame$7 +instanceKlass com/mathworks/widgets/desk/DTFrame$6 +instanceKlass java/util/EnumMap$EnumMapIterator +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryButton$1 +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager +instanceKlass com/mathworks/mwswing/StringTrimmer +instanceKlass com/mathworks/toolstrip/accessories/ToolTipContentProvider +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager$Client +instanceKlass com/mathworks/util/async/Status +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$4 +instanceKlass com/mathworks/util/AllPredicate +instanceKlass com/mathworks/widgets/desk/DTFrame$QuickAccessBarContextFilter +instanceKlass com/mathworks/mde/desk/MLDesktop$13 +instanceKlass com/mathworks/widgets/desk/DTFrame$5 +instanceKlass com/mathworks/widgets/desk/DTBorderFactory +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ToolBarData +instanceKlass com/mathworks/mde/desk/MLDesktop$12 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$3 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$TabCollectionListener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$2 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$1 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$6 +instanceKlass com/mathworks/widgets/desk/Desktop$54 +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$Listener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$ToolBarPopulator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$2 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$5 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$12 +instanceKlass com/mathworks/mde/desk/PlotGalleryManager$2 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1$1 +instanceKlass com/mathworks/mwswing/MJRadioButton$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon +instanceKlass com/mathworks/widgets/BusyAffordance$2$1 +instanceKlass com/mathworks/widgets/BusyAffordance$2 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel$1 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryDisposer +instanceKlass com/mathworks/toolstrip/factory/TSFactory$8 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$4 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$3 +instanceKlass com/mathworks/widgets/BusyAffordance$UpdateListener +instanceKlass com/mathworks/widgets/BusyAffordance +instanceKlass com/mathworks/widgets/ComponentBuilder +instanceKlass com/mathworks/toolstrip/components/gallery/view/BusyAffordanceProxy +instanceKlass com/mathworks/toolstrip/Previewer +instanceKlass com/mathworks/toolstrip/components/gallery/model/Item +instanceKlass com/mathworks/toolstrip/components/gallery/view/ItemPopupMenuCustomizer +instanceKlass com/mathworks/services/GalleryViewSettingImpl +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryViewSetting +instanceKlass com/mathworks/toolstrip/factory/TSFactory$7 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryRestoreData +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryResources +instanceKlass com/mathworks/toolstrip/components/gallery/model/Category +instanceKlass com/mathworks/toolstrip/components/gallery/model/DefaultGalleryModel +instanceKlass com/mathworks/toolstrip/components/TSUtil +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$11 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$10 +instanceKlass javax/swing/ButtonGroup +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$7 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$VariableLabelDecorator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$6 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$PlotUpdateListener +instanceKlass com/mathworks/mlwidgets/help/ddux/HelpDduxCommandWrapper$Mock +instanceKlass com/mathworks/help/helpui/ddux/DummyDduxCommandWrapper +instanceKlass com/mathworks/help/helpui/ddux/DduxCommandWrapper +instanceKlass com/mathworks/mlwidgets/help/ddux/DummyDduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1 +instanceKlass javax/swing/tree/MutableTreeNode +instanceKlass com/mathworks/mlwidgets/graphics/ModelStateFactory +instanceKlass com/mathworks/mlwidgets/help/ddux/DduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4$1 +instanceKlass com/mathworks/mde/desk/MLFeatures +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1$1 +instanceKlass java/awt/datatransfer/SystemFlavorMap$SoftCache +instanceKlass java/awt/datatransfer/SystemFlavorMap +instanceKlass java/awt/datatransfer/FlavorTable +instanceKlass java/awt/datatransfer/FlavorMap +instanceKlass java/awt/dnd/DropTargetContext +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandDropListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator$1 +instanceKlass com/google/common/collect/ObjectArrays +instanceKlass com/mathworks/toolstrip/sections/IconifiedSectionLayout +instanceKlass com/mathworks/toolstrip/sections/PreferredSectionLayout +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayout +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$2 +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$1 +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayoutPolicy +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies +instanceKlass com/mathworks/toolstrip/components/DropDownActionListener +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListPopupListener +instanceKlass com/mathworks/toolstrip/components/TSDropDownButton$PopupComponentMouseListener +instanceKlass com/mathworks/util/Disposer$Node +instanceKlass com/mathworks/util/Disposer$1 +instanceKlass com/mathworks/util/Disposer +instanceKlass com/google/common/base/Joiner$MapJoiner +instanceKlass com/google/common/base/Joiner +instanceKlass com/google/common/collect/Collections2 +instanceKlass com/google/common/collect/SortedMapDifference +instanceKlass com/google/common/collect/MapDifference +instanceKlass com/google/common/collect/ImmutableMap +instanceKlass com/google/common/collect/Maps$EntryTransformer +instanceKlass java/util/NavigableSet +instanceKlass com/google/common/base/Converter +instanceKlass com/google/common/base/Function +instanceKlass com/google/common/collect/BiMap +instanceKlass com/google/common/collect/UnmodifiableIterator +instanceKlass com/google/common/collect/Maps +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection$WrappedIterator +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ButtonTrigger +instanceKlass com/mathworks/toolstrip/factory/TSFactory$TriggerDisposer +instanceKlass javax/swing/AncestorNotifier +instanceKlass javax/swing/ClientPropertyKey$1 +instanceKlass sun/awt/AWTAccessor$ClientPropertyKeyAccessor +instanceKlass com/mathworks/toolstrip/components/PopupListener$PopupCallback +instanceKlass com/mathworks/toolstrip/plaf/LAFUtil +instanceKlass com/mathworks/toolstrip/plaf/ToolstripButtonUI$ToolstripButtonListener +instanceKlass com/mathworks/toolstrip/plaf/ComponentMnemonicsProvider +instanceKlass com/mathworks/toolstrip/components/LayoutMode +instanceKlass com/mathworks/desktop/mnemonics/Mnemonic +instanceKlass com/mathworks/toolstrip/factory/TSFactory$9 +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder$Column +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$ColumnLayout +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$SectionLayout +instanceKlass com/mathworks/toolstrip/sections/SectionBuilder +instanceKlass com/mathworks/desktop/overlay/Overlay +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections +instanceKlass com/mathworks/toolstrip/factory/TSToolPath +instanceKlass com/mathworks/toolstrip/factory/TSFactory$1 +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/SupportPkgInstallerToolSetFactory +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$ProfileAnalyzerInstanceHolder +instanceKlass com/mathworks/toolbox/distcomp/util/mvm/ResultHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$OperationNotifier +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/DefaultProfileName +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$ProfilePropertyChangeListener +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeSupportAdaptor +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileNamesProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeObservable +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/I18nMatlabIdentifiedException +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/HasI18nMatlabIdentifiedMessage +instanceKlass com/mathworks/util/MatlabIdentified +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileUpdateListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu +instanceKlass com/mathworks/toolbox/distcomp/mwlogin/MatlabLoginController$LoginStatusListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/MLDesktopParallelMenu +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory +instanceKlass javax/swing/ListCellRenderer +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolPropertyListener +instanceKlass com/mathworks/toolstrip/components/PopupShower +instanceKlass com/mathworks/toolstrip/components/gallery/model/GalleryModel +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/GalleryPopup$Listener +instanceKlass com/mathworks/toolstrip/factory/TSFactory +instanceKlass com/mathworks/mwswing/binding/InputMapActionListener +instanceKlass com/mathworks/mde/vrd/LicenseToolSetFactory +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$3 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$2 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$TearOffOptionsListDecorator +instanceKlass com/mathworks/toolstrip/accessories/Resources +instanceKlass com/mathworks/toolstrip/accessories/CollapseToolstripAction$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$FactoryLayout +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$Listener +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory +instanceKlass com/mathworks/matlab/api/explorer/MatlabPlatformUtil +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerResources +instanceKlass com/mathworks/mde/desk/CodeReportActionProvider +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$18 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$17 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$16 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$15 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$14 +instanceKlass com/mathworks/desktop/client/ClientCollectionListener$Event +instanceKlass com/google/common/collect/Lists +instanceKlass com/mathworks/desktop/client/DefaultClientCollection +instanceKlass com/mathworks/desktop/attr/AttributeChangeEvent +instanceKlass com/mathworks/desktop/attr/DefaultAttributes +instanceKlass com/mathworks/desktop/client/ClientCollection +instanceKlass com/mathworks/desktop/client/BasicClient +instanceKlass com/mathworks/desktop/client/ClientCollectionListener +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport$DirtyStateListener +instanceKlass com/mathworks/mde/liveeditor/AbstractLiveEditorToolSet +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsKeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsRunnerOptions +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandReceiver +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$ToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/ToolSetActionController +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptions +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/KeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/rptgenxmlcomp/comparison/node/customization/CustomizationManager +instanceKlass com/mathworks/matlab/api/editor/EditorLayerProvider +instanceKlass com/mathworks/matlab/api/editor/EditorSyntaxHighlighting +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapterFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/CheckRunnerProvider +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/WorkingFolderExtensionFactory +instanceKlass com/mathworks/cmlink/util/icon/FileIconFactoryProducer +instanceKlass com/mathworks/toolbox/slproject/project/archiving/ProjectArchiverFactory +instanceKlass com/mathworks/toolbox/slproject/project/sharing/api/r15a/ShareExtensionFactory +instanceKlass com/mathworks/toolbox/slproject/project/metadata/MetadataManagerFactory +instanceKlass com/mathworks/toolbox/slproject/project/GUI/projectui/ProjectViewNodeFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/ProjectExtensionFactory +instanceKlass com/mathworks/addons_common/notificationframework/BalloonTooltipNotificationClickedCallback +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifierAPI +instanceKlass com/mathworks/addressbar_api/AddressBarAPI +instanceKlass com/mathworks/mde/find/FileTypeContentsProvider +instanceKlass com/mathworks/find_files_api/FileTypeSpecificOpenToLineActionProvider +instanceKlass com/mathworks/find_files_api/OpenActionProvider +instanceKlass com/mathworks/mde/editor/debug/DebuggerActionsProvider +instanceKlass com/mathworks/matlab/api/editor/actions/KeyBindingContributor +instanceKlass com/mathworks/matlab/api/editor/EditorKitProvider +instanceKlass com/mathworks/matlab/api/editor/actions/EditorToolTipDelegate +instanceKlass com/mathworks/widgets/editor/breakpoints/MarginProvider +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor +instanceKlass com/mathworks/matlab/api/editor/actions/SelectionDelegate +instanceKlass com/mathworks/matlab/api/editor/EditorLanguagePreferencesPanel +instanceKlass com/mathworks/matlab/api/menus/MenuContributor +instanceKlass com/mathworks/comparisons/plugin/ComparisonPlugin +instanceKlass com/mathworks/matlab/api/editor/EditorLanguage +instanceKlass com/mathworks/addons_common/AddonManager +instanceKlass com/mathworks/cmlink/creation/api/RepositoryLocationCreatorFactory +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallsRetriever +instanceKlass com/mathworks/addon_service_management_api/RegistrationPointServiceProvider +instanceKlass com/mathworks/addon_service_management_api/AddonServiceProvider +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripTabContributor +instanceKlass com/mathworks/matlab/api/editor/actions/Prioritizable +instanceKlass com/mathworks/mlwidgets/explorer/util/SourceControlManagerPlugin +instanceKlass com/mathworks/project/impl/model/TargetFactory +instanceKlass com/mathworks/mwswing/api/FileExtensionFilterContributor +instanceKlass com/mathworks/util/ImplementorsCacheImpl +instanceKlass com/mathworks/util/ImplementorsCache +instanceKlass com/mathworks/util/ImplementorsCacheFactory$LazyHolder +instanceKlass com/mathworks/util/ImplementorsCacheFactory +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabErrorHandlingOptionsListDecorator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabDebugActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$5 +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripOptions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$6 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$1 +instanceKlass com/mathworks/mde/editor/EditorAction +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$20 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$19 +instanceKlass com/mathworks/services/settings/SettingUtils +instanceKlass com/mathworks/services/mlx/MlxFileUtils +instanceKlass com/mathworks/matlab/api/explorer/AbstractNewFileTemplateWithIcon +instanceKlass com/mathworks/matlab/api/explorer/IconProvider +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$2 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$1 +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarID +instanceKlass com/mathworks/mde/editor/RealMatlab +instanceKlass com/mathworks/matlab/api/datamodel/StorageLocation +instanceKlass com/mathworks/mwswing/FilePatternFilter +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarID +instanceKlass com/mathworks/mde/editor/EditorMatlab +instanceKlass com/mathworks/mde/editor/EditorUtils +instanceKlass com/mathworks/cfbutils/FileSystemNotificationUtils +instanceKlass com/mathworks/util/FileSystemNotifier$1 +instanceKlass com/mathworks/cfbutils/FileSystemListener +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeListener +instanceKlass com/mathworks/util/FileSystemNotifier +instanceKlass com/mathworks/util/FileSystemUtils +instanceKlass com/mathworks/util/FileSystemAdapter +instanceKlass com/mathworks/util/FileSystemListener +instanceKlass com/mathworks/mde/editor/EditorStartup +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$BusyIdleListener +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory$1 +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandUtilities +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCategoryIcons +instanceKlass org/apache/xerces/dom/CharacterDataImpl$1 +instanceKlass org/apache/xerces/dom/NamedNodeMapImpl +instanceKlass org/w3c/dom/NamedNodeMap +instanceKlass org/apache/xerces/dom/DeepNodeListImpl +instanceKlass org/apache/xerces/dom/DeferredDocumentImpl$RefCount +instanceKlass java/util/Observer +instanceKlass com/mathworks/mde/difftool/FileDiffToolInfo +instanceKlass com/mathworks/mde/difftool/UnsavedChangesDiffToolInfo +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu +instanceKlass org/w3c/dom/ranges/Range +instanceKlass org/w3c/dom/traversal/TreeWalker +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$RunButtonStateChangeListener +instanceKlass org/w3c/dom/traversal/NodeIterator +instanceKlass com/mathworks/matlab/api/editor/EditorEventListener +instanceKlass org/w3c/dom/events/MutationEvent +instanceKlass org/w3c/dom/events/Event +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$4 +instanceKlass javax/swing/event/ListDataListener +instanceKlass org/w3c/dom/CDATASection +instanceKlass org/w3c/dom/Comment +instanceKlass org/w3c/dom/DocumentFragment +instanceKlass org/w3c/dom/ProcessingInstruction +instanceKlass org/w3c/dom/Text +instanceKlass org/w3c/dom/DOMConfiguration +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$3 +instanceKlass org/w3c/dom/Attr +instanceKlass org/w3c/dom/DocumentType +instanceKlass org/w3c/dom/Notation +instanceKlass org/w3c/dom/TypeInfo +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$2 +instanceKlass com/mathworks/mwswing/CustomizablePopupMenu +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistrant +instanceKlass com/mathworks/toolstrip/components/AcceptsMnemonic +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$1 +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$OpenWorkspaceVariableAction$1 +instanceKlass org/w3c/dom/Entity +instanceKlass org/w3c/dom/EntityReference +instanceKlass org/apache/xerces/xs/XSSimpleTypeDefinition +instanceKlass org/apache/xerces/xs/XSTypeDefinition +instanceKlass org/apache/xerces/xs/XSObject +instanceKlass org/apache/xerces/xs/ItemPSVI +instanceKlass org/w3c/dom/ranges/DocumentRange +instanceKlass org/w3c/dom/events/DocumentEvent +instanceKlass org/w3c/dom/traversal/DocumentTraversal +instanceKlass org/apache/xerces/dom/DeferredNode +instanceKlass org/apache/xerces/dom/NodeImpl +instanceKlass org/w3c/dom/events/EventTarget +instanceKlass org/w3c/dom/NodeList +instanceKlass org/w3c/dom/DOMError +instanceKlass org/w3c/dom/CharacterData +instanceKlass org/apache/xerces/jaxp/TeeXMLDocumentFilterImpl +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator +instanceKlass org/apache/xerces/impl/xs/identity/FieldActivator +instanceKlass org/apache/xerces/jaxp/JAXPConstants +instanceKlass javax/xml/parsers/DocumentBuilder +instanceKlass javax/xml/parsers/SecuritySupport$1 +instanceKlass javax/xml/parsers/SecuritySupport$2 +instanceKlass javax/xml/parsers/SecuritySupport +instanceKlass javax/xml/parsers/FactoryFinder +instanceKlass javax/xml/parsers/DocumentBuilderFactory +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1 +instanceKlass java/util/Vector$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/Shortcut +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutUtils +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$LocalExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$2 +instanceKlass java/util/concurrent/CountDownLatch +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2 +instanceKlass sun/java2d/loops/FontInfo +instanceKlass sun/font/CMap +instanceKlass sun/font/T2KFontScaler$1 +instanceKlass sun/font/FontScaler +instanceKlass sun/font/StrikeCache$DisposableStrike +instanceKlass sun/font/FontStrikeDisposer +instanceKlass sun/java2d/Disposer$PollDisposable +instanceKlass sun/font/FontStrikeDesc +instanceKlass sun/font/FontDesignMetrics$MetricsKey +instanceKlass java/awt/FontMetrics +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteIconContainer +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandIcons +instanceKlass java/text/FieldPosition$Delegate +instanceKlass java/text/Format$FieldDelegate +instanceKlass java/text/DigitList +instanceKlass java/util/Currency$CurrencyNameGetter +instanceKlass java/util/Currency$1 +instanceKlass java/util/Currency +instanceKlass java/text/DecimalFormatSymbols +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference$Pair +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference +instanceKlass javax/swing/Timer$1 +instanceKlass java/text/FieldPosition +instanceKlass com/mathworks/mde/desk/MLDesktopRegistrar +instanceKlass com/mathworks/mlservices/MatlabDesktopRegistrar +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutIconUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandResources +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$GalleryModelReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$GalleryModelCreator +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryOptions +instanceKlass com/mathworks/beans/EnumPair +instanceKlass com/mathworks/jmi/bean/UDDMethodDescription +instanceKlass com/mathworks/jmi/bean/UDDPropertyDescription +instanceKlass com/mathworks/jmi/bean/UDDBeanClass +instanceKlass com/mathworks/jmi/bean/OpCode +instanceKlass com/mathworks/jmi/bean/ClassFileConstants +instanceKlass com/mathworks/jmi/bean/UDDListener +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ListDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$Listener +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolSupplier +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar$1 +instanceKlass com/mathworks/toolstrip/accessories/TSContextMenuContributor +instanceKlass com/mathworks/toolstrip/components/popups/ListActionListener +instanceKlass javax/swing/ListModel +instanceKlass com/mathworks/widgets/desk/DTWindowPopupAction$1 +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Tool +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Dependency +instanceKlass com/mathworks/mwswing/IconSet$IconSizeComparator +instanceKlass com/mathworks/mwswing/IconSet +instanceKlass com/mathworks/mwswing/ResizableIcon +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolParameters +instanceKlass org/apache/commons/lang/builder/HashCodeBuilder +instanceKlass com/mathworks/util/Pair +instanceKlass com/mathworks/toolstrip/factory/XMLUtils +instanceKlass com/mathworks/mwswing/SimpleDOMUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$ToolParameters +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Section +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory$Registrar +instanceKlass com/mathworks/mde/liveeditor/LiveEditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$Registrar +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar +instanceKlass com/mathworks/toolstrip/components/gallery/model/ActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$ToolSetReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$Registrar +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolDecorator +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$FocusTracker +instanceKlass com/mathworks/widgets/desk/DTFrame$1 +instanceKlass java/util/SortedSet +instanceKlass com/google/common/collect/Multiset +instanceKlass com/google/common/collect/AbstractMultimap +instanceKlass com/mathworks/mwswing/modality/ModalLevel +instanceKlass com/mathworks/mwswing/modality/ModalStackImpl +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl$ModalityManagerAWTEventListener +instanceKlass com/mathworks/mwswing/modality/ModalStack +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl +instanceKlass com/mathworks/mwswing/MJFrame$1 +instanceKlass com/mathworks/mwswing/window/MJFullWindowRegistry +instanceKlass javax/swing/LayoutComparator +instanceKlass java/util/function/IntBinaryOperator +instanceKlass java/util/function/LongBinaryOperator +instanceKlass java/util/function/DoubleBinaryOperator +instanceKlass java/util/function/BinaryOperator +instanceKlass java/util/function/IntToDoubleFunction +instanceKlass java/util/function/IntToLongFunction +instanceKlass java/util/function/IntUnaryOperator +instanceKlass java/util/function/IntFunction +instanceKlass java/util/stream/LongStream +instanceKlass java/util/stream/DoubleStream +instanceKlass java/util/stream/Stream +instanceKlass java/util/stream/IntStream +instanceKlass java/util/stream/BaseStream +instanceKlass java/util/Spliterator$OfDouble +instanceKlass java/util/Spliterator$OfInt +instanceKlass java/util/Spliterator$OfLong +instanceKlass java/util/Spliterator$OfPrimitive +instanceKlass java/util/Spliterator +instanceKlass javax/swing/SortingFocusTraversalPolicy$1 +instanceKlass javax/swing/RepaintManager$PaintManager +instanceKlass javax/swing/JRootPane$RootLayout +instanceKlass com/mathworks/mde/desk/PlotGalleryManager +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$ClientMenuInfo +instanceKlass com/mathworks/widgets/desk/DTToolBarLocation +instanceKlass java/io/ObjectOutput +instanceKlass com/mathworks/toolstrip/factory/TSToolSet +instanceKlass com/mathworks/toolstrip/Toolstrip +instanceKlass com/mathworks/widgets/desk/DTFrame$DeferredMenuBarUpdate +instanceKlass com/mathworks/mwswing/MJFrame$FullScreenListener +instanceKlass com/mathworks/util/NativeEvent$Listener +instanceKlass com/mathworks/mwswing/modality/ModalManager +instanceKlass com/mathworks/services/Branding +instanceKlass com/mathworks/widgets/desk/DTFrame$MenuToStatusBarBridge +instanceKlass com/mathworks/mde/desk/MLFeatures$Listener +instanceKlass com/mathworks/toolstrip/components/TSComponent +instanceKlass com/mathworks/desktop/mnemonics/HasMnemonic +instanceKlass com/mathworks/toolstrip/ToolstripSection +instanceKlass com/mathworks/widgets/desk/DTComponentBar$DragOffListener +instanceKlass com/mathworks/toolstrip/components/TSUtil$KeyTriggerListener +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry$ActivatorData +instanceKlass com/mathworks/mde/desk/MLDesktop$Initializer +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$GoToNullPrompt +instanceKlass com/mathworks/jmi/mldisplay/VariableDisplayEvent +instanceKlass com/mathworks/jmi/diagnostic/IssuedWarningEvent +instanceKlass com/mathworks/jmi/correction/SuggestionEvent +instanceKlass com/mathworks/mvm/MvmWrapper +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$2 +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$1 +instanceKlass com/mathworks/mde/cmdwin/Prompt +instanceKlass javax/swing/text/StyleContext$KeyEnumeration +instanceKlass javax/swing/text/GapContent$StickyPosition +instanceKlass javax/swing/text/Position +instanceKlass javax/swing/text/AbstractDocument$1 +instanceKlass javax/swing/text/AbstractDocument$AbstractElement +instanceKlass javax/swing/tree/TreeNode +instanceKlass javax/swing/text/Element +instanceKlass java/util/Collections$3 +instanceKlass javax/swing/text/StyleContext$SmallAttributeSet +instanceKlass java/util/Collections$EmptyEnumeration +instanceKlass javax/swing/text/StyleContext$NamedStyle +instanceKlass javax/swing/text/Style +instanceKlass javax/swing/text/SimpleAttributeSet$EmptyAttributeSet +instanceKlass javax/swing/text/SimpleAttributeSet +instanceKlass javax/swing/text/MutableAttributeSet +instanceKlass javax/swing/text/AttributeSet +instanceKlass javax/swing/text/StyleContext$FontKey +instanceKlass javax/swing/text/AttributeSet$ParagraphAttribute +instanceKlass javax/swing/text/AttributeSet$ColorAttribute +instanceKlass javax/swing/text/AttributeSet$FontAttribute +instanceKlass javax/swing/text/AttributeSet$CharacterAttribute +instanceKlass javax/swing/text/StyleConstants +instanceKlass javax/swing/text/StyleContext +instanceKlass javax/swing/text/AbstractDocument$AttributeContext +instanceKlass javax/swing/text/GapVector +instanceKlass javax/swing/event/DocumentEvent +instanceKlass javax/swing/text/AbstractDocument$Content +instanceKlass javax/swing/event/DocumentListener +instanceKlass javax/swing/text/AbstractDocument +instanceKlass com/mathworks/widgets/text/print/PrintableTextDocument +instanceKlass javax/swing/text/Document +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF +instanceKlass com/mathworks/mde/cmdwin/KeystrokeRequestedEvent +instanceKlass com/mathworks/mde/cmdwin/LoadNativeCmdWin +instanceKlass com/mathworks/mde/cmdwin/CmdWinSinkRegistrar +instanceKlass com/mathworks/mlwidgets/prefs/ConfirmationDialogPrefsPanel$DialogItem +instanceKlass com/mathworks/mwswing/table/AccessibleTextProvider +instanceKlass javax/swing/table/TableCellEditor +instanceKlass javax/swing/CellEditor +instanceKlass javax/swing/table/TableCellRenderer +instanceKlass com/mathworks/mde/cmdwin/CmdWinPrefs +instanceKlass com/mathworks/services/FontPrefsComponent +instanceKlass com/mathworks/services/lmgr/NativeLmgr +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService$nativeBorrowAPI +instanceKlass com/mathworks/services/lmgr/BorrowAPI +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrServiceFactory +instanceKlass com/mathworks/jmi/Support +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManagerImpl +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI$LazyHolder +instanceKlass com/mathworks/jmi/MatlabWorker +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManager +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$3 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$2 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$4 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$2 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$2 +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager +instanceKlass com/mathworks/mde/editor/EditorPauseAction$3 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager$BusyIdleListener +instanceKlass com/mathworks/mwswing/ToolTipProvider +instanceKlass com/mathworks/mde/editor/EditorPauseAction +instanceKlass com/mathworks/mlservices/MatlabDebugAdapter +instanceKlass com/mathworks/services/PrefChangeListener +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$DebugAction$13$1 +instanceKlass com/mathworks/mlservices/MatlabDebugServices$1 +instanceKlass com/mathworks/mlservices/MatlabExecutionErrorHandler +instanceKlass com/mathworks/mde/cmdwin/CmdWinExecuteServices +instanceKlass com/mathworks/mlservices/MLExecuteRegistrar +instanceKlass com/mathworks/mlservices/MLExecute +instanceKlass com/mathworks/mlservices/MLServicesRegistry$EventMulticaster +instanceKlass com/mathworks/mlservices/MLServicesRegistry +instanceKlass com/mathworks/mlservices/MLExecuteServices$ServicesRegistryListener +instanceKlass com/mathworks/mlservices/MLServicesRegistry$Listener +instanceKlass com/mathworks/mlservices/MLServices +instanceKlass com/mathworks/mlservices/MatlabDebugServices$InterestCallback +instanceKlass sun/util/logging/LoggingSupport$2 +instanceKlass java/util/logging/Formatter +instanceKlass java/util/logging/ErrorManager +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager$InterceptorComparator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager +instanceKlass com/mathworks/mlservices/MatlabDebugServices$BusyExecutionListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$CtrlCListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabPauseObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabDebugObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackCallback +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackDispatch +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch$DebugExitStackCheck +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch +instanceKlass com/mathworks/matlab/api/debug/Breakpoint +instanceKlass com/mathworks/mlservices/BreakpointBase +instanceKlass com/mathworks/mlservices/MatlabDebugServices +instanceKlass com/mathworks/mlservices/MatlabDebugObserver +instanceKlass com/mathworks/mlwidgets/debug/DebugActions +instanceKlass com/mathworks/widgets/desk/Desktop$43 +instanceKlass com/mathworks/widgets/debug/DebuggerManager$IdleMatlabDebugger +instanceKlass com/mathworks/widgets/debug/DebuggerManager +instanceKlass com/mathworks/matlab/api/editor/actions/DebuggerActions +instanceKlass com/mathworks/jmi/Matlab$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$2 +instanceKlass com/mathworks/toolstrip/ToolstripTab +instanceKlass com/mathworks/desktop/client/Client +instanceKlass com/mathworks/desktop/attr/Attributes +instanceKlass com/mathworks/widgets/desk/DTGroup$DeferredPropertyChange +instanceKlass com/mathworks/widgets/desk/DTGroup$1 +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge +instanceKlass java/awt/event/WindowAdapter +instanceKlass com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper +instanceKlass javax/swing/MenuSelectionManager +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$1 +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper +instanceKlass javax/swing/Popup +instanceKlass com/mathworks/mwswing/MJMenuItem$ActionPropertyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$PropertyChangeHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuKeyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuDragMouseHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MouseInputHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon +instanceKlass javax/swing/plaf/basic/BasicMenuItemUI$Handler +instanceKlass javax/swing/event/MenuDragMouseListener +instanceKlass javax/swing/event/MenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler +instanceKlass com/mathworks/mwswing/MJMenu$WindowsVistaPropertyChangeListener +instanceKlass sun/swing/MenuItemLayoutHelper +instanceKlass javax/swing/plaf/basic/BasicGraphicsUtils +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuUI$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor +instanceKlass javax/swing/JMenuItem$MenuItemFocusListener +instanceKlass javax/swing/JMenu$MenuChangeListener +instanceKlass sun/swing/UIAction +instanceKlass javax/swing/plaf/basic/BasicMenuBarUI$Handler +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2 +instanceKlass javax/swing/plaf/basic/BasicBorders +instanceKlass javax/swing/DefaultSingleSelectionModel +instanceKlass javax/swing/SingleSelectionModel +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler +instanceKlass com/mathworks/mwswing/MJButton$ActionPropertyHandler +instanceKlass javax/swing/ActionPropertyChangeListener +instanceKlass javax/swing/KeyboardManager$ComponentKeyStrokePair +instanceKlass javax/swing/KeyboardManager +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ActionTrigger +instanceKlass com/google/common/collect/ListMultimap +instanceKlass com/google/common/collect/Multimap +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager +instanceKlass com/mathworks/widgets/desk/DTMenuMergeTag +instanceKlass com/mathworks/services/PrefUtils +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferenceUtils +instanceKlass org/apache/xerces/impl/Constants$ArrayEnumeration +instanceKlass org/apache/xerces/impl/Constants +instanceKlass com/mathworks/mwswing/binding/ContextID +instanceKlass com/mathworks/mwswing/binding/ContextActionData +instanceKlass com/mathworks/mwswing/binding/ContextReader +instanceKlass java/util/Collections$UnmodifiableList$1 +instanceKlass com/mathworks/mwswing/binding/MetaBindingUtils +instanceKlass com/mathworks/mwswing/binding/NavigationalBindingUtils +instanceKlass java/util/LinkedList$ListItr +instanceKlass com/mathworks/util/InitializationHelper +instanceKlass com/mathworks/util/InitializeBeforeAccess +instanceKlass org/apache/xerces/util/XMLSymbols +instanceKlass org/apache/xerces/util/XMLChar +instanceKlass org/apache/xerces/xni/parser/XMLInputSource +instanceKlass org/xml/sax/InputSource +instanceKlass org/apache/xerces/util/ErrorHandlerWrapper +instanceKlass com/mathworks/xml/EncodingParser$QuietErrorHandler +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$AttributesProxy +instanceKlass org/xml/sax/ext/Attributes2 +instanceKlass org/apache/xerces/impl/msg/XMLMessageFormatter +instanceKlass org/apache/xerces/impl/XMLVersionDetector +instanceKlass org/apache/xerces/impl/validation/ValidationManager +instanceKlass org/apache/xerces/impl/dv/dtd/NMTOKENDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/NOTATIONDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ENTITYDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ListDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDREFDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/StringDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/DatatypeValidator +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$2 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$1 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport +instanceKlass org/apache/xerces/impl/dv/ObjectFactory +instanceKlass org/apache/xerces/impl/dv/DTDDVFactory +instanceKlass org/apache/xerces/impl/dtd/DTDGrammarBucket +instanceKlass org/apache/xerces/impl/dtd/XMLAttributeDecl +instanceKlass org/apache/xerces/impl/dtd/XMLSimpleType +instanceKlass org/apache/xerces/impl/dtd/XMLElementDecl +instanceKlass org/apache/xerces/impl/validation/ValidationState +instanceKlass org/apache/xerces/impl/dtd/DTDGrammar +instanceKlass org/apache/xerces/xni/grammars/Grammar +instanceKlass org/apache/xerces/impl/validation/EntityState +instanceKlass org/apache/xerces/impl/dv/ValidationContext +instanceKlass org/apache/xerces/impl/dtd/XMLEntityDecl +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$TrailingMiscDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$DTDDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$PrologDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$XMLDeclDispatcher +instanceKlass org/apache/xerces/util/NamespaceSupport +instanceKlass org/apache/xerces/util/XMLAttributesImpl$Attribute +instanceKlass org/apache/xerces/util/XMLAttributesImpl +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$FragmentContentDispatcher +instanceKlass org/apache/xerces/xni/QName +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$ElementStack +instanceKlass org/apache/xerces/xni/grammars/XMLDTDDescription +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarDescription +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$Dispatcher +instanceKlass org/apache/xerces/xni/XMLAttributes +instanceKlass org/apache/xerces/xni/XMLString +instanceKlass org/apache/xerces/impl/XMLErrorReporter +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBuffer +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBufferPool +instanceKlass org/apache/xerces/impl/XMLEntityManager$ByteBufferPool +instanceKlass org/apache/xerces/util/AugmentationsImpl$AugmentationsItemsContainer +instanceKlass org/apache/xerces/util/AugmentationsImpl +instanceKlass org/apache/xerces/util/XMLResourceIdentifierImpl +instanceKlass org/apache/xerces/impl/XMLEntityManager$1 +instanceKlass org/apache/xerces/xni/Augmentations +instanceKlass org/apache/xerces/impl/XMLEntityManager$Entity +instanceKlass org/apache/xerces/impl/XMLEntityScanner +instanceKlass org/apache/xerces/xni/XMLResourceIdentifier +instanceKlass org/apache/xerces/impl/XMLEntityManager +instanceKlass org/apache/xerces/util/SymbolTable$Entry +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarPool +instanceKlass org/apache/xerces/util/SymbolTable +instanceKlass org/apache/xerces/xni/NamespaceContext +instanceKlass org/apache/xerces/xni/XMLLocator +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidator +instanceKlass org/apache/xerces/impl/RevalidationHandler +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarLoader +instanceKlass org/apache/xerces/impl/dtd/XMLDTDProcessor +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDScanner +instanceKlass org/apache/xerces/util/MessageFormatter +instanceKlass org/apache/xerces/impl/XMLScanner +instanceKlass org/apache/xerces/impl/XMLEntityHandler +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidatorFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentScanner +instanceKlass org/apache/xerces/xni/parser/XMLDocumentSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDSource +instanceKlass org/apache/xerces/xni/parser/XMLComponent +instanceKlass org/apache/xerces/util/ParserConfigurationSettings +instanceKlass org/apache/xerces/parsers/XML11Configurable +instanceKlass org/apache/xerces/xni/parser/XMLPullParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLComponentManager +instanceKlass org/apache/xerces/parsers/SecuritySupport$6 +instanceKlass org/apache/xerces/parsers/SecuritySupport$7 +instanceKlass org/apache/xerces/parsers/SecuritySupport$4 +instanceKlass org/apache/xerces/parsers/SecuritySupport$2 +instanceKlass org/apache/xerces/parsers/SecuritySupport$1 +instanceKlass org/apache/xerces/parsers/SecuritySupport +instanceKlass org/apache/xerces/parsers/ObjectFactory +instanceKlass org/xml/sax/helpers/LocatorImpl +instanceKlass org/apache/xerces/xni/parser/XMLErrorHandler +instanceKlass org/apache/xerces/xni/parser/XMLEntityResolver +instanceKlass org/xml/sax/Locator +instanceKlass org/xml/sax/Attributes +instanceKlass org/xml/sax/AttributeList +instanceKlass org/apache/xerces/parsers/XMLParser +instanceKlass org/apache/xerces/xni/XMLDTDContentModelHandler +instanceKlass org/apache/xerces/xni/XMLDTDHandler +instanceKlass org/apache/xerces/xni/XMLDocumentHandler +instanceKlass org/xml/sax/XMLReader +instanceKlass org/xml/sax/Parser +instanceKlass org/apache/xerces/xs/PSVIProvider +instanceKlass org/xml/sax/EntityResolver +instanceKlass org/xml/sax/ErrorHandler +instanceKlass org/xml/sax/ContentHandler +instanceKlass javax/xml/transform/Result +instanceKlass javax/xml/transform/Source +instanceKlass com/mathworks/xml/XMLUtils +instanceKlass org/apache/commons/io/IOUtils +instanceKlass com/mathworks/mwswing/binding/KeyBindingReaderUtils +instanceKlass com/mathworks/mwswing/binding/ActionDataReader +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferences +instanceKlass com/mathworks/mwswing/binding/ActionDataID +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindingSetID +instanceKlass com/mathworks/mwswing/binding/AbstractNamedUniqueID +instanceKlass com/mathworks/mwswing/binding/UniqueID +instanceKlass com/mathworks/mwswing/binding/KeyBindingManager +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistry +instanceKlass com/mathworks/services/binding/KeyBindingPreferences +instanceKlass com/mathworks/services/binding/MatlabKeyBindings +instanceKlass com/mathworks/mwswing/MJToolBar$LocalContainerListener +instanceKlass javax/accessibility/AccessibleRelationSet +instanceKlass javax/accessibility/AccessibleContext$1 +instanceKlass sun/awt/AWTAccessor$AccessibleContextAccessor +instanceKlass javax/accessibility/AccessibleExtendedComponent +instanceKlass javax/accessibility/AccessibleComponent +instanceKlass javax/accessibility/AccessibleText +instanceKlass javax/accessibility/AccessibleValue +instanceKlass javax/accessibility/AccessibleAction +instanceKlass com/mathworks/mwswing/MJToolBar$2 +instanceKlass java/beans/VetoableChangeListener +instanceKlass javax/swing/plaf/basic/BasicButtonListener +instanceKlass javax/swing/AbstractButton$Handler +instanceKlass javax/swing/DefaultButtonModel +instanceKlass javax/swing/ButtonModel +instanceKlass com/mathworks/mwswing/Painter +instanceKlass com/mathworks/mwswing/MJButton$LocalHierarchyListener +instanceKlass java/awt/VKCollection +instanceKlass javax/swing/plaf/basic/BasicToolBarUI$Handler +instanceKlass javax/swing/event/MouseInputListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsBorders +instanceKlass javax/swing/BoxLayout +instanceKlass javax/swing/JToolBar$DefaultToolBarLayout +instanceKlass com/mathworks/mwswing/CellViewerCustomizer +instanceKlass javax/swing/event/PopupMenuListener +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch +instanceKlass com/mathworks/hg/peer/EchoEvent +instanceKlass com/mathworks/hg/peer/EchoListener +instanceKlass com/mathworks/hg/peer/Echo +instanceKlass com/mathworks/hg/peer/event/ToolbuttonListener +instanceKlass com/mathworks/hg/peer/AbstractToolbuttonPeer +instanceKlass com/mathworks/hg/peer/ToolbarPeer +instanceKlass com/mathworks/hg/peer/ContextMenuPeer +instanceKlass com/mathworks/hg/peer/AbstractSplitButtonPeer +instanceKlass com/mathworks/hg/peer/event/UiMenuListener +instanceKlass com/mathworks/hg/peer/utils/MatlabIconComponent +instanceKlass com/mathworks/hg/peer/MenuPeer +instanceKlass com/mathworks/hg/peer/FigurePeerButtonMotionListener +instanceKlass com/mathworks/hg/peer/FigurePeerAcceleratorKeyListener +instanceKlass com/mathworks/hg/peer/FigureNotification +instanceKlass com/mathworks/hg/peer/FigureComponentProxy +instanceKlass com/mathworks/hg/peer/CanvasComponentCreationListener +instanceKlass com/mathworks/jmi/Callback +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStateListener +instanceKlass com/mathworks/hg/peer/FigurePeerFocusListener +instanceKlass com/mathworks/hg/peer/FigurePeerScrollWheelListener +instanceKlass com/mathworks/hg/peer/FigurePeerKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStyleListener +instanceKlass com/mathworks/hg/peer/FigurePeerMouseListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowListener +instanceKlass com/mathworks/hg/peer/FigurePeerComponentListener +instanceKlass com/mathworks/hg/peer/FigurePeerPaintListener +instanceKlass com/mathworks/hg/peer/AbstractUicontrolPeer +instanceKlass com/mathworks/hg/types/GUIDEViewProvider +instanceKlass com/mathworks/hg/peer/CallbackTrigger +instanceKlass com/mathworks/hg/UicontrolPeer +instanceKlass com/mathworks/hg/BaseControl +instanceKlass com/mathworks/hg/peer/AxisComponent +instanceKlass com/mathworks/hg/peer/FigureChild +instanceKlass java/util/TreeMap$PrivateEntryIterator +instanceKlass sun/reflect/annotation/AnnotationParser +instanceKlass java/beans/Transient +instanceKlass com/sun/beans/WildcardTypeImpl +instanceKlass sun/reflect/generics/tree/MethodTypeSignature +instanceKlass sun/reflect/generics/tree/Wildcard +instanceKlass sun/reflect/generics/tree/BottomSignature +instanceKlass com/sun/beans/TypeResolver +instanceKlass java/beans/MethodRef +instanceKlass com/sun/beans/util/Cache$CacheEntry +instanceKlass com/sun/beans/util/Cache +instanceKlass com/sun/beans/finder/AbstractFinder +instanceKlass java/beans/SimpleBeanInfo +instanceKlass com/sun/beans/finder/ClassFinder +instanceKlass java/beans/BeanInfo +instanceKlass com/sun/beans/finder/InstanceFinder +instanceKlass java/beans/WeakIdentityMap +instanceKlass java/beans/ThreadGroupContext +instanceKlass java/beans/FeatureDescriptor +instanceKlass com/sun/beans/WeakCache +instanceKlass java/beans/Introspector +instanceKlass com/mathworks/hg/peer/LightWeightManager +instanceKlass com/mathworks/hg/peer/event/HGSendPollable +instanceKlass com/mathworks/jmi/bean/Coalesceable +instanceKlass com/mathworks/hg/peer/FigureFrameProxyBase +instanceKlass com/mathworks/hg/peer/PositionableFigureClient +instanceKlass com/mathworks/hg/peer/FigureEditableComponent +instanceKlass javax/swing/event/AncestorListener +instanceKlass com/mathworks/hg/util/HGPeerRunnable +instanceKlass com/mathworks/hg/peer/FigureJavaComponentListener$FigureJavaComponentSizeListener +instanceKlass com/mathworks/hg/peer/FigurePeer +instanceKlass com/mathworks/hg/peer/UIComponentParentWithLayout +instanceKlass com/mathworks/hg/peer/UIComponentParent +instanceKlass com/mathworks/hg/peer/FigureValidator +instanceKlass com/mathworks/hg/peer/FigureNotificationHandler +instanceKlass com/mathworks/hg/util/HGPeerQueueUser +instanceKlass com/mathworks/widgets/desk/DTGroupProperty$1 +instanceKlass com/mathworks/widgets/desk/DTGroupBase +instanceKlass com/mathworks/jmi/ClassLoaderManager +instanceKlass com/mathworks/mwswing/BorderUtils +instanceKlass javax/swing/plaf/basic/BasicHTML +instanceKlass java/awt/Component$3 +instanceKlass sun/reflect/ClassDefiner$1 +instanceKlass sun/reflect/ClassDefiner +instanceKlass sun/reflect/MethodAccessorGenerator$1 +instanceKlass sun/reflect/Label$PatchInfo +instanceKlass sun/reflect/Label +instanceKlass sun/reflect/UTF8 +instanceKlass sun/reflect/ClassFileAssembler +instanceKlass sun/reflect/ByteVectorImpl +instanceKlass sun/reflect/ByteVector +instanceKlass sun/reflect/ByteVectorFactory +instanceKlass sun/reflect/AccessorGenerator +instanceKlass sun/reflect/ClassFileConstants +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager$1 +instanceKlass com/mathworks/widgets/desk/DTClient$LocationListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$State +instanceKlass com/mathworks/widgets/desk/TargetedAction +instanceKlass javax/swing/event/MenuListener +instanceKlass com/mathworks/widgets/desk/DTDocumentArranger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties$Listener +instanceKlass com/mathworks/mwswing/MJAbstractAction$1 +instanceKlass com/mathworks/mwswing/binding/KeyStrokeList +instanceKlass com/mathworks/mwswing/KeyControlledDragger +instanceKlass java/awt/event/KeyEvent$1 +instanceKlass sun/awt/AWTAccessor$KeyEventAccessor +instanceKlass com/mathworks/widgets/desk/DTNestingContainer$TreeState +instanceKlass com/mathworks/mwswing/binding/KeyStrokeUtils +instanceKlass javax/swing/ArrayTable +instanceKlass com/mathworks/mwswing/ActionUtils +instanceKlass com/mathworks/mwswing/binding/ExtendedActionBridge +instanceKlass java/awt/TrayIcon +instanceKlass com/mathworks/widgets/desk/DTDropTarget +instanceKlass java/awt/MenuComponent +instanceKlass java/awt/EventQueue$3 +instanceKlass sun/awt/dnd/SunDragSourceContextPeer +instanceKlass java/awt/dnd/peer/DragSourceContextPeer +instanceKlass sun/awt/EventQueueDelegate +instanceKlass java/awt/ModalEventFilter +instanceKlass java/awt/EventDispatchThread$HierarchyEventFilter +instanceKlass java/awt/EventFilter +instanceKlass java/awt/EventDispatchThread$1 +instanceKlass java/awt/Conditional +instanceKlass com/mathworks/mlwidgets/util/MatlabDropTargetListener +instanceKlass java/awt/EventQueue$5 +instanceKlass java/awt/event/InvocationEvent$1 +instanceKlass sun/awt/AWTAccessor$InvocationEventAccessor +instanceKlass java/awt/ActiveEvent +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy$1 +instanceKlass com/mathworks/widgets/desk/DTGroup$LocationListener +instanceKlass java/awt/event/ComponentAdapter +instanceKlass com/mathworks/mwswing/SimpleDOMParser +instanceKlass com/sun/java/swing/SwingUtilities3 +instanceKlass javax/swing/RepaintManager$ProcessingRunnable +instanceKlass sun/reflect/misc/Trampoline +instanceKlass sun/reflect/misc/MethodUtil$1 +instanceKlass java/awt/FlowLayout +instanceKlass com/mathworks/widgets/grouptable/Affordance +instanceKlass com/mathworks/widgets/grouptable/ExpansionProvider +instanceKlass com/mathworks/widgets/grouptable/TableConfigurationSerializer +instanceKlass com/mathworks/widgets/grouptable/GroupingTableSelectionListener +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationListener +instanceKlass com/mathworks/mwswing/PopupMenuCustomizer +instanceKlass com/mathworks/mwswing/ExtendedButton +instanceKlass com/mathworks/widgets/grouptable/transfer/ReceiveHandler +instanceKlass com/mathworks/widgets/grouptable/transfer/SendHandler +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/TitleChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/util/ComponentInjector +instanceKlass com/jidesoft/grid/IndexChangeListener +instanceKlass com/jidesoft/grid/TableAdapter +instanceKlass com/jidesoft/grid/SortListener +instanceKlass com/mathworks/mwswing/table/SortedTable +instanceKlass com/mathworks/matlab/api/explorer/ActionInputSource +instanceKlass com/mathworks/matlab/api/explorer/FileSystem +instanceKlass com/mathworks/mde/desk/DesktopExplorerAdapterImpl +instanceKlass com/mathworks/mde/desk/MLDesktop$doMatlabStatus +instanceKlass com/mathworks/widgets/desk/DTToolBarConfiguration +instanceKlass com/mathworks/widgets/desk/DTPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTProperty +instanceKlass javax/swing/AbstractAction +instanceKlass com/mathworks/widgets/desk/DefaultViewTabFactory +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry +instanceKlass com/mathworks/widgets/desk/DTGroupPropertyProvider +instanceKlass com/mathworks/widgets/desk/RecentFiles +instanceKlass com/mathworks/widgets/desk/DTMainToolBarSupplier +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar +instanceKlass javax/swing/ActionMap +instanceKlass com/mathworks/mde/desk/MLDesktop$MatlabReadyListener +instanceKlass com/mathworks/mwswing/SimpleNode +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary +instanceKlass org/w3c/dom/Element +instanceKlass org/w3c/dom/Document +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Listener +instanceKlass com/mathworks/widgets/desk/DTLazyPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTClientPropertyProvider +instanceKlass com/mathworks/mde/liveeditor/ToolstripManager +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefresher +instanceKlass com/mathworks/widgets/desk/DTRecoverable +instanceKlass com/mathworks/toolstrip/factory/TSRegistry +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper +instanceKlass com/mathworks/mde/desk/MLDesktop$DesktopStatusPauseObserver +instanceKlass com/mathworks/widgets/desk/DeferredDesktopFacade +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalLocationListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalArrangementListener +instanceKlass com/mathworks/widgets/desk/DTGroupAdapter +instanceKlass com/mathworks/widgets/desk/DTClientAdapter +instanceKlass com/mathworks/widgets/desk/DTLocation$Listener +instanceKlass com/mathworks/widgets/desk/DTGroupListener +instanceKlass com/mathworks/widgets/desk/DTClientListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager +instanceKlass com/mathworks/desktop/attr/AttributeChangeListener +instanceKlass com/mathworks/desktop/attr/Attribute +instanceKlass com/mathworks/widgets/desk/DTSelectionManager +instanceKlass javax/swing/TimerQueue$DelayedTimer +instanceKlass java/util/concurrent/Delayed +instanceKlass javax/swing/TimerQueue$1 +instanceKlass javax/swing/TimerQueue +instanceKlass com/mathworks/ddux/JSBridge$1 +instanceKlass com/mathworks/messageservice/Subscriber +instanceKlass com/mathworks/ddux/JSBridge +instanceKlass com/mathworks/mvm/eventmgr/EventListening +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr +instanceKlass com/mathworks/mvm/MvmSession +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks$1 +instanceKlass com/mathworks/matlab/environment/context/Util +instanceKlass com/mathworks/addons_common/util/MatlabPlatformUtil +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer$1 +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFacade +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFactory +instanceKlass com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator +instanceKlass java/lang/reflect/TypeVariable +instanceKlass sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$SupportedProducts +instanceKlass sun/reflect/generics/visitor/Reifier +instanceKlass sun/reflect/generics/visitor/TypeTreeVisitor +instanceKlass sun/reflect/generics/tree/ClassSignature +instanceKlass sun/reflect/generics/tree/Signature +instanceKlass sun/reflect/generics/tree/ClassTypeSignature +instanceKlass sun/reflect/generics/tree/SimpleClassTypeSignature +instanceKlass sun/reflect/generics/tree/FieldTypeSignature +instanceKlass sun/reflect/generics/tree/BaseType +instanceKlass sun/reflect/generics/tree/TypeSignature +instanceKlass sun/reflect/generics/tree/ReturnType +instanceKlass sun/reflect/generics/tree/TypeArgument +instanceKlass sun/reflect/generics/tree/FormalTypeParameter +instanceKlass sun/reflect/generics/tree/TypeTree +instanceKlass sun/reflect/generics/tree/Tree +instanceKlass sun/reflect/generics/parser/SignatureParser +instanceKlass sun/reflect/generics/factory/CoreReflectionFactory +instanceKlass sun/reflect/generics/factory/GenericsFactory +instanceKlass sun/reflect/generics/scope/AbstractScope +instanceKlass sun/reflect/generics/scope/Scope +instanceKlass com/mathworks/connector/client_services/UserManagerImpl +instanceKlass com/mathworks/matlabserver/internalservices/workersecurity/UserManager +instanceKlass com/mathworks/connector/client_services/ClientCommandWindowServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientCommandWindowService +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientBrowserService +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientEditorService +instanceKlass com/mathworks/matlabserver/workercommon/client/services/MessageProducer +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryImpl +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycleHelper +instanceKlass com/mathworks/connector/json/impl/JsonDeserializationServiceProvider +instanceKlass com/mathworks/connector/json/impl/JsonSerializationServiceProvider +instanceKlass com/mathworks/connector/MessageBase +instanceKlass com/google/gson/TreeTypeAdapter$SingleTypeFactory +instanceKlass com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl +instanceKlass java/lang/reflect/GenericArrayType +instanceKlass java/lang/reflect/WildcardType +instanceKlass java/lang/reflect/ParameterizedType +instanceKlass com/google/gson/internal/$Gson$Types +instanceKlass com/google/gson/reflect/TypeToken +instanceKlass com/google/gson/InstanceCreator +instanceKlass com/google/gson/internal/$Gson$Preconditions +instanceKlass com/google/gson/JsonSerializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl$GenericMessageDeserializer +instanceKlass com/google/gson/JsonDeserializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/MapTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/CollectionTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/ArrayTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/SqlDateTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TimeTypeAdapter$1 +instanceKlass java/util/Date +instanceKlass com/google/gson/internal/bind/DateTypeAdapter$1 +instanceKlass java/text/Format +instanceKlass com/google/gson/internal/bind/ObjectTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TypeAdapters$26 +instanceKlass com/google/gson/internal/bind/TypeAdapters$30 +instanceKlass com/google/gson/internal/bind/TypeAdapters$22 +instanceKlass java/util/UUID +instanceKlass com/google/gson/internal/bind/TypeAdapters$31 +instanceKlass com/google/gson/internal/bind/TypeAdapters$29 +instanceKlass com/google/gson/internal/bind/TypeAdapters$28 +instanceKlass com/google/gson/internal/bind/TypeAdapters +instanceKlass com/google/gson/internal/ObjectConstructor +instanceKlass com/google/gson/internal/ConstructorConstructor +instanceKlass com/google/gson/Gson$2 +instanceKlass com/google/gson/Gson$1 +instanceKlass com/google/gson/JsonSerializationContext +instanceKlass com/google/gson/JsonDeserializationContext +instanceKlass com/google/gson/stream/JsonReader +instanceKlass com/google/gson/stream/JsonWriter +instanceKlass com/google/gson/Gson +instanceKlass com/google/gson/JsonElement +instanceKlass com/google/gson/TypeAdapter +instanceKlass com/google/gson/internal/Excluder +instanceKlass com/google/gson/TypeAdapterFactory +instanceKlass com/google/gson/FieldNamingStrategy +instanceKlass com/google/gson/GsonBuilder +instanceKlass com/mathworks/cosg/CosgRegistryFactory +instanceKlass com/mathworks/connector/Message +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl +instanceKlass com/mathworks/connector/Address +instanceKlass com/mathworks/connector/impl/ContextImpl +instanceKlass com/mathworks/cosg/CosgRegistry +instanceKlass com/mathworks/connector/cosg/impl/CosgServiceProvider +instanceKlass com/mathworks/messageservice/builders/MessageServiceBuilder +instanceKlass com/mathworks/connector/Future$Continuation +instanceKlass com/mathworks/connector/native_bridge/impl/NativeBridgeServiceProvider +instanceKlass com/mathworks/connector/Context +instanceKlass com/mathworks/connector/impl/ConnectorImpl +instanceKlass com/mathworks/connector/message_service/api/JniMessageServiceAdaptor +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistry +instanceKlass com/mathworks/connector/Connector +instanceKlass com/mathworks/cosg/CosgMessageHandler +instanceKlass com/mathworks/connector/native_bridge/NativeBridge +instanceKlass com/mathworks/connector/ServiceProvider +instanceKlass com/mathworks/matlabserver/connector/api/Server +instanceKlass com/mathworks/matlabserver/connector/util/SessionNonceHelper +instanceKlass com/mathworks/connector/json/JsonSerializer +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost$1 +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost +instanceKlass com/mathworks/matlabserver/connector/api/Connector +instanceKlass com/mathworks/matlabserver/connector/api/AutoStart +instanceKlass com/mathworks/jmi/MatlabPath$PathCallback +instanceKlass com/mathworks/services/message/MWHandler +instanceKlass com/mathworks/jmi/MatlabMCR +instanceKlass com/mathworks/jmi/MatlabPath +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder$1 +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTheme +instanceKlass javax/swing/text/ViewFactory +instanceKlass com/mathworks/toolstrip/plaf/TSComponentUI +instanceKlass com/mathworks/mde/desk/MLDesktop$ClientInfo +instanceKlass sun/java2d/pipe/AlphaPaintPipe$TileContext +instanceKlass java/awt/ColorPaintContext +instanceKlass java/awt/PaintContext +instanceKlass com/mathworks/mwswing/ColorUtils +instanceKlass com/mathworks/mwswing/IconUtils +instanceKlass com/mathworks/mwswing/ContrastingIcon +instanceKlass com/mathworks/mwswing/ExtendedAction +instanceKlass com/mathworks/widgets/desk/DTUtilities +instanceKlass java/lang/StrictMath +instanceKlass java/io/RandomAccessFile$1 +instanceKlass javax/imageio/metadata/IIOMetadata +instanceKlass javax/imageio/stream/FileCacheImageInputStream$StreamDisposerRecord +instanceKlass com/sun/imageio/stream/StreamCloser$2 +instanceKlass com/sun/imageio/stream/StreamCloser$1 +instanceKlass com/sun/imageio/stream/StreamCloser$CloseAction +instanceKlass com/sun/imageio/stream/StreamCloser +instanceKlass sun/nio/fs/WindowsChannelFactory$2 +instanceKlass sun/nio/fs/WindowsChannelFactory$Flags +instanceKlass sun/nio/fs/WindowsChannelFactory$1 +instanceKlass sun/nio/fs/WindowsChannelFactory +instanceKlass sun/nio/fs/WindowsSecurityDescriptor +instanceKlass java/nio/file/OpenOption +instanceKlass sun/nio/fs/WindowsPath$1 +instanceKlass sun/nio/fs/BasicFileAttributesHolder +instanceKlass sun/nio/fs/WindowsDirectoryStream$WindowsDirectoryIterator +instanceKlass sun/nio/fs/WindowsFileAttributes +instanceKlass java/nio/file/attribute/DosFileAttributes +instanceKlass java/nio/file/attribute/BasicFileAttributes +instanceKlass sun/nio/fs/NativeBuffer$Deallocator +instanceKlass sun/nio/fs/NativeBuffer +instanceKlass sun/nio/fs/NativeBuffers +instanceKlass sun/nio/fs/WindowsNativeDispatcher$BackupResult +instanceKlass sun/nio/fs/WindowsNativeDispatcher$CompletionStatus +instanceKlass sun/nio/fs/WindowsNativeDispatcher$AclInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$Account +instanceKlass sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace +instanceKlass sun/nio/fs/WindowsNativeDispatcher$VolumeInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstStream +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstFile +instanceKlass sun/nio/fs/WindowsNativeDispatcher$1 +instanceKlass sun/nio/fs/WindowsNativeDispatcher +instanceKlass sun/nio/fs/WindowsDirectoryStream +instanceKlass java/nio/file/DirectoryStream +instanceKlass java/nio/file/Files$AcceptAllFilter +instanceKlass java/nio/file/DirectoryStream$Filter +instanceKlass java/net/NetworkInterface$2 +instanceKlass java/net/DefaultInterface +instanceKlass java/net/InterfaceAddress +instanceKlass java/net/NetworkInterface$1 +instanceKlass java/net/NetworkInterface +instanceKlass sun/security/provider/ByteArrayAccess +instanceKlass sun/security/provider/SeedGenerator$1 +instanceKlass sun/security/provider/SeedGenerator +instanceKlass sun/security/provider/SecureRandom$SeederHolder +instanceKlass sun/security/jca/GetInstance$Instance +instanceKlass java/security/MessageDigestSpi +instanceKlass sun/security/jca/GetInstance +instanceKlass java/security/SecureRandomSpi +instanceKlass java/security/Provider$UString +instanceKlass java/security/Provider$Service +instanceKlass sun/security/provider/NativePRNG$NonBlocking +instanceKlass sun/security/provider/NativePRNG$Blocking +instanceKlass sun/security/provider/NativePRNG +instanceKlass sun/security/provider/SunEntries$1 +instanceKlass sun/security/provider/SunEntries +instanceKlass sun/security/jca/ProviderConfig$2 +instanceKlass sun/security/jca/ProviderList$2 +instanceKlass sun/misc/FDBigInteger +instanceKlass java/security/Provider$EngineDescription +instanceKlass java/security/Provider$ServiceKey +instanceKlass sun/security/jca/ProviderConfig +instanceKlass sun/security/jca/ProviderList +instanceKlass sun/security/jca/Providers +instanceKlass java/util/Random +instanceKlass sun/nio/fs/AbstractPath +instanceKlass java/net/URI$Parser +instanceKlass java/net/URI +instanceKlass sun/nio/fs/Util +instanceKlass sun/nio/fs/WindowsPathParser$Result +instanceKlass sun/nio/fs/WindowsPathParser +instanceKlass java/nio/file/FileSystem +instanceKlass java/nio/file/spi/FileSystemProvider +instanceKlass sun/nio/fs/DefaultFileSystemProvider +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder$1 +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder +instanceKlass java/nio/file/FileSystems +instanceKlass java/nio/file/Paths +instanceKlass java/nio/file/TempFileHelper +instanceKlass java/nio/file/Files +instanceKlass javax/imageio/stream/ImageInputStreamImpl +instanceKlass javax/imageio/ImageIO$CacheInfo +instanceKlass javax/imageio/ImageIO$ImageReaderIterator +instanceKlass javax/imageio/spi/FilterIterator +instanceKlass javax/imageio/spi/PartialOrderIterator +instanceKlass javax/imageio/ImageIO$ContainsFilter +instanceKlass javax/imageio/spi/ServiceRegistry$Filter +instanceKlass javax/imageio/ImageTypeSpecifier +instanceKlass javax/imageio/ImageWriter +instanceKlass javax/imageio/ImageTranscoder +instanceKlass javax/imageio/metadata/IIOMetadataFormat +instanceKlass javax/imageio/ImageReader +instanceKlass javax/imageio/spi/IIORegistry$1 +instanceKlass com/sun/imageio/plugins/jpeg/JPEG +instanceKlass javax/imageio/stream/ImageOutputStream +instanceKlass javax/imageio/spi/DigraphNode +instanceKlass javax/imageio/stream/ImageInputStream +instanceKlass javax/imageio/spi/SubRegistry +instanceKlass javax/imageio/spi/IIOServiceProvider +instanceKlass javax/imageio/spi/RegisterableService +instanceKlass javax/imageio/spi/ServiceRegistry +instanceKlass javax/imageio/ImageIO +instanceKlass org/apache/batik/transcoder/TranscoderOutput +instanceKlass com/mathworks/util/IconUtils +instanceKlass com/mathworks/widgets/desk/MacScreenMenuProxy +instanceKlass com/mathworks/widgets/desk/ToolstripInfoRegistrar +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory +instanceKlass com/mathworks/widgets/desk/DTMnemonicsProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsProvider +instanceKlass com/mathworks/widgets/desk/RecentFiles$Opener +instanceKlass com/mathworks/widgets/desk/RecentFiles$IconSupplier +instanceKlass com/mathworks/matlab/api/explorer/NewFileTemplate +instanceKlass com/mathworks/toolstrip/components/PopupListener +instanceKlass javax/swing/InputMap +instanceKlass com/mathworks/widgets/incSearch/IncSearchInterface +instanceKlass java/awt/dnd/Autoscroll +instanceKlass com/mathworks/mvm/eventmgr/MvmListener +instanceKlass com/mathworks/services/PrefListener +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$DoneListener +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentListener +instanceKlass com/mathworks/util/Predicate +instanceKlass com/mathworks/mlservices/MatlabPauseObserver +instanceKlass com/mathworks/explorer/DesktopExplorerAdapter +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$ChangeListener +instanceKlass org/w3c/dom/Node +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction +instanceKlass com/mathworks/widgets/desk/DTCloseReplyListener +instanceKlass com/mathworks/mwswing/ControlKeyOverride +instanceKlass com/mathworks/mwswing/MJTiledPane$GridListener +instanceKlass com/mathworks/widgets/desk/DTMenuContributor +instanceKlass com/mathworks/widgets/desk/DTContainer +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction$DoneListener +instanceKlass com/mathworks/widgets/desk/Desktop$CallableWrapper +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$ArrangementListener +instanceKlass com/mathworks/mwswing/modality/ModalParticipant +instanceKlass com/mathworks/util/HWndProvider +instanceKlass java/io/Externalizable +instanceKlass com/mathworks/widgets/desk/DTLocation +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$Listener +instanceKlass com/mathworks/widgets/desk/DTOccupant +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry$Registrant +instanceKlass com/mathworks/widgets/desk/DTAsyncWindowCloser +instanceKlass com/mathworks/widgets/desk/DTWindowCloser +instanceKlass com/mathworks/widgets/desk/DTSelectable +instanceKlass com/mathworks/mwswing/SynchronousInvokeUtility$SynchronousEvent +instanceKlass com/mathworks/widgets/desk/Desktop +instanceKlass com/mathworks/widgets/desk/DTWindowActivator +instanceKlass com/mathworks/mlservices/MatlabDesktop +instanceKlass com/mathworks/mlservices/MLExecutionListener +instanceKlass com/mathworks/toolstrip/plaf/TSLookAndFeel +instanceKlass com/mathworks/mwswing/EdtUncaughtExceptionHandler +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsCustomizer +instanceKlass com/jidesoft/plaf/basic/BasicPainter +instanceKlass com/jidesoft/plaf/basic/ThemePainter +instanceKlass com/jidesoft/plaf/vsnet/HeaderCellBorder +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$14 +instanceKlass java/util/TimSort +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$2 +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$1 +instanceKlass sun/java2d/loops/GeneralRenderer +instanceKlass sun/java2d/loops/CustomComponent +instanceKlass sun/java2d/pipe/ValidatePipe +instanceKlass java/awt/BasicStroke +instanceKlass java/awt/Stroke +instanceKlass java/awt/AlphaComposite +instanceKlass sun/java2d/loops/XORComposite +instanceKlass java/awt/Composite +instanceKlass sun/awt/ConstrainableGraphics +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr +instanceKlass sun/java2d/loops/GraphicsPrimitive +instanceKlass sun/java2d/loops/CompositeType +instanceKlass sun/java2d/DefaultDisposerRecord +instanceKlass sun/java2d/loops/RenderLoops +instanceKlass sun/awt/image/BufImgSurfaceData$ICMColorData +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$13 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$12 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$11 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$10 +instanceKlass com/jidesoft/chart/Product +instanceKlass com/jidesoft/shortcut/Product +instanceKlass com/jidesoft/wizard/Product +instanceKlass com/jidesoft/grid/Product +instanceKlass com/jidesoft/document/Product +instanceKlass com/jidesoft/action/Product +instanceKlass com/jidesoft/docking/Product +instanceKlass sun/awt/image/GifFrame +instanceKlass java/awt/Graphics +instanceKlass com/jidesoft/icons/IconsFactory +instanceKlass com/jidesoft/icons/JideIconsFactory +instanceKlass javax/swing/plaf/BorderUIResource +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory$CheckBoxIcon +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$9 +instanceKlass com/jidesoft/plaf/basic/Painter +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$8 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$7 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$6 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$5 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$4 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$3 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$2 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$1 +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty +instanceKlass com/jidesoft/swing/JideSwingUtilities$10 +instanceKlass com/jidesoft/utils/SystemInfo$JavaVersion +instanceKlass com/jidesoft/utils/SystemInfo +instanceKlass com/jidesoft/utils/SecurityUtils +instanceKlass javax/swing/event/ChangeListener +instanceKlass com/jidesoft/dialog/ButtonNames +instanceKlass com/jidesoft/dialog/ButtonListener +instanceKlass javax/swing/event/RowSorterListener +instanceKlass javax/swing/event/CellEditorListener +instanceKlass javax/swing/event/ListSelectionListener +instanceKlass javax/swing/event/TableColumnModelListener +instanceKlass javax/swing/event/TableModelListener +instanceKlass javax/swing/table/TableModel +instanceKlass com/jidesoft/swing/JideSwingUtilities$Handler +instanceKlass com/jidesoft/swing/JideSwingUtilities$GetHandler +instanceKlass com/jidesoft/swing/JideSwingUtilities +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty +instanceKlass com/jidesoft/plaf/vsnet/ConvertListener +instanceKlass com/jidesoft/plaf/basic/BasicLookAndFeelExtension +instanceKlass com/jidesoft/plaf/LookAndFeelExtension +instanceKlass java/util/Vector$Itr +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsInitializer +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$1 +instanceKlass com/jidesoft/plaf/UIDefaultsLookup +instanceKlass com/jidesoft/plaf/LookAndFeelFactory +instanceKlass java/math/MutableBigInteger +instanceKlass com/jidesoft/utils/Q +instanceKlass sun/util/calendar/CalendarUtils +instanceKlass sun/util/calendar/CalendarDate +instanceKlass sun/util/locale/LanguageTag +instanceKlass sun/util/resources/LocaleData$1 +instanceKlass sun/util/resources/LocaleData +instanceKlass sun/util/locale/provider/LocaleResources +instanceKlass sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter +instanceKlass sun/util/locale/provider/SPILocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool +instanceKlass sun/util/locale/provider/CalendarDataUtility +instanceKlass java/util/Calendar$Builder +instanceKlass sun/util/locale/provider/JRELocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleDataMetaInfo +instanceKlass sun/util/locale/provider/AvailableLanguageTags +instanceKlass sun/util/locale/provider/LocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/ResourceBundleBasedAdapter +instanceKlass sun/util/locale/provider/LocaleProviderAdapter +instanceKlass java/util/spi/LocaleServiceProvider +instanceKlass java/util/Locale$1 +instanceKlass java/util/TimeZone$1 +instanceKlass sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule +instanceKlass sun/util/calendar/ZoneInfoFile$1 +instanceKlass sun/util/calendar/ZoneInfoFile +instanceKlass sun/util/calendar/CalendarSystem +instanceKlass java/util/TimeZone +instanceKlass java/util/Calendar +instanceKlass javax/swing/RootPaneContainer +instanceKlass javax/swing/WindowConstants +instanceKlass com/jidesoft/utils/Lm +instanceKlass com/jidesoft/utils/ProductNames +instanceKlass com/mathworks/mwswing/MJStartup$2 +instanceKlass java/awt/event/KeyAdapter +instanceKlass java/awt/event/MouseMotionAdapter +instanceKlass javax/swing/ToolTipManager$stillInsideTimerAction +instanceKlass javax/swing/ToolTipManager$outsideTimerAction +instanceKlass javax/swing/Timer$DoPostEvent +instanceKlass javax/swing/event/EventListenerList +instanceKlass javax/swing/ToolTipManager$insideTimerAction +instanceKlass javax/swing/Timer +instanceKlass java/awt/event/MouseAdapter +instanceKlass java/awt/event/FocusAdapter +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher +instanceKlass com/mathworks/mwswing/MKeyEventDispatcher +instanceKlass com/mathworks/mwswing/BareSwingDetector +instanceKlass com/mathworks/mwswing/MJStartup$1 +instanceKlass com/mathworks/mwswing/MJStartup +instanceKlass com/mathworks/mwswing/MJStartupForDesktop$EscapeKeyHandler +instanceKlass com/mathworks/mwswing/plaf/PlafUtils$SystemColorTracker +instanceKlass sun/font/TrueTypeFont$DirectoryEntry +instanceKlass java/nio/DirectByteBuffer$Deallocator +instanceKlass sun/nio/ch/Util$BufferCache +instanceKlass sun/nio/ch/Util$2 +instanceKlass sun/nio/ch/Util +instanceKlass sun/nio/ch/IOStatus +instanceKlass sun/nio/ch/NativeThread +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel$1 +instanceKlass sun/nio/ch/FileDispatcherImpl$1 +instanceKlass sun/nio/ch/NativeDispatcher +instanceKlass sun/nio/ch/NativeThreadSet +instanceKlass java/net/Inet6Address$Inet6AddressHolder +instanceKlass java/net/InetAddress$2 +instanceKlass sun/net/spi/nameservice/NameService +instanceKlass java/net/Inet6AddressImpl +instanceKlass java/net/InetAddressImpl +instanceKlass java/net/InetAddressImplFactory +instanceKlass java/net/InetAddress$Cache +instanceKlass java/net/InetAddress$InetAddressHolder +instanceKlass java/net/InetAddress$1 +instanceKlass java/net/InetAddress +instanceKlass sun/nio/ch/IOUtil$1 +instanceKlass sun/nio/ch/IOUtil +instanceKlass java/nio/file/attribute/FileAttribute +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel +instanceKlass java/nio/channels/InterruptibleChannel +instanceKlass java/nio/channels/ScatteringByteChannel +instanceKlass java/nio/channels/GatheringByteChannel +instanceKlass java/nio/channels/SeekableByteChannel +instanceKlass java/nio/channels/ByteChannel +instanceKlass java/nio/channels/WritableByteChannel +instanceKlass java/nio/channels/ReadableByteChannel +instanceKlass java/nio/channels/Channel +instanceKlass java/io/RandomAccessFile +instanceKlass sun/font/TrueTypeFont$1 +instanceKlass sun/font/TrueTypeFont$TTDisposerRecord +instanceKlass sun/font/SunFontManager$5 +instanceKlass sun/font/SunFontManager$FamilyDescription +instanceKlass sun/awt/Win32FontManager$2 +instanceKlass sun/font/SunFontManager$3 +instanceKlass sun/font/FontFamily +instanceKlass sun/font/Font2DHandle +instanceKlass sun/font/CompositeFontDescriptor +instanceKlass sun/awt/FontDescriptor +instanceKlass sun/awt/FontConfiguration +instanceKlass sun/font/SunFontManager$FontRegistrationInfo +instanceKlass sun/font/SunFontManager$2 +instanceKlass sun/awt/Win32FontManager$1 +instanceKlass sun/font/GlyphList +instanceKlass sun/font/StrikeCache$1 +instanceKlass sun/font/StrikeCache +instanceKlass sun/font/FontStrike +instanceKlass sun/font/CharToGlyphMapper +instanceKlass java/awt/geom/Path2D +instanceKlass sun/font/StrikeMetrics +instanceKlass sun/font/Font2D +instanceKlass sun/font/FontManagerNativeLibrary$1 +instanceKlass sun/font/FontManagerNativeLibrary +instanceKlass sun/font/SunFontManager$1 +instanceKlass sun/font/SunFontManager$T1Filter +instanceKlass sun/font/SunFontManager$TTFilter +instanceKlass java/io/FilenameFilter +instanceKlass sun/font/SunFontManager +instanceKlass sun/font/FontManagerForSGE +instanceKlass sun/font/FontManager +instanceKlass sun/java2d/FontSupport +instanceKlass sun/font/FontManagerFactory$1 +instanceKlass sun/font/FontManagerFactory +instanceKlass sun/font/FontUtilities$1 +instanceKlass sun/font/FontUtilities +instanceKlass org/apache/commons/lang/Validate +instanceKlass com/mathworks/mwswing/FontSize +instanceKlass com/mathworks/mwswing/FontUtils +instanceKlass com/mathworks/services/DisplayScaleFactorSetting +instanceKlass com/mathworks/util/ResolutionUtils +instanceKlass com/mathworks/mwswing/ScreenSizeChangeHandler +instanceKlass com/mathworks/cfbutils/StatEntryReceiver +instanceKlass com/mathworks/util/NativeJava +instanceKlass javax/swing/Scrollable +instanceKlass com/mathworks/mwswing/ExtendedInputMap +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerListener +instanceKlass javax/swing/Action +instanceKlass com/mathworks/mwswing/MJUtilities +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon +instanceKlass javax/swing/BorderFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1 +instanceKlass java/util/EnumMap$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$CheckBoxMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory +instanceKlass java/awt/ItemSelectable +instanceKlass javax/swing/MenuElement +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon +instanceKlass sun/swing/SwingLazyValue$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory +instanceKlass sun/swing/MenuItemCheckIconFactory +instanceKlass sun/util/ResourceBundleEnumeration +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon +instanceKlass sun/swing/SwingUtilities2$AATextInfo +instanceKlass com/sun/java/swing/plaf/windows/XPStyle$Skin +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty +instanceKlass com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon +instanceKlass javax/swing/UIDefaults$LazyInputMap +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$2 +instanceKlass sun/swing/SwingUtilities2$2 +instanceKlass javax/swing/border/AbstractBorder +instanceKlass javax/swing/UIDefaults$ActiveValue +instanceKlass sun/swing/SwingLazyValue +instanceKlass javax/swing/UIDefaults$LazyValue +instanceKlass javax/swing/plaf/UIResource +instanceKlass java/awt/SystemColor$$Lambda$8 +instanceKlass sun/awt/AWTAccessor$SystemColorAccessor +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor +instanceKlass javax/swing/plaf/ComponentUI +instanceKlass javax/swing/UIManager$2 +instanceKlass sun/awt/PaintEventDispatcher +instanceKlass sun/swing/SwingAccessor +instanceKlass javax/swing/RepaintManager$1 +instanceKlass sun/swing/SwingAccessor$RepaintManagerAccessor +instanceKlass javax/swing/RepaintManager$DisplayChangedHandler +instanceKlass javax/swing/RepaintManager +instanceKlass javax/swing/UIManager$1 +instanceKlass sun/swing/ImageCache +instanceKlass sun/swing/CachedPainter +instanceKlass com/sun/java/swing/plaf/windows/XPStyle +instanceKlass sun/swing/DefaultLookup +instanceKlass javax/swing/UIManager$LAFState +instanceKlass sun/swing/SwingUtilities2$LSBCacheEntry +instanceKlass java/awt/font/FontRenderContext +instanceKlass sun/swing/SwingUtilities2 +instanceKlass sun/swing/StringUIClientPropertyKey +instanceKlass sun/swing/UIClientPropertyKey +instanceKlass javax/swing/LookAndFeel +instanceKlass java/util/IdentityHashMap$IdentityHashMapIterator +instanceKlass java/awt/Toolkit$DesktopPropertyChangeSupport$1 +instanceKlass java/util/ComparableTimSort +instanceKlass java/util/Arrays$LegacyMergeSort +instanceKlass sun/awt/SunHints$Value +instanceKlass java/awt/RenderingHints$Key +instanceKlass sun/awt/SunHints +instanceKlass java/awt/RenderingHints +instanceKlass sun/awt/windows/WDesktopProperties$WinPlaySound +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock +instanceKlass java/util/concurrent/locks/ReadWriteLock +instanceKlass sun/awt/windows/ThemeReader +instanceKlass sun/awt/windows/WDesktopProperties +instanceKlass sun/awt/OSInfo$1 +instanceKlass sun/awt/OSInfo$WindowsVersion +instanceKlass sun/awt/OSInfo +instanceKlass javax/swing/UIManager$LookAndFeelInfo +instanceKlass javax/swing/UIManager +instanceKlass javax/swing/border/Border +instanceKlass com/mathworks/mwswing/plaf/PlafUtils +instanceKlass java/awt/AWTEventMulticaster +instanceKlass java/awt/event/TextListener +instanceKlass java/awt/event/AdjustmentListener +instanceKlass java/awt/event/ItemListener +instanceKlass java/awt/event/ActionListener +instanceKlass java/awt/event/WindowStateListener +instanceKlass java/awt/event/WindowFocusListener +instanceKlass java/awt/event/ContainerListener +instanceKlass java/awt/Toolkit$SelectiveAWTEventListener +instanceKlass java/util/EventListenerProxy +instanceKlass javax/swing/ScrollPaneConstants +instanceKlass com/mathworks/mwswing/MouseWheelRedirector +instanceKlass com/google/common/collect/MapMakerInternalMap$StrongEntry +instanceKlass java/awt/image/BufferedImage$1 +instanceKlass java/awt/image/WritableRenderedImage +instanceKlass java/awt/image/RenderedImage +instanceKlass java/awt/image/SampleModel +instanceKlass java/awt/image/DataBuffer$1 +instanceKlass sun/awt/image/SunWritableRaster$DataStealer +instanceKlass java/awt/image/DataBuffer +instanceKlass java/awt/image/Raster +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/ImageWatched$WeakLink$$Lambda$7 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/PNGImageDecoder$Chromaticities +instanceKlass sun/awt/image/ImageDecoder +instanceKlass sun/awt/image/ImageFetcher$1 +instanceKlass sun/awt/image/FetcherInfo +instanceKlass sun/awt/image/ImageConsumerQueue +instanceKlass sun/awt/image/ImageWatched$Link +instanceKlass sun/awt/image/ImageWatched +instanceKlass java/awt/image/ImageConsumer +instanceKlass sun/awt/image/MultiResolutionImage +instanceKlass java/awt/MediaEntry +instanceKlass sun/awt/image/NativeLibLoader$1 +instanceKlass sun/awt/image/NativeLibLoader +instanceKlass sun/awt/image/InputStreamImageSource +instanceKlass sun/awt/image/ImageFetchable +instanceKlass java/awt/image/ImageProducer +instanceKlass java/awt/MediaTracker +instanceKlass javax/accessibility/AccessibleContext +instanceKlass sun/awt/EventQueueItem +instanceKlass java/awt/event/InputMethodListener +instanceKlass java/awt/event/MouseWheelListener +instanceKlass java/awt/event/MouseMotionListener +instanceKlass java/awt/event/MouseListener +instanceKlass java/awt/event/KeyListener +instanceKlass java/awt/event/HierarchyBoundsListener +instanceKlass java/awt/event/HierarchyListener +instanceKlass java/awt/event/FocusListener +instanceKlass java/awt/event/ComponentListener +instanceKlass java/awt/dnd/DropTarget +instanceKlass java/awt/dnd/DropTargetListener +instanceKlass java/awt/image/BufferStrategy +instanceKlass javax/swing/ImageIcon$2 +instanceKlass javax/swing/ImageIcon$1 +instanceKlass javax/swing/ImageIcon +instanceKlass com/mathworks/util/StringUtils +instanceKlass java/util/concurrent/atomic/AtomicReferenceArray +instanceKlass com/google/common/collect/MapMaker$RemovalListener +instanceKlass com/google/common/base/Ticker +instanceKlass com/google/common/base/Predicate +instanceKlass com/google/common/base/Equivalence +instanceKlass com/google/common/base/Objects +instanceKlass com/google/common/collect/MapMakerInternalMap$1 +instanceKlass com/google/common/collect/MapMakerInternalMap$ReferenceEntry +instanceKlass com/google/common/base/Preconditions +instanceKlass com/google/common/collect/MapMakerInternalMap$ValueReference +instanceKlass com/google/common/collect/GenericMapMaker +instanceKlass com/mathworks/util/logger/impl/LegacyLoggerFactory +instanceKlass com/mathworks/util/logger/LoggerFactory +instanceKlass com/mathworks/util/logger/Log +instanceKlass javax/swing/Icon +instanceKlass com/mathworks/common/icons/IconEnumerationUtils +instanceKlass com/mathworks/common/icons/IconContainer +instanceKlass sun/awt/KeyboardFocusManagerPeerImpl +instanceKlass java/awt/peer/KeyboardFocusManagerPeer +instanceKlass java/awt/FocusTraversalPolicy +instanceKlass java/awt/DefaultKeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor +instanceKlass java/awt/AWTKeyStroke$1 +instanceKlass java/awt/AWTKeyStroke +instanceKlass java/awt/KeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$KeyboardFocusManagerAccessor +instanceKlass java/awt/KeyboardFocusManager +instanceKlass java/awt/KeyEventPostProcessor +instanceKlass java/awt/KeyEventDispatcher +instanceKlass java/awt/Window$WindowDisposerRecord +instanceKlass sun/awt/windows/WToolkit$$Lambda$6 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass sun/awt/windows/WToolkit$$Lambda$5 +instanceKlass sun/awt/windows/WToolkit$$Lambda$4 +instanceKlass sun/awt/windows/WToolkit$$Lambda$3 +instanceKlass sun/awt/AWTAutoShutdown +instanceKlass sun/misc/ThreadGroupUtils +instanceKlass sun/java2d/Disposer$$Lambda$2 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/java2d/Disposer$1 +instanceKlass sun/java2d/Disposer +instanceKlass sun/awt/windows/WToolkit$ToolkitDisposer +instanceKlass sun/java2d/DisposerRecord +instanceKlass sun/misc/PerformanceLogger$TimeData +instanceKlass sun/misc/PerformanceLogger +instanceKlass sun/awt/SunToolkit$ModalityListenerList +instanceKlass sun/awt/ModalityListener +instanceKlass java/beans/ChangeListenerMap +instanceKlass java/beans/PropertyChangeSupport +instanceKlass java/awt/Toolkit$2 +instanceKlass java/awt/BorderLayout +instanceKlass java/awt/LayoutManager2 +instanceKlass java/awt/GraphicsConfiguration +instanceKlass sun/awt/image/SurfaceManager$ProxiedGraphicsConfig +instanceKlass java/awt/GraphicsDevice +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryConverter +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIConverter +instanceKlass sun/misc/FloatingDecimal +instanceKlass sun/java2d/SunGraphicsEnvironment$1 +instanceKlass sun/awt/SunDisplayChanger +instanceKlass sun/java2d/SurfaceManagerFactory +instanceKlass sun/java2d/windows/WindowsFlags$1 +instanceKlass sun/java2d/windows/WindowsFlags +instanceKlass sun/awt/windows/WToolkit$2 +instanceKlass sun/awt/image/SurfaceManager +instanceKlass sun/awt/image/SurfaceManager$ImageAccessor +instanceKlass java/awt/ImageCapabilities +instanceKlass java/awt/Image +instanceKlass sun/java2d/DestSurfaceProvider +instanceKlass sun/java2d/loops/RenderCache$Entry +instanceKlass sun/java2d/loops/RenderCache +instanceKlass sun/java2d/pipe/DrawImage +instanceKlass sun/java2d/pipe/GeneralCompositePipe +instanceKlass sun/java2d/pipe/SpanShapeRenderer +instanceKlass sun/java2d/pipe/AlphaPaintPipe +instanceKlass sun/java2d/pipe/AAShapePipe +instanceKlass sun/java2d/pipe/RegionIterator +instanceKlass sun/java2d/pipe/Region +instanceKlass sun/java2d/pipe/SpanClipRenderer +instanceKlass sun/java2d/pipe/PixelToShapeConverter +instanceKlass sun/java2d/pipe/AlphaColorPipe +instanceKlass sun/java2d/pipe/CompositePipe +instanceKlass sun/java2d/pipe/GlyphListPipe +instanceKlass sun/java2d/pipe/OutlineTextRenderer +instanceKlass sun/java2d/pipe/RenderingEngine$1 +instanceKlass sun/java2d/pipe/RenderingEngine +instanceKlass sun/java2d/pipe/LoopPipe +instanceKlass sun/java2d/pipe/LoopBasedPipe +instanceKlass sun/java2d/pipe/ParallelogramPipe +instanceKlass sun/java2d/pipe/NullPipe +instanceKlass sun/java2d/pipe/DrawImagePipe +instanceKlass sun/java2d/pipe/TextPipe +instanceKlass sun/java2d/pipe/ShapeDrawPipe +instanceKlass sun/java2d/pipe/PixelFillPipe +instanceKlass sun/java2d/pipe/PixelDrawPipe +instanceKlass sun/java2d/StateTrackableDelegate$2 +instanceKlass sun/java2d/StateTrackableDelegate +instanceKlass java/awt/color/ICC_Profile$1 +instanceKlass sun/java2d/cmm/ProfileActivator +instanceKlass sun/java2d/cmm/ProfileDeferralMgr +instanceKlass java/awt/color/ICC_Profile +instanceKlass java/awt/color/ColorSpace +instanceKlass java/awt/image/ColorModel$1 +instanceKlass java/awt/image/ColorModel +instanceKlass sun/awt/image/PixelConverter +instanceKlass sun/java2d/loops/SurfaceType +instanceKlass sun/java2d/SurfaceData +instanceKlass sun/java2d/Surface +instanceKlass sun/java2d/StateTrackable +instanceKlass sun/java2d/DisposerTarget +instanceKlass sun/awt/windows/WToolkit$1 +instanceKlass sun/awt/DisplayChangedListener +instanceKlass java/awt/Cursor$1 +instanceKlass sun/awt/AWTAccessor$CursorAccessor +instanceKlass java/awt/geom/Point2D +instanceKlass java/awt/Cursor +instanceKlass java/awt/ComponentOrientation +instanceKlass java/awt/Frame$1 +instanceKlass sun/awt/AWTAccessor$FrameAccessor +instanceKlass java/awt/Window$1 +instanceKlass sun/awt/AWTAccessor$WindowAccessor +instanceKlass java/awt/event/WindowListener +instanceKlass sun/awt/PostEventQueue +instanceKlass sun/awt/MostRecentKeyValue +instanceKlass java/awt/Queue +instanceKlass java/awt/EventQueue$2 +instanceKlass sun/awt/AWTAccessor$EventQueueAccessor +instanceKlass java/awt/EventQueue$1 +instanceKlass java/awt/EventQueue +instanceKlass sun/awt/AppContext$1 +instanceKlass sun/awt/KeyboardFocusManagerPeerProvider +instanceKlass sun/awt/InputMethodSupport +instanceKlass sun/awt/ComponentFactory +instanceKlass sun/awt/WindowClosingListener +instanceKlass sun/awt/WindowClosingSupport +instanceKlass sun/awt/AppContext$2 +instanceKlass sun/awt/AppContext$3 +instanceKlass sun/awt/AppContext$6 +instanceKlass sun/misc/JavaAWTAccess +instanceKlass sun/awt/AppContext$GetAppContextLock +instanceKlass sun/awt/AppContext +instanceKlass javax/swing/SwingUtilities +instanceKlass javax/swing/SwingConstants +instanceKlass javax/swing/JComponent$1 +instanceKlass java/awt/Container$1 +instanceKlass sun/awt/AWTAccessor$ContainerAccessor +instanceKlass java/awt/geom/Dimension2D +instanceKlass java/awt/LightweightDispatcher +instanceKlass java/awt/LayoutManager +instanceKlass java/awt/Component$DummyRequestFocusController +instanceKlass sun/awt/RequestFocusController +instanceKlass java/awt/Component$1 +instanceKlass sun/awt/AWTAccessor$ComponentAccessor +instanceKlass java/text/AttributedCharacterIterator$Attribute +instanceKlass sun/font/AttributeValues +instanceKlass java/awt/geom/AffineTransform +instanceKlass sun/font/FontAccess +instanceKlass sun/awt/windows/WObjectPeer +instanceKlass java/awt/dnd/peer/DropTargetPeer +instanceKlass java/awt/peer/ComponentPeer +instanceKlass java/awt/event/InputEvent$1 +instanceKlass sun/awt/AWTAccessor$InputEventAccessor +instanceKlass java/awt/event/NativeLibLoader$1 +instanceKlass java/awt/event/NativeLibLoader +instanceKlass java/awt/AWTEvent$1 +instanceKlass sun/awt/AWTAccessor$AWTEventAccessor +instanceKlass java/util/EventObject +instanceKlass java/awt/Insets +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InnerClassLambdaMetafactory$1 +instanceKlass java/awt/GraphicsEnvironment$$Lambda$1 +instanceKlass java/lang/invoke/InfoFromMemberName +instanceKlass java/lang/invoke/MethodHandleInfo +instanceKlass sun/security/util/SecurityConstants +instanceKlass java/security/AccessController$1 +instanceKlass java/lang/invoke/AbstractValidatingLambdaMetafactory +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass jdk/internal/org/objectweb/asm/FieldVisitor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory$1 +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData$1 +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaFormBuffer +instanceKlass java/lang/invoke/LambdaFormEditor +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/MethodHandleImpl$Lazy +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/util/SubList$1 +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$CpPatch +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/invoke/empty/Empty +instanceKlass sun/invoke/util/VerifyType +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$2 +instanceKlass jdk/internal/org/objectweb/asm/AnnotationVisitor +instanceKlass jdk/internal/org/objectweb/asm/Frame +instanceKlass jdk/internal/org/objectweb/asm/Label +instanceKlass jdk/internal/org/objectweb/asm/Type +instanceKlass jdk/internal/org/objectweb/asm/MethodVisitor +instanceKlass jdk/internal/org/objectweb/asm/Item +instanceKlass jdk/internal/org/objectweb/asm/ByteVector +instanceKlass jdk/internal/org/objectweb/asm/ClassVisitor +instanceKlass java/lang/invoke/InvokerBytecodeGenerator +instanceKlass java/util/AbstractList$Itr +instanceKlass java/util/Collections$UnmodifiableCollection$1 +instanceKlass java/lang/invoke/DirectMethodHandle$Lazy +instanceKlass sun/invoke/util/BytecodeDescriptor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData +instanceKlass java/lang/invoke/LambdaForm$NamedFunction +instanceKlass java/lang/invoke/LambdaForm$Name +instanceKlass sun/invoke/util/ValueConversions +instanceKlass sun/invoke/util/VerifyAccess +instanceKlass java/lang/Character$CharacterCache +instanceKlass java/lang/Short$ShortCache +instanceKlass java/lang/Byte$ByteCache +instanceKlass sun/invoke/util/Wrapper$Format +instanceKlass java/lang/invoke/MethodHandles +instanceKlass java/lang/invoke/Invokers +instanceKlass java/lang/invoke/MethodTypeForm +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet +instanceKlass java/lang/invoke/MethodHandles$Lookup +instanceKlass java/lang/invoke/LambdaMetafactory +instanceKlass java/awt/GraphicsEnvironment +instanceKlass java/awt/Toolkit$1 +instanceKlass java/awt/Toolkit$3 +instanceKlass java/util/ResourceBundle$RBClassLoader$1 +instanceKlass java/awt/Toolkit$5 +instanceKlass sun/awt/AWTAccessor +instanceKlass java/awt/Toolkit$4 +instanceKlass sun/awt/AWTAccessor$ToolkitAccessor +instanceKlass java/awt/Toolkit +instanceKlass java/awt/Component$AWTTreeLock +instanceKlass java/util/logging/Logger$1 +instanceKlass java/awt/Component +instanceKlass java/awt/MenuContainer +instanceKlass java/awt/image/ImageObserver +instanceKlass javax/swing/TransferHandler$HasGetTransferHandler +instanceKlass javax/accessibility/Accessible +instanceKlass java/awt/event/AWTEventListener +instanceKlass com/mathworks/mwswing/MJStartupForDesktop +instanceKlass com/mathworks/services/AntialiasedFontPrefs +instanceKlass org/apache/log4j/helpers/AppenderAttachableImpl +instanceKlass org/apache/log4j/CategoryKey +instanceKlass org/apache/log4j/helpers/LogLog +instanceKlass org/apache/log4j/helpers/Loader +instanceKlass org/apache/log4j/spi/Configurator +instanceKlass org/apache/log4j/helpers/OptionConverter +instanceKlass org/apache/log4j/spi/DefaultRepositorySelector +instanceKlass org/apache/log4j/DefaultCategoryFactory +instanceKlass org/apache/log4j/or/DefaultRenderer +instanceKlass org/apache/log4j/or/ObjectRenderer +instanceKlass org/apache/log4j/or/RendererMap +instanceKlass org/apache/log4j/spi/LoggerFactory +instanceKlass org/apache/log4j/Hierarchy +instanceKlass org/apache/log4j/spi/RendererSupport +instanceKlass org/apache/log4j/spi/RepositorySelector +instanceKlass org/apache/log4j/spi/LoggerRepository +instanceKlass org/apache/log4j/LogManager +instanceKlass org/apache/log4j/Category +instanceKlass org/apache/log4j/spi/AppenderAttachable +instanceKlass org/apache/log4j/helpers/OnlyOnceErrorHandler +instanceKlass org/apache/log4j/spi/ErrorHandler +instanceKlass org/apache/log4j/Priority +instanceKlass org/apache/log4j/AppenderSkeleton +instanceKlass org/apache/log4j/spi/OptionHandler +instanceKlass org/apache/log4j/Appender +instanceKlass com/mathworks/services/Log4JConfiguration +instanceKlass com/mathworks/html/HtmlDataListener +instanceKlass com/mathworks/html/SystemBrowserLauncher +instanceKlass com/mathworks/mlwidgets/html/MatlabSystemBrowserStrategy +instanceKlass java/net/SocketAddress +instanceKlass com/mathworks/net/transport/AbstractTransportClientProperties +instanceKlass java/util/logging/LogManager$5 +instanceKlass sun/reflect/UnsafeFieldAccessorFactory +instanceKlass java/util/logging/LoggingProxyImpl +instanceKlass sun/util/logging/LoggingProxy +instanceKlass sun/util/logging/LoggingSupport$1 +instanceKlass sun/util/logging/LoggingSupport +instanceKlass sun/util/logging/PlatformLogger$LoggerProxy +instanceKlass sun/util/logging/PlatformLogger$1 +instanceKlass sun/util/logging/PlatformLogger +instanceKlass java/util/logging/LogManager$LoggerContext$1 +instanceKlass java/util/logging/LogManager$3 +instanceKlass java/util/logging/LogManager$2 +instanceKlass java/lang/Shutdown$Lock +instanceKlass java/lang/Shutdown +instanceKlass java/lang/ApplicationShutdownHooks$1 +instanceKlass java/lang/ApplicationShutdownHooks +instanceKlass java/util/logging/LogManager$LogNode +instanceKlass java/util/logging/LogManager$LoggerContext +instanceKlass java/util/logging/LogManager$1 +instanceKlass java/util/logging/LogManager +instanceKlass java/util/concurrent/CopyOnWriteArrayList +instanceKlass java/util/logging/Logger$LoggerBundle +instanceKlass java/util/logging/Level$KnownLevel +instanceKlass java/util/logging/Level +instanceKlass java/util/logging/Handler +instanceKlass java/util/logging/Logger +instanceKlass java/net/Authenticator +instanceKlass com/mathworks/net/transport/MWTransportClientProperties +instanceKlass com/mathworks/net/transport/MWTransportClientPropertiesFactory +instanceKlass com/mathworks/html/SystemBrowserStrategy +instanceKlass com/mathworks/mlwidgets/html/HTMLPrefs +instanceKlass com/mathworks/services/Prefs$1 +instanceKlass com/mathworks/services/DefaultFontPrefs +instanceKlass com/mathworks/services/settings/SettingValidator +instanceKlass com/mathworks/services/RGBInteger +instanceKlass java/util/RegularEnumSet$EnumSetIterator +instanceKlass java/lang/Class$4 +instanceKlass com/mathworks/services/settings/SettingInfo +instanceKlass com/mathworks/services/settings/SettingAdapter +instanceKlass java/util/TreeMap$Entry +instanceKlass java/lang/ProcessEnvironment$CheckedEntry +instanceKlass java/lang/ProcessEnvironment$CheckedEntrySet$1 +instanceKlass java/util/NavigableMap +instanceKlass java/util/SortedMap +instanceKlass java/util/Collections$UnmodifiableMap +instanceKlass sun/nio/ch/Interruptible +instanceKlass java/lang/ProcessEnvironment$EntryComparator +instanceKlass java/util/concurrent/locks/LockSupport +instanceKlass java/lang/ProcessEnvironment$NameComparator +instanceKlass java/util/concurrent/atomic/AtomicReference +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference$1 +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference +instanceKlass com/mathworks/mvm/eventmgr/MvmDynamicEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/HomeEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/CLCEvent +instanceKlass com/mathworks/mvm/eventmgr/SinkTextEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/DebugLoopEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/IqmInputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/InputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$MvmNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$FactoryNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$SessionNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$NativeMethods +instanceKlass com/mathworks/mvm/eventmgr/InsecureReflection +instanceKlass com/mathworks/mvm/exec/FutureResult +instanceKlass com/mathworks/mvm/exec/MatlabIIP +instanceKlass com/mathworks/mvm/exec/NativeFutureResult +instanceKlass com/mathworks/mvm/exec/MatlabRequest +instanceKlass com/mathworks/mvm/MvmImpl +instanceKlass com/mathworks/mvm/MVM +instanceKlass com/mathworks/mvm/eventmgr/EventMgr +instanceKlass com/mathworks/mvm/MvmFactory +instanceKlass com/mathworks/mvm/context/ThreadContext +instanceKlass com/mathworks/mvm/context/MvmContext +instanceKlass com/mathworks/services/settings/SettingTestEnvironment +instanceKlass com/mathworks/services/settings/SettingTransaction +instanceKlass com/mathworks/services/settings/SettingLevel$Helper +instanceKlass java/awt/geom/RectangularShape +instanceKlass java/awt/Shape +instanceKlass java/awt/Color +instanceKlass java/awt/Paint +instanceKlass java/awt/Transparency +instanceKlass java/awt/Font +instanceKlass com/mathworks/services/settings/SettingConverter +instanceKlass com/mathworks/services/settings/Setting +instanceKlass javax/swing/text/EditorKit +instanceKlass java/io/FileFilter +instanceKlass com/mathworks/cfbutils/FileUtils +instanceKlass com/mathworks/util/FileUtils +instanceKlass com/mathworks/services/Prefs$pairSet +instanceKlass com/mathworks/util/Log +instanceKlass com/mathworks/util/CharBuffer +instanceKlass com/mathworks/services/Prefs$TwoWayMap +instanceKlass com/mathworks/services/lmgr/events/HeartbeatShutdown +instanceKlass com/mathworks/services/lmgr/events/LicServerReconnectAttempt +instanceKlass sun/net/www/protocol/jar/JarFileFactory +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController +instanceKlass java/net/URLClassLoader$2 +instanceKlass java/util/ResourceBundle$Control$1 +instanceKlass java/util/ResourceBundle$CacheKeyReference +instanceKlass java/util/ResourceBundle$CacheKey +instanceKlass java/util/ResourceBundle$Control +instanceKlass java/net/URLClassLoader$3$1 +instanceKlass sun/misc/CompoundEnumeration +instanceKlass java/net/URLClassLoader$3 +instanceKlass java/util/Collections$EmptyIterator +instanceKlass sun/misc/URLClassPath$1 +instanceKlass java/lang/ClassLoader$2 +instanceKlass sun/misc/URLClassPath$2 +instanceKlass java/util/zip/ZipUtils +instanceKlass java/util/zip/CRC32 +instanceKlass java/util/zip/Checksum +instanceKlass sun/misc/Launcher$BootClassPathHolder$1 +instanceKlass sun/misc/Launcher$BootClassPathHolder +instanceKlass java/util/ServiceLoader$1 +instanceKlass java/util/ServiceLoader$LazyIterator +instanceKlass java/util/ServiceLoader +instanceKlass java/util/spi/ResourceBundleControlProvider +instanceKlass java/util/ResourceBundle +instanceKlass com/mathworks/services/Prefs$PrefString +instanceKlass com/mathworks/services/settings/SettingListener +instanceKlass org/apache/commons/io/FilenameUtils +instanceKlass com/mathworks/services/Prefs +instanceKlass com/mathworks/util/ManifestAttributeProviderImpl +instanceKlass com/mathworks/util/ManifestAttributeProvider +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$LazyHolder +instanceKlass com/mathworks/util/LanguageUtils +instanceKlass com/mathworks/util/SystemPropertiesInitializer +instanceKlass java/util/concurrent/Executors$RunnableAdapter +instanceKlass java/util/concurrent/FutureTask$WaitNode +instanceKlass java/util/concurrent/Callable +instanceKlass java/util/concurrent/FutureTask +instanceKlass java/util/concurrent/RunnableFuture +instanceKlass java/util/concurrent/Future +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$1 +instanceKlass java/util/concurrent/LinkedBlockingQueue$Node +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +instanceKlass java/util/concurrent/locks/Condition +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$Node +instanceKlass java/util/concurrent/locks/AbstractOwnableSynchronizer +instanceKlass java/util/concurrent/BlockingQueue +instanceKlass java/util/concurrent/ThreadPoolExecutor$AbortPolicy +instanceKlass java/util/concurrent/RejectedExecutionHandler +instanceKlass java/util/concurrent/AbstractExecutorService +instanceKlass java/util/concurrent/ExecutorService +instanceKlass java/util/concurrent/Executor +instanceKlass java/util/concurrent/Executors +instanceKlass com/mathworks/util/DaemonThreadFactory +instanceKlass java/util/concurrent/ThreadFactory +instanceKlass com/mathworks/util/ThreadUtils +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory +instanceKlass com/mathworks/util/PostVMInit$StartupClass +instanceKlass com/mathworks/util/PostVMInit +instanceKlass java/lang/reflect/WeakCache$Value +instanceKlass sun/misc/ProxyGenerator$ExceptionTableEntry +instanceKlass sun/misc/ProxyGenerator$PrimitiveTypeInfo +instanceKlass java/lang/Void +instanceKlass sun/misc/ProxyGenerator$FieldInfo +instanceKlass java/util/ArrayList$Itr +instanceKlass java/io/DataOutput +instanceKlass sun/misc/ProxyGenerator$ConstantPool$Entry +instanceKlass sun/misc/ProxyGenerator$MethodInfo +instanceKlass java/util/HashMap$HashIterator +instanceKlass sun/misc/ProxyGenerator$ProxyMethod +instanceKlass sun/misc/ProxyGenerator$ConstantPool +instanceKlass java/lang/Class$MethodArray +instanceKlass sun/security/action/GetBooleanAction +instanceKlass sun/misc/ProxyGenerator +instanceKlass java/lang/reflect/WeakCache$Factory +instanceKlass java/util/function/Supplier +instanceKlass java/lang/reflect/Proxy$ProxyClassFactory +instanceKlass java/lang/reflect/Proxy$KeyFactory +instanceKlass java/util/function/BiFunction +instanceKlass java/lang/reflect/WeakCache +instanceKlass java/lang/reflect/Proxy +instanceKlass com/mathworks/util/event/EventListenerList$1 +instanceKlass com/mathworks/util/Disposable +instanceKlass java/lang/reflect/InvocationHandler +instanceKlass com/mathworks/util/event/EventListenerList +instanceKlass java/util/Collections$SynchronizedMap +instanceKlass com/mathworks/util/event/GlobalEventManager +instanceKlass com/mathworks/jmi/Matlab$4 +instanceKlass java/util/Timer$1 +instanceKlass java/util/TaskQueue +instanceKlass java/util/Timer +instanceKlass com/mathworks/jmi/bean/IMatlabObjectListener +instanceKlass com/mathworks/jmi/bean/UDDObject +instanceKlass com/mathworks/jmi/bean/DynamicProperties +instanceKlass com/mathworks/jmi/bean/MTObject +instanceKlass com/mathworks/services/Browseable +instanceKlass com/mathworks/jmi/bean/TreeObject +instanceKlass com/mathworks/jmi/types/MLArrayRef +instanceKlass com/mathworks/jmi/idlebusy/MatlabIdleBusyStatusEvent +instanceKlass com/mathworks/mvm/eventmgr/FirableMvmEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmTypedEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmEvent +instanceKlass java/lang/ClassLoaderHelper +instanceKlass com/mathworks/util/NativeJavaSwitch +instanceKlass com/mathworks/util/ClassLoaderBridge +instanceKlass com/mathworks/jmi/Matlab$2 +instanceKlass java/beans/PropertyChangeListener +instanceKlass com/mathworks/util/PlatformInfo +instanceKlass com/mathworks/util/FactoryUtilAdapter +instanceKlass com/mathworks/jmi/Matlab$MatlabQuitListener +instanceKlass java/lang/Long$LongCache +instanceKlass com/mathworks/jmi/MatlabLooper +instanceKlass com/mathworks/util/ClassLoaderSupplier +instanceKlass com/mathworks/util/FactoryUtilSupplier +instanceKlass com/mathworks/jmi/MatlabListener +instanceKlass com/mathworks/jmi/CompletionObserver +instanceKlass com/mathworks/util/event/GlobalEventListener +instanceKlass java/util/EventListener +instanceKlass java/util/TimerTask +instanceKlass com/mathworks/jmi/Matlab +instanceKlass com/mathworks/mvm/helpers/MatlabPrintStreamManager +instanceKlass com/mathworks/jmi/MatlabLanguage +instanceKlass com/mathworks/jmi/NativeMatlab$MCRIDGetter +instanceKlass com/mathworks/jmi/NativeMatlab +instanceKlass com/mathworks/util/FactoryUtils +instanceKlass java/io/ObjectStreamConstants +instanceKlass java/io/ObjectInput +instanceKlass java/io/DataInput +instanceKlass com/mathworks/jmi/OpaqueJavaInterface +instanceKlass java/io/FilePermission$1 +instanceKlass sun/net/www/MessageHeader +instanceKlass java/net/URLConnection +instanceKlass java/security/PermissionCollection +instanceKlass sun/nio/ByteBuffered +instanceKlass sun/security/util/ManifestEntryVerifier +instanceKlass sun/security/util/DisabledAlgorithmConstraints$1 +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraint +instanceKlass java/util/regex/Matcher +instanceKlass java/util/regex/MatchResult +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraints +instanceKlass java/util/ArrayList$SubList$1 +instanceKlass java/util/ListIterator +instanceKlass java/util/Properties$LineReader +instanceKlass java/security/Security$1 +instanceKlass java/security/Security +instanceKlass sun/security/util/AbstractAlgorithmConstraints$1 +instanceKlass java/util/regex/ASCII +instanceKlass java/util/regex/Pattern$TreeInfo +instanceKlass java/util/regex/Pattern$Node +instanceKlass java/util/regex/Pattern +instanceKlass sun/security/util/AlgorithmDecomposer +instanceKlass sun/security/util/AbstractAlgorithmConstraints +instanceKlass java/security/AlgorithmConstraints +instanceKlass sun/security/util/SignatureFileVerifier +instanceKlass java/lang/Package +instanceKlass java/util/jar/JarVerifier$3 +instanceKlass java/security/CodeSigner +instanceKlass java/util/jar/JarVerifier +instanceKlass sun/misc/ASCIICaseInsensitiveComparator +instanceKlass java/util/jar/Attributes$Name +instanceKlass java/lang/StringCoding$StringDecoder +instanceKlass java/util/jar/Attributes +instanceKlass sun/misc/Resource +instanceKlass sun/misc/IOUtils +instanceKlass java/util/zip/ZStreamRef +instanceKlass java/util/zip/Inflater +instanceKlass sun/misc/ExtensionDependency +instanceKlass java/util/LinkedList$Node +instanceKlass java/util/zip/ZipEntry +instanceKlass sun/misc/JarIndex +instanceKlass sun/nio/ch/DirectBuffer +instanceKlass sun/misc/PerfCounter$CoreCounters +instanceKlass sun/misc/Perf +instanceKlass sun/misc/Perf$GetPerfAction +instanceKlass sun/misc/PerfCounter +instanceKlass java/util/zip/ZipCoder +instanceKlass java/util/Deque +instanceKlass java/util/Queue +instanceKlass java/nio/charset/StandardCharsets +instanceKlass java/util/jar/JavaUtilJarAccessImpl +instanceKlass sun/misc/JavaUtilJarAccess +instanceKlass sun/misc/FileURLMapper +instanceKlass sun/misc/URLClassPath$JarLoader$1 +instanceKlass sun/nio/cs/ThreadLocalCoders$Cache +instanceKlass sun/nio/cs/ThreadLocalCoders +instanceKlass java/util/zip/ZipFile$1 +instanceKlass sun/misc/JavaUtilZipFileAccess +instanceKlass java/util/zip/ZipFile +instanceKlass java/util/zip/ZipConstants +instanceKlass sun/misc/URLClassPath$Loader +instanceKlass sun/misc/URLClassPath$3 +instanceKlass sun/net/util/URLUtil +instanceKlass java/net/URLClassLoader$1 +instanceKlass java/io/FileOutputStream$1 +instanceKlass java/lang/StringCoding$StringEncoder +instanceKlass java/lang/ThreadLocal$ThreadLocalMap +instanceKlass java/lang/StringCoding +instanceKlass sun/usagetracker/UsageTrackerClient$3 +instanceKlass jdk/internal/util/EnvUtils +instanceKlass sun/usagetracker/UsageTrackerClient$2 +instanceKlass sun/usagetracker/UsageTrackerClient$4 +instanceKlass sun/usagetracker/UsageTrackerClient$1 +instanceKlass java/util/concurrent/atomic/AtomicBoolean +instanceKlass sun/usagetracker/UsageTrackerClient +instanceKlass sun/misc/PostVMInitHook +instanceKlass java/lang/invoke/MethodHandleStatics$1 +instanceKlass java/lang/invoke/MethodHandleStatics +instanceKlass java/lang/invoke/MemberName$Factory +instanceKlass java/lang/ClassValue$Version +instanceKlass java/lang/ClassValue$Identity +instanceKlass java/lang/ClassValue +instanceKlass java/lang/invoke/MethodHandleImpl$3 +instanceKlass java/lang/invoke/MethodHandleImpl$2 +instanceKlass java/util/function/Function +instanceKlass java/lang/invoke/MethodHandleImpl$1 +instanceKlass java/lang/Integer$IntegerCache +instanceKlass java/lang/invoke/MethodHandleImpl +instanceKlass java/lang/SystemClassLoaderAction +instanceKlass java/util/LinkedHashMap$LinkedHashIterator +instanceKlass sun/misc/Launcher$AppClassLoader$1 +instanceKlass sun/misc/URLClassPath +instanceKlass java/security/Principal +instanceKlass java/security/ProtectionDomain$Key +instanceKlass java/security/ProtectionDomain$2 +instanceKlass sun/misc/JavaSecurityProtectionDomainAccess +instanceKlass java/security/ProtectionDomain$JavaSecurityAccessImpl +instanceKlass sun/misc/JavaSecurityAccess +instanceKlass java/net/URLStreamHandler +instanceKlass java/net/Parts +instanceKlass java/util/BitSet +instanceKlass sun/net/www/ParseUtil +instanceKlass java/io/FileInputStream$1 +instanceKlass sun/util/locale/LocaleUtils +instanceKlass java/util/Locale$LocaleKey +instanceKlass sun/util/locale/BaseLocale$Key +instanceKlass sun/util/locale/BaseLocale +instanceKlass java/util/concurrent/ConcurrentHashMap$CollectionView +instanceKlass java/util/concurrent/ConcurrentHashMap$CounterCell +instanceKlass java/util/concurrent/ConcurrentHashMap$Node +instanceKlass java/util/concurrent/locks/ReentrantLock +instanceKlass java/util/concurrent/locks/Lock +instanceKlass java/util/concurrent/ConcurrentMap +instanceKlass sun/util/locale/LocaleObjectCache +instanceKlass java/util/Locale +instanceKlass java/lang/reflect/Array +instanceKlass java/nio/charset/CoderResult$Cache +instanceKlass java/nio/charset/CoderResult +instanceKlass java/nio/charset/CharsetDecoder +instanceKlass sun/nio/cs/ArrayDecoder +instanceKlass java/io/Reader +instanceKlass java/lang/Readable +instanceKlass sun/misc/MetaIndex +instanceKlass sun/misc/Launcher$ExtClassLoader$1 +instanceKlass java/util/StringTokenizer +instanceKlass java/net/URLClassLoader$7 +instanceKlass sun/misc/JavaNetAccess +instanceKlass java/lang/ClassLoader$ParallelLoaders +instanceKlass sun/security/util/Debug +instanceKlass sun/misc/Launcher$Factory +instanceKlass java/net/URLStreamHandlerFactory +instanceKlass java/lang/Compiler$1 +instanceKlass java/lang/Compiler +instanceKlass java/lang/System$2 +instanceKlass sun/misc/JavaLangAccess +instanceKlass sun/io/Win32ErrorMode +instanceKlass sun/misc/OSEnvironment +instanceKlass sun/misc/NativeSignalHandler +instanceKlass sun/misc/Signal +instanceKlass java/lang/Terminator$1 +instanceKlass sun/misc/SignalHandler +instanceKlass java/lang/Terminator +instanceKlass java/lang/ClassLoader$NativeLibrary +instanceKlass java/io/ExpiringCache$Entry +instanceKlass java/lang/ClassLoader$3 +instanceKlass java/nio/file/Path +instanceKlass java/nio/file/Watchable +instanceKlass java/lang/Enum +instanceKlass java/io/ExpiringCache +instanceKlass java/io/FileSystem +instanceKlass java/io/DefaultFileSystem +instanceKlass java/lang/Runtime +instanceKlass java/nio/Bits$1 +instanceKlass sun/misc/JavaNioAccess +instanceKlass java/nio/ByteOrder +instanceKlass java/nio/Bits +instanceKlass java/nio/charset/CodingErrorAction +instanceKlass java/nio/charset/CharsetEncoder +instanceKlass sun/nio/cs/ArrayEncoder +instanceKlass sun/reflect/ReflectionFactory$1 +instanceKlass java/lang/Class$1 +instanceKlass sun/nio/cs/SingleByte +instanceKlass sun/nio/cs/HistoricallyNamedCharset +instanceKlass sun/security/action/GetPropertyAction +instanceKlass java/lang/ThreadLocal +instanceKlass java/nio/charset/spi/CharsetProvider +instanceKlass java/nio/charset/Charset +instanceKlass java/io/Writer +instanceKlass java/util/Arrays +instanceKlass sun/reflect/misc/ReflectUtil +instanceKlass java/lang/reflect/ReflectAccess +instanceKlass sun/reflect/LangReflectAccess +instanceKlass java/lang/reflect/Modifier +instanceKlass sun/reflect/annotation/AnnotationType +instanceKlass java/lang/Class$AnnotationData +instanceKlass sun/reflect/generics/repository/AbstractRepository +instanceKlass java/lang/Class$Atomic +instanceKlass java/lang/Class$ReflectionData +instanceKlass java/lang/Class$3 +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 +instanceKlass java/security/PrivilegedExceptionAction +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater +instanceKlass java/io/OutputStream +instanceKlass java/io/Flushable +instanceKlass java/io/FileDescriptor$1 +instanceKlass sun/misc/JavaIOFileDescriptorAccess +instanceKlass java/io/FileDescriptor +instanceKlass sun/misc/Version +instanceKlass java/lang/CharacterData +instanceKlass java/util/Hashtable$Enumerator +instanceKlass java/util/Iterator +instanceKlass java/util/Enumeration +instanceKlass java/util/Objects +instanceKlass java/util/Collections$SynchronizedCollection +instanceKlass java/lang/Math +instanceKlass java/util/Hashtable$Entry +instanceKlass sun/misc/VM +instanceKlass java/util/HashMap$Node +instanceKlass java/util/Map$Entry +instanceKlass sun/reflect/Reflection +instanceKlass sun/misc/SharedSecrets +instanceKlass java/lang/ref/Reference$1 +instanceKlass sun/misc/JavaLangRefAccess +instanceKlass java/lang/ref/ReferenceQueue$Lock +instanceKlass java/lang/ref/ReferenceQueue +instanceKlass java/util/Collections$UnmodifiableCollection +instanceKlass java/util/AbstractMap +instanceKlass java/util/Set +instanceKlass java/util/Collections +instanceKlass java/lang/ref/Reference$Lock +instanceKlass sun/reflect/ReflectionFactory +instanceKlass java/util/AbstractCollection +instanceKlass java/util/RandomAccess +instanceKlass java/util/List +instanceKlass java/util/Collection +instanceKlass java/lang/Iterable +instanceKlass java/security/cert/Certificate +instanceKlass sun/reflect/ReflectionFactory$GetReflectionFactoryAction +instanceKlass java/security/PrivilegedAction +instanceKlass java/security/AccessController +instanceKlass java/security/Permission +instanceKlass java/security/Guard +instanceKlass java/lang/String$CaseInsensitiveComparator +instanceKlass java/util/Comparator +instanceKlass java/io/ObjectStreamField +instanceKlass java/lang/Number +instanceKlass java/lang/Character +instanceKlass java/lang/Boolean +instanceKlass java/nio/Buffer +instanceKlass java/lang/StackTraceElement +instanceKlass java/security/CodeSource +instanceKlass sun/misc/Launcher +instanceKlass java/util/jar/Manifest +instanceKlass java/net/URL +instanceKlass java/io/File +instanceKlass java/io/InputStream +instanceKlass java/io/Closeable +instanceKlass java/lang/AutoCloseable +instanceKlass sun/misc/Unsafe +instanceKlass java/lang/AbstractStringBuilder +instanceKlass java/lang/Appendable +instanceKlass java/lang/invoke/CallSite +instanceKlass java/lang/invoke/MethodType +instanceKlass java/lang/invoke/LambdaForm +instanceKlass java/lang/invoke/MethodHandleNatives +instanceKlass java/lang/invoke/MemberName +instanceKlass java/lang/invoke/MethodHandle +instanceKlass sun/reflect/CallerSensitive +instanceKlass java/lang/annotation/Annotation +instanceKlass sun/reflect/FieldAccessor +instanceKlass sun/reflect/ConstantPool +instanceKlass sun/reflect/ConstructorAccessor +instanceKlass sun/reflect/MethodAccessor +instanceKlass sun/reflect/MagicAccessorImpl +instanceKlass java/lang/reflect/Parameter +instanceKlass java/lang/reflect/Member +instanceKlass java/lang/reflect/AccessibleObject +instanceKlass java/util/Dictionary +instanceKlass java/util/Map +instanceKlass java/lang/ThreadGroup +instanceKlass java/lang/Thread$UncaughtExceptionHandler +instanceKlass java/lang/Thread +instanceKlass java/lang/Runnable +instanceKlass java/lang/ref/Reference +instanceKlass java/security/AccessControlContext +instanceKlass java/security/ProtectionDomain +instanceKlass java/lang/SecurityManager +instanceKlass java/lang/Throwable +instanceKlass java/lang/System +instanceKlass java/lang/ClassLoader +instanceKlass java/lang/Cloneable +instanceKlass java/lang/Class +instanceKlass java/lang/reflect/Type +instanceKlass java/lang/reflect/GenericDeclaration +instanceKlass java/lang/reflect/AnnotatedElement +instanceKlass java/lang/String +instanceKlass java/lang/CharSequence +instanceKlass java/lang/Comparable +instanceKlass java/io/Serializable +ciInstanceKlass java/lang/Object 1 1 75 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 7 7 7 7 1 1 1 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/io/Serializable 1 1 5 1 1 100 100 +ciInstanceKlass java/lang/String 1 1 537 3 3 3 3 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 100 100 7 100 7 7 100 7 7 100 7 7 100 7 100 7 100 100 7 7 7 7 100 7 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 +staticfield java/lang/String serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/String CASE_INSENSITIVE_ORDER Ljava/util/Comparator; java/lang/String$CaseInsensitiveComparator +ciInstanceKlass java/lang/Class 1 1 1187 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 8 8 8 8 8 7 7 7 100 100 100 7 7 100 7 100 7 7 7 7 100 7 7 100 7 100 100 100 7 100 100 100 100 100 100 7 7 7 7 100 100 100 7 7 7 100 100 7 7 100 100 7 7 100 100 100 7 7 100 100 7 7 7 7 7 7 7 7 7 100 7 7 100 7 7 100 100 7 7 7 7 100 100 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 +staticfield java/lang/Class serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/Cloneable 1 1 5 1 1 100 100 +instanceKlass com/google/inject/internal/BytecodeGen$BridgeClassLoader +instanceKlass com/mathworks/util/jarloader/SimpleClassLoader +instanceKlass com/mathworks/jmi/CustomClassLoader +instanceKlass java/util/ResourceBundle$RBClassLoader +instanceKlass sun/reflect/DelegatingClassLoader +instanceKlass java/security/SecureClassLoader +ciInstanceKlass java/lang/ClassLoader 1 1 839 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 7 7 100 100 100 7 7 100 7 7 7 7 7 7 100 7 100 100 7 7 100 100 7 7 7 7 100 7 100 100 7 100 100 7 7 100 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 1 +staticfield java/lang/ClassLoader nocerts [Ljava/security/cert/Certificate; 0 [Ljava/security/cert/Certificate; +ciInstanceKlass java/lang/System 1 1 366 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 100 7 100 100 100 100 100 100 7 7 100 100 7 100 100 7 7 7 7 100 100 100 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/lang/System in Ljava/io/InputStream; java/io/BufferedInputStream +staticfield java/lang/System out Ljava/io/PrintStream; java/io/PrintStream +staticfield java/lang/System err Ljava/io/PrintStream; java/io/PrintStream +instanceKlass java/lang/Exception +instanceKlass java/lang/Error +ciInstanceKlass java/lang/Throwable 1 1 324 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 100 100 100 100 100 7 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Throwable UNASSIGNED_STACK [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Throwable SUPPRESSED_SENTINEL Ljava/util/List; java/util/Collections$UnmodifiableRandomAccessList +staticfield java/lang/Throwable EMPTY_THROWABLE_ARRAY [Ljava/lang/Throwable; 0 [Ljava/lang/Throwable; +staticfield java/lang/Throwable $assertionsDisabled Z 1 +instanceKlass com/google/common/util/concurrent/ExecutionError +instanceKlass org/apache/xerces/impl/dv/ObjectFactory$ConfigurationError +instanceKlass org/apache/xerces/parsers/ObjectFactory$ConfigurationError +instanceKlass java/awt/AWTError +instanceKlass java/lang/AssertionError +instanceKlass java/lang/VirtualMachineError +instanceKlass java/lang/LinkageError +instanceKlass java/lang/ThreadDeath +ciInstanceKlass java/lang/Error 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +ciInstanceKlass java/lang/ThreadDeath 0 0 15 1 1 1 1 1 1 1 1 5 0 100 100 12 10 +instanceKlass javax/xml/stream/XMLStreamException +instanceKlass com/mathworks/install/XMLParseException +instanceKlass com/mathworks/install/InvalidInstallationFolderException +instanceKlass org/jdom/JDOMException +instanceKlass com/mathworks/install/exception/InstallerRequirementNotSatisfiedException +instanceKlass sun/nio/fs/WindowsException +instanceKlass com/google/inject/internal/ErrorsException +instanceKlass org/dom4j/DocumentException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceBadConfigurationException +instanceKlass javax/xml/bind/JAXBException +instanceKlass com/mathworks/supportsoftwareinstaller/api/SsiException +instanceKlass com/mathworks/cmlink/util/system/SystemCommandException +instanceKlass com/mathworks/addons_common/exceptions/MultipleVersionsFoundException +instanceKlass com/mathworks/addons_common/exceptions/IdentifierNotFoundException +instanceKlass com/mathworks/addons_common/exceptions/AddOnNotFoundException +instanceKlass org/tmatesoft/svn/core/SVNException +instanceKlass com/mathworks/jmi/AWTUtilities$ConversionException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutRangeException +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils$MFileTypeUnsupportedException +instanceKlass java/awt/AWTException +instanceKlass org/openide/util/RequestProcessor$Item +instanceKlass org/netbeans/editor/InvalidMarkException +instanceKlass com/mathworks/widgets/desk/DTUnableToOpenException +instanceKlass com/mathworks/cmlink/api/ConfigurationManagementException +instanceKlass com/mathworks/widgets/ToolTipSourceParentIsNullException +instanceKlass javax/swing/tree/ExpandVetoException +instanceKlass com/mathworks/mlwidgets/help/WebDocUnavailableException +instanceKlass com/mathworks/instutil/JNIException +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentCreationException +instanceKlass com/mathworks/html/BrowserCreationException +instanceKlass java/util/concurrent/ExecutionException +instanceKlass com/mathworks/toolbox/distcomp/mjs/MJSException +instanceKlass com/mathworks/services/lmgr/JNIException +instanceKlass org/apache/xerces/impl/dv/DatatypeException +instanceKlass org/xml/sax/SAXException +instanceKlass com/mathworks/mwswing/binding/ReadWriteException +instanceKlass java/beans/PropertyVetoException +instanceKlass com/mathworks/hg/peer/LightWeightManager$InvalidConfigurationException +instanceKlass java/util/TooManyListenersException +instanceKlass java/awt/datatransfer/UnsupportedFlavorException +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/InvalidLocationException +instanceKlass java/text/ParseException +instanceKlass java/net/URISyntaxException +instanceKlass java/lang/CloneNotSupportedException +instanceKlass com/mathworks/jmi/MatlabException +instanceKlass java/util/concurrent/BrokenBarrierException +instanceKlass java/util/zip/DataFormatException +instanceKlass javax/xml/transform/TransformerException +instanceKlass javax/xml/parsers/ParserConfigurationException +instanceKlass java/awt/FontFormatException +instanceKlass javax/swing/UnsupportedLookAndFeelException +instanceKlass java/util/concurrent/TimeoutException +instanceKlass java/security/GeneralSecurityException +instanceKlass javax/swing/text/BadLocationException +instanceKlass com/mathworks/services/settings/SettingException +instanceKlass java/beans/IntrospectionException +instanceKlass com/mathworks/util/MatlabThreadException +instanceKlass java/security/PrivilegedActionException +instanceKlass java/io/IOException +instanceKlass java/lang/InterruptedException +instanceKlass java/lang/ReflectiveOperationException +instanceKlass java/lang/RuntimeException +ciInstanceKlass java/lang/Exception 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceHandlerInternalException +instanceKlass com/mathworks/instutil/NoParentException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelException +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader$EarlyExitException +instanceKlass com/google/inject/internal/cglib/core/$CodeGenerationException +instanceKlass com/teamdev/jxbrowser/chromium/BrowserException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractorException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ServerException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPCException +instanceKlass com/teamdev/jxbrowser/chromium/internal/EnvironmentException +instanceKlass com/google/common/cache/CacheLoader$InvalidCacheLoadException +instanceKlass com/google/common/util/concurrent/UncheckedExecutionException +instanceKlass com/google/inject/CreationException +instanceKlass com/google/inject/ConfigurationException +instanceKlass com/google/inject/ProvisionException +instanceKlass org/eclipse/jgit/errors/UnsupportedCredentialItem +instanceKlass org/apache/commons/lang/exception/NestableRuntimeException +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration$FormatException +instanceKlass org/openide/util/Utilities$UnorderableException +instanceKlass javax/swing/undo/CannotRedoException +instanceKlass javax/swing/undo/CannotUndoException +instanceKlass com/jidesoft/grid/EditingNotStoppedException +instanceKlass com/mathworks/mladdonpackaging/AddonPackageException +instanceKlass com/mathworks/comparisons/main/NoSuitableComparisonTypeException +instanceKlass com/jgoodies/forms/layout/FormSpecParser$FormLayoutParseException +instanceKlass java/util/ConcurrentModificationException +instanceKlass org/w3c/dom/events/EventException +instanceKlass org/w3c/dom/DOMException +instanceKlass com/mathworks/desktop/attr/AttributeParseException +instanceKlass org/apache/xerces/impl/dv/DVFactoryException +instanceKlass org/apache/xerces/xni/XNIException +instanceKlass com/mathworks/mvm/eventmgr/InvalidEventTypeException +instanceKlass java/util/NoSuchElementException +instanceKlass com/google/gson/JsonParseException +instanceKlass com/mathworks/util/ShutdownRuntimeException +instanceKlass java/lang/invoke/WrongMethodTypeException +instanceKlass java/util/MissingResourceException +instanceKlass java/util/concurrent/RejectedExecutionException +instanceKlass com/mathworks/mvm/MvmTerminatedException +instanceKlass com/mathworks/services/settings/SettingLevelRuntimeException +instanceKlass com/mathworks/services/settings/SettingNameRuntimeException +instanceKlass java/lang/UnsupportedOperationException +instanceKlass com/mathworks/services/settings/SettingUnsupportedTypeRuntimeException +instanceKlass java/lang/IllegalStateException +instanceKlass java/lang/reflect/UndeclaredThrowableException +instanceKlass java/lang/IndexOutOfBoundsException +instanceKlass java/lang/SecurityException +instanceKlass com/mathworks/util/AggregateException +instanceKlass java/lang/IllegalArgumentException +instanceKlass java/lang/ArithmeticException +instanceKlass java/lang/NullPointerException +instanceKlass java/lang/IllegalMonitorStateException +instanceKlass java/lang/ArrayStoreException +instanceKlass java/lang/ClassCastException +ciInstanceKlass java/lang/RuntimeException 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 1 12 12 12 12 12 10 10 10 10 10 +ciInstanceKlass java/lang/SecurityManager 0 0 372 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/security/ProtectionDomain 1 1 275 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 100 100 100 7 7 100 7 7 100 7 7 7 100 100 100 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 +staticfield java/security/ProtectionDomain debug Lsun/security/util/Debug; null +ciInstanceKlass java/security/AccessControlContext 1 1 302 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 +instanceKlass sun/reflect/misc/MethodUtil +instanceKlass java/net/URLClassLoader +ciInstanceKlass java/security/SecureClassLoader 1 1 127 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/security/SecureClassLoader debug Lsun/security/util/Debug; null +instanceKlass java/lang/InstantiationException +instanceKlass java/lang/NoSuchMethodException +instanceKlass java/lang/IllegalAccessException +instanceKlass java/lang/NoSuchFieldException +instanceKlass java/lang/reflect/InvocationTargetException +instanceKlass java/lang/ClassNotFoundException +ciInstanceKlass java/lang/ReflectiveOperationException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/ClassNotFoundException 1 1 29 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 1 1 1 12 12 12 9 10 10 +instanceKlass java/lang/ClassFormatError +instanceKlass java/lang/UnsatisfiedLinkError +instanceKlass java/lang/ExceptionInInitializerError +instanceKlass java/lang/IncompatibleClassChangeError +instanceKlass java/lang/BootstrapMethodError +instanceKlass java/lang/NoClassDefFoundError +ciInstanceKlass java/lang/LinkageError 1 1 21 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 10 10 10 +ciInstanceKlass java/lang/NoClassDefFoundError 0 0 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ClassCastException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ArrayStoreException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/InternalError +instanceKlass java/lang/StackOverflowError +instanceKlass java/lang/OutOfMemoryError +ciInstanceKlass java/lang/VirtualMachineError 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/OutOfMemoryError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/StackOverflowError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/IllegalMonitorStateException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/ref/PhantomReference +instanceKlass java/lang/ref/FinalReference +instanceKlass java/lang/ref/WeakReference +instanceKlass java/lang/ref/SoftReference +ciInstanceKlass java/lang/ref/Reference 1 1 131 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 7 100 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +instanceKlass com/google/common/cache/LocalCache$SoftValueReference +instanceKlass org/openide/util/TimedSoftReference +instanceKlass sun/security/util/MemoryCache$SoftCacheEntry +instanceKlass sun/font/FontDesignMetrics$KeyReference +instanceKlass sun/font/StrikeCache$SoftDisposerRef +instanceKlass sun/util/locale/provider/LocaleResources$ResourceReference +instanceKlass com/google/common/collect/MapMakerInternalMap$SoftValueReference +instanceKlass sun/misc/SoftCache$ValueCell +instanceKlass java/lang/invoke/LambdaFormEditor$Transform +instanceKlass java/util/ResourceBundle$BundleReference +instanceKlass sun/util/locale/LocaleObjectCache$CacheEntry +ciInstanceKlass java/lang/ref/SoftReference 1 1 32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +instanceKlass java/io/ObjectStreamClass$FieldReflectorKey +instanceKlass java/io/ObjectStreamClass$WeakClassKey +instanceKlass com/google/common/cache/LocalCache$WeakEntry +instanceKlass com/google/common/cache/LocalCache$WeakValueReference +instanceKlass com/sun/jna/CallbackReference +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference$1 +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty$WeakPCL +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge$WeakLink +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler$DocReference +instanceKlass javax/swing/text/GapContent$MarkData +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$ProxyListener +instanceKlass javax/swing/ActionPropertyChangeListener$OwnedWeakReference +instanceKlass java/beans/WeakIdentityMap$Entry +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty$WeakPCL +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL +instanceKlass sun/awt/image/ImageWatched$AccWeakReference +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry +instanceKlass java/util/logging/LogManager$LoggerWeakRef +instanceKlass java/util/ResourceBundle$LoaderReference +instanceKlass java/lang/reflect/WeakCache$CacheValue +instanceKlass java/lang/reflect/Proxy$Key1 +instanceKlass java/lang/reflect/WeakCache$CacheKey +instanceKlass java/lang/ThreadLocal$ThreadLocalMap$Entry +instanceKlass java/lang/ClassValue$Entry +instanceKlass java/util/WeakHashMap$Entry +ciInstanceKlass java/lang/ref/WeakReference 1 1 17 1 1 1 1 1 1 7 100 1 1 1 1 12 12 10 10 +instanceKlass java/lang/ref/Finalizer +ciInstanceKlass java/lang/ref/FinalReference 1 1 13 1 1 1 1 1 100 7 1 1 1 12 10 +instanceKlass sun/misc/Cleaner +ciInstanceKlass java/lang/ref/PhantomReference 1 1 16 1 1 1 1 1 1 1 1 100 7 1 1 1 12 10 +ciInstanceKlass sun/misc/Cleaner 1 1 71 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 11 +staticfield sun/misc/Cleaner dummyQueue Ljava/lang/ref/ReferenceQueue; java/lang/ref/ReferenceQueue +ciInstanceKlass java/lang/ref/Finalizer 1 1 145 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 100 7 7 100 100 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/ref/Finalizer lock Ljava/lang/Object; java/lang/Object +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager$1 +instanceKlass com/jidesoft/utils/PortingUtils$1 +instanceKlass java/awt/EventDispatchThread +instanceKlass sun/awt/image/ImageFetcher +instanceKlass java/util/logging/LogManager$Cleaner +instanceKlass java/util/TimerThread +instanceKlass java/lang/ref/Finalizer$FinalizerThread +instanceKlass java/lang/ref/Reference$ReferenceHandler +ciInstanceKlass java/lang/Thread 1 1 536 3 3 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 100 100 100 100 100 100 7 100 100 7 100 100 7 7 7 100 7 100 7 7 100 100 100 100 100 100 7 7 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Thread EMPTY_STACK_TRACE [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Thread SUBCLASS_IMPLEMENTATION_PERMISSION Ljava/lang/RuntimePermission; java/lang/RuntimePermission +ciInstanceKlass java/lang/ThreadGroup 1 1 265 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 7 100 100 7 7 100 100 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +instanceKlass java/util/Hashtable +ciInstanceKlass java/util/Dictionary 1 1 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 1 1 1 1 1 1 12 10 +instanceKlass org/netbeans/editor/BaseDocument$LazyPropertyMap +instanceKlass javax/swing/UIDefaults +instanceKlass java/util/Properties +ciInstanceKlass java/util/Hashtable 1 1 413 3 3 4 4 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 100 7 100 100 100 7 100 7 100 100 7 100 100 7 100 7 100 100 100 7 100 7 7 100 7 7 7 7 100 7 7 7 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 +instanceKlass java/security/Provider +instanceKlass com/mathworks/services/Prefs$PrefsProperties +ciInstanceKlass java/util/Properties 1 1 260 3 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 +staticfield java/util/Properties hexDigit [C 16 +instanceKlass java/lang/reflect/Executable +instanceKlass java/lang/reflect/Field +ciInstanceKlass java/lang/reflect/AccessibleObject 1 1 141 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/reflect/AccessibleObject ACCESS_PERMISSION Ljava/security/Permission; java/lang/reflect/ReflectPermission +staticfield java/lang/reflect/AccessibleObject reflectionFactory Lsun/reflect/ReflectionFactory; sun/reflect/ReflectionFactory +ciInstanceKlass java/lang/reflect/Field 1 1 359 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 7 100 7 7 100 7 100 7 7 7 7 7 7 7 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass java/lang/reflect/Parameter 0 0 207 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +instanceKlass java/lang/reflect/Constructor +instanceKlass java/lang/reflect/Method +ciInstanceKlass java/lang/reflect/Executable 1 1 375 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 100 100 100 100 7 7 7 7 100 100 100 7 100 7 100 7 7 7 7 7 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1 +ciInstanceKlass java/lang/reflect/Method 1 1 343 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass java/lang/reflect/Constructor 1 1 327 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 7 100 100 7 7 100 100 100 100 100 7 7 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +instanceKlass sun/reflect/FieldAccessorImpl +instanceKlass sun/reflect/ConstructorAccessorImpl +instanceKlass sun/reflect/MethodAccessorImpl +ciInstanceKlass sun/reflect/MagicAccessorImpl 1 1 10 1 1 1 1 1 7 100 12 10 +instanceKlass sun/reflect/GeneratedMethodAccessor40 +instanceKlass sun/reflect/GeneratedMethodAccessor39 +instanceKlass sun/reflect/GeneratedMethodAccessor38 +instanceKlass sun/reflect/GeneratedMethodAccessor37 +instanceKlass sun/reflect/GeneratedMethodAccessor36 +instanceKlass sun/reflect/GeneratedMethodAccessor35 +instanceKlass sun/reflect/GeneratedMethodAccessor34 +instanceKlass sun/reflect/GeneratedMethodAccessor33 +instanceKlass sun/reflect/GeneratedMethodAccessor32 +instanceKlass sun/reflect/GeneratedMethodAccessor31 +instanceKlass sun/reflect/GeneratedMethodAccessor30 +instanceKlass sun/reflect/GeneratedMethodAccessor29 +instanceKlass sun/reflect/GeneratedMethodAccessor28 +instanceKlass sun/reflect/GeneratedMethodAccessor27 +instanceKlass sun/reflect/GeneratedMethodAccessor26 +instanceKlass sun/reflect/GeneratedMethodAccessor25 +instanceKlass sun/reflect/GeneratedMethodAccessor24 +instanceKlass sun/reflect/GeneratedMethodAccessor23 +instanceKlass sun/reflect/GeneratedMethodAccessor22 +instanceKlass sun/reflect/GeneratedMethodAccessor21 +instanceKlass sun/reflect/GeneratedMethodAccessor20 +instanceKlass sun/reflect/GeneratedMethodAccessor19 +instanceKlass sun/reflect/GeneratedMethodAccessor18 +instanceKlass sun/reflect/GeneratedMethodAccessor17 +instanceKlass sun/reflect/GeneratedMethodAccessor16 +instanceKlass sun/reflect/GeneratedMethodAccessor15 +instanceKlass sun/reflect/GeneratedMethodAccessor14 +instanceKlass sun/reflect/GeneratedMethodAccessor13 +instanceKlass sun/reflect/GeneratedMethodAccessor12 +instanceKlass sun/reflect/GeneratedMethodAccessor11 +instanceKlass sun/reflect/GeneratedMethodAccessor10 +instanceKlass sun/reflect/GeneratedMethodAccessor9 +instanceKlass sun/reflect/GeneratedMethodAccessor8 +instanceKlass sun/reflect/GeneratedMethodAccessor7 +instanceKlass sun/reflect/GeneratedMethodAccessor6 +instanceKlass sun/reflect/GeneratedMethodAccessor5 +instanceKlass sun/reflect/GeneratedMethodAccessor4 +instanceKlass sun/reflect/GeneratedMethodAccessor3 +instanceKlass sun/reflect/GeneratedMethodAccessor2 +instanceKlass sun/reflect/GeneratedMethodAccessor1 +instanceKlass sun/reflect/DelegatingMethodAccessorImpl +instanceKlass sun/reflect/NativeMethodAccessorImpl +ciInstanceKlass sun/reflect/MethodAccessorImpl 1 1 19 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 12 10 +instanceKlass sun/reflect/GeneratedConstructorAccessor13 +instanceKlass sun/reflect/SerializationConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor12 +instanceKlass sun/reflect/GeneratedConstructorAccessor11 +instanceKlass sun/reflect/GeneratedConstructorAccessor10 +instanceKlass sun/reflect/GeneratedConstructorAccessor9 +instanceKlass sun/reflect/GeneratedConstructorAccessor8 +instanceKlass sun/reflect/GeneratedConstructorAccessor7 +instanceKlass sun/reflect/GeneratedConstructorAccessor6 +instanceKlass sun/reflect/GeneratedConstructorAccessor5 +instanceKlass sun/reflect/GeneratedConstructorAccessor4 +instanceKlass sun/reflect/GeneratedConstructorAccessor3 +instanceKlass sun/reflect/GeneratedConstructorAccessor2 +instanceKlass sun/reflect/BootstrapConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor1 +instanceKlass sun/reflect/DelegatingConstructorAccessorImpl +instanceKlass sun/reflect/NativeConstructorAccessorImpl +ciInstanceKlass sun/reflect/ConstructorAccessorImpl 1 1 21 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 12 10 +ciInstanceKlass sun/reflect/DelegatingClassLoader 1 1 10 1 1 1 1 7 100 1 12 10 +ciInstanceKlass sun/reflect/ConstantPool 1 1 103 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/reflect/UnsafeFieldAccessorImpl +ciInstanceKlass sun/reflect/FieldAccessorImpl 1 1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 10 +instanceKlass sun/reflect/UnsafeLongFieldAccessorImpl +instanceKlass sun/reflect/UnsafeBooleanFieldAccessorImpl +instanceKlass sun/reflect/UnsafeDoubleFieldAccessorImpl +instanceKlass sun/reflect/UnsafeIntegerFieldAccessorImpl +instanceKlass sun/reflect/UnsafeObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeFieldAccessorImpl 1 1 226 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/reflect/UnsafeFieldAccessorImpl unsafe Lsun/misc/Unsafe; sun/misc/Unsafe +instanceKlass sun/reflect/UnsafeStaticObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl 1 1 35 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +ciInstanceKlass sun/reflect/CallerSensitive 0 0 15 1 1 1 1 1 1 1 100 100 100 1 1 1 1 +instanceKlass java/lang/invoke/DelegatingMethodHandle +instanceKlass java/lang/invoke/BoundMethodHandle +instanceKlass java/lang/invoke/DirectMethodHandle +ciInstanceKlass java/lang/invoke/MethodHandle 1 1 435 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 7 100 100 7 7 7 100 7 7 7 7 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/invoke/MethodHandle FORM_OFFSET J 20 +staticfield java/lang/invoke/MethodHandle $assertionsDisabled Z 1 +instanceKlass java/lang/invoke/DirectMethodHandle$Special +instanceKlass java/lang/invoke/DirectMethodHandle$Accessor +ciInstanceKlass java/lang/invoke/DirectMethodHandle 1 1 689 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 100 7 100 100 100 7 100 7 100 100 7 7 100 7 7 100 7 7 100 7 7 7 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 1 1 1 1 +staticfield java/lang/invoke/DirectMethodHandle IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/DirectMethodHandle ACCESSOR_FORMS [Ljava/lang/invoke/LambdaForm; 132 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/DirectMethodHandle $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MemberName 1 1 639 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 7 7 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 100 7 7 7 7 7 100 7 7 100 100 100 100 7 100 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 +staticfield java/lang/invoke/MemberName $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodHandleNatives 1 1 424 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +staticfield java/lang/invoke/MethodHandleNatives COUNT_GWT Z 1 +staticfield java/lang/invoke/MethodHandleNatives $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/LambdaForm 1 1 964 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 8 100 100 100 100 7 7 100 100 100 7 100 100 100 100 100 100 100 100 7 7 7 100 7 7 100 100 100 7 100 7 100 100 7 7 7 7 7 100 100 7 7 7 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1 1 +staticfield java/lang/invoke/LambdaForm COMPILE_THRESHOLD I 0 +staticfield java/lang/invoke/LambdaForm INTERNED_ARGUMENTS [[Ljava/lang/invoke/LambdaForm$Name; 5 [[Ljava/lang/invoke/LambdaForm$Name; +staticfield java/lang/invoke/LambdaForm IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/LambdaForm LF_identityForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm LF_zeroForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm NF_identity [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm NF_zero [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm DEBUG_NAME_COUNTERS Ljava/util/HashMap; null +staticfield java/lang/invoke/LambdaForm TRACE_INTERPRETER Z 0 +staticfield java/lang/invoke/LambdaForm $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodType 1 1 588 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 7 100 100 100 7 100 100 7 100 7 100 100 100 100 100 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 +staticfield java/lang/invoke/MethodType internTable Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; java/lang/invoke/MethodType$ConcurrentWeakInternSet +staticfield java/lang/invoke/MethodType NO_PTYPES [Ljava/lang/Class; 0 [Ljava/lang/Class; +staticfield java/lang/invoke/MethodType objectOnlyTypes [Ljava/lang/invoke/MethodType; 20 [Ljava/lang/invoke/MethodType; +staticfield java/lang/invoke/MethodType serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/invoke/MethodType rtypeOffset J 12 +staticfield java/lang/invoke/MethodType ptypesOffset J 16 +staticfield java/lang/invoke/MethodType $assertionsDisabled Z 1 +ciInstanceKlass java/lang/BootstrapMethodError 0 0 35 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass java/lang/invoke/VolatileCallSite +instanceKlass java/lang/invoke/MutableCallSite +instanceKlass java/lang/invoke/ConstantCallSite +ciInstanceKlass java/lang/invoke/CallSite 1 1 308 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 100 100 100 7 100 7 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/invoke/CallSite GET_TARGET Ljava/lang/invoke/MethodHandle; java/lang/invoke/DirectMethodHandle +staticfield java/lang/invoke/CallSite THROW_UCS Ljava/lang/invoke/MethodHandle; java/lang/invoke/MethodHandleImpl$AsVarargsCollector +staticfield java/lang/invoke/CallSite TARGET_OFFSET J 12 +ciInstanceKlass java/lang/invoke/ConstantCallSite 1 1 39 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 1 1 12 12 12 12 12 12 9 9 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/MutableCallSite 0 0 54 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/VolatileCallSite 0 0 30 1 1 1 1 1 1 1 1 1 1 1 1 100 100 1 1 1 12 12 12 12 12 12 10 10 10 10 10 10 +instanceKlass java/lang/StringBuilder +instanceKlass java/lang/StringBuffer +ciInstanceKlass java/lang/AbstractStringBuilder 1 1 315 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 7 7 100 100 7 7 7 100 7 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/StringBuffer 1 1 368 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 7 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/StringBuffer serialPersistentFields [Ljava/io/ObjectStreamField; 3 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/StringBuilder 1 1 323 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass sun/misc/Unsafe 1 1 386 8 8 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 7 100 100 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/misc/Unsafe theUnsafe Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BYTE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_SHORT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_CHAR_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_INT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_LONG_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_FLOAT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_OBJECT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_BYTE_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_SHORT_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_CHAR_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_INT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_LONG_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_FLOAT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_OBJECT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ADDRESS_SIZE I 8 +instanceKlass com/sun/imageio/plugins/common/InputStreamAdapter +instanceKlass java/io/ObjectInputStream$PeekInputStream +instanceKlass java/io/ObjectInputStream$BlockDataInputStream +instanceKlass java/lang/ProcessBuilder$NullInputStream +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil$2 +instanceKlass org/tmatesoft/svn/core/internal/util/SVNLogInputStream +instanceKlass java/util/jar/JarVerifier$VerifierStream +instanceKlass org/apache/xerces/impl/XMLEntityManager$RewindableInputStream +instanceKlass java/io/SequenceInputStream +instanceKlass org/apache/commons/io/input/ClosedInputStream +instanceKlass sun/java2d/cmm/ProfileDeferralInfo +instanceKlass java/io/ObjectInputStream +instanceKlass java/util/zip/ZipFile$ZipFileInputStream +instanceKlass java/io/FilterInputStream +instanceKlass java/io/FileInputStream +instanceKlass java/io/ByteArrayInputStream +ciInstanceKlass java/io/InputStream 1 1 58 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 100 100 100 7 100 100 100 7 12 12 12 12 12 10 10 10 10 10 10 10 +instanceKlass sun/security/util/DerInputBuffer +ciInstanceKlass java/io/ByteArrayInputStream 1 1 59 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 7 100 7 1 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 +instanceKlass sun/awt/shell/ShellFolder +ciInstanceKlass java/io/File 1 1 575 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 7 7 7 7 7 100 7 7 7 100 100 100 100 100 7 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 +staticfield java/io/File fs Ljava/io/FileSystem; java/io/WinNTFileSystem +staticfield java/io/File separatorChar C 92 +staticfield java/io/File separator Ljava/lang/String; "\" +staticfield java/io/File pathSeparatorChar C 59 +staticfield java/io/File pathSeparator Ljava/lang/String; ";" +staticfield java/io/File PATH_OFFSET J 16 +staticfield java/io/File PREFIX_LENGTH_OFFSET J 12 +staticfield java/io/File UNSAFE Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield java/io/File $assertionsDisabled Z 1 +instanceKlass com/mathworks/jmi/ClassLoaderManager$StandaloneURLClassLoader +instanceKlass com/mathworks/jmi/CustomURLClassLoader +instanceKlass sun/misc/Launcher$ExtClassLoader +instanceKlass sun/misc/Launcher$AppClassLoader +ciInstanceKlass java/net/URLClassLoader 1 1 518 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 100 100 7 7 7 100 100 7 100 100 100 7 100 7 100 7 100 7 7 7 7 7 100 100 100 7 7 100 100 100 7 7 7 7 100 7 100 100 100 7 7 7 100 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 +ciInstanceKlass java/net/URL 1 1 547 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 7 100 7 7 100 100 100 100 100 7 7 100 7 7 100 100 100 100 7 100 100 7 100 7 7 7 100 100 7 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/net/URL serialPersistentFields [Ljava/io/ObjectStreamField; 7 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/util/jar/Manifest 1 1 227 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 7 7 100 7 7 100 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass sun/misc/Launcher 1 1 215 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 100 100 100 100 7 100 7 100 7 7 100 7 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 +ciInstanceKlass sun/misc/Launcher$AppClassLoader 1 1 198 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 7 100 7 100 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield sun/misc/Launcher$AppClassLoader $assertionsDisabled Z 1 +ciInstanceKlass sun/misc/Launcher$ExtClassLoader 1 1 222 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 7 7 100 100 7 7 100 100 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +ciInstanceKlass java/security/CodeSource 1 1 321 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 100 100 100 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +ciInstanceKlass java/lang/StackTraceElement 1 1 95 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/nio/DoubleBuffer +instanceKlass java/nio/FloatBuffer +instanceKlass java/nio/ShortBuffer +instanceKlass java/nio/IntBuffer +instanceKlass java/nio/LongBuffer +instanceKlass java/nio/CharBuffer +instanceKlass java/nio/ByteBuffer +ciInstanceKlass java/nio/Buffer 1 1 100 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 7 100 7 100 100 100 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/Boolean 1 1 107 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 7 100 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Boolean TRUE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean FALSE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Character 1 1 456 3 3 3 3 3 3 3 3 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 5 0 100 100 7 7 100 100 100 7 100 7 100 100 100 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 1 1 +staticfield java/lang/Character TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Character $assertionsDisabled Z 1 +instanceKlass com/google/gson/BufferedImageConverter$OptimizedImageElementNumber +instanceKlass com/sun/jna/IntegerType +instanceKlass java/math/BigDecimal +instanceKlass com/google/gson/internal/LazilyParsedNumber +instanceKlass java/math/BigInteger +instanceKlass com/mathworks/util/types/UnsignedNumber +instanceKlass java/util/concurrent/atomic/AtomicLong +instanceKlass java/util/concurrent/atomic/AtomicInteger +instanceKlass java/lang/Long +instanceKlass java/lang/Integer +instanceKlass java/lang/Short +instanceKlass java/lang/Byte +instanceKlass java/lang/Double +instanceKlass java/lang/Float +ciInstanceKlass java/lang/Number 1 1 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 12 12 10 10 +ciInstanceKlass java/lang/Float 1 1 166 3 3 3 4 4 4 4 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 4 4 5 0 7 100 100 7 100 7 7 100 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Float TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Double 1 1 220 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 100 7 100 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Double TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Byte 1 1 150 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 7 7 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Byte TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Short 1 1 156 3 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Short TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Integer 1 1 306 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 100 7 7 100 100 7 7 100 7 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Integer TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Integer digits [C 36 +staticfield java/lang/Integer DigitTens [C 100 +staticfield java/lang/Integer DigitOnes [C 100 +staticfield java/lang/Integer sizeTable [I 10 +ciInstanceKlass java/lang/Long 1 1 353 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 7 7 100 100 7 7 7 7 100 7 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Long TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/NullPointerException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass java/lang/ArithmeticException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/util/List 1 1 109 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 7 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 10 10 10 11 11 11 11 11 11 +instanceKlass com/google/common/collect/Maps$Values +instanceKlass com/google/common/collect/AbstractMultimap$Values +instanceKlass com/sun/jna/Structure$2$StructureSet +instanceKlass java/util/EnumMap$Values +instanceKlass com/google/common/collect/ImmutableCollection +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection +instanceKlass java/util/TreeMap$Values +instanceKlass java/util/LinkedHashMap$LinkedValues +instanceKlass java/util/IdentityHashMap$Values +instanceKlass java/util/AbstractQueue +instanceKlass java/util/HashMap$Values +instanceKlass java/util/ArrayDeque +instanceKlass java/util/AbstractSet +instanceKlass java/util/AbstractList +ciInstanceKlass java/util/AbstractCollection 1 1 140 3 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 100 100 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 +instanceKlass org/jdom/ContentList$FilterList +instanceKlass org/jdom/AttributeList +instanceKlass org/jdom/ContentList +instanceKlass org/netbeans/lib/editor/util/GapList +instanceKlass java/util/Collections$SingletonList +instanceKlass sun/security/jca/ProviderList$ServiceList +instanceKlass com/google/common/collect/Lists$Partition +instanceKlass com/google/common/collect/Lists$TransformingRandomAccessList +instanceKlass sun/security/jca/ProviderList$3 +instanceKlass sun/awt/util/IdentityArrayList +instanceKlass java/util/SubList +instanceKlass com/mathworks/services/settings/SettingPath +instanceKlass java/util/Arrays$ArrayList +instanceKlass java/util/ArrayList$SubList +instanceKlass java/util/AbstractSequentialList +instanceKlass java/util/Collections$EmptyList +instanceKlass java/util/ArrayList +instanceKlass java/util/Vector +ciInstanceKlass java/util/AbstractList 1 1 164 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 7 100 7 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 1 1 +instanceKlass com/mathworks/mwswing/SimpleNodeList +instanceKlass org/apache/log4j/ProvisionNode +instanceKlass java/util/Stack +ciInstanceKlass java/util/Vector 1 1 350 3 3 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 100 100 100 100 7 100 100 7 100 7 7 100 7 100 100 100 100 100 100 7 7 7 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1 1 1 +ciInstanceKlass java/util/Stack 1 1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 1 1 1 1 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 +ciInstanceKlass java/util/Collections 1 1 672 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 100 7 100 100 100 100 100 100 7 7 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 7 7 7 100 7 7 100 100 7 7 100 100 100 7 7 100 100 7 7 100 100 7 7 7 100 100 100 7 7 100 7 100 100 100 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/Collections EMPTY_SET Ljava/util/Set; java/util/Collections$EmptySet +staticfield java/util/Collections EMPTY_LIST Ljava/util/List; java/util/Collections$EmptyList +staticfield java/util/Collections EMPTY_MAP Ljava/util/Map; java/util/Collections$EmptyMap +ciInstanceKlass java/util/Collections$EmptyList 1 1 122 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 7 100 7 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/Math 1 1 278 3 3 3 3 3 3 4 4 4 4 4 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 100 100 7 7 7 7 100 7 7 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Math $assertionsDisabled Z 1 +ciInstanceKlass java/util/Arrays 1 1 797 3 8 8 8 8 8 8 8 8 100 100 100 100 100 100 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 100 100 100 7 7 100 100 100 7 7 100 100 7 100 100 100 7 100 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 7 7 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 16 18 18 18 18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/Arrays $assertionsDisabled Z 1 +instanceKlass com/google/gson/internal/Streams$AppendableWriter +instanceKlass com/google/gson/internal/bind/JsonTreeWriter$1 +instanceKlass java/io/FilterWriter +instanceKlass org/netbeans/editor/ext/FormatWriter +instanceKlass com/mathworks/mde/cmdwin/CmdWinWriter +instanceKlass java/io/PrintWriter +instanceKlass java/io/CharArrayWriter +instanceKlass org/apache/commons/io/output/StringBuilderWriter +instanceKlass com/mathworks/mvm/exec/MatlabRequest$1 +instanceKlass java/io/StringWriter +instanceKlass java/io/BufferedWriter +instanceKlass sun/nio/cs/StreamEncoder +instanceKlass java/io/OutputStreamWriter +ciInstanceKlass java/io/Writer 1 1 90 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 100 100 7 100 100 100 7 100 100 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 11 11 +instanceKlass org/jdom/IllegalNameException +instanceKlass org/jdom/IllegalDataException +instanceKlass org/jdom/IllegalAddException +instanceKlass java/util/regex/PatternSyntaxException +instanceKlass java/nio/file/InvalidPathException +instanceKlass java/lang/NumberFormatException +ciInstanceKlass java/lang/IllegalArgumentException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/io/StringWriter 1 1 93 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +instanceKlass java/lang/StringIndexOutOfBoundsException +instanceKlass java/lang/ArrayIndexOutOfBoundsException +ciInstanceKlass java/lang/IndexOutOfBoundsException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +instanceKlass java/awt/dnd/InvalidDnDOperationException +instanceKlass java/util/concurrent/CancellationException +instanceKlass java/awt/IllegalComponentStateException +instanceKlass sun/java2d/InvalidPipeException +ciInstanceKlass java/lang/IllegalStateException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/StringIndexOutOfBoundsException 0 0 35 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 10 +instanceKlass org/jdom/Comment +instanceKlass org/jdom/DocType +instanceKlass org/jdom/ProcessingInstruction +instanceKlass org/jdom/EntityRef +instanceKlass org/jdom/Element +instanceKlass org/jdom/Text +ciInstanceKlass org/jdom/Content 1 1 63 100 100 100 7 7 100 100 10 10 11 10 10 9 11 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +instanceKlass org/jdom/CDATA +ciInstanceKlass org/jdom/Text 1 1 111 8 8 8 8 8 8 100 100 7 100 7 7 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/CDATA 0 0 74 8 8 8 8 8 100 100 100 100 100 100 10 10 10 10 10 10 10 10 10 9 10 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/Element 1 1 491 8 3 8 8 8 8 8 8 8 100 100 100 100 100 100 100 7 100 7 7 7 100 7 100 100 7 7 100 100 7 100 100 100 100 7 100 100 7 7 7 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 10 10 11 10 10 11 10 10 9 10 10 9 10 10 10 10 10 10 10 10 10 10 9 10 10 10 11 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 10 11 9 9 11 10 9 10 10 11 10 10 11 10 10 10 10 10 10 10 10 11 10 10 10 10 10 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/EntityRef 0 0 91 8 8 8 8 8 8 8 100 100 100 100 100 100 10 10 10 10 10 10 10 10 10 9 9 10 10 10 9 10 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/ProcessingInstruction 0 0 231 8 8 8 8 8 8 8 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 10 10 10 10 10 10 10 11 10 10 10 10 10 11 10 10 11 11 10 10 11 11 10 10 9 11 10 10 11 9 11 10 10 10 10 10 10 9 10 10 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/Comment 1 1 67 8 8 8 8 100 7 7 100 7 100 10 10 10 10 10 10 10 10 9 10 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/ContentList 1 1 286 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 7 100 100 100 7 100 7 100 100 7 7 7 7 100 7 7 7 7 100 7 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 11 10 10 10 11 10 9 11 9 9 10 10 10 11 10 9 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/AttributeList 1 1 245 3 8 8 8 8 8 8 8 8 8 8 100 100 100 100 100 100 100 100 100 100 7 100 100 100 100 7 100 100 7 100 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 11 10 10 11 10 9 11 9 9 10 10 10 11 10 9 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/Namespace 1 1 139 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 100 100 7 100 7 100 10 10 10 10 10 10 9 9 10 10 10 10 10 10 10 10 9 9 10 10 10 9 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield org/jdom/Namespace NO_NAMESPACE Lorg/jdom/Namespace; org/jdom/Namespace +staticfield org/jdom/Namespace XML_NAMESPACE Lorg/jdom/Namespace; org/jdom/Namespace +ciInstanceKlass org/jdom/output/XMLOutputter 1 1 682 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 100 100 100 7 100 100 100 100 7 100 7 7 100 7 100 100 7 7 100 7 7 7 7 100 7 7 7 7 7 7 7 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 10 10 10 10 10 10 10 10 10 9 9 10 10 10 10 9 9 9 10 11 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 9 10 10 10 9 10 10 9 10 10 10 9 9 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 10 10 10 10 10 10 10 10 10 10 9 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield org/jdom/output/XMLOutputter preserveFormat Lorg/jdom/output/Format; org/jdom/output/Format +instanceKlass org/jdom/output/XMLOutputter$NamespaceStack +ciInstanceKlass org/jdom/output/NamespaceStack 1 1 110 8 8 8 8 7 100 100 100 7 7 100 7 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 10 9 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/output/XMLOutputter$NamespaceStack 1 1 26 7 100 7 10 9 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/output/Format 1 1 158 8 8 8 8 8 100 100 100 100 100 7 7 100 7 7 7 10 10 10 10 9 9 9 10 9 10 9 9 10 10 9 9 9 9 9 9 10 10 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/output/EscapeStrategy 1 0 16 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass org/jdom/output/Format$TextMode 1 1 46 8 8 8 8 7 100 7 10 10 9 9 9 9 9 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield org/jdom/output/Format$TextMode PRESERVE Lorg/jdom/output/Format$TextMode; org/jdom/output/Format$TextMode +staticfield org/jdom/output/Format$TextMode TRIM Lorg/jdom/output/Format$TextMode; org/jdom/output/Format$TextMode +staticfield org/jdom/output/Format$TextMode NORMALIZE Lorg/jdom/output/Format$TextMode; org/jdom/output/Format$TextMode +staticfield org/jdom/output/Format$TextMode TRIM_FULL_WHITE Lorg/jdom/output/Format$TextMode; org/jdom/output/Format$TextMode +ciInstanceKlass org/jdom/output/Format$DefaultEscapeStrategy 1 1 118 8 8 8 8 8 8 8 8 8 8 8 8 100 100 100 100 7 7 100 100 100 7 10 10 9 9 10 9 10 9 9 10 10 10 10 9 12 12 12 12 12 12 12 12 12 12 12 12 12 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +compile org/jdom/output/XMLOutputter printElement (Ljava/io/Writer;Lorg/jdom/Element;ILorg/jdom/output/XMLOutputter$NamespaceStack;)V -1 4 inline 262 0 -1 org/jdom/output/XMLOutputter printElement (Ljava/io/Writer;Lorg/jdom/Element;ILorg/jdom/output/XMLOutputter$NamespaceStack;)V 1 1 org/jdom/Element getAttributes ()Ljava/util/List; 1 7 org/jdom/Element getContent ()Ljava/util/List; 1 26 org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/String; 2 4 org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;Ljava/lang/String;)Ljava/lang/String; 3 6 org/jdom/AttributeList get (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/Object; 4 3 org/jdom/AttributeList indexOf (Ljava/lang/String;Lorg/jdom/Namespace;)I 5 1 org/jdom/Namespace getURI ()Ljava/lang/String; 1 78 java/io/StringWriter write (Ljava/lang/String;)V 2 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 3 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 4 10 java/lang/String length ()I 4 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 5 17 java/lang/AbstractStringBuilder newCapacity (I)I 5 20 java/util/Arrays copyOf ([CI)[C 4 35 java/lang/String getChars (II[CI)V 1 84 org/jdom/output/XMLOutputter printQualifiedName (Ljava/io/Writer;Lorg/jdom/Element;)V 2 1 org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 2 4 org/jdom/Namespace getPrefix ()Ljava/lang/String; 2 7 java/lang/String length ()I 2 15 org/jdom/Element getName ()Ljava/lang/String; 2 18 java/io/StringWriter write (Ljava/lang/String;)V 3 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 4 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 5 10 java/lang/String length ()I 5 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 6 17 java/lang/AbstractStringBuilder newCapacity (I)I 6 20 java/util/Arrays copyOf ([CI)[C 5 35 java/lang/String getChars (II[CI)V 1 89 org/jdom/output/NamespaceStack size ()I 2 4 java/util/Vector size ()I 1 99 org/jdom/output/XMLOutputter printElementNamespace (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 1 org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 2 26 org/jdom/output/NamespaceStack getURI (Ljava/lang/String;)Ljava/lang/String; 3 5 java/util/Vector lastIndexOf (Ljava/lang/Object;)I 4 8 java/util/Vector lastIndexOf (Ljava/lang/Object;I)I 1 107 org/jdom/output/XMLOutputter printAdditionalNamespaces (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 1 org/jdom/Element getAdditionalNamespaces ()Ljava/util/List; 2 46 java/util/Collections$EmptyList size ()I 1 122 org/jdom/output/XMLOutputter printAttributes (Ljava/io/Writer;Ljava/util/List;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 101 org/jdom/AttributeList size ()I 1 129 org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 2 9 org/jdom/ContentList size ()I 2 61 org/jdom/ContentList get (I)Ljava/lang/Object; 2 66 org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 3 28 org/jdom/Text getText ()Ljava/lang/String; 3 69 java/lang/String length ()I 3 53 java/lang/String charAt (I)C 3 56 org/jdom/output/XMLOutputter isWhitespace (C)Z 1 136 org/jdom/ContentList size ()I 1 184 java/io/StringWriter write (Ljava/lang/String;)V 2 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 3 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 4 10 java/lang/String length ()I 4 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 5 17 java/lang/AbstractStringBuilder newCapacity (I)I 5 20 java/util/Arrays copyOf ([CI)[C 4 35 java/lang/String getChars (II[CI)V 1 193 java/io/StringWriter write (Ljava/lang/String;)V 2 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 3 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 4 10 java/lang/String length ()I 4 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 5 17 java/lang/AbstractStringBuilder newCapacity (I)I 5 20 java/util/Arrays copyOf ([CI)[C 4 35 java/lang/String getChars (II[CI)V 1 200 org/jdom/output/XMLOutputter nextNonText (Ljava/util/List;I)I 2 9 org/jdom/ContentList size ()I 2 20 org/jdom/ContentList get (I)Ljava/lang/Object; 1 210 org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 2 18 java/io/StringWriter write (Ljava/lang/String;)V 3 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 4 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 5 10 java/lang/String length ()I 5 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 6 17 java/lang/AbstractStringBuilder newCapacity (I)I 6 20 java/util/Arrays copyOf ([CI)[C 5 35 java/lang/String getChars (II[CI)V 1 226 org/jdom/output/XMLOutputter printContentRange (Ljava/io/Writer;Ljava/util/List;IIILorg/jdom/output/XMLOutputter$NamespaceStack;)V 2 22 org/jdom/ContentList get (I)Ljava/lang/Object; 2 106 org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 3 18 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 7 17 java/lang/AbstractStringBuilder newCapacity (I)I 7 20 java/util/Arrays copyOf ([CI)[C 6 35 java/lang/String getChars (II[CI)V 2 156 org/jdom/output/XMLOutputter printElement (Ljava/io/Writer;Lorg/jdom/Element;ILorg/jdom/output/XMLOutputter$NamespaceStack;)V 3 1 org/jdom/Element getAttributes ()Ljava/util/List; 3 7 org/jdom/Element getContent ()Ljava/util/List; 3 26 org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/String; 4 4 org/jdom/Element getAttributeValue (Ljava/lang/String;Lorg/jdom/Namespace;Ljava/lang/String;)Ljava/lang/String; 5 6 org/jdom/AttributeList get (Ljava/lang/String;Lorg/jdom/Namespace;)Ljava/lang/Object; 6 3 org/jdom/AttributeList indexOf (Ljava/lang/String;Lorg/jdom/Namespace;)I 7 1 org/jdom/Namespace getURI ()Ljava/lang/String; 3 78 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 7 17 java/lang/AbstractStringBuilder newCapacity (I)I 7 20 java/util/Arrays copyOf ([CI)[C 6 35 java/lang/String getChars (II[CI)V 3 84 org/jdom/output/XMLOutputter printQualifiedName (Ljava/io/Writer;Lorg/jdom/Element;)V 4 1 org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 4 4 org/jdom/Namespace getPrefix ()Ljava/lang/String; 4 7 java/lang/String length ()I 4 15 org/jdom/Element getName ()Ljava/lang/String; 4 18 java/io/StringWriter write (Ljava/lang/String;)V 5 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 6 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 7 10 java/lang/String length ()I 7 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 8 17 java/lang/AbstractStringBuilder newCapacity (I)I 8 20 java/util/Arrays copyOf ([CI)[C 7 35 java/lang/String getChars (II[CI)V 3 89 org/jdom/output/NamespaceStack size ()I 4 4 java/util/Vector size ()I 3 99 org/jdom/output/XMLOutputter printElementNamespace (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 4 1 org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 4 26 org/jdom/output/NamespaceStack getURI (Ljava/lang/String;)Ljava/lang/String; 5 5 java/util/Vector lastIndexOf (Ljava/lang/Object;)I 6 8 java/util/Vector lastIndexOf (Ljava/lang/Object;I)I 3 107 org/jdom/output/XMLOutputter printAdditionalNamespaces (Ljava/io/Writer;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 4 1 org/jdom/Element getAdditionalNamespaces ()Ljava/util/List; 4 46 java/util/Collections$EmptyList size ()I 3 122 org/jdom/output/XMLOutputter printAttributes (Ljava/io/Writer;Ljava/util/List;Lorg/jdom/Element;Lorg/jdom/output/XMLOutputter$NamespaceStack;)V 4 101 org/jdom/AttributeList size ()I 3 129 org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 4 9 org/jdom/ContentList size ()I 4 61 org/jdom/ContentList get (I)Ljava/lang/Object; 4 66 org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 5 28 org/jdom/Text getText ()Ljava/lang/String; 5 69 java/lang/String length ()I 5 53 java/lang/String charAt (I)C 5 56 org/jdom/output/XMLOutputter isWhitespace (C)Z 3 136 org/jdom/ContentList size ()I 3 184 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 7 17 java/lang/AbstractStringBuilder newCapacity (I)I 7 20 java/util/Arrays copyOf ([CI)[C 6 35 java/lang/String getChars (II[CI)V 3 193 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 7 17 java/lang/AbstractStringBuilder newCapacity (I)I 7 20 java/util/Arrays copyOf ([CI)[C 6 35 java/lang/String getChars (II[CI)V 3 200 org/jdom/output/XMLOutputter nextNonText (Ljava/util/List;I)I 4 9 org/jdom/ContentList size ()I 4 20 org/jdom/ContentList get (I)Ljava/lang/Object; 3 210 org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 4 18 java/io/StringWriter write (Ljava/lang/String;)V 5 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 6 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 7 10 java/lang/String length ()I 7 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 8 17 java/lang/AbstractStringBuilder newCapacity (I)I 8 20 java/util/Arrays copyOf ([CI)[C 7 35 java/lang/String getChars (II[CI)V 3 226 org/jdom/output/XMLOutputter printContentRange (Ljava/io/Writer;Ljava/util/List;IIILorg/jdom/output/XMLOutputter$NamespaceStack;)V 4 22 org/jdom/ContentList get (I)Ljava/lang/Object; 4 106 org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 5 18 java/io/StringWriter write (Ljava/lang/String;)V 6 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 7 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 8 10 java/lang/String length ()I 8 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 9 17 java/lang/AbstractStringBuilder newCapacity (I)I 9 20 java/util/Arrays copyOf ([CI)[C 8 35 java/lang/String getChars (II[CI)V 4 49 org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 5 9 org/jdom/ContentList size ()I 5 61 org/jdom/ContentList get (I)Ljava/lang/Object; 5 66 org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 6 28 org/jdom/Text getText ()Ljava/lang/String; 6 69 java/lang/String length ()I 6 53 java/lang/String charAt (I)C 6 56 org/jdom/output/XMLOutputter isWhitespace (C)Z 4 57 org/jdom/output/XMLOutputter nextNonText (Ljava/util/List;I)I 5 9 org/jdom/ContentList size ()I 5 20 org/jdom/ContentList get (I)Ljava/lang/Object; 3 231 org/jdom/output/XMLOutputter newline (Ljava/io/Writer;)V 4 18 java/io/StringWriter write (Ljava/lang/String;)V 5 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 6 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 7 10 java/lang/String length ()I 7 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 8 17 java/lang/AbstractStringBuilder newCapacity (I)I 8 20 java/util/Arrays copyOf ([CI)[C 7 35 java/lang/String getChars (II[CI)V 3 251 org/jdom/output/XMLOutputter printTextRange (Ljava/io/Writer;Ljava/util/List;II)V 4 6 org/jdom/output/XMLOutputter skipLeadingWhite (Ljava/util/List;I)I 5 9 org/jdom/ContentList size ()I 5 61 org/jdom/ContentList get (I)Ljava/lang/Object; 5 66 org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 6 28 org/jdom/Text getText ()Ljava/lang/String; 6 69 java/lang/String length ()I 6 53 java/lang/String charAt (I)C 6 56 org/jdom/output/XMLOutputter isWhitespace (C)Z 4 11 org/jdom/ContentList size ()I 4 28 org/jdom/output/XMLOutputter skipTrailingWhite (Ljava/util/List;I)I 5 1 org/jdom/ContentList size ()I 5 65 org/jdom/ContentList get (I)Ljava/lang/Object; 5 70 org/jdom/output/XMLOutputter isAllWhitespace (Ljava/lang/Object;)Z 6 28 org/jdom/Text getText ()Ljava/lang/String; 6 69 java/lang/String length ()I 6 53 java/lang/String charAt (I)C 6 56 org/jdom/output/XMLOutputter isWhitespace (C)Z 4 42 org/jdom/ContentList get (I)Ljava/lang/Object; 4 62 org/jdom/Text getText ()Ljava/lang/String; 4 240 org/jdom/output/XMLOutputter printString (Ljava/io/Writer;Ljava/lang/String;)V 5 35 java/lang/String trim ()Ljava/lang/String; 6 69 java/lang/String substring (II)Ljava/lang/String; 7 75 java/lang/String ([CII)V 8 1 java/lang/Object ()V 8 75 java/util/Arrays copyOfRange ([CII)[C 5 42 org/jdom/output/XMLOutputter escapeElementEntities (Ljava/lang/String;)Ljava/lang/String; 6 240 java/lang/String length ()I 6 30 java/lang/String charAt (I)C 6 127 org/jdom/output/Format$DefaultEscapeStrategy shouldEscape (C)Z 5 45 java/io/StringWriter write (Ljava/lang/String;)V 6 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 7 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 8 10 java/lang/String length ()I 8 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 9 17 java/lang/AbstractStringBuilder newCapacity (I)I 9 20 java/util/Arrays copyOf ([CI)[C 8 35 java/lang/String getChars (II[CI)V 3 257 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 7 17 java/lang/AbstractStringBuilder newCapacity (I)I 7 20 java/util/Arrays copyOf ([CI)[C 6 35 java/lang/String getChars (II[CI)V 3 263 org/jdom/output/XMLOutputter printQualifiedName (Ljava/io/Writer;Lorg/jdom/Element;)V 4 1 org/jdom/Element getNamespace ()Lorg/jdom/Namespace; 4 4 org/jdom/Namespace getPrefix ()Ljava/lang/String; 4 7 java/lang/String length ()I 4 15 org/jdom/Element getName ()Ljava/lang/String; 4 18 java/io/StringWriter write (Ljava/lang/String;)V 5 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 6 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 7 10 java/lang/String length ()I 7 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V 8 17 java/lang/AbstractStringBuilder newCapacity (I)I 8 20 java/util/Arrays copyOf ([CI)[C 7 35 java/lang/String getChars (II[CI)V 3 269 java/io/StringWriter write (Ljava/lang/String;)V 4 5 java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 5 7 java/lang/AbstractStringBuilder append (Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; 6 10 java/lang/String length ()I 6 21 java/lang/AbstractStringBuilder ensureCapacityInternal (I)V diff --git a/downloaded/replay_pid6028.log b/downloaded/replay_pid6028.log new file mode 100644 index 0000000..5597fa9 --- /dev/null +++ b/downloaded/replay_pid6028.log @@ -0,0 +1,9134 @@ +JvmtiExport can_access_local_variables 0 +JvmtiExport can_hotswap_or_post_breakpoint 0 +JvmtiExport can_post_on_exceptions 0 +# 591 ciObject found +ciMethodData java/util/jar/JarVerifier processEntry (Lsun/security/util/ManifestEntryVerifier;)V 1 572 orig 264 136 98 31 106 0 0 0 0 16 200 119 104 0 0 0 0 40 13 0 0 208 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 225 0 0 0 217 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 97 0 2 0 0 0 216 11 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 379 0x40007 0xa 0xe8 0x151 0x80005 0x0 0xc4d9c2f0 0x151 0x0 0x0 0xd0007 0x25 0x80 0x12c 0x140007 0x0 0x60 0x12c 0x210005 0x0 0xc4d9c2f0 0x12c 0x0 0x0 0x2c0002 0x12c 0x320003 0x151 0xb08 0x3d0007 0xa 0x50 0x0 0x450005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0xc4d9c2f0 0xa 0x0 0x0 0x4c0005 0x0 0xf7b53e70 0x4 0xf7b53dc0 0x6 0x520005 0x0 0x6b8e66c0 0xa 0x0 0x0 0x590005 0x0 0x6b8e66c0 0xa 0x0 0x0 0x5c0007 0x5 0x2d8 0x5 0x620005 0x0 0x6b8e66c0 0x5 0x0 0x0 0x670005 0x0 0x6b8e66c0 0x5 0x0 0x0 0x6f0005 0x0 0x7f639640 0x5 0x0 0x0 0x7b0005 0x0 0x6b8e7a90 0x5 0x0 0x0 0x830005 0x0 0x7f1c1da0 0x5 0x0 0x0 0x8a0005 0x0 0xfefe2f50 0x5 0x0 0x0 0x8f0007 0x5 0x198 0x0 0x940005 0x0 0x0 0x0 0x0 0x0 0x990004 0x0 0x0 0x0 0x0 0x0 0xa10005 0x0 0x0 0x0 0x0 0x0 0xa40007 0x0 0xd0 0x0 0xaa0007 0x0 0x50 0x0 0xb20005 0x0 0x0 0x0 0x0 0x0 0xb90005 0x0 0x0 0x0 0x0 0x0 0xc60005 0x0 0x0 0x0 0x0 0x0 0xc90003 0x0 0xfffffffffffffe50 0xd20005 0x0 0x6b8e66c0 0x5 0x0 0x0 0xd50005 0x0 0x6b8e66c0 0x5 0x0 0x0 0xdd0007 0x0 0x30 0x5 0xe50002 0x5 0xef0007 0x0 0x68 0x5 0xfe0007 0x0 0x30 0x5 0x10a0002 0x5 0x1180003 0x5 0x18 0x1340005 0x0 0x7f639640 0x5 0x0 0x0 0x1370002 0x5 0x13e0005 0x0 0xc4d9c960 0x5 0x0 0x0 0x1410007 0x0 0x150 0x5 0x1490005 0x0 0x6b8e7a90 0x5 0x0 0x0 0x14c0004 0x0 0x6b900ce0 0x5 0x0 0x0 0x1530007 0x5 0xa0 0x0 0x1590007 0x0 0x50 0x0 0x1610005 0x0 0x0 0x0 0x0 0x0 0x16a0005 0x0 0x0 0x0 0x0 0x0 0x1730005 0x0 0xc4d9c960 0x5 0x0 0x0 0x1800005 0x0 0xc4d9c960 0x5 0x0 0x0 0x1830003 0x5 0x420 0x18a0007 0x0 0xf0 0x0 0x1940002 0x0 0x1990005 0x0 0x0 0x0 0x0 0x0 0x19d0005 0x0 0x0 0x0 0x0 0x0 0x1a00005 0x0 0x0 0x0 0x0 0x0 0x1a30005 0x0 0x0 0x0 0x0 0x0 0x1a60003 0x0 0x318 0x1ad0007 0x0 0xf0 0x0 0x1b70002 0x0 0x1bc0005 0x0 0x0 0x0 0x0 0x0 0x1c00005 0x0 0x0 0x0 0x0 0x0 0x1c30005 0x0 0x0 0x0 0x0 0x0 0x1c60005 0x0 0x0 0x0 0x0 0x0 0x1c90003 0x0 0x210 0x1d00007 0x0 0xf0 0x0 0x1da0002 0x0 0x1df0005 0x0 0x0 0x0 0x0 0x0 0x1e30005 0x0 0x0 0x0 0x0 0x0 0x1e60005 0x0 0x0 0x0 0x0 0x0 0x1e90005 0x0 0x0 0x0 0x0 0x0 0x1ec0003 0x0 0x108 0x1f30007 0x0 0xf0 0x0 0x1fd0002 0x0 0x2020005 0x0 0x0 0x0 0x0 0x0 0x2060005 0x0 0x0 0x0 0x0 0x0 0x2090005 0x0 0x0 0x0 0x0 0x0 0x20c0005 0x0 0x0 0x0 0x0 0x0 oops 21 6 sun/security/util/ManifestEntryVerifier 20 sun/security/util/ManifestEntryVerifier 41 sun/security/util/ManifestEntryVerifier 47 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 49 java/util/jar/JarFile$JarFileEntry 53 java/lang/String 59 java/lang/String 69 java/lang/String 75 java/lang/String 81 java/io/ByteArrayOutputStream 87 java/util/Hashtable 93 java/util/ArrayList 99 java/util/ArrayList$Itr 156 java/lang/String 162 java/lang/String 187 java/io/ByteArrayOutputStream 195 sun/security/util/SignatureFileVerifier 205 java/util/Hashtable 211 [B 237 sun/security/util/SignatureFileVerifier 243 sun/security/util/SignatureFileVerifier +ciMethodData java/util/jar/JarVerifier beginEntry (Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V 1 572 orig 264 136 98 31 106 0 0 0 0 144 195 119 104 0 0 0 0 136 8 0 0 208 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 225 9 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 43 0 2 0 0 0 48 7 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 230 0x10007 0x13c 0x20 0x0 0x80007 0x13c 0x120 0x0 0x120002 0x0 0x170005 0x0 0x0 0x0 0x0 0x0 0x1b0005 0x0 0x0 0x0 0x0 0x0 0x1e0005 0x0 0x0 0x0 0x0 0x0 0x210005 0x0 0x0 0x0 0x0 0x0 0x240005 0x0 0x0 0x0 0x0 0x0 0x280005 0x0 0xf7b53dc0 0x135 0xf7b53e70 0x7 0x300007 0x10e 0x2a0 0x2e 0x370005 0x0 0x6b8e66c0 0x2e 0x0 0x0 0x400005 0x0 0x6b8e66c0 0x2e 0x0 0x0 0x430007 0x2e 0x70 0x0 0x4a0005 0x0 0x0 0x0 0x0 0x0 0x4d0007 0x0 0x1d0 0x0 0x510005 0x0 0xf7b53dc0 0x28 0xf7b53e70 0x6 0x540007 0x2e 0x50 0x0 0x5a0005 0x0 0x0 0x0 0x0 0x0 0x620005 0x0 0x6b8e66c0 0x2e 0x0 0x0 0x650007 0x24 0x70 0xa 0x6c0005 0x0 0x6b8e66c0 0xa 0x0 0x0 0x6f0007 0xa 0x20 0x0 0x750002 0xa 0x780007 0x0 0x80 0xa 0x840005 0x0 0x7f639640 0xa 0x0 0x0 0x8a0005 0x0 0xc4d9c2f0 0xa 0x0 0x0 0x920007 0x10e 0x50 0x0 0x960005 0x0 0x0 0x0 0x0 0x0 0x9a0005 0x0 0xf7b53dc0 0x10d 0xf7b53e70 0x1 0x9d0007 0x10d 0x50 0x1 0xa30005 0x0 0xc4d9c2f0 0x1 0x0 0x0 0xaa0005 0x4 0x6b8e66c0 0x109 0x0 0x0 0xad0007 0x10d 0x50 0x0 0xb20005 0x0 0x0 0x0 0x0 0x0 0xb90005 0x4 0x6b8e66c0 0x109 0x0 0x0 0xbc0007 0x10d 0x50 0x0 0xc10005 0x0 0x0 0x0 0x0 0x0 0xc80005 0x4 0x6b8e66c0 0x109 0x0 0x0 0xcb0007 0x1 0xf0 0x10c 0xd30005 0x0 0x6b8e7a90 0x10c 0x0 0x0 0xd60007 0x10a 0x70 0x2 0xde0005 0x0 0x6b8e7a90 0x2 0x0 0x0 0xe10007 0x2 0x50 0x0 0xe70005 0x0 0xc4d9c2f0 0x10a 0x0 0x0 0xee0005 0x0 0xc4d9c2f0 0x3 0x0 0x0 oops 20 42 java/util/jar/JarFile$JarFileEntry 44 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 52 java/lang/String 58 java/lang/String 78 java/util/jar/JarFile$JarFileEntry 80 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 94 java/lang/String 104 java/lang/String 120 java/io/ByteArrayOutputStream 126 sun/security/util/ManifestEntryVerifier 142 java/util/jar/JarFile$JarFileEntry 144 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 152 sun/security/util/ManifestEntryVerifier 158 java/lang/String 174 java/lang/String 190 java/lang/String 200 java/util/Hashtable 210 java/util/Hashtable 220 sun/security/util/ManifestEntryVerifier 226 sun/security/util/ManifestEntryVerifier +ciMethodData java/util/jar/JarVerifier$VerifierStream (Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V 1 154 orig 264 136 98 31 106 0 0 0 0 72 241 255 240 0 0 0 0 56 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 153 4 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 208 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 26 0x10002 0x93 0x150002 0x93 0x240005 0x0 0xc5ac8b20 0x93 0x0 0x0 0x290005 0x0 0xf7b53dc0 0x93 0x0 0x0 0x350007 0x92 0x50 0x1 0x410005 0x0 0xc5ac8b20 0x1 0x0 0x0 oops 3 6 java/util/jar/JarVerifier 12 java/util/jar/JarFile$JarFileEntry 22 java/util/jar/JarVerifier +ciMethod java/lang/Object ()V 4097 1 1180467 0 96 +ciMethod java/lang/Object getClass ()Ljava/lang/Class; 3073 1 384 0 -1 +ciMethod java/lang/Object hashCode ()I 2049 1 256 0 -1 +ciMethod java/lang/Object equals (Ljava/lang/Object;)Z 2089 1 28162 0 -1 +ciMethod java/lang/Object clone ()Ljava/lang/Object; 2049 1 256 0 -1 +ciMethod java/lang/String ([CII)V 4097 1 6259 0 704 +ciMethod java/lang/String ([BIILjava/lang/String;)V 4097 1 20112 0 -1 +ciMethod java/lang/String ([CZ)V 1929 1 16661 0 64 +ciMethod java/lang/String length ()I 4097 1 454704 0 64 +ciMethod java/lang/String charAt (I)C 4097 1 1400883 0 160 +ciMethod java/lang/String codePointAt (I)I 1 1 3997 0 -1 +ciMethod java/lang/String getChars ([CI)V 2049 1 5450 0 0 +ciMethod java/lang/String equals (Ljava/lang/Object;)Z 2505 32769 20468 0 -1 +ciMethod java/lang/String equalsIgnoreCase (Ljava/lang/String;)Z 27033 1 5508 0 -1 +ciMethod java/lang/String startsWith (Ljava/lang/String;I)Z 4097 1 5674 0 416 +ciMethod java/lang/String startsWith (Ljava/lang/String;)Z 4097 1 185787 0 352 +ciMethod java/lang/String endsWith (Ljava/lang/String;)Z 4097 1 80254 0 416 +ciMethod java/lang/String hashCode ()I 2665 32769 6770 0 320 +ciMethod java/lang/String indexOf (I)I 4097 1 237137 0 320 +ciMethod java/lang/String indexOf (II)I 1697 65537 2739 0 384 +ciMethod java/lang/String indexOfSupplementary (II)I 0 0 1 0 -1 +ciMethod java/lang/String lastIndexOf (I)I 4097 1 43852 0 288 +ciMethod java/lang/String lastIndexOf (II)I 1633 106497 2305 0 288 +ciMethod java/lang/String lastIndexOfSupplementary (II)I 0 0 1 0 -1 +ciMethod java/lang/String substring (I)Ljava/lang/String; 4097 1 6824 0 -1 +ciMethod java/lang/String substring (II)Ljava/lang/String; 4097 1 5668 0 960 +ciMethod java/lang/String concat (Ljava/lang/String;)Ljava/lang/String; 2049 1 5406 0 896 +ciMethod java/lang/String replace (CC)Ljava/lang/String; 937 33081 787 0 1088 +ciMethod java/lang/String toUpperCase (Ljava/util/Locale;)Ljava/lang/String; 257 4753 1911 0 2368 +ciMethod java/lang/Class setSigners ([Ljava/lang/Object;)V 3073 1 326 0 -1 +ciMethod java/lang/ClassLoader preDefineClass (Ljava/lang/String;Ljava/security/ProtectionDomain;)Ljava/security/ProtectionDomain; 3569 1 6361 0 0 +ciMethod java/lang/ClassLoader defineClassSourceLocation (Ljava/security/ProtectionDomain;)Ljava/lang/String; 3569 1 6475 0 0 +ciMethod java/lang/ClassLoader postDefineClass (Ljava/lang/Class;Ljava/security/ProtectionDomain;)V 3569 1 6475 0 0 +ciMethod java/lang/ClassLoader defineClass (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; 2521 1 6475 0 1504 +ciMethod java/lang/ClassLoader defineClass1 (Ljava/lang/String;[BIILjava/security/ProtectionDomain;Ljava/lang/String;)Ljava/lang/Class; 4105 1 513 0 -1 +ciMethod java/lang/ClassLoader checkName (Ljava/lang/String;)Z 3089 1 5518 0 480 +ciMethod java/lang/ClassLoader checkCerts (Ljava/lang/String;Ljava/security/CodeSource;)V 4097 1 6363 0 0 +ciMethod java/lang/ClassLoader compareCerts ([Ljava/security/cert/Certificate;[Ljava/security/cert/Certificate;)Z 3073 1 5507 0 736 +ciMethod java/lang/ClassLoader setSigners (Ljava/lang/Class;[Ljava/lang/Object;)V 0 0 22 0 0 +ciMethod java/lang/ClassLoader definePackage (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/net/URL;)Ljava/lang/Package; 521 1 705 0 -1 +ciMethod java/lang/ClassLoader getPackage (Ljava/lang/String;)Ljava/lang/Package; 2073 1 8463 0 -1 +ciMethod java/lang/System nanoTime ()J 2049 1 256 0 -1 +ciMethod java/lang/System arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V 93185 1 11648 0 -1 +ciMethod java/lang/Throwable printStackTrace ()V 0 0 1 0 -1 +ciMethod java/lang/Throwable addSuppressed (Ljava/lang/Throwable;)V 0 0 1 0 0 +ciMethod java/lang/RuntimeException (Ljava/lang/String;)V 17 1 796 0 -1 +ciMethod java/security/ProtectionDomain (Ljava/security/CodeSource;Ljava/security/PermissionCollection;Ljava/lang/ClassLoader;[Ljava/security/Principal;)V 265 1 206 0 -1 +ciMethod java/security/ProtectionDomain getCodeSource ()Ljava/security/CodeSource; 1153 1 144 0 0 +ciMethod java/security/SecureClassLoader defineClass (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class; 2521 1 8308 0 0 +ciMethod java/security/SecureClassLoader defineClass (Ljava/lang/String;Ljava/nio/ByteBuffer;Ljava/security/CodeSource;)Ljava/lang/Class; 0 0 1 0 -1 +ciMethod java/security/SecureClassLoader getPermissions (Ljava/security/CodeSource;)Ljava/security/PermissionCollection; 1457 1 182 0 -1 +ciMethod java/security/SecureClassLoader getProtectionDomain (Ljava/security/CodeSource;)Ljava/security/ProtectionDomain; 2521 1 6502 0 9184 +ciMethod java/lang/ref/Reference get ()Ljava/lang/Object; 1033 1 129 0 -1 +ciMethod java/lang/ref/Reference (Ljava/lang/Object;)V 1025 1 12796 0 0 +ciMethod java/lang/ref/Reference (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V 2065 1 28463 0 192 +ciMethod java/lang/ref/SoftReference (Ljava/lang/Object;)V 953 1 2659 0 0 +ciMethod java/lang/ref/SoftReference get ()Ljava/lang/Object; 4097 1 29346 0 96 +ciMethod java/lang/Thread currentThread ()Ljava/lang/Thread; 2049 1 256 0 -1 +ciMethod java/lang/Thread interrupt ()V 0 0 16 0 -1 +ciMethod java/lang/Thread interrupted ()Z 2049 1 9642 0 -1 +ciMethod java/util/Map get (Ljava/lang/Object;)Ljava/lang/Object; 0 0 1 0 -1 +ciMethod java/util/Map put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 0 0 1 0 -1 +ciMethod java/util/Map keySet ()Ljava/util/Set; 0 0 1 0 -1 +ciMethod java/util/Hashtable (IF)V 2049 1 7560 0 768 +ciMethod java/util/Hashtable (I)V 2049 1 2475 0 0 +ciMethod java/util/Hashtable ()V 2057 1 6877 0 0 +ciMethod java/util/Hashtable get (Ljava/lang/Object;)Ljava/lang/Object; 4097 177 5686 0 1856 +ciMethod java/util/Hashtable rehash ()V 89 3857 380 0 -1 +ciMethod java/util/Hashtable addEntry (ILjava/lang/Object;Ljava/lang/Object;I)V 2049 1 5386 0 -1 +ciMethod java/util/Hashtable put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 1529 593 5866 0 2624 +ciMethod java/util/Dictionary ()V 2049 1 7553 0 96 +ciMethod java/lang/StringBuffer (I)V 113 1 8229 0 -1 +ciMethod java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer; 2049 1 164199 0 -1 +ciMethod java/lang/StringBuffer append (C)Ljava/lang/StringBuffer; 4097 1 235373 0 -1 +ciMethod java/lang/StringBuffer toString ()Ljava/lang/String; 97 1 5167 0 -1 +ciMethod java/lang/StringBuilder ()V 4097 1 59189 0 -1 +ciMethod java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder; 4097 1 137771 0 -1 +ciMethod java/lang/StringBuilder append (I)Ljava/lang/StringBuilder; 1 1 3248 0 -1 +ciMethod java/lang/StringBuilder append (F)Ljava/lang/StringBuilder; 0 0 1 0 -1 +ciMethod java/lang/StringBuilder toString ()Ljava/lang/String; 4097 1 61953 0 -1 +ciMethod sun/misc/Unsafe getLong (J)J 3073 1 384 0 -1 +ciMethod sun/misc/Unsafe putLong (JJ)V 3073 1 384 0 -1 +ciMethod java/io/ByteArrayInputStream ([B)V 2049 1 5930 0 0 +ciMethod java/io/InputStream ()V 2057 1 25522 0 0 +ciMethod java/io/InputStream read ([BII)I 0 0 1 0 -1 +ciMethod java/io/InputStream close ()V 0 0 1 0 -1 +ciMethod java/net/URLClassLoader getAndVerifyPackage (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package; 8057 1 5585 0 -1 +ciMethod java/net/URLClassLoader definePackageInternal (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)V 7585 1 5655 0 40352 +ciMethod java/net/URLClassLoader defineClass (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 1489 1 5764 0 0 +ciMethod java/net/URLClassLoader definePackage (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package; 521 1 556 0 -1 +ciMethod java/net/URLClassLoader isSealed (Ljava/lang/String;Ljava/util/jar/Manifest;)Z 2057 1 4995 0 -1 +ciMethod java/net/URLClassLoader access$000 (Ljava/net/URLClassLoader;)Lsun/misc/URLClassPath; 1073 1 134 0 0 +ciMethod java/net/URLClassLoader access$100 (Ljava/net/URLClassLoader;Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 1489 1 5762 0 0 +ciMethod java/net/URL getQuery ()Ljava/lang/String; 1033 1 129 0 -1 +ciMethod java/net/URL getPath ()Ljava/lang/String; 1057 1 132 0 -1 +ciMethod java/net/URL getAuthority ()Ljava/lang/String; 1033 1 129 0 -1 +ciMethod java/net/URL getProtocol ()Ljava/lang/String; 1161 1 145 0 -1 +ciMethod java/net/URL getRef ()Ljava/lang/String; 1041 1 130 0 -1 +ciMethod java/net/URL toString ()Ljava/lang/String; 2049 1 8396 0 0 +ciMethod java/net/URL toExternalForm ()Ljava/lang/String; 2049 1 8960 0 0 +ciMethod java/util/jar/Manifest ()V 2057 1 638 0 -1 +ciMethod java/util/jar/Manifest (Ljava/io/InputStream;)V 273 1 377 0 0 +ciMethod java/util/jar/Manifest getMainAttributes ()Ljava/util/jar/Attributes; 1025 1 128 0 -1 +ciMethod java/util/jar/Manifest getEntries ()Ljava/util/Map; 2025 1 253 0 -1 +ciMethod java/util/jar/Manifest getAttributes (Ljava/lang/String;)Ljava/util/jar/Attributes; 4097 1 43466 0 -1 +ciMethod java/util/jar/Manifest read (Ljava/io/InputStream;)V 1073 16689 1035 0 -1 +ciMethod java/util/jar/Manifest parseName ([BI)Ljava/lang/String; 2289 1 10912 0 -1 +ciMethod java/security/CodeSource (Ljava/net/URL;[Ljava/security/CodeSigner;)V 2513 1 5439 0 320 +ciMethod java/security/CodeSource getLocation ()Ljava/net/URL; 1073 1 134 0 0 +ciMethod java/security/CodeSource getCertificates ()[Ljava/security/cert/Certificate; 3073 1 5516 0 1120 +ciMethod java/nio/Buffer checkIndex (I)I 3105 1 1625 0 0 +ciMethod java/lang/Character charCount (I)I 17 1 21862 0 -1 +ciMethod java/lang/Character toChars (I[CI)I 0 0 1 0 -1 +ciMethod java/lang/Character toChars (I)[C 0 0 1 0 -1 +ciMethod java/lang/Character toUpperCaseEx (I)I 2289 1 31156 0 -1 +ciMethod java/lang/Character toUpperCaseCharArray (I)[C 0 0 1 0 -1 +ciMethod java/lang/Float isNaN (F)Z 3073 1 22394 0 0 +ciMethod java/lang/Float floatToRawIntBits (F)I 1073 1 134 0 -1 +ciMethod java/lang/NullPointerException ()V 0 0 5 0 -1 +ciMethod java/lang/NullPointerException (Ljava/lang/String;)V 0 0 1 0 -1 +ciMethod java/security/cert/Certificate equals (Ljava/lang/Object;)Z 97 1 5142 0 480 +ciMethod java/util/Collection toArray ()[Ljava/lang/Object; 0 0 1 0 -1 +ciMethod java/util/List add (Ljava/lang/Object;)Z 0 0 1 0 -1 +ciMethod java/util/AbstractList ()V 2049 1 109766 0 32 +ciMethod java/util/AbstractCollection ()V 2113 1 126345 0 32 +ciMethod java/util/ArrayList (I)V 2089 1 5427 0 -1 +ciMethod java/util/ArrayList ()V 3121 1 16788 0 64 +ciMethod java/util/ArrayList ensureCapacityInternal (I)V 4097 1 34344 0 -1 +ciMethod java/util/ArrayList size ()I 1129 1 141 0 0 +ciMethod java/util/ArrayList toArray ([Ljava/lang/Object;)[Ljava/lang/Object; 473 1 5284 0 1248 +ciMethod java/util/ArrayList addAll (Ljava/util/Collection;)Z 1825 1 6374 0 1024 +ciMethod java/util/Set iterator ()Ljava/util/Iterator; 0 0 1 0 -1 +ciMethod java/util/AbstractMap ()V 769 1 54434 0 32 +ciMethod java/util/HashMap tableSizeFor (I)I 4097 1 13284 0 -1 +ciMethod java/util/HashMap (IF)V 2529 1 13827 0 352 +ciMethod java/util/HashMap (I)V 2529 1 40761 0 192 +ciMethod java/util/HashMap ()V 481 1 36814 0 32 +ciMethod java/util/HashMap get (Ljava/lang/Object;)Ljava/lang/Object; 4097 1 35756 0 -1 +ciMethod java/util/HashMap put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 4097 1 15312 0 -1 +ciMethod sun/misc/VM allowArraySyntax ()Z 3089 1 5517 0 0 +ciMethod java/util/Hashtable$Entry (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/Hashtable$Entry;)V 2057 1 5389 0 -1 +ciMethod java/lang/Math max (II)I 465 1 162337 0 -1 +ciMethod java/lang/Math min (II)I 4097 1 109390 0 -1 +ciMethod java/lang/Math min (FF)F 2065 1 7443 0 224 +ciMethod java/util/Objects requireNonNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; 2049 1 4377 0 -1 +ciMethod java/util/Iterator hasNext ()Z 0 0 1 0 -1 +ciMethod java/util/Iterator next ()Ljava/lang/Object; 0 0 1 0 -1 +ciMethod java/io/OutputStream ()V 2049 1 4980 0 0 +ciMethod java/util/Arrays equals ([B[B)Z 865 79473 3492 0 -1 +ciMethod java/util/Arrays copyOf ([Ljava/lang/Object;ILjava/lang/Class;)[Ljava/lang/Object; 2081 1 6404 0 -1 +ciMethod java/util/Arrays copyOf ([BI)[B 2049 1 28965 0 -1 +ciMethod java/util/Arrays copyOf ([CI)[C 4097 1 22086 0 0 +ciMethod java/util/Arrays copyOfRange ([CII)[C 4097 1 5638 0 512 +ciMethod java/lang/IllegalArgumentException (Ljava/lang/String;)V 17 1 4 0 -1 +ciMethod sun/security/util/Debug println (Ljava/lang/String;)V 0 0 1 0 -1 +ciMethodData java/lang/String charAt (I)C 2 1400892 orig 264 136 98 31 106 0 0 0 0 240 59 84 104 0 0 0 0 120 1 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 225 241 170 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 10 0x10007 0x0 0x40 0x155e20 0xa0007 0x155e1f 0x30 0x0 0x120002 0x0 oops 0 +ciMethod java/util/Locale getLanguage ()Ljava/lang/String; 201 1 4097 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap spread (I)I 2065 1 16121 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap tabAt ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node; 2417 1 27466 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap casTabAt ([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z 1977 1 5515 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap putVal (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; 2057 281 10521 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap putIfAbsent (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 2049 1 14621 0 0 +ciMethod java/util/concurrent/ConcurrentHashMap initTable ()[Ljava/util/concurrent/ConcurrentHashMap$Node; 41 1 237 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap addCount (JI)V 1785 49 5355 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap helpTransfer ([Ljava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)[Ljava/util/concurrent/ConcurrentHashMap$Node; 0 0 1 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap treeifyBin ([Ljava/util/concurrent/ConcurrentHashMap$Node;I)V 0 0 1 0 -1 +ciMethod java/util/concurrent/ConcurrentHashMap$Node (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V 2049 1 9120 0 -1 +ciMethodData java/lang/Object ()V 2 1180467 orig 264 136 98 31 106 0 0 0 0 104 4 84 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 153 9 144 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethod java/net/URLStreamHandler toExternalForm (Ljava/net/URL;)Ljava/lang/String; 2049 1 5402 0 3584 +ciMethodData java/lang/String hashCode ()I 2 135636 orig 264 136 98 31 106 0 0 0 0 40 77 84 104 0 0 0 0 152 1 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 41 201 0 0 161 14 16 0 206 20 0 0 161 190 1 0 2 0 0 0 1 0 11 0 2 0 0 0 120 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 15 0x60007 0xe86 0x78 0xa9f 0xee007 0x4 0x58 0xa9c 0x1e0007 0xa96 0x38 0x201a3 0x2d0003 0x201a3 0xffffffffffffffe0 oops 0 +ciMethod sun/misc/URLClassPath getResource (Ljava/lang/String;Z)Lsun/misc/Resource; 1201 17753 1045 0 3904 +ciMethod sun/misc/URLClassPath getLookupCache (Ljava/lang/String;)[I 1249 1 1502 0 -1 +ciMethod sun/misc/URLClassPath getNextLoader ([II)Lsun/misc/URLClassPath$Loader; 2361 1 125430 0 -1 +ciMethodData java/lang/String length ()I 2 454713 orig 264 136 98 31 106 0 0 0 0 176 58 84 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 201 113 55 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/lang/String ([CII)V 2 6259 orig 264 136 98 31 106 0 0 0 0 120 48 84 104 0 0 0 0 80 2 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 153 179 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 240 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 30 0x10002 0x1673 0x50007 0x1673 0x30 0x0 0xd0002 0x0 0x120007 0x1671 0x70 0x2 0x160007 0x2 0x30 0x0 0x1e0002 0x0 0x250007 0x0 0x20 0x2 0x370007 0x1671 0x30 0x0 0x410002 0x0 0x4b0002 0x1671 oops 0 +ciMethodData java/util/Arrays copyOfRange ([CII)[C 2 5638 orig 264 136 98 31 106 0 0 0 0 32 155 101 104 0 0 0 0 120 2 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 49 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 32 1 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 36 0x50007 0x1406 0x100 0x0 0x100002 0x0 0x140005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x1d0005 0x0 0x0 0x0 0x0 0x0 0x200005 0x0 0x0 0x0 0x0 0x0 0x230002 0x0 0x360002 0x1406 0x390002 0x1406 oops 0 +ciMethodData java/lang/String substring (II)Ljava/lang/String; 2 5668 orig 264 136 98 31 106 0 0 0 0 32 89 84 104 0 0 0 0 40 2 0 0 208 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 33 161 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 248 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 31 0x10007 0x1424 0x30 0x0 0x90002 0x0 0x130007 0x1424 0x30 0x0 0x1b0002 0x0 0x240007 0x1424 0x30 0x0 0x2c0002 0x0 0x310007 0xb76 0x58 0x8ae 0x3a0007 0x7cd 0x38 0xe1 0x3e0003 0xe1 0x28 0x4b0002 0x1343 oops 0 +ciMethodData java/lang/String indexOf (II)I 2 138454 orig 264 136 98 31 106 0 0 0 0 136 78 84 104 0 0 0 0 16 2 0 0 88 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 249 78 0 0 177 230 15 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 28 0x70007 0x9df 0x38 0x0 0xc0003 0x0 0x38 0x110007 0x77e 0x20 0x261 0x190007 0x0 0x78 0x77e 0x280007 0x76f 0x58 0x1fccd 0x310007 0x1fcc0 0x20 0xd 0x3a0003 0x1fcc0 0xffffffffffffffc0 0x420002 0x0 oops 0 +ciMethodData java/util/Arrays copyOf ([CI)[C 2 22086 orig 264 136 98 31 106 0 0 0 0 208 147 101 104 0 0 0 0 112 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 49 162 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 7 0 2 0 0 0 32 0 0 0 255 255 255 255 2 0 11 0 0 0 0 0 data 4 0xb0002 0x5446 0xe0002 0x5446 oops 0 +ciMethodData java/lang/String indexOf (I)I 2 237137 orig 264 136 98 31 106 0 0 0 0 184 77 84 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 137 226 28 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 3 0 0 0 0 0 data 6 0x30005 0x880 0x6b8e66c0 0x393d1 0x0 0x0 oops 1 2 java/lang/String +ciMethodData java/lang/String lastIndexOf (II)I 2 95269 orig 264 136 98 31 106 0 0 0 0 176 80 84 104 0 0 0 0 240 1 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 0 0 169 65 0 0 41 1 10 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 14 0 2 0 0 0 152 0 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 19 0x30007 0x0 0x88 0x835 0x100002 0x835 0x170007 0x39e 0x58 0x144a5 0x1f0007 0x1400e 0x20 0x497 0x280003 0x1400e 0xffffffffffffffc0 0x300002 0x0 oops 0 +ciMethodData java/lang/String startsWith (Ljava/lang/String;I)Z 2 14057 orig 264 136 98 31 106 0 0 0 0 56 75 84 104 0 0 0 0 176 1 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 81 161 0 0 73 183 1 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 13 0 2 0 0 0 128 0 0 0 255 255 255 255 7 0 25 0 0 0 0 0 data 16 0x190007 0x5 0x40 0x1424 0x250007 0x1352 0x20 0xd2 0x2f0007 0x175 0x40 0x39e9 0x410007 0x280c 0xffffffffffffffe0 0x11dd oops 0 +ciMethodData java/util/Hashtable get (Ljava/lang/Object;)Ljava/lang/Object; 2 5686 orig 264 136 98 31 106 0 0 0 0 192 90 87 104 0 0 0 0 40 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 177 161 0 0 33 26 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 11 0 2 0 0 0 216 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 27 0x60005 0xe9 0x6b8e66c0 0x1331 0x6b8f7c00 0x1c 0x1b0007 0x8b2 0xa8 0xec8 0x240007 0x344 0x70 0xb84 0x2d0005 0x80 0x6b8e66c0 0xaea 0x6b8f7c00 0x1a 0x300007 0x0 0x20 0xb84 0x400003 0x344 0xffffffffffffff70 oops 4 2 java/lang/String 4 java/lang/Long 16 java/lang/String 18 java/lang/Long +ciMethodData java/lang/String lastIndexOf (I)I 2 43857 orig 264 136 98 31 106 0 0 0 0 240 79 84 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 137 74 5 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 9 0 0 0 0 0 data 6 0x90005 0xfc 0x6b8e66c0 0xa855 0x0 0x0 oops 1 2 java/lang/String +ciMethodData java/lang/String startsWith (Ljava/lang/String;)Z 2 185877 orig 264 136 98 31 106 0 0 0 0 200 75 84 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 169 160 22 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 3 0 0 0 0 0 data 6 0x30005 0x80 0x6b8e66c0 0x2d396 0x0 0x0 oops 1 2 java/lang/String +ciMethodData java/lang/String endsWith (Ljava/lang/String;)Z 2 80257 orig 264 136 98 31 106 0 0 0 0 104 76 84 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 9 188 9 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 13 0 0 0 0 0 data 6 0xd0005 0x85 0x6b8e66c0 0x136fd 0x0 0x0 oops 1 2 java/lang/String +ciMethod java/net/URLClassLoader$1 run ()Ljava/lang/Class; 3073 1 13564 0 0 +ciMethod java/net/URLClassLoader$1 run ()Ljava/lang/Object; 3073 1 13696 0 -1 +ciMethod sun/misc/URLClassPath$JarLoader access$600 (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URL; 1033 1 129 0 0 +ciMethod sun/misc/URLClassPath$JarLoader access$700 (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/jar/JarFile; 1081 1 135 0 0 +ciMethod sun/misc/URLClassPath$Loader getResource (Ljava/lang/String;Z)Lsun/misc/Resource; 0 0 1 0 -1 +ciMethod java/util/zip/ZipFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 825 1 7851 0 3520 +ciMethod java/util/zip/ZipFile getEntry (J[BZ)J 3073 1 384 0 -1 +ciMethod java/util/zip/ZipFile freeEntry (JJ)V 3089 1 386 0 -1 +ciMethod java/util/zip/ZipFile getInputStream (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; 2049 1 5408 0 9088 +ciMethod java/util/zip/ZipFile getInflater ()Ljava/util/zip/Inflater; 2001 1 5384 0 -1 +ciMethod java/util/zip/ZipFile getZipEntry (Ljava/lang/String;J)Ljava/util/zip/ZipEntry; 1329 1 789 0 -1 +ciMethod java/util/zip/ZipFile ensureOpen ()V 2089 1 5386 0 -1 +ciMethod java/util/zip/ZipFile getEntrySize (J)J 3073 1 384 0 -1 +ciMethod java/util/zip/ZipFile getEntryMethod (J)I 3073 1 384 0 -1 +ciMethod java/util/jar/JarFile getManifest ()Ljava/util/jar/Manifest; 673 1 5802 0 0 +ciMethod java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 713 1 6338 0 0 +ciMethod java/util/jar/JarFile getMetaInfEntryNames ()[Ljava/lang/String; 3081 1 385 0 -1 +ciMethod java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 825 1 14292 0 0 +ciMethod java/util/jar/JarFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 825 1 12325 0 352 +ciMethod java/util/jar/JarFile maybeInstantiateVerifier ()V 2049 65 5810 0 0 +ciMethod java/util/jar/JarFile initializeVerifier ()V 105 361 182 0 0 +ciMethod java/util/jar/JarFile getBytes (Ljava/util/zip/ZipEntry;)[B 2065 1 1021 0 0 +ciMethod java/util/jar/JarFile getInputStream (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; 593 1 6450 0 0 +ciMethod java/util/jar/JarFile getManEntry ()Ljava/util/jar/JarEntry; 2049 1 820 0 0 +ciMethod java/util/jar/JarFile access$200 (Ljava/util/jar/JarFile;)V 3113 1 5421 0 0 +ciMethod java/util/jar/JarFile access$300 (Ljava/util/jar/JarFile;)Ljava/util/jar/JarVerifier; 1033 1 129 0 0 +ciMethod java/util/zip/ZipCoder getBytes (Ljava/lang/String;)[B 2097 1 6376 0 -1 +ciMethod java/util/zip/ZipCoder getBytesUTF8 (Ljava/lang/String;)[B 0 0 1 0 -1 +ciMethod java/util/zip/ZipCoder isUTF8 ()Z 1025 1 128 0 -1 +ciMethod sun/misc/PerfCounter get ()J 1969 1 15926 0 0 +ciMethod sun/misc/PerfCounter add (J)V 1969 1 15926 0 0 +ciMethod sun/misc/PerfCounter addElapsedTimeFrom (J)V 985 1 9848 0 576 +ciMethod sun/misc/PerfCounter getReadClassBytesTime ()Lsun/misc/PerfCounter; 2513 1 5832 0 0 +ciMethod java/nio/DirectLongBufferU ix (I)J 3105 1 12051 0 0 +ciMethod java/nio/DirectLongBufferU get (I)J 3073 1 5509 0 96 +ciMethod java/nio/DirectLongBufferU put (IJ)Ljava/nio/LongBuffer; 3073 1 6542 0 96 +ciMethod java/nio/LongBuffer get (I)J 0 0 1 0 -1 +ciMethod java/nio/LongBuffer put (IJ)Ljava/nio/LongBuffer; 0 0 1 0 -1 +ciMethod java/util/zip/ZipEntry (Ljava/util/zip/ZipEntry;)V 345 1 2550 0 -1 +ciMethod java/util/zip/ZipEntry getName ()Ljava/lang/String; 1033 1 129 0 0 +ciMethod java/util/zip/ZipEntry getSize ()J 2049 1 6627 0 0 +ciMethod java/util/zip/ZipEntry isDirectory ()Z 2049 1 593 0 -1 +ciMethod java/util/jar/JarFile$JarFileEntry (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V 345 1 1481 0 0 +ciMethod java/util/jar/JarFile$JarFileEntry getCodeSigners ()[Ljava/security/CodeSigner; 3113 1 5396 0 0 +ciMethod java/util/jar/JarEntry (Ljava/util/zip/ZipEntry;)V 345 1 2550 0 0 +ciMethod java/util/jar/JarEntry getCodeSigners ()[Ljava/security/CodeSigner; 0 0 1 0 -1 +ciMethod java/util/zip/ZipFile$ZipFileInputStream (Ljava/util/zip/ZipFile;J)V 2049 1 5408 0 -1 +ciMethod java/util/zip/ZipFile$ZipFileInflaterInputStream (Ljava/util/zip/ZipFile;Ljava/util/zip/ZipFile$ZipFileInputStream;Ljava/util/zip/Inflater;I)V 2001 1 5392 0 -1 +ciMethod sun/misc/IOUtils readFully (Ljava/io/InputStream;IZ)[B 2049 3313 5260 0 0 +ciMethod sun/misc/URLClassPath$JarLoader$2 getCodeSourceURL ()Ljava/net/URL; 3073 1 5504 0 64 +ciMethod sun/misc/URLClassPath$JarLoader$2 getInputStream ()Ljava/io/InputStream; 3113 1 5511 0 128 +ciMethod sun/misc/URLClassPath$JarLoader$2 getManifest ()Ljava/util/jar/Manifest; 3073 1 5774 0 0 +ciMethod sun/misc/URLClassPath$JarLoader$2 getCodeSigners ()[Ljava/security/CodeSigner; 2057 1 5396 0 1504 +ciMethod sun/misc/Resource getCodeSourceURL ()Ljava/net/URL; 0 0 1 0 -1 +ciMethod sun/misc/Resource getInputStream ()Ljava/io/InputStream; 0 0 1 0 -1 +ciMethod sun/misc/Resource getContentLength ()I 0 0 1 0 -1 +ciMethod sun/misc/Resource cachedInputStream ()Ljava/io/InputStream; 2049 1 13171 0 0 +ciMethod sun/misc/Resource getBytes ()[B 2521 5113 5448 0 9568 +ciMethod sun/misc/Resource getByteBuffer ()Ljava/nio/ByteBuffer; 2513 1 7687 0 864 +ciMethod sun/misc/Resource getManifest ()Ljava/util/jar/Manifest; 0 0 1 0 -1 +ciMethod sun/misc/Resource getCodeSigners ()[Ljava/security/CodeSigner; 0 0 1 0 -1 +ciMethod java/util/jar/Attributes ()V 2049 1 1015 0 0 +ciMethod java/util/jar/Attributes (I)V 2065 1 37992 0 0 +ciMethod java/util/jar/Attributes getValue (Ljava/util/jar/Attributes$Name;)Ljava/lang/String; 1297 1 9664 0 -1 +ciMethod java/util/jar/Attributes putAll (Ljava/util/Map;)V 25 281 3 0 -1 +ciMethod java/util/jar/Attributes size ()I 4097 1 37733 0 -1 +ciMethod java/util/jar/Attributes clone ()Ljava/lang/Object; 4097 1 792 0 -1 +ciMethod java/util/jar/Attributes read (Ljava/util/jar/Manifest$FastInputStream;[B)V 1641 32769 12651 0 -1 +ciMethod java/util/jar/Manifest$FastInputStream (Ljava/io/InputStream;)V 1073 1 1035 0 -1 +ciMethod java/util/jar/Manifest$FastInputStream peek ()B 4097 1 11814 0 -1 +ciMethod java/util/jar/Manifest$FastInputStream readLine ([B)I 2513 1 74660 0 -1 +ciMethod java/util/jar/JarVerifier ([B)V 2049 1 792 0 0 +ciMethod java/util/jar/JarVerifier beginEntry (Ljava/util/jar/JarEntry;Lsun/security/util/ManifestEntryVerifier;)V 2049 1 563 0 0 +ciMethod java/util/jar/JarVerifier update (ILsun/security/util/ManifestEntryVerifier;)V 9 1 1 0 0 +ciMethod java/util/jar/JarVerifier update (I[BIILsun/security/util/ManifestEntryVerifier;)V 81 1 1432 0 -1 +ciMethod java/util/jar/JarVerifier processEntry (Lsun/security/util/ManifestEntryVerifier;)V 1801 1 564 0 -1 +ciMethod java/util/jar/JarVerifier getCodeSigners (Ljava/util/jar/JarFile;Ljava/util/jar/JarEntry;)[Ljava/security/CodeSigner; 0 0 22 0 -1 +ciMethod java/util/jar/JarVerifier nothingToVerify ()Z 1465 1 182 0 -1 +ciMethod java/util/jar/JarVerifier doneWithMeta ()V 1177 1 182 0 -1 +ciMethod java/security/CodeSigner getSignerCertPath ()Ljava/security/cert/CertPath; 1057 1 132 0 0 +ciMethod java/util/jar/JarVerifier$3 (Ljava/util/jar/JarVerifier;)V 2049 1 792 0 0 +ciMethod java/io/ByteArrayOutputStream ()V 2049 1 3407 0 0 +ciMethod java/io/ByteArrayOutputStream (I)V 2057 1 4454 0 0 +ciMethod java/io/ByteArrayOutputStream write (I)V 4097 1 11017 0 -1 +ciMethod java/io/ByteArrayOutputStream reset ()V 145 1 33 0 -1 +ciMethod java/lang/Package isSealed ()Z 2049 1 5045 0 -1 +ciMethod java/lang/Package isSealed (Ljava/net/URL;)Z 0 0 59 0 -1 +ciMethod sun/security/util/SignatureFileVerifier isBlockOrSF (Ljava/lang/String;)Z 2081 1 429 0 -1 +ciMethod sun/security/util/ManifestEntryVerifier (Ljava/util/jar/Manifest;)V 2049 1 956 0 0 +ciMethod sun/security/util/ManifestEntryVerifier setEntry (Ljava/lang/String;Ljava/util/jar/JarEntry;)V 873 729 381 0 -1 +ciMethod sun/security/util/ManifestEntryVerifier update (B)V 0 0 1 0 -1 +ciMethod sun/nio/ByteBuffered getByteBuffer ()Ljava/nio/ByteBuffer; 0 0 1 0 -1 +ciMethod java/lang/AssertionError (Ljava/lang/Object;)V 0 0 1 0 -1 +ciMethodData java/util/AbstractCollection ()V 2 126345 orig 264 136 98 31 106 0 0 0 0 216 251 95 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 9 100 15 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x1ec7e oops 0 +ciMethodData java/lang/String replace (CC)Ljava/lang/String; 2 38259 orig 264 136 98 31 106 0 0 0 0 112 91 84 104 0 0 0 0 136 2 0 0 184 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 39 16 0 0 241 20 0 0 97 42 4 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 23 0 2 0 0 0 80 1 0 0 255 255 255 255 7 0 2 0 0 0 0 0 data 42 0x20007 0x0 0x150 0x29e 0x1a0007 0x4c 0x58 0xaff 0x230007 0x8ad 0xffffffffffffffe0 0x252 0x260003 0x252 0x18 0x2c0007 0x4c 0xd8 0x252 0x3b0007 0x252 0x38 0x2e3 0x4b0003 0x2e3 0xffffffffffffffe0 0x510007 0x252 0x70 0x776e 0x620007 0x69c3 0x38 0xdab 0x660003 0xdab 0x18 0x6f0003 0x776e 0xffffffffffffffa8 0x790002 0x252 oops 0 +ciMethodData java/lang/String ([CZ)V 2 16661 orig 264 136 98 31 106 0 0 0 0 32 58 84 104 0 0 0 0 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 241 0 0 0 33 1 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x4024 oops 0 +ciMethodData java/lang/ref/Reference (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V 2 28463 orig 264 136 98 31 106 0 0 0 0 192 106 86 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 105 113 3 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 72 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 9 0x10002 0x6e2d 0xb0007 0x451f 0x38 0x290f 0x110003 0x290f 0x18 oops 0 +ciMethodData java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 2 14292 orig 264 136 98 31 106 0 0 0 0 8 35 116 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 105 187 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 96 0 0 0 255 255 255 255 5 192 2 0 0 0 0 0 data 12 0x2c005 0x0 0xc590b0c0 0x3768 0xf7b51c30 0x9 0x50104 0x0 0xf7b53dc0 0x31e 0xf7b53e70 0x9 oops 4 2 java/util/jar/JarFile 4 sun/net/www/protocol/jar/URLJarFile 8 java/util/jar/JarFile$JarFileEntry 10 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry +ciMethodData java/util/jar/JarFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 2 12325 orig 264 136 98 31 106 0 0 0 0 168 35 116 104 0 0 0 0 104 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 241 125 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 8 0x20002 0x2fbf 0x70007 0x2a56 0x30 0x563 0x100002 0x563 oops 0 +ciMethodData java/util/zip/ZipFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 2 7851 orig 264 136 98 31 106 0 0 0 0 240 100 115 104 0 0 0 0 112 2 0 0 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0 33 242 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 32 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 36 0x10007 0x1e44 0x30 0x0 0xa0002 0x0 0x160002 0x1e44 0x220005 0x183 0xf7b57210 0x1cc1 0x0 0x0 0x260002 0x1e44 0x2d0007 0x1b95 0x88 0x2af 0x330007 0x0 0x48 0x2af 0x390002 0x2af 0x3c0003 0x2af 0x28 0x420002 0x0 0x4c0002 0x2af 0x580003 0x1b95 0x18 oops 1 10 java/util/zip/ZipCoder +ciMethodData java/util/jar/JarFile$JarFileEntry (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V 2 1481 orig 264 136 98 31 106 0 0 0 0 0 13 118 104 0 0 0 0 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 241 44 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 7 0 0 0 0 0 data 2 0x70002 0x59e oops 0 +ciMethodData java/util/jar/JarEntry (Ljava/util/zip/ZipEntry;)V 2 2552 orig 264 136 98 31 106 0 0 0 0 240 18 118 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 105 78 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 2 0x20002 0x9cd oops 0 +ciMethodData java/util/zip/ZipEntry (Ljava/util/zip/ZipEntry;)V 2 2552 orig 264 136 98 31 106 0 0 0 0 184 240 117 104 0 0 0 0 112 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 0 0 0 105 78 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 32 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 4 0x10002 0x9cd 0x2d0002 0x9cd oops 0 +ciMethodData java/util/HashMap ()V 2 36814 orig 264 136 98 31 106 0 0 0 0 0 12 98 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 145 124 4 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x8f92 oops 0 +ciMethodData java/util/AbstractMap ()V 2 54434 orig 264 136 98 31 106 0 0 0 0 176 88 97 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 17 162 6 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0xd443 oops 0 +ciMethodData java/util/concurrent/ConcurrentHashMap putVal (Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; 2 10521 orig 264 136 98 31 106 0 0 0 0 168 12 109 104 0 0 0 0 152 6 0 0 232 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 193 64 1 0 57 63 0 0 16 20 0 0 38 4 0 0 2 0 0 0 2 0 61 0 2 0 0 0 56 5 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 167 0x10007 0x0 0x40 0x2818 0x50007 0x2818 0x30 0x0 0xc0002 0x0 0x110005 0x19a 0x6b8e66c0 0x267d 0xff22bff0 0x1 0x140002 0x2818 0x240007 0x26 0x40 0x2818 0x2d0007 0x2819 0x48 0x0 0x310002 0x26 0x360003 0x26 0x430 0x450002 0x2818 0x4b0007 0x170e 0x78 0x110b 0x5c0002 0x110b 0x5f0002 0x110b 0x620007 0x0 0x3c8 0x110b 0x650003 0x110b 0x3c0 0x710007 0x170d 0x68 0x1 0x790005 0x0 0xf7926f10 0x1 0x0 0x0 0x7e0003 0x1 0x340 0x8e0002 0x170d 0x930007 0x0 0x290 0x170d 0x980007 0x0 0x180 0x170d 0xa90007 0x1380 0xe8 0xb4d 0xb50007 0x50 0x90 0xafd 0xba0007 0x0 0xa8 0xafd 0xc00005 0x0 0x6b8e66c0 0xafd 0x0 0x0 0xc30007 0x0 0x58 0xafd 0xcee007 0xb45 0x98 0x9 0xd70003 0x9 0x78 0xe60007 0x7c0 0x48 0xbc0 0xf40002 0xbc0 0xfa0003 0xbc0 0x30 0x1000003 0x7c0 0xfffffffffffffed0 0x1030003 0x170e 0x108 0x1080004 0x0 0x0 0x0 0x0 0x0 0x10b0007 0x0 0xc0 0x0 0x1130004 0x0 0x0 0x0 0x0 0x0 0x11a0005 0x0 0x0 0x0 0x0 0x0 0x1200007 0x0 0x40 0x0 0x12b0007 0x0 0x20 0x0 0x1370003 0x170e 0x18 0x1440007 0x0 0x70 0x170e 0x14b0007 0x170e 0x30 0x0 0x1530002 0x0 0x1580007 0xbc0 0x38 0xb4e 0x15e0003 0x27 0xfffffffffffffb80 0x1650002 0x1ccb oops 4 12 java/lang/String 14 java/lang/reflect/WeakCache$CacheKey 54 java/util/concurrent/ConcurrentHashMap 85 java/lang/String +ciMethodData java/nio/Buffer checkIndex (I)I 2 1625 orig 264 136 98 31 106 0 0 0 0 240 249 92 104 0 0 0 0 120 1 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 1 0 0 169 38 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 80 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 10 0x10007 0x0 0x40 0x4d5 0x90007 0x4d5 0x30 0x0 0x100002 0x0 oops 0 +ciMethodData java/nio/DirectLongBufferU ix (I)J 2 12051 orig 264 136 98 31 106 0 0 0 0 168 145 117 104 0 0 0 0 40 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 1 0 0 121 108 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethod java/lang/SecurityException (Ljava/lang/String;)V 0 0 1 0 -1 +ciMethodData java/util/concurrent/ConcurrentHashMap putIfAbsent (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 2 14645 orig 264 136 98 31 106 0 0 0 0 48 27 109 104 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 169 193 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 6 0x40005 0x1 0xf7926f10 0x3834 0x0 0x0 oops 1 2 java/util/concurrent/ConcurrentHashMap +ciMethodData java/lang/ClassLoader checkName (Ljava/lang/String;)Z 2 5518 orig 264 136 98 31 106 0 0 0 0 80 72 85 104 0 0 0 0 144 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 1 0 0 97 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 20 0 2 0 0 0 64 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 40 0x10007 0x0 0x70 0x140c 0x50005 0x0 0x6b8e66c0 0x140b 0x0 0x0 0x80007 0x140b 0x20 0x0 0x100005 0x0 0x6b8e66c0 0x140b 0x0 0x0 0x140007 0x0 0xa0 0x140b 0x170002 0x140b 0x1a0007 0x0 0x70 0x140b 0x1f0005 0x0 0x6b8e66c0 0x140b 0x0 0x0 0x240007 0x140b 0x20 0x0 oops 3 6 java/lang/String 16 java/lang/String 32 java/lang/String +ciMethodData sun/misc/VM allowArraySyntax ()Z 2 5517 orig 264 136 98 31 106 0 0 0 0 96 116 98 104 0 0 0 0 24 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 130 1 0 0 89 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/util/AbstractList ()V 2 109766 orig 264 136 98 31 106 0 0 0 0 248 232 95 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 49 94 13 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x1abc6 oops 0 +ciMethodData sun/misc/PerfCounter add (J)V 2 15926 orig 264 136 98 31 106 0 0 0 0 240 244 116 104 0 0 0 0 184 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246 0 0 0 1 234 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 4 0 2 0 0 0 96 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 12 0x10005 0x0 0xf7bd2350 0x3d40 0x0 0x0 0xd0005 0x0 0xef078620 0x3d40 0x0 0x0 oops 2 2 sun/misc/PerfCounter 8 java/nio/DirectLongBufferU +ciMethodData sun/misc/PerfCounter get ()J 2 15926 orig 264 136 98 31 106 0 0 0 0 184 243 116 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 246 0 0 0 1 234 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 6 0x50005 0x0 0xef078620 0x3d40 0x0 0x0 oops 1 2 java/nio/DirectLongBufferU +ciMethodData sun/misc/PerfCounter addElapsedTimeFrom (J)V 2 9953 orig 264 136 98 31 106 0 0 0 0 168 246 116 104 0 0 0 0 152 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 123 0 0 0 49 51 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 8 0x10002 0x2666 0x60005 0x0 0xf7bd2350 0x2666 0x0 0x0 oops 1 4 sun/misc/PerfCounter +ciMethodData java/lang/NullPointerException (Ljava/lang/String;)V 1 0 orig 264 136 98 31 106 0 0 0 0 168 63 94 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 2 0x20002 0x0 oops 0 +ciMethodData java/lang/ref/SoftReference get ()Ljava/lang/Object; 2 29346 orig 264 136 98 31 106 0 0 0 0 80 111 86 104 0 0 0 0 112 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 17 133 3 0 1 0 0 0 244 21 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 80 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 10 0x10002 0x70a2 0x60007 0x1 0x40 0x70a1 0x11e007 0x6e38 0x20 0x26a oops 0 +ciMethodData java/util/Hashtable put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 2 5866 orig 264 136 98 31 106 0 0 0 0 184 93 87 104 0 0 0 0 112 2 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 191 0 0 0 89 177 0 0 121 85 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 13 0 2 0 0 0 24 1 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 35 0x10007 0x162b 0x30 0x0 0x80002 0x0 0x120005 0x48 0x6b8e66c0 0x15d0 0xeeb06e10 0x13 0x290007 0x1484 0xa8 0xc56 0x330007 0xaaf 0x70 0x1a7 0x3cc005 0x0 0x6b8e66c0 0x198 0xeeb06ec0 0x13 0x3f0007 0x0 0x20 0x1ab 0x590003 0xaaf 0xffffffffffffff70 0x630002 0x1484 oops 4 8 java/lang/String 10 org/apache/log4j/CategoryKey 22 java/lang/String 24 javax/swing/KeyboardManager$ComponentKeyStrokePair +ciMethodData java/io/InputStream ()V 2 25522 orig 264 136 98 31 106 0 0 0 0 232 209 91 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 137 21 3 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x62b1 oops 0 +ciMethodData java/lang/ref/SoftReference (Ljava/lang/Object;)V 2 2660 orig 264 136 98 31 106 0 0 0 0 16 110 86 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 0 0 0 105 79 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 7 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 2 0x20002 0x9ed oops 0 +ciMethodData java/lang/ref/Reference (Ljava/lang/Object;)V 2 12796 orig 264 136 98 31 106 0 0 0 0 24 106 86 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 225 139 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 3 0 0 0 0 0 data 2 0x30002 0x317c oops 0 +ciMethodData java/lang/Float isNaN (F)Z 2 22394 orig 264 136 98 31 106 0 0 0 0 200 108 93 104 0 0 0 0 88 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 209 175 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 56 0 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 7 0x30007 0x55fa 0x38 0x0 0x70003 0x0 0x18 oops 0 +ciMethodData java/util/jar/Attributes (I)V 2 37992 orig 264 136 98 31 106 0 0 0 0 88 80 119 104 0 0 0 0 72 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 49 155 4 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 32 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 4 0x10002 0x9366 0xa0002 0x9364 oops 0 +ciMethodData java/util/HashMap (I)V 2 40761 orig 264 136 98 31 106 0 0 0 0 104 11 98 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 1 0 0 233 239 4 0 1 0 0 0 203 61 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 2 0x40002 0x9dfd oops 0 +ciMethodData java/util/HashMap (IF)V 2 13827 orig 264 136 98 31 106 0 0 0 0 216 10 98 104 0 0 0 0 104 3 0 0 240 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 1 0 0 57 166 1 0 1 0 0 0 179 25 0 0 0 0 0 0 2 0 0 0 0 0 17 0 2 0 0 0 16 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 66 0x10002 0x34c8 0x50007 0x34c8 0xd0 0x0 0x100002 0x0 0x150005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x1c0005 0x0 0x0 0x0 0x0 0x0 0x1f0002 0x0 0x260007 0x34c7 0x20 0x0 0x2f0007 0x0 0x50 0x34c8 0x330002 0x34c8 0x360007 0x34c8 0xd0 0x0 0x410002 0x0 0x460005 0x0 0x0 0x0 0x0 0x0 0x4a0005 0x0 0x0 0x0 0x0 0x0 0x4d0005 0x0 0x0 0x0 0x0 0x0 0x500002 0x0 0x5b0002 0x34c8 oops 0 +ciMethodData java/util/jar/Manifest getAttributes (Ljava/lang/String;)Ljava/util/jar/Attributes; 2 43475 orig 264 136 98 31 106 0 0 0 0 24 139 92 104 0 0 0 0 224 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 153 62 5 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 144 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 18 0x10005 0x0 0x6b8f7370 0xa7d3 0x0 0x0 0x50005 0x0 0x7f1c47d0 0xa7d3 0x0 0x0 0xa0104 0x0 0x7f1c44d0 0x196 0x0 0x0 oops 3 2 java/util/jar/Manifest 8 java/util/HashMap 14 java/util/jar/Attributes +ciMethodData java/util/Objects requireNonNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; 2 4377 orig 264 136 98 31 106 0 0 0 0 104 42 99 104 0 0 0 0 88 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 201 128 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 6 0x10007 0x1019 0x30 0x0 0x90002 0x0 oops 0 +ciMethodData java/lang/Math min (FF)F 2 7443 orig 264 136 98 31 106 0 0 0 0 144 203 98 104 0 0 0 0 24 2 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 137 224 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 200 0 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 25 0x30007 0x1c11 0x20 0x0 0xb0007 0x1c11 0x70 0x0 0x110007 0x0 0x50 0x0 0x150002 0x0 0x1d0007 0x0 0x20 0x0 0x250007 0x0 0x38 0x1c11 0x290003 0x1c11 0x18 oops 0 +ciMethodData java/util/Hashtable (IF)V 2 7560 orig 264 136 98 31 106 0 0 0 0 168 83 87 104 0 0 0 0 104 3 0 0 224 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 65 228 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 17 0 2 0 0 0 16 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 66 0x10002 0x1c88 0xa0007 0x1c88 0xd0 0x0 0x150002 0x0 0x1a0005 0x0 0x0 0x0 0x0 0x0 0x1e0005 0x0 0x0 0x0 0x0 0x0 0x210005 0x0 0x0 0x0 0x0 0x0 0x240002 0x0 0x2b0007 0x0 0x50 0x1c88 0x2f0002 0x1c88 0x320007 0x1c88 0xd0 0x0 0x3d0002 0x0 0x420005 0x0 0x0 0x0 0x0 0x0 0x460005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0x0 0x0 0x0 0x0 0x4c0002 0x0 0x510007 0x1c88 0x20 0x0 0x6a0002 0x1c88 oops 0 +ciMethodData java/util/Dictionary ()V 2 7553 orig 264 136 98 31 106 0 0 0 0 104 124 87 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 9 228 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x1c81 oops 0 +ciMethodData java/util/ArrayList ()V 2 16788 orig 264 136 98 31 106 0 0 0 0 88 123 96 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 1 0 0 113 0 2 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x400e oops 0 +ciMethodData java/io/OutputStream ()V 2 4980 orig 264 136 98 31 106 0 0 0 0 120 242 99 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 161 147 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x1274 oops 0 +ciMethodData java/util/Hashtable ()V 2 6877 orig 264 136 98 31 106 0 0 0 0 208 84 87 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 225 206 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 5 0 0 0 0 0 data 2 0x50002 0x19db oops 0 +ciMethodData java/io/ByteArrayOutputStream (I)V 2 4454 orig 264 136 98 31 106 0 0 0 0 104 253 119 104 0 0 0 0 48 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 41 131 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 224 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 28 0x10002 0x1065 0x50007 0x1065 0xd0 0x0 0x100002 0x0 0x150005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x1c0005 0x0 0x0 0x0 0x0 0x0 0x1f0002 0x0 oops 0 +ciMethodData java/util/jar/Manifest read (Ljava/io/InputStream;)V 2 46583 orig 264 136 98 31 106 0 0 0 0 112 143 92 104 0 0 0 0 48 5 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 8 0 0 57 28 0 0 137 110 5 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 34 0 2 0 0 0 224 3 0 0 255 255 255 255 2 0 5 0 0 0 0 0 data 124 0x50002 0x387 0x150005 0x0 0x7f1c44d0 0x387 0x0 0x0 0x2c0005 0x0 0xeeb5b0a0 0xa85e 0x0 0x0 0x330007 0x387 0x370 0xa4da 0x3f0007 0xa4da 0x30 0x0 0x480002 0x0 0x4e0007 0x0 0x40 0xa4da 0x590007 0x0 0x20 0xa4da 0x610007 0xa4d4 0x58 0x6 0x660007 0x0 0x38 0x6 0x690003 0x6 0xffffffffffffff00 0x710007 0x200d 0xd8 0x84c7 0x780002 0x84c7 0x7f0007 0x84c7 0x30 0x0 0x880002 0x0 0x8d0005 0x0 0xeeb5b0a0 0x84c7 0x0 0x0 0x920007 0x64ba 0xe0 0x200d 0xa90002 0x200d 0xac0003 0x200d 0xfffffffffffffe28 0xc40002 0x200d 0xd20002 0x200d 0xd60005 0x0 0xeeb5b0a0 0x200d 0x0 0x0 0xdb0007 0x200d 0x38 0x0 0xe20003 0x0 0xfffffffffffffda0 0xf10002 0x200d 0xfc0005 0x0 0x6b8f7370 0x84c7 0x0 0x0 0x1030007 0x0 0x60 0x84c7 0x10c0002 0x84c7 0x1190005 0x0 0x7f1c47d0 0x84c7 0x0 0x0 0x1230005 0x0 0x7f1c44d0 0x84c7 0x0 0x0 0x12d0005 0x0 0x7f1c44d0 0x84c7 0x0 0x0 0x1390002 0x84c7 0x1440003 0x84c7 0xfffffffffffffc78 oops 8 4 java/util/jar/Attributes 10 java/util/jar/Manifest$FastInputStream 57 java/util/jar/Manifest$FastInputStream 76 java/util/jar/Manifest$FastInputStream 91 java/util/jar/Manifest 103 java/util/HashMap 109 java/util/jar/Attributes 115 java/util/jar/Attributes +ciMethodData java/nio/DirectLongBufferU get (I)J 2 5509 orig 264 136 98 31 106 0 0 0 0 216 146 117 104 0 0 0 0 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 41 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 112 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 14 0x60005 0x0 0xef078620 0x1405 0x0 0x0 0x90002 0x1405 0xc0005 0x0 0x0 0x0 0x0 0x0 oops 1 2 java/nio/DirectLongBufferU +ciMethodData java/nio/DirectLongBufferU put (IJ)Ljava/nio/LongBuffer; 2 6542 orig 264 136 98 31 106 0 0 0 0 64 149 117 104 0 0 0 0 208 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 113 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 112 0 0 0 255 255 255 255 5 0 6 0 0 0 0 0 data 14 0x60005 0x0 0xef078620 0x180e 0x0 0x0 0x90002 0x180e 0xd0005 0x0 0x0 0x0 0x0 0x0 oops 1 2 java/nio/DirectLongBufferU +ciMethodData java/io/ByteArrayOutputStream ()V 2 3407 orig 264 136 98 31 106 0 0 0 0 176 252 119 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 121 98 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 3 0 0 0 0 0 data 2 0x30002 0xc4f oops 0 +ciMethodData java/util/Hashtable (I)V 2 2475 orig 264 136 98 31 106 0 0 0 0 56 84 87 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 89 69 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 2 0x40002 0x8ab oops 0 +ciMethodData java/util/jar/Attributes ()V 1 1015 orig 264 136 98 31 106 0 0 0 0 184 79 119 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 185 23 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 3 0 0 0 0 0 data 2 0x30002 0x2f7 oops 0 +ciMethodData java/io/ByteArrayInputStream ([B)V 2 5930 orig 264 136 98 31 106 0 0 0 0 96 197 91 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 81 177 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x162a oops 0 +ciMethodData java/util/jar/JarVerifier ([B)V 1 792 orig 264 136 98 31 106 0 0 0 0 16 194 119 104 0 0 0 0 224 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 193 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 176 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 22 0x10002 0x218 0x1d0002 0x218 0x280002 0x218 0x330002 0x218 0x470002 0x218 0x570002 0x218 0x620002 0x218 0x6f0002 0x218 0x7a0002 0x218 0x850002 0x218 0x900002 0x218 oops 0 +ciMethodData java/util/jar/JarVerifier$3 (Ljava/util/jar/JarVerifier;)V 1 792 orig 264 136 98 31 106 0 0 0 0 216 244 119 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 193 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 6 0 0 0 0 0 data 2 0x60002 0x218 oops 0 +ciMethodData sun/security/util/ManifestEntryVerifier (Ljava/util/jar/Manifest;)V 1 957 orig 264 136 98 31 106 0 0 0 0 160 232 122 104 0 0 0 0 104 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 233 21 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 8 0x10002 0x2bd 0x1a0002 0x2bd 0x250002 0x2bd 0x300002 0x2bd oops 0 +ciMethodData java/lang/Throwable addSuppressed (Ljava/lang/Throwable;)V 1 0 orig 264 136 98 31 106 0 0 0 0 112 185 85 104 0 0 0 0 48 2 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 224 0 0 0 255 255 255 255 7 0 2 0 0 0 0 0 data 28 0x20007 0x0 0x30 0x0 0xc0002 0x0 0x110007 0x0 0x30 0x0 0x1a0002 0x0 0x220007 0x0 0x20 0x0 0x2d0007 0x0 0x30 0x0 0x360002 0x0 0x410005 0x0 0x0 0x0 0x0 0x0 oops 0 +ciMethodData java/net/URL toString ()Ljava/lang/String; 2 8396 orig 264 136 98 31 106 0 0 0 0 80 110 92 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 97 254 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 6 0x10005 0x0 0x6b8f72e0 0x1fcc 0x0 0x0 oops 1 2 java/net/URL +ciMethodData java/net/URL toExternalForm ()Ljava/lang/String; 2 8960 orig 264 136 98 31 106 0 0 0 0 232 110 92 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 16 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 6 0x50005 0x0 0xff200540 0x1b18 0xff2005f0 0x6e8 oops 2 2 sun/net/www/protocol/file/Handler 4 sun/net/www/protocol/jar/Handler +ciMethodData java/net/URLStreamHandler toExternalForm (Ljava/net/URL;)Ljava/lang/String; 2 5402 orig 264 136 98 31 106 0 0 0 0 8 39 111 104 0 0 0 0 144 9 0 0 224 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 209 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 51 0 2 0 0 0 64 8 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 264 0x10005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x40005 0x8a 0x6b8e66c0 0x1390 0x0 0x0 0xb0005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0xe0007 0x3d7 0x100 0x1043 0x120005 0x8a 0x6b8f72e0 0xfb9 0x0 0x0 0x150005 0x8a 0x6b8e66c0 0xfb9 0x0 0x0 0x180007 0x1043 0x80 0x0 0x1e0005 0x0 0x0 0x0 0x0 0x0 0x210005 0x0 0x0 0x0 0x0 0x0 0x280005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x2b0007 0x0 0x80 0x141a 0x300005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x330005 0x8a 0x6b8e66c0 0x1390 0x0 0x0 0x390005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x3c0007 0x141a 0x80 0x0 0x420005 0x0 0x0 0x0 0x0 0x0 0x450005 0x0 0x0 0x0 0x0 0x0 0x4c0005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x4f0007 0x141a 0x80 0x0 0x550005 0x0 0x0 0x0 0x0 0x0 0x580005 0x0 0x0 0x0 0x0 0x0 0x630002 0x141a 0x690005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x6c0005 0x8a 0x6b8f6a20 0x1390 0x0 0x0 0x730005 0x8a 0x6b8f6a20 0x1390 0x0 0x0 0x780005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x7b0007 0x3d7 0x130 0x1043 0x7f0005 0x8a 0x6b8f72e0 0xfb9 0x0 0x0 0x820005 0x8a 0x6b8e66c0 0xfb9 0x0 0x0 0x850007 0x1043 0xb0 0x0 0x8b0005 0x0 0x0 0x0 0x0 0x0 0x910005 0x0 0x0 0x0 0x0 0x0 0x940005 0x0 0x0 0x0 0x0 0x0 0x990005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0x9c0007 0x0 0x80 0x141a 0xa10005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0xa40005 0x8a 0x6b8f6a20 0x1390 0x0 0x0 0xa90005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0xac0007 0x141a 0xb0 0x0 0xb20005 0x0 0x0 0x0 0x0 0x0 0xb80005 0x0 0x0 0x0 0x0 0x0 0xbb0005 0x0 0x0 0x0 0x0 0x0 0xc00005 0x8a 0x6b8f72e0 0x1390 0x0 0x0 0xc30007 0x141a 0xb0 0x0 0xc90005 0x0 0x0 0x0 0x0 0x0 0xcf0005 0x0 0x0 0x0 0x0 0x0 0xd20005 0x0 0x0 0x0 0x0 0x0 0xd70005 0x8a 0x6b8f6a20 0x1390 0x0 0x0 oops 22 2 java/net/URL 8 java/lang/String 14 java/net/URL 24 java/net/URL 30 java/lang/String 52 java/net/URL 62 java/net/URL 68 java/lang/String 74 java/net/URL 96 java/net/URL 120 java/net/URL 126 java/lang/StringBuffer 132 java/lang/StringBuffer 138 java/net/URL 148 java/net/URL 154 java/lang/String 182 java/net/URL 192 java/net/URL 198 java/lang/StringBuffer 204 java/net/URL 232 java/net/URL 260 java/lang/StringBuffer +ciMethodData java/util/zip/ZipFile getInputStream (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; 2 5408 orig 264 136 98 31 106 0 0 0 0 32 104 115 104 0 0 0 0 40 4 0 0 176 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 161 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 38 0 2 0 0 0 216 2 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 91 0x10007 0x1420 0x30 0x0 0xa0002 0x0 0x190002 0x1420 0x200005 0x1 0xf7b57210 0x141f 0x0 0x0 0x230007 0x1420 0x98 0x0 0x2e0007 0x0 0x78 0x0 0x3d0005 0x0 0x0 0x0 0x0 0x0 0x410002 0x0 0x450003 0x0 0x58 0x540005 0x1 0xf7b57210 0x141f 0x0 0x0 0x580002 0x1420 0x5f0007 0x1420 0x20 0x0 0x6d0002 0x1420 0x730002 0x1420 0x760008 0x6 0x0 0x140 0x0 0x40 0x1 0x88 0x9f0005 0x0 0xeeb05e30 0xa 0x0 0x0 0xa80003 0xa 0x18 0xba0002 0x1416 0xc90007 0x1407 0x20 0xf 0xd50007 0x1416 0x20 0x0 0xde0002 0x1416 0xef0002 0x1416 0x1040005 0x0 0xeeb05e30 0x1416 0x0 0x0 0x10d0003 0x1416 0x18 0x1240002 0x0 oops 4 10 java/util/zip/ZipCoder 35 java/util/zip/ZipCoder 59 java/util/WeakHashMap 82 java/util/WeakHashMap +ciMethodData java/util/zip/ZipEntry getSize ()J 2 6627 orig 264 136 98 31 106 0 0 0 0 64 248 117 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 25 199 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData sun/misc/IOUtils readFully (Ljava/io/InputStream;IZ)[B 2 6110 orig 264 136 98 31 106 0 0 0 0 24 37 119 104 0 0 0 0 16 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 158 1 0 0 129 156 0 0 1 178 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 38 0 2 0 0 0 184 1 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 55 0x60007 0x1390 0x20 0x0 0x120007 0x1390 0x198 0x163f 0x190007 0x83 0x78 0x15bc 0x260002 0x15bc 0x320007 0x0 0x48 0x15bc 0x3b0002 0x15bc 0x3f0003 0x15bc 0x18 0x4f0005 0x11b2 0xc5e91290 0x47b 0xc5e91340 0x12 0x560007 0x163f 0xb8 0x0 0x5a0007 0x0 0x50 0x0 0x600007 0x0 0x30 0x0 0x690002 0x0 0x710007 0x0 0x60 0x0 0x770002 0x0 0x7b0003 0x0 0x30 0x850003 0x163f 0xfffffffffffffe80 oops 2 25 java/util/zip/ZipFile$ZipFileInflaterInputStream 27 java/util/zip/ZipFile$ZipFileInputStream +ciMethodData java/util/jar/JarFile getBytes (Ljava/util/zip/ZipEntry;)[B 1 1021 orig 264 136 98 31 106 0 0 0 0 128 40 116 104 0 0 0 0 160 3 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 217 23 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 19 0 2 0 0 0 80 2 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 74 0x20002 0x2fb 0xa0005 0x0 0xf7b53dc0 0x2f3 0xf7b53e70 0x8 0xf0002 0x2fb 0x150007 0x0 0x100 0x2fb 0x190007 0x2fb 0xb0 0x0 0x1d0005 0x0 0x0 0x0 0x0 0x0 0x200003 0x0 0x90 0x280005 0x0 0x0 0x0 0x0 0x0 0x2b0003 0x0 0x48 0x2f0005 0x0 0xc5e91290 0x2ed 0xc5e91340 0xe 0x400007 0x0 0x100 0x0 0x440007 0x0 0xb0 0x0 0x480005 0x0 0x0 0x0 0x0 0x0 0x4b0003 0x0 0x90 0x530005 0x0 0x0 0x0 0x0 0x0 0x560003 0x0 0x48 0x5a0005 0x0 0x0 0x0 0x0 0x0 oops 4 4 java/util/jar/JarFile$JarFileEntry 6 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 38 java/util/zip/ZipFile$ZipFileInflaterInputStream 40 java/util/zip/ZipFile$ZipFileInputStream +ciMethodData java/util/jar/JarFile getManifest ()Ljava/util/jar/Manifest; 2 5804 orig 264 136 98 31 106 0 0 0 0 216 32 116 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 0 0 0 193 178 0 0 1 0 0 0 131 13 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x1658 oops 0 +ciMethodData java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 2 6338 orig 264 136 98 31 106 0 0 0 0 216 33 116 104 0 0 0 0 248 2 0 0 200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 0 0 0 73 195 0 0 1 0 0 0 255 13 0 0 0 0 0 0 2 0 0 0 0 0 22 0 2 0 0 0 176 1 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 54 0x40007 0xa0 0x98 0x17c9 0xb0005 0x0 0x6b8e7580 0x17c9 0x0 0x0 0xe0004 0x0 0x6b8f7370 0x17c9 0x0 0x0 0x110003 0x17c9 0x18 0x170007 0x17c9 0x118 0xa0 0x1b0002 0xa0 0x20e007 0x6 0xe8 0x9c 0x270007 0x1 0x98 0x9b 0x2c0002 0x9b 0x390002 0x9b 0x3c0002 0x9b 0x440007 0x0 0x30 0x9b 0x4d0002 0x9b 0x530003 0x9b 0x38 0x5c0002 0x1 0x5f0002 0x1 0x690002 0x9c oops 2 6 java/lang/ref/SoftReference 12 java/util/jar/Manifest +ciMethodData java/util/jar/JarFile getManEntry ()Ljava/util/jar/JarEntry; 1 820 orig 264 136 98 31 106 0 0 0 0 72 42 116 104 0 0 0 0 232 2 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 161 17 0 0 17 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 15 0 2 0 0 0 160 1 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 52 0x40007 0x9a 0x1a0 0x19a 0xb0005 0x0 0xc590b0c0 0x198 0xf7b51c30 0x2 0x150007 0x194 0x150 0x6 0x190002 0x6 0x1e0007 0x4 0x120 0x2 0x260007 0x2 0x100 0x2 0x310005 0x0 0x6b8e66c0 0x2 0x0 0x0 0x340005 0x0 0x6b8e66c0 0x2 0x0 0x0 0x370007 0x2 0x68 0x0 0x3f0005 0x0 0x0 0x0 0x0 0x0 0x450003 0x0 0x30 0x4b0003 0x2 0xffffffffffffff18 oops 4 6 java/util/jar/JarFile 8 sun/net/www/protocol/jar/URLJarFile 26 java/lang/String 32 java/lang/String +ciMethodData java/lang/String toUpperCase (Ljava/util/Locale;)Ljava/lang/String; 2 30267 orig 264 136 98 31 106 0 0 0 0 120 103 84 104 0 0 0 0 80 6 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 2 0 0 185 58 0 0 73 159 3 0 0 0 0 0 0 0 0 0 2 0 0 0 3 0 72 0 2 0 0 0 0 5 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 160 0x10007 0x757 0x30 0x0 0x80002 0x0 0x160007 0x3e5 0x138 0x3cd9 0x250007 0x3cd9 0x98 0x0 0x2c0007 0x0 0x78 0x0 0x310005 0x0 0x0 0x0 0x0 0x0 0x380002 0x0 0x3d0003 0x0 0x18 0x450002 0x3cd9 0x4d0007 0x0 0x70 0x3cd9 0x540007 0x3967 0x38 0x372 0x570003 0x372 0x30 0x5f0003 0x3967 0xfffffffffffffee0 0x750002 0x372 0x790005 0x35 0xc5acf6d0 0x33d 0x0 0x0 0x820007 0x0 0x60 0x372 0x890007 0x0 0x40 0x372 0x900007 0x372 0x38 0x0 0x940003 0x0 0x18 0xa00007 0x372 0x2d0 0x3a83 0xb10007 0x3a83 0x98 0x0 0xb90007 0x0 0x78 0x0 0xbf0005 0x0 0x0 0x0 0x0 0x0 0xc60002 0x0 0xcb0003 0x0 0x18 0xd30007 0x3a83 0x48 0x0 0xda0002 0x0 0xdf0003 0x0 0x28 0xe40002 0x3a83 0xec0007 0x0 0x40 0x3a83 0xf30007 0x3a83 0x188 0x0 0xf90007 0x0 0x90 0x0 0xfe0007 0x0 0x48 0x0 0x1050002 0x0 0x10a0003 0x0 0x98 0x10f0002 0x0 0x1140003 0x0 0x70 0x11a0007 0x0 0x48 0x0 0x1280002 0x0 0x1310003 0x0 0xa8 0x1360002 0x0 0x1440007 0x0 0x30 0x0 0x15f0002 0x0 0x16d0007 0x0 0x38 0x0 0x1830003 0x0 0xffffffffffffffe0 0x1900003 0x0 0x18 0x1a50003 0x3a83 0xfffffffffffffd48 0x1b30002 0x372 oops 1 49 java/util/Locale +ciMethodData java/util/jar/JarFile getInputStream (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; 2 6451 orig 264 136 98 31 106 0 0 0 0 104 41 116 104 0 0 0 0 24 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 74 0 0 0 73 199 0 0 1 0 0 0 11 20 0 0 0 0 0 0 2 0 0 0 0 0 13 0 2 0 0 0 200 1 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 57 0x10002 0x18e9 0x80007 0x112 0x30 0x17d8 0xd0002 0x17d8 0x150007 0x90 0x60 0x82 0x190002 0x82 0x250007 0xa 0x30 0x78 0x2a0002 0x78 0x330002 0x9a 0x370004 0xffffffffffffffff 0xf7b53dc0 0x99 0xf7b53e70 0x1 0x3a0007 0x1 0x68 0x99 0x3e0004 0x0 0xf7b53dc0 0x99 0x0 0x0 0x410003 0x99 0x78 0x460005 0x0 0xf7b53e70 0x1 0x0 0x0 0x490005 0x0 0xf7b51c30 0x1 0x0 0x0 0x4e0002 0x9a 0x550002 0x9a oops 5 24 java/util/jar/JarFile$JarFileEntry 26 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 34 java/util/jar/JarFile$JarFileEntry 43 sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 49 sun/net/www/protocol/jar/URLJarFile +ciMethod sun/net/www/protocol/jar/URLJarFile getManifest ()Ljava/util/jar/Manifest; 25 6313 3 0 0 +ciMethod sun/net/www/protocol/jar/URLJarFile isSuperMan ()Z 25 1 3 0 -1 +ciMethodData sun/misc/URLClassPath getResource (Ljava/lang/String;Z)Lsun/misc/Resource; 2 29721 orig 264 136 98 31 106 0 0 0 0 56 142 111 104 0 0 0 0 32 3 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 8 0 0 249 27 0 0 113 91 3 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 9 0 2 0 0 0 200 1 0 0 255 255 255 255 7 0 3 0 0 0 0 0 data 57 0x30007 0x37f 0x120 0x0 0xd0002 0x0 0x120005 0x0 0x0 0x0 0x0 0x0 0x160005 0x0 0x0 0x0 0x0 0x0 0x1b0005 0x0 0x0 0x0 0x0 0x0 0x1e0005 0x0 0x0 0x0 0x0 0x0 0x210005 0x0 0x0 0x0 0x0 0x0 0x260002 0x37f 0x330002 0x6eed 0x380007 0x1f3 0x88 0x6cfa 0x3e0005 0x0 0xf7bd8df0 0x6cfa 0x0 0x0 0x450007 0x6b6e 0x20 0x18c 0x4e0003 0x6b6e 0xffffffffffffff80 oops 1 46 sun/misc/URLClassPath$JarLoader +ciMethodData java/lang/String concat (Ljava/lang/String;)Ljava/lang/String; 2 5406 orig 264 136 98 31 106 0 0 0 0 104 90 84 104 0 0 0 0 240 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 241 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 10 0 2 0 0 0 160 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 20 0x10005 0x2 0x6b8e66c0 0x141c 0x0 0x0 0x60007 0x141e 0x20 0x0 0x180002 0x141e 0x210005 0x2 0x6b8e66c0 0x141c 0x0 0x0 0x2b0002 0x141e oops 2 2 java/lang/String 14 java/lang/String +ciMethodData java/lang/String getChars ([CI)V 2 5450 orig 264 136 98 31 106 0 0 0 0 72 63 84 104 0 0 0 0 104 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 81 162 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 12 0 0 0 0 0 data 2 0xc0002 0x144a oops 0 +ciMethodData java/util/Hashtable addEntry (ILjava/lang/Object;Ljava/lang/Object;I)V 2 5386 orig 264 136 98 31 106 0 0 0 0 192 92 87 104 0 0 0 0 40 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 81 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 192 0 0 0 255 255 255 255 7 0 24 0 0 0 0 0 data 24 0x180007 0x13b3 0x80 0x57 0x1c0005 0x16 0xeeb07730 0x2 0x6b8e7a00 0x3f 0x260005 0x2 0x6b8e66c0 0x53 0xeeb06e10 0x2 0x480002 0x140a 0x4b0004 0x0 0x7f63d900 0x140a 0x0 0x0 oops 5 6 com/mathworks/services/Prefs$PrefsProperties 8 java/util/Properties 12 java/lang/String 14 org/apache/log4j/CategoryKey 20 java/util/Hashtable$Entry +ciMethodData java/util/Hashtable$Entry (ILjava/lang/Object;Ljava/lang/Object;Ljava/util/Hashtable$Entry;)V 2 5389 orig 264 136 98 31 106 0 0 0 0 96 154 98 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 97 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x140c oops 0 +ciMethodData java/util/jar/JarFile maybeInstantiateVerifier ()V 2 5810 orig 264 136 98 31 106 0 0 0 0 216 37 116 104 0 0 0 0 144 3 0 0 224 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 145 173 0 0 145 1 0 0 13 20 0 0 44 0 0 0 2 0 0 0 1 0 23 0 2 0 0 0 72 2 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 73 0x40007 0x150c 0x20 0xa6 0xc0007 0x14f3 0x228 0x19 0x100002 0x19 0x150007 0x0 0x1f8 0x19 0x1d0007 0x17 0x1d8 0x34 0x260005 0x4 0x6b8e66c0 0x30 0x0 0x0 0x2d0005 0x4 0x6b8e66c0 0x30 0x0 0x0 0x300007 0x0 0x110 0x34 0x360005 0x4 0x6b8e66c0 0x30 0x0 0x0 0x390007 0x0 0xc0 0x34 0x3f0005 0x4 0x6b8e66c0 0x30 0x0 0x0 0x420007 0x0 0x70 0x34 0x480005 0x4 0x6b8e66c0 0x30 0x0 0x0 0x4be007 0x32 0x50 0x4 0x4f0005 0x0 0xf7b51c30 0x2 0xc590b0c0 0x2 0x570003 0x32 0xfffffffffffffe40 oops 7 20 java/lang/String 26 java/lang/String 36 java/lang/String 46 java/lang/String 56 java/lang/String 66 sun/net/www/protocol/jar/URLJarFile 68 java/util/jar/JarFile +ciMethodData sun/misc/Resource cachedInputStream ()Ljava/io/InputStream; 2 13171 orig 264 136 98 31 106 0 0 0 0 80 60 119 104 0 0 0 0 152 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 153 147 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 80 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 10 0x40007 0x14c8 0x50 0x1dab 0x90005 0x0 0xef5175d0 0x1dab 0x0 0x0 oops 1 6 sun/misc/URLClassPath$JarLoader$2 +ciMethodData java/lang/ClassLoader getPackage (Ljava/lang/String;)Ljava/lang/Package; 2 8463 orig 264 136 98 31 106 0 0 0 0 192 94 85 104 0 0 0 0 96 3 0 0 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 97 0 1 0 1 0 0 0 71 20 0 0 0 0 0 0 2 0 0 0 0 0 23 0 2 0 0 0 16 2 0 0 255 255 255 255 5 0 12 0 0 0 0 0 data 66 0xc0005 0x0 0x7f1c47d0 0x200c 0x0 0x0 0xf0104 0x0 0xf7102890 0x16f3 0x0 0x0 0x150003 0x200c 0x18 0x200007 0x16f3 0x198 0x919 0x270007 0x475 0x68 0x4a4 0x2f0005 0x0 0x6b8f7520 0x464 0x6b8f7490 0x40 0x330003 0x4a4 0x28 0x370002 0x475 0x3ce007 0x918 0x100 0x2 0x4b0005 0x0 0x7f1c47d0 0x2 0x0 0x0 0x4e0104 0x0 0x0 0x0 0x0 0x0 0x550007 0x0 0x68 0x2 0x5e0005 0x0 0x7f1c47d0 0x2 0x0 0x0 0x620003 0x2 0x18 0x6a0003 0x2 0x18 oops 6 2 java/util/HashMap 8 java/lang/Package 25 sun/misc/Launcher$ExtClassLoader 27 sun/misc/Launcher$AppClassLoader 40 java/util/HashMap 56 java/util/HashMap +ciMethodData java/util/jar/Manifest (Ljava/io/InputStream;)V 1 377 orig 264 136 98 31 106 0 0 0 0 160 136 92 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 34 0 0 0 185 10 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 12 0x10002 0x157 0x90002 0x157 0x140002 0x157 0x1c0005 0x0 0x6b8f7370 0x157 0x0 0x0 oops 1 8 java/util/jar/Manifest +ciMethodData java/net/URLClassLoader$1 run ()Ljava/lang/Object; 2 13696 orig 264 136 98 31 106 0 0 0 0 104 238 114 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 1 160 1 0 1 0 0 0 0 31 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 6 0x10005 0x0 0x7f3ebb90 0x3400 0x0 0x0 oops 1 2 java/net/URLClassLoader$1 +ciMethodData java/net/URLClassLoader$1 run ()Ljava/lang/Class; 2 13566 orig 264 136 98 31 106 0 0 0 0 208 237 114 104 0 0 0 0 40 2 0 0 192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 241 155 1 0 1 0 0 0 180 30 0 0 0 0 0 0 2 0 0 0 0 0 7 0 2 0 0 0 224 0 0 0 255 255 255 255 5 0 8 0 0 0 0 0 data 28 0x80005 0x4c3 0x6b8e66c0 0x2ebb 0x0 0x0 0xd0005 0x4c3 0x6b8e66c0 0x2ebb 0x0 0x0 0x150002 0x337e 0x1a0005 0x0 0x7f3ef500 0x337e 0x0 0x0 0x1f0007 0x1db5 0x40 0x15c8 0x2b0002 0x15c8 0x390002 0x0 oops 3 2 java/lang/String 8 java/lang/String 16 sun/misc/URLClassPath +ciMethodData java/net/URLClassLoader access$100 (Ljava/net/URLClassLoader;Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 2 5764 orig 264 136 98 31 106 0 0 0 0 48 68 92 104 0 0 0 0 64 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 186 0 0 0 81 174 0 0 1 0 0 0 5 13 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 3 0 0 0 0 0 data 2 0x30002 0x15ca oops 0 +ciMethodData java/net/URLClassLoader defineClass (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 2 5766 orig 264 136 98 31 106 0 0 0 0 72 60 92 104 0 0 0 0 56 4 0 0 192 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 186 0 0 0 97 174 0 0 1 0 0 0 5 13 0 0 0 0 0 0 2 0 0 0 0 0 20 0 2 0 0 0 224 2 0 0 255 255 255 255 2 0 0 0 0 0 0 0 data 92 0x2 0x15cc 0x70005 0x84 0x6b8e66c0 0x1548 0x0 0x0 0xd0005 0x0 0xef5175d0 0x15cc 0x0 0x0 0x150007 0x0 0x90 0x15cc 0x1c0005 0x84 0x6b8e66c0 0x1548 0x0 0x0 0x220005 0x0 0xef5175d0 0x15cc 0x0 0x0 0x2e0002 0x15ce 0x320005 0x0 0xef5175d0 0x15ce 0x0 0x0 0x390007 0x15cc 0xd0 0x0 0x3d0005 0x0 0x0 0x0 0x0 0x0 0x4a0002 0x0 0x4f0002 0x0 0x530005 0x0 0x0 0x0 0x0 0x0 0x5c0005 0x0 0x0 0x0 0x0 0x0 0x610005 0x0 0xef5175d0 0x15cc 0x0 0x0 0x670005 0x0 0xef5175d0 0x15cc 0x0 0x0 0x740002 0x15cc 0x790002 0x15cd 0x7d0005 0x0 0xf7bd2350 0x15cc 0x0 0x0 0x8a0005 0xe1 0x6b8f7490 0x14a0 0x6b8f7250 0x4c oops 10 4 java/lang/String 10 sun/misc/URLClassPath$JarLoader$2 20 java/lang/String 26 sun/misc/URLClassPath$JarLoader$2 34 sun/misc/URLClassPath$JarLoader$2 66 sun/misc/URLClassPath$JarLoader$2 72 sun/misc/URLClassPath$JarLoader$2 82 sun/misc/PerfCounter 88 sun/misc/Launcher$AppClassLoader 90 java/net/URLClassLoader +ciMethodData java/lang/RuntimeException (Ljava/lang/String;)V 1 796 orig 264 136 98 31 106 0 0 0 0 72 200 85 104 0 0 0 0 56 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 209 24 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 2 0x20002 0x31a oops 0 +ciMethodData java/security/CodeSource getCertificates ()[Ljava/security/cert/Certificate; 2 5516 orig 264 136 98 31 106 0 0 0 0 8 209 92 104 0 0 0 0 176 3 0 0 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 97 160 0 0 41 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 10 0 2 0 0 0 104 2 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 77 0x40007 0x1405 0x80 0x7 0xb0005 0x0 0xc52ec7b0 0x7 0x0 0x0 0xe0004 0x0 0xc52ec7b0 0x7 0x0 0x0 0x160007 0x1400 0x1e8 0x5 0x1d0002 0x5 0x290007 0x5 0xc8 0x5 0x330005 0x0 0xf7bd1a50 0x5 0x0 0x0 0x360005 0x0 0xff5d27a0 0x5 0x0 0x0 0x390005 0x0 0x7f1c1da0 0x5 0x0 0x0 0x400003 0x5 0xffffffffffffff50 0x460005 0x0 0x7f1c1da0 0x5 0x0 0x0 0x4c0005 0x0 0x7f1c1da0 0x5 0x0 0x0 0x4f0004 0x0 0xc52ec7b0 0x5 0x0 0x0 0x590005 0x0 0xc52ec7b0 0x5 0x0 0x0 0x5c0004 0x0 0xc52ec7b0 0x5 0x0 0x0 oops 10 6 [Ljava/security/cert/Certificate; 12 [Ljava/security/cert/Certificate; 28 java/security/CodeSigner 34 sun/security/provider/certpath/X509CertPath 40 java/util/ArrayList 49 java/util/ArrayList 55 java/util/ArrayList 61 [Ljava/security/cert/Certificate; 67 [Ljava/security/cert/Certificate; 73 [Ljava/security/cert/Certificate; +ciMethodData java/util/ArrayList addAll (Ljava/util/Collection;)Z 2 6374 orig 264 136 98 31 106 0 0 0 0 96 141 96 104 0 0 0 0 216 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 0 0 0 17 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 18 0 2 0 0 0 136 0 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 17 0x10005 0xb3f 0x7f1c1da0 0xcc1 0xeeb08fa0 0x2 0x110002 0x1802 0x1f0002 0x1802 0x2d0007 0x3f 0x38 0x17c3 0x310003 0x17c3 0x18 oops 2 2 java/util/ArrayList 4 java/util/Collections$EmptyList +ciMethodData java/util/ArrayList toArray ([Ljava/lang/Object;)[Ljava/lang/Object; 2 5284 orig 264 136 98 31 106 0 0 0 0 72 134 96 104 0 0 0 0 64 2 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 59 0 0 0 73 163 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 240 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 30 0x60007 0xdc4 0x90 0x6a5 0x120005 0x40 0xff22c4b0 0x597 0xc5acf080 0xce 0x150002 0x6a5 0x180004 0x0 0xc5acf080 0x1 0xff22c5d0 0xd 0x270002 0xdc4 0x300007 0xdc4 0x50 0x0 0x390004 0x0 0x0 0x0 0x0 0x0 oops 4 6 [Ljava/awt/Component; 8 [Ljava/lang/String; 14 [Ljava/lang/String; 16 [Lsun/security/jca/ProviderConfig; +ciMethodData java/util/jar/JarFile initializeVerifier ()V 1 585 orig 264 136 98 31 106 0 0 0 0 104 39 116 104 0 0 0 0 184 5 0 0 160 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 0 0 0 81 5 0 0 225 16 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 112 4 0 0 255 255 255 255 2 0 3 0 0 0 0 0 data 142 0x30002 0xaa 0x80007 0x0 0x288 0xaa 0x100007 0xaa 0x268 0x21c 0x190005 0x21c 0x0 0x0 0x0 0x0 0x220005 0x21c 0x0 0x0 0x0 0x0 0x250007 0xaa 0x50 0x172 0x2a0002 0x172 0x2d0007 0x156 0x1a0 0x1c 0x340005 0x0 0xc590b0c0 0xc0 0xf7b51c30 0x6 0x3b0007 0xc6 0x30 0x0 0x440002 0x0 0x490007 0x1c 0x40 0xaa 0x510002 0xaa 0x540002 0xaa 0x5b0002 0xc6 0x620007 0x0 0xd0 0xc6 0x680007 0x0 0xb0 0xc6 0x720005 0x0 0xc5ac8b20 0xc6 0x0 0x0 0x830005 0x0 0xc5ac8b20 0xc6 0x0 0x0 0x8f0005 0x0 0xc5ac8b20 0xc6 0x0 0x0 0x950003 0x21c 0xfffffffffffffdb0 0x980003 0xaa 0x98 0xa90007 0x0 0x80 0x0 0xb10005 0x0 0x0 0x0 0x0 0x0 0xb50005 0x0 0x0 0x0 0x0 0x0 0xbc0007 0x0 0x140 0xaa 0xc30005 0x0 0xc5ac8b20 0xaa 0x0 0x0 0xc90007 0xaa 0x50 0x0 0xd10005 0x0 0x0 0x0 0x0 0x0 0xd80005 0x0 0xc5ac8b20 0xaa 0x0 0x0 0xdb0007 0xd 0x70 0x9d 0xe10007 0x9d 0x50 0x0 0xe90005 0x0 0x0 0x0 0x0 0x0 oops 7 34 java/util/jar/JarFile 36 sun/net/www/protocol/jar/URLJarFile 64 java/util/jar/JarVerifier 70 java/util/jar/JarVerifier 76 java/util/jar/JarVerifier 108 java/util/jar/JarVerifier 124 java/util/jar/JarVerifier +ciMethodData sun/misc/URLClassPath$JarLoader$2 getCodeSigners ()[Ljava/security/CodeSigner; 2 5396 orig 264 136 98 31 106 0 0 0 0 16 52 119 104 0 0 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 153 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 6 0x40005 0x0 0xf7b53dc0 0x1413 0x0 0x0 oops 1 2 java/util/jar/JarFile$JarFileEntry +ciMethodData java/net/URLClassLoader isSealed (Ljava/lang/String;Ljava/util/jar/Manifest;)Z 2 4995 orig 264 136 98 31 106 0 0 0 0 184 62 92 104 0 0 0 0 8 3 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 17 148 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 11 0 2 0 0 0 176 1 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 54 0x50005 0x1 0x6b8e66c0 0x1281 0x0 0x0 0xa0005 0x1 0x6b8e66c0 0x1281 0x0 0x0 0x100005 0x0 0x6b8f7370 0x1282 0x0 0x0 0x1a0007 0x1256 0x50 0x2c 0x220005 0x0 0x7f1c44d0 0x2c 0x0 0x0 0x290007 0x0 0xa0 0x1282 0x2d0005 0x0 0x6b8f7370 0x1282 0x0 0x0 0x330007 0x0 0x50 0x1282 0x3b0005 0x0 0x7f1c44d0 0x1282 0x0 0x0 0x440005 0x1 0x6b8e66c0 0x1281 0x0 0x0 oops 7 2 java/lang/String 8 java/lang/String 14 java/util/jar/Manifest 24 java/util/jar/Attributes 34 java/util/jar/Manifest 44 java/util/jar/Attributes 50 java/lang/String +ciMethodData java/net/URLClassLoader definePackageInternal (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)V 2 5656 orig 264 136 98 31 106 0 0 0 0 40 59 92 104 0 0 0 0 32 3 0 0 200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 1 0 0 241 166 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 192 1 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 56 0x40002 0x14de 0x70007 0x12e4 0x1b0 0x1fa 0xb0007 0x1 0x68 0x1f9 0x120005 0x9 0x6b8f7490 0x1e0 0x6b8f7250 0x10 0x160003 0x1f9 0x48 0x220005 0x0 0x6b8f7490 0x1 0x0 0x0 0x260003 0x1fa 0xf8 0x2f0002 0x0 0x320007 0x0 0xd0 0x0 0x3d0002 0x0 0x420005 0x0 0x0 0x0 0x0 0x0 0x460005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0x0 0x0 0x0 0x0 0x4c0002 0x0 oops 3 12 sun/misc/Launcher$AppClassLoader 14 java/net/URLClassLoader 21 sun/misc/Launcher$AppClassLoader +ciMethodData sun/misc/Resource getByteBuffer ()Ljava/nio/ByteBuffer; 2 7723 orig 264 136 98 31 106 0 0 0 0 184 62 119 104 0 0 0 0 8 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 1 0 0 137 231 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 10 0 2 0 0 0 192 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 24 0x10002 0x1cf1 0x60004 0xffffffffffffe30f 0xc5e91290 0x32 0x0 0x0 0x90007 0x1cf1 0x80 0x0 0xd0004 0x0 0x0 0x0 0x0 0x0 0x100005 0x0 0x0 0x0 0x0 0x0 oops 1 4 java/util/zip/ZipFile$ZipFileInflaterInputStream +ciMethodData java/security/CodeSource (Ljava/net/URL;[Ljava/security/CodeSigner;)V 2 5439 orig 264 136 98 31 106 0 0 0 0 32 206 92 104 0 0 0 0 232 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 1 0 0 41 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 6 0 2 0 0 0 144 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 18 0x10002 0x1405 0x190007 0x13ff 0x80 0x6 0x1e0005 0x0 0xf7bd2140 0x6 0x0 0x0 0x210004 0x0 0xf7bd2140 0x6 0x0 0x0 oops 2 8 [Ljava/security/CodeSigner; 14 [Ljava/security/CodeSigner; +ciMethodData sun/misc/PerfCounter getReadClassBytesTime ()Lsun/misc/PerfCounter; 2 5911 orig 264 136 98 31 106 0 0 0 0 0 249 116 104 0 0 0 0 24 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 1 0 0 233 174 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/security/SecureClassLoader getProtectionDomain (Ljava/security/CodeSource;)Ljava/security/ProtectionDomain; 2 6502 orig 264 136 98 31 106 0 0 0 0 88 66 86 104 0 0 0 0 152 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 1 0 0 89 193 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 13 0 2 0 0 0 72 2 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 73 0x10007 0x182b 0x20 0x0 0x140005 0x0 0x7f1c47d0 0x182b 0x0 0x0 0x170104 0x0 0x6b8e6d80 0x17bb 0x0 0x0 0x1c0007 0x17bb 0x1b0 0x70 0x210005 0x1 0x6b8f7490 0x67 0x6b8f7250 0x8 0x2f0002 0x70 0x390005 0x0 0x7f1c47d0 0x70 0x0 0x0 0x400007 0x70 0x120 0x0 0x4a0002 0x0 0x4f0005 0x0 0x0 0x0 0x0 0x0 0x530005 0x0 0x0 0x0 0x0 0x0 0x560005 0x0 0x0 0x0 0x0 0x0 0x590005 0x0 0x0 0x0 0x0 0x0 0x610005 0x0 0x0 0x0 0x0 0x0 0x660003 0x182b 0x18 oops 5 6 java/util/HashMap 12 java/security/ProtectionDomain 22 sun/misc/Launcher$AppClassLoader 24 java/net/URLClassLoader 30 java/util/HashMap +ciMethodData sun/misc/Resource getBytes ()[B 2 11265 orig 264 136 98 31 106 0 0 0 0 16 62 119 104 0 0 0 0 48 5 0 0 112 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 2 0 0 105 160 0 0 17 76 1 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 64 0 2 0 0 0 232 3 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 125 0x10002 0x140d 0x50002 0x140d 0xa0005 0x0 0xef5175d0 0x140d 0x0 0x0 0xf0003 0x140d 0x40 0x140002 0x0 0x1a0003 0x0 0xffffffffffffffa8 0x240007 0x140d 0x20 0x0 0x320007 0x140d 0x1a0 0x2982 0x390007 0x7b 0x78 0x2907 0x470002 0x2907 0x530007 0x0 0x48 0x2907 0x5c0002 0x2907 0x600003 0x2907 0x18 0x730005 0x4 0xc5e91290 0x2977 0xf7174bc0 0x7 0x780003 0x2982 0x28 0x7d0002 0x0 0x850007 0x2982 0x98 0x0 0x8c0007 0x0 0x30 0x0 0x950002 0x0 0x9d0007 0x0 0x60 0x0 0xa30002 0x0 0xa70003 0x0 0x30 0xb10003 0x2982 0xfffffffffffffe78 0xb50005 0x3 0xc5e91290 0x1404 0xf7174bc0 0x6 0xb80003 0x140d 0x30 0xbf0003 0x0 0x18 0xc50007 0x140d 0x138 0x0 0xc80002 0x0 0xcb0005 0x0 0x0 0x0 0x0 0x0 0xce0003 0x0 0xd8 0xd40005 0x0 0x0 0x0 0x0 0x0 0xd70003 0x0 0x30 0xde0003 0x0 0x18 0xe40007 0x0 0x60 0x0 0xe70002 0x0 0xea0005 0x0 0x0 0x0 0x0 0x0 oops 5 6 sun/misc/URLClassPath$JarLoader$2 43 java/util/zip/ZipFile$ZipFileInflaterInputStream 45 java/util/jar/JarVerifier$VerifierStream 76 java/util/zip/ZipFile$ZipFileInflaterInputStream 78 java/util/jar/JarVerifier$VerifierStream +ciMethodData java/security/SecureClassLoader defineClass (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class; 2 8390 orig 264 136 98 31 106 0 0 0 0 24 64 86 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 1 0 0 89 252 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 9 0 0 0 0 0 data 8 0x90002 0x1f8b 0xc0005 0xc4 0x6b8f7490 0x1e7b 0x6b8f7250 0x4c oops 2 4 sun/misc/Launcher$AppClassLoader 6 java/net/URLClassLoader +ciMethodData java/lang/ClassLoader defineClass (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; 2 6475 orig 264 136 98 31 106 0 0 0 0 184 68 85 104 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 59 1 0 0 129 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 15 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 8 0x40002 0x1810 0xc0002 0x1810 0x1b0002 0x1810 0x250002 0x1810 oops 0 +ciMethodData sun/misc/URLClassPath$JarLoader$2 getCodeSourceURL ()Ljava/net/URL; 2 5504 orig 264 136 98 31 106 0 0 0 0 32 49 119 104 0 0 0 0 88 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 1 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 16 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 2 0x40002 0x1400 oops 0 +ciMethodData sun/misc/URLClassPath$JarLoader$2 getManifest ()Ljava/util/jar/Manifest; 2 5775 orig 264 136 98 31 106 0 0 0 0 240 50 119 104 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 121 168 0 0 1 0 0 0 63 12 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 8 0x40002 0x150f 0x70005 0x0 0xc590b0c0 0x150f 0x0 0x0 oops 1 4 java/util/jar/JarFile +ciMethodData java/net/URLClassLoader getAndVerifyPackage (Ljava/lang/String;Ljava/util/jar/Manifest;Ljava/net/URL;)Ljava/lang/Package; 2 5586 orig 264 136 98 31 106 0 0 0 0 64 58 92 104 0 0 0 0 96 4 0 0 192 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 129 1 0 0 137 162 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 22 0 2 0 0 0 0 3 0 0 255 255 255 255 5 0 2 0 0 0 0 0 data 96 0x20005 0x1b 0x6b8f7490 0x13ea 0x6b8f7250 0x4c 0x90007 0x1e4 0x2d0 0x126d 0xe0005 0x0 0xf7102890 0x126d 0x0 0x0 0x110007 0x1240 0x150 0x2d 0x170005 0x0 0xf7102890 0x2d 0x0 0x0 0x1a0007 0x2d 0x230 0x0 0x250002 0x0 0x2a0005 0x0 0x0 0x0 0x0 0x0 0x2e0005 0x0 0x0 0x0 0x0 0x0 0x330005 0x0 0x0 0x0 0x0 0x0 0x360005 0x0 0x0 0x0 0x0 0x0 0x390002 0x0 0x3e0007 0x5 0x130 0x123b 0x440002 0x123b 0x470007 0x123b 0x100 0x0 0x520002 0x0 0x570005 0x0 0x0 0x0 0x0 0x0 0x5b0005 0x0 0x0 0x0 0x0 0x0 0x600005 0x0 0x0 0x0 0x0 0x0 0x630005 0x0 0x0 0x0 0x0 0x0 0x660002 0x0 oops 4 2 sun/misc/Launcher$AppClassLoader 4 java/net/URLClassLoader 12 java/lang/Package 22 java/lang/Package +ciMethodData java/lang/Package isSealed (Ljava/net/URL;)Z 1 59 orig 264 136 98 31 106 0 0 0 0 184 29 120 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 217 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 6 0x50005 0xe 0x6b8f72e0 0x2d 0x0 0x0 oops 1 2 java/net/URL +ciMethodData sun/misc/URLClassPath$JarLoader$2 getInputStream ()Ljava/io/InputStream; 2 5511 orig 264 136 98 31 106 0 0 0 0 192 49 119 104 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 1 0 0 17 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 64 0 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 8 0x40002 0x1402 0xb0005 0x0 0xc590b0c0 0x1402 0x0 0x0 oops 1 4 java/util/jar/JarFile +ciMethodData java/util/jar/JarFile$JarFileEntry getCodeSigners ()[Ljava/security/CodeSigner; 2 5396 orig 264 136 98 31 106 0 0 0 0 104 15 118 104 0 0 0 0 168 2 0 0 232 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 1 0 0 121 156 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 14 0 2 0 0 0 96 1 0 0 255 255 255 255 2 0 4 0 0 0 0 0 data 44 0x40002 0x138f 0x70003 0x138f 0x28 0x100002 0x0 0x180007 0x6 0x90 0x1389 0x1f0002 0x1389 0x220007 0x1389 0x60 0x0 0x2a0002 0x0 0x320005 0x0 0x0 0x0 0x0 0x0 0x3c0007 0x6 0x38 0x1389 0x400003 0x1389 0x78 0x470005 0x0 0xf7bd2140 0x6 0x0 0x0 0x4a0004 0x0 0xf7bd2140 0x6 0x0 0x0 oops 2 34 [Ljava/security/CodeSigner; 40 [Ljava/security/CodeSigner; +ciMethodData java/util/jar/JarFile access$200 (Ljava/util/jar/JarFile;)V 2 5421 orig 264 136 98 31 106 0 0 0 0 56 54 116 104 0 0 0 0 48 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 1 0 0 65 157 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 2 0x10002 0x13a8 oops 0 +ciMethodData java/lang/ClassLoader preDefineClass (Ljava/lang/String;Ljava/security/ProtectionDomain;)Ljava/security/ProtectionDomain; 2 6363 orig 264 136 98 31 106 0 0 0 0 168 66 85 104 0 0 0 0 56 4 0 0 96 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 190 1 0 0 233 184 0 0 1 0 0 0 100 20 0 0 0 0 0 0 2 0 0 0 0 0 16 0 2 0 0 0 224 2 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 92 0x20002 0x171d 0x50007 0x171d 0xd0 0x0 0x100002 0x0 0x150005 0x0 0x0 0x0 0x0 0x0 0x190005 0x0 0x0 0x0 0x0 0x0 0x1c0005 0x0 0x0 0x0 0x0 0x0 0x1f0002 0x0 0x240007 0x0 0x180 0x171d 0x2a0005 0xa5 0x6b8e66c0 0x1678 0x0 0x0 0x2d0007 0x171d 0x130 0x0 0x380002 0x0 0x3d0005 0x0 0x0 0x0 0x0 0x0 0x450005 0x0 0x0 0x0 0x0 0x0 0x480005 0x0 0x0 0x0 0x0 0x0 0x4b0005 0x0 0x0 0x0 0x0 0x0 0x4e0005 0x0 0x0 0x0 0x0 0x0 0x510002 0x0 0x56e007 0x16f3 0x20 0x2b 0x5f0007 0x0 0x60 0x171e 0x650005 0xa6 0x6b8e6d80 0x1678 0x0 0x0 0x680002 0x171e oops 2 34 java/lang/String 86 java/security/ProtectionDomain +ciMethodData java/lang/ClassLoader defineClassSourceLocation (Ljava/security/ProtectionDomain;)Ljava/lang/String; 2 6475 orig 264 136 98 31 106 0 0 0 0 80 67 85 104 0 0 0 0 80 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 1 0 0 105 188 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 32 0x10005 0x1 0x6b8e6d80 0x178c 0x0 0x0 0x80007 0x0 0xd0 0x178d 0xc0005 0x1 0x6b8f75b0 0x178c 0x0 0x0 0xf0007 0x1 0x80 0x178c 0x130005 0x1 0x6b8f75b0 0x178b 0x0 0x0 0x160005 0x1 0x6b8f72e0 0x178b 0x0 0x0 oops 4 2 java/security/ProtectionDomain 12 java/security/CodeSource 22 java/security/CodeSource 28 java/net/URL +ciMethodData java/lang/ClassLoader postDefineClass (Ljava/lang/Class;Ljava/security/ProtectionDomain;)V 2 6475 orig 264 136 98 31 106 0 0 0 0 248 67 85 104 0 0 0 0 88 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 190 1 0 0 105 188 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 255 255 255 255 5 0 1 0 0 0 0 0 data 32 0x10005 0x1 0x6b8e6d80 0x178c 0x0 0x0 0x40007 0x0 0xd0 0x178d 0x80005 0x1 0x6b8e6d80 0x178c 0x0 0x0 0xb0005 0x1 0x6b8f75b0 0x178c 0x0 0x0 0x100007 0x1777 0x50 0x16 0x160005 0x0 0x6b8f7490 0x16 0x0 0x0 oops 4 2 java/security/ProtectionDomain 12 java/security/ProtectionDomain 18 java/security/CodeSource 28 sun/misc/Launcher$AppClassLoader +ciMethodData java/lang/ClassLoader setSigners (Ljava/lang/Class;[Ljava/lang/Object;)V 1 22 orig 264 136 98 31 106 0 0 0 0 216 79 85 104 0 0 0 0 136 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 177 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 48 0 0 0 255 255 255 255 5 0 2 0 0 0 0 0 data 6 0x20005 0x0 0x6b8e6750 0x16 0x0 0x0 oops 1 2 java/lang/Class +ciMethodData java/lang/ClassLoader compareCerts ([Ljava/security/cert/Certificate;[Ljava/security/cert/Certificate;)Z 2 5507 orig 264 136 98 31 106 0 0 0 0 208 74 85 104 0 0 0 0 224 3 0 0 120 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 128 1 0 0 25 160 0 0 1 3 0 0 0 0 0 0 0 0 0 0 2 0 0 0 4 0 35 0 2 0 0 0 136 2 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 81 0x10007 0x13fb 0x40 0x8 0x60007 0x8 0x58 0x0 0xb0007 0x0 0x38 0x13fb 0xf0003 0x13fb 0x18 0x180007 0x8 0x20 0x0 0x240007 0x8 0xf8 0x17 0x300007 0x0 0xa0 0x30 0x3b0005 0x0 0x7f2ac8d0 0x30 0x0 0x0 0x3e0007 0x19 0x38 0x17 0x430003 0x17 0x30 0x490003 0x19 0xffffffffffffff78 0x4d0007 0x17 0x20 0x0 0x550003 0x17 0xffffffffffffff20 0x5f0007 0x8 0xf8 0x17 0x6b0007 0x0 0xa0 0x30 0x760005 0x0 0x7f2ac8d0 0x30 0x0 0x0 0x790007 0x19 0x38 0x17 0x7e0003 0x17 0x30 0x840003 0x19 0xffffffffffffff78 0x880007 0x17 0x20 0x0 0x900003 0x17 0xffffffffffffff20 oops 2 29 sun/security/x509/X509CertImpl 60 sun/security/x509/X509CertImpl +ciMethodData java/lang/ClassLoader checkCerts (Ljava/lang/String;Ljava/security/CodeSource;)V 2 6370 orig 264 136 98 31 106 0 0 0 0 176 73 85 104 0 0 0 0 112 5 0 0 136 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 17 183 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 31 0 2 0 0 0 24 4 0 0 255 255 255 255 5 0 3 0 0 0 0 0 data 131 0x30005 0x1 0x6b8e66c0 0x16e1 0x0 0x0 0x90007 0x16e2 0x38 0x0 0xe0003 0x0 0x48 0x140005 0x1 0x6b8e66c0 0x16e1 0x0 0x0 0x1d0007 0x0 0x50 0x16e2 0x210005 0x1 0x6b8f75b0 0x16e1 0x0 0x0 0x2d0007 0x1664 0x138 0x7e 0x3b0005 0x0 0x6b8e7a90 0x7e 0x0 0x0 0x400104 0x0 0xc52ec7b0 0x74 0x0 0x0 0x470007 0x74 0x88 0xa 0x520007 0x0 0x38 0xa 0x580003 0xa 0x18 0x5d0005 0x0 0x6b8e7a90 0xa 0x0 0x0 0x660003 0x7e 0x18 0x710003 0x7e 0xe0 0x780004 0x0 0xf7926f10 0x1664 0x0 0x0 0x7f0007 0x37 0x38 0x162d 0x850003 0x162d 0x18 0x8a0005 0x0 0xf7926f10 0x1664 0x0 0x0 0x8d0104 0x0 0xc52ec7b0 0x14d7 0x0 0x0 0x940007 0x197 0x130 0x154b 0x9c0002 0x154b 0x9f0007 0x154b 0x100 0x0 0xaa0002 0x0 0xaf0005 0x0 0x0 0x0 0x0 0x0 0xb30005 0x0 0x0 0x0 0x0 0x0 0xb80005 0x0 0x0 0x0 0x0 0x0 0xbb0005 0x0 0x0 0x0 0x0 0x0 0xbe0002 0x0 oops 9 2 java/lang/String 15 java/lang/String 25 java/security/CodeSource 35 java/util/Hashtable 41 [Ljava/security/cert/Certificate; 58 java/util/Hashtable 70 java/util/concurrent/ConcurrentHashMap 83 java/util/concurrent/ConcurrentHashMap 89 [Ljava/security/cert/Certificate; +ciMethod sun/security/x509/X509CertImpl getEncodedInternal (Ljava/security/cert/Certificate;)[B 4097 1 6237 0 -1 +ciMethod sun/security/provider/certpath/X509CertPath getCertificates ()Ljava/util/List; 1065 1 133 0 0 +ciMethod java/security/cert/CertPath getCertificates ()Ljava/util/List; 0 0 1 0 -1 +ciMethod java/util/jar/JarVerifier$VerifierStream (Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V 57 1 154 0 0 +ciMethodData java/security/cert/Certificate equals (Ljava/lang/Object;)Z 2 5142 orig 264 136 98 31 106 0 0 0 0 184 122 95 104 0 0 0 0 32 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 81 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 21 0 2 0 0 0 208 0 0 0 255 255 255 255 7 0 2 0 0 0 0 0 data 26 0x20007 0xbf4 0x20 0x816 0x80004 0x0 0x7f2ac8d0 0xbf4 0x0 0x0 0xb0007 0xbf4 0x20 0x0 0x110002 0xbf4 0x160004 0x0 0x7f2ac8d0 0xbf4 0x0 0x0 0x190002 0xbf4 0x1f0002 0xbf4 oops 2 6 sun/security/x509/X509CertImpl 18 sun/security/x509/X509CertImpl +instanceKlass com/mathworks/mlwidgets/util/productinfo/ProductInfoUtils$MatlabSimulinkGroupOrderComparator +instanceKlass com/mathworks/mlwidgets/util/productinfo/ProductInfoUtils$DisplayOrderComparator +instanceKlass com/mathworks/mde/desk/ContributedTools$ToolBoxToolSet$1 +instanceKlass com/mathworks/mlwidgets/util/productinfo/ProductInfoUtils$ProductInfoManager +instanceKlass com/mathworks/mlwidgets/util/productinfo/ProductInfoUtils +instanceKlass com/mathworks/mde/desk/StartupClassLoader$LoadInfo +instanceKlass org/apache/commons/io/Charsets +instanceKlass com/mathworks/mde/desk/StartupClassLoader$2 +instanceKlass com/icl/saxon/om/Name +instanceKlass com/icl/saxon/ContentEmitter +instanceKlass com/icl/saxon/charcode/UnicodeCharacterSet +instanceKlass com/icl/saxon/charcode/CharacterSetFactory +instanceKlass com/icl/saxon/tree/AttributeCollection +instanceKlass com/icl/saxon/charcode/CharacterSet +instanceKlass javax/xml/transform/sax/SAXResult +instanceKlass org/xml/sax/helpers/AttributesImpl +instanceKlass org/xml/sax/helpers/NamespaceSupport$Context +instanceKlass org/xml/sax/helpers/NamespaceSupport +instanceKlass javax/xml/transform/stream/StreamResult +instanceKlass javax/xml/transform/dom/DOMSource +instanceKlass net/sf/saxon/dom/DOMNodeList +instanceKlass net/sf/saxon/om/ArrayIterator +instanceKlass net/sf/saxon/expr/FilterIterator +instanceKlass net/sf/saxon/om/EmptyIterator +instanceKlass net/sf/saxon/om/AxisIteratorImpl +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$2 +instanceKlass net/sf/saxon/expr/ContextMappingIterator +instanceKlass net/sf/saxon/expr/StackFrame +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$2 +instanceKlass net/sf/saxon/om/SingletonIterator +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$1 +instanceKlass net/sf/saxon/om/LookaheadIterator +instanceKlass net/sf/saxon/om/GroundedIterator +instanceKlass net/sf/saxon/expr/LastPositionFinder +instanceKlass net/sf/saxon/expr/ReversibleIterator +instanceKlass org/apache/http/util/LangUtils +instanceKlass org/apache/http/nio/pool/LeaseRequest +instanceKlass org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager$InternalPoolEntryCallback +instanceKlass net/sf/saxon/StandardErrorListener +instanceKlass org/apache/http/impl/nio/client/AbstractClientExchangeHandler$1 +instanceKlass net/sf/saxon/trans/StandardUnparsedTextResolver +instanceKlass org/apache/http/impl/cookie/DefaultCookieSpec +instanceKlass org/apache/http/impl/cookie/BasicDomainHandler +instanceKlass net/sf/saxon/event/StandardOutputResolver +instanceKlass net/sf/saxon/instruct/Bindery +instanceKlass net/sf/saxon/trans/UnparsedTextURIResolver +instanceKlass org/apache/http/impl/cookie/RFC2109DomainHandler +instanceKlass net/sf/saxon/instruct/TailCall +instanceKlass org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler +instanceKlass net/sf/saxon/trans/Mode +instanceKlass org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler +instanceKlass org/apache/http/impl/cookie/AbstractCookieAttributeHandler +instanceKlass org/apache/http/impl/cookie/RFC2965PortAttributeHandler +instanceKlass org/apache/http/impl/cookie/PublicSuffixDomainFilter +instanceKlass org/apache/http/impl/cookie/RFC2965DomainAttributeHandler +instanceKlass net/sf/saxon/expr/XPathContextMinor +instanceKlass org/apache/http/impl/cookie/RFC2965VersionAttributeHandler +instanceKlass org/apache/http/cookie/SetCookie +instanceKlass org/apache/http/cookie/Cookie +instanceKlass org/apache/http/impl/cookie/AbstractCookieSpec +instanceKlass net/sf/saxon/om/AxisIterator +instanceKlass net/sf/saxon/dom/NodeWrapper +instanceKlass net/sf/saxon/om/SiblingCountingNode +instanceKlass net/sf/saxon/om/VirtualNode +instanceKlass org/apache/http/cookie/CookieOrigin +instanceKlass org/apache/http/client/utils/URIBuilder +instanceKlass org/apache/http/conn/routing/HttpRoute +instanceKlass org/apache/http/message/BasicRequestLine +instanceKlass org/apache/http/params/HttpProtocolParams +instanceKlass org/apache/http/params/CoreProtocolPNames +instanceKlass org/apache/http/impl/nio/client/InternalState +instanceKlass org/apache/http/impl/nio/client/AbstractClientExchangeHandler +instanceKlass java/nio/channels/spi/AbstractSelector$1 +instanceKlass org/apache/http/nio/protocol/HttpAsyncClientExchangeHandler +instanceKlass org/apache/http/auth/AuthState +instanceKlass org/apache/http/concurrent/BasicFuture +instanceKlass org/apache/http/nio/util/ContentInputBuffer +instanceKlass org/apache/http/nio/protocol/AbstractAsyncResponseConsumer +instanceKlass org/apache/http/nio/entity/EntityAsyncContentProducer +instanceKlass org/apache/http/nio/protocol/BasicAsyncRequestProducer +instanceKlass org/apache/http/nio/entity/HttpAsyncContentProducer +instanceKlass org/apache/http/nio/protocol/HttpAsyncResponseConsumer +instanceKlass org/apache/http/nio/protocol/HttpAsyncRequestProducer +instanceKlass org/apache/http/nio/client/methods/HttpAsyncMethods +instanceKlass org/apache/http/impl/nio/reactor/InterestOpsCallback +instanceKlass org/apache/http/impl/nio/reactor/SessionClosedCallback +instanceKlass org/apache/http/HttpHost +instanceKlass org/apache/http/util/Asserts +instanceKlass org/apache/http/client/utils/URIUtils +instanceKlass org/apache/http/protocol/BasicHttpContext +instanceKlass javax/xml/xpath/XPathConstants +instanceKlass org/apache/http/impl/nio/reactor/AbstractIODispatch +instanceKlass org/apache/http/protocol/HttpCoreContext +instanceKlass net/sf/saxon/xpath/XPathExpressionImpl +instanceKlass net/sf/saxon/sort/LocalOrderComparer +instanceKlass com/mathworks/eps/notificationclient/impl/results/AbstractResult +instanceKlass net/sf/saxon/sort/CodepointCollatingComparer +instanceKlass net/sf/saxon/sort/GenericAtomicComparer +instanceKlass net/sf/saxon/expr/EarlyEvaluationContext +instanceKlass com/mathworks/eps/notificationclient/api/faults/MessageFault +instanceKlass net/sf/saxon/sxpath/XPathStaticContext +instanceKlass com/mathworks/eps/notificationclient/api/results/SubscribeResult +instanceKlass com/mathworks/eps/notificationclient/api/results/Result +instanceKlass net/sf/saxon/expr/CollationMap +instanceKlass com/mathworks/eps/notificationclient/impl/results/ResultTypeFactory +instanceKlass net/sf/saxon/expr/Token +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationCallback +instanceKlass net/sf/saxon/type/ExternalObjectType +instanceKlass org/apache/http/nio/reactor/IOEventDispatch +instanceKlass org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase$1 +instanceKlass org/apache/http/ExceptionLogger$2 +instanceKlass org/apache/http/ExceptionLogger$1 +instanceKlass org/apache/http/ExceptionLogger +instanceKlass net/sf/saxon/expr/MonoIterator +instanceKlass org/apache/http/nio/protocol/HttpAsyncRequestExecutor +instanceKlass net/sf/saxon/expr/PromotionOffer +instanceKlass org/apache/http/impl/auth/HttpAuthenticator +instanceKlass net/sf/saxon/type/TypeHierarchy$ItemTypePair +instanceKlass net/sf/saxon/value/Cardinality +instanceKlass org/apache/http/conn/routing/BasicRouteDirector +instanceKlass org/apache/http/conn/routing/RouteInfo +instanceKlass org/apache/http/conn/routing/HttpRouteDirector +instanceKlass net/sf/saxon/expr/TypeChecker +instanceKlass org/apache/http/impl/nio/client/MainClientExec +instanceKlass net/sf/saxon/expr/RoleLocator +instanceKlass net/sf/saxon/type/TypeHierarchy +instanceKlass net/sf/saxon/expr/ExpressionVisitor +instanceKlass org/apache/http/client/config/RequestConfig$Builder +instanceKlass org/apache/http/client/config/RequestConfig +instanceKlass net/sf/saxon/expr/PairIterator +instanceKlass org/apache/http/impl/client/DefaultRedirectStrategy +instanceKlass org/apache/http/impl/client/BasicCredentialsProvider +instanceKlass org/apache/http/cookie/CookieIdentityComparator +instanceKlass org/apache/http/impl/client/BasicCookieStore +instanceKlass org/apache/http/impl/cookie/IgnoreSpecProvider +instanceKlass org/apache/http/impl/cookie/NetscapeDraftSpecProvider +instanceKlass org/apache/http/impl/cookie/RFC6265CookieSpecProvider +instanceKlass org/apache/http/cookie/CookieSpec +instanceKlass org/apache/http/impl/cookie/BasicPathHandler +instanceKlass org/apache/http/cookie/CommonCookieAttributeHandler +instanceKlass org/apache/http/cookie/CookieAttributeHandler +instanceKlass org/apache/http/impl/cookie/DefaultCookieSpecProvider +instanceKlass org/apache/http/cookie/CookieSpecProvider +instanceKlass org/apache/http/impl/auth/KerberosSchemeFactory +instanceKlass net/sf/saxon/expr/Optimizer +instanceKlass org/apache/http/impl/auth/SPNegoSchemeFactory +instanceKlass org/apache/http/impl/auth/NTLMSchemeFactory +instanceKlass org/apache/http/impl/auth/DigestSchemeFactory +instanceKlass org/apache/http/auth/AuthScheme +instanceKlass org/apache/http/impl/auth/BasicSchemeFactory +instanceKlass org/apache/http/auth/AuthSchemeProvider +instanceKlass org/apache/http/auth/AuthSchemeFactory +instanceKlass org/apache/http/impl/conn/DefaultRoutePlanner +instanceKlass net/sf/saxon/charcode/XMLCharacterData +instanceKlass org/apache/http/protocol/ImmutableHttpProcessor +instanceKlass org/apache/http/client/protocol/ResponseProcessCookies +instanceKlass net/sf/saxon/om/Axis +instanceKlass org/apache/http/client/protocol/RequestAuthCache +instanceKlass org/apache/http/protocol/HttpContext +instanceKlass org/apache/http/client/protocol/RequestAddCookies +instanceKlass org/apache/http/protocol/ChainBuilder +instanceKlass net/sf/saxon/sort/IntHashSet +instanceKlass net/sf/saxon/sort/IntSet +instanceKlass org/apache/http/client/protocol/RequestExpectContinue +instanceKlass org/apache/http/protocol/RequestUserAgent +instanceKlass org/apache/http/client/protocol/RequestClientConnControl +instanceKlass org/apache/http/protocol/RequestTargetHost +instanceKlass org/apache/http/protocol/RequestContent +instanceKlass org/apache/http/client/protocol/RequestDefaultHeaders +instanceKlass org/apache/http/protocol/HttpProcessor +instanceKlass org/apache/http/protocol/HttpProcessorBuilder +instanceKlass net/sf/saxon/expr/ExpressionParser$TemporaryContainer +instanceKlass org/apache/http/util/VersionInfo +instanceKlass org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler +instanceKlass net/sf/saxon/expr/Tokenizer +instanceKlass org/apache/http/client/AuthCache +instanceKlass org/apache/http/impl/client/AuthenticationStrategyImpl +instanceKlass org/apache/http/HeaderElementIterator +instanceKlass org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy +instanceKlass org/apache/http/TokenIterator +instanceKlass org/apache/http/impl/DefaultConnectionReuseStrategy +instanceKlass org/apache/http/nio/pool/AbstractNIOConnPool$InternalSessionRequestCallback +instanceKlass org/apache/http/impl/conn/SystemDefaultDnsResolver +instanceKlass org/apache/http/impl/conn/DefaultSchemePortResolver +instanceKlass org/apache/http/conn/DnsResolver +instanceKlass org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager$InternalAddressResolver +instanceKlass org/apache/http/nio/util/HeapByteBufferAllocator +instanceKlass org/apache/http/impl/EnglishReasonPhraseCatalog +instanceKlass org/apache/http/HttpResponse +instanceKlass org/apache/http/ReasonPhraseCatalog +instanceKlass org/apache/http/impl/DefaultHttpResponseFactory +instanceKlass org/apache/http/StatusLine +instanceKlass org/apache/http/ProtocolVersion +instanceKlass org/apache/http/message/BasicLineParser +instanceKlass org/apache/http/nio/NHttpMessageParser +instanceKlass org/apache/http/HttpResponseFactory +instanceKlass com/mathworks/mde/liveeditor/ActionManager$3 +instanceKlass org/apache/http/message/LineParser +instanceKlass org/apache/http/impl/nio/codecs/DefaultHttpResponseParserFactory +instanceKlass com/mathworks/mde/liveeditor/ActionManager$1 +instanceKlass org/apache/http/message/BasicLineFormatter +instanceKlass com/mathworks/mde/liveeditor/ActionManager$8 +instanceKlass org/apache/http/nio/NHttpMessageWriter +instanceKlass org/apache/http/message/LineFormatter +instanceKlass org/apache/http/impl/nio/codecs/DefaultHttpRequestWriterFactory +instanceKlass org/apache/http/impl/nio/NHttpConnectionBase +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceListener +instanceKlass org/apache/http/nio/reactor/SocketAccessor +instanceKlass org/apache/http/nio/reactor/SessionBufferStatus +instanceKlass com/mathworks/mde/liveeditor/ActionManager +instanceKlass org/apache/http/nio/NHttpClientIOTarget +instanceKlass net/sf/saxon/pattern/Pattern +instanceKlass net/sf/saxon/pattern/PatternFinder +instanceKlass sun/awt/image/ImageDecoder$1 +instanceKlass javax/swing/OverlayLayout +instanceKlass org/apache/http/nio/conn/ManagedNHttpClientConnection +instanceKlass org/apache/http/HttpInetConnection +instanceKlass org/apache/http/nio/NHttpClientConnection +instanceKlass org/apache/http/nio/NHttpConnection +instanceKlass org/apache/http/nio/IOControl +instanceKlass org/apache/http/HttpConnection +instanceKlass org/apache/http/nio/util/ByteBufferAllocator +instanceKlass org/apache/http/nio/NHttpMessageParserFactory +instanceKlass org/apache/http/nio/NHttpMessageWriterFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$5 +instanceKlass org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$4 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$7 +instanceKlass org/apache/http/nio/conn/NHttpConnectionFactory +instanceKlass org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager$InternalConnectionFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichTextComponent$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService$1 +instanceKlass org/apache/http/pool/PoolEntryCallback +instanceKlass net/sf/saxon/expr/ComparisonExpression +instanceKlass org/apache/http/nio/pool/RouteSpecificPool +instanceKlass org/apache/http/nio/reactor/SessionRequestCallback +instanceKlass org/apache/http/nio/pool/AbstractNIOConnPool +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$5 +instanceKlass net/sf/saxon/expr/ContextMappingFunction +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$4 +instanceKlass org/apache/http/pool/ConnPool +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$3 +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService$2 +instanceKlass com/mathworks/peermodel/events/PeerModelListener +instanceKlass org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager$ConfigData +instanceKlass org/apache/http/config/Registry +instanceKlass com/mathworks/services/actiondataservice/AbstractActionDataService +instanceKlass org/apache/http/nio/conn/NoopIOSessionStrategy +instanceKlass org/apache/http/config/RegistryBuilder +instanceKlass com/mathworks/services/actiondataservice/ActionDataService +instanceKlass com/mathworks/services/actiondataservice/ActionDataServiceFactory +instanceKlass net/sf/saxon/expr/ExpressionParser +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService$1 +instanceKlass org/apache/http/pool/PoolEntry +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ImageService +instanceKlass org/apache/http/nio/pool/NIOConnFactory +instanceKlass org/apache/http/nio/pool/SocketAddressResolver +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$2 +instanceKlass org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser$1 +instanceKlass org/apache/http/pool/ConnPoolControl +instanceKlass com/mathworks/mlwidgets/html/MatlabRequestDataListener +instanceKlass net/sf/saxon/expr/BindingReference +instanceKlass com/mathworks/html/ZoomMouseListener +instanceKlass org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor$Worker +instanceKlass org/apache/http/impl/nio/reactor/AbstractIOReactor +instanceKlass net/sf/saxon/instruct/Procedure +instanceKlass org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor$DefaultThreadFactory +instanceKlass sun/nio/ch/OptionKey +instanceKlass sun/nio/ch/SocketOptionRegistry$LazyInitialization +instanceKlass sun/nio/ch/SocketOptionRegistry$RegistryKey +instanceKlass sun/nio/ch/SocketOptionRegistry +instanceKlass jdk/net/SocketFlow +instanceKlass net/sf/saxon/instruct/TailCallReturner +instanceKlass sun/net/ExtendedOptionsImpl$$Lambda$23 +instanceKlass sun/net/ExtendedOptionsImpl +instanceKlass net/sf/saxon/expr/ExpressionTool +instanceKlass sun/nio/ch/ExtendedSocketOption$1 +instanceKlass sun/nio/ch/ExtendedSocketOption +instanceKlass sun/nio/ch/SocketChannelImpl$DefaultOptionsHolder +instanceKlass java/net/StandardSocketOptions$StdSocketOption +instanceKlass java/net/SocketOption +instanceKlass java/net/StandardSocketOptions +instanceKlass net/sf/saxon/xpath/XPathFunctionLibrary +instanceKlass net/sf/saxon/functions/ConstructorFunctionLibrary +instanceKlass com/mathworks/html/jxbrowser/chromium/TempDirPermissionUtils +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDownloadHandler +instanceKlass javax/print/attribute/PrintRequestAttributeSet +instanceKlass javax/print/attribute/Attribute +instanceKlass com/mathworks/html/jxbrowser/chromium/MWPrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultDialogHandler +instanceKlass net/sf/saxon/sort/IntToIntMap +instanceKlass com/teamdev/jxbrowser/chromium/swing/a +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/u +instanceKlass sun/nio/ch/Net$3 +instanceKlass sun/nio/ch/Net$4 +instanceKlass sun/nio/ch/Net$1 +instanceKlass java/net/ProtocolFamily +instanceKlass sun/nio/ch/Net +instanceKlass com/teamdev/jxbrowser/chromium/internal/TaskExecutor +instanceKlass sun/nio/ch/SelChImpl +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/NativeKeyCodes +instanceKlass java/nio/channels/NetworkChannel +instanceKlass com/teamdev/jxbrowser/chromium/internal/MouseDragEventConverter +instanceKlass sun/nio/ch/PipeImpl$Initializer$LoopbackConnector +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport$a +instanceKlass sun/nio/ch/PipeImpl$Initializer +instanceKlass java/nio/channels/Pipe +instanceKlass sun/nio/ch/NativeObject +instanceKlass sun/nio/ch/PollArrayWrapper +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/WidgetView$c +instanceKlass sun/nio/ch/WindowsSelectorImpl$FinishLock +instanceKlass sun/nio/ch/WindowsSelectorImpl$StartLock +instanceKlass sun/nio/ch/WindowsSelectorImpl$SubSelector +instanceKlass java/nio/channels/SelectionKey +instanceKlass sun/nio/ch/Util$3 +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/MemoryImage +instanceKlass com/teamdev/jxbrowser/chromium/swing/internal/DragAndDropSupport +instanceKlass com/teamdev/jxbrowser/chromium/KeyFilter +instanceKlass sun/nio/ch/DefaultSelectorProvider +instanceKlass com/teamdev/jxbrowser/chromium/events/ConsoleListener +instanceKlass com/teamdev/jxbrowser/chromium/events/StatusListener +instanceKlass com/teamdev/jxbrowser/chromium/events/RenderListener +instanceKlass com/teamdev/jxbrowser/chromium/events/PrintJobListener +instanceKlass java/nio/channels/spi/SelectorProvider$1 +instanceKlass java/nio/channels/spi/SelectorProvider +instanceKlass net/sf/saxon/sort/AtomicComparer +instanceKlass com/teamdev/jxbrowser/chromium/BrowserFunction +instanceKlass java/nio/channels/Selector +instanceKlass com/teamdev/jxbrowser/chromium/PopupHandler +instanceKlass com/teamdev/jxbrowser/chromium/LoadHTMLParams +instanceKlass com/teamdev/jxbrowser/chromium/events/TitleListener +instanceKlass org/apache/http/params/AbstractHttpParams +instanceKlass org/apache/http/params/HttpParamsNames +instanceKlass com/teamdev/jxbrowser/chromium/JSContext +instanceKlass com/teamdev/jxbrowser/chromium/SearchResult +instanceKlass com/teamdev/jxbrowser/chromium/SearchParams +instanceKlass net/sf/saxon/sort/DocumentOrderIterator +instanceKlass net/sf/saxon/sort/Sortable +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMNodeAtPoint +instanceKlass org/apache/http/nio/reactor/SessionRequest +instanceKlass com/teamdev/jxbrowser/chromium/LoadURLParams +instanceKlass com/teamdev/jxbrowser/chromium/ContextMenuHandler +instanceKlass com/teamdev/jxbrowser/chromium/LoadDataParams +instanceKlass org/apache/http/impl/nio/reactor/AbstractMultiworkerIOReactor +instanceKlass com/teamdev/jxbrowser/chromium/NavigationEntry +instanceKlass com/teamdev/jxbrowser/chromium/FullScreenHandler +instanceKlass org/apache/http/nio/reactor/ConnectingIOReactor +instanceKlass org/apache/http/nio/reactor/IOReactor +instanceKlass com/teamdev/jxbrowser/chromium/JSValue +instanceKlass org/apache/http/impl/nio/client/IOReactorUtils +instanceKlass com/teamdev/jxbrowser/chromium/internal/ReflectionUtil +instanceKlass org/apache/http/impl/nio/reactor/IOReactorConfig$Builder +instanceKlass com/teamdev/jxbrowser/chromium/internal/MacShortcutSupport +instanceKlass org/apache/http/impl/nio/reactor/IOReactorConfig +instanceKlass org/apache/http/conn/ssl/AbstractVerifier +instanceKlass java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry$DeactivationListener +instanceKlass com/teamdev/jxbrowser/chromium/events/DisposeListener +instanceKlass com/mathworks/html/jxbrowser/chromium/ActiveBrowserRegistry +instanceKlass java/util/regex/Pattern$CharPropertyNames +instanceKlass org/apache/http/nio/reactor/ssl/SSLSetupHandler +instanceKlass org/apache/http/nio/reactor/IOSession +instanceKlass com/teamdev/jxbrowser/chromium/u +instanceKlass org/apache/http/conn/ssl/X509HostnameVerifier +instanceKlass org/apache/http/nio/conn/ssl/SSLIOSessionStrategy +instanceKlass org/apache/commons/logging/impl/SimpleLog$1 +instanceKlass net/sf/saxon/type/ValidationFailure +instanceKlass org/apache/commons/logging/impl/SimpleLog +instanceKlass org/apache/commons/logging/Log +instanceKlass net/sf/saxon/om/UnfailingIterator +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$3 +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$1 +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$2 +instanceKlass org/apache/commons/logging/LogFactory$2 +instanceKlass org/apache/commons/logging/LogFactory$3 +instanceKlass org/apache/commons/logging/LogFactory$4 +instanceKlass org/apache/commons/logging/impl/WeakHashtable$Referenced +instanceKlass org/apache/commons/logging/LogFactory$1 +instanceKlass org/apache/commons/logging/LogFactory$6 +instanceKlass net/sf/saxon/om/StructuredQName +instanceKlass net/sf/saxon/functions/XSLTFunction +instanceKlass org/apache/commons/logging/LogFactory +instanceKlass net/sf/saxon/sort/CodepointCollator +instanceKlass net/sf/saxon/sort/SubstringMatcher +instanceKlass org/apache/http/conn/ssl/DefaultHostnameVerifier +instanceKlass net/sf/saxon/expr/Negatable +instanceKlass com/teamdev/jxbrowser/chromium/r +instanceKlass javax/net/ssl/KeyManagerFactorySpi +instanceKlass javax/net/ssl/KeyManagerFactory$1 +instanceKlass javax/net/ssl/KeyManagerFactory +instanceKlass sun/security/ssl/SSLContextImpl$DefaultManagersHolder$1 +instanceKlass net/sf/saxon/expr/StaticProperty +instanceKlass net/sf/saxon/type/Untyped +instanceKlass net/sf/saxon/type/AnyType +instanceKlass net/sf/saxon/type/ComplexType +instanceKlass sun/security/ssl/SSLContextImpl$DefaultManagersHolder +instanceKlass net/sf/saxon/sort/IntIterator +instanceKlass net/sf/saxon/sort/IntHashMap +instanceKlass sun/security/ssl/SSLContextImpl$CustomizedSSLProtocols +instanceKlass net/sf/saxon/type/BuiltInType +instanceKlass net/sf/saxon/type/AnySimpleType +instanceKlass org/apache/http/ssl/SSLContexts +instanceKlass org/apache/http/conn/util/PublicSuffixMatcher +instanceKlass org/apache/http/conn/util/PublicSuffixList +instanceKlass net/sf/saxon/type/BuiltInAtomicType +instanceKlass net/sf/saxon/value/SequenceType +instanceKlass net/sf/saxon/functions/StandardFunction$Entry +instanceKlass net/sf/saxon/functions/StandardFunction +instanceKlass net/sf/saxon/type/AnyItemType +instanceKlass net/sf/saxon/type/Type +instanceKlass org/apache/http/conn/util/PublicSuffixListParser +instanceKlass net/sf/saxon/functions/VendorFunctionLibrary +instanceKlass org/apache/http/conn/util/PublicSuffixMatcherLoader +instanceKlass net/sf/saxon/functions/SystemFunctionLibrary +instanceKlass net/sf/saxon/functions/FunctionLibraryList +instanceKlass net/sf/saxon/query/XQueryFunctionBinder +instanceKlass org/apache/http/impl/nio/client/InternalClientExec +instanceKlass org/apache/http/nio/NHttpClientEventHandler +instanceKlass org/apache/http/client/RedirectStrategy +instanceKlass org/apache/http/client/CookieStore +instanceKlass com/teamdev/jxbrowser/chromium/v +instanceKlass org/apache/http/config/Lookup +instanceKlass org/apache/http/conn/routing/HttpRoutePlanner +instanceKlass org/apache/http/HttpResponseInterceptor +instanceKlass org/apache/http/HttpRequestInterceptor +instanceKlass org/apache/http/conn/SchemePortResolver +instanceKlass org/apache/http/client/UserTokenHandler +instanceKlass org/apache/http/client/AuthenticationStrategy +instanceKlass org/apache/http/conn/ConnectionKeepAliveStrategy +instanceKlass org/apache/http/ConnectionReuseStrategy +instanceKlass org/apache/http/nio/conn/SchemeIOSessionStrategy +instanceKlass javax/net/ssl/HostnameVerifier +instanceKlass net/sf/saxon/instruct/SlotManager +instanceKlass org/apache/http/impl/nio/client/HttpAsyncClientBuilder +instanceKlass net/sf/saxon/instruct/Executable +instanceKlass org/apache/http/impl/nio/client/CloseableHttpAsyncClient +instanceKlass org/apache/http/nio/client/HttpPipeliningClient +instanceKlass org/apache/http/nio/client/HttpAsyncClient +instanceKlass net/sf/saxon/xpath/JAXPXPathStaticContext$MinimalNamespaceContext +instanceKlass org/apache/http/nio/conn/NHttpClientConnectionManager +instanceKlass org/apache/http/impl/nio/client/HttpAsyncClients +instanceKlass net/sf/saxon/instruct/LocationMap +instanceKlass org/apache/http/util/CharArrayBuffer +instanceKlass org/apache/http/util/TextUtils +instanceKlass net/sf/saxon/sxpath/AbstractStaticContext +instanceKlass org/apache/http/Consts +instanceKlass org/apache/http/entity/ContentType +instanceKlass javax/xml/xpath/XPathExpression +instanceKlass com/teamdev/jxbrowser/chromium/x +instanceKlass net/sf/saxon/expr/Container +instanceKlass org/apache/http/entity/AbstractHttpEntity +instanceKlass net/sf/saxon/expr/StaticContext +instanceKlass org/apache/http/message/BasicHeader +instanceKlass net/sf/saxon/xpath/XPathEvaluator +instanceKlass org/apache/http/util/Args +instanceKlass javax/xml/xpath/XPathFactoryFinder$1 +instanceKlass net/sf/saxon/exslt/Random +instanceKlass org/apache/http/HeaderIterator +instanceKlass org/apache/http/message/HeaderGroup +instanceKlass net/sf/saxon/exslt/Date +instanceKlass org/apache/http/RequestLine +instanceKlass org/apache/http/concurrent/Cancellable +instanceKlass org/apache/http/Header +instanceKlass org/apache/http/params/HttpParams +instanceKlass net/sf/saxon/type/ConversionResult +instanceKlass org/apache/http/message/AbstractHttpMessage +instanceKlass org/apache/http/client/methods/AbortableHttpRequest +instanceKlass com/teamdev/jxbrowser/chromium/internal/d +instanceKlass org/apache/http/client/methods/HttpExecutionAware +instanceKlass net/sf/saxon/exslt/Math +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/p +instanceKlass org/apache/http/client/methods/Configurable +instanceKlass net/sf/saxon/sort/NodeOrderComparer +instanceKlass org/apache/http/HttpEntityEnclosingRequest +instanceKlass net/sf/saxon/exslt/Sets +instanceKlass net/sf/saxon/exslt/Common +instanceKlass net/sf/saxon/sort/SortKeyEvaluator +instanceKlass net/sf/saxon/sort/StringCollator +instanceKlass net/sf/saxon/om/GroundedValue +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$3$1 +instanceKlass com/mathworks/appmanagement/UserAppToolSetFactory +instanceKlass com/google/gson/internal/ConstructorConstructor$8 +instanceKlass net/sf/saxon/value/Value +instanceKlass com/google/gson/internal/ConstructorConstructor$11 +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetAPSTokenRequestMsg$1 +instanceKlass com/mathworks/mde/apps/UserAppGuide$1 +instanceKlass com/mathworks/appmanagement/AppGalleryPathConfiguration +instanceKlass net/sf/saxon/type/AtomicType +instanceKlass net/sf/saxon/type/SimpleType +instanceKlass com/mathworks/mde/apps/UserAppGuide +instanceKlass net/sf/saxon/expr/XPathContext +instanceKlass com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl +instanceKlass net/sf/saxon/functions/Extensions +instanceKlass com/mathworks/appmanagement/AppManagementApiBuilder$1 +instanceKlass com/google/gson/internal/Primitives +instanceKlass com/google/gson/annotations/SerializedName +instanceKlass com/mathworks/appmanagement/AppManagementApi +instanceKlass com/google/gson/internal/UnsafeAllocator +instanceKlass com/google/gson/internal/ConstructorConstructor$12 +instanceKlass com/mathworks/appmanagement/AppManagementApiBuilder +instanceKlass com/google/gson/annotations/JsonAdapter +instanceKlass com/google/gson/internal/Streams +instanceKlass net/sf/saxon/functions/JavaExtensionLibrary +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory +instanceKlass net/sf/saxon/om/NamePool$NameEntry +instanceKlass com/google/gson/internal/bind/JsonAdapterAnnotationTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/MapTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/CollectionTypeAdapterFactory +instanceKlass net/sf/saxon/om/NamePool +instanceKlass com/google/gson/internal/bind/ArrayTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/SqlDateTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TimeTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/DateTypeAdapter$1 +instanceKlass net/sf/saxon/dom4j/DOM4JObjectModel +instanceKlass com/google/gson/internal/bind/ObjectTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TypeAdapters$26 +instanceKlass org/dom4j/Element +instanceKlass org/dom4j/Branch +instanceKlass org/dom4j/Node +instanceKlass com/google/gson/internal/bind/TypeAdapters$30 +instanceKlass com/google/gson/internal/bind/TypeAdapters$22 +instanceKlass com/google/gson/internal/bind/TypeAdapters$31 +instanceKlass com/google/gson/internal/bind/TypeAdapters$29 +instanceKlass net/sf/saxon/jdom/JDOMObjectModel +instanceKlass javax/xml/transform/dom/DOMResult +instanceKlass com/google/gson/internal/bind/TypeAdapters$28 +instanceKlass net/sf/saxon/om/DocumentInfo +instanceKlass net/sf/saxon/om/NodeInfo +instanceKlass net/sf/saxon/dom/DOMObjectModel +instanceKlass net/sf/saxon/expr/PJConverter +instanceKlass net/sf/saxon/expr/JPConverter +instanceKlass net/sf/saxon/dom/DOMEnvelope +instanceKlass net/sf/saxon/dom/NodeOverNodeInfo +instanceKlass com/google/gson/internal/bind/TypeAdapters +instanceKlass com/google/gson/internal/ObjectConstructor +instanceKlass com/google/gson/internal/ConstructorConstructor +instanceKlass com/google/gson/Gson$2 +instanceKlass com/google/gson/Gson$1 +instanceKlass com/google/gson/JsonSerializationContext +instanceKlass com/google/gson/JsonDeserializationContext +instanceKlass net/sf/saxon/trace/ExpressionPresenter +instanceKlass com/google/gson/Gson +instanceKlass net/sf/saxon/evpull/EventIterator +instanceKlass net/sf/saxon/expr/Binding +instanceKlass com/google/gson/JsonDeserializer +instanceKlass com/google/gson/TreeTypeAdapter$SingleTypeFactory +instanceKlass net/sf/saxon/expr/PathMap$PathMapNode +instanceKlass com/google/gson/stream/JsonReader +instanceKlass com/google/gson/stream/JsonWriter +instanceKlass com/mathworks/mlwidgets/array/ArrayDialog +instanceKlass com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl +instanceKlass com/google/gson/internal/$Gson$Types +instanceKlass com/google/gson/reflect/TypeToken +instanceKlass com/google/gson/InstanceCreator +instanceKlass com/google/gson/internal/$Gson$Preconditions +instanceKlass com/mathworks/eps/notificationclient/messages/utils/GsonUtils$LoginMessageSerializer +instanceKlass com/google/gson/JsonSerializer +instanceKlass net/sf/saxon/expr/Expression +instanceKlass net/sf/saxon/trace/InstructionInfo +instanceKlass net/sf/saxon/event/SaxonLocator +instanceKlass net/sf/saxon/event/LocationProvider +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/LoginRequestMsg +instanceKlass net/sf/saxon/expr/EvaluableItem +instanceKlass net/sf/saxon/expr/SequenceIterable +instanceKlass com/google/gson/JsonElement +instanceKlass net/sf/saxon/functions/JavaExtensionFunctionFactory +instanceKlass com/google/gson/TypeAdapter +instanceKlass com/google/gson/internal/Excluder +instanceKlass com/google/gson/TypeAdapterFactory +instanceKlass com/google/gson/FieldNamingStrategy +instanceKlass com/google/gson/GsonBuilder +instanceKlass com/mathworks/eps/notificationclient/messages/utils/GsonUtils +instanceKlass net/sf/saxon/trace/TraceListener +instanceKlass org/apache/http/client/methods/HttpUriRequest +instanceKlass org/apache/http/HttpRequest +instanceKlass org/apache/http/HttpMessage +instanceKlass org/apache/http/concurrent/FutureCallback +instanceKlass net/sf/saxon/event/Emitter +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationHttpTransporter +instanceKlass net/sf/saxon/event/SerializerFactory +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetAPSTokenRequest +instanceKlass net/sf/saxon/trans/DynamicLoader +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexArrayFactory +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetAPSTokenRequestMsg$Service +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetAPSTokenRequestMsg$Application +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetAPSTokenRequestMsg +instanceKlass net/sf/saxon/om/DocumentPool +instanceKlass net/sf/saxon/om/DocumentNumberAllocator +instanceKlass net/sf/saxon/query/StandardModuleURIResolver +instanceKlass com/mathworks/eps/notificationclient/messages/request/authnz/GetTokenRequestMetadata +instanceKlass net/sf/saxon/expr/MappingFunction +instanceKlass net/sf/saxon/om/Item +instanceKlass net/sf/saxon/evpull/PullEvent +instanceKlass net/sf/saxon/om/ValueRepresentation +instanceKlass net/sf/saxon/expr/ItemMappingFunction +instanceKlass com/mathworks/fl/i18n/MwLocaleManagementSystem +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalarFactory +instanceKlass net/sf/saxon/om/SequenceIterator +instanceKlass net/sf/saxon/pattern/NodeTest +instanceKlass net/sf/saxon/type/ItemType +instanceKlass net/sf/saxon/functions/StandardCollectionURIResolver +instanceKlass net/sf/saxon/sort/StandardCollationURIResolver +instanceKlass net/sf/saxon/om/NamespaceResolver +instanceKlass com/mathworks/eps/notificationclient/api/ProxyDetails +instanceKlass net/sf/saxon/event/SequenceReceiver +instanceKlass net/sf/saxon/StandardURIResolver +instanceKlass net/sf/saxon/NonDelegatingURIResolver +instanceKlass net/sf/saxon/functions/ExtensionFunctionFactory +instanceKlass net/sf/saxon/functions/FunctionLibrary +instanceKlass net/sf/saxon/regex/RegularExpression +instanceKlass net/sf/saxon/java/JavaPlatform +instanceKlass net/sf/saxon/query/ModuleURIResolver +instanceKlass net/sf/saxon/CollectionURIResolver +instanceKlass net/sf/saxon/sort/CollationURIResolver +instanceKlass com/mathworks/notification_client_util/MATLABNotificationClientParams$UtilityParamsProxyConfigurationVisitor +instanceKlass net/sf/saxon/Platform +instanceKlass net/sf/saxon/type/SchemaType +instanceKlass net/sf/saxon/type/SchemaComponent +instanceKlass net/sf/saxon/OutputURIResolver +instanceKlass net/sf/saxon/om/ExternalObjectModel +instanceKlass com/mathworks/widgets/spreadsheet/data/ValueSummaryFactory +instanceKlass com/mathworks/matlab_login/LoginMessages +instanceKlass com/mathworks/matlab_login/LoginInfo +instanceKlass net/sf/saxon/event/Builder +instanceKlass net/sf/saxon/event/Receiver +instanceKlass net/sf/saxon/om/NameChecker +instanceKlass net/sf/saxon/Configuration +instanceKlass net/sf/saxon/SourceResolver +instanceKlass javax/xml/xpath/XPath +instanceKlass javax/xml/xpath/XPathFactoryFinder$2 +instanceKlass javax/xml/xpath/SecuritySupport$8 +instanceKlass javax/xml/xpath/SecuritySupport$2 +instanceKlass javax/xml/xpath/XPathFactoryFinder +instanceKlass javax/xml/xpath/SecuritySupport$1 +instanceKlass javax/xml/xpath/SecuritySupport +instanceKlass javax/xml/xpath/XPathFactory +instanceKlass com/icl/saxon/output/SaxonOutputKeys +instanceKlass com/mathworks/internal/activationws/client/MWAResponse +instanceKlass com/icl/saxon/om/DocumentPool +instanceKlass com/mathworks/internal/activationws/client/ArrayOfString +instanceKlass com/icl/saxon/style/StandardNames +instanceKlass com/icl/saxon/om/NamePool$NameEntry +instanceKlass com/icl/saxon/om/NamePool +instanceKlass com/mathworks/mlservices/WorkspaceVariable +instanceKlass com/icl/saxon/expr/Expression +instanceKlass com/icl/saxon/om/DocumentInfo +instanceKlass com/icl/saxon/expr/StaticContext +instanceKlass org/apache/axis2/client/Stub +instanceKlass javax/xml/transform/SourceLocator +instanceKlass com/icl/saxon/om/AxisEnumeration +instanceKlass com/icl/saxon/expr/LastPositionFinder +instanceKlass com/icl/saxon/om/NodeEnumeration +instanceKlass com/icl/saxon/pattern/Pattern +instanceKlass com/icl/saxon/om/NodeInfo +instanceKlass com/icl/saxon/output/Emitter +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ServiceResponse +instanceKlass com/mathworks/webservices/client/core/http/HttpRequest +instanceKlass com/icl/saxon/output/Outputter +instanceKlass com/icl/saxon/StandardErrorListener +instanceKlass com/mathworks/webservices/client/core/auth/ProxyServerCredentialsProvider +instanceKlass org/xml/sax/helpers/XMLFilterImpl +instanceKlass com/mathworks/matlab_login/LoginWorkspace$MyProxyConfigurationVisitor +instanceKlass com/icl/saxon/StandardURIResolver +instanceKlass org/apache/commons/httpclient/HttpHost +instanceKlass javax/xml/transform/ErrorListener +instanceKlass javax/net/SocketFactory +instanceKlass javax/xml/transform/URIResolver +instanceKlass javax/xml/transform/sax/TransformerHandler +instanceKlass com/icl/saxon/sort/NodeOrderComparer +instanceKlass sun/security/validator/KeyStores +instanceKlass javax/net/ssl/X509ExtendedTrustManager +instanceKlass javax/net/ssl/X509TrustManager +instanceKlass javax/xml/transform/Transformer +instanceKlass javax/xml/transform/Templates +instanceKlass javax/xml/transform/sax/TemplatesHandler +instanceKlass org/xml/sax/XMLFilter +instanceKlass com/icl/saxon/DOMDriver +instanceKlass sun/security/ssl/TrustManagerFactoryImpl$1 +instanceKlass java/security/KeyStore$1 +instanceKlass sun/security/ssl/TrustManagerFactoryImpl$2 +instanceKlass javax/net/ssl/TrustManagerFactorySpi +instanceKlass javax/net/ssl/TrustManagerFactory$1 +instanceKlass javax/xml/transform/SecuritySupport$1 +instanceKlass javax/net/ssl/TrustManagerFactory +instanceKlass javax/xml/transform/SecuritySupport$2 +instanceKlass javax/net/ssl/X509ExtendedKeyManager +instanceKlass javax/net/ssl/X509KeyManager +instanceKlass javax/net/ssl/KeyManager +instanceKlass javax/xml/transform/SecuritySupport +instanceKlass sun/security/ssl/SSLSessionContextImpl$1 +instanceKlass sun/security/ssl/SSLSessionContextImpl +instanceKlass javax/net/ssl/SSLSessionContext +instanceKlass javax/xml/transform/FactoryFinder +instanceKlass sun/security/ssl/EphemeralKeyManager$EphemeralKeyPair +instanceKlass sun/security/ssl/EphemeralKeyManager +instanceKlass javax/xml/transform/TransformerFactory +instanceKlass sun/security/ssl/CipherSuiteList +instanceKlass sun/security/ssl/SSLAlgorithmDecomposer$1 +instanceKlass com/mathworks/widgets/desk/DTSelectionManager$OrderComparator +instanceKlass java/security/spec/ECGenParameterSpec +instanceKlass sun/security/util/ECKeySizeParameterSpec +instanceKlass sun/security/util/SecurityProviderConstants +instanceKlass java/security/KeyPairGeneratorSpi +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$OccupantState +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$State +instanceKlass sun/security/x509/CertificatePolicyMap +instanceKlass com/mathworks/mde/desk/MLDesktop$9$1 +instanceKlass sun/security/util/ECUtil +instanceKlass java/security/interfaces/ECPublicKey +instanceKlass java/security/interfaces/ECKey +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserEvent +instanceKlass sun/security/provider/JavaKeyStore$TrustedCertEntry +instanceKlass sun/security/provider/KeyStoreDelegator$1 +instanceKlass java/security/KeyStoreSpi +instanceKlass java/security/KeyStore +instanceKlass sun/security/util/AnchorCertificates$1 +instanceKlass sun/security/util/AnchorCertificates +instanceKlass java/security/cert/TrustAnchor +instanceKlass sun/security/x509/X509CertImpl$$Lambda$22 +instanceKlass sun/security/util/UntrustedCertificates$1 +instanceKlass sun/security/util/UntrustedCertificates +instanceKlass java/security/cert/PKIXCertPathChecker +instanceKlass java/security/cert/CertPathChecker +instanceKlass javax/crypto/JarVerifier$JarHolder +instanceKlass javax/crypto/JarVerifier$2 +instanceKlass javax/crypto/KeyAgreement +instanceKlass sun/security/ssl/JsseJce$EcAvailability +instanceKlass sun/security/ssl/CipherSuite$MacAlg +instanceKlass javax/crypto/JceSecurity$2 +instanceKlass javax/crypto/JceSecurityManager$1 +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadAdapter +instanceKlass javax/crypto/spec/RC5ParameterSpec +instanceKlass com/teamdev/jxbrowser/chromium/w +instanceKlass javax/crypto/spec/RC2ParameterSpec +instanceKlass com/teamdev/jxbrowser/chromium/internal/PluginManagerImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCacheStorage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCookieStorage +instanceKlass com/teamdev/jxbrowser/chromium/internal/DialogHandlerDelegate +instanceKlass java/security/spec/DSAParameterSpec +instanceKlass java/security/interfaces/DSAParams +instanceKlass java/security/interfaces/DSAPrivateKey +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter$a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageUIDGenerator +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelIDGenerator +instanceKlass com/teamdev/jxbrowser/chromium/internal/ProxyParams +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/o +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannel +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageField +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageSerializer +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessagesBufferIterator +instanceKlass java/net/Socket$2 +instanceKlass java/net/Socket$3 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Channel +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/n +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelReader +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelStream +instanceKlass com/mathworks/installservicehandler/JsonPassThroughServiceHandler +instanceKlass com/mathworks/matlab_login/LoginService +instanceKlass com/mathworks/installservicehandler/InstallService +instanceKlass org/apache/xerces/impl/xs/AttributePSVImpl +instanceKlass org/apache/xerces/xs/AttributePSVI +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/TagName +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/SAXConnector +instanceKlass javax/xml/bind/UnmarshallerHandler +instanceKlass com/sun/xml/internal/bind/v2/util/FatalAdapter +instanceKlass org/apache/xerces/jaxp/validation/ValidatorHandlerImpl$ResolutionForwarder +instanceKlass org/xml/sax/ext/EntityResolver2 +instanceKlass org/apache/xerces/util/AttributesProxy +instanceKlass org/apache/xerces/util/SAXLocatorWrapper +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator$LocalIDKey +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator$ValueStoreBase +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator$ValueStoreCache +instanceKlass org/apache/xerces/util/IntStack +instanceKlass org/apache/xerces/impl/xs/identity/XPathMatcher +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator$XPathMatcherStack +instanceKlass org/apache/xerces/impl/xs/XSNotationDecl +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator$XSIErrorReporter +instanceKlass org/apache/xerces/impl/xs/ElementPSVImpl +instanceKlass org/apache/xerces/xs/ElementPSVI +instanceKlass org/apache/xerces/impl/xs/identity/ValueStore +instanceKlass javax/xml/validation/TypeInfoProvider +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/ValidatingUnmarshaller +instanceKlass org/apache/xerces/util/SecurityManager +instanceKlass com/sun/xml/internal/bind/v2/util/XmlFactory$1 +instanceKlass com/sun/xml/internal/bind/v2/util/XmlFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/UnmarshallingContext$State +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Scope +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/LocatorExWrapper +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/LocatorEx +instanceKlass com/sun/xml/internal/bind/v2/runtime/Coordinator +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/XmlVisitor$TextPredictor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/XmlVisitor +instanceKlass javax/xml/namespace/NamespaceContext +instanceKlass com/sun/xml/internal/bind/IDResolver +instanceKlass javax/xml/bind/helpers/DefaultValidationEventHandler +instanceKlass javax/xml/bind/helpers/AbstractUnmarshallerImpl +instanceKlass javax/xml/bind/ValidationEventHandler +instanceKlass org/apache/xerces/jaxp/validation/ValidatorHelper +instanceKlass javax/xml/validation/ValidatorHandler +instanceKlass javax/xml/validation/Validator +instanceKlass org/apache/xerces/impl/dtd/models/CMStateSet +instanceKlass org/apache/xerces/impl/xs/models/XSDFACM +instanceKlass org/apache/xerces/impl/xs/XSConstraints$1 +instanceKlass org/apache/xerces/impl/xs/XSConstraints +instanceKlass org/apache/xerces/impl/xs/opti/NamedNodeMapImpl +instanceKlass org/apache/xerces/impl/xs/XSAnnotationImpl +instanceKlass org/apache/xerces/impl/xs/traversers/XSDAbstractParticleTraverser$ParticleArray +instanceKlass org/apache/xerces/xs/XSAnnotation +instanceKlass org/apache/xerces/impl/xs/traversers/Container +instanceKlass sun/security/validator/EndEntityChecker +instanceKlass org/apache/xerces/impl/xs/traversers/OneAttr +instanceKlass org/apache/xerces/impl/xs/util/XSObjectListImpl$1 +instanceKlass sun/security/validator/Validator +instanceKlass org/apache/xerces/impl/xs/XSWildcardDecl +instanceKlass org/apache/xerces/impl/xs/identity/IdentityConstraint +instanceKlass org/apache/xerces/xs/XSIDCDefinition +instanceKlass sun/security/util/Pem +instanceKlass org/apache/xerces/xs/XSNamedMap +instanceKlass javax/crypto/JarVerifier$1 +instanceKlass javax/crypto/JarVerifier +instanceKlass javax/crypto/CryptoPolicyParser$CryptoPermissionEntry +instanceKlass javax/crypto/CryptoPolicyParser$GrantEntry +instanceKlass java/io/StreamTokenizer +instanceKlass javax/crypto/CryptoPolicyParser +instanceKlass java/util/zip/ZipFile$ZipEntryIterator +instanceKlass java/util/jar/JarFile$JarEntryIterator +instanceKlass javax/crypto/JceSecurity$1 +instanceKlass javax/crypto/JceSecurity +instanceKlass javax/crypto/Cipher +instanceKlass sun/security/krb5/Realm +instanceKlass sun/security/krb5/PrincipalName +instanceKlass sun/security/ssl/JsseJce$1 +instanceKlass sun/security/ssl/JsseJce +instanceKlass sun/security/ssl/CipherSuite$BulkCipher +instanceKlass org/apache/xerces/impl/xpath/regex/Token +instanceKlass sun/security/ssl/CipherSuite +instanceKlass sun/security/ssl/SSLAlgorithmConstraints +instanceKlass org/apache/xerces/impl/xpath/regex/REUtil +instanceKlass sun/security/ssl/ProtocolVersion +instanceKlass sun/security/ssl/ProtocolList +instanceKlass sun/security/ssl/Debug +instanceKlass sun/security/ssl/SunJSSE$1 +instanceKlass org/apache/xerces/impl/xpath/regex/Op +instanceKlass org/apache/xerces/impl/xpath/regex/RegexParser +instanceKlass org/apache/xerces/impl/xpath/regex/RegularExpression +instanceKlass java/security/spec/ECFieldF2m +instanceKlass java/security/spec/ECParameterSpec +instanceKlass java/security/spec/AlgorithmParameterSpec +instanceKlass java/security/spec/ECPoint +instanceKlass java/security/spec/EllipticCurve +instanceKlass org/apache/xerces/impl/dv/xs/DecimalDV$XDecimal +instanceKlass org/apache/xerces/xs/datatypes/XSDecimal +instanceKlass java/security/spec/ECFieldFp +instanceKlass org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl$2 +instanceKlass java/security/spec/ECField +instanceKlass org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl$1 +instanceKlass sun/security/ec/CurveDB +instanceKlass sun/security/ec/SunECEntries +instanceKlass org/apache/xerces/xs/datatypes/XSQName +instanceKlass org/apache/xerces/impl/dv/util/ByteListImpl +instanceKlass org/apache/xerces/xs/datatypes/ByteList +instanceKlass sun/security/ec/SunEC$1 +instanceKlass java/security/interfaces/DSAPublicKey +instanceKlass java/security/interfaces/DSAKey +instanceKlass java/security/spec/DSAPublicKeySpec +instanceKlass java/security/AlgorithmParametersSpi +instanceKlass java/security/AlgorithmParameters +instanceKlass sun/security/x509/RFC822Name +instanceKlass org/apache/xerces/impl/dv/xs/AbstractDateTimeDV$DateTimeData +instanceKlass org/apache/xerces/xs/datatypes/XSDateTime +instanceKlass javax/xml/datatype/DatatypeFactory +instanceKlass javax/net/ssl/SSLContextSpi +instanceKlass javax/net/ssl/SSLContext +instanceKlass com/mathworks/webservices/client/core/http/HttpsProtocolSocketFactory +instanceKlass org/apache/xerces/impl/dv/xs/TypeValidator +instanceKlass org/apache/commons/codec/net/URLCodec +instanceKlass org/apache/commons/codec/StringDecoder +instanceKlass org/apache/commons/codec/StringEncoder +instanceKlass org/apache/commons/codec/BinaryDecoder +instanceKlass org/apache/commons/codec/Decoder +instanceKlass org/apache/commons/codec/BinaryEncoder +instanceKlass org/apache/commons/codec/Encoder +instanceKlass org/apache/xerces/impl/dv/ValidatedInfo +instanceKlass org/apache/commons/httpclient/util/EncodingUtil +instanceKlass org/apache/xerces/xs/ShortList +instanceKlass org/apache/xerces/xs/datatypes/ObjectList +instanceKlass org/apache/commons/httpclient/URI$LocaleToCharsetMap +instanceKlass org/apache/xerces/impl/dv/XSFacets +instanceKlass org/apache/xerces/util/SymbolHash$Entry +instanceKlass org/apache/xerces/util/SymbolHash +instanceKlass org/apache/xerces/impl/dv/SchemaDVFactory +instanceKlass org/apache/xerces/impl/xs/XSGroupDecl +instanceKlass org/apache/xerces/xs/XSWildcard +instanceKlass org/apache/xerces/impl/xs/util/XSObjectListImpl +instanceKlass org/apache/xerces/xs/XSObjectList +instanceKlass org/apache/commons/httpclient/URI +instanceKlass org/apache/xerces/xs/XSModelGroupDefinition +instanceKlass org/apache/xerces/xs/XSNotationDeclaration +instanceKlass org/apache/xerces/xs/StringList +instanceKlass org/apache/xerces/impl/xs/util/XIntPool +instanceKlass com/mathworks/webservices/authenticationws/client/rest/raw/RawByteResponseHandler +instanceKlass org/apache/xerces/impl/xs/util/XInt +instanceKlass org/apache/xerces/impl/xs/traversers/XSAttributeChecker +instanceKlass org/apache/xerces/impl/xs/traversers/XSDHandler$XSDKey +instanceKlass org/apache/xerces/util/DOMUtil +instanceKlass org/apache/xerces/impl/xs/SchemaSymbols +instanceKlass org/apache/xerces/impl/ExternalSubsetResolver +instanceKlass com/mathworks/webservices/authenticationws/client/rest/http/ContentTypeBaseHandler +instanceKlass org/apache/xerces/util/XMLGrammarPoolImpl$Entry +instanceKlass javax/xml/validation/SchemaFactoryFinder$1 +instanceKlass org/apache/xerces/jaxp/validation/XMLSchemaFactory$XMLGrammarPoolWrapper +instanceKlass org/apache/xerces/util/DOMEntityResolverWrapper +instanceKlass org/apache/xerces/jaxp/validation/DraconianErrorHandler +instanceKlass org/apache/xerces/impl/xs/XSAttributeUseImpl +instanceKlass org/apache/xerces/xs/XSAttributeUse +instanceKlass org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl +instanceKlass org/apache/xerces/impl/dv/XSSimpleType +instanceKlass org/apache/xerces/impl/xs/XSComplexTypeDecl +instanceKlass org/apache/xerces/xs/XSComplexTypeDefinition +instanceKlass org/apache/xerces/impl/xs/XSModelGroupImpl +instanceKlass org/apache/xerces/xs/XSModelGroup +instanceKlass org/apache/xerces/impl/xs/XSDeclarationPool +instanceKlass org/apache/xerces/impl/xs/opti/SchemaDOMParser$BooleanStack +instanceKlass org/apache/xerces/impl/xs/opti/DefaultXMLDocumentHandler +instanceKlass org/apache/xerces/impl/xs/util/SimpleLocator +instanceKlass org/apache/xerces/impl/xs/traversers/XSDocumentInfo +instanceKlass org/apache/xerces/impl/xs/XSParticleDecl +instanceKlass org/apache/xerces/xs/XSParticle +instanceKlass com/sun/xml/internal/bind/v2/runtime/FilterTransducer +instanceKlass org/apache/xerces/impl/xs/opti/DefaultNode +instanceKlass org/apache/xerces/impl/xs/XSAttributeGroupDecl +instanceKlass org/apache/xerces/xs/XSAttributeGroupDefinition +instanceKlass org/apache/xerces/impl/xs/XSAttributeDecl +instanceKlass org/apache/xerces/xs/XSAttributeDeclaration +instanceKlass org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser +instanceKlass org/apache/xerces/impl/xs/traversers/XSDHandler +instanceKlass javax/xml/bind/annotation/XmlSchemaType$DEFAULT +instanceKlass org/apache/xerces/impl/xs/models/XSEmptyCM +instanceKlass org/apache/xerces/impl/xs/models/XSCMValidator +instanceKlass org/apache/xerces/impl/xs/models/CMBuilder +instanceKlass org/apache/xerces/impl/dtd/models/CMNode +instanceKlass org/apache/xerces/impl/xs/models/CMNodeFactory +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler$OneSubGroup +instanceKlass org/apache/xerces/impl/xs/XSElementDecl +instanceKlass org/apache/xerces/xs/XSElementDeclaration +instanceKlass org/apache/xerces/xs/XSTerm +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler +instanceKlass org/apache/xerces/impl/xs/XSGrammarBucket +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/package-info +instanceKlass org/apache/xerces/impl/xs/XSMessageFormatter +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ResendVerificationCodeDetailResponse +instanceKlass org/apache/xerces/util/DefaultErrorHandler +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/Token +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/MfaPendingToken +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ReferenceDetail +instanceKlass org/w3c/dom/DOMStringList +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/StandardResponse +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ErrorResponse +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/Error +instanceKlass org/apache/xerces/impl/xs/SchemaGrammar +instanceKlass org/apache/xerces/xs/XSNamespaceItem +instanceKlass org/apache/xerces/xni/grammars/XSGrammar +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ObjectFactory +instanceKlass org/apache/xerces/xni/grammars/XMLSchemaDescription +instanceKlass org/apache/xerces/xs/XSModel +instanceKlass org/apache/xerces/impl/xs/XMLSchemaLoader +instanceKlass org/apache/xerces/xs/XSLoader +instanceKlass com/mathworks/webservices/authenticationws/client/rest/xml/JaxbResponseHandler +instanceKlass javax/xml/transform/sax/SAXSource +instanceKlass javax/xml/transform/stream/StreamSource +instanceKlass org/apache/xerces/util/XMLGrammarPoolImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/a +instanceKlass javax/xml/validation/Schema +instanceKlass org/apache/xerces/jaxp/validation/XSGrammarPoolContainer +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcessLogger +instanceKlass com/sun/xml/internal/bind/v2/model/impl/GetterSetterPropertySeed +instanceKlass java/lang/ProcessImpl$2 +instanceKlass javax/xml/validation/SchemaFactoryFinder$2 +instanceKlass javax/xml/validation/SecuritySupport$8 +instanceKlass javax/xml/validation/SecuritySupport$2 +instanceKlass javax/xml/validation/SchemaFactoryFinder +instanceKlass javax/xml/validation/SecuritySupport$1 +instanceKlass com/mathworks/webservices/client/core/http/HttpHeader +instanceKlass javax/xml/validation/SecuritySupport +instanceKlass javax/xml/validation/SchemaFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameList +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Intercepter +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/ChildLoader +instanceKlass com/sun/xml/internal/bind/api/impl/NameUtil +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty$ReceiverImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/LibraryLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader$1 +instanceKlass com/sun/xml/internal/bind/api/impl/NameConverter +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/UnmarshallerChain +instanceKlass java/lang/Package$1PackageInfoProxy +instanceKlass javax/xml/bind/annotation/W3CDomHandler +instanceKlass javax/xml/bind/annotation/DomHandler +instanceKlass com/mathworks/webservices/client/core/MathWorksServiceResponse +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeArrayInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ArrayInfo +instanceKlass com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl$1 +instanceKlass javax/xml/bind/JAXBElement$GlobalScope +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils +instanceKlass com/mathworks/webservices/client/core/xml/ErrorMessage +instanceKlass com/mathworks/webservices/client/core/xml/JaxbResponseHandler +instanceKlass org/apache/commons/httpclient/util/IdleConnectionHandler +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/TagAndType +instanceKlass com/sun/xml/internal/bind/v2/runtime/LifecycleMethods +instanceKlass org/apache/commons/httpclient/MultiThreadedHttpConnectionManager$ConnectionPool +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$8 +instanceKlass org/apache/commons/httpclient/HttpConnection +instanceKlass org/apache/commons/httpclient/MultiThreadedHttpConnectionManager +instanceKlass org/apache/commons/httpclient/HostConfiguration +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory +instanceKlass org/apache/commons/httpclient/HttpState +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor +instanceKlass org/apache/commons/httpclient/DefaultHttpMethodRetryHandler +instanceKlass org/apache/commons/httpclient/HttpMethodRetryHandler +instanceKlass org/apache/commons/httpclient/SimpleHttpConnectionManager +instanceKlass com/sun/xml/internal/bind/v2/runtime/Name +instanceKlass org/apache/commons/httpclient/HttpVersion +instanceKlass org/apache/commons/httpclient/params/DefaultHttpParamsFactory +instanceKlass org/apache/commons/httpclient/params/HttpParamsFactory +instanceKlass org/apache/commons/httpclient/params/DefaultHttpParams +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/AccessorInjector +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Ref +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Bean +instanceKlass com/sun/xml/internal/bind/v2/bytecode/ClassTailor +instanceKlass org/apache/commons/logging/impl/SimpleLog$1 +instanceKlass org/apache/commons/logging/impl/SimpleLog +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory +instanceKlass org/apache/commons/logging/Log +instanceKlass com/sun/xml/internal/bind/v2/ClassFactory +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$1 +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$2 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister$2 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/ListIterator +instanceKlass org/apache/commons/logging/LogFactory$2 +instanceKlass org/apache/commons/logging/LogFactory$3 +instanceKlass org/apache/commons/logging/LogFactory$4 +instanceKlass org/apache/commons/logging/impl/WeakHashtable$Referenced +instanceKlass org/apache/commons/logging/LogFactory$1 +instanceKlass org/apache/commons/logging/LogFactory$6 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory$1 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeMapPropertyInfo +instanceKlass org/apache/commons/logging/LogFactory +instanceKlass com/sun/xml/internal/bind/v2/model/core/MapPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeReferencePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ReferencePropertyInfo +instanceKlass org/apache/commons/httpclient/params/HttpParams +instanceKlass org/apache/commons/httpclient/HttpClient +instanceKlass org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/DefaultProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/Protocol +instanceKlass org/apache/commons/httpclient/HttpConnectionManager +instanceKlass org/apache/commons/httpclient/protocol/SecureProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/ProtocolSocketFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory +instanceKlass org/apache/commons/httpclient/Credentials +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Property +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/StructureLoaderBuilder +instanceKlass org/apache/commons/httpclient/HttpMethod +instanceKlass com/mathworks/webservices/client/core/http/MathWorksHttpClient +instanceKlass com/sun/xml/internal/bind/v2/runtime/AttributeAccessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader +instanceKlass javax/xml/bind/Marshaller +instanceKlass javax/xml/bind/Unmarshaller +instanceKlass com/sun/xml/internal/bind/v2/runtime/JaxBeanInfo +instanceKlass com/mathworks/webservices/authenticationws/client/rest/request/BaseLoginServiceRequest +instanceKlass com/mathworks/webservices/authenticationws/client/rest/http/ResponseHandler +instanceKlass com/sun/xml/internal/bind/v2/util/FlattenIterator +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl$PropertyImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementInfo +instanceKlass com/mathworks/webservices/client/core/http/ResponseHandler +instanceKlass com/mathworks/webservices/client/core/MathWorksWebServiceClient +instanceKlass javax/xml/bind/annotation/XmlElementDecl$GLOBAL +instanceKlass javax/xml/bind/annotation/XmlSeeAlso +instanceKlass java/util/Collections$1 +instanceKlass com/mathworks/webservices/client/core/ClientConfiguration +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeRefImpl +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClient +instanceKlass com/mathworks/webservices/client/core/WebServiceClient +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/TODO +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClientFactory +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AttributePropertyInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeAttributePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElementRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/AttributePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElementRef +instanceKlass com/sun/xml/internal/bind/annotation/XmlLocation +instanceKlass com/mathworks/matlab_login/WebServiceProxy +instanceKlass javax/xml/bind/annotation/XmlSchemaTypes +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ParameterizedTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$BinderArg +instanceKlass com/mathworks/internal/activationws/client/ActivationService +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapters +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Util +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/PropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/FieldPropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl$RuntimePropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationSource +instanceKlass com/mathworks/matlab_login/LoginWorkspace +instanceKlass com/mathworks/matlab_login/MatlabLogin$3 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Accessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Receiver +instanceKlass javax/xml/bind/annotation/XmlElement$DEFAULT +instanceKlass com/mathworks/eps/notificationclient/impl/utils/NotificationLog +instanceKlass com/sun/xml/internal/bind/AccessorFactoryImpl +instanceKlass com/sun/xml/internal/bind/InternalAccessorFactory +instanceKlass com/sun/xml/internal/bind/AccessorFactory +instanceKlass javax/xml/bind/annotation/XmlAccessorOrder +instanceKlass javax/xml/bind/annotation/XmlNs +instanceKlass com/mathworks/installservicehandler/xml/package-info +instanceKlass com/sun/xml/internal/bind/annotation/OverrideAnnotationOf +instanceKlass javax/xml/bind/annotation/XmlMixed +instanceKlass javax/xml/bind/annotation/XmlAnyElement +instanceKlass javax/xml/bind/annotation/XmlElements +instanceKlass javax/xml/bind/annotation/XmlAnyAttribute +instanceKlass javax/xml/bind/annotation/XmlList +instanceKlass javax/xml/bind/annotation/XmlElementWrapper +instanceKlass javax/xml/bind/annotation/XmlAttachmentRef +instanceKlass javax/xml/bind/annotation/XmlMimeType +instanceKlass javax/xml/bind/annotation/XmlInlineBinaryData +instanceKlass com/mathworks/apache/commons/lang3/text/StrTokenizer +instanceKlass javax/xml/bind/annotation/XmlIDREF +instanceKlass javax/xml/bind/annotation/XmlID +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoImpl +instanceKlass com/mathworks/apache/commons/lang3/text/StrBuilder +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/Element +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeClassInfo +instanceKlass com/mathworks/widgets/text/MarkPair +instanceKlass com/mathworks/apache/commons/lang3/text/StrLookup +instanceKlass com/sun/xml/internal/bind/v2/model/core/ClassInfo +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageModel$CodeAnalyzerMessage +instanceKlass com/mathworks/matlab/api/editor/EditorMessage +instanceKlass javax/xml/bind/annotation/XmlType$DEFAULT +instanceKlass javax/xml/bind/annotation/XmlAccessorType +instanceKlass com/mathworks/apache/commons/lang3/StringUtils +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/MethodLocatable +instanceKlass javax/xml/bind/JAXBElement +instanceKlass com/mathworks/installservicehandler/xml/ServiceType +instanceKlass com/mathworks/installservicehandler/xml/ServiceConfigType +instanceKlass com/mathworks/installservicehandler/xml/ServiceContainerType +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RegistryInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/model/core/RegistryInfo +instanceKlass com/mathworks/apache/commons/lang3/text/StrMatcher +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/SecureLoader +instanceKlass javax/xml/bind/annotation/XmlValue +instanceKlass javax/xml/bind/annotation/XmlType +instanceKlass javax/xml/bind/annotation/XmlTransient +instanceKlass javax/xml/bind/annotation/XmlSchemaType +instanceKlass javax/xml/bind/annotation/XmlRootElement +instanceKlass javax/xml/bind/annotation/XmlEnum +instanceKlass javax/xml/bind/annotation/XmlElementRefs +instanceKlass com/mathworks/apache/commons/lang3/text/StrSubstitutor +instanceKlass sun/swing/plaf/synth/SynthIcon +instanceKlass javax/xml/bind/annotation/XmlElementRef +instanceKlass javax/xml/bind/annotation/XmlElementDecl +instanceKlass javax/xml/bind/annotation/XmlElement +instanceKlass javax/xml/bind/annotation/XmlAttribute +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Quick +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Init +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/LocatableAnnotation +instanceKlass javax/xml/bind/annotation/XmlRegistry +instanceKlass com/sun/xml/internal/bind/v2/model/core/Ref +instanceKlass com/sun/xml/internal/bind/api/CompositeStructure +instanceKlass com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationsException$Builder +instanceKlass com/sun/xml/internal/bind/v2/runtime/RuntimeUtil +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AnyTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl$1 +instanceKlass javax/xml/datatype/Duration +instanceKlass javax/xml/datatype/XMLGregorianCalendar +instanceKlass javax/activation/DataHandler +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnvImpl +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnv +instanceKlass com/mathworks/webservices/urlmanager/UrlManagerFactory +instanceKlass javax/xml/datatype/DatatypeConstants$Field +instanceKlass javax/xml/datatype/DatatypeConstants +instanceKlass javax/xml/namespace/QName$1 +instanceKlass javax/xml/namespace/QName +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/LeafInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/Transducer +instanceKlass com/mathworks/brsanthu/dataexporter/DataExporter +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeBuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElement +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities$1 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/BuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/LeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/MaybeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Locatable +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities +instanceKlass com/mathworks/apache/commons/cli/CommandLineParser +instanceKlass com/mathworks/webservices/urlmanager/UrlManager +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler$Extension +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler +instanceKlass java/net/PasswordAuthentication +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfoSet +instanceKlass com/mathworks/notification_client_util/ProxyInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/SharedMemoryLibrary +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder$1 +instanceKlass com/sun/xml/internal/bind/v2/model/core/ErrorHandler +instanceKlass com/mathworks/notification_client_util/MATLABNotificationClientParams +instanceKlass com/sun/xml/internal/bind/v2/runtime/Location +instanceKlass com/mathworks/mwswing/AppearanceFocusEvent +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils$1 +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientParamsMLWrapper +instanceKlass com/sun/xml/internal/bind/v2/model/nav/TypeVisitor +instanceKlass javax/swing/text/JTextComponent$InputMethodRequestsHandler +instanceKlass java/net/Socket +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/d +instanceKlass com/mathworks/eps/notificationclient/impl/utils/LogMessageTask +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator +instanceKlass com/sun/xml/internal/bind/v2/model/nav/Navigator +instanceKlass java/text/AttributedString$AttributedStringIterator +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/LatchUtil +instanceKlass sun/awt/im/CompositionAreaHandler +instanceKlass com/mathworks/widgets/text/mcode/MLint$AutoFixChange +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/e +instanceKlass com/mathworks/eps/notificationclient/impl/executors/LabelledThreadFactory +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils +instanceKlass com/sun/xml/internal/bind/WhiteSpaceProcessor +instanceKlass com/mathworks/widgets/text/mcode/MLint$Message +instanceKlass javax/xml/bind/annotation/XmlSchema +instanceKlass sun/net/ResourceManager +instanceKlass java/net/DatagramPacket +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilderI +instanceKlass java/net/DatagramSocket$1 +instanceKlass java/net/AbstractPlainDatagramSocketImpl$1 +instanceKlass java/net/DatagramSocketImpl +instanceKlass java/awt/KeyboardFocusManager$3 +instanceKlass java/awt/KeyboardFocusManager$4 +instanceKlass com/mathworks/eps/notificationclient/impl/executors/ExecutorServiceGroup +instanceKlass java/net/DefaultDatagramSocketImplFactory$1 +instanceKlass com/mathworks/widgets/find/FindClientRegistry$6 +instanceKlass java/net/DefaultDatagramSocketImplFactory +instanceKlass com/mathworks/widgets/find/LookinItem +instanceKlass com/mathworks/widgets/find/FindClientRegistry$RegisteredComponent +instanceKlass com/mathworks/widgets/find/FindClientRegistry$3 +instanceKlass com/mathworks/eps/notificationclient/messages/utils/APSConstants +instanceKlass com/mathworks/widgets/find/FindClientRegistry +instanceKlass java/net/DatagramSocket +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameBuilder +instanceKlass com/mathworks/widgets/text/mcode/MLint$DefaultCodeAnalyzerContentType +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$2 +instanceKlass com/sun/istack/internal/Pool$Impl +instanceKlass com/sun/istack/internal/Pool +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator$1 +instanceKlass org/apache/http/HttpEntity +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1$1 +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap$Entry +instanceKlass sun/net/NetHooks +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap +instanceKlass java/net/InetSocketAddress$InetSocketAddressHolder +instanceKlass com/mathworks/ddux/JSBridge$DataSubscriber +instanceKlass org/apache/http/client/CredentialsProvider +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$6 +instanceKlass org/apache/http/auth/Credentials +instanceKlass com/mathworks/ddux/JSBridge$2 +instanceKlass java/net/PlainSocketImpl$1 +instanceKlass com/mathworks/eps/notificationclient/impl/utils/APSUtils +instanceKlass java/net/AbstractPlainSocketImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AbstractInlineAnnotationReaderImpl +instanceKlass com/mathworks/widgets/messagepanel/DefaultMessagePanelPainter +instanceKlass java/net/SocketImpl +instanceKlass java/net/SocketOptions +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$JAXBContextBuilder +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationTransporter +instanceKlass com/sun/xml/internal/bind/v2/util/TypeCast +instanceKlass com/mathworks/eps/notificationclient/messages/request/NotificationRequestMessage +instanceKlass java/net/SocksConsts +instanceKlass com/sun/xml/internal/bind/Util +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientImpl +instanceKlass com/mathworks/installservicehandler/xml/ObjectFactory +instanceKlass java/net/ServerSocket +instanceKlass sun/net/util/IPAddressUtil +instanceKlass com/mathworks/eps/notificationclient/api/NotificationClient +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/RuntimeAnnotationReader +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationReader +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketUtil +instanceKlass com/mathworks/eps/notificationclient/impl/RemoteClientCreator +instanceKlass com/mathworks/eps/notificationclient/api/ClientCreator +instanceKlass com/teamdev/jxbrowser/chromium/Browser$b +instanceKlass com/sun/xml/internal/bind/v2/ContextFactory +instanceKlass com/mathworks/webintegration/vrd/VRDController$ValidateCommandWorker$1 +instanceKlass com/teamdev/jxbrowser/chromium/ProxyConfig +instanceKlass com/mathworks/html/jxbrowser/chromium/ProxyHandler +instanceKlass com/mathworks/vrd/command/ValidateCommandInternal +instanceKlass com/teamdev/jxbrowser/chromium/PluginManager +instanceKlass com/mathworks/vrd/command/ValidateCommandImpl +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMDocument +instanceKlass com/teamdev/jxbrowser/chromium/dom/SearchContext +instanceKlass javax/xml/bind/GetPropertyAction +instanceKlass com/mathworks/vrd/license/LicenseUtil +instanceKlass com/teamdev/jxbrowser/chromium/DownloadItem +instanceKlass org/netbeans/editor/CodeFoldingSideBar$PaintInfo +instanceKlass com/mathworks/widgets/desk/PreferencePanel +instanceKlass com/teamdev/jxbrowser/chromium/Callback +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadListener +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserListener +instanceKlass javax/xml/bind/ContextFinder +instanceKlass com/teamdev/jxbrowser/chromium/CacheStorage +instanceKlass com/mathworks/eps/notificationclient/api/utils/ClassLoaderUtils +instanceKlass com/mathworks/eps/notificationclient/api/classloader/ClassLoaderHelper +instanceKlass javax/xml/bind/JAXBContext +instanceKlass com/mathworks/eps/notificationclient/api/ClientFactory +instanceKlass com/mathworks/installservicehandler/InstallServiceHandlerFactory +instanceKlass com/teamdev/jxbrowser/chromium/CookieStorage +instanceKlass com/teamdev/jxbrowser/chromium/Browser +instanceKlass com/mathworks/eps/notificationclient/api/ClientParamsBuilder +instanceKlass com/mathworks/matlab_login/UserLoginInfo +instanceKlass com/mathworks/matlab_login/PersistLoginInfo +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber$InternalServiceCaller +instanceKlass com/mathworks/matlab_login/LoginLevel4Impl +instanceKlass com/mathworks/notification_client_util/UIMessage +instanceKlass com/mathworks/mde/desk/ContributedTools$ToolBoxInfo +instanceKlass com/mathworks/matlab_login/LoginLevel3Impl +instanceKlass com/mathworks/html/jxbrowser/chromium/MWNetworkDelegate +instanceKlass com/mathworks/notification_client_util/UICallback +instanceKlass com/mathworks/matlab_login/LoginLevel2Impl +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultNetworkDelegate +instanceKlass com/mathworks/matlab_login/LoginLevel1Impl +instanceKlass com/mathworks/matlab_login/LoginLevel0Impl +instanceKlass com/mathworks/matlab_login/LoginLevel +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfoImpl +instanceKlass com/mathworks/notification_client_util/NotificationServiceCaller +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber +instanceKlass com/mathworks/update_notification_subscriber/NotificationSubscriber +instanceKlass com/teamdev/jxbrowser/chromium/internal/BrowserContextIDGenerator +instanceKlass com/mathworks/matlab_login/Task +instanceKlass com/mathworks/matlab_login/MatlabLogin +instanceKlass com/mathworks/instutil/licensefiles/LicenseUtil$LicFileFilter +instanceKlass com/mathworks/supportsoftwarematlabmanagement/utilities/SsiSettings +instanceKlass com/mathworks/matlab_login/MATLABLoginLogoutHandler +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/SsiUpgradePreChecksUtils +instanceKlass java/net/InetAddress$CacheEntry +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1$1 +instanceKlass sun/net/InetAddressCachePolicy$2 +instanceKlass sun/net/InetAddressCachePolicy$1 +instanceKlass sun/net/InetAddressCachePolicy +instanceKlass java/net/Inet4AddressImpl +instanceKlass com/teamdev/jxbrowser/chromium/FormData +instanceKlass com/teamdev/jxbrowser/chromium/PostData +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$2 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade$1 +instanceKlass com/teamdev/jxbrowser/chromium/HttpHeaders +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade +instanceKlass com/mathworks/instutil/licensefiles/LicenseNamesBase +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$10 +instanceKlass com/mathworks/net/hyperlink/AbstractHyperlinkProvider +instanceKlass com/teamdev/jxbrowser/chromium/NetworkService +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$StartRequestedState +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelAdapter +instanceKlass com/mathworks/instwiz/resources/ComponentName +instanceKlass com/mathworks/instutil/wizard/ComponentName +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/c +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumEventQueue +instanceKlass com/teamdev/jxbrowser/chromium/ZoomService +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$1 +instanceKlass com/mathworks/mde/vrd/ProxyLicenseActions +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/b +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerAdapter +instanceKlass com/mathworks/webintegration/vrd/PostActionHandler +instanceKlass com/mathworks/webintegration/vrd/VRDController +instanceKlass com/mathworks/vrd/command/ValidateCommand +instanceKlass com/mathworks/vrd/command/ValidateCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/RefreshCommand +instanceKlass com/mathworks/vrd/command/RefreshCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/DeactivateCommand +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactoryDefault +instanceKlass com/mathworks/webintegration/vrd/CurrentMatlabSearchPathLicenseFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfo +instanceKlass com/mathworks/vrd/model/VRDModelImpl +instanceKlass com/mathworks/mlwebservices/WSSwingWorker +instanceKlass com/mathworks/mlwebservices/DefaultService +instanceKlass com/mathworks/vrd/model/VRDModel +instanceKlass com/mathworks/mlwebservices/ValidationService +instanceKlass com/mathworks/mlwebservices/Service +instanceKlass com/mathworks/vrd/model/VRDModelFactoryDefault +instanceKlass com/mathworks/webproxy/AbstractSystemProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxyConfiguration +instanceKlass com/mathworks/webproxy/PropertiesProxyConfigurationImpl +instanceKlass com/mathworks/webproxy/SystemPropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/AbstractCompositeProxyConfiguration +instanceKlass com/teamdev/jxbrowser/chromium/internal/FileUtil +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer$2 +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService$1 +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService$1 +instanceKlass com/mathworks/searchservice/SearchService$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor$a +instanceKlass com/mathworks/webproxy/NativeProxySettings +instanceKlass com/google/gson/annotations/SerializedName +instanceKlass com/mathworks/webproxy/PropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxySettings +instanceKlass com/mathworks/webproxy/ProxyAuthenticator +instanceKlass com/mathworks/webproxy/WebproxyFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor +instanceKlass com/mathworks/settings_service/SettingsService$1 +instanceKlass com/mathworks/instutil/WinSecurity +instanceKlass com/mathworks/mde/desk/PrefsFetcher$2 +instanceKlass com/mathworks/instutil/WindowsSecurityOverride +instanceKlass com/mathworks/mde/desk/PrefsFetcher$1 +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService$1 +instanceKlass com/mathworks/instutil/services/ServiceThread +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService$1 +instanceKlass com/mathworks/instutil/services/ServiceThreadFactoryImpl +instanceKlass com/mathworks/mde/desk/ToolsFetcher$3 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$2 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$1 +instanceKlass com/mathworks/fileiconprovider/FileIconProvider$1 +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseAdapter +instanceKlass com/mathworks/pathdataservice/PathDataService$1 +instanceKlass com/mathworks/vrd/license/LicenseFileFilterImpl +instanceKlass java/text/DontCareFieldPosition$1 +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParserImpl +instanceKlass com/mathworks/mldosharingservice/SharingDataService +instanceKlass java/text/CalendarBuilder +instanceKlass com/mathworks/instutil/SystemEnvironment +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinderDefault +instanceKlass com/mathworks/addons_product/MatlabOnlineStrategy +instanceKlass com/mathworks/instutil/Environment +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseFileFinder +instanceKlass com/mathworks/settings_service/SettingsService +instanceKlass com/mathworks/searchservice/SearchService +instanceKlass sun/font/SunFontManager$9 +instanceKlass com/mathworks/instutil/wizard/CJKFontSize +instanceKlass com/mathworks/instutil/wizard/FontSizeStrategy +instanceKlass com/mathworks/instutil/FontHandlerImpl +instanceKlass com/mathworks/pathdataservice/PathDataService +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$InitialState +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$LoggerState +instanceKlass com/mathworks/fileiconprovider/FileIconProvider +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService +instanceKlass com/teamdev/jxbrowser/chromium/ao +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/l +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/k +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService +instanceKlass com/mathworks/mde/explorer/JavaScriptCurrentFolderInstance +instanceKlass com/mathworks/widgets/desk/PreferencePanel$Tool +instanceKlass com/mathworks/mde/desk/ContributedTools +instanceKlass com/teamdev/jxbrowser/chromium/al +instanceKlass com/mathworks/mde/desk/PrefsFetcher$Handler +instanceKlass com/mathworks/mde/desk/PrefsFetcher +instanceKlass com/teamdev/jxbrowser/chromium/an +instanceKlass com/mathworks/matlabserver/connector/impl/ConnectorLifecycleHelperImpl$1 +instanceKlass com/teamdev/jxbrowser/chromium/am +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcess +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelListener +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycle +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelStream +instanceKlass com/mathworks/mde/desk/ToolsFetcher$ToolData +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamListener +instanceKlass com/mathworks/mde/desk/ToolsFetcher$Handler +instanceKlass com/mathworks/mde/desk/ToolsFetcher +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Server +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC$a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChromiumProcessListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelListener +instanceKlass com/mathworks/instwiz/WIResourceBundle +instanceKlass com/mathworks/instwiz/arch/ArchGuiBase +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC +instanceKlass com/mathworks/instwiz/arch/ArchGui +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Sender +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactoryImpl +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB$8 +instanceKlass com/mathworks/instutil/services/ProxyTester +instanceKlass com/teamdev/jxbrowser/chromium/BrowserContext +instanceKlass com/mathworks/instutil/InstUtilResourceBundle +instanceKlass com/mathworks/instutil/FontHandler +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactory +instanceKlass sun/nio/fs/WindowsSecurity +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB +instanceKlass sun/nio/fs/AbstractAclFileAttributeView +instanceKlass java/nio/file/attribute/AclFileAttributeView +instanceKlass java/nio/file/attribute/FileOwnerAttributeView +instanceKlass sun/nio/fs/WindowsLinkSupport +instanceKlass sun/nio/fs/WindowsFileSystemProvider$1 +instanceKlass javax/xml/stream/XMLStreamWriter +instanceKlass org/apache/axiom/om/OMElement +instanceKlass org/apache/axiom/om/OMContainer +instanceKlass org/apache/axiom/om/OMNode +instanceKlass org/apache/axiom/om/OMSerializable +instanceKlass org/apache/axiom/om/OMDataSource +instanceKlass javax/xml/stream/XMLStreamReader +instanceKlass javax/xml/stream/XMLStreamConstants +instanceKlass com/mathworks/internal/activationws/client/MWAMachineAttribute +instanceKlass org/apache/axis2/databinding/ADBBean +instanceKlass com/teamdev/jxbrowser/chromium/ProductInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumBuild +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserVersionInfo +instanceKlass com/teamdev/jxbrowser/chromium/NetworkDelegate +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserContextRegistry +instanceKlass com/mathworks/html/jxbrowser/chromium/ChromiumLocaleUtils +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DebugWindowListener +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DefaultDebugListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/Environment +instanceKlass com/teamdev/jxbrowser/chromium/DownloadHandler +instanceKlass com/teamdev/jxbrowser/chromium/PrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/DialogHandler +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserViewBuilder +instanceKlass com/teamdev/jxbrowser/chromium/BrowserPreferences +instanceKlass com/mathworks/instutil/NativeUtility +instanceKlass com/mathworks/instutil/DisplayProperties +instanceKlass com/mathworks/instutil/MachineInfo +instanceKlass com/mathworks/vrd/command/ValidateCommandFactory +instanceKlass com/mathworks/vrd/command/RefreshCommandFactory +instanceKlass com/mathworks/matlabserver/connectorcommon/embeddedwebserver/WebServerConfig +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactory +instanceKlass com/mathworks/vrd/license/LicenseFactory +instanceKlass com/mathworks/vrd/license/License +instanceKlass com/mathworks/peermodel/impl/ObservableImpl$PeerNodeListenerAdapter +instanceKlass com/mathworks/vrd/model/VRDModelFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinder +instanceKlass com/mathworks/vrd/license/LicenseFileFilter +instanceKlass com/mathworks/instutil/services/ServiceThreadFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParser +instanceKlass com/mathworks/vrd/view/VRDView +instanceKlass com/mathworks/instutil/services/ServiceThreadView +instanceKlass com/mathworks/webintegration/vrd/VRDConfigMATLAB +instanceKlass com/mathworks/vrd/config/VRDConfig +instanceKlass com/mathworks/addon_matlab_path_service_provider/DefaultCompletionObserver +instanceKlass com/mathworks/peermodel/PeerNodeVisitor$Cancellable +instanceKlass com/mathworks/addon_enable_disable_management/AddonEnableDisableManager +instanceKlass com/mathworks/vrd/config/VRDConfigFactory +instanceKlass com/mathworks/peermodel/impl/PeerNodeImpl +instanceKlass com/mathworks/addon_enable_disable_management/java_class_path_service_provider/AddonJavaClassPathServiceProvider +instanceKlass com/mathworks/peermodel/PeerNodeSyncable +instanceKlass com/mathworks/addon_matlab_path_service_provider/AddonMATLABPathServiceProvider +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$ActionList +instanceKlass com/mathworks/addon_enable_disable_management/EnableDisableManagementNotifierImpl +instanceKlass com/mathworks/webintegration/vrd/LicenseActions +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory$LazyHolder +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifier +instanceKlass com/mathworks/mde/vrd/NoOpLicenseActions +instanceKlass com/mathworks/peermodel/ManagerInfo +instanceKlass com/mathworks/addons_common/notificationframework/RegistrationManager +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$2 +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers$1 +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObserver +instanceKlass com/mathworks/mde/vrd/LicenseActions +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers +instanceKlass com/mathworks/mde/vrd/LicenseActionsFactory +instanceKlass java/util/concurrent/ConcurrentHashMap$MapEntry +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader$1 +instanceKlass com/mathworks/mde/desk/StartupClassLoader +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$3 +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$1 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$2 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$1 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifierFactory +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$9 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$8 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$13 +instanceKlass com/mathworks/peermodel/impl/ObservableImpl +instanceKlass java/text/BreakIterator +instanceKlass com/mathworks/peermodel/events/Event +instanceKlass com/mathworks/peermodel/PeerNodeVisitor +instanceKlass com/mathworks/peermodel/PeerNode +instanceKlass com/mathworks/peermodel/events/PeerNodeListenable +instanceKlass javax/swing/text/GlyphView$GlyphPainter +instanceKlass com/mathworks/peermodel/impl/PeerModelManagerImpl +instanceKlass com/mathworks/peermodel/PeerModelManagerSyncable +instanceKlass com/mathworks/peermodel/events/ObservableSyncable +instanceKlass com/mathworks/peermodel/events/PeerNodeAdapter +instanceKlass com/mathworks/peermodel/events/PeerNodeListener +instanceKlass com/mathworks/mde/liveeditor/debug/PeerModelBreakpointDataStoreService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointFileService +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$2 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$5 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder$TooltipBuilderArgumentAppender +instanceKlass com/mathworks/addons_common/notificationframework/FolderRegistry +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService +instanceKlass com/mathworks/addons_common/notificationframework/AddonStateInitializer +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService$1 +instanceKlass com/google/common/primitives/Ints +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$7 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$6 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$5 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$3 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$8 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$4 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$2 +instanceKlass com/mathworks/connector/message_service/bayeux/PublishRequest +instanceKlass com/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator +instanceKlass com/mathworks/addons_zip/legacy_format_support/PopulateLegacyZipsListTask +instanceKlass com/google/gson/internal/Streams +instanceKlass com/google/gson/internal/LinkedTreeMap$Node +instanceKlass com/mathworks/toolboxmanagement/legacy_format_support/LegacyMltbxInstallsRetriever +instanceKlass com/google/gson/internal/LinkedTreeMap$1 +instanceKlass com/mathworks/addons_zip/legacy_format_support/LegacyZipsRetriever +instanceKlass com/mathworks/appmanagement/legacy_format_support/LegacyMlappinstallInstallsRetriever +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsRetriever +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsUtil +instanceKlass com/google/gson/internal/ConstructorConstructor$11 +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$2 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/ExtraStepOnLastLineOfFunctionInterceptor +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$4 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$StackCallback +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$9 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller +instanceKlass com/mathworks/services/mlx/service/SerializationService$3 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$3 +instanceKlass com/mathworks/services/mlx/service/SerializationService$2 +instanceKlass com/mathworks/services/mlx/service/SerializationService$1 +instanceKlass com/mathworks/services/mlx/service/SerializationService +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory$LoggingUncaughtExceptionHandler +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$2 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService +instanceKlass com/mathworks/toolbox/parallel/pctutil/logging/RootLog +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService$Subscription +instanceKlass com/mathworks/toolbox/distcomp/RootLog +instanceKlass com/mathworks/toolbox/distcomp/ui/PackageInfo +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$PoolIconDecorator +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$3 +instanceKlass com/mathworks/messageservice/MessageUtils +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$2 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$SingletonHolder +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientPropertiesResponse +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifier +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientProperties +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProductsResponse +instanceKlass com/mathworks/toolbox/distcomp/mjs/service/DistcompServiceInfo +instanceKlass com/mathworks/metadata_serializer/DocumentationMetadataSerializer +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProducts +instanceKlass com/mathworks/toolbox/distcomp/wsclients/cloudconsole/CloudConsoleClusterInfo +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDirResponse +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDir +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTip +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$4 +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl$OpenWithBrowser +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenOrCreateInEditor +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenToLineInEditor +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonceResponse +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$HyperlinkHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$TooltipDetailsUpdater +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonce +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonceResponse +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionService +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonce +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory$Fireable +instanceKlass com/mathworks/matlabserver/connector/http/AddStaticContentPath +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener$MatlabExecutionStateReturnVal +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionInfo +instanceKlass com/mathworks/toolbox/parallel/util/concurrent/PredicateCondition +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoResponse +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionEvent +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClientSessionInfoProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/SessionInfoProvider +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoRequest +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$2 +instanceKlass com/mathworks/metadata_serializer/PathMetadataSerializer +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionListener +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$1 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudCreationListener +instanceKlass com/mathworks/connector/Promise +instanceKlass com/mathworks/connector/Future +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionCreationListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator +instanceKlass com/mathworks/toolbox/distcomp/ui/MatlabPoolIndicator +instanceKlass com/mathworks/connector/cosg/CosgRegisterOpaqueType +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$CosgHandlerContainer +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateResponseMessageDO +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$1 +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateRequestMessageDO +instanceKlass com/mathworks/cosg/CosgResponseWrapper +instanceKlass com/sun/imageio/plugins/common/ReaderUtil +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateImpl +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$UpdateEvent +instanceKlass com/mathworks/peermodel/synchronizer/utils/ClientPagedDataJSONConverter +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/NonBlockingMessage +instanceKlass sun/java2d/cmm/CMSManager +instanceKlass com/mathworks/peermodel/pageddata/PagedDataFactory +instanceKlass com/mathworks/peermodel/pageddata/impl/PagedDataImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/CommonMessage +instanceKlass com/mathworks/peermodel/pageddata/ClientPagedData +instanceKlass com/mathworks/peermodel/pageddata/ServerPagedData +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/Message +instanceKlass com/mathworks/peermodel/PeerSynchronizerFactory +instanceKlass com/mathworks/peermodel/synchronizer/PeerSynchronizer +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28$1 +instanceKlass com/sun/imageio/plugins/png/PNGImageDataEnumeration +instanceKlass com/mathworks/peermodel/events/Observer +instanceKlass com/mathworks/peermodel/PeerSynchronizer +instanceKlass javax/imageio/IIOParam +instanceKlass java/awt/KeyboardFocusManager$LightweightFocusRequest +instanceKlass java/awt/DefaultKeyboardFocusManager$TypeAheadMarker +instanceKlass java/awt/KeyboardFocusManager$HeavyweightFocusRequest +instanceKlass javax/imageio/ImageIO$CanDecodeInputFilter +instanceKlass com/sun/imageio/stream/CloseableDisposerRecord +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$2 +instanceKlass com/mathworks/peermodel/PeerModelManagers +instanceKlass com/mathworks/peermodel/PeerModelManager +instanceKlass com/mathworks/peermodel/events/PeerModelListenable +instanceKlass com/mathworks/peermodel/events/PeerEventObservable +instanceKlass com/mathworks/peermodel/events/Observable +instanceKlass com/mathworks/peermodel/PeerModelBuilderImpl +instanceKlass com/mathworks/html/jxbrowser/chromium/logging/JxBrowserChromiumLogger +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$38 +instanceKlass com/mathworks/html/HtmlPanelSupport +instanceKlass com/mathworks/peermodel/PeerModelBuilder +instanceKlass com/mathworks/html/jxbrowser/chromium/NavigationHelper +instanceKlass com/mathworks/peermodel/synchronizer/utils/PeerModelInitialize +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserChromiumFactory +instanceKlass com/mathworks/util/tree/TreeUtils$1 +instanceKlass java/util/Formattable +instanceKlass com/mathworks/mlwidgets/html/ChromiumConfig$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager$ZoomLevel +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$6 +instanceKlass com/mathworks/connector/message_service/impl/JniMessageServiceAdaptorImpl$1 +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$3 +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder$1 +instanceKlass com/mathworks/messageservice/MessageServiceFactory +instanceKlass com/mathworks/html/ProxySettings$1 +instanceKlass com/mathworks/html/ProxySettings +instanceKlass com/google/gson/BufferedImageConverter +instanceKlass com/mathworks/messageservice/json/converters/JSONTypeConverter +instanceKlass com/mathworks/html/HtmlActionGroup +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl$MessageJSONCustomConverter +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl +instanceKlass com/teamdev/jxbrowser/chromium/LoadHandler +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$11 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$3 +instanceKlass com/mathworks/metadata_serializer/MetadataSerializerLoader +instanceKlass com/mathworks/messageservice/json/JSONCustomConverters +instanceKlass com/mathworks/messageservice/MessageService +instanceKlass com/mathworks/metadata_serializer/AddonCoreMetadataSerializer +instanceKlass com/mathworks/messageservice/Message +instanceKlass com/mathworks/messageservice/ContextState +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser +instanceKlass com/mathworks/html/ProxyAuthenticationFailureHandler +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/OpenToLineColumn +instanceKlass com/mathworks/html/LightweightBrowser +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService +instanceKlass java/util/AbstractList$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils +instanceKlass com/mathworks/metadata_core/MetadataCoreLoader +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$2 +instanceKlass com/mathworks/messageservice/MessageServiceOpaque +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$3 +instanceKlass com/mathworks/jniutils_java/NativeObjectContainer +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport +instanceKlass com/jidesoft/popup/JidePopup$17 +instanceKlass com/mathworks/metadata_core/CompatibilityMetadata +instanceKlass com/jidesoft/popup/JidePopup$16 +instanceKlass java/net/URLEncoder +instanceKlass com/jidesoft/popup/JidePopup$15 +instanceKlass com/mathworks/addons_metadata/AddonMetadataProviderWithFolder +instanceKlass java/net/URLDecoder +instanceKlass com/mathworks/metadata_core/DocumentationMetadata +instanceKlass com/mathworks/metadata_core/PathMetadata +instanceKlass com/mathworks/metadata_core/IncludedAppsMetadata +instanceKlass com/mathworks/metadata_core/AddonCoreMetadata +instanceKlass java/awt/datatransfer/FlavorListener +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyFolderStructureUtils +instanceKlass com/mathworks/resources_folder/ResourcesFolderUtils +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderView +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils$2 +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderViewFactory +instanceKlass java/nio/file/Files$3 +instanceKlass java/nio/file/FileTreeWalker$Event +instanceKlass java/nio/file/FileTreeWalker$DirectoryNode +instanceKlass com/mathworks/addons_metadata/AddonMetadataProvider +instanceKlass sun/nio/fs/AbstractBasicFileAttributeView +instanceKlass sun/nio/fs/DynamicFileAttributeView +instanceKlass sun/nio/fs/WindowsFileAttributeViews +instanceKlass java/nio/file/attribute/BasicFileAttributeView +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils +instanceKlass com/mathworks/appmanagement/model/LegacyPackagingApi +instanceKlass java/nio/file/FileTreeWalker +instanceKlass com/mathworks/appmanagement/model/PackagingApi +instanceKlass com/mathworks/appmanagement/model/InstalledAppMetadata +instanceKlass com/mathworks/appmanagement/model/AppMetadata +instanceKlass com/mathworks/addons_common/util/InstallationFoldersWalker +instanceKlass com/mathworks/appmanagement/MlappinstallUtil +instanceKlass com/mathworks/toolboxmanagement/tasks/GetInstalledTask +instanceKlass com/mathworks/addons_zip/tasks/GetInstalledTask +instanceKlass com/mathworks/addons_app/tasks/GetInstalledTask +instanceKlass com/mathworks/addons_common/util/FolderNameUtils +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnInformation +instanceKlass com/mathworks/addons_product/ProductManager$1 +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder$1 +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder +instanceKlass com/mathworks/addons_product/ProductDocumentationProvider +instanceKlass com/mathworks/product/util/ProductIdentifierMap +instanceKlass com/mathworks/services/lmgr/FeatureInfo +instanceKlass java/awt/geom/LineIterator +instanceKlass sun/awt/image/OffScreenImageSource +instanceKlass com/sun/java/swing/plaf/windows/WindowsButtonUI$1 +instanceKlass java/awt/geom/RoundRectIterator +instanceKlass sun/java2d/pipe/ShapeSpanIterator +instanceKlass sun/java2d/pipe/SpanIterator +instanceKlass com/mathworks/services/lmgr/NonDemoFeatureInfoList +instanceKlass java/awt/PointerInfo +instanceKlass sun/awt/DefaultMouseInfoPeer +instanceKlass java/awt/peer/MouseInfoPeer +instanceKlass java/awt/MouseInfo +instanceKlass com/mathworks/install/InstalledProduct +instanceKlass com/mathworks/install_impl/usage/NonCustomerFacingUsageStrategy +instanceKlass com/mathworks/install_impl/usage/CustomerFacingUsageStrategy +instanceKlass com/mathworks/install/usage/UsageStrategy +instanceKlass com/mathworks/install_impl/usage/UsageStrategyFactory +instanceKlass com/mathworks/install_impl/InstallableProductImpl$InstallableComponentVisitor +instanceKlass org/jdom/output/Format$DefaultEscapeStrategy +instanceKlass org/jdom/output/Format$TextMode +instanceKlass org/jdom/output/EscapeStrategy +instanceKlass org/jdom/output/Format +instanceKlass org/jdom/output/NamespaceStack +instanceKlass org/jdom/output/XMLOutputter +instanceKlass com/mathworks/install_impl/ComponentContainerImpl$ComponentDataFlyweight +instanceKlass com/mathworks/install_impl/ProductImpl +instanceKlass com/mathworks/install_impl/UninstallerComponentContainerHandler +instanceKlass com/mathworks/install_impl/AbstractFileListParser +instanceKlass com/mathworks/install/FileListParser +instanceKlass java/io/SerialCallbackContext +instanceKlass java/io/ObjectStreamClass$ClassDataSlot +instanceKlass java/io/ObjectStreamClass$FieldReflector +instanceKlass java/io/ObjectStreamClass$2 +instanceKlass java/io/ObjectStreamClass$EntryFuture +instanceKlass java/io/ObjectStreamClass$Caches +instanceKlass java/io/ObjectStreamClass +instanceKlass java/io/Bits +instanceKlass sun/misc/ObjectInputFilter$Config$$Lambda$21 +instanceKlass sun/misc/ObjectInputFilter +instanceKlass sun/misc/ObjectInputFilter$Config +instanceKlass java/io/ObjectInputStream$ValidationList +instanceKlass java/io/ObjectInputStream$HandleTable$HandleList +instanceKlass java/io/ObjectInputStream$HandleTable +instanceKlass java/io/ObjectInputStream$$Lambda$20 +instanceKlass sun/misc/JavaObjectInputStreamAccess +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/misc/ObjectStreamClassValidator +instanceKlass java/io/ObjectInputStream$1 +instanceKlass sun/misc/JavaOISAccess +instanceKlass com/mathworks/install/OwningProductResponse +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl$FileCollectionVisitor +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl +instanceKlass com/mathworks/instutil/FolderUtilsImpl +instanceKlass com/mathworks/instutil/ParentFolderOperation +instanceKlass com/mathworks/instutil/FileIO +instanceKlass com/google/inject/internal/InjectorImpl$2$1 +instanceKlass com/google/inject/internal/CircularDependencyProxy +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter$1 +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapIterator +instanceKlass com/google/inject/internal/InternalContext$DependencyStack +instanceKlass com/google/inject/internal/InternalContext +instanceKlass com/google/inject/internal/InternalInjectorCreator$1 +instanceKlass com/google/common/collect/Iterators$5 +instanceKlass com/google/common/collect/TransformedIterator +instanceKlass com/google/common/collect/FluentIterable +instanceKlass com/google/common/collect/Iterables +instanceKlass java/lang/reflect/WeakCache$LookupValue +instanceKlass com/google/inject/internal/InjectorImpl$2 +instanceKlass com/mathworks/install/command/NativeDotNet +instanceKlass java/lang/ProcessBuilder +instanceKlass java/lang/Process +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileLocation +instanceKlass com/mathworks/install/input/DeltaData +instanceKlass com/mathworks/install/input/ComponentData +instanceKlass com/mathworks/install/input/ProductData +instanceKlass com/mathworks/install/input/ComponentURLProvider +instanceKlass com/mathworks/install/input/InstallationInputFile +instanceKlass com/mathworks/install/udc/UdcResourceKey +instanceKlass com/mathworks/instutil/InstallerDownloadURLInfo +instanceKlass com/mathworks/mlwidgets/workspace/MatlabCustomClassRegistry +instanceKlass com/mathworks/install/InputStreamProvider +instanceKlass com/mathworks/install/input/Contents +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$16 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$15 +instanceKlass java/lang/Deprecated +instanceKlass java/util/function/BiConsumer +instanceKlass com/google/inject/util/Types +instanceKlass com/mathworks/install/ComponentAggregator +instanceKlass com/mathworks/install_impl/ProductInstallerImpl$ComponentVisitor +instanceKlass com/mathworks/install_impl/XMLParserImpl +instanceKlass com/mathworks/install/XMLParser +instanceKlass com/mathworks/install/ComponentContainerHandler +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler$1 +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$2 +instanceKlass com/mathworks/install/InstallableComponent +instanceKlass com/mathworks/install/input/ComponentSourceProvider +instanceKlass com/mathworks/install_impl/InstallableProductImpl +instanceKlass com/mathworks/install/InstallableProduct +instanceKlass com/mathworks/install/ComponentData +instanceKlass com/google/inject/internal/SingleParameterInjector +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$1 +instanceKlass com/google/inject/internal/cglib/reflect/$FastMember +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory +instanceKlass com/google/inject/internal/ConstructorInjector +instanceKlass com/google/inject/internal/ConstructionProxy +instanceKlass com/google/inject/internal/cglib/proxy/$CallbackFilter +instanceKlass com/google/inject/internal/ProxyFactory +instanceKlass com/google/inject/internal/MembersInjectorImpl +instanceKlass com/google/inject/internal/EncounterImpl +instanceKlass com/google/inject/internal/ConstructorBindingImpl$Factory +instanceKlass com/google/inject/ProvidedBy +instanceKlass com/google/inject/ImplementedBy +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback$ProvisionCallback +instanceKlass com/google/inject/internal/ProviderInternalFactory +instanceKlass com/google/inject/spi/ProvidesMethodTargetVisitor +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback +instanceKlass com/google/common/cache/LocalCache$AbstractReferenceEntry +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore$KeyBinding +instanceKlass com/google/inject/internal/InternalFactoryToProviderAdapter +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory$ReentrantCycleDetectingLock +instanceKlass com/google/inject/internal/ConstructionContext +instanceKlass com/google/inject/internal/SingletonScope$1 +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter +instanceKlass com/google/inject/internal/FactoryProxy +instanceKlass com/google/inject/internal/util/Classes +instanceKlass com/google/inject/spi/ExposedBinding +instanceKlass com/google/inject/internal/CreationListener +instanceKlass com/google/inject/internal/InjectorShell$LoggerFactory +instanceKlass com/google/inject/internal/InjectorShell$InjectorFactory +instanceKlass com/google/inject/internal/Initializables$1 +instanceKlass com/google/inject/internal/Initializables +instanceKlass com/google/inject/internal/ConstantFactory +instanceKlass com/google/inject/internal/InjectorShell +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore +instanceKlass com/google/inject/internal/SingleMemberInjector +instanceKlass com/google/inject/spi/TypeEncounter +instanceKlass com/google/inject/internal/MembersInjectorStore +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$4 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$2 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$1 +instanceKlass com/google/inject/spi/TypeConverterBinding +instanceKlass com/google/inject/matcher/AbstractMatcher +instanceKlass com/google/inject/matcher/Matchers +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$5 +instanceKlass com/google/inject/internal/ConstructionProxyFactory +instanceKlass com/google/inject/internal/FailableCache +instanceKlass com/google/inject/internal/ConstructorInjectorStore +instanceKlass com/google/inject/internal/DeferredLookups +instanceKlass com/google/inject/internal/InjectorImpl$BindingsMultimap +instanceKlass com/google/inject/spi/ProviderBinding +instanceKlass com/google/inject/spi/ConvertedConstantBinding +instanceKlass com/google/inject/internal/InjectorImpl +instanceKlass com/google/inject/internal/Lookups +instanceKlass com/google/inject/internal/InjectorImpl$InjectorOptions +instanceKlass com/google/inject/spi/DefaultBindingScopingVisitor +instanceKlass java/net/Proxy +instanceKlass com/mathworks/webproxy/ProxyConfigurationVisitor +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$5 +instanceKlass com/mathworks/instutil/IOObserver +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$4 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$3 +instanceKlass com/mathworks/install/InstallFlowControlHandler +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$2 +instanceKlass com/mathworks/install/archive/Archive +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$1 +instanceKlass com/mathworks/instutil/DefaultSecurityOverrideImpl +instanceKlass sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter +instanceKlass sun/util/locale/provider/TimeZoneNameUtility +instanceKlass java/util/logging/LogRecord +instanceKlass com/mathworks/instutil/ResourceDefaultLocaleImpl +instanceKlass com/mathworks/instutil/ResourceLocale +instanceKlass com/mathworks/instutil/ResourceLocaleFactory +instanceKlass org/jdom/ContentList$FilterListIterator +instanceKlass org/jdom/filter/AbstractFilter +instanceKlass org/jdom/Namespace +instanceKlass org/jdom/filter/Filter +instanceKlass org/jdom/Verifier +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$LocatorProxy +instanceKlass org/xml/sax/ext/Locator2 +instanceKlass org/apache/xerces/util/URI +instanceKlass org/apache/xerces/util/SAXMessageFormatter +instanceKlass org/jdom/input/BuilderErrorHandler +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$3 +instanceKlass org/apache/xerces/parsers/SecuritySupport$3 +instanceKlass org/xml/sax/DocumentHandler +instanceKlass javax/xml/parsers/SAXParser +instanceKlass javax/xml/parsers/SAXParserFactory +instanceKlass org/jdom/input/JAXPParserFactory +instanceKlass org/jdom/Document +instanceKlass org/jdom/input/TextBuffer +instanceKlass org/jdom/Content +instanceKlass org/jdom/Parent +instanceKlass org/xml/sax/ext/DeclHandler +instanceKlass org/xml/sax/ext/LexicalHandler +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheDecorator +instanceKlass org/jdom/DefaultJDOMFactory +instanceKlass com/mathworks/cmlink/management/cache/NullCmStatusCache +instanceKlass org/jdom/JDOMFactory +instanceKlass com/mathworks/cmlink/management/queue/CMQueue +instanceKlass com/mathworks/cmlink/util/interactor/NullTerminator +instanceKlass com/mathworks/cmlink/util/system/CommandInstalledChecker +instanceKlass org/jdom/input/SAXBuilder +instanceKlass com/mathworks/cmlink/util/system/PersistentAvailabilityCheck +instanceKlass com/mathworks/cmlink/util/system/AvailabilityCheck +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNExecutor +instanceKlass com/mathworks/instutil/VersionInfo +instanceKlass com/mathworks/cmlink/implementations/svncore/SVNCoreAdapterFactoryDecorator +instanceKlass sun/nio/fs/WindowsUriSupport +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService$WrappedCallable +instanceKlass com/mathworks/instutil/logging/AbstractAppLogger +instanceKlass com/mathworks/cmlink/util/CMExecutorService$2 +instanceKlass com/mathworks/cmlink/util/CMExecutorService$1 +instanceKlass com/mathworks/cmlink/util/CMExecutorService +instanceKlass com/mathworks/instutil/ExecutorServiceManagerImpl +instanceKlass com/mathworks/cmlink/management/queue/CMAdapterFactoryQueued$1 +instanceKlass com/mathworks/cmlink/implementations/localcm/resources/SQLiteCMResources +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IAbortPoll +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IProgressReporter +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMBase +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/resources/SVNKitResources +instanceKlass com/mathworks/cmlink/util/adapter/AdapterFactoryComparator +instanceKlass com/mathworks/cmlink/util/CMAdapterFactoryDecorator +instanceKlass com/mathworks/webproxy/ProxyConfiguration +instanceKlass com/mathworks/instutil/Downloader +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryListCollection +instanceKlass com/mathworks/cmlink/management/registration/FactoryHidingFactoryList +instanceKlass com/mathworks/cmlink/management/registration/QueuedCMAdapterFactoryList +instanceKlass com/google/common/collect/SortedIterable +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCILogger +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader$SccProviderInstallRegEntry +instanceKlass com/mathworks/instutil/ExecutorServiceManager +instanceKlass com/mathworks/install_impl/command/DotNetFrameworkImpl +instanceKlass com/mathworks/install/command/DotNetFramework +instanceKlass com/mathworks/instutil/RegistryImpl +instanceKlass com/mathworks/instutil/ProcessExecutorImpl +instanceKlass com/mathworks/instutil/ProcessExecutor +instanceKlass com/mathworks/instutil/MWNativeLibraryLoader +instanceKlass com/mathworks/instutil/logging/AppLogger +instanceKlass com/mathworks/instutil/WinTaskSchedulerImpl +instanceKlass com/mathworks/instutil/WinTaskScheduler +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactoryImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactory +instanceKlass com/mathworks/install_impl/ApplicationSpecificCommandAdapter +instanceKlass com/mathworks/install/ApplicationSpecificCommand +instanceKlass com/mathworks/install_impl/InstallOptionProviderImpl +instanceKlass com/mathworks/install/InstallOptionProvider +instanceKlass com/mathworks/instutil/SecurityOverride +instanceKlass com/mathworks/instutil/LocalizedHelpPathFinder +instanceKlass com/mathworks/instutil/PlatformImpl +instanceKlass com/mathworks/instutil/LicenseNumberProvider +instanceKlass com/mathworks/install/CommandContainer +instanceKlass com/mathworks/install_impl/input/UpdateComponentContainerImpl +instanceKlass com/mathworks/install/UpdateComponentContainer +instanceKlass com/mathworks/install_impl/input/UpdateProductContainerImpl +instanceKlass com/mathworks/install/UpdateProductContainer +instanceKlass com/mathworks/install_impl/input/JSONInstallationFileParserImpl +instanceKlass com/mathworks/install/JSONInstallationFileParser +instanceKlass com/mathworks/install_impl/input/AbstractInstallationInputFileStrategy +instanceKlass com/mathworks/install/input/InstallationInputFileStrategy +instanceKlass com/mathworks/install_impl/input/InstallationInputFileFactoryImpl +instanceKlass com/mathworks/install/input/InstallationInputFileFactory +instanceKlass com/mathworks/install/input/ComponentSourceFactory +instanceKlass com/google/inject/internal/MoreTypes$WildcardTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$GenericArrayTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl +instanceKlass sun/reflect/generics/tree/VoidDescriptor +instanceKlass sun/reflect/generics/tree/ArrayTypeSignature +instanceKlass com/google/inject/internal/MoreTypes$ParameterizedTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$CompositeType +instanceKlass sun/reflect/generics/tree/TypeVariableSignature +instanceKlass com/google/inject/internal/asm/$Handler +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$4 +instanceKlass com/google/inject/internal/cglib/core/$Block +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$14 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$13 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$12 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$11 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$10 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$GetIndexCallback +instanceKlass com/google/inject/internal/cglib/core/$MethodInfoTransformer +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$6 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$5 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$3 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$1 +instanceKlass com/google/inject/internal/asm/$Context +instanceKlass com/google/inject/internal/asm/$Attribute +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCIRegistryReader +instanceKlass com/mathworks/cmlink/management/registration/MSSCCICMAdapterFactoryList +instanceKlass com/mathworks/cmlink/api/version/r14a/CMAdapterFactory +instanceKlass com/mathworks/cmlink/api/version/r16b/CMAdapterFactory +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMAdapterFactory +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/DepthAwareCaller +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/Caller +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterCaller +instanceKlass com/google/inject/internal/asm/$ClassReader +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNAdapterFactory +instanceKlass com/mathworks/cmlink/api/StatusListener +instanceKlass com/google/inject/internal/cglib/core/$DebuggingClassWriter$1 +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/DefaultMethodInvocation +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterFactoryWrapper +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$9 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$8 +instanceKlass com/google/inject/internal/cglib/core/$Local +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$7 +instanceKlass com/google/inject/internal/asm/$Edge +instanceKlass com/google/inject/internal/cglib/core/$ClassEmitter$FieldInfo +instanceKlass org/eclipse/jgit/transport/Transport +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ArrayDelimiters +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ParameterTyper +instanceKlass com/google/inject/internal/cglib/core/$ProcessArrayCallback +instanceKlass org/eclipse/jgit/transport/PackTransport +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils +instanceKlass org/eclipse/jgit/transport/WalkTransport +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$2 +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$1 +instanceKlass org/eclipse/jgit/lib/Repository +instanceKlass com/google/inject/internal/cglib/core/$Customizer +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper$MethodWrapperKey +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper +instanceKlass com/google/inject/internal/cglib/core/$DuplicatesPredicate +instanceKlass com/google/inject/spi/Message +instanceKlass com/google/inject/spi/ProvisionListener +instanceKlass com/google/inject/spi/TypeListener +instanceKlass org/eclipse/jgit/transport/PacketLineIn +instanceKlass org/aopalliance/intercept/MethodInterceptor +instanceKlass org/aopalliance/intercept/Interceptor +instanceKlass org/aopalliance/aop/Advice +instanceKlass org/eclipse/jgit/transport/PacketLineOut +instanceKlass com/google/inject/spi/TypeConverter +instanceKlass com/google/inject/matcher/Matcher +instanceKlass com/google/inject/MembersInjector +instanceKlass java/lang/AssertionStatusDirectives +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$2 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$1 +instanceKlass org/eclipse/jgit/util/FS +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils +instanceKlass com/google/inject/internal/cglib/core/$VisibilityPredicate +instanceKlass com/google/inject/internal/asm/$Frame +instanceKlass com/google/inject/internal/cglib/core/$LocalVariablesSorter$State +instanceKlass com/google/inject/internal/cglib/core/$MethodInfo +instanceKlass com/google/inject/internal/asm/$Label +instanceKlass org/eclipse/jgit/transport/CredentialsProvider +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$1 +instanceKlass com/google/inject/internal/cglib/core/$Constants +instanceKlass com/google/inject/internal/asm/$Opcodes +instanceKlass com/google/inject/internal/asm/$Type +instanceKlass com/google/inject/internal/cglib/core/$Signature +instanceKlass com/google/inject/internal/cglib/core/$CollectionUtils +instanceKlass com/google/inject/internal/cglib/core/$TypeUtils +instanceKlass com/google/inject/internal/cglib/core/$ProcessSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$Transformer +instanceKlass com/google/inject/internal/cglib/core/$ObjectSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$ClassInfo +instanceKlass com/google/inject/internal/asm/$Item +instanceKlass com/google/inject/internal/asm/$ByteVector +instanceKlass com/google/inject/internal/asm/$FieldVisitor +instanceKlass com/google/inject/internal/asm/$MethodVisitor +instanceKlass com/google/inject/internal/asm/$AnnotationVisitor +instanceKlass java/security/Timestamp +instanceKlass com/google/inject/internal/asm/$ClassVisitor +instanceKlass com/google/inject/internal/cglib/core/$DefaultGeneratorStrategy +instanceKlass sun/security/timestamp/TimestampToken +instanceKlass com/google/inject/internal/cglib/reflect/$FastClass +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$Source +instanceKlass com/google/inject/internal/cglib/core/$Predicate +instanceKlass com/google/inject/internal/cglib/core/$GeneratorStrategy +instanceKlass com/google/inject/internal/cglib/core/$DefaultNamingPolicy +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator +instanceKlass com/google/inject/internal/cglib/core/$ClassGenerator +instanceKlass sun/security/pkcs/PKCS9Attributes +instanceKlass com/google/inject/internal/cglib/core/$NamingPolicy +instanceKlass com/google/inject/internal/BytecodeGen +instanceKlass com/google/inject/Exposed +instanceKlass com/google/inject/internal/ProviderMethod +instanceKlass com/google/inject/spi/ProvidesMethodBinding +instanceKlass com/google/inject/spi/ProviderWithExtensionVisitor +instanceKlass com/mathworks/cmlink/implementations/git/GitAdapterFactory +instanceKlass com/google/inject/spi/ProviderLookup$1 +instanceKlass com/google/inject/spi/ProviderWithDependencies +instanceKlass com/google/inject/spi/ProviderLookup +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$TimeoutTask +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$DaemonThreadFactory +instanceKlass com/google/inject/spi/Dependency +instanceKlass com/google/inject/internal/Nullability +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/io/ISVNConnectionListener +instanceKlass org/tmatesoft/svn/core/io/ISVNSession +instanceKlass com/mathworks/install_impl/archive/zip/commonscompress/CommonsCompressArchiveFactory +instanceKlass com/mathworks/install/archive/ArchiveFactory +instanceKlass com/mathworks/install_impl/DefaultProductCorrelatorImpl +instanceKlass com/mathworks/install/ProductCorrelator +instanceKlass com/mathworks/install/udc/NoOpUsageDataCollectorImpl +instanceKlass com/mathworks/install/udc/UsageDataCollector +instanceKlass com/mathworks/install_impl/InstallerDownloadInfoContainerImpl +instanceKlass com/mathworks/install/InstallerDownloadInfoContainer +instanceKlass com/mathworks/install_impl/XMLParseStrategyForInstall +instanceKlass com/mathworks/install/XMLParseStrategy +instanceKlass com/mathworks/install_impl/ProductDownloaderImpl +instanceKlass com/mathworks/install/ProductDownloader +instanceKlass com/mathworks/install_impl/ContentOptimizerImpl +instanceKlass com/mathworks/install/ContentOptimizer +instanceKlass com/mathworks/install_impl/XMLInstallationFileParserImpl +instanceKlass com/mathworks/install/input/XMLInstallationFileParser +instanceKlass com/mathworks/install_impl/InstalledProductDataVersionImpl +instanceKlass org/tmatesoft/svn/core/wc/admin/SVNAdminBasicClient +instanceKlass org/tmatesoft/svn/core/wc/ISVNEventHandler +instanceKlass com/mathworks/install/InstalledProductDataVersion +instanceKlass com/mathworks/install_impl/InstallConfigurationPersistenceImpl +instanceKlass com/mathworks/net/hyperlink/HyperlinkProvider +instanceKlass com/mathworks/install/Installer +instanceKlass com/mathworks/install/SoftwareManager +instanceKlass com/mathworks/instutil/IO +instanceKlass com/mathworks/instutil/FolderUtils +instanceKlass com/mathworks/install/service/ServiceFactory +instanceKlass org/tmatesoft/svn/core/wc/SVNBasicClient +instanceKlass com/mathworks/install/InstallerRequirements +instanceKlass com/mathworks/install/InstallConfigurationPersistence +instanceKlass com/mathworks/install/command/CommandFactory +instanceKlass com/mathworks/install/Product +instanceKlass org/tmatesoft/svn/core/wc/SVNClientManager +instanceKlass org/tmatesoft/svn/core/wc/ISVNRepositoryPool +instanceKlass com/google/inject/util/Providers$ConstantProvider +instanceKlass com/google/inject/util/Providers +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$SimplePasswordStorage +instanceKlass com/google/inject/Inject +instanceKlass javax/inject/Inject +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$3 +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMembers +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$2 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$1 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetStringCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetKeyringInfoCallback +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMember +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationDoneCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring +instanceKlass com/google/inject/spi/InjectionPoint +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNMacOsKeychain +instanceKlass com/mathworks/install_impl/ProductInstallerImpl +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$WinCryptPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$IPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWinCrypt +instanceKlass com/mathworks/install_impl/status/InstallStatusObserverAdapter +instanceKlass javax/inject/Named +instanceKlass com/google/inject/Key$AnnotationInstanceStrategy +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptions +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNHostOptionsProvider +instanceKlass com/google/common/util/concurrent/Uninterruptibles +instanceKlass com/google/common/base/Platform +instanceKlass com/google/common/base/Stopwatch +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNPersistentAuthenticationProvider +instanceKlass com/google/common/util/concurrent/ExecutionList +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$1 +instanceKlass com/google/common/util/concurrent/AbstractFuture +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$CacheAuthenticationProvider +instanceKlass com/google/common/util/concurrent/ListenableFuture +instanceKlass com/google/common/cache/LocalCache$LoadingValueReference +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$DumbAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorageOptions +instanceKlass java/lang/annotation/Documented +instanceKlass java/lang/annotation/Inherited +instanceKlass javax/net/ssl/TrustManager +instanceKlass java/lang/annotation/Target +instanceKlass org/tmatesoft/svn/core/auth/ISVNProxyManager +instanceKlass org/tmatesoft/svn/core/auth/SVNAuthentication +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNSSHHostVerifier +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNSSLPasspharsePromptSupport +instanceKlass sun/reflect/annotation/AnnotationParser$1 +instanceKlass sun/reflect/annotation/ExceptionProxy +instanceKlass sun/reflect/annotation/AnnotationType$1 +instanceKlass java/lang/annotation/Retention +instanceKlass javax/inject/Qualifier +instanceKlass com/google/inject/BindingAnnotation +instanceKlass javax/inject/Scope +instanceKlass com/google/inject/ScopeAnnotation +instanceKlass com/google/inject/internal/Annotations$AnnotationChecker +instanceKlass com/google/inject/internal/Annotations$3 +instanceKlass com/google/inject/internal/Annotations +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNCompositeConfigFile +instanceKlass com/google/inject/name/NamedImpl +instanceKlass com/google/inject/name/Named +instanceKlass com/google/inject/name/Names +instanceKlass com/mathworks/install/status/InstallStatusObserver +instanceKlass com/mathworks/install_impl/XMLParserFactoryImpl +instanceKlass com/mathworks/install/XMLParserFactory +instanceKlass com/mathworks/install_impl/ComponentInstallerImpl +instanceKlass com/mathworks/install/ComponentInstaller +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNConfigFile +instanceKlass com/mathworks/install_impl/ComponentContainerImpl +instanceKlass com/mathworks/install/ComponentContainer +instanceKlass com/mathworks/install_impl/ProductContainerImpl +instanceKlass org/tmatesoft/svn/core/wc/ISVNMerger +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNOptions +instanceKlass org/tmatesoft/svn/core/wc/ISVNMergerFactory +instanceKlass com/google/inject/internal/Scoping +instanceKlass com/google/inject/internal/InternalFactory +instanceKlass com/sun/jna/Structure$ByReference +instanceKlass com/google/inject/spi/InstanceBinding +instanceKlass com/sun/jna/Function$PostCallRead +instanceKlass com/google/inject/spi/ConstructorBinding +instanceKlass java/lang/reflect/AnnotatedType +instanceKlass com/sun/jna/Library$Handler$FunctionInfo +instanceKlass com/google/inject/internal/DelayedInitialize +instanceKlass com/google/inject/spi/ProviderKeyBinding +instanceKlass com/sun/jna/WeakIdentityHashMap +instanceKlass com/google/inject/spi/ProviderInstanceBinding +instanceKlass com/google/inject/spi/HasDependencies +instanceKlass com/google/inject/spi/LinkedKeyBinding +instanceKlass com/google/inject/spi/UntargettedBinding +instanceKlass com/sun/jna/Structure$StructField +instanceKlass com/google/inject/internal/BindingImpl +instanceKlass com/sun/jna/Structure$LayoutInfo +instanceKlass com/google/common/base/Suppliers$MemoizingSupplier +instanceKlass com/google/inject/Key$1 +instanceKlass com/sun/jna/NativeMappedConverter +instanceKlass com/sun/jna/TypeConverter +instanceKlass com/google/inject/Key$AnnotationStrategy +instanceKlass com/mathworks/install/ProductContainer +instanceKlass com/google/common/base/Optional +instanceKlass com/google/inject/Provides +instanceKlass com/google/inject/internal/ProviderMethodsModule$Signature +instanceKlass java/lang/reflect/Proxy$1 +instanceKlass com/sun/jna/FunctionMapper +instanceKlass com/sun/jna/NativeLibrary +instanceKlass com/sun/jna/Library$Handler +instanceKlass com/google/common/collect/ImmutableMap$Builder +instanceKlass com/sun/jna/Native$7 +instanceKlass com/sun/jna/Native$2 +instanceKlass com/google/inject/internal/MoreTypes +instanceKlass com/sun/jna/Structure$FFIType$FFITypes +instanceKlass com/sun/jna/Native$ffi_callback +instanceKlass com/google/inject/TypeLiteral +instanceKlass com/sun/jna/PointerType +instanceKlass com/sun/jna/NativeMapped +instanceKlass com/google/inject/spi/ModuleAnnotatedMethodScanner +instanceKlass javax/inject/Singleton +instanceKlass com/sun/jna/WString +instanceKlass com/google/inject/spi/ElementSource +instanceKlass com/sun/jna/CallbackProxy +instanceKlass com/google/inject/spi/ScopeBinding +instanceKlass com/google/inject/Scopes$2 +instanceKlass com/google/inject/Scopes$1 +instanceKlass com/sun/jna/Callback +instanceKlass com/google/common/collect/AbstractMapEntry +instanceKlass com/sun/jna/Structure$ByValue +instanceKlass com/google/common/collect/LinkedHashMultimap$ValueSetLink +instanceKlass com/sun/jna/FromNativeContext +instanceKlass com/sun/jna/FromNativeConverter +instanceKlass com/google/common/collect/SetMultimap +instanceKlass com/sun/jna/ToNativeConverter +instanceKlass com/sun/jna/ToNativeContext +instanceKlass com/google/inject/internal/CycleDetectingLock +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory +instanceKlass com/google/inject/Provider +instanceKlass javax/inject/Provider +instanceKlass com/google/inject/internal/SingletonScope +instanceKlass com/google/inject/Scope +instanceKlass com/sun/jna/Structure +instanceKlass com/google/inject/Scopes +instanceKlass com/google/inject/Singleton +instanceKlass com/google/inject/spi/Elements$ModuleInfo +instanceKlass com/google/inject/PrivateModule +instanceKlass com/google/inject/internal/util/StackTraceElements$InMemoryStackTraceElement +instanceKlass com/sun/jna/Pointer +instanceKlass com/google/inject/internal/util/StackTraceElements +instanceKlass com/google/inject/spi/ModuleSource +instanceKlass com/google/inject/internal/InternalFlags$1 +instanceKlass com/google/inject/internal/InternalFlags +instanceKlass com/google/inject/internal/ProviderMethodsModule +instanceKlass com/google/common/collect/Hashing +instanceKlass com/google/inject/internal/AbstractBindingBuilder +instanceKlass com/google/inject/binder/ConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedElementBuilder +instanceKlass com/google/inject/binder/AnnotatedBindingBuilder +instanceKlass com/google/inject/binder/LinkedBindingBuilder +instanceKlass com/google/inject/binder/ScopedBindingBuilder +instanceKlass com/google/inject/spi/Elements$RecordingBinder +instanceKlass com/google/inject/PrivateBinder +instanceKlass com/google/inject/Binding +instanceKlass com/google/inject/spi/DefaultBindingTargetVisitor +instanceKlass com/google/inject/spi/BindingTargetVisitor +instanceKlass com/google/inject/spi/Elements +instanceKlass com/google/inject/internal/InjectorShell$RootModule +instanceKlass java/util/concurrent/ConcurrentLinkedQueue$Node +instanceKlass com/google/common/cache/Weigher +instanceKlass com/google/common/cache/LocalCache$1 +instanceKlass com/google/common/util/concurrent/ListeningScheduledExecutorService +instanceKlass com/google/common/util/concurrent/ListeningExecutorService +instanceKlass com/google/common/util/concurrent/MoreExecutors +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileTypeFinder +instanceKlass com/google/common/cache/LocalCache$ReferenceEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2$1 +instanceKlass com/google/common/cache/CacheLoader +instanceKlass com/google/common/cache/LocalCache$LocalManualCache +instanceKlass com/google/inject/internal/WeakKeySet$1 +instanceKlass com/google/common/cache/LocalCache$StrongValueReference +instanceKlass com/google/common/cache/LocalCache$ValueReference +instanceKlass com/google/common/cache/CacheBuilder$2 +instanceKlass com/google/common/cache/CacheStats +instanceKlass sun/awt/geom/Edge +instanceKlass com/google/common/base/Suppliers$SupplierOfInstance +instanceKlass sun/awt/geom/ChainEnd +instanceKlass sun/awt/geom/CurveLink +instanceKlass sun/awt/geom/AreaOp$1 +instanceKlass com/google/common/base/Suppliers +instanceKlass sun/awt/geom/AreaOp +instanceKlass com/google/common/cache/CacheBuilder$1 +instanceKlass com/google/common/cache/AbstractCache$StatsCounter +instanceKlass com/google/common/cache/LoadingCache +instanceKlass com/google/common/cache/Cache +instanceKlass sun/awt/geom/Curve +instanceKlass com/google/common/base/Supplier +instanceKlass com/google/common/cache/CacheBuilder +instanceKlass java/awt/geom/Area +instanceKlass com/google/common/cache/RemovalListener +instanceKlass com/google/inject/internal/WeakKeySet +instanceKlass com/google/inject/internal/State$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$1 +instanceKlass com/mathworks/util/TypeFilter$1 +instanceKlass com/google/inject/internal/InheritingState +instanceKlass com/google/inject/internal/ProcessedBindingData +instanceKlass com/google/inject/spi/Element +instanceKlass com/google/inject/spi/DefaultElementVisitor +instanceKlass com/jidesoft/grid/HasFocusCellRenderer +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$RowLoadRequest +instanceKlass com/mathworks/util/TypeFilter$TargetedRequest +instanceKlass com/google/inject/internal/State +instanceKlass com/jidesoft/swing/NavigationComponent +instanceKlass com/google/inject/internal/InjectorShell$Builder +instanceKlass com/google/inject/internal/Initializable +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUIDelegate$Cell +instanceKlass com/google/inject/internal/Initializer +instanceKlass com/google/common/collect/CollectPreconditions +instanceKlass com/google/common/collect/ImmutableCollection$Builder +instanceKlass com/jidesoft/grid/HeaderStyleModel +instanceKlass com/google/inject/internal/util/SourceProvider +instanceKlass com/google/inject/Key +instanceKlass com/google/inject/internal/Errors$Converter +instanceKlass com/google/common/collect/Platform +instanceKlass com/jidesoft/plaf/vsnet/VsnetUtils +instanceKlass com/google/inject/internal/Errors +instanceKlass com/google/inject/internal/util/Stopwatch +instanceKlass com/google/inject/internal/ContextualCallable +instanceKlass java/awt/geom/Path2D$Iterator +instanceKlass sun/dc/pr/Rasterizer$ConsumerDisposer +instanceKlass com/google/inject/Injector +instanceKlass sun/dc/pr/PathDasher$1 +instanceKlass sun/dc/pr/PathDasher +instanceKlass com/google/inject/internal/InternalInjectorCreator +instanceKlass sun/awt/geom/PathConsumer2D +instanceKlass sun/dc/pr/PathStroker$1 +instanceKlass sun/dc/pr/PathStroker +instanceKlass com/google/inject/Guice +instanceKlass com/google/inject/Binder +instanceKlass com/google/inject/spi/BindingScopingVisitor +instanceKlass com/mathworks/instutil/Machine +instanceKlass com/mathworks/instutil/Registry +instanceKlass com/mathworks/instutil/system/HostIdProvider +instanceKlass sun/dc/pr/PathFiller$1 +instanceKlass sun/dc/pr/PathFiller +instanceKlass sun/dc/path/PathConsumer +instanceKlass sun/dc/pr/Rasterizer +instanceKlass sun/java2d/pipe/AATileGenerator +instanceKlass com/google/inject/util/Modules$RealOverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules$EmptyModule +instanceKlass com/google/inject/spi/ElementVisitor +instanceKlass com/google/inject/util/Modules$OverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules +instanceKlass com/mathworks/install/archive/ArchiveInputStreamExtractor +instanceKlass com/mathworks/install/archive/zip/commonscompress/ArchiveEntryExtractor +instanceKlass com/mathworks/install/archive/ArchiveFileExtractor +instanceKlass com/mathworks/install/InstallOption +instanceKlass com/mathworks/install/command/Command +instanceKlass com/mathworks/install_impl/InstallConfigurationAdapter +instanceKlass com/mathworks/install/InstalledProductDataFactory +instanceKlass com/mathworks/instutil/MinimalProducts +instanceKlass com/mathworks/install/InstallerFactory +instanceKlass com/mathworks/install/DefaultDirectoryProvider +instanceKlass com/mathworks/install/DownloaderBuilderFactory +instanceKlass com/mathworks/install/InstallerBuilder +instanceKlass com/mathworks/install/SoftwareManagerBuilder +instanceKlass com/mathworks/install/InstalledProductData +instanceKlass com/mathworks/install/ProductInstaller +instanceKlass com/mathworks/install/InstallConfiguration +instanceKlass com/google/inject/AbstractModule +instanceKlass com/google/inject/Module +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace +instanceKlass org/netbeans/editor/DrawGraphics$GraphicsDG$1 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$1 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$Task +instanceKlass com/mathworks/install_impl/InstalledProductFactory +instanceKlass com/mathworks/addons_product/ProductManagerUtils +instanceKlass com/mathworks/addons_product/MatlabDesktopStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategyFactory +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils$1 +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils +instanceKlass com/mathworks/addons_common/notificationframework/StartupCacheInitializationTask +instanceKlass com/mathworks/addons_toolbox/AddOnInstallationObserverAdapter +instanceKlass com/mathworks/appmanagement/addons/AppManagerUtils +instanceKlass com/mathworks/addons_zip/tasks/AddOnInstallationObservers +instanceKlass com/mathworks/addons_common/AddonCustomMetadata +instanceKlass java/nio/file/SimpleFileVisitor +instanceKlass com/mathworks/addons_zip/utils/ZipManagerUtils +instanceKlass com/mathworks/addons_app/AppManager +instanceKlass org/netbeans/editor/DrawEngine$DrawInfo +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$1 +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader +instanceKlass com/mathworks/toolboxmanagement/ToolboxContributedToolsLoader +instanceKlass org/netbeans/editor/DrawContext +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserverCollection +instanceKlass com/mathworks/toolboxmanagement/DefaultToolboxManagementObserver +instanceKlass org/netbeans/editor/DrawEngine +instanceKlass com/mathworks/toolboxmanagement/ExecutorServiceFactory +instanceKlass com/mathworks/toolboxmanagement/CustomToolboxManager +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserver +instanceKlass com/mathworks/addons_toolbox/ToolboxManagerForAddOns +instanceKlass org/netbeans/editor/DrawGraphics$AbstractDG +instanceKlass com/mathworks/widgets/text/MWEditorUIUtils +instanceKlass com/mathworks/addons_common/DocumentationProvider +instanceKlass com/mathworks/services/lmgr/FeatureInfoList +instanceKlass com/mathworks/addons_product/CommandBuilder +instanceKlass com/mathworks/addons_product/ProductManager +instanceKlass com/mathworks/supportsoftwarematlabmanagement/api/UninstallAPI +instanceKlass com/mathworks/install_task/BackgroundTask +instanceKlass com/mathworks/supportsoftwareinstaller/api/InstallAPI +instanceKlass com/mathworks/hwsmanagement/HwsManager +instanceKlass com/mathworks/supportsoftwareinstaller/addons/SupportSoftwareInstallerObserver +instanceKlass com/mathworks/addons_common/InstalledAddon +instanceKlass com/mathworks/addons_zip/ZipManager +instanceKlass com/mathworks/addons_mlconnector/MLConnectorManager +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserverImpl +instanceKlass java/awt/PrintGraphics +instanceKlass java/awt/print/PrinterGraphics +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache$LazyHolder +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserver +instanceKlass sun/swing/ImageCache$Entry +instanceKlass com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache +instanceKlass com/sun/java/swing/plaf/windows/AnimationController +instanceKlass java/awt/geom/RectIterator +instanceKlass java/awt/geom/PathIterator +instanceKlass com/mathworks/addons/launchers/InitializeCacheAndRegisterAddonsAndAddSupportPackages +instanceKlass java/awt/GradientPaintContext +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport +instanceKlass com/mathworks/mde/liveeditor/BackingStoreUpdater +instanceKlass com/mathworks/mde/liveeditor/LiveEditorSectionsInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorFunctionsInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditor +instanceKlass com/mathworks/mwswing/MJFileChooserPerPlatform +instanceKlass com/mathworks/mwswing/NativeDialogLauncher +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument +instanceKlass sun/java2d/opengl/OGLGraphicsConfig +instanceKlass com/mathworks/html/PageChangedListener +instanceKlass sun/java2d/pipe/hw/AccelGraphicsConfig +instanceKlass sun/java2d/pipe/hw/BufferedContextProvider +instanceKlass sun/awt/SunGraphicsCallback +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher$IgnoresAncestorKeyBindings +instanceKlass javax/swing/RepaintManager$4 +instanceKlass javax/swing/RepaintManager$2$1 +instanceKlass javax/swing/RepaintManager$3 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$2 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$1 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory +instanceKlass com/mathworks/widgets/text/fold/FoldInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorInitializationManager +instanceKlass com/mathworks/mde/desk/MLDesktop$7$1 +instanceKlass com/mathworks/widgets/text/mcode/MFoldInfoCollector +instanceKlass com/mathworks/mde/cmdwin/CmdWinSyntaxWrapper +instanceKlass com/mathworks/jmi/MatlabEvent +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$Builder$1 +instanceKlass com/mathworks/util/Disposable$Parent +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger$MyActionListener +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger +instanceKlass com/mathworks/mwswing/MJScrollPane$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$16 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$15 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$13 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$12 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$11 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$PreferenceListener +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$31 +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$DragListener +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$2 +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$1 +instanceKlass ca/odell/glazedlists/impl/gui/ThreadProxyEventList$UpdateRunner +instanceKlass ca/odell/glazedlists/swing/GlazedListsSwing +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$HistoryTableFormat +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeNode +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$WriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$ReadLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$Sync +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock +instanceKlass ca/odell/glazedlists/matchers/AbstractMatcherEditor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecordListListener +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandSaver +instanceKlass sun/nio/ch/Util$5 +instanceKlass sun/nio/ch/FileChannelImpl$Unmapper +instanceKlass java/nio/channels/FileChannel$MapMode +instanceKlass org/apache/commons/io/filefilter/IOFileFilter +instanceKlass org/apache/commons/io/FileUtils +instanceKlass java/io/DeleteOnExitHook$1 +instanceKlass java/io/DeleteOnExitHook +instanceKlass java/io/File$TempDirectory +instanceKlass com/sun/jna/Platform +instanceKlass com/sun/jna/Native$5 +instanceKlass com/sun/jna/Native$1 +instanceKlass com/sun/jna/Callback$UncaughtExceptionHandler +instanceKlass com/sun/jna/Native +instanceKlass com/sun/jna/Version +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsCFLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNCLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWin32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNKernel32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWinCryptLibrary +instanceKlass com/sun/jna/win32/StdCallLibrary +instanceKlass com/sun/jna/win32/StdCall +instanceKlass com/sun/jna/AltCallingConvention +instanceKlass org/tmatesoft/svn/core/internal/util/jna/JNALibraryLoader +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWin32Util +instanceKlass org/tmatesoft/svn/util/SVNLogType +instanceKlass com/sun/jna/Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNJNAUtil +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/wc/SVNWCUtil +instanceKlass org/tmatesoft/svn/core/wc/ISVNOptions +instanceKlass org/tmatesoft/svn/core/io/ISVNTunnelProvider +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer$AuthenticatingClientManager +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitCanceller +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnection +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnector +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap$TableEntry +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap +instanceKlass org/tmatesoft/svn/core/io/ISVNReporter +instanceKlass org/tmatesoft/svn/core/io/SVNRepository +instanceKlass org/tmatesoft/svn/core/io/SVNRepositoryFactory +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/NoUpgradeSVNAdminFactorySelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminArea +instanceKlass java/time/Instant +instanceKlass java/time/temporal/TemporalAdjuster +instanceKlass java/time/temporal/Temporal +instanceKlass java/time/temporal/TemporalAccessor +instanceKlass java/nio/file/FileVisitor +instanceKlass java/nio/file/FileStore +instanceKlass java/nio/file/attribute/FileAttributeView +instanceKlass java/nio/file/attribute/AttributeView +instanceKlass java/nio/file/attribute/UserPrincipal +instanceKlass java/util/function/BiPredicate +instanceKlass java/nio/file/attribute/FileTime +instanceKlass java/nio/file/CopyOption +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$1 +instanceKlass com/mathworks/util/CircularBuffer +instanceKlass com/mathworks/services/SystemServices +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecord +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$ProductionPrefsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$PrefsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNClassLoader +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory$DefaultSelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory +instanceKlass org/tmatesoft/svn/util/SVNDebugLog +instanceKlass com/mathworks/mde/cmdhist/AltHistory$FocusAppearanceUpdater +instanceKlass org/tmatesoft/svn/util/SVNDebugLogAdapter +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/CategorizedView +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/ViewBuilder +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/BooleanMapUtil +instanceKlass org/tmatesoft/svn/util/ISVNDebugLog +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/logging/SVNKitLogFactory +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/ISVNAdminAreaFactorySelector +instanceKlass com/mathworks/cmlink/api/CMRepository +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$4 +instanceKlass com/mathworks/cmlink/api/CMAdapter +instanceKlass com/mathworks/cmlink/api/CMInteractor +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitAdapterFactory +instanceKlass com/mathworks/cmlink/api/CMAdapterFactory +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$SpecialCharacter +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMRepository +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$AnnotatedInfo +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/Cancellable +instanceKlass org/tmatesoft/svn/core/ISVNCanceller +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/BuiltInSVNAdapterFactory +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r11b/R11bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r14a/R14aToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r16b/R16bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/InternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/management/registration/OsgiCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/SingletonCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingTerminator$1 +instanceKlass com/mathworks/cmlink/management/pool/shared/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingExceptionHandler +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingStatusBroadcaster +instanceKlass com/mathworks/util/collections/CopyOnWriteList +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$7 +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingProgressIndicator +instanceKlass com/mathworks/cmlink/management/pool/shared/SharedInteractor +instanceKlass com/mathworks/cmlink/api/TerminationListener +instanceKlass com/mathworks/cmlink/management/pool/shared/CMProcessTerminator +instanceKlass com/mathworks/cmlink/management/pool/AutoRefreshedRecord +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor$1 +instanceKlass java/util/concurrent/SynchronousQueue$TransferStack$SNode +instanceKlass java/util/concurrent/SynchronousQueue$Transferer +instanceKlass com/mathworks/toolbox/shared/computils/threads/CountingThreadFactory +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/PreferenceManager +instanceKlass com/mathworks/widgets/grouptable/ColorStyle$1 +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects$CombinedToolTipGenerator +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCache +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheQueries +instanceKlass com/mathworks/cmlink/management/cache/RootSearchingCmStatusCacheFactory +instanceKlass com/mathworks/cmlink/management/pool/adapter/PrefBackedAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/util/adapter/transformer/MutableTransformableCMAdapterFactoryProvider$NullAdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/transformer/AdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProviderDecorator +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheEntry +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheProvider +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProvider +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$PathToolTipGenerator +instanceKlass com/mathworks/cmlink/management/pool/CmStatusCacheProvider +instanceKlass com/mathworks/cmlink/management/pool/shared/SingletonPooledCmStatusCacheProvider +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemFilter +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemUtils +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance$StatusToolTipGenerator +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects +instanceKlass sun/text/normalizer/ReplaceableString +instanceKlass sun/text/normalizer/Replaceable +instanceKlass sun/text/normalizer/UCharacterIterator +instanceKlass sun/text/CollatorUtilities +instanceKlass java/text/CollationElementIterator +instanceKlass sun/text/normalizer/UTF16 +instanceKlass sun/text/ComposedCharIter +instanceKlass java/text/EntryPair +instanceKlass java/text/PatternEntry +instanceKlass java/text/PatternEntry$Parser +instanceKlass java/text/MergeCollation +instanceKlass sun/text/normalizer/NormalizerImpl$DecomposeArgs +instanceKlass sun/text/normalizer/UnicodeSet +instanceKlass sun/text/normalizer/UnicodeMatcher +instanceKlass sun/text/normalizer/CharTrie$FriendAgent +instanceKlass sun/text/normalizer/Trie +instanceKlass sun/text/normalizer/NormalizerImpl$AuxTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$NormTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$FCDTrieImpl +instanceKlass sun/text/normalizer/Trie$DataManipulate +instanceKlass sun/text/normalizer/ICUBinary +instanceKlass sun/text/normalizer/NormalizerDataReader +instanceKlass sun/text/normalizer/ICUBinary$Authenticate +instanceKlass sun/text/normalizer/ICUData +instanceKlass sun/text/normalizer/NormalizerImpl +instanceKlass sun/text/UCompactIntArray +instanceKlass sun/text/IntHashtable +instanceKlass java/text/RBCollationTables$BuildAPI +instanceKlass java/text/RBTableBuilder +instanceKlass java/text/RBCollationTables +instanceKlass java/text/Collator +instanceKlass com/mathworks/fileutils/UIFileUtils$NameTokenizer +instanceKlass com/mathworks/fileutils/UIFileUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$GrayedOutStyle +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1$1 +instanceKlass com/mathworks/widgets/grouptable/ColorStyle +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$2 +instanceKlass com/mathworks/widgets/grouptable/RowComparator +instanceKlass com/mathworks/widgets/grouptable/OldAscendingSortComparator +instanceKlass com/mathworks/widgets/grouptable/AscendingSortComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection +instanceKlass com/mathworks/jmi/AWTUtilities$WatchedRunnable +instanceKlass com/mathworks/jmi/AWTUtilities$WatchDog +instanceKlass com/mathworks/jmi/AWTUtilities +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$3 +instanceKlass java/awt/EventQueue$4 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$CategoryActionsProvider +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryPopupListenerShower +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteMenuContributor +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandToolSet$FavoriteToolTipContentProvider +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$7 +instanceKlass com/mathworks/mde/desk/MLDesktop$9 +instanceKlass com/mathworks/mde/desk/MLDesktop$6 +instanceKlass com/mathworks/mde/desk/MLDesktop$18 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1$1 +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$RestoreData +instanceKlass java/awt/SequencedEvent$1 +instanceKlass sun/awt/AWTAccessor$SequencedEventAccessor +instanceKlass com/mathworks/mde/cmdhist/CommandStyleInfo +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointRenderUtils +instanceKlass java/awt/GridBagLayoutInfo +instanceKlass javax/swing/JTable$5 +instanceKlass com/jidesoft/swing/StyleRange +instanceKlass com/jidesoft/swing/StyledLabelBuilder +instanceKlass com/jidesoft/grid/HeaderLineWrapModel +instanceKlass com/mathworks/mde/explorer/Explorer$19 +instanceKlass com/mathworks/toolstrip/impl/ToolstripSectionComponentWithHeader$1 +instanceKlass com/mathworks/toolstrip/plaf/SplitButtonUI$Layout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$1 +instanceKlass com/google/common/collect/Iterators$2 +instanceKlass com/google/common/collect/PeekingIterator +instanceKlass com/google/common/collect/Iterators +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$Section +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout$Sizes +instanceKlass javax/swing/SizeRequirements +instanceKlass com/mathworks/jmi/NativeWindows +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1 +instanceKlass org/openide/util/WeakListenerImpl +instanceKlass org/openide/util/WeakListeners +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireEnabler +instanceKlass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange +instanceKlass javax/accessibility/AccessibleTableModelChange +instanceKlass com/jidesoft/grid/JideTable$s_ +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$2 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyFocusListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyMouseListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyKeyListener +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$RootProvider +instanceKlass com/mathworks/util/event/EventUtils +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher$1 +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$MnemonicEventListener +instanceKlass com/google/common/collect/Sets +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory$1 +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$Collector +instanceKlass com/mathworks/util/async/Callback +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManager +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$KeyboardFocusProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$MnemonicsManagerFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers +instanceKlass com/mathworks/ddux/UIEventLog +instanceKlass com/mathworks/mde/desk/DDUXLoggerBridge +instanceKlass com/mathworks/mwswing/UIEventLogger$Implementation +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1 +instanceKlass com/mathworks/widgets/editor/EditorRegionImpl +instanceKlass com/mathworks/matlab/api/editor/EditorRegion +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/Cell +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$6 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$13 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$9 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$8 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$7 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$5 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$2 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveUtils +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor +instanceKlass com/mathworks/mde/editor/EditorViewClient$1$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$3 +instanceKlass com/mathworks/widgets/text/STPIncSearch +instanceKlass com/mathworks/mde/editor/EditorStatusBar$2 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$FunctionNameListener +instanceKlass com/mathworks/mwswing/MJCheckBox$ActionPropertyHandler +instanceKlass com/mathworks/mde/editor/EditorOptions +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$4 +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory$WindowAction$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$4 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$3 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7$1 +instanceKlass com/mathworks/widgets/util/EmptyIcon +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$2 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$8 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActions$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$RunTestsToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/LiveMatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptionsListener +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/MatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActionController +instanceKlass com/mathworks/mde/editor/EditorUtils$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$8 +instanceKlass com/mathworks/mlwidgets/debug/MatlabDebuggerActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$15 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$14 +instanceKlass com/mathworks/mde/editor/ProfilerButton$1 +instanceKlass com/mathworks/mde/editor/ProfilerButton +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$4 +instanceKlass com/mathworks/mde/editor/EditorUtils$5 +instanceKlass com/mathworks/mde/editor/EditorUtils$4 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListListenerBridge +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$15 +instanceKlass java/rmi/server/UID +instanceKlass org/apache/commons/lang/exception/Nestable +instanceKlass org/apache/commons/lang/StringEscapeUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$9 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager$SelectableMenuItem +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu$2 +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$10 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$13 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$12 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$7 +instanceKlass com/jidesoft/swing/JideMenu$1 +instanceKlass com/jidesoft/swing/JideMenu$MenuCreator +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuOriginCalculator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$2 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$1 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector$PropertyChangeHandler +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector +instanceKlass ca/odell/glazedlists/impl/SimpleIterator +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorNode +instanceKlass java/util/IdentityHashMap$EntryIterator$Entry +instanceKlass com/jidesoft/introspector/BeanIntrospector$LazyValue +instanceKlass com/jidesoft/utils/TypeUtils +instanceKlass com/jidesoft/introspector/BeanIntrospector +instanceKlass com/jidesoft/introspector/Introspector +instanceKlass com/jidesoft/converter/EnumConverter +instanceKlass com/jidesoft/converter/YearNameConverter +instanceKlass com/jidesoft/converter/MonthNameConverter +instanceKlass com/jidesoft/converter/MultilineStringConverter +instanceKlass com/jidesoft/converter/FontConverter +instanceKlass com/jidesoft/converter/QuarterNameConverter +instanceKlass com/jidesoft/converter/StringArrayConverter +instanceKlass com/jidesoft/converter/ColorConverter +instanceKlass com/jidesoft/converter/MonthConverter +instanceKlass java/text/DateFormatSymbols +instanceKlass com/jidesoft/converter/DateConverter +instanceKlass com/jidesoft/converter/FontNameConverter +instanceKlass com/jidesoft/converter/FileConverter +instanceKlass com/jidesoft/converter/BooleanConverter +instanceKlass com/jidesoft/converter/ArrayConverter +instanceKlass com/jidesoft/converter/NumberConverter +instanceKlass com/jidesoft/converter/ObjectConverterManager +instanceKlass com/jidesoft/converter/DefaultObjectConverter +instanceKlass com/jidesoft/converter/ObjectConverter +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationJideUtils +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$LoadBundle +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/PersistenceUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/PublishOptions +instanceKlass com/mathworks/mlwidgets/configeditor/ui/UiSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$PersistenceSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution +instanceKlass com/mathworks/widgets/menus/DefaultMenuID +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolInfoImpl +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor$DiffToolMenuContribution +instanceKlass com/mathworks/jmi/MatlabWorker$2 +instanceKlass com/mathworks/jmi/MatlabWorker$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$4 +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$3 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution +instanceKlass com/mathworks/mde/editor/codepad/CodepadMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor +instanceKlass com/mathworks/mde/editor/ActionManager$1 +instanceKlass com/mathworks/mde/editor/ActionManager$CodeFoldsMenuItemValidationListener +instanceKlass com/mathworks/mde/editor/ActionManager$3 +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuGroup +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuMenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/ConfigurationPopupMenuCustomizer +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuCustomizer +instanceKlass com/mathworks/widgets/DropdownButton$ArrowIcon +instanceKlass com/mathworks/widgets/DropdownButton$1 +instanceKlass com/mathworks/widgets/PickerButton$2 +instanceKlass com/mathworks/widgets/PickerButton$ToolTippableButton +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration$Type +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$3 +instanceKlass com/mathworks/widgets/PopupMenuCustomizer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$1 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$2 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor$ToolBarItem +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarBuilder +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBars +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$34 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DefaultActionInput +instanceKlass com/mathworks/mde/editor/PathActionInputSource +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreActionProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$DocumentTabActionProvider +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUnhandledException +instanceKlass com/mathworks/mde/editor/EditorToolstripTabFactory +instanceKlass com/mathworks/mde/editor/EditorViewClient$7 +instanceKlass com/mathworks/mde/editor/EditorView$8 +instanceKlass com/mathworks/mde/editor/EditorView$12 +instanceKlass org/apache/xerces/dom/NodeListCache +instanceKlass com/mathworks/widgets/STPStateManagerImpl +instanceKlass com/mathworks/widgets/StateMRUFiles +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl$1 +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl +instanceKlass com/mathworks/mde/editor/EditorStateManager +instanceKlass com/mathworks/mde/editor/EditorStateManagerFactory +instanceKlass org/netbeans/editor/JumpList$Entry +instanceKlass com/mathworks/mde/editor/codepad/Codepad$3 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/AbstractEditorHighlighter +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo$BaseDocumentCell +instanceKlass org/netbeans/editor/AdjustFinder +instanceKlass com/mathworks/widgets/text/mcode/cell/CellUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$1 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadCaretListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadDocumentListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager +instanceKlass com/mathworks/mde/editor/codepad/Codepad$CodepadPrefListener +instanceKlass java/text/ParsePosition +instanceKlass com/mathworks/mde/editor/codepad/Codepad$1 +instanceKlass com/mathworks/mde/editor/PopupAction$Callback +instanceKlass com/mathworks/mde/editor/EditorView$13 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$1 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$2 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$TextEventHandler +instanceKlass com/mathworks/mde/editor/MatlabExecutionDisplayAdapter$DebugInterests$2 +instanceKlass com/mathworks/widgets/text/mcode/MExecutionDisplayAdapter +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter$RepaintListener +instanceKlass com/mathworks/mde/editor/breakpoints/BreakpointInstallationResult +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeIterator +instanceKlass ca/odell/glazedlists/FilterList$PrivateMatcherEditorListener +instanceKlass ca/odell/glazedlists/impl/matchers/TrueMatcher +instanceKlass ca/odell/glazedlists/matchers/Matchers +instanceKlass ca/odell/glazedlists/impl/adt/Barcode +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils$1 +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor$Listener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointViewPopupBuilder +instanceKlass com/mathworks/matlab/api/debug/BreakpointStyle +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUiInfoProvider +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointView +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$5 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$2 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$4 +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$JUnitExpose +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextViewListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextEventHandler +instanceKlass com/mathworks/widgets/text/mcode/CmdManager +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$ClearBkptListener +instanceKlass com/mathworks/matlab/api/debug/BreakpointModel +instanceKlass com/mathworks/matlab/api/debug/BreakpointMarginPopUpMenu +instanceKlass com/mathworks/matlab/api/debug/BreakpointUiInfoProvider +instanceKlass com/mathworks/matlab/api/debug/ContextMenuListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdLineListener +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointMargin +instanceKlass com/mathworks/jmi/MLFileUtils +instanceKlass com/mathworks/widgets/datamodel/FutureFileStorageLocation +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationSelectionListener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMarginProvider +instanceKlass com/mathworks/mde/functionhints/FunctionHintUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$2 +instanceKlass com/mathworks/widgets/editor/SelfRemovingEditorEventListener +instanceKlass com/mathworks/mlwidgets/debug/RunOrContinueAction$2 +instanceKlass com/mathworks/matlab/api/menus/MenuID +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabKeyBindingContributor +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$ViewHierarchyChangeListenerImpl +instanceKlass com/mathworks/widgets/text/fold/MWCodeFoldingSideBar$ViewHierarchyChangeNotifier +instanceKlass org/netbeans/editor/CodeFoldingSideBar$1 +instanceKlass org/netbeans/editor/CodeFoldingSideBar$SideBarFoldHierarchyListener +instanceKlass org/netbeans/editor/CodeFoldingSideBar$Mark +instanceKlass com/mathworks/widgets/text/MWEditorUI$3 +instanceKlass org/netbeans/editor/GlyphGutter$EditorUIListener +instanceKlass org/netbeans/editor/GlyphGutter$3 +instanceKlass org/netbeans/editor/GlyphGutter$Observer +instanceKlass org/netbeans/editor/Annotations$2 +instanceKlass org/netbeans/editor/Annotations$1 +instanceKlass org/netbeans/editor/Annotations$MenuComparator +instanceKlass org/netbeans/editor/GlyphGutter$GlyphGutterFoldHierarchyListener +instanceKlass org/netbeans/editor/Annotations +instanceKlass com/mathworks/mwswing/TextComponentUtils +instanceKlass com/mathworks/widgets/text/DocumentUtils +instanceKlass com/mathworks/widgets/SyntaxTextPane$2$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6$1 +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$UpperOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$LowerOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/util/swing/ElementUtilities +instanceKlass org/netbeans/editor/Syntax$BaseStateInfo +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenInfo +instanceKlass com/mathworks/util/IntBuffer +instanceKlass com/mathworks/widgets/text/matlab/LexicalBuffer +instanceKlass org/netbeans/editor/SyntaxUpdateTokens +instanceKlass org/netbeans/editor/FixLineSyntaxState +instanceKlass org/netbeans/editor/BaseDocument$NotifyModifyStatus +instanceKlass org/netbeans/editor/ext/ExtUtilities +instanceKlass com/mathworks/widgets/text/mcode/MTreeUtils +instanceKlass java/util/DualPivotQuicksort +instanceKlass com/mathworks/widgets/text/mcode/MDocumentUtils +instanceKlass com/mathworks/mwswing/TextComponentUtils$FullIdentifier +instanceKlass com/mathworks/widgets/text/mcode/variables/Variable +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$1 +instanceKlass org/netbeans/editor/BaseCaret$3 +instanceKlass org/netbeans/editor/ext/FormatSupport +instanceKlass org/netbeans/editor/ext/AbstractFormatLayer +instanceKlass org/netbeans/editor/StatusBar$1 +instanceKlass org/netbeans/editor/StatusBar$CaretListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$DocUpdateHandler +instanceKlass com/mathworks/util/tree/TreeUtils$3 +instanceKlass com/mathworks/util/tree/DefaultMutableTree +instanceKlass com/mathworks/util/Cache$Entry +instanceKlass java/util/JumboEnumSet$EnumSetIterator +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldsInfo +instanceKlass com/mathworks/widgets/text/mcode/MTree$1 +instanceKlass com/mathworks/util/Cache +instanceKlass com/mathworks/widgets/text/mcode/MTree$Node +instanceKlass com/mathworks/util/Cache$Loader +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider$1 +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider +instanceKlass com/mathworks/widgets/text/mcode/MTreeBaseDocumentCache +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl$HierarchyUpdateListener +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl +instanceKlass com/mathworks/widgets/text/fold/FoldStateManager +instanceKlass com/mathworks/widgets/StateManager +instanceKlass com/mathworks/widgets/STPStateManagerFactory +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldSettingsListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabState +instanceKlass com/mathworks/widgets/text/matlab/LexicalAccumulator +instanceKlass com/mathworks/widgets/text/matlab/MatlabLexer +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxFactory +instanceKlass com/mathworks/widgets/text/matlab/AbstractTokenManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenManager +instanceKlass com/mathworks/widgets/text/STPMessagePanel$9 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataFactory +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$9 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener$1 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightPrefs +instanceKlass com/mathworks/widgets/text/STPMessagePanel$2 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$8 +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$1 +instanceKlass java/awt/GradientPaint +instanceKlass com/mathworks/widgets/text/STPMessagePanel$7 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessagePainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelPainter +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$TextAlignmentProvider +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelListener +instanceKlass com/mathworks/widgets/text/STPMessagePanel +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$2 +instanceKlass com/mathworks/widgets/text/mcode/MLintPrefsUtils +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$8 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$MLintRunnable +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$1 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread +instanceKlass com/mathworks/widgets/menus/DefaultMenuGroupID +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageBarContributor +instanceKlass com/mathworks/widgets/text/LayerMarkList +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$7 +instanceKlass com/mathworks/widgets/text/mcode/MLint$MessageDefinition +instanceKlass com/mathworks/widgets/text/mcode/MLint$CodeAnalyzerContentType +instanceKlass com/mathworks/widgets/text/mcode/MLint +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightActions +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerActions +instanceKlass com/mathworks/mde/editor/EditorTabCompletion +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$1 +instanceKlass com/mathworks/widgets/text/mcode/MTokenColorMap +instanceKlass com/mathworks/widgets/text/mcode/MColorScheme +instanceKlass com/mathworks/widgets/text/matlab/ColorScheme +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerUtils +instanceKlass com/mathworks/widgets/text/ColoringFactory +instanceKlass java/awt/LightweightDispatcher$2 +instanceKlass com/jidesoft/popup/JidePopup$14 +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$2 +instanceKlass sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar +instanceKlass sun/util/locale/InternalLocaleBuilder +instanceKlass sun/util/locale/StringTokenIterator +instanceKlass sun/util/locale/ParseStatus +instanceKlass sun/awt/im/InputMethodAdapter +instanceKlass java/awt/im/spi/InputMethod +instanceKlass java/awt/im/spi/InputMethodContext +instanceKlass java/awt/im/InputContext +instanceKlass java/awt/Window$1DisposeAction +instanceKlass com/jidesoft/document/DefaultStringConverter +instanceKlass com/jidesoft/swing/AbstractLayoutPersistence +instanceKlass com/jidesoft/swing/StringConverter +instanceKlass com/jidesoft/swing/LayoutPersistence +instanceKlass com/jidesoft/document/FloatingDocumentContainer +instanceKlass com/jidesoft/document/IDocumentGroup +instanceKlass com/jidesoft/document/DocumentComponent +instanceKlass com/jidesoft/swing/IContour +instanceKlass com/jidesoft/document/IDocumentPane +instanceKlass sun/awt/GlobalCursorManager$NativeUpdater +instanceKlass sun/awt/GlobalCursorManager +instanceKlass com/jidesoft/popup/JidePopup$9 +instanceKlass com/jidesoft/popup/JidePopup$6 +instanceKlass com/jidesoft/popup/JidePopup$4 +instanceKlass com/jidesoft/plaf/vsnet/ResizeFrameBorder +instanceKlass com/jidesoft/swing/Resizable +instanceKlass com/jidesoft/utils/PortingUtils +instanceKlass java/awt/peer/DialogPeer +instanceKlass java/awt/BufferCapabilities +instanceKlass java/awt/AttributeValue +instanceKlass sun/awt/NullComponentPeer +instanceKlass java/awt/peer/LightweightPeer +instanceKlass sun/awt/im/ExecutableInputMethodManager$3 +instanceKlass sun/awt/im/InputMethodLocator +instanceKlass sun/awt/windows/WInputMethodDescriptor +instanceKlass java/awt/im/spi/InputMethodDescriptor +instanceKlass sun/awt/im/InputMethodManager +instanceKlass sun/awt/FontConfiguration$2 +instanceKlass sun/awt/NativeLibLoader$1 +instanceKlass sun/awt/NativeLibLoader +instanceKlass sun/awt/PlatformFont +instanceKlass java/awt/peer/FontPeer +instanceKlass javax/swing/RepaintManager$2 +instanceKlass sun/awt/windows/WComponentPeer$2 +instanceKlass sun/awt/windows/WColor +instanceKlass sun/java2d/StateTracker$2 +instanceKlass sun/java2d/StateTracker$1 +instanceKlass sun/java2d/StateTracker +instanceKlass sun/java2d/SurfaceDataProxy +instanceKlass sun/awt/image/SurfaceManager$FlushableCacheData +instanceKlass sun/java2d/windows/GDIRenderer +instanceKlass sun/java2d/ScreenUpdateManager +instanceKlass sun/awt/im/InputMethodWindow +instanceKlass sun/awt/ExtendedKeyCodes +instanceKlass sun/awt/RepaintArea +instanceKlass sun/awt/windows/WWindowPeer$GuiDisposedListener +instanceKlass sun/awt/windows/WWindowPeer$ActiveWindowListener +instanceKlass java/awt/peer/CanvasPeer +instanceKlass java/awt/peer/PanelPeer +instanceKlass java/awt/peer/FramePeer +instanceKlass java/awt/peer/WindowPeer +instanceKlass java/awt/peer/ContainerPeer +instanceKlass java/awt/SplashScreen +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$1 +instanceKlass com/jidesoft/tooltip/c +instanceKlass com/jidesoft/tooltip/ExpandedTip +instanceKlass com/jidesoft/tooltip/d$a_ +instanceKlass com/jidesoft/tooltip/BalloonTipUI$a_ +instanceKlass com/jidesoft/tooltip/composite/EdgeEffectComposite +instanceKlass com/jidesoft/tooltip/ShadowComposite +instanceKlass com/jidesoft/tooltip/shadows/PerspectiveShadow +instanceKlass com/jidesoft/tooltip/shapes/RoundedRectangularBalloonShape +instanceKlass com/jidesoft/tooltip/ShadowStyle +instanceKlass com/jidesoft/tooltip/ShadowSettings +instanceKlass com/mathworks/widgets/tooltip/CalloutRectangularBalloonShape +instanceKlass com/mathworks/mwswing/MJDialog$1 +instanceKlass com/mathworks/mwswing/MJDialog$DoShow +instanceKlass com/mathworks/mwswing/MJDialog$KeyCatcher +instanceKlass com/mathworks/mwswing/TransparentWindowFactory +instanceKlass com/jidesoft/tooltip/BalloonShape +instanceKlass com/mathworks/widgets/messagepanel/MessageModelListener +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$1 +instanceKlass com/mathworks/matlab/api/editor/EditorMessageBarContributor +instanceKlass com/mathworks/mwswing/api/UndoListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$OSGiEditorLayerProviderContributor +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$EditorLayerProviderContributor +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$4 +instanceKlass com/mathworks/mde/editor/EditorView$10 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$EditorKitInfo +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils +instanceKlass com/mathworks/mde/editor/EditorMKit$1 +instanceKlass com/mathworks/mlwidgets/MatlabHyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/LayerUtils +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabMKit$MatlabHelper +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$MTreeListener +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer +instanceKlass com/mathworks/matlab/api/editor/EditorLayer +instanceKlass com/mathworks/widgets/messagepanel/AbstractMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessageModel +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$NonLocalDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$CodeAnalyzerDocHelper +instanceKlass com/mathworks/matlab/api/editor/EditorTipDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$VariableHighlightingLayerStatusInfoProvider +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/EditorTip$CommandHelper +instanceKlass org/netbeans/editor/ext/FormatLayer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabEditorKitProvider +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$3 +instanceKlass com/mathworks/mwswing/MJRadioButtonMenuItem$ActionPropertyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1 +instanceKlass com/mathworks/widgets/SplitScreenActions +instanceKlass com/mathworks/mde/editor/EditorApplicationComponentActivator +instanceKlass com/mathworks/widgets/text/ComponentActivator +instanceKlass com/mathworks/mde/editor/EditorSyntaxTextPane$EditorDropTargetListener +instanceKlass com/mathworks/widgets/text/SmartFormatter +instanceKlass com/mathworks/widgets/text/MWCaret$1 +instanceKlass com/mathworks/widgets/text/TextDragAndDrop +instanceKlass com/mathworks/widgets/text/MWDrawLayerFactory +instanceKlass org/netbeans/editor/BaseCaret$2 +instanceKlass org/netbeans/editor/SegmentCache +instanceKlass org/netbeans/editor/DocumentUtilities +instanceKlass org/netbeans/editor/BaseCaret$1 +instanceKlass org/netbeans/editor/Syntax$StateInfo +instanceKlass com/mathworks/widgets/Tokenizer$TokenInfo +instanceKlass com/mathworks/widgets/TokenizerFactory +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingImpl +instanceKlass org/netbeans/editor/Mark$MarkComparator +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingController +instanceKlass org/netbeans/editor/Mark +instanceKlass org/netbeans/editor/BaseCaret +instanceKlass org/netbeans/editor/AtomicLockListener +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$2 +instanceKlass org/netbeans/editor/view/spi/FlyView$Parent +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$OffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$1 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$2 +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter$HighlighterUpdateListener +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager +instanceKlass com/mathworks/widgets/text/MWEditorUI$4 +instanceKlass org/netbeans/editor/FontMetricsCache$InfoImpl +instanceKlass org/netbeans/editor/EditorUI$3 +instanceKlass com/mathworks/widgets/text/MWToolTipSupport$DismissEventListener +instanceKlass org/netbeans/editor/ext/ToolTipSupport$2 +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl$CollapsedFoldIterator +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl +instanceKlass org/netbeans/editor/FontMetricsCache$Info +instanceKlass org/netbeans/editor/FontMetricsCache +instanceKlass com/mathworks/widgets/text/MWEditorUI$2 +instanceKlass org/netbeans/editor/EditorUI$ComponentLock +instanceKlass org/netbeans/editor/PopupManager$HorizontalBounds +instanceKlass org/netbeans/editor/PopupManager$Placement +instanceKlass com/mathworks/widgets/text/layer/EditorTip +instanceKlass com/mathworks/widgets/text/layer/EditorTip$MEditorTipStrategy +instanceKlass com/mathworks/widgets/text/MWEditorUI$1 +instanceKlass org/netbeans/editor/EditorUI$1 +instanceKlass org/netbeans/editor/PopupManager +instanceKlass org/netbeans/editor/StatusBar +instanceKlass org/netbeans/editor/SideBarFactory +instanceKlass org/netbeans/editor/Annotations$AnnotationsListener +instanceKlass org/netbeans/api/editor/fold/FoldUtilities +instanceKlass org/netbeans/spi/editor/fold/FoldHierarchyTransaction +instanceKlass org/netbeans/api/editor/fold/FoldStateChange +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyTransactionImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$1 +instanceKlass org/netbeans/api/editor/fold/Fold +instanceKlass org/netbeans/modules/editor/fold/SpiPackageAccessor +instanceKlass org/netbeans/spi/editor/fold/FoldOperation +instanceKlass org/netbeans/modules/editor/fold/FoldOperationImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution +instanceKlass org/netbeans/modules/editor/fold/ApiPackageAccessor +instanceKlass org/netbeans/api/editor/fold/FoldHierarchy +instanceKlass org/netbeans/lib/editor/util/PriorityMutex +instanceKlass org/netbeans/lib/editor/view/GapObjectArray +instanceKlass org/netbeans/lib/editor/view/GapObjectArray$RemoveUpdater +instanceKlass org/netbeans/editor/BaseTextUI$UIWatcher +instanceKlass com/mathworks/widgets/SyntaxTextPane$2 +instanceKlass com/mathworks/widgets/SyntaxTextPane$1 +instanceKlass org/netbeans/editor/LocaleSupport$Localizer +instanceKlass org/netbeans/editor/LocaleSupport +instanceKlass org/openide/util/Task +instanceKlass org/openide/util/Cancellable +instanceKlass org/openide/util/Utilities$RE +instanceKlass org/openide/util/Utilities +instanceKlass org/openide/util/RequestProcessor +instanceKlass org/openide/util/NbBundle$LocaleIterator +instanceKlass org/openide/util/NbBundle +instanceKlass com/mathworks/widgets/SyntaxTextPane$EmptyUniqueKeyProvider +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedFocusListener +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedCaretListener +instanceKlass com/mathworks/mwswing/undo/FilterUndoableEdit +instanceKlass com/mathworks/widgets/SyntaxTextPane$ActionManager +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$3 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$1 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$KitStore +instanceKlass org/netbeans/editor/Settings$KitAndValue +instanceKlass org/netbeans/api/editor/fold/FoldHierarchyListener +instanceKlass org/netbeans/editor/ActionFactory$JumpListNextAction$1 +instanceKlass org/netbeans/editor/JumpList$1 +instanceKlass org/netbeans/editor/JumpList +instanceKlass org/netbeans/editor/ActionFactory$JumpListPrevAction$1 +instanceKlass com/mathworks/widgets/text/layer/LayerActions +instanceKlass com/mathworks/widgets/text/MWKit$InstancesNotEqual +instanceKlass org/netbeans/lib/editor/util/swing/DocumentListenerPriority +instanceKlass org/netbeans/editor/BaseDocument$PropertyEvaluator +instanceKlass org/netbeans/editor/MarkChain +instanceKlass org/netbeans/editor/view/spi/EstimatedSpanView +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState$Parent +instanceKlass org/netbeans/editor/FindSupport +instanceKlass org/netbeans/editor/BaseDocument$1 +instanceKlass org/netbeans/editor/Registry +instanceKlass org/netbeans/editor/Analyzer +instanceKlass org/openide/ErrorManager +instanceKlass org/netbeans/editor/Utilities +instanceKlass java/lang/Package$1 +instanceKlass org/netbeans/editor/FinderFactory$AbstractFinder +instanceKlass org/netbeans/spi/editor/fold/FoldManager +instanceKlass com/mathworks/widgets/text/mcode/MFoldManagerFactory +instanceKlass org/netbeans/spi/editor/fold/FoldManagerFactory +instanceKlass org/netbeans/modules/editor/fold/FoldManagerFactoryProvider +instanceKlass com/mathworks/widgets/text/fold/CustomFoldManagerFactoryProvider +instanceKlass org/netbeans/editor/WeakPropertyChangeSupport +instanceKlass org/netbeans/editor/AnnotationTypes +instanceKlass org/netbeans/editor/SettingsAdapter +instanceKlass com/mathworks/widgets/text/mcode/codepad/CodepadOptions +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults$1 +instanceKlass com/mathworks/mwswing/GraphicsUtils +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults +instanceKlass org/netbeans/editor/MultiKeymap +instanceKlass org/netbeans/editor/Formatter +instanceKlass org/netbeans/editor/ext/Completion +instanceKlass org/netbeans/editor/ext/CompletionJavaDoc +instanceKlass org/netbeans/editor/SettingsUtil$PrintColoringEvaluator +instanceKlass org/netbeans/editor/SettingsUtil +instanceKlass org/netbeans/editor/LineElement +instanceKlass org/netbeans/lib/editor/util/swing/GapBranchElement +instanceKlass org/netbeans/lib/editor/util/PriorityListenerList +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities$ModificationTextElement +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities +instanceKlass org/netbeans/editor/DrawLayerList +instanceKlass org/netbeans/editor/AcceptorFactory$4 +instanceKlass org/netbeans/editor/AcceptorFactory$3 +instanceKlass org/netbeans/editor/AcceptorFactory$2 +instanceKlass org/netbeans/editor/AcceptorFactory$1 +instanceKlass org/netbeans/editor/AcceptorFactory$TwoChar +instanceKlass org/netbeans/editor/AcceptorFactory$Char +instanceKlass org/netbeans/editor/AcceptorFactory$Fixed +instanceKlass org/netbeans/editor/Acceptor +instanceKlass org/netbeans/editor/AcceptorFactory +instanceKlass org/netbeans/editor/SettingsDefaults +instanceKlass org/netbeans/editor/BasePosition +instanceKlass org/netbeans/editor/MultiMark +instanceKlass org/netbeans/editor/MarkVector +instanceKlass org/netbeans/editor/DocumentContent +instanceKlass org/netbeans/editor/GapStart +instanceKlass org/netbeans/editor/PrintContainer +instanceKlass javax/swing/text/DocumentFilter$FilterBypass +instanceKlass org/netbeans/editor/CharSeq +instanceKlass org/netbeans/editor/Finder +instanceKlass org/netbeans/editor/DrawGraphics +instanceKlass org/netbeans/editor/AtomicLockDocument +instanceKlass com/mathworks/widgets/STPPrefsManager$PrintColoringEvaluator +instanceKlass com/mathworks/widgets/text/ErrorLogger +instanceKlass org/netbeans/api/editor/fold/FoldType +instanceKlass com/mathworks/widgets/text/mcode/MTree +instanceKlass com/mathworks/widgets/text/simscape/SimscapeSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxHighlighting +instanceKlass org/netbeans/modules/xml/text/syntax/XMLTokenIDs +instanceKlass com/mathworks/widgets/text/xml/XMLSyntaxHighlighting +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$8 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4$1 +instanceKlass com/mathworks/mlservices/MLExecutionEvent$1 +instanceKlass java/util/function/Predicate +instanceKlass java/util/function/Consumer +instanceKlass java/util/function/UnaryOperator +instanceKlass com/mathworks/widgets/text/cuda/CudaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cplusplus/CAndCPlusPlusSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/vhdl/VHDLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/verilog/VerilogSyntaxHighlighting +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass org/netbeans/editor/ImageTokenID +instanceKlass org/netbeans/editor/BaseTokenCategory +instanceKlass com/mathworks/widgets/text/java/JavaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/CommonResources +instanceKlass com/mathworks/jmi/MatlabMCR$AWTReplyEvent +instanceKlass org/netbeans/editor/TokenContextPath$ArrayMatcher +instanceKlass org/netbeans/editor/TokenContextPath +instanceKlass org/netbeans/editor/BaseTokenID +instanceKlass com/mathworks/widgets/text/DefaultSyntaxColor +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceLog +instanceKlass com/mathworks/widgets/text/tlc/TLCSyntaxHighlighting +instanceKlass com/mathworks/widgets/SyntaxHighlightingUtils +instanceKlass com/mathworks/widgets/STPPrefsManager$STPPrefsListener +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceCommands +instanceKlass org/netbeans/editor/SettingsNames +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$4 +instanceKlass com/mathworks/hg/util/HGPeerQueue +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeNotification +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$PollingNotificationMacPathsWorkaround +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$6 +instanceKlass com/mathworks/widgets/text/EditorPrefsAccessor +instanceKlass org/netbeans/editor/Settings$Evaluator +instanceKlass org/netbeans/editor/TokenContext +instanceKlass com/mathworks/widgets/STPPrefsManager +instanceKlass org/netbeans/editor/Settings$AbstractInitializer +instanceKlass org/netbeans/editor/Settings$Initializer +instanceKlass org/netbeans/editor/Settings +instanceKlass org/netbeans/editor/BaseKit$1 +instanceKlass org/netbeans/editor/Syntax +instanceKlass org/netbeans/editor/ImplementationProvider +instanceKlass org/netbeans/editor/SyntaxSupport +instanceKlass com/mathworks/mwswing/undo/UndoManagerListener +instanceKlass com/mathworks/widgets/text/ViewHierarchyModificationComponent +instanceKlass org/netbeans/editor/EditorUI +instanceKlass java/text/AttributedCharacterIterator +instanceKlass org/netbeans/editor/DrawLayer$AbstractLayer +instanceKlass org/netbeans/editor/DrawLayer +instanceKlass org/netbeans/editor/SettingsChangeListener +instanceKlass org/netbeans/editor/TokenID +instanceKlass org/netbeans/editor/TokenCategory +instanceKlass org/netbeans/editor/Coloring +instanceKlass com/mathworks/matlab/api/editor/SyntaxHighlightingColor +instanceKlass java/text/AttributedString +instanceKlass com/mathworks/widgets/text/print/TextPrintable +instanceKlass java/awt/print/Printable +instanceKlass javax/print/DocPrintJob +instanceKlass com/mathworks/mwswing/api/ExtendedUndoManager +instanceKlass com/mathworks/mwswing/api/UndoabilityChangeListener +instanceKlass com/mathworks/widgets/text/ViewHierarchyChangeListener +instanceKlass java/awt/im/InputMethodRequests +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$LastActiveFocusListener +instanceKlass com/mathworks/mde/editor/EditorView$4 +instanceKlass com/mathworks/mde/editor/EditorView$7 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$PostKeyListener +instanceKlass com/mathworks/mde/editor/EditorView$6 +instanceKlass com/mathworks/mde/editor/EditorView$5 +instanceKlass com/mathworks/hg/util/HGUtils$ComponentImageRunnable +instanceKlass com/mathworks/hg/util/HGUtils +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$Builder +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager$1 +instanceKlass com/mathworks/widgets/desk/DTClient$DeferredPropertyChange +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$DebugStateListener$1 +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$2 +instanceKlass com/mathworks/mde/editor/codepad/CodepadAction +instanceKlass com/mathworks/mde/editor/ActionManager$OSGiKeyBindingContributorProvider +instanceKlass com/mathworks/widgets/editor/SaveOnBlurImpl +instanceKlass com/mathworks/mde/editor/EditorView$1 +instanceKlass com/mathworks/mde/editor/EditorView$EditorPrefListener +instanceKlass com/mathworks/mde/editor/EditorView$11 +instanceKlass com/mathworks/mde/editor/EditorView$3 +instanceKlass com/mathworks/mde/editor/EditorView$2 +instanceKlass com/mathworks/util/AbsoluteFile +instanceKlass com/mathworks/matlab/api/debug/BreakpointMargin +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay +instanceKlass com/mathworks/mde/editor/codepad/Codepad +instanceKlass com/mathworks/mde/editor/EditorView$OSGiEditorLayerProviderDistributor +instanceKlass com/mathworks/mde/editor/EditorViewClient$8 +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter +instanceKlass com/mathworks/matlab/api/datamodel/BackingStoreEventListener +instanceKlass com/mathworks/widgets/SyntaxTextPane$UniqueKeyProvider +instanceKlass com/mathworks/matlab/api/debug/ViewProvider +instanceKlass com/mathworks/mde/editor/codepad/CodepadContainer +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView +instanceKlass com/mathworks/matlab/api/editor/SaveOnBlur +instanceKlass com/mathworks/matlab/api/editor/DirtyState +instanceKlass com/mathworks/mde/editor/EditorView$EditorLayerProviderDistributor +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$2 +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPopupMenuListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxListSelectionListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPropertyChangeListener +instanceKlass com/mathworks/mwswing/ComboBoxItem +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$3 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$2 +instanceKlass javax/swing/JList$ListSelectionHandler +instanceKlass com/mathworks/toolstrip/plaf/ToolstripListUI$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$StackCallback +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1$1 +instanceKlass com/mathworks/widgets/datamodel/StorageLocationUtils +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefreshListenerManager +instanceKlass com/mathworks/mde/editor/MatlabEditor$EditorVisibilityListener +instanceKlass com/mathworks/matlab/api/debug/ExecutionArrowMargin +instanceKlass com/mathworks/mde/editor/TextFileUiInfoProvider$1 +instanceKlass com/mathworks/hg/peer/DebugUtilities$1 +instanceKlass com/mathworks/hg/peer/DebugUtilities +instanceKlass com/mathworks/matlab/api/dataview/BasicUiInfoProvider +instanceKlass com/mathworks/hg/peer/FigureRenderLocker +instanceKlass com/mathworks/widgets/datamodel/FileStorageLocation +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch$1 +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$DefaultEncodingProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultDialogProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyFileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$AlwaysSaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyDefaultFileNameProvider +instanceKlass org/apache/commons/io/IOCase +instanceKlass com/mathworks/widgets/text/EditorPreferences +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils$1 +instanceKlass com/mathworks/widgets/text/vhdl/VHDLLanguage +instanceKlass com/mathworks/widgets/text/verilog/VerilogLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CLanguage +instanceKlass com/mathworks/widgets/text/tlc/TLCLanguage +instanceKlass com/mathworks/widgets/text/simscape/SimscapeLanguage +instanceKlass com/mathworks/widgets/text/xml/XMLLanguage +instanceKlass com/mathworks/widgets/text/java/JavaLanguage +instanceKlass com/mathworks/widgets/text/cuda/CudaLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CPlusPlusLanguage +instanceKlass com/mathworks/widgets/text/plain/PlainLanguage +instanceKlass com/mathworks/widgets/text/mcode/MLanguage +instanceKlass com/mathworks/project/impl/PRJLanguage +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils +instanceKlass com/mathworks/widgets/text/STPViewModificationInterface +instanceKlass com/mathworks/matlab/api/debug/ViewProviderKey +instanceKlass com/mathworks/widgets/SyntaxTextPaneUtilities +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DialogInfoUserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore$UserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/DialogProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$12 +instanceKlass com/mathworks/mde/editor/EditorViewClient$11 +instanceKlass com/mathworks/mde/editor/EditorViewClient$2 +instanceKlass com/mathworks/mde/editor/MatlabEditor +instanceKlass com/mathworks/mde/editor/EditorViewClient$6 +instanceKlass com/mathworks/mde/editor/EditorViewClient$5 +instanceKlass com/mathworks/mde/editor/EditorViewClient$4 +instanceKlass com/mathworks/mde/editor/EditorViewClient$3 +instanceKlass com/mathworks/mwswing/api/DirtyStateChangeListener +instanceKlass com/mathworks/mde/editor/EditorViewListener +instanceKlass com/mathworks/mde/editor/EditorViewCallback +instanceKlass com/mathworks/widgets/debug/DebuggerManager$DebuggerManagerStateListener +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$DBStackCallback +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry +instanceKlass com/mathworks/mwswing/UIEventLogger +instanceKlass com/mathworks/widgets/desk/DTEvent +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$2 +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$WSBPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LoggingActionListener +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$VariableInfo +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$PlottingSelectionListener +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDialogs +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$1 +instanceKlass com/mathworks/mlwidgets/workspace/VariableRecordlistModel$SizeStringComparator +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDnDListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger$LoggingProxyActionListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceSelectionPopupMenu$LoggingActionListener +instanceKlass com/mathworks/widgets/spreadsheet/IClipboardOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/IPrintingOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/ISaveOpProvider +instanceKlass com/mathworks/mlwidgets/array/UpdatableData +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$WorkspaceTableActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$AppFocusL +instanceKlass com/mathworks/widgets/recordlist/RecordlistResources +instanceKlass com/mathworks/widgets/recordlist/ObserverAdapter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$3 +instanceKlass javax/swing/JTable$4 +instanceKlass javax/swing/JTable$2 +instanceKlass javax/swing/JTable$Resizable3 +instanceKlass javax/swing/JTable$Resizable2 +instanceKlass com/mathworks/widgets/spreadsheet/UndoActionFactory +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$FieldEditor$1 +instanceKlass javax/swing/DefaultCellEditor$EditorDelegate +instanceKlass com/mathworks/widgets/recordlist/FullRLTCellRenderer +instanceKlass com/mathworks/mlwidgets/workspace/util/WorkspaceIcon +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ColumnSelectionRecorder +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$SelectionRecorder +instanceKlass com/mathworks/util/ArrayUtils$EmptyObjects +instanceKlass com/mathworks/widgets/recordlist/RecordlistSelectionTracker +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ActionHelper +instanceKlass com/mathworks/widgets/recordlist/ActionUtils +instanceKlass com/mathworks/mwswing/table/PlatformDelegatingHeaderRenderer +instanceKlass com/mathworks/mwswing/TableUtils +instanceKlass javax/swing/tree/TreeCellEditor +instanceKlass com/mathworks/util/ArrayUtils$EmptyPrimitives +instanceKlass com/mathworks/mlwidgets/graphics/PlotPickerOpener +instanceKlass com/mathworks/widgets/recordlist/IEditingObserver +instanceKlass com/mathworks/widgets/recordlist/ICopyingObserver +instanceKlass com/mathworks/widgets/recordlist/IOpeningObserver +instanceKlass com/mathworks/widgets/recordlist/ICreationObserver +instanceKlass com/mathworks/widgets/recordlist/IDuplicationObserver +instanceKlass com/mathworks/mwswing/TableCell +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$RowLocationData +instanceKlass com/mathworks/widgets/recordlist/IRecordFilter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$ViewUpdater +instanceKlass com/mathworks/mwswing/table/RestrictedSortTableModel +instanceKlass com/mathworks/mwswing/table/PresortedTableModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistListener +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$ActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$InputMapActionProvider +instanceKlass com/mathworks/mwswing/MJTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/spreadsheet/IUndoManagerProvider +instanceKlass com/mathworks/widgets/recordlist/IDeletionObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordOperationObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordSecondaryIconProvider +instanceKlass com/mathworks/widgets/recordlist/InternalActionHelper +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspacePrefs +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WhosObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterObserver +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceMCRProvider +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceChange +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$LocalWorkspaceEventObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$3 +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterFreeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WorkspaceChangeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener +instanceKlass com/mathworks/mlwidgets/workspace/FetchedValueBuffer +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$MWMCompletionObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$RQI +instanceKlass com/mathworks/mlwidgets/workspace/NestingInformation +instanceKlass com/mathworks/mlwidgets/workspace/WhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/ClassicWhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceResources +instanceKlass com/mathworks/widgets/spreadsheet/format/FormatIdentifier$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordQueryInformant +instanceKlass com/mathworks/widgets/datatransfer/VariableLiteral +instanceKlass com/mathworks/widgets/recordlist/AbstractRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IVirtualRecordContainer +instanceKlass com/mathworks/widgets/recordlist/IRecordIconProvider +instanceKlass com/mathworks/mlwidgets/workspace/ValueLookup +instanceKlass com/mathworks/widgets/recordlist/IRecordlistRefresher +instanceKlass com/mathworks/widgets/recordlist/IRestrictedSortRecordlist +instanceKlass com/mathworks/widgets/recordlist/IRecordEditor +instanceKlass com/mathworks/widgets/recordlist/IRecordOpener +instanceKlass com/mathworks/widgets/recordlist/IRecordDuplicator +instanceKlass com/mathworks/widgets/recordlist/IRecordDeleter +instanceKlass com/mathworks/widgets/recordlist/IRecordCreator +instanceKlass com/mathworks/widgets/recordlist/IRecordFieldCopier +instanceKlass com/mathworks/widgets/recordlist/IRecordCopier +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LocalChangeListener +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$StackInfoChange +instanceKlass com/mathworks/widgets/spreadsheet/IUndoOpProvider +instanceKlass com/mathworks/widgets/recordlist/IRecordValueMutator +instanceKlass com/mathworks/widgets/recordlist/IRecordlistMutator +instanceKlass com/mathworks/mlwidgets/graphics/IPlotPickerDisplayTrigger +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphingActionListener +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphableInfoProvider +instanceKlass com/mathworks/mlwidgets/workspace/IWorkspaceActionProvider +instanceKlass com/mathworks/widgets/recordlist/IActionProvider +instanceKlass com/mathworks/widgets/recordlist/IGenericNameSupplier +instanceKlass com/mathworks/widgets/recordlist/IRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistFieldConfig +instanceKlass com/mathworks/widgets/recordlist/IRecordContainer +instanceKlass com/mathworks/jmi/AWTUtilities$Latch +instanceKlass com/mathworks/jmi/AWTUtilities$MatlabWait +instanceKlass com/mathworks/jmi/AWTUtilities$Synchronizer +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$FlushRunnable +instanceKlass com/mathworks/mde/cmdwin/CommandWindowRegistrar +instanceKlass com/mathworks/mlservices/MLCommandWindow +instanceKlass com/mathworks/mlservices/MLCommandWindowRegistrar +instanceKlass org/netbeans/editor/WeakTimerListener +instanceKlass java/util/Observable +instanceKlass com/mathworks/widgets/incSearch/IncSearchStatusBar$1 +instanceKlass com/mathworks/widgets/incSearch/IncSearch$IncSearchResults +instanceKlass com/mathworks/mwswing/ClipboardMonitor$TypeChangedNotifier +instanceKlass com/mathworks/mde/cmdwin/CmdWinEditorKit$1 +instanceKlass com/mathworks/mwswing/ClipboardMonitor +instanceKlass java/text/StringCharacterIterator +instanceKlass com/mathworks/mwswing/text/MTextAction$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionExecutionListener +instanceKlass com/mathworks/mde/cmdwin/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionInterface +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletion +instanceKlass com/mathworks/mde/cmdhist/AltHistory$RecallListener +instanceKlass com/mathworks/mde/cmdwin/CmdWin$1 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$1 +instanceKlass javax/accessibility/AccessibleBundle +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$MyAppearanceFocusListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$5 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$2 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$1 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$SearchData +instanceKlass com/mathworks/mwswing/text/DocumentSearch +instanceKlass com/mathworks/widgets/Tokenizer +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup +instanceKlass com/mathworks/services/KeyboardPrefs +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$Options +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup$TokenMatchListener +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$8 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWPrefsListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWCaretListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$FindClientImpl +instanceKlass com/mathworks/mde/cmdwin/CWDragDropImpl +instanceKlass com/mathworks/mde/cmdwin/XCaret$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$3 +instanceKlass com/mathworks/util/Assert +instanceKlass com/mathworks/widgets/find/FindDialog +instanceKlass com/mathworks/widgets/find/FindParentListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CmdWinFontListener +instanceKlass com/mathworks/widgets/incSearch/IncSearchData +instanceKlass com/mathworks/widgets/find/FindClientInterface +instanceKlass javax/print/DocFlavor +instanceKlass javax/print/attribute/AttributeSet +instanceKlass com/mathworks/mwswing/datatransfer/AutoScroller +instanceKlass com/mathworks/services/PrefEvent +instanceKlass com/mathworks/mwswing/ClipboardListener +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$4 +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$2 +instanceKlass com/mathworks/mwswing/MJComboBox$2 +instanceKlass com/mathworks/mwswing/MJComboBox$3 +instanceKlass com/mathworks/mwswing/MJComboBox$DelegatingMouseListener +instanceKlass com/mathworks/mwswing/MacAppearanceUtils +instanceKlass com/mathworks/mwswing/MJToggleButton$ActionPropertyHandler +instanceKlass com/mathworks/widgets/desk/DTTabbedDocumentPane$1 +instanceKlass org/jdesktop/animation/timing/interpolation/LengthItem +instanceKlass org/jdesktop/animation/timing/interpolation/SplineInterpolator +instanceKlass org/jdesktop/animation/timing/interpolation/Interpolator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingRemovals +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingAdditions +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$Animator +instanceKlass com/mathworks/widgets/desk/Range +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$TabDragger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$EdgeListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$TileAction$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$AnimationDoneListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$Tiling +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties +instanceKlass com/mathworks/widgets/desk/DTTitleBar$2 +instanceKlass com/mathworks/widgets/desk/DTTitleButton$ActionPropertyListener +instanceKlass com/mathworks/widgets/desk/DTTitleButton$IconData +instanceKlass com/mathworks/widgets/desk/DTBorderFactory$SelectionDependent +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$BarState +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ContainerState +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$State +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step$1 +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Condition +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder +instanceKlass com/mathworks/mde/explorer/Explorer$1 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils$3 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils +instanceKlass com/mathworks/widgets/desk/DTToolSet$1 +instanceKlass com/mathworks/widgets/desk/DTToolSet$KeyOwnerCombo +instanceKlass com/mathworks/widgets/desk/DTToolBarFactory +instanceKlass com/mathworks/widgets/desk/DTToolSet$ItemInfo +instanceKlass com/mathworks/widgets/desk/DTToolSet +instanceKlass com/mathworks/mde/explorer/Explorer$9 +instanceKlass com/mathworks/mde/explorer/Explorer$17 +instanceKlass com/mathworks/mde/explorer/Explorer$15 +instanceKlass com/mathworks/mde/explorer/Explorer$16 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$3 +instanceKlass com/mathworks/services/ColorPrefs$ColorListener +instanceKlass com/mathworks/services/ColorPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ColorListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/util/ExplicitColorAndFontProvider +instanceKlass com/mathworks/util/tree/TreeUtils$8 +instanceKlass com/mathworks/util/tree/TreeUtils$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$5 +instanceKlass com/mathworks/util/tree/VisitStrategy +instanceKlass com/mathworks/util/tree/TreeUtils$9 +instanceKlass com/mathworks/util/tree/Visitor +instanceKlass com/mathworks/util/tree/TreeUtils +instanceKlass com/mathworks/util/tree/ComponentTree +instanceKlass com/mathworks/services/OldFontPrefs +instanceKlass com/mathworks/mde/functionbrowser/FunctionBrowserFontPrefs +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils$ClipboardPrefListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs$DecimalSeparatorListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs +instanceKlass com/mathworks/widgets/spreadsheet/format/SupplementalFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/CompositeFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory$BooleanFormatterImpl +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalar +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$GEBestFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$1 +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/Formatter +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils +instanceKlass com/mathworks/mde/array/ArrayEditorFontPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowserResources +instanceKlass com/mathworks/mde/workspace/WorkspaceFontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$ExplorerFontPrefs +instanceKlass com/mathworks/mde/editor/EditorFontPrefs +instanceKlass com/mathworks/mde/cmdhist/CmdHistoryPrefs +instanceKlass com/mathworks/services/FontPrefs$FontItem +instanceKlass java/util/concurrent/ConcurrentHashMap$Traverser +instanceKlass sun/font/SunFontManager$TTorT1Filter +instanceKlass sun/font/SunFontManager$4 +instanceKlass sun/font/SunFontManager$13 +instanceKlass com/mathworks/services/PrefsAWT +instanceKlass com/mathworks/services/FontPrefs$HtmlFontPrefs +instanceKlass com/mathworks/services/FontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ComponentListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$1 +instanceKlass com/mathworks/util/tree/Tree +instanceKlass com/mathworks/services/FontListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils +instanceKlass com/mathworks/mde/explorer/Explorer$4 +instanceKlass com/mathworks/mde/explorer/Explorer$3 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$5 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$4 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$Header$1 +instanceKlass java/awt/GridBagConstraints +instanceKlass java/awt/GridBagLayout +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$2 +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder +instanceKlass javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneBorder +instanceKlass com/mathworks/sourcecontrol/ThreadUtils$1 +instanceKlass com/mathworks/sourcecontrol/ThreadUtils +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$2 +instanceKlass java/util/UUID$Holder +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$1 +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$2 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$2 +instanceKlass com/mathworks/widgets/tooltip/TooltipUtils +instanceKlass com/mathworks/mwswing/ComponentUtils +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$2 +instanceKlass javax/swing/text/html/AccessibleHTML$DocumentHandler +instanceKlass javax/swing/text/html/AccessibleHTML$ElementInfo +instanceKlass javax/swing/text/html/AccessibleHTML$PropertyChangeHandler +instanceKlass javax/swing/text/html/AccessibleHTML +instanceKlass javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable +instanceKlass java/util/Formatter$Conversion +instanceKlass java/util/Formatter$Flags +instanceKlass java/util/Formatter$FormatSpecifier +instanceKlass java/util/Formatter$FixedString +instanceKlass java/util/Formatter$FormatString +instanceKlass java/util/Formatter +instanceKlass com/mathworks/util/HTMLUtils +instanceKlass javax/swing/text/GapContent$UndoPosRef +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer$ElemChanges +instanceKlass javax/swing/text/DefaultStyledDocument$ElementSpec +instanceKlass javax/swing/text/html/parser/ContentModelState +instanceKlass javax/swing/text/html/parser/TagStack +instanceKlass javax/swing/text/html/parser/TagElement +instanceKlass javax/swing/text/html/parser/Parser +instanceKlass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction +instanceKlass javax/swing/text/html/HTMLEditorKit$ParserCallback +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$6 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$1 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$5 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$3 +instanceKlass javax/swing/text/TabableView +instanceKlass javax/swing/text/html/StyleSheet$1 +instanceKlass javax/swing/text/html/CSSBorder$StrokePainter +instanceKlass javax/swing/text/html/CSSBorder$SolidPainter +instanceKlass javax/swing/text/html/CSSBorder$NullPainter +instanceKlass javax/swing/text/html/CSSBorder$BorderPainter +instanceKlass javax/swing/text/html/StyleSheet$BoxPainter +instanceKlass javax/swing/text/html/StyleSheet$SearchBuffer +instanceKlass javax/swing/text/html/MuxingAttributeSet +instanceKlass javax/swing/text/FlowView$FlowStrategy +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler +instanceKlass javax/swing/text/html/parser/AttributeList +instanceKlass javax/swing/text/html/parser/ContentModel +instanceKlass javax/swing/text/html/parser/ParserDelegator$1 +instanceKlass javax/swing/text/html/parser/Entity +instanceKlass javax/swing/text/html/parser/Element +instanceKlass javax/swing/text/html/parser/DTD +instanceKlass javax/swing/text/html/parser/DTDConstants +instanceKlass javax/swing/text/html/HTMLEditorKit$Parser +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer +instanceKlass javax/swing/text/html/CSS$ShorthandMarginParser +instanceKlass javax/swing/text/html/CSS$LengthUnit +instanceKlass javax/swing/text/html/CSSParser +instanceKlass javax/swing/text/html/StyleSheet$CssParser +instanceKlass javax/swing/text/html/CSSParser$CSSParserCallback +instanceKlass javax/swing/text/html/HTMLEditorKit$1 +instanceKlass javax/swing/text/html/StyleSheet$SelectorMapping +instanceKlass javax/swing/text/html/CSS$CssValue +instanceKlass com/mathworks/html/Url +instanceKlass javax/swing/text/html/CSS$Value +instanceKlass javax/swing/text/html/CSS$Attribute +instanceKlass com/mathworks/helpsearch/SearchConfig +instanceKlass com/mathworks/help/helpui/DocUrlParser +instanceKlass javax/swing/text/html/CSS +instanceKlass com/mathworks/helpsearch/product/DocumentationSet +instanceKlass javax/swing/text/StyledEditorKit$AttributeTracker +instanceKlass javax/swing/text/html/HTML$Attribute +instanceKlass javax/swing/text/html/HTML +instanceKlass javax/swing/text/html/HTML$Tag +instanceKlass javax/swing/text/html/HTMLEditorKit$HTMLFactory +instanceKlass javax/swing/text/StyledEditorKit$StyledViewFactory +instanceKlass javax/swing/text/StyledDocument +instanceKlass com/mathworks/services/settings/SettingLevel$1 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$1 +instanceKlass javax/swing/event/HyperlinkListener +instanceKlass com/mathworks/widgets/HyperlinkTextLabel +instanceKlass com/mathworks/toolbox/shared/computils/widgets/DisposableBusyAffordance$1 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$9 +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$SourceControlUIHolder +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$MainContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DynamicMenuContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$4 +instanceKlass com/mathworks/matlab/api/explorer/CutCopyPasteActionValidator +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/debug/MatlabDebuggerActionsProvider +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugEventTranslator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptor +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugStackPruner +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackInfo +instanceKlass com/mathworks/fileutils/MatlabPath$PathEntry +instanceKlass com/mathworks/jmi/Matlab$6 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/jmi/MatlabPath$PathEntry +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller +instanceKlass sun/awt/datatransfer/DataTransferer$IndexedComparator +instanceKlass sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder +instanceKlass java/awt/datatransfer/SystemFlavorMap$2 +instanceKlass sun/net/DefaultProgressMeteringPolicy +instanceKlass sun/net/ProgressMeteringPolicy +instanceKlass sun/net/ProgressMonitor +instanceKlass java/awt/datatransfer/SystemFlavorMap$1 +instanceKlass sun/awt/Mutex +instanceKlass sun/awt/datatransfer/ToolkitThreadBlockedHandler +instanceKlass sun/awt/datatransfer/DataTransferer +instanceKlass java/awt/datatransfer/Clipboard +instanceKlass com/mathworks/widgets/grouptable/transfer/Transfer +instanceKlass com/mathworks/mlwidgets/explorer/util/MLPathUtils +instanceKlass java/awt/EventQueue$1AWTInvocationLock +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$6 +instanceKlass java/util/WeakHashMap$HashIterator +instanceKlass com/mathworks/util/RequestFilter$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$1 +instanceKlass com/mathworks/sourcecontrol/EmptyProject +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$1 +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$2 +instanceKlass com/mathworks/cmlink/util/status/CMStatusChangeServer +instanceKlass com/mathworks/sourcecontrol/SCProcessTerminator +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressState +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster$EventDispatcher +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/controller/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/api/ExceptionHandler +instanceKlass com/mathworks/cmlink/api/StatusBroadcaster +instanceKlass com/mathworks/cmlink/api/ProgressIndicator +instanceKlass com/mathworks/cmlink/util/interactor/CMMonitor +instanceKlass com/mathworks/cmlink/util/adapter/TriggerableTerminator +instanceKlass com/mathworks/cmlink/api/Terminator +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$SCAdapterConnectionManagerHolder +instanceKlass com/mathworks/cmlink/management/cache/CMStatusCacheListener +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapter +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMInteractor +instanceKlass com/mathworks/cmlink/util/interactor/MonitoringApplicationInteractor +instanceKlass com/mathworks/cmlink/api/ApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager +instanceKlass com/mathworks/sourcecontrol/prefs/SCSettingsUtilities +instanceKlass com/mathworks/util/LazyFilter$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$2 +instanceKlass com/mathworks/util/LazyFilter +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ApplicableChecker +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$6 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$5 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$4 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$3 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$2 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$9 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$8 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$1 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$4 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$3 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$2 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$1 +instanceKlass sun/awt/windows/WDesktopPeer +instanceKlass java/awt/peer/DesktopPeer +instanceKlass java/awt/Desktop +instanceKlass java/awt/DisplayMode +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DeleteActionCode +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$5 +instanceKlass com/mathworks/hg/util/JavaSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/AbstractSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/DisplayChangeManager +instanceKlass com/mathworks/mlwidgets/explorer/util/MenuUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$32 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$1 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$7 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$6 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$5 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$4 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$3 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$2 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$1 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$8 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$7 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$6 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$5 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$4 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$3 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/WritablePathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$33 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider$ReportRunner +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$5 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$4 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$1 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$3 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveIconFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider$1 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$2 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$2 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$2 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$1 +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration$1 +instanceKlass com/mathworks/toolboxmanagement/tasks/ToolboxInstallTask +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$CachedData +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$1 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$3 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$1 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$4 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$3 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$2 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$3 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$ImmutableEntry +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem$MountPoint +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput$1 +instanceKlass com/mathworks/util/ObjectPool$Entry +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$1 +instanceKlass com/mathworks/util/ObjectPool +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/CommonsCompressZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$InputFailoverChain +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicate +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$7 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DeferHandler +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$1 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$4 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderBinding +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl$ProviderBinding +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DecorationResolvingInstantiator +instanceKlass com/mathworks/util/ExtendedIterable +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabCodeFileDetailPanel +instanceKlass com/mathworks/matlab/api/explorer/DetailPanel +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/H1Retriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1 +instanceKlass com/mathworks/matlab/api/explorer/ActionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$ActionList +instanceKlass com/mathworks/fileutils/MLFileUtils +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProviderProvider +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter +instanceKlass com/mathworks/widgets/WorkMonitor$1 +instanceKlass javax/accessibility/AccessibleExtendedTable +instanceKlass javax/accessibility/AccessibleTable +instanceKlass javax/accessibility/AccessibleSelection +instanceKlass com/mathworks/explorer/VariableTransferHandler +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TransferFileGroup +instanceKlass java/awt/datatransfer/MimeType +instanceKlass java/awt/datatransfer/MimeTypeParameterList +instanceKlass java/awt/datatransfer/DataFlavor +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/FileTransferHandler +instanceKlass com/mathworks/mwswing/table/ListColorUtils +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$20 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$19 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$18 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$3 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$1 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$1 +instanceKlass com/mathworks/fl/i18n/XMLMessageSystemJNI +instanceKlass com/mathworks/mwswing/CellViewer$4 +instanceKlass com/mathworks/mwswing/CellViewer$3 +instanceKlass com/mathworks/mwswing/CellViewer$2 +instanceKlass com/mathworks/mwswing/CellViewer$1 +instanceKlass com/mathworks/mwswing/CellViewer +instanceKlass com/mathworks/mwswing/CellPainterProvider +instanceKlass com/mathworks/mwswing/CellViewerUtils$Context +instanceKlass com/mathworks/mwswing/CellViewerUtils +instanceKlass com/mathworks/mwswing/DefaultTableCellViewerCustomizer +instanceKlass com/mathworks/widgets/grouptable/RightClickSelectionHandler +instanceKlass com/mathworks/fl/i18n/XMLMessageSystem +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler$3 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$1 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfo +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$2 +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler$2 +instanceKlass com/mathworks/matlab/api/explorer/FileDecorations +instanceKlass com/mathworks/matlab/api/explorer/FileDecorators +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel +instanceKlass com/mathworks/matlab/api/explorer/CoreFileDecoration +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$5 +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionRunner +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$26 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Element +instanceKlass com/jidesoft/grid/SortableTableModel$a_ +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$8 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$4 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$3 +instanceKlass com/mathworks/util/RequestQueue$3 +instanceKlass com/mathworks/util/RequestQueue$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileListExpansionContext +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider$State +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$2 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$1 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$3 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$1 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener +instanceKlass com/mathworks/widgets/grouptable/ToolTipSupport +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$37 +instanceKlass java/awt/font/LineMetrics +instanceKlass sun/font/CoreMetrics +instanceKlass sun/font/StandardGlyphVector$GlyphStrike +instanceKlass java/awt/font/GlyphVector +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$20 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$25 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$24 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$8 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$14 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$13 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$12 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$11 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$10 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$7 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$9 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$30 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$29 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$27 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$19 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$18 +instanceKlass java/awt/Cursor$CursorDisposer +instanceKlass java/awt/image/PixelGrabber +instanceKlass java/awt/image/FilteredImageSource +instanceKlass java/awt/image/ImageFilter +instanceKlass java/awt/Cursor$2 +instanceKlass java/awt/Cursor$3 +instanceKlass java/awt/dnd/DragSource +instanceKlass java/awt/dnd/DragSourceAdapter +instanceKlass java/awt/dnd/DragSourceMotionListener +instanceKlass java/awt/dnd/DragSourceListener +instanceKlass java/awt/dnd/DragGestureListener +instanceKlass com/mathworks/widgets/grouptable/transfer/TransferController +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$2 +instanceKlass com/mathworks/util/RequestAggregator$2 +instanceKlass com/mathworks/util/RequestFilter$Request +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$3 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$5 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$4 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$2 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$1 +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$4 +instanceKlass com/mathworks/mwswing/MJCheckBoxMenuItem$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$1 +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$ToggleSelectionPolicy +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$SelectionPolicy +instanceKlass java/util/concurrent/Semaphore +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$DefaultEditHandler +instanceKlass com/jidesoft/grid/TreeTable$0 +instanceKlass com/jidesoft/grid/SortableTable$0 +instanceKlass com/jidesoft/grid/SortItemSupport +instanceKlass com/jidesoft/grid/g +instanceKlass com/jidesoft/grid/TableModelsWrapper +instanceKlass com/jidesoft/grid/SortItemSupport$SortOrderHandler +instanceKlass com/jidesoft/grid/CellStyleTable$0 +instanceKlass com/jidesoft/grid/JideTable$14 +instanceKlass java/awt/datatransfer/Transferable +instanceKlass javax/swing/TransferHandler$DropLocation +instanceKlass com/jidesoft/grid/JideTable$11 +instanceKlass com/jidesoft/grid/RendererWrapper +instanceKlass com/jidesoft/swing/DelegateMouseInputListener +instanceKlass javax/swing/plaf/basic/BasicTableUI$Handler +instanceKlass com/jidesoft/grid/NavigableModel +instanceKlass com/jidesoft/grid/StyleModel +instanceKlass com/jidesoft/grid/IndexedRowTableModelWrapper +instanceKlass com/jidesoft/grid/IFilterableTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableHeaderAdapter +instanceKlass com/jidesoft/plaf/basic/BasicJideTableUIDelegate +instanceKlass com/mathworks/hg/util/NativeHG +instanceKlass com/mathworks/hg/GraphicsOpenGL +instanceKlass com/jidesoft/plaf/TableUIDelegate +instanceKlass com/jidesoft/grid/EditorStyleTableModel +instanceKlass com/jidesoft/grid/GroupModelProvider +instanceKlass com/jidesoft/grid/ColumnTableModelWrapper +instanceKlass com/jidesoft/grid/RowTableModelWrapper +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator$a_ +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator +instanceKlass com/jidesoft/grid/CellStyleTableHeader$0 +instanceKlass com/jidesoft/utils/SortedList +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$1 +instanceKlass com/jidesoft/plaf/DelegateTableHeaderUI +instanceKlass sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon +instanceKlass com/jidesoft/grid/TableHeaderCellDecorator +instanceKlass javax/swing/JTable$$Lambda$19 +instanceKlass javax/swing/JTable$$Lambda$18 +instanceKlass javax/swing/JTable$$Lambda$17 +instanceKlass javax/swing/JTable$$Lambda$16 +instanceKlass javax/swing/JTable$$Lambda$15 +instanceKlass javax/swing/JTable$$Lambda$14 +instanceKlass javax/swing/JTable$$Lambda$13 +instanceKlass javax/swing/JTable$$Lambda$12 +instanceKlass javax/swing/JTable$$Lambda$11 +instanceKlass javax/swing/JTable$$Lambda$10 +instanceKlass javax/swing/JTable$$Lambda$9 +instanceKlass com/jidesoft/grid/JideTable$8 +instanceKlass com/jidesoft/grid/JideTable$7 +instanceKlass com/jidesoft/plaf/TableHeaderUIDelegate +instanceKlass com/jidesoft/grid/TableUtils +instanceKlass com/jidesoft/grid/TableModelWrapper +instanceKlass com/jidesoft/grid/TableModelWrapperUtils +instanceKlass com/jidesoft/grid/ColumnWidthTableModel +instanceKlass com/jidesoft/grid/ColumnIdentifierTableModel +instanceKlass com/jidesoft/grid/h +instanceKlass com/jidesoft/swing/AlignmentSupport +instanceKlass com/jidesoft/swing/ComponentStateSupport +instanceKlass com/jidesoft/swing/ButtonStyle +instanceKlass javax/swing/table/DefaultTableColumnModel +instanceKlass javax/swing/table/TableColumnModel +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/TableActionInput +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler +instanceKlass com/mathworks/widgets/grouptable/GroupingTableLayout +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager +instanceKlass com/mathworks/matlab/api/explorer/Status +instanceKlass com/mathworks/widgets/ClosableToolTipData +instanceKlass com/mathworks/widgets/grouptable/ColumnActions +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler +instanceKlass com/jidesoft/grid/CellStyleProvider +instanceKlass com/jidesoft/grid/TableStyleProvider +instanceKlass com/jidesoft/grid/CellStyleCustomizer +instanceKlass com/jidesoft/grid/CellStyle +instanceKlass com/jidesoft/swing/Prioritized +instanceKlass javax/swing/table/TableColumn +instanceKlass com/jidesoft/grid/JideCellEditorListener +instanceKlass com/jidesoft/validation/Validator +instanceKlass com/jidesoft/validation/RowValidator +instanceKlass com/jidesoft/grid/GridColorProvider +instanceKlass com/jidesoft/grid/SortTableHeaderRenderer +instanceKlass javax/swing/undo/UndoableEditSupport +instanceKlass com/jidesoft/grid/JideTable$q_ +instanceKlass com/jidesoft/grid/RowHeights +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$10 +instanceKlass com/mathworks/widgets/BusyAffordance$3 +instanceKlass com/mathworks/widgets/WorkMonitor$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUtils +instanceKlass com/mathworks/widgets/WorkMonitor$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$7 +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget +instanceKlass com/mathworks/widgets/WorkMonitor$3 +instanceKlass com/mathworks/widgets/WorkMonitor$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableResources +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$6 +instanceKlass com/mathworks/widgets/grouptable/FlatExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$ConfigurationListener +instanceKlass com/mathworks/util/TypeFilter +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionCombiner +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$RootContextChangeListener +instanceKlass java/lang/Math$RandomNumberGeneratorHolder +instanceKlass com/jidesoft/grid/DefaultExpandable$0 +instanceKlass com/jidesoft/grid/Cacheable +instanceKlass com/jidesoft/grid/ExpandableCell +instanceKlass com/jidesoft/grid/c +instanceKlass com/jidesoft/grid/AbstractNode +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$GroupingTableDefaultIntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$IntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Target +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget$Adapter +instanceKlass com/mathworks/widgets/grouptable/ExpansionChangeListener +instanceKlass javax/swing/tree/TreePath +instanceKlass com/jidesoft/grid/ExpandableRow +instanceKlass com/jidesoft/grid/Expandable +instanceKlass javax/swing/table/AbstractTableModel +instanceKlass com/jidesoft/grid/IndexChangeEventGenerator +instanceKlass com/jidesoft/grid/ITreeTableModel +instanceKlass com/jidesoft/grid/MultiTableModel +instanceKlass com/jidesoft/grid/ContextSensitiveTableModel +instanceKlass com/jidesoft/grid/SpanTableModel +instanceKlass com/jidesoft/grid/SpanModel +instanceKlass com/jidesoft/utils/CacheMap +instanceKlass javax/swing/event/TreeWillExpandListener +instanceKlass com/mathworks/matlab/api/explorer/ActionInput +instanceKlass javax/swing/event/TreeExpansionListener +instanceKlass com/mathworks/widgets/grouptable/NonRectangularCellRenderer +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$MessageFactory +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$EditHandler +instanceKlass com/jidesoft/grid/Row +instanceKlass com/jidesoft/grid/Node +instanceKlass com/jidesoft/grid/ISortableTableModel +instanceKlass com/jidesoft/converter/AbstractContext +instanceKlass javax/swing/AbstractCellEditor +instanceKlass com/jidesoft/grid/JideCellEditor +instanceKlass com/jidesoft/grid/EditorStyleSupport +instanceKlass com/jidesoft/grid/EditorContextSupport +instanceKlass com/jidesoft/converter/ConverterContextSupport +instanceKlass com/mathworks/mde/explorer/Explorer$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$6 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$7 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn +instanceKlass com/mathworks/fileutils/MatlabPath$3 +instanceKlass com/mathworks/fileutils/MatlabPath$2 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass com/mathworks/fileutils/MatlabPath$1 +instanceKlass com/mathworks/fileutils/MatlabPath +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance$1 +instanceKlass com/mathworks/util/ReturnRunnable +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance +instanceKlass com/mathworks/mde/explorer/DirectoryVsFileSeparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$1 +instanceKlass com/mathworks/widgets/grouptable/Group +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4 +instanceKlass com/jidesoft/grid/TableSelectionListener +instanceKlass com/jidesoft/grid/TableSelectionModel +instanceKlass com/jidesoft/grid/RowHeightChangeListener +instanceKlass com/jidesoft/grid/TableColumnWidthKeeper +instanceKlass com/jidesoft/grid/FilterableTableModelListener +instanceKlass com/jidesoft/validation/ValidationResult +instanceKlass com/jidesoft/swing/AutoCompletion +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$3 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnSize +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DescriptionAttribute +instanceKlass com/mathworks/widgets/grouptable/VerticalAttribute +instanceKlass com/jidesoft/grid/CellSpan +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePair +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSizeGenerator +instanceKlass com/mathworks/jmi/ComponentBridge +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/SupportPackageData +instanceKlass com/mathworks/mlwidgets/explorer/model/table/StatusGroupingMode +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$2 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$1 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$IconConverter +instanceKlass com/mathworks/sourcecontrol/resources/CFBSCResources +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn +instanceKlass com/mathworks/sourcecontrol/SourceControlUI +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableEditor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileTypeComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn +instanceKlass com/mathworks/widgets/grouptable/GroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn +instanceKlass com/mathworks/widgets/grouptable/ExpansionContext +instanceKlass com/mathworks/mde/explorer/Explorer$14 +instanceKlass com/mathworks/mde/explorer/Explorer$13 +instanceKlass com/mathworks/mde/explorer/Explorer$12 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/GlobalShutdownEventListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/EmptyPoller +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$9 +instanceKlass javax/swing/event/UndoableEditListener +instanceKlass javax/swing/text/DefaultCaret$1 +instanceKlass javax/swing/text/AbstractDocument$UndoRedoDocumentEvent +instanceKlass javax/swing/event/DocumentEvent$ElementChange +instanceKlass javax/swing/text/SegmentCache +instanceKlass javax/swing/text/Utilities +instanceKlass javax/swing/event/DocumentEvent$EventType +instanceKlass javax/swing/undo/AbstractUndoableEdit +instanceKlass javax/swing/undo/UndoableEdit +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$3 +instanceKlass com/mathworks/mwswing/DefaultListCellViewerCustomizer +instanceKlass java/awt/dnd/DragGestureRecognizer +instanceKlass com/mathworks/mwswing/MJList$ListAppearanceFocusListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$1 +instanceKlass javax/swing/JComponent$ActionStandin +instanceKlass com/jidesoft/hints/AbstractIntelliHints$2 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$1 +instanceKlass com/mathworks/help/helpui/DocRoot +instanceKlass com/mathworks/helpsearch/DocPathBuilder +instanceKlass com/jidesoft/hints/AbstractIntelliHints$4 +instanceKlass com/sun/java/swing/plaf/windows/WindowsGraphicsUtils +instanceKlass com/mathworks/helpsearch/product/ProductFilter +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager +instanceKlass javax/swing/JComboBox$KeySelectionManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$Handler +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocConfigExceptionHandler +instanceKlass com/mathworks/help/helpui/DocConfigBase +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocSetAdapter +instanceKlass com/mathworks/help/helpui/AbstractDocConfig +instanceKlass javax/swing/plaf/basic/BasicComboBoxEditor +instanceKlass javax/swing/ComboBoxEditor +instanceKlass javax/swing/plaf/basic/BasicScrollPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ModelListener +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/PackageInfoLoader +instanceKlass com/sun/java/swing/plaf/windows/WindowsScrollBarUI$Grid +instanceKlass javax/swing/JScrollBar$ModelListener +instanceKlass java/awt/Adjustable +instanceKlass javax/swing/ViewportLayout +instanceKlass javax/swing/ScrollPaneLayout +instanceKlass javax/swing/plaf/basic/BasicComboPopup$Handler +instanceKlass javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass +instanceKlass javax/swing/plaf/basic/ComboPopup +instanceKlass com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2 +instanceKlass javax/swing/JComboBox$1 +instanceKlass javax/swing/MutableComboBoxModel +instanceKlass javax/swing/ComboBoxModel +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupPropertyChangeListener +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupLayout +instanceKlass com/jidesoft/swing/DraggableHandle +instanceKlass com/jidesoft/swing/Alignable +instanceKlass com/jidesoft/swing/ResizableSupport +instanceKlass com/mathworks/instutil/Platform +instanceKlass com/mathworks/instutil/FilePermissionsUtil +instanceKlass com/mathworks/instutil/FilePermissions +instanceKlass com/jidesoft/popup/JidePopupFactory +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8 +instanceKlass com/mathworks/jmi/AutoConvertStringToMatlabChar +instanceKlass com/jidesoft/swing/JideScrollPaneConstants +instanceKlass com/jidesoft/hints/AbstractIntelliHints +instanceKlass com/jidesoft/hints/IntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarTextFieldUtils +instanceKlass com/mathworks/util/RequestFilter$1 +instanceKlass com/mathworks/util/RequestAggregator +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$1 +instanceKlass com/mathworks/util/Combiner +instanceKlass com/mathworks/util/RequestFilter +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent +instanceKlass org/apache/commons/lang/StringUtils +instanceKlass com/mathworks/util/ParameterRunnable +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/PaintingUtils +instanceKlass java/awt/geom/Line2D +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarIcon +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButton +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/StatToEntryAdapter +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList$1 +instanceKlass com/mathworks/util/AsyncReceiverUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList$1 +instanceKlass com/mathworks/util/Holder +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$State +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/IconLabel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$8 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel$StateChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton +instanceKlass com/mathworks/util/MulticastChangeListener +instanceKlass com/mathworks/mde/explorer/Explorer$11 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$3 +instanceKlass com/mathworks/addons_common/util/settings/AddOnsSettingsUtils +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation$LazyHolder +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation +instanceKlass com/mathworks/addons_common/util/settings/InstallationFolderUtils +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryFacadeImpl +instanceKlass java/util/concurrent/CopyOnWriteArrayList$COWIterator +instanceKlass com/mathworks/addons/AddOnsAddressBarAPIPlugin +instanceKlass com/mathworks/filesystem_adapter/services/MATLABOnlineAddressBarPlugin +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAddressBarPlugin +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager$AddressBarPluginManagerHolder +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager +instanceKlass com/mathworks/mlwidgets/explorer/util/MacEncodingBugWorkaround +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$HistoryItem +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$4 +instanceKlass com/mathworks/util/MRUList +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory +instanceKlass com/mathworks/mde/explorer/Explorer$8 +instanceKlass com/mathworks/widgets/WorkMonitor$Task +instanceKlass com/mathworks/mde/explorer/Explorer$18 +instanceKlass com/mathworks/sourcecontrol/SourceControlManagerPluginImpl +instanceKlass com/mathworks/mlwidgets/explorer/SourceControlManager +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntry +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntryFactory +instanceKlass com/mathworks/cfbutils/StatEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualTarget +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext$State +instanceKlass java/util/concurrent/RunnableScheduledFuture +instanceKlass java/util/concurrent/ScheduledFuture +instanceKlass java/util/concurrent/ScheduledExecutorService +instanceKlass com/mathworks/util/NamedDaemonThreadFactory +instanceKlass com/mathworks/util/ExecutorServiceFactory +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerRefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/PathModel +instanceKlass com/mathworks/mlwidgets/explorer/util/MLFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$Node +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1 +instanceKlass com/mathworks/matlab/api/editor/Editor +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$12 +instanceKlass com/mathworks/cfbutils/FileSystemAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/DebugAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$5 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$3 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$4 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$MessageHandler +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier +instanceKlass ca/odell/glazedlists/impl/WeakReferenceProxy +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$SubjectAndListener +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/SimpleTree +instanceKlass ca/odell/glazedlists/impl/sort/ComparableComparator +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor +instanceKlass ca/odell/glazedlists/ThresholdList$Evaluator +instanceKlass ca/odell/glazedlists/CollectionList$Model +instanceKlass ca/odell/glazedlists/gui/TableFormat +instanceKlass ca/odell/glazedlists/Filterator +instanceKlass ca/odell/glazedlists/FunctionList$Function +instanceKlass ca/odell/glazedlists/TextFilterator +instanceKlass ca/odell/glazedlists/ObservableElementList$Connector +instanceKlass ca/odell/glazedlists/GlazedLists +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/Element +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorTree +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/ListToByteCoder +instanceKlass ca/odell/glazedlists/impl/event/Tree4Deltas +instanceKlass ca/odell/glazedlists/impl/adt/gnutrove/TIntArrayList +instanceKlass ca/odell/glazedlists/impl/event/BlockSequence +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter$ListEventFormat +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$EventFormat +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$PublisherAdapter +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$AssemblerHelper +instanceKlass ca/odell/glazedlists/event/ListEventAssembler +instanceKlass ca/odell/glazedlists/impl/java15/LockAdapter +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50ReadWriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/ReadWriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/Lock +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50LockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/DelegateLockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/LockFactory +instanceKlass ca/odell/glazedlists/SortedList$ElementRawOrderComparator +instanceKlass ca/odell/glazedlists/SortedList$ElementComparator +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$6 +instanceKlass ca/odell/glazedlists/AbstractEventList +instanceKlass ca/odell/glazedlists/event/ListEventListener +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$RegistrationListener +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger +instanceKlass com/mathworks/matlab/api/debug/Debugger +instanceKlass ca/odell/glazedlists/matchers/Matcher +instanceKlass ca/odell/glazedlists/EventList +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils +instanceKlass com/mathworks/mde/autosave/AutoSaveImplementor +instanceKlass com/mathworks/matlab/api/datamodel/BackingStore +instanceKlass com/mathworks/matlab/api/dataview/UiInfoProvider +instanceKlass com/mathworks/matlab/api/datamodel/PropertyChangeProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultFileNameProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$SaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$EncodingProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$FileChooserSetupDelegate +instanceKlass com/mathworks/matlab/api/debug/DebugListener +instanceKlass com/mathworks/jmi/AWTUtilities$InvocationRunnable +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication +instanceKlass com/mathworks/matlab/api/editor/EditorApplication +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem +instanceKlass com/mathworks/util/ThrowableClosure +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/RealFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileSystem +instanceKlass com/mathworks/matlab/api/explorer/FileSystemTransaction +instanceKlass com/mathworks/matlab/api/explorer/FileList +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileMounter +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider +instanceKlass com/mathworks/cfbutils/NativeCfb +instanceKlass com/mathworks/fileutils/MLFileIconUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/JSZipFileIconInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/EditorFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider +instanceKlass com/mathworks/jmi/mdt/MatlabCallable +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider +instanceKlass com/mathworks/matlab/api/explorer/StateChangeNotifier +instanceKlass com/mathworks/mde/explorer/PathActionProvider +instanceKlass com/mathworks/util/AsyncReceiver +instanceKlass com/mathworks/mlwidgets/explorer/util/TransactionLogic +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider +instanceKlass com/mathworks/util/RequestQueue +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileContentInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabDesktopReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategyFactory +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TextFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFolderInfoProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivityImpl +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireAction +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivity +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculatorImpl +instanceKlass java/util/concurrent/Executors$DefaultThreadFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculator +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireHandler +instanceKlass com/mathworks/storage/matlabdrivedesktop/ActionFinishListener +instanceKlass com/mathworks/storage/mldrivetripwireaccess/NativeMLDriveTripwireAccess +instanceKlass com/mathworks/storage/mldrivetripwireaccess/MLDriveTripwireAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/SettingsFeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/NativeMatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/FeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/FIGFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MEXFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/PFileInfoProvider +instanceKlass com/mathworks/explorer/MATFileInfoProvider +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider +instanceKlass com/mathworks/mde/liveeditor/MlxFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider +instanceKlass com/mathworks/util/DeferrableRetriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/ImageFileInfoProvider +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$CMFileProvider +instanceKlass com/mathworks/cmlink/api/customization/CMWidget +instanceKlass com/mathworks/cmlink/api/customization/CustomizationWidgetFactory +instanceKlass com/mathworks/sourcecontrol/SccFileProvider +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider +instanceKlass com/mathworks/sourcecontrol/SccFileListener +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/common/SignpostFileInfoProvider +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider +instanceKlass com/mathworks/toolboxmanagement/ToolboxFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider +instanceKlass com/mathworks/mde/difftool/DiffToolUtils +instanceKlass com/mathworks/comparisons/util/AbstractNamedData +instanceKlass com/mathworks/comparisons/source/ComparisonSource +instanceKlass com/mathworks/comparisons/util/GetPropertyValue +instanceKlass com/mathworks/comparisons/source/ComparisonSourceType +instanceKlass com/mathworks/mde/difftool/ComparisonControl +instanceKlass com/mathworks/mde/difftool/DiffReportImplementor +instanceKlass com/mathworks/mde/difftool/DiffToolControl +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$DocumentDiffToolInfo +instanceKlass com/mathworks/mde/difftool/SelectedFilesDiffToolInfo +instanceKlass com/mathworks/mde/difftool/DiffActionProvider +instanceKlass com/mathworks/explorer/KeyBindingProvider +instanceKlass com/mathworks/matlab/api/explorer/ActionComponentProvider +instanceKlass com/mathworks/mlservices/MLLicenseChecker +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider +instanceKlass com/mathworks/project/impl/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/slproject/resources/SlProjectResources +instanceKlass org/xml/sax/helpers/DefaultHandler +instanceKlass org/xml/sax/DTDHandler +instanceKlass com/mathworks/toolbox/slproject/project/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/AutosaveFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/FileDecoration +instanceKlass com/mathworks/util/Converter +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider +instanceKlass com/mathworks/toolbox/coder/plugin/CoderResources +instanceKlass com/mathworks/matlab/api/explorer/MenuSection +instanceKlass com/mathworks/matlab/api/explorer/ActionDefinition +instanceKlass com/mathworks/matlab/api/explorer/StatusRunnable +instanceKlass com/mathworks/toolbox/coder/screener/ScreenerActionProvider +instanceKlass com/mathworks/matlab/api/explorer/ActionProvider +instanceKlass com/mathworks/matlab/api/explorer/FileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/AutoMounter +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerExtensionRegistry +instanceKlass com/mathworks/matlab/api/explorer/SearchCriteria +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPanePrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem +instanceKlass com/mathworks/matlab/api/explorer/ExtensionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager +instanceKlass com/mathworks/widgets/WorkMonitor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar +instanceKlass com/mathworks/matlab/api/explorer/FileLocation +instanceKlass com/mathworks/mde/explorer/ExplorerToolbar +instanceKlass com/mathworks/widgets/desk/DTTitleChangeHandler +instanceKlass com/mathworks/widgets/desk/DTToolBarInfo +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$1 +instanceKlass com/mathworks/widgets/desk/Desktop$ClientListenerData +instanceKlass com/mathworks/mde/help/MLHelpBrowserGroup$DDuxResizedActionListener +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory$1 +instanceKlass com/mathworks/html/HtmlPanelSupportFactory +instanceKlass com/mathworks/html/NewBrowserListener +instanceKlass com/mathworks/html/HtmlContextMenuBuilder +instanceKlass com/mathworks/html/RequestHandler +instanceKlass com/mathworks/html/HtmlPanel +instanceKlass com/mathworks/mlwidgets/html/BrowserTypeConfig +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1 +instanceKlass com/jniwrapper/r +instanceKlass com/jniwrapper/af +instanceKlass com/jniwrapper/PlatformContext +instanceKlass java/security/cert/CertPathValidatorException$Reason +instanceKlass com/teamdev/jxbrowser/BrowserType +instanceKlass sun/security/util/ManifestEntryVerifier$SunProviderHolder +instanceKlass sun/nio/cs/Surrogate +instanceKlass sun/nio/cs/Surrogate$Parser +instanceKlass java/util/Base64$Encoder +instanceKlass java/util/Base64$Decoder +instanceKlass java/util/Base64 +instanceKlass java/security/cert/CertPath +instanceKlass sun/security/rsa/RSAPadding +instanceKlass sun/security/rsa/RSACore +instanceKlass java/security/interfaces/RSAPrivateCrtKey +instanceKlass sun/security/pkcs/PKCS8Key +instanceKlass java/security/interfaces/RSAPrivateKey +instanceKlass java/security/PrivateKey +instanceKlass sun/security/jca/ServiceId +instanceKlass java/security/SignatureSpi +instanceKlass javax/crypto/SecretKey +instanceKlass javax/security/auth/Destroyable +instanceKlass sun/security/util/Length +instanceKlass sun/security/util/KeyUtil +instanceKlass sun/text/normalizer/NormalizerBase$1 +instanceKlass sun/text/normalizer/NormalizerBase$QuickCheckResult +instanceKlass sun/text/normalizer/NormalizerBase$Mode +instanceKlass sun/text/normalizer/NormalizerBase +instanceKlass java/text/Normalizer +instanceKlass sun/security/pkcs/PKCS9Attribute +instanceKlass sun/security/x509/AVAKeyword +instanceKlass sun/security/util/ConstraintsParameters +instanceKlass sun/security/pkcs/SignerInfo +instanceKlass sun/security/x509/NetscapeCertTypeExtension$MapEntry +instanceKlass sun/security/x509/AccessDescription +instanceKlass java/security/cert/PolicyQualifierInfo +instanceKlass sun/security/x509/CertificatePolicyId +instanceKlass sun/security/x509/PolicyInformation +instanceKlass sun/security/x509/DNSName +instanceKlass sun/security/x509/URIName +instanceKlass sun/security/x509/GeneralName +instanceKlass sun/security/x509/GeneralNames +instanceKlass sun/security/x509/DistributionPoint +instanceKlass sun/security/util/MemoryCache$CacheEntry +instanceKlass sun/security/x509/X509AttributeName +instanceKlass sun/security/x509/KeyIdentifier +instanceKlass sun/security/x509/OIDMap$OIDInfo +instanceKlass sun/security/x509/PKIXExtensions +instanceKlass sun/security/x509/OIDMap +instanceKlass sun/security/x509/Extension +instanceKlass java/security/cert/Extension +instanceKlass sun/security/x509/CertificateExtensions +instanceKlass java/security/interfaces/RSAPublicKey +instanceKlass java/security/interfaces/RSAKey +instanceKlass java/security/spec/RSAPrivateKeySpec +instanceKlass java/security/spec/RSAPublicKeySpec +instanceKlass java/security/KeyFactorySpi +instanceKlass sun/security/rsa/SunRsaSignEntries +instanceKlass sun/security/jca/ProviderList$ServiceList$1 +instanceKlass java/security/KeyFactory +instanceKlass java/security/spec/EncodedKeySpec +instanceKlass java/security/spec/KeySpec +instanceKlass sun/security/util/BitArray +instanceKlass sun/security/x509/X509Key +instanceKlass java/security/PublicKey +instanceKlass java/security/Key +instanceKlass sun/security/x509/CertificateX509Key +instanceKlass sun/security/x509/CertificateValidity +instanceKlass sun/security/x509/AVA +instanceKlass sun/security/x509/RDN +instanceKlass javax/security/auth/x500/X500Principal +instanceKlass sun/security/x509/X500Name$1 +instanceKlass sun/security/x509/X500Name +instanceKlass sun/security/x509/GeneralNameInterface +instanceKlass sun/security/x509/CertificateAlgorithmId +instanceKlass sun/security/x509/SerialNumber +instanceKlass sun/security/x509/CertificateSerialNumber +instanceKlass sun/security/x509/CertificateVersion +instanceKlass sun/security/x509/X509CertInfo +instanceKlass sun/security/x509/CertAttrSet +instanceKlass sun/security/util/Cache$EqualByteArray +instanceKlass java/security/cert/X509Extension +instanceKlass sun/security/util/Cache +instanceKlass java/security/cert/CertificateFactorySpi +instanceKlass java/security/cert/CertificateFactory +instanceKlass sun/security/x509/AlgorithmId +instanceKlass sun/security/util/ByteArrayTagOrder +instanceKlass sun/security/util/ByteArrayLexOrder +instanceKlass sun/security/util/DerEncoder +instanceKlass sun/security/util/DerValue +instanceKlass sun/security/util/ObjectIdentifier +instanceKlass sun/security/pkcs/ContentInfo +instanceKlass sun/security/util/DerIndefLenConverter +instanceKlass sun/security/util/DerInputStream +instanceKlass sun/security/pkcs/PKCS7 +instanceKlass sun/security/util/ManifestDigester$Entry +instanceKlass sun/security/util/ManifestDigester$Position +instanceKlass sun/security/util/ManifestDigester +instanceKlass com/mathworks/html/jxbrowser/BrowserHolder +instanceKlass com/mathworks/html/HtmlComponentIdentifier +instanceKlass com/mathworks/html/BrowserSettings +instanceKlass com/mathworks/html/HtmlComponent +instanceKlass com/mathworks/html/HtmlCallbackProvider +instanceKlass com/mathworks/html/HtmlActions +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory +instanceKlass com/mathworks/help/helpui/HelpBrowserResourceBundle +instanceKlass com/mathworks/help/helpui/HelpBrowserUtils +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DefaultDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs +instanceKlass com/mathworks/mlwidgets/help/messages/HelpPanelCurrentLocationHandler$PageInfoObserver +instanceKlass java/awt/dnd/DropTargetAdapter +instanceKlass com/mathworks/comparisons/util/ResourceManager +instanceKlass com/mathworks/mde/webbrowser/WebBrowserUtils +instanceKlass com/mathworks/matlab/api/editor/EditorApplicationListener +instanceKlass com/mathworks/mde/editor/EditorGroup$4 +instanceKlass com/mathworks/mde/editor/EditorGroup$3 +instanceKlass com/mathworks/mde/editor/EditorGroup$2 +instanceKlass com/mathworks/matlab/api/menus/MenuContext +instanceKlass com/mathworks/widgets/text/STPInterface +instanceKlass com/mathworks/widgets/text/STPBaseInterface +instanceKlass com/mathworks/widgets/text/STPViewInterface +instanceKlass com/mathworks/widgets/text/STPModelInterface +instanceKlass com/mathworks/widgets/text/STPBaseModelInterface +instanceKlass com/mathworks/matlab/api/toolbars/ToolBars +instanceKlass com/mathworks/matlab/api/menus/MenuBuilder +instanceKlass com/mathworks/matlab/api/menus/MenuGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarBuilder +instanceKlass com/mathworks/mde/editor/ActionManager$KeyBindingContributorProvider +instanceKlass com/mathworks/mde/editor/ActionManager +instanceKlass com/mathworks/mde/editor/EditorGroup$1 +instanceKlass com/mathworks/mde/editor/EditorGroup$8 +instanceKlass com/mathworks/matlab_login/StatusUpdateListener +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1 +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener$3 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkHandler +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$2 +instanceKlass com/mathworks/toolstrip/components/popups/ListItem +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$2 +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$1 +instanceKlass javax/swing/plaf/basic/BasicListUI$Handler +instanceKlass javax/swing/DefaultListSelectionModel +instanceKlass javax/swing/ListSelectionModel +instanceKlass javax/swing/AbstractListModel +instanceKlass com/mathworks/mwswing/FocusReturnHandler +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$SearchActionListener +instanceKlass com/jidesoft/swing/SelectAllUtils +instanceKlass com/mathworks/widgets/SearchTextField$4 +instanceKlass com/jgoodies/forms/factories/ComponentFactory2 +instanceKlass com/jgoodies/forms/factories/ComponentFactory +instanceKlass com/jgoodies/forms/builder/AbstractFormBuilder +instanceKlass com/jgoodies/forms/layout/CellConstraints$Alignment +instanceKlass com/jgoodies/forms/layout/CellConstraints +instanceKlass com/jgoodies/forms/layout/FormLayout$CachingMeasure +instanceKlass com/jgoodies/forms/layout/FormLayout$ComponentSizeCache +instanceKlass com/jgoodies/forms/util/FormUtils +instanceKlass com/jgoodies/forms/layout/FormSpecParser +instanceKlass com/jgoodies/forms/layout/BoundedSize +instanceKlass com/jgoodies/forms/util/LayoutStyle +instanceKlass com/jgoodies/forms/layout/Sizes$ComponentSize +instanceKlass com/jgoodies/forms/layout/ConstantSize$Unit +instanceKlass com/jgoodies/forms/layout/ConstantSize +instanceKlass com/jgoodies/forms/util/UnitConverter +instanceKlass com/jgoodies/forms/layout/Sizes +instanceKlass com/jgoodies/forms/layout/FormSpec$DefaultAlignment +instanceKlass com/jgoodies/forms/layout/FormSpec +instanceKlass com/jgoodies/forms/layout/Size +instanceKlass com/jgoodies/forms/factories/FormFactory +instanceKlass com/jgoodies/forms/layout/LayoutMap +instanceKlass com/jgoodies/forms/layout/FormLayout$Measure +instanceKlass com/jgoodies/forms/layout/FormLayout +instanceKlass com/mathworks/widgets/WindowsWidgetFactory$SearchAndClearButton$1 +instanceKlass javax/swing/text/Segment +instanceKlass java/text/CharacterIterator +instanceKlass com/mathworks/widgets/WindowsWidgetFactory +instanceKlass com/mathworks/widgets/SearchTextField$6 +instanceKlass com/mathworks/widgets/WidgetUtils +instanceKlass javax/accessibility/AccessibleExtendedText +instanceKlass javax/accessibility/AccessibleEditableText +instanceKlass javax/swing/event/CaretListener +instanceKlass com/mathworks/widgets/PromptingTextField$1 +instanceKlass org/apache/commons/lang/ArrayUtils +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener$2 +instanceKlass com/mathworks/mwswing/MJPopupMenu$CloseListener +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindings +instanceKlass javax/swing/JTextField$ScrollRepainter +instanceKlass javax/swing/DefaultBoundedRangeModel +instanceKlass javax/swing/BoundedRangeModel +instanceKlass javax/swing/plaf/synth/SynthUI +instanceKlass javax/swing/plaf/synth/SynthConstants +instanceKlass javax/swing/text/JTextComponent$DefaultKeymap +instanceKlass javax/swing/text/Keymap +instanceKlass javax/swing/text/TabExpander +instanceKlass javax/swing/TransferHandler$TransferSupport +instanceKlass javax/swing/TransferHandler$DropHandler +instanceKlass javax/swing/text/DefaultHighlighter$SafeDamager +instanceKlass javax/swing/text/LayeredHighlighter$LayerPainter +instanceKlass javax/swing/text/Highlighter$HighlightPainter +instanceKlass javax/swing/text/Highlighter$Highlight +instanceKlass javax/swing/text/LayeredHighlighter +instanceKlass javax/swing/text/Highlighter +instanceKlass javax/swing/text/DefaultCaret$Handler +instanceKlass java/awt/datatransfer/ClipboardOwner +instanceKlass javax/swing/text/Caret +instanceKlass javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag +instanceKlass javax/swing/plaf/basic/BasicTextUI$UpdateHandler +instanceKlass javax/swing/text/View +instanceKlass javax/swing/text/Position$Bias +instanceKlass javax/swing/TransferHandler +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener +instanceKlass com/mathworks/mwswing/MJTextField$TextAppearanceFocusListener +instanceKlass com/mathworks/mwswing/AppearanceFocusDispatcher +instanceKlass javax/swing/text/JTextComponent$1 +instanceKlass sun/swing/SwingAccessor$JTextComponentAccessor +instanceKlass com/mathworks/mwswing/AppearanceFocusListener +instanceKlass com/mathworks/widgets/SearchTextField +instanceKlass com/mathworks/mlwidgets/help/DocCenterLocale +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$DefaultDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/LocalizationFilter +instanceKlass com/mathworks/html/UrlTransformer +instanceKlass com/mathworks/helpsearch/index/LocalizedFileLocator +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$HelpDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/HelpUtils +instanceKlass com/mathworks/helpsearch/facets/Facetable +instanceKlass com/mathworks/helpsearch/suggestion/DocumentationSuggestionProvider +instanceKlass com/mathworks/helpsearch/product/DocSetItemResolver +instanceKlass com/mathworks/search/SearchField +instanceKlass com/mathworks/help/helpui/DocConfig +instanceKlass com/mathworks/mde/help/suggestion/SuggestionRequest +instanceKlass com/mathworks/widgets/SearchTextField$Listener +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox +instanceKlass com/mathworks/services/binding/PreferenceState +instanceKlass com/mathworks/widgets/desk/DTKeyBindings +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$1 +instanceKlass com/mathworks/mwswing/MouseLatch +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$EdgeOccupant +instanceKlass com/mathworks/mde/desk/MLMainFrame$1 +instanceKlass com/mathworks/mde/desk/MLMainFrame$StatusTextListener +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$2 +instanceKlass com/mathworks/mwswing/SystemGraphicsEnvironment +instanceKlass com/mathworks/mwswing/ScreenInformationProvider +instanceKlass com/mathworks/mwswing/WindowUtils +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$1 +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu$ContextEventListener +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$1 +instanceKlass com/mathworks/toolstrip/impl/ToolstripTabContentPanel$1 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabContentUI$MyBorder +instanceKlass com/mathworks/toolstrip/plaf/SectionWithHeaderUI$SectionWithHeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$3 +instanceKlass com/mathworks/mwswing/SimpleStringTrimmer +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$1 +instanceKlass com/mathworks/util/event/AWTMouseListener +instanceKlass com/mathworks/util/event/AWTKeyListener +instanceKlass com/mathworks/widgets/desk/DTFrame$7 +instanceKlass com/mathworks/widgets/desk/DTFrame$6 +instanceKlass java/util/EnumMap$EnumMapIterator +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryButton$1 +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager +instanceKlass com/mathworks/mwswing/StringTrimmer +instanceKlass com/mathworks/toolstrip/accessories/ToolTipContentProvider +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager$Client +instanceKlass com/mathworks/util/async/Status +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$4 +instanceKlass com/mathworks/util/AllPredicate +instanceKlass com/mathworks/widgets/desk/DTFrame$QuickAccessBarContextFilter +instanceKlass com/mathworks/mde/desk/MLDesktop$13 +instanceKlass com/mathworks/widgets/desk/DTFrame$5 +instanceKlass com/mathworks/widgets/desk/DTBorderFactory +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ToolBarData +instanceKlass com/mathworks/mde/desk/MLDesktop$12 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$3 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$TabCollectionListener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$2 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$1 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$6 +instanceKlass com/mathworks/widgets/desk/Desktop$54 +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$Listener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$ToolBarPopulator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$2 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$5 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$12 +instanceKlass com/mathworks/mde/desk/PlotGalleryManager$2 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1$1 +instanceKlass com/mathworks/mwswing/MJRadioButton$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon +instanceKlass com/mathworks/widgets/BusyAffordance$2$1 +instanceKlass com/mathworks/widgets/BusyAffordance$2 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel$1 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryDisposer +instanceKlass com/mathworks/toolstrip/factory/TSFactory$8 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$4 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$3 +instanceKlass com/mathworks/widgets/BusyAffordance$UpdateListener +instanceKlass com/mathworks/widgets/BusyAffordance +instanceKlass com/mathworks/widgets/ComponentBuilder +instanceKlass com/mathworks/toolstrip/components/gallery/view/BusyAffordanceProxy +instanceKlass com/mathworks/toolstrip/Previewer +instanceKlass com/mathworks/toolstrip/components/gallery/view/ItemPopupMenuCustomizer +instanceKlass com/mathworks/toolstrip/components/gallery/model/Item +instanceKlass com/mathworks/services/GalleryViewSettingImpl +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryViewSetting +instanceKlass com/mathworks/toolstrip/factory/TSFactory$7 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryRestoreData +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryResources +instanceKlass com/mathworks/toolstrip/components/gallery/model/Category +instanceKlass com/mathworks/toolstrip/components/gallery/model/DefaultGalleryModel +instanceKlass com/mathworks/toolstrip/components/TSUtil +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$11 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$10 +instanceKlass javax/swing/ButtonGroup +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$7 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$VariableLabelDecorator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$6 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$PlotUpdateListener +instanceKlass com/mathworks/mlwidgets/help/ddux/HelpDduxCommandWrapper$Mock +instanceKlass com/mathworks/help/helpui/ddux/DummyDduxCommandWrapper +instanceKlass com/mathworks/help/helpui/ddux/DduxCommandWrapper +instanceKlass com/mathworks/mlwidgets/help/ddux/DummyDduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1 +instanceKlass javax/swing/tree/MutableTreeNode +instanceKlass com/mathworks/mlwidgets/graphics/ModelStateFactory +instanceKlass com/mathworks/mlwidgets/help/ddux/DduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4$1 +instanceKlass com/mathworks/mde/desk/MLFeatures +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1$1 +instanceKlass java/awt/datatransfer/SystemFlavorMap$SoftCache +instanceKlass java/awt/datatransfer/SystemFlavorMap +instanceKlass java/awt/datatransfer/FlavorTable +instanceKlass java/awt/datatransfer/FlavorMap +instanceKlass java/awt/dnd/DropTargetContext +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandDropListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator$1 +instanceKlass com/google/common/collect/ObjectArrays +instanceKlass com/mathworks/toolstrip/sections/IconifiedSectionLayout +instanceKlass com/mathworks/toolstrip/sections/PreferredSectionLayout +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayout +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$2 +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$1 +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayoutPolicy +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies +instanceKlass com/mathworks/toolstrip/components/DropDownActionListener +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListPopupListener +instanceKlass com/mathworks/toolstrip/components/TSDropDownButton$PopupComponentMouseListener +instanceKlass com/mathworks/util/Disposer$Node +instanceKlass com/mathworks/util/Disposer$1 +instanceKlass com/mathworks/util/Disposer +instanceKlass com/google/common/base/Joiner$MapJoiner +instanceKlass com/google/common/base/Joiner +instanceKlass com/google/common/collect/Collections2 +instanceKlass com/google/common/base/Converter +instanceKlass com/google/common/collect/ImmutableMap +instanceKlass com/google/common/collect/BiMap +instanceKlass com/google/common/base/Function +instanceKlass com/google/common/collect/Maps$EntryTransformer +instanceKlass java/util/NavigableSet +instanceKlass com/google/common/collect/UnmodifiableIterator +instanceKlass com/google/common/collect/SortedMapDifference +instanceKlass com/google/common/collect/MapDifference +instanceKlass com/google/common/collect/Maps +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection$WrappedIterator +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ButtonTrigger +instanceKlass com/mathworks/toolstrip/factory/TSFactory$TriggerDisposer +instanceKlass javax/swing/AncestorNotifier +instanceKlass javax/swing/ClientPropertyKey$1 +instanceKlass sun/awt/AWTAccessor$ClientPropertyKeyAccessor +instanceKlass com/mathworks/toolstrip/components/PopupListener$PopupCallback +instanceKlass com/mathworks/toolstrip/plaf/LAFUtil +instanceKlass com/mathworks/toolstrip/plaf/ToolstripButtonUI$ToolstripButtonListener +instanceKlass com/mathworks/toolstrip/plaf/ComponentMnemonicsProvider +instanceKlass com/mathworks/toolstrip/components/LayoutMode +instanceKlass com/mathworks/desktop/mnemonics/Mnemonic +instanceKlass com/mathworks/toolstrip/factory/TSFactory$9 +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder$Column +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$ColumnLayout +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$SectionLayout +instanceKlass com/mathworks/desktop/overlay/Overlay +instanceKlass com/mathworks/toolstrip/sections/SectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections +instanceKlass com/mathworks/toolstrip/factory/TSToolPath +instanceKlass com/mathworks/toolstrip/factory/TSFactory$1 +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/SupportPkgInstallerToolSetFactory +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$ProfileAnalyzerInstanceHolder +instanceKlass com/mathworks/toolbox/distcomp/util/mvm/ResultHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$OperationNotifier +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/DefaultProfileName +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$ProfilePropertyChangeListener +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeSupportAdaptor +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileNamesProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeObservable +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/I18nMatlabIdentifiedException +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/HasI18nMatlabIdentifiedMessage +instanceKlass com/mathworks/util/MatlabIdentified +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileUpdateListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu +instanceKlass com/mathworks/toolbox/distcomp/mwlogin/MatlabLoginController$LoginStatusListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/MLDesktopParallelMenu +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/GalleryPopup$Listener +instanceKlass com/mathworks/toolstrip/components/gallery/model/GalleryModel +instanceKlass javax/swing/ListCellRenderer +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolPropertyListener +instanceKlass com/mathworks/toolstrip/components/PopupShower +instanceKlass com/mathworks/toolstrip/factory/TSFactory +instanceKlass com/mathworks/mwswing/binding/InputMapActionListener +instanceKlass com/mathworks/mde/vrd/LicenseToolSetFactory +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$3 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$2 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$TearOffOptionsListDecorator +instanceKlass com/mathworks/toolstrip/accessories/Resources +instanceKlass com/mathworks/toolstrip/accessories/CollapseToolstripAction$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$FactoryLayout +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$Listener +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory +instanceKlass com/mathworks/matlab/api/explorer/MatlabPlatformUtil +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerResources +instanceKlass com/mathworks/mde/desk/CodeReportActionProvider +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$18 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$17 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$16 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$15 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$14 +instanceKlass com/mathworks/desktop/client/ClientCollectionListener$Event +instanceKlass com/google/common/collect/Lists +instanceKlass com/mathworks/desktop/client/DefaultClientCollection +instanceKlass com/mathworks/desktop/attr/AttributeChangeEvent +instanceKlass com/mathworks/desktop/attr/DefaultAttributes +instanceKlass com/mathworks/desktop/client/ClientCollection +instanceKlass com/mathworks/desktop/client/BasicClient +instanceKlass com/mathworks/desktop/client/ClientCollectionListener +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport$DirtyStateListener +instanceKlass com/mathworks/mde/liveeditor/AbstractLiveEditorToolSet +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsKeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsRunnerOptions +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandReceiver +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$ToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/ToolSetActionController +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptions +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/KeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/rptgenxmlcomp/comparison/node/customization/CustomizationManager +instanceKlass com/mathworks/matlab/api/editor/EditorLayerProvider +instanceKlass com/mathworks/matlab/api/editor/EditorSyntaxHighlighting +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapterFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/CheckRunnerProvider +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/WorkingFolderExtensionFactory +instanceKlass com/mathworks/cmlink/util/icon/FileIconFactoryProducer +instanceKlass com/mathworks/toolbox/slproject/project/archiving/ProjectArchiverFactory +instanceKlass com/mathworks/toolbox/slproject/project/sharing/api/r15a/ShareExtensionFactory +instanceKlass com/mathworks/toolbox/slproject/project/metadata/MetadataManagerFactory +instanceKlass com/mathworks/toolbox/slproject/project/GUI/projectui/ProjectViewNodeFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/ProjectExtensionFactory +instanceKlass com/mathworks/addons_common/notificationframework/BalloonTooltipNotificationClickedCallback +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifierAPI +instanceKlass com/mathworks/addressbar_api/AddressBarAPI +instanceKlass com/mathworks/mde/find/FileTypeContentsProvider +instanceKlass com/mathworks/find_files_api/FileTypeSpecificOpenToLineActionProvider +instanceKlass com/mathworks/find_files_api/OpenActionProvider +instanceKlass com/mathworks/mde/editor/debug/DebuggerActionsProvider +instanceKlass com/mathworks/matlab/api/editor/actions/KeyBindingContributor +instanceKlass com/mathworks/matlab/api/editor/EditorKitProvider +instanceKlass com/mathworks/matlab/api/editor/actions/EditorToolTipDelegate +instanceKlass com/mathworks/widgets/editor/breakpoints/MarginProvider +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor +instanceKlass com/mathworks/matlab/api/editor/actions/SelectionDelegate +instanceKlass com/mathworks/matlab/api/editor/EditorLanguagePreferencesPanel +instanceKlass com/mathworks/matlab/api/menus/MenuContributor +instanceKlass com/mathworks/comparisons/plugin/ComparisonPlugin +instanceKlass com/mathworks/matlab/api/editor/EditorLanguage +instanceKlass com/mathworks/addons_common/AddonManager +instanceKlass com/mathworks/cmlink/creation/api/RepositoryLocationCreatorFactory +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallsRetriever +instanceKlass com/mathworks/addon_service_management_api/RegistrationPointServiceProvider +instanceKlass com/mathworks/addon_service_management_api/AddonServiceProvider +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripTabContributor +instanceKlass com/mathworks/matlab/api/editor/actions/Prioritizable +instanceKlass com/mathworks/mlwidgets/explorer/util/SourceControlManagerPlugin +instanceKlass com/mathworks/project/impl/model/TargetFactory +instanceKlass com/mathworks/mwswing/api/FileExtensionFilterContributor +instanceKlass com/mathworks/util/ImplementorsCacheImpl +instanceKlass com/mathworks/util/ImplementorsCache +instanceKlass com/mathworks/util/ImplementorsCacheFactory$LazyHolder +instanceKlass com/mathworks/util/ImplementorsCacheFactory +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabErrorHandlingOptionsListDecorator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabDebugActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$5 +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripOptions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$6 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$1 +instanceKlass com/mathworks/mde/editor/EditorAction +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$20 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$19 +instanceKlass com/mathworks/services/settings/SettingUtils +instanceKlass com/mathworks/services/mlx/MlxFileUtils +instanceKlass com/mathworks/matlab/api/explorer/AbstractNewFileTemplateWithIcon +instanceKlass com/mathworks/matlab/api/explorer/IconProvider +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$2 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$1 +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarID +instanceKlass com/mathworks/mde/editor/RealMatlab +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandUtilities +instanceKlass com/mathworks/matlab/api/datamodel/StorageLocation +instanceKlass com/mathworks/mwswing/FilePatternFilter +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarID +instanceKlass com/mathworks/mde/editor/EditorMatlab +instanceKlass com/mathworks/mde/editor/EditorUtils +instanceKlass com/mathworks/cfbutils/FileSystemNotificationUtils +instanceKlass com/mathworks/util/FileSystemNotifier$1 +instanceKlass com/mathworks/cfbutils/FileSystemListener +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeListener +instanceKlass com/mathworks/util/FileSystemNotifier +instanceKlass com/mathworks/util/FileSystemUtils +instanceKlass com/mathworks/util/FileSystemAdapter +instanceKlass com/mathworks/util/FileSystemListener +instanceKlass com/mathworks/mde/editor/EditorStartup +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$BusyIdleListener +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCategoryIcons +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory$1 +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory +instanceKlass org/apache/xerces/dom/CharacterDataImpl$1 +instanceKlass org/apache/xerces/dom/NamedNodeMapImpl +instanceKlass org/w3c/dom/NamedNodeMap +instanceKlass org/apache/xerces/dom/DeepNodeListImpl +instanceKlass org/apache/xerces/dom/DeferredDocumentImpl$RefCount +instanceKlass org/w3c/dom/traversal/NodeIterator +instanceKlass org/w3c/dom/events/MutationEvent +instanceKlass org/w3c/dom/traversal/TreeWalker +instanceKlass org/w3c/dom/ranges/Range +instanceKlass org/w3c/dom/events/Event +instanceKlass org/w3c/dom/Notation +instanceKlass org/w3c/dom/CDATASection +instanceKlass org/w3c/dom/Comment +instanceKlass org/w3c/dom/DocumentFragment +instanceKlass org/w3c/dom/ProcessingInstruction +instanceKlass org/w3c/dom/Text +instanceKlass org/w3c/dom/DOMConfiguration +instanceKlass org/w3c/dom/Attr +instanceKlass org/w3c/dom/DocumentType +instanceKlass org/w3c/dom/TypeInfo +instanceKlass org/w3c/dom/DOMError +instanceKlass org/apache/xerces/xs/XSSimpleTypeDefinition +instanceKlass org/apache/xerces/xs/XSTypeDefinition +instanceKlass org/apache/xerces/xs/XSObject +instanceKlass org/apache/xerces/xs/ItemPSVI +instanceKlass org/w3c/dom/ranges/DocumentRange +instanceKlass org/w3c/dom/events/DocumentEvent +instanceKlass org/w3c/dom/traversal/DocumentTraversal +instanceKlass org/apache/xerces/dom/DeferredNode +instanceKlass org/w3c/dom/CharacterData +instanceKlass org/w3c/dom/Entity +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu +instanceKlass org/w3c/dom/EntityReference +instanceKlass org/apache/xerces/dom/NodeImpl +instanceKlass org/w3c/dom/events/EventTarget +instanceKlass org/w3c/dom/NodeList +instanceKlass com/mathworks/mde/difftool/FileDiffToolInfo +instanceKlass com/mathworks/mde/difftool/UnsavedChangesDiffToolInfo +instanceKlass com/mathworks/matlab/api/editor/EditorEventListener +instanceKlass org/apache/xerces/jaxp/TeeXMLDocumentFilterImpl +instanceKlass java/util/Observer +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$RunButtonStateChangeListener +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$4 +instanceKlass javax/swing/event/ListDataListener +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator +instanceKlass org/apache/xerces/impl/xs/identity/FieldActivator +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$3 +instanceKlass org/apache/xerces/jaxp/JAXPConstants +instanceKlass javax/xml/parsers/DocumentBuilder +instanceKlass javax/xml/parsers/SecuritySupport$1 +instanceKlass javax/xml/parsers/SecuritySupport$2 +instanceKlass javax/xml/parsers/SecuritySupport +instanceKlass javax/xml/parsers/FactoryFinder +instanceKlass javax/xml/parsers/DocumentBuilderFactory +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$2 +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1 +instanceKlass com/mathworks/mwswing/CustomizablePopupMenu +instanceKlass java/util/Vector$1 +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistrant +instanceKlass com/mathworks/toolstrip/components/AcceptsMnemonic +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/Shortcut +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$OpenWorkspaceVariableAction$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutUtils +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$LocalExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$2 +instanceKlass java/util/concurrent/CountDownLatch +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2 +instanceKlass sun/java2d/loops/FontInfo +instanceKlass sun/font/CMap +instanceKlass sun/font/T2KFontScaler$1 +instanceKlass sun/font/FontScaler +instanceKlass sun/font/StrikeCache$DisposableStrike +instanceKlass sun/font/FontStrikeDisposer +instanceKlass sun/java2d/Disposer$PollDisposable +instanceKlass sun/font/FontStrikeDesc +instanceKlass sun/font/FontDesignMetrics$MetricsKey +instanceKlass java/awt/FontMetrics +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteIconContainer +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandIcons +instanceKlass java/text/FieldPosition$Delegate +instanceKlass java/text/Format$FieldDelegate +instanceKlass java/text/DigitList +instanceKlass java/util/Currency$CurrencyNameGetter +instanceKlass java/util/Currency$1 +instanceKlass java/util/Currency +instanceKlass java/text/DecimalFormatSymbols +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference$Pair +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference +instanceKlass java/text/FieldPosition +instanceKlass com/mathworks/mde/desk/MLDesktopRegistrar +instanceKlass com/mathworks/mlservices/MatlabDesktopRegistrar +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutIconUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandResources +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$GalleryModelReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$GalleryModelCreator +instanceKlass com/mathworks/beans/EnumPair +instanceKlass com/mathworks/jmi/bean/UDDMethodDescription +instanceKlass com/mathworks/jmi/bean/UDDPropertyDescription +instanceKlass com/mathworks/jmi/bean/UDDBeanClass +instanceKlass com/mathworks/jmi/bean/OpCode +instanceKlass com/mathworks/jmi/bean/ClassFileConstants +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory +instanceKlass com/mathworks/jmi/bean/UDDListener +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryOptions +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolSupplier +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ListDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$Listener +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar$1 +instanceKlass com/mathworks/toolstrip/accessories/TSContextMenuContributor +instanceKlass com/mathworks/toolstrip/components/popups/ListActionListener +instanceKlass javax/swing/ListModel +instanceKlass com/mathworks/widgets/desk/DTWindowPopupAction$1 +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Tool +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Dependency +instanceKlass com/mathworks/mwswing/IconSet$IconSizeComparator +instanceKlass com/mathworks/mwswing/IconSet +instanceKlass com/mathworks/mwswing/ResizableIcon +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolParameters +instanceKlass org/apache/commons/lang/builder/HashCodeBuilder +instanceKlass com/mathworks/util/Pair +instanceKlass com/mathworks/toolstrip/factory/XMLUtils +instanceKlass com/mathworks/mwswing/SimpleDOMUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$ToolParameters +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Section +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory$Registrar +instanceKlass com/mathworks/mde/liveeditor/LiveEditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$Registrar +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar +instanceKlass com/mathworks/toolstrip/components/gallery/model/ActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$ToolSetReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$Registrar +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolDecorator +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$FocusTracker +instanceKlass com/mathworks/widgets/desk/DTFrame$1 +instanceKlass java/util/SortedSet +instanceKlass com/google/common/collect/Multiset +instanceKlass com/google/common/collect/AbstractMultimap +instanceKlass com/mathworks/mwswing/modality/ModalLevel +instanceKlass javax/swing/Timer$1 +instanceKlass com/mathworks/mwswing/modality/ModalStackImpl +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl$ModalityManagerAWTEventListener +instanceKlass com/mathworks/mwswing/modality/ModalStack +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl +instanceKlass com/mathworks/mwswing/MJFrame$1 +instanceKlass com/mathworks/mwswing/window/MJFullWindowRegistry +instanceKlass javax/swing/LayoutComparator +instanceKlass java/util/function/IntBinaryOperator +instanceKlass java/util/function/LongBinaryOperator +instanceKlass java/util/function/DoubleBinaryOperator +instanceKlass java/util/function/BinaryOperator +instanceKlass java/util/function/IntToDoubleFunction +instanceKlass java/util/function/IntToLongFunction +instanceKlass java/util/function/IntUnaryOperator +instanceKlass java/util/function/IntFunction +instanceKlass java/util/stream/LongStream +instanceKlass java/util/stream/DoubleStream +instanceKlass java/util/stream/Stream +instanceKlass java/util/stream/IntStream +instanceKlass java/util/stream/BaseStream +instanceKlass java/util/Spliterator$OfDouble +instanceKlass java/util/Spliterator$OfInt +instanceKlass java/util/Spliterator$OfLong +instanceKlass java/util/Spliterator$OfPrimitive +instanceKlass java/util/Spliterator +instanceKlass javax/swing/SortingFocusTraversalPolicy$1 +instanceKlass javax/swing/RepaintManager$PaintManager +instanceKlass javax/swing/JRootPane$RootLayout +instanceKlass com/mathworks/mde/desk/PlotGalleryManager +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$ClientMenuInfo +instanceKlass java/io/ObjectOutput +instanceKlass com/mathworks/toolstrip/Toolstrip +instanceKlass com/mathworks/toolstrip/factory/TSToolSet +instanceKlass com/mathworks/widgets/desk/DTToolBarLocation +instanceKlass com/mathworks/widgets/desk/DTFrame$DeferredMenuBarUpdate +instanceKlass com/mathworks/mwswing/modality/ModalManager +instanceKlass com/mathworks/util/NativeEvent$Listener +instanceKlass com/mathworks/mwswing/MJFrame$FullScreenListener +instanceKlass com/mathworks/services/Branding +instanceKlass com/mathworks/widgets/desk/DTFrame$MenuToStatusBarBridge +instanceKlass com/mathworks/mde/desk/MLFeatures$Listener +instanceKlass com/mathworks/toolstrip/components/TSComponent +instanceKlass com/mathworks/desktop/mnemonics/HasMnemonic +instanceKlass com/mathworks/toolstrip/ToolstripSection +instanceKlass com/mathworks/widgets/desk/DTComponentBar$DragOffListener +instanceKlass com/mathworks/toolstrip/components/TSUtil$KeyTriggerListener +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry$ActivatorData +instanceKlass com/mathworks/mde/desk/MLDesktop$Initializer +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$GoToNullPrompt +instanceKlass com/mathworks/jmi/mldisplay/VariableDisplayEvent +instanceKlass com/mathworks/jmi/diagnostic/IssuedWarningEvent +instanceKlass com/mathworks/jmi/correction/SuggestionEvent +instanceKlass com/mathworks/mvm/MvmWrapper +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$2 +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$1 +instanceKlass com/mathworks/mde/cmdwin/Prompt +instanceKlass javax/swing/text/StyleContext$KeyEnumeration +instanceKlass javax/swing/text/GapContent$StickyPosition +instanceKlass javax/swing/text/Position +instanceKlass javax/swing/text/AbstractDocument$1 +instanceKlass javax/swing/text/AbstractDocument$AbstractElement +instanceKlass javax/swing/tree/TreeNode +instanceKlass javax/swing/text/Element +instanceKlass java/util/Collections$3 +instanceKlass javax/swing/text/StyleContext$SmallAttributeSet +instanceKlass java/util/Collections$EmptyEnumeration +instanceKlass javax/swing/text/StyleContext$NamedStyle +instanceKlass javax/swing/text/Style +instanceKlass javax/swing/text/SimpleAttributeSet$EmptyAttributeSet +instanceKlass javax/swing/text/SimpleAttributeSet +instanceKlass javax/swing/text/MutableAttributeSet +instanceKlass javax/swing/text/AttributeSet +instanceKlass javax/swing/text/StyleContext$FontKey +instanceKlass javax/swing/text/AttributeSet$ParagraphAttribute +instanceKlass javax/swing/text/AttributeSet$ColorAttribute +instanceKlass javax/swing/text/AttributeSet$FontAttribute +instanceKlass javax/swing/text/AttributeSet$CharacterAttribute +instanceKlass javax/swing/text/StyleConstants +instanceKlass javax/swing/text/StyleContext +instanceKlass javax/swing/text/AbstractDocument$AttributeContext +instanceKlass javax/swing/text/GapVector +instanceKlass javax/swing/event/DocumentEvent +instanceKlass javax/swing/text/AbstractDocument$Content +instanceKlass javax/swing/event/DocumentListener +instanceKlass javax/swing/text/AbstractDocument +instanceKlass com/mathworks/widgets/text/print/PrintableTextDocument +instanceKlass javax/swing/text/Document +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF +instanceKlass com/mathworks/mde/cmdwin/KeystrokeRequestedEvent +instanceKlass com/mathworks/mde/cmdwin/LoadNativeCmdWin +instanceKlass com/mathworks/mde/cmdwin/CmdWinSinkRegistrar +instanceKlass com/mathworks/mlwidgets/prefs/ConfirmationDialogPrefsPanel$DialogItem +instanceKlass com/mathworks/mwswing/table/AccessibleTextProvider +instanceKlass javax/swing/table/TableCellEditor +instanceKlass javax/swing/CellEditor +instanceKlass javax/swing/table/TableCellRenderer +instanceKlass com/mathworks/mde/cmdwin/CmdWinPrefs +instanceKlass com/mathworks/services/FontPrefsComponent +instanceKlass com/mathworks/services/lmgr/NativeLmgr +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService$nativeBorrowAPI +instanceKlass com/mathworks/services/lmgr/BorrowAPI +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrServiceFactory +instanceKlass com/mathworks/jmi/Support +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManagerImpl +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI$LazyHolder +instanceKlass com/mathworks/jmi/MatlabWorker +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManager +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$3 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$2 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$4 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$2 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$2 +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager +instanceKlass com/mathworks/mde/editor/EditorPauseAction$3 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager$BusyIdleListener +instanceKlass com/mathworks/mwswing/ToolTipProvider +instanceKlass com/mathworks/mde/editor/EditorPauseAction +instanceKlass com/mathworks/mlservices/MatlabDebugAdapter +instanceKlass com/mathworks/services/PrefChangeListener +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$DebugAction$13$1 +instanceKlass com/mathworks/mlservices/MatlabDebugServices$1 +instanceKlass com/mathworks/mlservices/MatlabExecutionErrorHandler +instanceKlass com/mathworks/mde/cmdwin/CmdWinExecuteServices +instanceKlass com/mathworks/mlservices/MLExecuteRegistrar +instanceKlass com/mathworks/mlservices/MLExecute +instanceKlass com/mathworks/mlservices/MLServicesRegistry$EventMulticaster +instanceKlass com/mathworks/mlservices/MLServicesRegistry +instanceKlass com/mathworks/mlservices/MLExecuteServices$ServicesRegistryListener +instanceKlass com/mathworks/mlservices/MLServicesRegistry$Listener +instanceKlass com/mathworks/mlservices/MLServices +instanceKlass com/mathworks/mlservices/MatlabDebugServices$InterestCallback +instanceKlass sun/util/logging/LoggingSupport$2 +instanceKlass java/util/logging/Formatter +instanceKlass java/util/logging/ErrorManager +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager$InterceptorComparator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager +instanceKlass com/mathworks/mlservices/MatlabDebugServices$BusyExecutionListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$CtrlCListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabPauseObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabDebugObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackCallback +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackDispatch +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch$DebugExitStackCheck +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch +instanceKlass com/mathworks/matlab/api/debug/Breakpoint +instanceKlass com/mathworks/mlservices/BreakpointBase +instanceKlass com/mathworks/mlservices/MatlabDebugServices +instanceKlass com/mathworks/mlservices/MatlabDebugObserver +instanceKlass com/mathworks/mlwidgets/debug/DebugActions +instanceKlass com/mathworks/widgets/desk/Desktop$43 +instanceKlass com/mathworks/widgets/debug/DebuggerManager$IdleMatlabDebugger +instanceKlass com/mathworks/widgets/debug/DebuggerManager +instanceKlass com/mathworks/matlab/api/editor/actions/DebuggerActions +instanceKlass com/mathworks/jmi/Matlab$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$2 +instanceKlass com/mathworks/toolstrip/ToolstripTab +instanceKlass com/mathworks/desktop/client/Client +instanceKlass com/mathworks/desktop/attr/Attributes +instanceKlass com/mathworks/widgets/desk/DTGroup$DeferredPropertyChange +instanceKlass com/mathworks/widgets/desk/DTGroup$1 +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge +instanceKlass java/awt/event/WindowAdapter +instanceKlass com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper +instanceKlass javax/swing/MenuSelectionManager +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$1 +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper +instanceKlass javax/swing/Popup +instanceKlass com/mathworks/mwswing/MJMenuItem$ActionPropertyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$PropertyChangeHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuKeyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuDragMouseHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MouseInputHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon +instanceKlass javax/swing/plaf/basic/BasicMenuItemUI$Handler +instanceKlass javax/swing/event/MenuDragMouseListener +instanceKlass javax/swing/event/MenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler +instanceKlass com/mathworks/mwswing/MJMenu$WindowsVistaPropertyChangeListener +instanceKlass sun/swing/MenuItemLayoutHelper +instanceKlass javax/swing/plaf/basic/BasicGraphicsUtils +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuUI$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor +instanceKlass javax/swing/JMenuItem$MenuItemFocusListener +instanceKlass javax/swing/JMenu$MenuChangeListener +instanceKlass sun/swing/UIAction +instanceKlass javax/swing/plaf/basic/BasicMenuBarUI$Handler +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2 +instanceKlass javax/swing/plaf/basic/BasicBorders +instanceKlass javax/swing/DefaultSingleSelectionModel +instanceKlass javax/swing/SingleSelectionModel +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler +instanceKlass com/mathworks/mwswing/MJButton$ActionPropertyHandler +instanceKlass javax/swing/ActionPropertyChangeListener +instanceKlass javax/swing/KeyboardManager$ComponentKeyStrokePair +instanceKlass javax/swing/KeyboardManager +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ActionTrigger +instanceKlass com/google/common/collect/ListMultimap +instanceKlass com/google/common/collect/Multimap +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager +instanceKlass com/mathworks/widgets/desk/DTMenuMergeTag +instanceKlass com/mathworks/services/PrefUtils +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferenceUtils +instanceKlass org/apache/xerces/impl/Constants$ArrayEnumeration +instanceKlass org/apache/xerces/impl/Constants +instanceKlass com/mathworks/mwswing/binding/ContextID +instanceKlass com/mathworks/mwswing/binding/ContextActionData +instanceKlass com/mathworks/mwswing/binding/ContextReader +instanceKlass java/util/Collections$UnmodifiableList$1 +instanceKlass com/mathworks/mwswing/binding/MetaBindingUtils +instanceKlass com/mathworks/mwswing/binding/NavigationalBindingUtils +instanceKlass java/util/LinkedList$ListItr +instanceKlass com/mathworks/util/InitializationHelper +instanceKlass com/mathworks/util/InitializeBeforeAccess +instanceKlass org/apache/xerces/util/XMLSymbols +instanceKlass org/apache/xerces/util/XMLChar +instanceKlass org/apache/xerces/xni/parser/XMLInputSource +instanceKlass org/xml/sax/InputSource +instanceKlass org/apache/xerces/util/ErrorHandlerWrapper +instanceKlass com/mathworks/xml/EncodingParser$QuietErrorHandler +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$AttributesProxy +instanceKlass org/xml/sax/ext/Attributes2 +instanceKlass org/apache/xerces/impl/msg/XMLMessageFormatter +instanceKlass org/apache/xerces/impl/XMLVersionDetector +instanceKlass org/apache/xerces/impl/validation/ValidationManager +instanceKlass org/apache/xerces/impl/dv/dtd/NMTOKENDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/NOTATIONDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ENTITYDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ListDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDREFDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/StringDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/DatatypeValidator +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$2 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$1 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport +instanceKlass org/apache/xerces/impl/dv/ObjectFactory +instanceKlass org/apache/xerces/impl/dv/DTDDVFactory +instanceKlass org/apache/xerces/impl/dtd/DTDGrammarBucket +instanceKlass org/apache/xerces/impl/dtd/XMLAttributeDecl +instanceKlass org/apache/xerces/impl/dtd/XMLSimpleType +instanceKlass org/apache/xerces/impl/dtd/XMLElementDecl +instanceKlass org/apache/xerces/impl/validation/ValidationState +instanceKlass org/apache/xerces/impl/dv/ValidationContext +instanceKlass org/apache/xerces/impl/dtd/DTDGrammar +instanceKlass org/apache/xerces/xni/grammars/Grammar +instanceKlass org/apache/xerces/impl/validation/EntityState +instanceKlass org/apache/xerces/impl/dtd/XMLEntityDecl +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$TrailingMiscDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$DTDDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$PrologDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$XMLDeclDispatcher +instanceKlass org/apache/xerces/util/NamespaceSupport +instanceKlass org/apache/xerces/util/XMLAttributesImpl$Attribute +instanceKlass org/apache/xerces/util/XMLAttributesImpl +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$FragmentContentDispatcher +instanceKlass org/apache/xerces/xni/QName +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$ElementStack +instanceKlass org/apache/xerces/xni/grammars/XMLDTDDescription +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarDescription +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$Dispatcher +instanceKlass org/apache/xerces/xni/XMLAttributes +instanceKlass org/apache/xerces/xni/XMLString +instanceKlass org/apache/xerces/impl/XMLErrorReporter +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBuffer +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBufferPool +instanceKlass org/apache/xerces/impl/XMLEntityManager$ByteBufferPool +instanceKlass org/apache/xerces/util/AugmentationsImpl$AugmentationsItemsContainer +instanceKlass org/apache/xerces/util/AugmentationsImpl +instanceKlass org/apache/xerces/util/XMLResourceIdentifierImpl +instanceKlass org/apache/xerces/impl/XMLEntityManager$1 +instanceKlass org/apache/xerces/xni/Augmentations +instanceKlass org/apache/xerces/impl/XMLEntityScanner +instanceKlass org/apache/xerces/impl/XMLEntityManager$Entity +instanceKlass org/apache/xerces/xni/XMLResourceIdentifier +instanceKlass org/apache/xerces/impl/XMLEntityManager +instanceKlass org/apache/xerces/util/SymbolTable$Entry +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarPool +instanceKlass org/apache/xerces/util/SymbolTable +instanceKlass org/apache/xerces/xni/NamespaceContext +instanceKlass org/apache/xerces/xni/XMLLocator +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidator +instanceKlass org/apache/xerces/impl/RevalidationHandler +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarLoader +instanceKlass org/apache/xerces/impl/dtd/XMLDTDProcessor +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDScanner +instanceKlass org/apache/xerces/util/MessageFormatter +instanceKlass org/apache/xerces/impl/XMLScanner +instanceKlass org/apache/xerces/impl/XMLEntityHandler +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidatorFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentScanner +instanceKlass org/apache/xerces/xni/parser/XMLDocumentSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDSource +instanceKlass org/apache/xerces/xni/parser/XMLComponent +instanceKlass org/apache/xerces/util/ParserConfigurationSettings +instanceKlass org/apache/xerces/parsers/XML11Configurable +instanceKlass org/apache/xerces/xni/parser/XMLPullParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLComponentManager +instanceKlass org/apache/xerces/parsers/SecuritySupport$6 +instanceKlass org/apache/xerces/parsers/SecuritySupport$7 +instanceKlass org/apache/xerces/parsers/SecuritySupport$4 +instanceKlass org/apache/xerces/parsers/SecuritySupport$2 +instanceKlass org/apache/xerces/parsers/SecuritySupport$1 +instanceKlass org/apache/xerces/parsers/SecuritySupport +instanceKlass org/apache/xerces/parsers/ObjectFactory +instanceKlass org/xml/sax/helpers/LocatorImpl +instanceKlass org/xml/sax/Locator +instanceKlass org/xml/sax/Attributes +instanceKlass org/xml/sax/AttributeList +instanceKlass org/apache/xerces/xni/parser/XMLErrorHandler +instanceKlass org/apache/xerces/xni/parser/XMLEntityResolver +instanceKlass org/apache/xerces/parsers/XMLParser +instanceKlass org/apache/xerces/xni/XMLDTDContentModelHandler +instanceKlass org/apache/xerces/xni/XMLDTDHandler +instanceKlass org/apache/xerces/xni/XMLDocumentHandler +instanceKlass org/xml/sax/XMLReader +instanceKlass org/xml/sax/Parser +instanceKlass org/apache/xerces/xs/PSVIProvider +instanceKlass org/xml/sax/EntityResolver +instanceKlass org/xml/sax/ErrorHandler +instanceKlass org/xml/sax/ContentHandler +instanceKlass javax/xml/transform/Result +instanceKlass javax/xml/transform/Source +instanceKlass com/mathworks/xml/XMLUtils +instanceKlass org/apache/commons/io/IOUtils +instanceKlass com/mathworks/mwswing/binding/KeyBindingReaderUtils +instanceKlass com/mathworks/mwswing/binding/ActionDataReader +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferences +instanceKlass com/mathworks/mwswing/binding/ActionDataID +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindingSetID +instanceKlass com/mathworks/mwswing/binding/AbstractNamedUniqueID +instanceKlass com/mathworks/mwswing/binding/UniqueID +instanceKlass com/mathworks/mwswing/binding/KeyBindingManager +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistry +instanceKlass com/mathworks/services/binding/KeyBindingPreferences +instanceKlass com/mathworks/services/binding/MatlabKeyBindings +instanceKlass com/mathworks/mwswing/MJToolBar$LocalContainerListener +instanceKlass javax/accessibility/AccessibleRelationSet +instanceKlass javax/accessibility/AccessibleContext$1 +instanceKlass sun/awt/AWTAccessor$AccessibleContextAccessor +instanceKlass javax/accessibility/AccessibleExtendedComponent +instanceKlass javax/accessibility/AccessibleComponent +instanceKlass javax/accessibility/AccessibleText +instanceKlass javax/accessibility/AccessibleValue +instanceKlass javax/accessibility/AccessibleAction +instanceKlass com/mathworks/mwswing/MJToolBar$2 +instanceKlass java/beans/VetoableChangeListener +instanceKlass javax/swing/plaf/basic/BasicButtonListener +instanceKlass javax/swing/AbstractButton$Handler +instanceKlass javax/swing/DefaultButtonModel +instanceKlass javax/swing/ButtonModel +instanceKlass com/mathworks/mwswing/Painter +instanceKlass com/mathworks/mwswing/MJButton$LocalHierarchyListener +instanceKlass java/awt/VKCollection +instanceKlass javax/swing/plaf/basic/BasicToolBarUI$Handler +instanceKlass javax/swing/event/MouseInputListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsBorders +instanceKlass javax/swing/BoxLayout +instanceKlass javax/swing/JToolBar$DefaultToolBarLayout +instanceKlass com/mathworks/mwswing/CellViewerCustomizer +instanceKlass javax/swing/event/PopupMenuListener +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch +instanceKlass com/mathworks/hg/peer/EchoEvent +instanceKlass com/mathworks/hg/peer/EchoListener +instanceKlass com/mathworks/hg/peer/Echo +instanceKlass com/mathworks/hg/peer/event/ToolbuttonListener +instanceKlass com/mathworks/hg/peer/AbstractToolbuttonPeer +instanceKlass com/mathworks/hg/peer/ToolbarPeer +instanceKlass com/mathworks/hg/peer/event/UiMenuListener +instanceKlass com/mathworks/hg/peer/AbstractSplitButtonPeer +instanceKlass com/mathworks/hg/peer/ContextMenuPeer +instanceKlass com/mathworks/hg/peer/utils/MatlabIconComponent +instanceKlass com/mathworks/hg/peer/MenuPeer +instanceKlass com/mathworks/hg/peer/FigureNotification +instanceKlass com/mathworks/hg/peer/AxisComponent +instanceKlass com/mathworks/hg/peer/FigureComponentProxy +instanceKlass com/mathworks/hg/peer/CanvasComponentCreationListener +instanceKlass com/mathworks/jmi/Callback +instanceKlass com/mathworks/hg/peer/FigurePeerWindowListener +instanceKlass com/mathworks/hg/peer/FigurePeerFocusListener +instanceKlass com/mathworks/hg/peer/AbstractUicontrolPeer +instanceKlass com/mathworks/hg/types/GUIDEViewProvider +instanceKlass com/mathworks/hg/peer/CallbackTrigger +instanceKlass com/mathworks/hg/UicontrolPeer +instanceKlass com/mathworks/hg/BaseControl +instanceKlass com/mathworks/hg/peer/FigurePeerKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerMouseListener +instanceKlass com/mathworks/hg/peer/FigurePeerPaintListener +instanceKlass com/mathworks/hg/peer/FigurePeerComponentListener +instanceKlass com/mathworks/hg/peer/FigurePeerButtonMotionListener +instanceKlass com/mathworks/hg/peer/FigurePeerAcceleratorKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerScrollWheelListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStateListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStyleListener +instanceKlass com/mathworks/hg/peer/FigureChild +instanceKlass java/util/TreeMap$PrivateEntryIterator +instanceKlass sun/reflect/annotation/AnnotationParser +instanceKlass java/beans/Transient +instanceKlass com/sun/beans/WildcardTypeImpl +instanceKlass sun/reflect/generics/tree/MethodTypeSignature +instanceKlass sun/reflect/generics/tree/Wildcard +instanceKlass sun/reflect/generics/tree/BottomSignature +instanceKlass com/sun/beans/TypeResolver +instanceKlass java/beans/MethodRef +instanceKlass com/sun/beans/util/Cache$CacheEntry +instanceKlass com/sun/beans/util/Cache +instanceKlass com/sun/beans/finder/AbstractFinder +instanceKlass java/beans/SimpleBeanInfo +instanceKlass com/sun/beans/finder/ClassFinder +instanceKlass java/beans/BeanInfo +instanceKlass com/sun/beans/finder/InstanceFinder +instanceKlass java/beans/WeakIdentityMap +instanceKlass java/beans/ThreadGroupContext +instanceKlass java/beans/FeatureDescriptor +instanceKlass com/sun/beans/WeakCache +instanceKlass java/beans/Introspector +instanceKlass com/mathworks/hg/peer/LightWeightManager +instanceKlass com/mathworks/hg/peer/FigureEditableComponent +instanceKlass com/mathworks/hg/peer/FigureFrameProxyBase +instanceKlass com/mathworks/hg/peer/PositionableFigureClient +instanceKlass javax/swing/event/AncestorListener +instanceKlass com/mathworks/hg/peer/event/HGSendPollable +instanceKlass com/mathworks/jmi/bean/Coalesceable +instanceKlass com/mathworks/hg/util/HGPeerRunnable +instanceKlass com/mathworks/hg/peer/FigureJavaComponentListener$FigureJavaComponentSizeListener +instanceKlass com/mathworks/hg/peer/FigurePeer +instanceKlass com/mathworks/hg/peer/UIComponentParentWithLayout +instanceKlass com/mathworks/hg/peer/UIComponentParent +instanceKlass com/mathworks/hg/peer/FigureValidator +instanceKlass com/mathworks/hg/peer/FigureNotificationHandler +instanceKlass com/mathworks/hg/util/HGPeerQueueUser +instanceKlass com/mathworks/widgets/desk/DTGroupProperty$1 +instanceKlass com/mathworks/widgets/desk/DTGroupBase +instanceKlass com/mathworks/jmi/ClassLoaderManager +instanceKlass com/mathworks/mwswing/BorderUtils +instanceKlass javax/swing/plaf/basic/BasicHTML +instanceKlass java/awt/Component$3 +instanceKlass sun/reflect/ClassDefiner$1 +instanceKlass sun/reflect/ClassDefiner +instanceKlass sun/reflect/MethodAccessorGenerator$1 +instanceKlass sun/reflect/Label$PatchInfo +instanceKlass sun/reflect/Label +instanceKlass sun/reflect/UTF8 +instanceKlass sun/reflect/ClassFileAssembler +instanceKlass sun/reflect/ByteVectorImpl +instanceKlass sun/reflect/ByteVector +instanceKlass sun/reflect/ByteVectorFactory +instanceKlass sun/reflect/AccessorGenerator +instanceKlass sun/reflect/ClassFileConstants +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager$1 +instanceKlass com/mathworks/widgets/desk/DTClient$LocationListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$State +instanceKlass com/mathworks/widgets/desk/TargetedAction +instanceKlass javax/swing/event/MenuListener +instanceKlass com/mathworks/widgets/desk/DTDocumentArranger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties$Listener +instanceKlass com/mathworks/mwswing/MJAbstractAction$1 +instanceKlass com/mathworks/mwswing/binding/KeyStrokeList +instanceKlass java/awt/event/KeyEvent$1 +instanceKlass sun/awt/AWTAccessor$KeyEventAccessor +instanceKlass com/mathworks/mwswing/binding/KeyStrokeUtils +instanceKlass javax/swing/ArrayTable +instanceKlass com/mathworks/mwswing/ActionUtils +instanceKlass com/mathworks/mwswing/binding/ExtendedActionBridge +instanceKlass com/mathworks/widgets/desk/DTNestingContainer$TreeState +instanceKlass com/mathworks/mwswing/KeyControlledDragger +instanceKlass java/awt/TrayIcon +instanceKlass java/awt/MenuComponent +instanceKlass java/awt/EventQueue$3 +instanceKlass com/mathworks/widgets/desk/DTDropTarget +instanceKlass sun/awt/dnd/SunDragSourceContextPeer +instanceKlass java/awt/dnd/peer/DragSourceContextPeer +instanceKlass sun/awt/EventQueueDelegate +instanceKlass java/awt/ModalEventFilter +instanceKlass java/awt/EventDispatchThread$HierarchyEventFilter +instanceKlass java/awt/EventFilter +instanceKlass com/mathworks/mlwidgets/util/MatlabDropTargetListener +instanceKlass java/awt/EventDispatchThread$1 +instanceKlass java/awt/Conditional +instanceKlass java/awt/EventQueue$5 +instanceKlass java/awt/event/InvocationEvent$1 +instanceKlass sun/awt/AWTAccessor$InvocationEventAccessor +instanceKlass java/awt/ActiveEvent +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy$1 +instanceKlass com/mathworks/widgets/desk/DTGroup$LocationListener +instanceKlass java/awt/event/ComponentAdapter +instanceKlass com/mathworks/mwswing/SimpleDOMParser +instanceKlass com/sun/java/swing/SwingUtilities3 +instanceKlass javax/swing/RepaintManager$ProcessingRunnable +instanceKlass sun/reflect/misc/Trampoline +instanceKlass sun/reflect/misc/MethodUtil$1 +instanceKlass java/awt/FlowLayout +instanceKlass com/mathworks/widgets/grouptable/GroupingTableSelectionListener +instanceKlass com/mathworks/widgets/grouptable/Affordance +instanceKlass com/mathworks/widgets/grouptable/ExpansionProvider +instanceKlass com/mathworks/widgets/grouptable/TableConfigurationSerializer +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationListener +instanceKlass com/mathworks/mwswing/ExtendedButton +instanceKlass com/mathworks/mwswing/PopupMenuCustomizer +instanceKlass com/mathworks/widgets/grouptable/transfer/ReceiveHandler +instanceKlass com/mathworks/widgets/grouptable/transfer/SendHandler +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/TitleChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/util/ComponentInjector +instanceKlass com/jidesoft/grid/IndexChangeListener +instanceKlass com/jidesoft/grid/TableAdapter +instanceKlass com/jidesoft/grid/SortListener +instanceKlass com/mathworks/mwswing/table/SortedTable +instanceKlass com/mathworks/matlab/api/explorer/ActionInputSource +instanceKlass com/mathworks/matlab/api/explorer/FileSystem +instanceKlass com/mathworks/mde/desk/DesktopExplorerAdapterImpl +instanceKlass com/mathworks/mde/desk/MLDesktop$doMatlabStatus +instanceKlass com/mathworks/widgets/desk/DTToolBarConfiguration +instanceKlass com/mathworks/widgets/desk/DTPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTProperty +instanceKlass javax/swing/AbstractAction +instanceKlass com/mathworks/widgets/desk/DTGroupPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry +instanceKlass com/mathworks/widgets/desk/DefaultViewTabFactory +instanceKlass org/w3c/dom/Element +instanceKlass org/w3c/dom/Document +instanceKlass com/mathworks/mde/desk/MLDesktop$MatlabReadyListener +instanceKlass com/mathworks/mwswing/SimpleNode +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar +instanceKlass com/mathworks/widgets/desk/RecentFiles +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Listener +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary +instanceKlass com/mathworks/widgets/desk/DTMainToolBarSupplier +instanceKlass javax/swing/ActionMap +instanceKlass com/mathworks/widgets/desk/DTLazyPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTClientPropertyProvider +instanceKlass com/mathworks/mde/liveeditor/ToolstripManager +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefresher +instanceKlass com/mathworks/widgets/desk/DTRecoverable +instanceKlass com/mathworks/toolstrip/factory/TSRegistry +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper +instanceKlass com/mathworks/mde/desk/MLDesktop$DesktopStatusPauseObserver +instanceKlass com/mathworks/widgets/desk/DeferredDesktopFacade +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalLocationListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalArrangementListener +instanceKlass com/mathworks/widgets/desk/DTGroupAdapter +instanceKlass com/mathworks/widgets/desk/DTClientAdapter +instanceKlass com/mathworks/widgets/desk/DTLocation$Listener +instanceKlass com/mathworks/widgets/desk/DTGroupListener +instanceKlass com/mathworks/widgets/desk/DTClientListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager +instanceKlass com/mathworks/desktop/attr/AttributeChangeListener +instanceKlass com/mathworks/desktop/attr/Attribute +instanceKlass com/mathworks/widgets/desk/DTSelectionManager +instanceKlass javax/swing/TimerQueue$DelayedTimer +instanceKlass java/util/concurrent/Delayed +instanceKlass javax/swing/TimerQueue$1 +instanceKlass javax/swing/TimerQueue +instanceKlass com/mathworks/ddux/JSBridge$1 +instanceKlass com/mathworks/messageservice/Subscriber +instanceKlass com/mathworks/ddux/JSBridge +instanceKlass com/mathworks/mvm/eventmgr/EventListening +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr +instanceKlass com/mathworks/mvm/MvmSession +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks$1 +instanceKlass com/mathworks/matlab/environment/context/Util +instanceKlass com/mathworks/addons_common/util/MatlabPlatformUtil +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer$1 +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFacade +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFactory +instanceKlass com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator +instanceKlass java/lang/reflect/TypeVariable +instanceKlass sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$SupportedProducts +instanceKlass sun/reflect/generics/visitor/Reifier +instanceKlass sun/reflect/generics/visitor/TypeTreeVisitor +instanceKlass sun/reflect/generics/tree/ClassSignature +instanceKlass sun/reflect/generics/tree/Signature +instanceKlass sun/reflect/generics/tree/ClassTypeSignature +instanceKlass sun/reflect/generics/tree/SimpleClassTypeSignature +instanceKlass sun/reflect/generics/tree/FieldTypeSignature +instanceKlass sun/reflect/generics/tree/BaseType +instanceKlass sun/reflect/generics/tree/TypeSignature +instanceKlass sun/reflect/generics/tree/ReturnType +instanceKlass sun/reflect/generics/tree/TypeArgument +instanceKlass sun/reflect/generics/tree/FormalTypeParameter +instanceKlass sun/reflect/generics/tree/TypeTree +instanceKlass sun/reflect/generics/tree/Tree +instanceKlass sun/reflect/generics/parser/SignatureParser +instanceKlass sun/reflect/generics/factory/CoreReflectionFactory +instanceKlass sun/reflect/generics/factory/GenericsFactory +instanceKlass sun/reflect/generics/scope/AbstractScope +instanceKlass sun/reflect/generics/scope/Scope +instanceKlass com/mathworks/connector/client_services/UserManagerImpl +instanceKlass com/mathworks/matlabserver/internalservices/workersecurity/UserManager +instanceKlass com/mathworks/connector/client_services/ClientCommandWindowServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientCommandWindowService +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientBrowserService +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientEditorService +instanceKlass com/mathworks/matlabserver/workercommon/client/services/MessageProducer +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryImpl +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycleHelper +instanceKlass com/mathworks/connector/json/impl/JsonDeserializationServiceProvider +instanceKlass com/mathworks/connector/json/impl/JsonSerializationServiceProvider +instanceKlass com/mathworks/connector/MessageBase +instanceKlass com/google/gson/TreeTypeAdapter$SingleTypeFactory +instanceKlass com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl +instanceKlass java/lang/reflect/ParameterizedType +instanceKlass java/lang/reflect/GenericArrayType +instanceKlass java/lang/reflect/WildcardType +instanceKlass com/google/gson/internal/$Gson$Types +instanceKlass com/google/gson/reflect/TypeToken +instanceKlass com/google/gson/InstanceCreator +instanceKlass com/google/gson/internal/$Gson$Preconditions +instanceKlass com/google/gson/JsonSerializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl$GenericMessageDeserializer +instanceKlass com/google/gson/JsonDeserializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/MapTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/CollectionTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/ArrayTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/SqlDateTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TimeTypeAdapter$1 +instanceKlass java/util/Date +instanceKlass com/google/gson/internal/bind/DateTypeAdapter$1 +instanceKlass java/text/Format +instanceKlass com/google/gson/internal/bind/ObjectTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TypeAdapters$26 +instanceKlass com/google/gson/internal/bind/TypeAdapters$30 +instanceKlass com/google/gson/internal/bind/TypeAdapters$22 +instanceKlass java/util/UUID +instanceKlass com/google/gson/internal/bind/TypeAdapters$31 +instanceKlass com/google/gson/internal/bind/TypeAdapters$29 +instanceKlass com/google/gson/internal/bind/TypeAdapters$28 +instanceKlass com/google/gson/internal/bind/TypeAdapters +instanceKlass com/google/gson/internal/ObjectConstructor +instanceKlass com/google/gson/internal/ConstructorConstructor +instanceKlass com/google/gson/Gson$2 +instanceKlass com/google/gson/Gson$1 +instanceKlass com/google/gson/JsonSerializationContext +instanceKlass com/google/gson/JsonDeserializationContext +instanceKlass com/google/gson/stream/JsonReader +instanceKlass com/google/gson/stream/JsonWriter +instanceKlass com/google/gson/Gson +instanceKlass com/google/gson/JsonElement +instanceKlass com/google/gson/TypeAdapter +instanceKlass com/google/gson/internal/Excluder +instanceKlass com/google/gson/TypeAdapterFactory +instanceKlass com/google/gson/FieldNamingStrategy +instanceKlass com/google/gson/GsonBuilder +instanceKlass com/mathworks/cosg/CosgRegistryFactory +instanceKlass com/mathworks/connector/Message +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl +instanceKlass com/mathworks/connector/Address +instanceKlass com/mathworks/connector/impl/ContextImpl +instanceKlass com/mathworks/cosg/CosgRegistry +instanceKlass com/mathworks/connector/cosg/impl/CosgServiceProvider +instanceKlass com/mathworks/messageservice/builders/MessageServiceBuilder +instanceKlass com/mathworks/connector/Future$Continuation +instanceKlass com/mathworks/connector/native_bridge/impl/NativeBridgeServiceProvider +instanceKlass com/mathworks/connector/Context +instanceKlass com/mathworks/connector/impl/ConnectorImpl +instanceKlass com/mathworks/cosg/CosgMessageHandler +instanceKlass com/mathworks/matlabserver/connector/api/Server +instanceKlass com/mathworks/matlabserver/connector/util/SessionNonceHelper +instanceKlass com/mathworks/connector/Connector +instanceKlass com/mathworks/connector/json/JsonSerializer +instanceKlass com/mathworks/connector/native_bridge/NativeBridge +instanceKlass com/mathworks/connector/ServiceProvider +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistry +instanceKlass com/mathworks/connector/message_service/api/JniMessageServiceAdaptor +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost$1 +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost +instanceKlass com/mathworks/matlabserver/connector/api/Connector +instanceKlass com/mathworks/matlabserver/connector/api/AutoStart +instanceKlass com/mathworks/jmi/MatlabPath$PathCallback +instanceKlass com/mathworks/services/message/MWHandler +instanceKlass com/mathworks/jmi/MatlabMCR +instanceKlass com/mathworks/jmi/MatlabPath +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder$1 +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTheme +instanceKlass javax/swing/text/ViewFactory +instanceKlass com/mathworks/toolstrip/plaf/TSComponentUI +instanceKlass com/mathworks/mde/desk/MLDesktop$ClientInfo +instanceKlass sun/java2d/pipe/AlphaPaintPipe$TileContext +instanceKlass java/awt/ColorPaintContext +instanceKlass java/awt/PaintContext +instanceKlass com/mathworks/mwswing/ColorUtils +instanceKlass com/mathworks/mwswing/IconUtils +instanceKlass com/mathworks/mwswing/ContrastingIcon +instanceKlass com/mathworks/mwswing/ExtendedAction +instanceKlass com/mathworks/widgets/desk/DTUtilities +instanceKlass java/lang/StrictMath +instanceKlass java/io/RandomAccessFile$1 +instanceKlass javax/imageio/metadata/IIOMetadata +instanceKlass javax/imageio/stream/FileCacheImageInputStream$StreamDisposerRecord +instanceKlass com/sun/imageio/stream/StreamCloser$2 +instanceKlass com/sun/imageio/stream/StreamCloser$1 +instanceKlass com/sun/imageio/stream/StreamCloser$CloseAction +instanceKlass com/sun/imageio/stream/StreamCloser +instanceKlass sun/nio/fs/WindowsChannelFactory$2 +instanceKlass sun/nio/fs/WindowsChannelFactory$Flags +instanceKlass sun/nio/fs/WindowsChannelFactory$1 +instanceKlass sun/nio/fs/WindowsChannelFactory +instanceKlass sun/nio/fs/WindowsSecurityDescriptor +instanceKlass java/nio/file/OpenOption +instanceKlass sun/nio/fs/WindowsPath$1 +instanceKlass sun/nio/fs/BasicFileAttributesHolder +instanceKlass sun/nio/fs/WindowsDirectoryStream$WindowsDirectoryIterator +instanceKlass sun/nio/fs/WindowsFileAttributes +instanceKlass java/nio/file/attribute/DosFileAttributes +instanceKlass java/nio/file/attribute/BasicFileAttributes +instanceKlass sun/nio/fs/NativeBuffer$Deallocator +instanceKlass sun/nio/fs/NativeBuffer +instanceKlass sun/nio/fs/NativeBuffers +instanceKlass sun/nio/fs/WindowsNativeDispatcher$BackupResult +instanceKlass sun/nio/fs/WindowsNativeDispatcher$CompletionStatus +instanceKlass sun/nio/fs/WindowsNativeDispatcher$AclInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$Account +instanceKlass sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace +instanceKlass sun/nio/fs/WindowsNativeDispatcher$VolumeInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstStream +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstFile +instanceKlass sun/nio/fs/WindowsNativeDispatcher$1 +instanceKlass sun/nio/fs/WindowsNativeDispatcher +instanceKlass sun/nio/fs/WindowsDirectoryStream +instanceKlass java/nio/file/DirectoryStream +instanceKlass java/nio/file/Files$AcceptAllFilter +instanceKlass java/nio/file/DirectoryStream$Filter +instanceKlass java/net/NetworkInterface$2 +instanceKlass java/net/DefaultInterface +instanceKlass java/net/InterfaceAddress +instanceKlass java/net/NetworkInterface$1 +instanceKlass java/net/NetworkInterface +instanceKlass sun/security/provider/ByteArrayAccess +instanceKlass sun/security/provider/SeedGenerator$1 +instanceKlass sun/security/provider/SeedGenerator +instanceKlass sun/security/provider/SecureRandom$SeederHolder +instanceKlass sun/security/jca/GetInstance$Instance +instanceKlass java/security/MessageDigestSpi +instanceKlass sun/security/jca/GetInstance +instanceKlass java/security/SecureRandomSpi +instanceKlass java/security/Provider$UString +instanceKlass java/security/Provider$Service +instanceKlass sun/security/provider/NativePRNG$NonBlocking +instanceKlass sun/security/provider/NativePRNG$Blocking +instanceKlass sun/security/provider/NativePRNG +instanceKlass sun/security/provider/SunEntries$1 +instanceKlass sun/security/provider/SunEntries +instanceKlass sun/security/jca/ProviderConfig$2 +instanceKlass sun/security/jca/ProviderList$2 +instanceKlass sun/misc/FDBigInteger +instanceKlass java/security/Provider$EngineDescription +instanceKlass java/security/Provider$ServiceKey +instanceKlass sun/security/jca/ProviderConfig +instanceKlass sun/security/jca/ProviderList +instanceKlass sun/security/jca/Providers +instanceKlass java/util/Random +instanceKlass sun/nio/fs/AbstractPath +instanceKlass java/net/URI$Parser +instanceKlass java/net/URI +instanceKlass sun/nio/fs/Util +instanceKlass sun/nio/fs/WindowsPathParser$Result +instanceKlass sun/nio/fs/WindowsPathParser +instanceKlass java/nio/file/FileSystem +instanceKlass java/nio/file/spi/FileSystemProvider +instanceKlass sun/nio/fs/DefaultFileSystemProvider +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder$1 +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder +instanceKlass java/nio/file/FileSystems +instanceKlass java/nio/file/Paths +instanceKlass java/nio/file/TempFileHelper +instanceKlass java/nio/file/Files +instanceKlass javax/imageio/stream/ImageInputStreamImpl +instanceKlass javax/imageio/ImageIO$CacheInfo +instanceKlass javax/imageio/ImageIO$ImageReaderIterator +instanceKlass javax/imageio/spi/FilterIterator +instanceKlass javax/imageio/spi/PartialOrderIterator +instanceKlass javax/imageio/ImageIO$ContainsFilter +instanceKlass javax/imageio/spi/ServiceRegistry$Filter +instanceKlass javax/imageio/ImageTypeSpecifier +instanceKlass javax/imageio/ImageWriter +instanceKlass javax/imageio/ImageTranscoder +instanceKlass javax/imageio/metadata/IIOMetadataFormat +instanceKlass javax/imageio/ImageReader +instanceKlass javax/imageio/spi/IIORegistry$1 +instanceKlass com/sun/imageio/plugins/jpeg/JPEG +instanceKlass javax/imageio/stream/ImageOutputStream +instanceKlass javax/imageio/spi/DigraphNode +instanceKlass javax/imageio/stream/ImageInputStream +instanceKlass javax/imageio/spi/SubRegistry +instanceKlass javax/imageio/spi/IIOServiceProvider +instanceKlass javax/imageio/spi/RegisterableService +instanceKlass javax/imageio/spi/ServiceRegistry +instanceKlass javax/imageio/ImageIO +instanceKlass org/apache/batik/transcoder/TranscoderOutput +instanceKlass com/mathworks/util/IconUtils +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentListener +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory +instanceKlass com/mathworks/widgets/desk/DTMnemonicsProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsProvider +instanceKlass com/mathworks/widgets/desk/MacScreenMenuProxy +instanceKlass com/mathworks/toolstrip/components/PopupListener +instanceKlass com/mathworks/widgets/desk/RecentFiles$Opener +instanceKlass com/mathworks/widgets/desk/RecentFiles$IconSupplier +instanceKlass com/mathworks/matlab/api/explorer/NewFileTemplate +instanceKlass com/mathworks/util/Predicate +instanceKlass javax/swing/InputMap +instanceKlass com/mathworks/widgets/incSearch/IncSearchInterface +instanceKlass java/awt/dnd/Autoscroll +instanceKlass com/mathworks/mvm/eventmgr/MvmListener +instanceKlass com/mathworks/services/PrefListener +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$DoneListener +instanceKlass com/mathworks/widgets/desk/ToolstripInfoRegistrar +instanceKlass com/mathworks/mlservices/MatlabPauseObserver +instanceKlass com/mathworks/explorer/DesktopExplorerAdapter +instanceKlass com/mathworks/mwswing/ControlKeyOverride +instanceKlass com/mathworks/mwswing/MJTiledPane$GridListener +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction$DoneListener +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$ChangeListener +instanceKlass org/w3c/dom/Node +instanceKlass com/mathworks/widgets/desk/DTLocation +instanceKlass com/mathworks/widgets/desk/DTMenuContributor +instanceKlass com/mathworks/widgets/desk/DTContainer +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction +instanceKlass com/mathworks/widgets/desk/DTCloseReplyListener +instanceKlass com/mathworks/widgets/desk/Desktop$CallableWrapper +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$Listener +instanceKlass com/mathworks/widgets/desk/DTOccupant +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry$Registrant +instanceKlass com/mathworks/widgets/desk/DTAsyncWindowCloser +instanceKlass com/mathworks/widgets/desk/DTWindowCloser +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$ArrangementListener +instanceKlass com/mathworks/mwswing/modality/ModalParticipant +instanceKlass com/mathworks/util/HWndProvider +instanceKlass java/io/Externalizable +instanceKlass com/mathworks/widgets/desk/DTSelectable +instanceKlass com/mathworks/mwswing/SynchronousInvokeUtility$SynchronousEvent +instanceKlass com/mathworks/widgets/desk/Desktop +instanceKlass com/mathworks/widgets/desk/DTWindowActivator +instanceKlass com/mathworks/mlservices/MatlabDesktop +instanceKlass com/mathworks/mlservices/MLExecutionListener +instanceKlass com/mathworks/toolstrip/plaf/TSLookAndFeel +instanceKlass com/mathworks/mwswing/EdtUncaughtExceptionHandler +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsCustomizer +instanceKlass com/jidesoft/plaf/basic/BasicPainter +instanceKlass com/jidesoft/plaf/basic/ThemePainter +instanceKlass com/jidesoft/plaf/vsnet/HeaderCellBorder +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$14 +instanceKlass java/util/TimSort +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$2 +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$1 +instanceKlass sun/java2d/loops/GeneralRenderer +instanceKlass sun/java2d/loops/CustomComponent +instanceKlass sun/java2d/pipe/ValidatePipe +instanceKlass java/awt/BasicStroke +instanceKlass java/awt/Stroke +instanceKlass java/awt/AlphaComposite +instanceKlass sun/java2d/loops/XORComposite +instanceKlass java/awt/Composite +instanceKlass sun/awt/ConstrainableGraphics +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr +instanceKlass sun/java2d/loops/GraphicsPrimitive +instanceKlass sun/java2d/loops/CompositeType +instanceKlass sun/java2d/DefaultDisposerRecord +instanceKlass sun/java2d/loops/RenderLoops +instanceKlass sun/awt/image/BufImgSurfaceData$ICMColorData +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$13 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$12 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$11 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$10 +instanceKlass com/jidesoft/chart/Product +instanceKlass com/jidesoft/shortcut/Product +instanceKlass com/jidesoft/wizard/Product +instanceKlass com/jidesoft/grid/Product +instanceKlass com/jidesoft/document/Product +instanceKlass com/jidesoft/action/Product +instanceKlass com/jidesoft/docking/Product +instanceKlass sun/awt/image/GifFrame +instanceKlass java/awt/Graphics +instanceKlass com/jidesoft/icons/IconsFactory +instanceKlass com/jidesoft/icons/JideIconsFactory +instanceKlass javax/swing/plaf/BorderUIResource +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory$CheckBoxIcon +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$9 +instanceKlass com/jidesoft/plaf/basic/Painter +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$8 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$7 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$6 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$5 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$4 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$3 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$2 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$1 +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty +instanceKlass com/jidesoft/swing/JideSwingUtilities$10 +instanceKlass com/jidesoft/utils/SystemInfo$JavaVersion +instanceKlass com/jidesoft/utils/SystemInfo +instanceKlass com/jidesoft/utils/SecurityUtils +instanceKlass javax/swing/event/ChangeListener +instanceKlass com/jidesoft/dialog/ButtonNames +instanceKlass com/jidesoft/dialog/ButtonListener +instanceKlass javax/swing/event/RowSorterListener +instanceKlass javax/swing/event/CellEditorListener +instanceKlass javax/swing/event/ListSelectionListener +instanceKlass javax/swing/event/TableColumnModelListener +instanceKlass javax/swing/event/TableModelListener +instanceKlass javax/swing/table/TableModel +instanceKlass com/jidesoft/swing/JideSwingUtilities$Handler +instanceKlass com/jidesoft/swing/JideSwingUtilities$GetHandler +instanceKlass com/jidesoft/swing/JideSwingUtilities +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty +instanceKlass com/jidesoft/plaf/vsnet/ConvertListener +instanceKlass com/jidesoft/plaf/basic/BasicLookAndFeelExtension +instanceKlass com/jidesoft/plaf/LookAndFeelExtension +instanceKlass java/util/Vector$Itr +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsInitializer +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$1 +instanceKlass com/jidesoft/plaf/UIDefaultsLookup +instanceKlass com/jidesoft/plaf/LookAndFeelFactory +instanceKlass java/math/MutableBigInteger +instanceKlass com/jidesoft/utils/Q +instanceKlass sun/util/calendar/CalendarUtils +instanceKlass sun/util/calendar/CalendarDate +instanceKlass sun/util/locale/LanguageTag +instanceKlass sun/util/resources/LocaleData$1 +instanceKlass sun/util/resources/LocaleData +instanceKlass sun/util/locale/provider/LocaleResources +instanceKlass sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter +instanceKlass sun/util/locale/provider/SPILocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool +instanceKlass sun/util/locale/provider/CalendarDataUtility +instanceKlass java/util/Calendar$Builder +instanceKlass sun/util/locale/provider/JRELocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleDataMetaInfo +instanceKlass sun/util/locale/provider/AvailableLanguageTags +instanceKlass sun/util/locale/provider/LocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/ResourceBundleBasedAdapter +instanceKlass sun/util/locale/provider/LocaleProviderAdapter +instanceKlass java/util/spi/LocaleServiceProvider +instanceKlass java/util/Locale$1 +instanceKlass java/util/TimeZone$1 +instanceKlass sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule +instanceKlass sun/util/calendar/ZoneInfoFile$1 +instanceKlass sun/util/calendar/ZoneInfoFile +instanceKlass sun/util/calendar/CalendarSystem +instanceKlass java/util/TimeZone +instanceKlass java/util/Calendar +instanceKlass javax/swing/RootPaneContainer +instanceKlass javax/swing/WindowConstants +instanceKlass com/jidesoft/utils/Lm +instanceKlass com/jidesoft/utils/ProductNames +instanceKlass com/mathworks/mwswing/MJStartup$2 +instanceKlass java/awt/event/KeyAdapter +instanceKlass java/awt/event/MouseMotionAdapter +instanceKlass javax/swing/ToolTipManager$stillInsideTimerAction +instanceKlass javax/swing/ToolTipManager$outsideTimerAction +instanceKlass javax/swing/Timer$DoPostEvent +instanceKlass javax/swing/event/EventListenerList +instanceKlass javax/swing/ToolTipManager$insideTimerAction +instanceKlass javax/swing/Timer +instanceKlass java/awt/event/MouseAdapter +instanceKlass java/awt/event/FocusAdapter +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher +instanceKlass com/mathworks/mwswing/MKeyEventDispatcher +instanceKlass com/mathworks/mwswing/BareSwingDetector +instanceKlass com/mathworks/mwswing/MJStartup$1 +instanceKlass com/mathworks/mwswing/MJStartup +instanceKlass com/mathworks/mwswing/MJStartupForDesktop$EscapeKeyHandler +instanceKlass com/mathworks/mwswing/plaf/PlafUtils$SystemColorTracker +instanceKlass sun/font/TrueTypeFont$DirectoryEntry +instanceKlass java/nio/DirectByteBuffer$Deallocator +instanceKlass sun/nio/ch/Util$BufferCache +instanceKlass sun/nio/ch/Util$2 +instanceKlass sun/nio/ch/Util +instanceKlass sun/nio/ch/IOStatus +instanceKlass sun/nio/ch/NativeThread +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel$1 +instanceKlass sun/nio/ch/FileDispatcherImpl$1 +instanceKlass sun/nio/ch/NativeDispatcher +instanceKlass sun/nio/ch/NativeThreadSet +instanceKlass java/net/Inet6Address$Inet6AddressHolder +instanceKlass java/net/InetAddress$2 +instanceKlass sun/net/spi/nameservice/NameService +instanceKlass java/net/Inet6AddressImpl +instanceKlass java/net/InetAddressImpl +instanceKlass java/net/InetAddressImplFactory +instanceKlass java/net/InetAddress$Cache +instanceKlass java/net/InetAddress$InetAddressHolder +instanceKlass java/net/InetAddress$1 +instanceKlass java/net/InetAddress +instanceKlass sun/nio/ch/IOUtil$1 +instanceKlass sun/nio/ch/IOUtil +instanceKlass java/nio/file/attribute/FileAttribute +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel +instanceKlass java/nio/channels/InterruptibleChannel +instanceKlass java/nio/channels/ScatteringByteChannel +instanceKlass java/nio/channels/GatheringByteChannel +instanceKlass java/nio/channels/SeekableByteChannel +instanceKlass java/nio/channels/ByteChannel +instanceKlass java/nio/channels/WritableByteChannel +instanceKlass java/nio/channels/ReadableByteChannel +instanceKlass java/nio/channels/Channel +instanceKlass java/io/RandomAccessFile +instanceKlass sun/font/TrueTypeFont$1 +instanceKlass sun/font/TrueTypeFont$TTDisposerRecord +instanceKlass sun/font/SunFontManager$5 +instanceKlass sun/font/SunFontManager$FamilyDescription +instanceKlass sun/awt/Win32FontManager$2 +instanceKlass sun/font/SunFontManager$3 +instanceKlass sun/font/FontFamily +instanceKlass sun/font/Font2DHandle +instanceKlass sun/font/CompositeFontDescriptor +instanceKlass sun/awt/FontDescriptor +instanceKlass sun/awt/FontConfiguration +instanceKlass sun/font/SunFontManager$FontRegistrationInfo +instanceKlass sun/font/SunFontManager$2 +instanceKlass sun/awt/Win32FontManager$1 +instanceKlass sun/font/GlyphList +instanceKlass sun/font/StrikeCache$1 +instanceKlass sun/font/StrikeCache +instanceKlass sun/font/FontStrike +instanceKlass sun/font/CharToGlyphMapper +instanceKlass java/awt/geom/Path2D +instanceKlass sun/font/StrikeMetrics +instanceKlass sun/font/Font2D +instanceKlass sun/font/FontManagerNativeLibrary$1 +instanceKlass sun/font/FontManagerNativeLibrary +instanceKlass sun/font/SunFontManager$1 +instanceKlass sun/font/SunFontManager$T1Filter +instanceKlass sun/font/SunFontManager$TTFilter +instanceKlass java/io/FilenameFilter +instanceKlass sun/font/SunFontManager +instanceKlass sun/font/FontManagerForSGE +instanceKlass sun/font/FontManager +instanceKlass sun/java2d/FontSupport +instanceKlass sun/font/FontManagerFactory$1 +instanceKlass sun/font/FontManagerFactory +instanceKlass sun/font/FontUtilities$1 +instanceKlass sun/font/FontUtilities +instanceKlass org/apache/commons/lang/Validate +instanceKlass com/mathworks/mwswing/FontSize +instanceKlass com/mathworks/mwswing/FontUtils +instanceKlass com/mathworks/services/DisplayScaleFactorSetting +instanceKlass com/mathworks/util/ResolutionUtils +instanceKlass com/mathworks/mwswing/ScreenSizeChangeHandler +instanceKlass com/mathworks/cfbutils/StatEntryReceiver +instanceKlass com/mathworks/util/NativeJava +instanceKlass javax/swing/Scrollable +instanceKlass com/mathworks/mwswing/ExtendedInputMap +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerListener +instanceKlass javax/swing/Action +instanceKlass com/mathworks/mwswing/MJUtilities +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon +instanceKlass javax/swing/BorderFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1 +instanceKlass java/util/EnumMap$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$CheckBoxMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory +instanceKlass java/awt/ItemSelectable +instanceKlass javax/swing/MenuElement +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon +instanceKlass sun/swing/SwingLazyValue$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory +instanceKlass sun/swing/MenuItemCheckIconFactory +instanceKlass sun/util/ResourceBundleEnumeration +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon +instanceKlass sun/swing/SwingUtilities2$AATextInfo +instanceKlass com/sun/java/swing/plaf/windows/XPStyle$Skin +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty +instanceKlass com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon +instanceKlass javax/swing/UIDefaults$LazyInputMap +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$2 +instanceKlass sun/swing/SwingUtilities2$2 +instanceKlass javax/swing/border/AbstractBorder +instanceKlass javax/swing/UIDefaults$ActiveValue +instanceKlass sun/swing/SwingLazyValue +instanceKlass javax/swing/UIDefaults$LazyValue +instanceKlass javax/swing/plaf/UIResource +instanceKlass java/awt/SystemColor$$Lambda$8 +instanceKlass sun/awt/AWTAccessor$SystemColorAccessor +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor +instanceKlass javax/swing/plaf/ComponentUI +instanceKlass javax/swing/UIManager$2 +instanceKlass sun/awt/PaintEventDispatcher +instanceKlass sun/swing/SwingAccessor +instanceKlass javax/swing/RepaintManager$1 +instanceKlass sun/swing/SwingAccessor$RepaintManagerAccessor +instanceKlass javax/swing/RepaintManager$DisplayChangedHandler +instanceKlass javax/swing/RepaintManager +instanceKlass javax/swing/UIManager$1 +instanceKlass sun/swing/ImageCache +instanceKlass sun/swing/CachedPainter +instanceKlass com/sun/java/swing/plaf/windows/XPStyle +instanceKlass sun/swing/DefaultLookup +instanceKlass javax/swing/UIManager$LAFState +instanceKlass sun/swing/SwingUtilities2$LSBCacheEntry +instanceKlass java/awt/font/FontRenderContext +instanceKlass sun/swing/SwingUtilities2 +instanceKlass sun/swing/StringUIClientPropertyKey +instanceKlass sun/swing/UIClientPropertyKey +instanceKlass javax/swing/LookAndFeel +instanceKlass java/util/IdentityHashMap$IdentityHashMapIterator +instanceKlass java/awt/Toolkit$DesktopPropertyChangeSupport$1 +instanceKlass java/util/ComparableTimSort +instanceKlass java/util/Arrays$LegacyMergeSort +instanceKlass sun/awt/SunHints$Value +instanceKlass java/awt/RenderingHints$Key +instanceKlass sun/awt/SunHints +instanceKlass java/awt/RenderingHints +instanceKlass sun/awt/windows/WDesktopProperties$WinPlaySound +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock +instanceKlass java/util/concurrent/locks/ReadWriteLock +instanceKlass sun/awt/windows/ThemeReader +instanceKlass sun/awt/windows/WDesktopProperties +instanceKlass sun/awt/OSInfo$1 +instanceKlass sun/awt/OSInfo$WindowsVersion +instanceKlass sun/awt/OSInfo +instanceKlass javax/swing/UIManager$LookAndFeelInfo +instanceKlass javax/swing/UIManager +instanceKlass javax/swing/border/Border +instanceKlass com/mathworks/mwswing/plaf/PlafUtils +instanceKlass java/awt/AWTEventMulticaster +instanceKlass java/awt/event/TextListener +instanceKlass java/awt/event/AdjustmentListener +instanceKlass java/awt/event/ItemListener +instanceKlass java/awt/event/ActionListener +instanceKlass java/awt/event/WindowStateListener +instanceKlass java/awt/event/WindowFocusListener +instanceKlass java/awt/event/ContainerListener +instanceKlass java/awt/Toolkit$SelectiveAWTEventListener +instanceKlass java/util/EventListenerProxy +instanceKlass javax/swing/ScrollPaneConstants +instanceKlass com/mathworks/mwswing/MouseWheelRedirector +instanceKlass com/google/common/collect/MapMakerInternalMap$StrongEntry +instanceKlass java/awt/image/BufferedImage$1 +instanceKlass java/awt/image/WritableRenderedImage +instanceKlass java/awt/image/RenderedImage +instanceKlass java/awt/image/SampleModel +instanceKlass java/awt/image/DataBuffer$1 +instanceKlass sun/awt/image/SunWritableRaster$DataStealer +instanceKlass java/awt/image/DataBuffer +instanceKlass java/awt/image/Raster +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/ImageWatched$WeakLink$$Lambda$7 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/PNGImageDecoder$Chromaticities +instanceKlass sun/awt/image/ImageDecoder +instanceKlass sun/awt/image/ImageFetcher$1 +instanceKlass sun/awt/image/FetcherInfo +instanceKlass sun/awt/image/ImageConsumerQueue +instanceKlass sun/awt/image/ImageWatched$Link +instanceKlass sun/awt/image/ImageWatched +instanceKlass java/awt/image/ImageConsumer +instanceKlass sun/awt/image/MultiResolutionImage +instanceKlass java/awt/MediaEntry +instanceKlass sun/awt/image/NativeLibLoader$1 +instanceKlass sun/awt/image/NativeLibLoader +instanceKlass sun/awt/image/InputStreamImageSource +instanceKlass sun/awt/image/ImageFetchable +instanceKlass java/awt/image/ImageProducer +instanceKlass java/awt/MediaTracker +instanceKlass javax/accessibility/AccessibleContext +instanceKlass sun/awt/EventQueueItem +instanceKlass java/awt/event/InputMethodListener +instanceKlass java/awt/event/MouseWheelListener +instanceKlass java/awt/event/MouseMotionListener +instanceKlass java/awt/event/MouseListener +instanceKlass java/awt/event/KeyListener +instanceKlass java/awt/event/HierarchyBoundsListener +instanceKlass java/awt/event/HierarchyListener +instanceKlass java/awt/event/FocusListener +instanceKlass java/awt/event/ComponentListener +instanceKlass java/awt/dnd/DropTarget +instanceKlass java/awt/dnd/DropTargetListener +instanceKlass java/awt/image/BufferStrategy +instanceKlass javax/swing/ImageIcon$2 +instanceKlass javax/swing/ImageIcon$1 +instanceKlass javax/swing/ImageIcon +instanceKlass com/mathworks/util/StringUtils +instanceKlass java/util/concurrent/atomic/AtomicReferenceArray +instanceKlass com/google/common/collect/MapMaker$RemovalListener +instanceKlass com/google/common/base/Ticker +instanceKlass com/google/common/base/Predicate +instanceKlass com/google/common/base/Equivalence +instanceKlass com/google/common/base/Objects +instanceKlass com/google/common/collect/MapMakerInternalMap$1 +instanceKlass com/google/common/collect/MapMakerInternalMap$ReferenceEntry +instanceKlass com/google/common/base/Preconditions +instanceKlass com/google/common/collect/MapMakerInternalMap$ValueReference +instanceKlass com/google/common/collect/GenericMapMaker +instanceKlass com/mathworks/util/logger/impl/LegacyLoggerFactory +instanceKlass com/mathworks/util/logger/LoggerFactory +instanceKlass com/mathworks/util/logger/Log +instanceKlass javax/swing/Icon +instanceKlass com/mathworks/common/icons/IconEnumerationUtils +instanceKlass com/mathworks/common/icons/IconContainer +instanceKlass sun/awt/KeyboardFocusManagerPeerImpl +instanceKlass java/awt/peer/KeyboardFocusManagerPeer +instanceKlass java/awt/FocusTraversalPolicy +instanceKlass java/awt/DefaultKeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor +instanceKlass java/awt/AWTKeyStroke$1 +instanceKlass java/awt/AWTKeyStroke +instanceKlass java/awt/KeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$KeyboardFocusManagerAccessor +instanceKlass java/awt/KeyboardFocusManager +instanceKlass java/awt/KeyEventPostProcessor +instanceKlass java/awt/KeyEventDispatcher +instanceKlass java/awt/Window$WindowDisposerRecord +instanceKlass sun/awt/windows/WToolkit$$Lambda$6 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass sun/awt/windows/WToolkit$$Lambda$5 +instanceKlass sun/awt/windows/WToolkit$$Lambda$4 +instanceKlass sun/awt/windows/WToolkit$$Lambda$3 +instanceKlass sun/awt/AWTAutoShutdown +instanceKlass sun/misc/ThreadGroupUtils +instanceKlass sun/java2d/Disposer$$Lambda$2 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/java2d/Disposer$1 +instanceKlass sun/java2d/Disposer +instanceKlass sun/awt/windows/WToolkit$ToolkitDisposer +instanceKlass sun/java2d/DisposerRecord +instanceKlass sun/misc/PerformanceLogger$TimeData +instanceKlass sun/misc/PerformanceLogger +instanceKlass sun/awt/SunToolkit$ModalityListenerList +instanceKlass sun/awt/ModalityListener +instanceKlass java/beans/ChangeListenerMap +instanceKlass java/beans/PropertyChangeSupport +instanceKlass java/awt/Toolkit$2 +instanceKlass java/awt/BorderLayout +instanceKlass java/awt/LayoutManager2 +instanceKlass java/awt/GraphicsConfiguration +instanceKlass sun/awt/image/SurfaceManager$ProxiedGraphicsConfig +instanceKlass java/awt/GraphicsDevice +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryConverter +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIConverter +instanceKlass sun/misc/FloatingDecimal +instanceKlass sun/java2d/SunGraphicsEnvironment$1 +instanceKlass sun/awt/SunDisplayChanger +instanceKlass sun/java2d/SurfaceManagerFactory +instanceKlass sun/java2d/windows/WindowsFlags$1 +instanceKlass sun/java2d/windows/WindowsFlags +instanceKlass sun/awt/windows/WToolkit$2 +instanceKlass sun/awt/image/SurfaceManager +instanceKlass sun/awt/image/SurfaceManager$ImageAccessor +instanceKlass java/awt/ImageCapabilities +instanceKlass java/awt/Image +instanceKlass sun/java2d/DestSurfaceProvider +instanceKlass sun/java2d/loops/RenderCache$Entry +instanceKlass sun/java2d/loops/RenderCache +instanceKlass sun/java2d/pipe/DrawImage +instanceKlass sun/java2d/pipe/GeneralCompositePipe +instanceKlass sun/java2d/pipe/SpanShapeRenderer +instanceKlass sun/java2d/pipe/AlphaPaintPipe +instanceKlass sun/java2d/pipe/AAShapePipe +instanceKlass sun/java2d/pipe/RegionIterator +instanceKlass sun/java2d/pipe/Region +instanceKlass sun/java2d/pipe/SpanClipRenderer +instanceKlass sun/java2d/pipe/PixelToShapeConverter +instanceKlass sun/java2d/pipe/AlphaColorPipe +instanceKlass sun/java2d/pipe/CompositePipe +instanceKlass sun/java2d/pipe/GlyphListPipe +instanceKlass sun/java2d/pipe/OutlineTextRenderer +instanceKlass sun/java2d/pipe/RenderingEngine$1 +instanceKlass sun/java2d/pipe/RenderingEngine +instanceKlass sun/java2d/pipe/LoopPipe +instanceKlass sun/java2d/pipe/LoopBasedPipe +instanceKlass sun/java2d/pipe/ParallelogramPipe +instanceKlass sun/java2d/pipe/NullPipe +instanceKlass sun/java2d/pipe/DrawImagePipe +instanceKlass sun/java2d/pipe/TextPipe +instanceKlass sun/java2d/pipe/ShapeDrawPipe +instanceKlass sun/java2d/pipe/PixelFillPipe +instanceKlass sun/java2d/pipe/PixelDrawPipe +instanceKlass sun/java2d/StateTrackableDelegate$2 +instanceKlass sun/java2d/StateTrackableDelegate +instanceKlass java/awt/color/ICC_Profile$1 +instanceKlass sun/java2d/cmm/ProfileActivator +instanceKlass sun/java2d/cmm/ProfileDeferralMgr +instanceKlass java/awt/color/ICC_Profile +instanceKlass java/awt/color/ColorSpace +instanceKlass java/awt/image/ColorModel$1 +instanceKlass java/awt/image/ColorModel +instanceKlass sun/awt/image/PixelConverter +instanceKlass sun/java2d/loops/SurfaceType +instanceKlass sun/java2d/SurfaceData +instanceKlass sun/java2d/Surface +instanceKlass sun/java2d/StateTrackable +instanceKlass sun/java2d/DisposerTarget +instanceKlass sun/awt/windows/WToolkit$1 +instanceKlass sun/awt/DisplayChangedListener +instanceKlass java/awt/Cursor$1 +instanceKlass sun/awt/AWTAccessor$CursorAccessor +instanceKlass java/awt/geom/Point2D +instanceKlass java/awt/Cursor +instanceKlass java/awt/ComponentOrientation +instanceKlass java/awt/Frame$1 +instanceKlass sun/awt/AWTAccessor$FrameAccessor +instanceKlass java/awt/Window$1 +instanceKlass sun/awt/AWTAccessor$WindowAccessor +instanceKlass java/awt/event/WindowListener +instanceKlass sun/awt/PostEventQueue +instanceKlass sun/awt/MostRecentKeyValue +instanceKlass java/awt/Queue +instanceKlass java/awt/EventQueue$2 +instanceKlass sun/awt/AWTAccessor$EventQueueAccessor +instanceKlass java/awt/EventQueue$1 +instanceKlass java/awt/EventQueue +instanceKlass sun/awt/AppContext$1 +instanceKlass sun/awt/KeyboardFocusManagerPeerProvider +instanceKlass sun/awt/InputMethodSupport +instanceKlass sun/awt/ComponentFactory +instanceKlass sun/awt/WindowClosingListener +instanceKlass sun/awt/WindowClosingSupport +instanceKlass sun/awt/AppContext$2 +instanceKlass sun/awt/AppContext$3 +instanceKlass sun/awt/AppContext$6 +instanceKlass sun/misc/JavaAWTAccess +instanceKlass sun/awt/AppContext$GetAppContextLock +instanceKlass sun/awt/AppContext +instanceKlass javax/swing/SwingUtilities +instanceKlass javax/swing/SwingConstants +instanceKlass javax/swing/JComponent$1 +instanceKlass java/awt/Container$1 +instanceKlass sun/awt/AWTAccessor$ContainerAccessor +instanceKlass java/awt/geom/Dimension2D +instanceKlass java/awt/LightweightDispatcher +instanceKlass java/awt/LayoutManager +instanceKlass java/awt/Component$DummyRequestFocusController +instanceKlass sun/awt/RequestFocusController +instanceKlass java/awt/Component$1 +instanceKlass sun/awt/AWTAccessor$ComponentAccessor +instanceKlass java/text/AttributedCharacterIterator$Attribute +instanceKlass sun/font/AttributeValues +instanceKlass java/awt/geom/AffineTransform +instanceKlass sun/font/FontAccess +instanceKlass sun/awt/windows/WObjectPeer +instanceKlass java/awt/dnd/peer/DropTargetPeer +instanceKlass java/awt/peer/ComponentPeer +instanceKlass java/awt/event/InputEvent$1 +instanceKlass sun/awt/AWTAccessor$InputEventAccessor +instanceKlass java/awt/event/NativeLibLoader$1 +instanceKlass java/awt/event/NativeLibLoader +instanceKlass java/awt/AWTEvent$1 +instanceKlass sun/awt/AWTAccessor$AWTEventAccessor +instanceKlass java/util/EventObject +instanceKlass java/awt/Insets +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InnerClassLambdaMetafactory$1 +instanceKlass java/awt/GraphicsEnvironment$$Lambda$1 +instanceKlass java/lang/invoke/InfoFromMemberName +instanceKlass java/lang/invoke/MethodHandleInfo +instanceKlass sun/security/util/SecurityConstants +instanceKlass java/security/AccessController$1 +instanceKlass java/lang/invoke/AbstractValidatingLambdaMetafactory +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass jdk/internal/org/objectweb/asm/FieldVisitor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory$1 +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData$1 +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaFormBuffer +instanceKlass java/lang/invoke/LambdaFormEditor +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/MethodHandleImpl$Lazy +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/util/SubList$1 +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$CpPatch +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/invoke/empty/Empty +instanceKlass sun/invoke/util/VerifyType +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$2 +instanceKlass jdk/internal/org/objectweb/asm/AnnotationVisitor +instanceKlass jdk/internal/org/objectweb/asm/Frame +instanceKlass jdk/internal/org/objectweb/asm/Label +instanceKlass jdk/internal/org/objectweb/asm/Type +instanceKlass jdk/internal/org/objectweb/asm/MethodVisitor +instanceKlass jdk/internal/org/objectweb/asm/Item +instanceKlass jdk/internal/org/objectweb/asm/ByteVector +instanceKlass jdk/internal/org/objectweb/asm/ClassVisitor +instanceKlass java/lang/invoke/InvokerBytecodeGenerator +instanceKlass java/util/AbstractList$Itr +instanceKlass java/util/Collections$UnmodifiableCollection$1 +instanceKlass java/lang/invoke/DirectMethodHandle$Lazy +instanceKlass sun/invoke/util/BytecodeDescriptor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData +instanceKlass java/lang/invoke/LambdaForm$NamedFunction +instanceKlass java/lang/invoke/LambdaForm$Name +instanceKlass sun/invoke/util/ValueConversions +instanceKlass sun/invoke/util/VerifyAccess +instanceKlass java/lang/Character$CharacterCache +instanceKlass java/lang/Short$ShortCache +instanceKlass java/lang/Byte$ByteCache +instanceKlass sun/invoke/util/Wrapper$Format +instanceKlass java/lang/invoke/MethodHandles +instanceKlass java/lang/invoke/Invokers +instanceKlass java/lang/invoke/MethodTypeForm +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet +instanceKlass java/lang/invoke/MethodHandles$Lookup +instanceKlass java/lang/invoke/LambdaMetafactory +instanceKlass java/awt/GraphicsEnvironment +instanceKlass java/awt/Toolkit$1 +instanceKlass java/awt/Toolkit$3 +instanceKlass java/util/ResourceBundle$RBClassLoader$1 +instanceKlass java/awt/Toolkit$5 +instanceKlass sun/awt/AWTAccessor +instanceKlass java/awt/Toolkit$4 +instanceKlass sun/awt/AWTAccessor$ToolkitAccessor +instanceKlass java/awt/Toolkit +instanceKlass java/awt/Component$AWTTreeLock +instanceKlass java/util/logging/Logger$1 +instanceKlass java/awt/Component +instanceKlass java/awt/MenuContainer +instanceKlass java/awt/image/ImageObserver +instanceKlass javax/swing/TransferHandler$HasGetTransferHandler +instanceKlass javax/accessibility/Accessible +instanceKlass java/awt/event/AWTEventListener +instanceKlass com/mathworks/mwswing/MJStartupForDesktop +instanceKlass com/mathworks/services/AntialiasedFontPrefs +instanceKlass org/apache/log4j/helpers/AppenderAttachableImpl +instanceKlass org/apache/log4j/CategoryKey +instanceKlass org/apache/log4j/helpers/LogLog +instanceKlass org/apache/log4j/helpers/Loader +instanceKlass org/apache/log4j/spi/Configurator +instanceKlass org/apache/log4j/helpers/OptionConverter +instanceKlass org/apache/log4j/spi/DefaultRepositorySelector +instanceKlass org/apache/log4j/DefaultCategoryFactory +instanceKlass org/apache/log4j/or/DefaultRenderer +instanceKlass org/apache/log4j/or/ObjectRenderer +instanceKlass org/apache/log4j/or/RendererMap +instanceKlass org/apache/log4j/spi/LoggerFactory +instanceKlass org/apache/log4j/Hierarchy +instanceKlass org/apache/log4j/spi/RendererSupport +instanceKlass org/apache/log4j/spi/RepositorySelector +instanceKlass org/apache/log4j/spi/LoggerRepository +instanceKlass org/apache/log4j/LogManager +instanceKlass org/apache/log4j/Category +instanceKlass org/apache/log4j/spi/AppenderAttachable +instanceKlass org/apache/log4j/helpers/OnlyOnceErrorHandler +instanceKlass org/apache/log4j/spi/ErrorHandler +instanceKlass org/apache/log4j/Priority +instanceKlass org/apache/log4j/AppenderSkeleton +instanceKlass org/apache/log4j/spi/OptionHandler +instanceKlass org/apache/log4j/Appender +instanceKlass com/mathworks/services/Log4JConfiguration +instanceKlass com/mathworks/html/HtmlDataListener +instanceKlass com/mathworks/html/SystemBrowserLauncher +instanceKlass com/mathworks/mlwidgets/html/MatlabSystemBrowserStrategy +instanceKlass java/net/SocketAddress +instanceKlass com/mathworks/net/transport/AbstractTransportClientProperties +instanceKlass java/util/logging/LogManager$5 +instanceKlass sun/reflect/UnsafeFieldAccessorFactory +instanceKlass java/util/logging/LoggingProxyImpl +instanceKlass sun/util/logging/LoggingProxy +instanceKlass sun/util/logging/LoggingSupport$1 +instanceKlass sun/util/logging/LoggingSupport +instanceKlass sun/util/logging/PlatformLogger$LoggerProxy +instanceKlass sun/util/logging/PlatformLogger$1 +instanceKlass sun/util/logging/PlatformLogger +instanceKlass java/util/logging/LogManager$LoggerContext$1 +instanceKlass java/util/logging/LogManager$3 +instanceKlass java/util/logging/LogManager$2 +instanceKlass java/lang/Shutdown$Lock +instanceKlass java/lang/Shutdown +instanceKlass java/lang/ApplicationShutdownHooks$1 +instanceKlass java/lang/ApplicationShutdownHooks +instanceKlass java/util/logging/LogManager$LogNode +instanceKlass java/util/logging/LogManager$LoggerContext +instanceKlass java/util/logging/LogManager$1 +instanceKlass java/util/logging/LogManager +instanceKlass java/util/concurrent/CopyOnWriteArrayList +instanceKlass java/util/logging/Logger$LoggerBundle +instanceKlass java/util/logging/Level$KnownLevel +instanceKlass java/util/logging/Level +instanceKlass java/util/logging/Handler +instanceKlass java/util/logging/Logger +instanceKlass java/net/Authenticator +instanceKlass com/mathworks/net/transport/MWTransportClientProperties +instanceKlass com/mathworks/net/transport/MWTransportClientPropertiesFactory +instanceKlass com/mathworks/html/SystemBrowserStrategy +instanceKlass com/mathworks/mlwidgets/html/HTMLPrefs +instanceKlass com/mathworks/services/Prefs$1 +instanceKlass com/mathworks/services/DefaultFontPrefs +instanceKlass com/mathworks/services/settings/SettingValidator +instanceKlass com/mathworks/services/RGBInteger +instanceKlass java/util/RegularEnumSet$EnumSetIterator +instanceKlass java/lang/Class$4 +instanceKlass com/mathworks/services/settings/SettingInfo +instanceKlass com/mathworks/services/settings/SettingAdapter +instanceKlass java/util/TreeMap$Entry +instanceKlass java/lang/ProcessEnvironment$CheckedEntry +instanceKlass java/lang/ProcessEnvironment$CheckedEntrySet$1 +instanceKlass java/util/NavigableMap +instanceKlass java/util/SortedMap +instanceKlass java/util/Collections$UnmodifiableMap +instanceKlass java/lang/ProcessEnvironment$EntryComparator +instanceKlass java/lang/ProcessEnvironment$NameComparator +instanceKlass sun/nio/ch/Interruptible +instanceKlass java/util/concurrent/locks/LockSupport +instanceKlass java/util/concurrent/atomic/AtomicReference +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference$1 +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference +instanceKlass com/mathworks/mvm/eventmgr/MvmDynamicEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/HomeEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/CLCEvent +instanceKlass com/mathworks/mvm/eventmgr/SinkTextEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/DebugLoopEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/IqmInputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/InputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$MvmNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$FactoryNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$SessionNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$NativeMethods +instanceKlass com/mathworks/mvm/eventmgr/InsecureReflection +instanceKlass com/mathworks/mvm/exec/FutureResult +instanceKlass com/mathworks/mvm/exec/MatlabIIP +instanceKlass com/mathworks/mvm/exec/NativeFutureResult +instanceKlass com/mathworks/mvm/exec/MatlabRequest +instanceKlass com/mathworks/mvm/MvmImpl +instanceKlass com/mathworks/mvm/MVM +instanceKlass com/mathworks/mvm/eventmgr/EventMgr +instanceKlass com/mathworks/mvm/MvmFactory +instanceKlass com/mathworks/mvm/context/ThreadContext +instanceKlass com/mathworks/mvm/context/MvmContext +instanceKlass com/mathworks/services/settings/SettingTestEnvironment +instanceKlass com/mathworks/services/settings/SettingTransaction +instanceKlass com/mathworks/services/settings/SettingLevel$Helper +instanceKlass java/awt/geom/RectangularShape +instanceKlass java/awt/Shape +instanceKlass java/awt/Color +instanceKlass java/awt/Paint +instanceKlass java/awt/Transparency +instanceKlass java/awt/Font +instanceKlass com/mathworks/services/settings/SettingConverter +instanceKlass com/mathworks/services/settings/Setting +instanceKlass javax/swing/text/EditorKit +instanceKlass java/io/FileFilter +instanceKlass com/mathworks/cfbutils/FileUtils +instanceKlass com/mathworks/util/FileUtils +instanceKlass com/mathworks/services/Prefs$pairSet +instanceKlass com/mathworks/util/Log +instanceKlass com/mathworks/util/CharBuffer +instanceKlass com/mathworks/services/Prefs$TwoWayMap +instanceKlass com/mathworks/services/lmgr/events/HeartbeatShutdown +instanceKlass com/mathworks/services/lmgr/events/LicServerReconnectAttempt +instanceKlass sun/net/www/protocol/jar/JarFileFactory +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController +instanceKlass java/net/URLClassLoader$2 +instanceKlass java/util/ResourceBundle$Control$1 +instanceKlass java/util/ResourceBundle$CacheKeyReference +instanceKlass java/util/ResourceBundle$CacheKey +instanceKlass java/util/ResourceBundle$Control +instanceKlass java/net/URLClassLoader$3$1 +instanceKlass sun/misc/CompoundEnumeration +instanceKlass java/net/URLClassLoader$3 +instanceKlass sun/misc/URLClassPath$1 +instanceKlass java/lang/ClassLoader$2 +instanceKlass sun/misc/URLClassPath$2 +instanceKlass java/util/Collections$EmptyIterator +instanceKlass sun/misc/Launcher$BootClassPathHolder$1 +instanceKlass java/util/zip/ZipUtils +instanceKlass sun/misc/Launcher$BootClassPathHolder +instanceKlass java/util/ServiceLoader$1 +instanceKlass java/util/zip/CRC32 +instanceKlass java/util/zip/Checksum +instanceKlass java/util/ServiceLoader$LazyIterator +instanceKlass java/util/ServiceLoader +instanceKlass java/util/spi/ResourceBundleControlProvider +instanceKlass java/util/ResourceBundle +instanceKlass com/mathworks/services/Prefs$PrefString +instanceKlass com/mathworks/services/settings/SettingListener +instanceKlass org/apache/commons/io/FilenameUtils +instanceKlass com/mathworks/services/Prefs +instanceKlass com/mathworks/util/ManifestAttributeProviderImpl +instanceKlass com/mathworks/util/LanguageUtils +instanceKlass com/mathworks/util/ManifestAttributeProvider +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$LazyHolder +instanceKlass com/mathworks/util/SystemPropertiesInitializer +instanceKlass java/util/concurrent/Executors$RunnableAdapter +instanceKlass java/util/concurrent/FutureTask$WaitNode +instanceKlass java/util/concurrent/Callable +instanceKlass java/util/concurrent/FutureTask +instanceKlass java/util/concurrent/RunnableFuture +instanceKlass java/util/concurrent/Future +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$1 +instanceKlass java/util/concurrent/LinkedBlockingQueue$Node +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +instanceKlass java/util/concurrent/locks/Condition +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$Node +instanceKlass java/util/concurrent/locks/AbstractOwnableSynchronizer +instanceKlass java/util/concurrent/BlockingQueue +instanceKlass java/util/concurrent/ThreadPoolExecutor$AbortPolicy +instanceKlass java/util/concurrent/RejectedExecutionHandler +instanceKlass java/util/concurrent/AbstractExecutorService +instanceKlass java/util/concurrent/ExecutorService +instanceKlass java/util/concurrent/Executor +instanceKlass java/util/concurrent/Executors +instanceKlass com/mathworks/util/DaemonThreadFactory +instanceKlass java/util/concurrent/ThreadFactory +instanceKlass com/mathworks/util/ThreadUtils +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory +instanceKlass com/mathworks/util/PostVMInit$StartupClass +instanceKlass com/mathworks/util/PostVMInit +instanceKlass java/lang/reflect/WeakCache$Value +instanceKlass sun/misc/ProxyGenerator$ExceptionTableEntry +instanceKlass sun/misc/ProxyGenerator$PrimitiveTypeInfo +instanceKlass java/lang/Void +instanceKlass sun/misc/ProxyGenerator$FieldInfo +instanceKlass java/util/ArrayList$Itr +instanceKlass java/io/DataOutput +instanceKlass sun/misc/ProxyGenerator$ConstantPool$Entry +instanceKlass sun/misc/ProxyGenerator$MethodInfo +instanceKlass java/util/HashMap$HashIterator +instanceKlass sun/misc/ProxyGenerator$ProxyMethod +instanceKlass sun/misc/ProxyGenerator$ConstantPool +instanceKlass java/lang/Class$MethodArray +instanceKlass sun/security/action/GetBooleanAction +instanceKlass sun/misc/ProxyGenerator +instanceKlass java/lang/reflect/WeakCache$Factory +instanceKlass java/util/function/Supplier +instanceKlass java/lang/reflect/Proxy$ProxyClassFactory +instanceKlass java/lang/reflect/Proxy$KeyFactory +instanceKlass java/util/function/BiFunction +instanceKlass java/lang/reflect/WeakCache +instanceKlass java/lang/reflect/Proxy +instanceKlass com/mathworks/util/event/EventListenerList$1 +instanceKlass com/mathworks/util/Disposable +instanceKlass java/lang/reflect/InvocationHandler +instanceKlass com/mathworks/util/event/EventListenerList +instanceKlass java/util/Collections$SynchronizedMap +instanceKlass com/mathworks/util/event/GlobalEventManager +instanceKlass com/mathworks/jmi/Matlab$4 +instanceKlass java/util/Timer$1 +instanceKlass java/util/TaskQueue +instanceKlass java/util/Timer +instanceKlass com/mathworks/jmi/bean/IMatlabObjectListener +instanceKlass com/mathworks/jmi/bean/UDDObject +instanceKlass com/mathworks/jmi/bean/DynamicProperties +instanceKlass com/mathworks/jmi/bean/MTObject +instanceKlass com/mathworks/services/Browseable +instanceKlass com/mathworks/jmi/bean/TreeObject +instanceKlass com/mathworks/jmi/types/MLArrayRef +instanceKlass com/mathworks/jmi/idlebusy/MatlabIdleBusyStatusEvent +instanceKlass com/mathworks/mvm/eventmgr/FirableMvmEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmTypedEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmEvent +instanceKlass java/lang/ClassLoaderHelper +instanceKlass com/mathworks/util/NativeJavaSwitch +instanceKlass com/mathworks/util/ClassLoaderBridge +instanceKlass com/mathworks/jmi/Matlab$2 +instanceKlass java/beans/PropertyChangeListener +instanceKlass com/mathworks/util/PlatformInfo +instanceKlass com/mathworks/util/FactoryUtilAdapter +instanceKlass com/mathworks/jmi/Matlab$MatlabQuitListener +instanceKlass java/lang/Long$LongCache +instanceKlass com/mathworks/jmi/MatlabLooper +instanceKlass com/mathworks/jmi/CompletionObserver +instanceKlass com/mathworks/util/ClassLoaderSupplier +instanceKlass com/mathworks/util/FactoryUtilSupplier +instanceKlass com/mathworks/jmi/MatlabListener +instanceKlass java/util/TimerTask +instanceKlass com/mathworks/util/event/GlobalEventListener +instanceKlass java/util/EventListener +instanceKlass com/mathworks/jmi/Matlab +instanceKlass com/mathworks/mvm/helpers/MatlabPrintStreamManager +instanceKlass com/mathworks/jmi/MatlabLanguage +instanceKlass com/mathworks/jmi/NativeMatlab$MCRIDGetter +instanceKlass com/mathworks/jmi/NativeMatlab +instanceKlass com/mathworks/util/FactoryUtils +instanceKlass java/io/ObjectStreamConstants +instanceKlass java/io/ObjectInput +instanceKlass java/io/DataInput +instanceKlass com/mathworks/jmi/OpaqueJavaInterface +instanceKlass java/io/FilePermission$1 +instanceKlass sun/net/www/MessageHeader +instanceKlass java/net/URLConnection +instanceKlass java/security/PermissionCollection +instanceKlass sun/nio/ByteBuffered +instanceKlass sun/security/util/ManifestEntryVerifier +instanceKlass sun/security/util/DisabledAlgorithmConstraints$1 +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraint +instanceKlass java/util/regex/Matcher +instanceKlass java/util/regex/MatchResult +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraints +instanceKlass java/util/ArrayList$SubList$1 +instanceKlass java/util/ListIterator +instanceKlass java/util/Properties$LineReader +instanceKlass java/security/Security$1 +instanceKlass java/security/Security +instanceKlass sun/security/util/AbstractAlgorithmConstraints$1 +instanceKlass java/util/regex/ASCII +instanceKlass java/util/regex/Pattern$TreeInfo +instanceKlass java/util/regex/Pattern$Node +instanceKlass java/util/regex/Pattern +instanceKlass sun/security/util/AlgorithmDecomposer +instanceKlass sun/security/util/AbstractAlgorithmConstraints +instanceKlass java/security/AlgorithmConstraints +instanceKlass sun/security/util/SignatureFileVerifier +instanceKlass java/lang/Package +instanceKlass java/util/jar/JarVerifier$3 +instanceKlass java/security/CodeSigner +instanceKlass java/util/jar/JarVerifier +instanceKlass sun/misc/ASCIICaseInsensitiveComparator +instanceKlass java/util/jar/Attributes$Name +instanceKlass java/lang/StringCoding$StringDecoder +instanceKlass java/util/jar/Attributes +instanceKlass sun/misc/Resource +instanceKlass sun/misc/IOUtils +instanceKlass java/util/zip/ZStreamRef +instanceKlass java/util/zip/Inflater +instanceKlass sun/misc/ExtensionDependency +instanceKlass java/util/LinkedList$Node +instanceKlass java/util/zip/ZipEntry +instanceKlass sun/misc/JarIndex +instanceKlass sun/nio/ch/DirectBuffer +instanceKlass sun/misc/PerfCounter$CoreCounters +instanceKlass sun/misc/Perf +instanceKlass sun/misc/Perf$GetPerfAction +instanceKlass sun/misc/PerfCounter +instanceKlass java/util/zip/ZipCoder +instanceKlass java/util/Deque +instanceKlass java/util/Queue +instanceKlass java/nio/charset/StandardCharsets +instanceKlass java/util/jar/JavaUtilJarAccessImpl +instanceKlass sun/misc/JavaUtilJarAccess +instanceKlass sun/misc/FileURLMapper +instanceKlass sun/misc/URLClassPath$JarLoader$1 +instanceKlass sun/nio/cs/ThreadLocalCoders$Cache +instanceKlass sun/nio/cs/ThreadLocalCoders +instanceKlass java/util/zip/ZipFile$1 +instanceKlass sun/misc/JavaUtilZipFileAccess +instanceKlass java/util/zip/ZipFile +instanceKlass java/util/zip/ZipConstants +instanceKlass sun/misc/URLClassPath$Loader +instanceKlass sun/misc/URLClassPath$3 +instanceKlass sun/net/util/URLUtil +instanceKlass java/net/URLClassLoader$1 +instanceKlass java/io/FileOutputStream$1 +instanceKlass java/lang/StringCoding$StringEncoder +instanceKlass java/lang/ThreadLocal$ThreadLocalMap +instanceKlass java/lang/StringCoding +instanceKlass sun/usagetracker/UsageTrackerClient$3 +instanceKlass jdk/internal/util/EnvUtils +instanceKlass sun/usagetracker/UsageTrackerClient$2 +instanceKlass sun/usagetracker/UsageTrackerClient$4 +instanceKlass sun/usagetracker/UsageTrackerClient$1 +instanceKlass java/util/concurrent/atomic/AtomicBoolean +instanceKlass sun/usagetracker/UsageTrackerClient +instanceKlass sun/misc/PostVMInitHook +instanceKlass java/lang/invoke/MethodHandleStatics$1 +instanceKlass java/lang/invoke/MethodHandleStatics +instanceKlass java/lang/invoke/MemberName$Factory +instanceKlass java/lang/ClassValue$Version +instanceKlass java/lang/ClassValue$Identity +instanceKlass java/lang/ClassValue +instanceKlass java/lang/invoke/MethodHandleImpl$3 +instanceKlass java/lang/invoke/MethodHandleImpl$2 +instanceKlass java/util/function/Function +instanceKlass java/lang/invoke/MethodHandleImpl$1 +instanceKlass java/lang/Integer$IntegerCache +instanceKlass java/lang/invoke/MethodHandleImpl +instanceKlass java/lang/SystemClassLoaderAction +instanceKlass java/util/LinkedHashMap$LinkedHashIterator +instanceKlass sun/misc/Launcher$AppClassLoader$1 +instanceKlass sun/misc/URLClassPath +instanceKlass java/security/Principal +instanceKlass java/security/ProtectionDomain$Key +instanceKlass java/security/ProtectionDomain$2 +instanceKlass sun/misc/JavaSecurityProtectionDomainAccess +instanceKlass java/security/ProtectionDomain$JavaSecurityAccessImpl +instanceKlass sun/misc/JavaSecurityAccess +instanceKlass java/net/URLStreamHandler +instanceKlass java/net/Parts +instanceKlass java/util/BitSet +instanceKlass sun/net/www/ParseUtil +instanceKlass java/io/FileInputStream$1 +instanceKlass sun/util/locale/LocaleUtils +instanceKlass java/util/Locale$LocaleKey +instanceKlass sun/util/locale/BaseLocale$Key +instanceKlass sun/util/locale/BaseLocale +instanceKlass java/util/concurrent/ConcurrentHashMap$CollectionView +instanceKlass java/util/concurrent/ConcurrentHashMap$CounterCell +instanceKlass java/util/concurrent/ConcurrentHashMap$Node +instanceKlass java/util/concurrent/locks/ReentrantLock +instanceKlass java/util/concurrent/locks/Lock +instanceKlass java/util/concurrent/ConcurrentMap +instanceKlass sun/util/locale/LocaleObjectCache +instanceKlass java/util/Locale +instanceKlass java/lang/reflect/Array +instanceKlass java/nio/charset/CoderResult$Cache +instanceKlass java/nio/charset/CoderResult +instanceKlass java/nio/charset/CharsetDecoder +instanceKlass sun/nio/cs/ArrayDecoder +instanceKlass java/io/Reader +instanceKlass java/lang/Readable +instanceKlass sun/misc/MetaIndex +instanceKlass sun/misc/Launcher$ExtClassLoader$1 +instanceKlass java/util/StringTokenizer +instanceKlass java/net/URLClassLoader$7 +instanceKlass sun/misc/JavaNetAccess +instanceKlass java/lang/ClassLoader$ParallelLoaders +instanceKlass sun/security/util/Debug +instanceKlass sun/misc/Launcher$Factory +instanceKlass java/net/URLStreamHandlerFactory +instanceKlass java/lang/Compiler$1 +instanceKlass java/lang/Compiler +instanceKlass java/lang/System$2 +instanceKlass sun/misc/JavaLangAccess +instanceKlass sun/io/Win32ErrorMode +instanceKlass sun/misc/OSEnvironment +instanceKlass sun/misc/NativeSignalHandler +instanceKlass sun/misc/Signal +instanceKlass java/lang/Terminator$1 +instanceKlass sun/misc/SignalHandler +instanceKlass java/lang/Terminator +instanceKlass java/lang/ClassLoader$NativeLibrary +instanceKlass java/io/ExpiringCache$Entry +instanceKlass java/lang/ClassLoader$3 +instanceKlass java/nio/file/Path +instanceKlass java/nio/file/Watchable +instanceKlass java/lang/Enum +instanceKlass java/io/ExpiringCache +instanceKlass java/io/FileSystem +instanceKlass java/io/DefaultFileSystem +instanceKlass java/lang/Runtime +instanceKlass java/nio/Bits$1 +instanceKlass sun/misc/JavaNioAccess +instanceKlass java/nio/ByteOrder +instanceKlass java/nio/Bits +instanceKlass java/nio/charset/CodingErrorAction +instanceKlass java/nio/charset/CharsetEncoder +instanceKlass sun/nio/cs/ArrayEncoder +instanceKlass sun/reflect/ReflectionFactory$1 +instanceKlass java/lang/Class$1 +instanceKlass sun/nio/cs/SingleByte +instanceKlass sun/nio/cs/HistoricallyNamedCharset +instanceKlass sun/security/action/GetPropertyAction +instanceKlass java/lang/ThreadLocal +instanceKlass java/nio/charset/spi/CharsetProvider +instanceKlass java/nio/charset/Charset +instanceKlass java/io/Writer +instanceKlass java/util/Arrays +instanceKlass sun/reflect/misc/ReflectUtil +instanceKlass java/lang/reflect/ReflectAccess +instanceKlass sun/reflect/LangReflectAccess +instanceKlass java/lang/reflect/Modifier +instanceKlass sun/reflect/annotation/AnnotationType +instanceKlass java/lang/Class$AnnotationData +instanceKlass sun/reflect/generics/repository/AbstractRepository +instanceKlass java/lang/Class$Atomic +instanceKlass java/lang/Class$ReflectionData +instanceKlass java/lang/Class$3 +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 +instanceKlass java/security/PrivilegedExceptionAction +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater +instanceKlass java/io/OutputStream +instanceKlass java/io/Flushable +instanceKlass java/io/FileDescriptor$1 +instanceKlass sun/misc/JavaIOFileDescriptorAccess +instanceKlass java/io/FileDescriptor +instanceKlass sun/misc/Version +instanceKlass java/lang/CharacterData +instanceKlass java/util/Hashtable$Enumerator +instanceKlass java/util/Iterator +instanceKlass java/util/Enumeration +instanceKlass java/util/Objects +instanceKlass java/util/Collections$SynchronizedCollection +instanceKlass java/lang/Math +instanceKlass java/util/Hashtable$Entry +instanceKlass sun/misc/VM +instanceKlass java/util/HashMap$Node +instanceKlass java/util/Map$Entry +instanceKlass sun/reflect/Reflection +instanceKlass sun/misc/SharedSecrets +instanceKlass java/lang/ref/Reference$1 +instanceKlass sun/misc/JavaLangRefAccess +instanceKlass java/lang/ref/ReferenceQueue$Lock +instanceKlass java/lang/ref/ReferenceQueue +instanceKlass java/util/Collections$UnmodifiableCollection +instanceKlass java/util/AbstractMap +instanceKlass java/util/Set +instanceKlass java/util/Collections +instanceKlass java/lang/ref/Reference$Lock +instanceKlass sun/reflect/ReflectionFactory +instanceKlass java/util/AbstractCollection +instanceKlass java/util/RandomAccess +instanceKlass java/util/List +instanceKlass java/util/Collection +instanceKlass java/lang/Iterable +instanceKlass java/security/cert/Certificate +instanceKlass sun/reflect/ReflectionFactory$GetReflectionFactoryAction +instanceKlass java/security/PrivilegedAction +instanceKlass java/security/AccessController +instanceKlass java/security/Permission +instanceKlass java/security/Guard +instanceKlass java/lang/String$CaseInsensitiveComparator +instanceKlass java/util/Comparator +instanceKlass java/io/ObjectStreamField +instanceKlass java/lang/Number +instanceKlass java/lang/Character +instanceKlass java/lang/Boolean +instanceKlass java/nio/Buffer +instanceKlass java/lang/StackTraceElement +instanceKlass java/security/CodeSource +instanceKlass sun/misc/Launcher +instanceKlass java/util/jar/Manifest +instanceKlass java/net/URL +instanceKlass java/io/File +instanceKlass java/io/InputStream +instanceKlass java/io/Closeable +instanceKlass java/lang/AutoCloseable +instanceKlass sun/misc/Unsafe +instanceKlass java/lang/AbstractStringBuilder +instanceKlass java/lang/Appendable +instanceKlass java/lang/invoke/CallSite +instanceKlass java/lang/invoke/MethodType +instanceKlass java/lang/invoke/LambdaForm +instanceKlass java/lang/invoke/MethodHandleNatives +instanceKlass java/lang/invoke/MemberName +instanceKlass java/lang/invoke/MethodHandle +instanceKlass sun/reflect/CallerSensitive +instanceKlass java/lang/annotation/Annotation +instanceKlass sun/reflect/FieldAccessor +instanceKlass sun/reflect/ConstantPool +instanceKlass sun/reflect/ConstructorAccessor +instanceKlass sun/reflect/MethodAccessor +instanceKlass sun/reflect/MagicAccessorImpl +instanceKlass java/lang/reflect/Parameter +instanceKlass java/lang/reflect/Member +instanceKlass java/lang/reflect/AccessibleObject +instanceKlass java/util/Dictionary +instanceKlass java/util/Map +instanceKlass java/lang/ThreadGroup +instanceKlass java/lang/Thread$UncaughtExceptionHandler +instanceKlass java/lang/Thread +instanceKlass java/lang/Runnable +instanceKlass java/lang/ref/Reference +instanceKlass java/security/AccessControlContext +instanceKlass java/security/ProtectionDomain +instanceKlass java/lang/SecurityManager +instanceKlass java/lang/Throwable +instanceKlass java/lang/System +instanceKlass java/lang/ClassLoader +instanceKlass java/lang/Cloneable +instanceKlass java/lang/Class +instanceKlass java/lang/reflect/Type +instanceKlass java/lang/reflect/GenericDeclaration +instanceKlass java/lang/reflect/AnnotatedElement +instanceKlass java/lang/String +instanceKlass java/lang/CharSequence +instanceKlass java/lang/Comparable +instanceKlass java/io/Serializable +ciInstanceKlass java/lang/Object 1 1 75 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 7 7 7 7 1 1 1 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/io/Serializable 1 1 5 1 1 100 100 +ciInstanceKlass java/lang/String 1 1 537 3 3 3 3 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 100 100 7 100 7 7 100 7 7 100 7 7 100 7 100 7 100 100 7 7 7 7 100 7 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 +staticfield java/lang/String serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/String CASE_INSENSITIVE_ORDER Ljava/util/Comparator; java/lang/String$CaseInsensitiveComparator +ciInstanceKlass java/lang/Class 1 1 1187 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 8 8 8 8 8 7 7 7 100 100 100 7 7 100 7 100 7 7 7 7 100 7 7 100 7 100 100 100 7 100 100 100 100 100 100 7 7 7 7 100 100 100 7 7 7 100 100 7 7 100 100 7 7 100 7 100 7 7 100 100 7 7 7 7 7 7 7 7 7 100 7 7 7 7 7 100 100 7 7 7 7 100 7 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 +staticfield java/lang/Class serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/Cloneable 1 1 5 1 1 100 100 +instanceKlass com/mathworks/eps/notificationclient/api/classloader/FilteredClassLoader +instanceKlass com/google/inject/internal/BytecodeGen$BridgeClassLoader +instanceKlass com/mathworks/util/jarloader/SimpleClassLoader +instanceKlass com/mathworks/jmi/CustomClassLoader +instanceKlass java/util/ResourceBundle$RBClassLoader +instanceKlass sun/reflect/DelegatingClassLoader +instanceKlass java/security/SecureClassLoader +ciInstanceKlass java/lang/ClassLoader 1 1 839 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 7 7 100 100 100 7 7 100 7 7 7 7 7 7 100 7 100 100 7 7 100 100 7 7 7 7 100 7 100 100 7 100 100 7 7 100 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 1 +staticfield java/lang/ClassLoader nocerts [Ljava/security/cert/Certificate; 0 [Ljava/security/cert/Certificate; +ciInstanceKlass java/lang/System 1 1 366 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 100 7 100 100 100 100 100 100 7 7 100 100 7 100 100 7 7 7 7 100 100 100 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/lang/System in Ljava/io/InputStream; java/io/BufferedInputStream +staticfield java/lang/System out Ljava/io/PrintStream; java/io/PrintStream +staticfield java/lang/System err Ljava/io/PrintStream; java/io/PrintStream +instanceKlass java/lang/Exception +instanceKlass java/lang/Error +ciInstanceKlass java/lang/Throwable 1 1 324 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 100 100 100 100 100 100 7 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Throwable UNASSIGNED_STACK [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Throwable SUPPRESSED_SENTINEL Ljava/util/List; java/util/Collections$UnmodifiableRandomAccessList +staticfield java/lang/Throwable EMPTY_THROWABLE_ARRAY [Ljava/lang/Throwable; 0 [Ljava/lang/Throwable; +staticfield java/lang/Throwable $assertionsDisabled Z 1 +instanceKlass javax/xml/transform/TransformerFactoryConfigurationError +instanceKlass javax/xml/parsers/FactoryConfigurationError +instanceKlass org/apache/commons/httpclient/HttpClientError +instanceKlass com/google/common/util/concurrent/ExecutionError +instanceKlass org/apache/xerces/impl/dv/ObjectFactory$ConfigurationError +instanceKlass org/apache/xerces/parsers/ObjectFactory$ConfigurationError +instanceKlass java/awt/AWTError +instanceKlass java/lang/AssertionError +instanceKlass java/lang/VirtualMachineError +instanceKlass java/lang/LinkageError +instanceKlass java/lang/ThreadDeath +ciInstanceKlass java/lang/Error 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +ciInstanceKlass java/lang/ThreadDeath 0 0 15 1 1 1 1 1 1 1 1 5 0 100 100 12 10 +instanceKlass org/apache/http/HttpException +instanceKlass javax/naming/NamingException +instanceKlass net/sf/saxon/om/QNameException +instanceKlass javax/xml/xpath/XPathException +instanceKlass org/apache/xerces/impl/xpath/XPathException +instanceKlass org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser$ComplexTypeRecoverableError +instanceKlass org/apache/commons/codec/EncoderException +instanceKlass org/apache/commons/codec/DecoderException +instanceKlass org/apache/xerces/impl/xs/XMLSchemaException +instanceKlass com/mathworks/apache/commons/cli/ParseException +instanceKlass com/mathworks/eps/notificationclient/api/exception/NotificationClientException +instanceKlass javax/xml/stream/XMLStreamException +instanceKlass com/mathworks/install/XMLParseException +instanceKlass com/mathworks/install/InvalidInstallationFolderException +instanceKlass org/jdom/JDOMException +instanceKlass sun/nio/fs/WindowsException +instanceKlass com/mathworks/cmlink/util/system/SystemCommandException +instanceKlass com/mathworks/install/exception/InstallerRequirementNotSatisfiedException +instanceKlass com/google/inject/internal/ErrorsException +instanceKlass org/dom4j/DocumentException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceBadConfigurationException +instanceKlass com/mathworks/supportsoftwareinstaller/api/SsiException +instanceKlass javax/xml/bind/JAXBException +instanceKlass com/mathworks/addons_common/exceptions/AddOnNotFoundException +instanceKlass com/mathworks/addons_common/exceptions/MultipleVersionsFoundException +instanceKlass com/mathworks/addons_common/exceptions/IdentifierNotFoundException +instanceKlass org/tmatesoft/svn/core/SVNException +instanceKlass com/mathworks/jmi/AWTUtilities$ConversionException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutRangeException +instanceKlass com/mathworks/jmi/AWTUtilities$TimeoutException +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils$MFileTypeUnsupportedException +instanceKlass java/awt/AWTException +instanceKlass org/openide/util/RequestProcessor$Item +instanceKlass org/netbeans/editor/InvalidMarkException +instanceKlass com/mathworks/widgets/desk/DTUnableToOpenException +instanceKlass com/mathworks/cmlink/api/ConfigurationManagementException +instanceKlass com/mathworks/widgets/ToolTipSourceParentIsNullException +instanceKlass javax/swing/tree/ExpandVetoException +instanceKlass com/mathworks/mlwidgets/help/WebDocUnavailableException +instanceKlass com/mathworks/instutil/JNIException +instanceKlass com/mathworks/html/BrowserCreationException +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentCreationException +instanceKlass java/util/concurrent/ExecutionException +instanceKlass com/mathworks/toolbox/distcomp/mjs/MJSException +instanceKlass com/mathworks/services/lmgr/JNIException +instanceKlass org/apache/xerces/impl/dv/DatatypeException +instanceKlass org/xml/sax/SAXException +instanceKlass com/mathworks/mwswing/binding/ReadWriteException +instanceKlass java/beans/PropertyVetoException +instanceKlass com/mathworks/hg/peer/LightWeightManager$InvalidConfigurationException +instanceKlass java/util/TooManyListenersException +instanceKlass java/awt/datatransfer/UnsupportedFlavorException +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/InvalidLocationException +instanceKlass java/text/ParseException +instanceKlass java/net/URISyntaxException +instanceKlass java/lang/CloneNotSupportedException +instanceKlass com/mathworks/jmi/MatlabException +instanceKlass java/util/concurrent/BrokenBarrierException +instanceKlass javax/xml/transform/TransformerException +instanceKlass javax/xml/parsers/ParserConfigurationException +instanceKlass java/util/zip/DataFormatException +instanceKlass java/awt/FontFormatException +instanceKlass javax/swing/UnsupportedLookAndFeelException +instanceKlass java/util/concurrent/TimeoutException +instanceKlass java/security/GeneralSecurityException +instanceKlass javax/swing/text/BadLocationException +instanceKlass com/mathworks/services/settings/SettingException +instanceKlass java/beans/IntrospectionException +instanceKlass com/mathworks/util/MatlabThreadException +instanceKlass java/security/PrivilegedActionException +instanceKlass java/io/IOException +instanceKlass java/lang/InterruptedException +instanceKlass java/lang/ReflectiveOperationException +instanceKlass java/lang/RuntimeException +ciInstanceKlass java/lang/Exception 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass org/apache/commons/logging/LogConfigurationException +instanceKlass org/apache/http/ParseException +instanceKlass net/sf/saxon/om/NamePool$NamePoolLimitException +instanceKlass com/google/gson/JsonParseException +instanceKlass java/security/ProviderException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelException +instanceKlass org/apache/xerces/impl/xpath/regex/ParseException +instanceKlass org/apache/xerces/impl/dv/xs/SchemaDateTimeException +instanceKlass org/apache/commons/httpclient/URI$DefaultCharsetChanged +instanceKlass org/apache/commons/logging/LogConfigurationException +instanceKlass com/mathworks/webservices/client/core/MathWorksServiceException +instanceKlass com/mathworks/webservices/client/core/MathWorksClientException +instanceKlass com/teamdev/jxbrowser/chromium/BrowserException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceNotRegisteredException +instanceKlass com/mathworks/installservicehandler/exception/InstallServiceHandlerInternalException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractorException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ServerException +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPCException +instanceKlass com/teamdev/jxbrowser/chromium/internal/EnvironmentException +instanceKlass com/mathworks/instutil/NoParentException +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader$EarlyExitException +instanceKlass org/eclipse/jgit/errors/UnsupportedCredentialItem +instanceKlass com/google/inject/internal/cglib/core/$CodeGenerationException +instanceKlass com/google/common/cache/CacheLoader$InvalidCacheLoadException +instanceKlass com/google/common/util/concurrent/UncheckedExecutionException +instanceKlass com/google/inject/CreationException +instanceKlass com/google/inject/ProvisionException +instanceKlass com/google/inject/ConfigurationException +instanceKlass org/apache/commons/lang/exception/NestableRuntimeException +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration$FormatException +instanceKlass org/openide/util/Utilities$UnorderableException +instanceKlass javax/swing/undo/CannotRedoException +instanceKlass javax/swing/undo/CannotUndoException +instanceKlass com/jidesoft/grid/EditingNotStoppedException +instanceKlass com/mathworks/mladdonpackaging/AddonPackageException +instanceKlass com/mathworks/comparisons/main/NoSuitableComparisonTypeException +instanceKlass com/jgoodies/forms/layout/FormSpecParser$FormLayoutParseException +instanceKlass java/util/ConcurrentModificationException +instanceKlass org/w3c/dom/events/EventException +instanceKlass org/w3c/dom/DOMException +instanceKlass com/mathworks/desktop/attr/AttributeParseException +instanceKlass org/apache/xerces/impl/dv/DVFactoryException +instanceKlass org/apache/xerces/xni/XNIException +instanceKlass com/mathworks/mvm/eventmgr/InvalidEventTypeException +instanceKlass java/util/NoSuchElementException +instanceKlass com/google/gson/JsonParseException +instanceKlass com/mathworks/util/ShutdownRuntimeException +instanceKlass java/lang/invoke/WrongMethodTypeException +instanceKlass java/util/MissingResourceException +instanceKlass java/util/concurrent/RejectedExecutionException +instanceKlass com/mathworks/mvm/MvmTerminatedException +instanceKlass com/mathworks/services/settings/SettingLevelRuntimeException +instanceKlass com/mathworks/services/settings/SettingNameRuntimeException +instanceKlass java/lang/UnsupportedOperationException +instanceKlass com/mathworks/services/settings/SettingUnsupportedTypeRuntimeException +instanceKlass java/lang/IllegalStateException +instanceKlass java/lang/reflect/UndeclaredThrowableException +instanceKlass java/lang/IndexOutOfBoundsException +instanceKlass java/lang/SecurityException +instanceKlass com/mathworks/util/AggregateException +instanceKlass java/lang/IllegalArgumentException +instanceKlass java/lang/ArithmeticException +instanceKlass java/lang/NullPointerException +instanceKlass java/lang/IllegalMonitorStateException +instanceKlass java/lang/ArrayStoreException +instanceKlass java/lang/ClassCastException +ciInstanceKlass java/lang/RuntimeException 1 1 27 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass javax/crypto/JceSecurityManager +ciInstanceKlass java/lang/SecurityManager 1 1 372 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 7 100 100 100 100 100 100 7 7 7 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/SecurityManager packageAccessLock Ljava/lang/Object; java/lang/Object +staticfield java/lang/SecurityManager packageDefinitionLock Ljava/lang/Object; java/lang/Object +ciInstanceKlass java/security/ProtectionDomain 1 1 275 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 100 100 100 7 7 100 7 7 100 7 7 7 100 100 100 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 +staticfield java/security/ProtectionDomain debug Lsun/security/util/Debug; null +ciInstanceKlass java/security/AccessControlContext 1 1 302 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 100 7 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 +instanceKlass sun/reflect/misc/MethodUtil +instanceKlass java/net/URLClassLoader +ciInstanceKlass java/security/SecureClassLoader 1 1 127 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/security/SecureClassLoader debug Lsun/security/util/Debug; null +instanceKlass java/lang/InstantiationException +instanceKlass java/lang/NoSuchMethodException +instanceKlass java/lang/IllegalAccessException +instanceKlass java/lang/NoSuchFieldException +instanceKlass java/lang/reflect/InvocationTargetException +instanceKlass java/lang/ClassNotFoundException +ciInstanceKlass java/lang/ReflectiveOperationException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/ClassNotFoundException 1 1 29 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 1 1 1 12 12 12 9 10 10 +instanceKlass java/lang/ClassFormatError +instanceKlass java/lang/UnsatisfiedLinkError +instanceKlass java/lang/ExceptionInInitializerError +instanceKlass java/lang/IncompatibleClassChangeError +instanceKlass java/lang/BootstrapMethodError +instanceKlass java/lang/NoClassDefFoundError +ciInstanceKlass java/lang/LinkageError 1 1 21 1 1 1 1 1 1 1 1 1 5 0 7 100 1 12 12 12 10 10 10 +ciInstanceKlass java/lang/NoClassDefFoundError 0 0 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ClassCastException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/ArrayStoreException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/InternalError +instanceKlass java/lang/StackOverflowError +instanceKlass java/lang/OutOfMemoryError +ciInstanceKlass java/lang/VirtualMachineError 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/lang/OutOfMemoryError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/StackOverflowError 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +ciInstanceKlass java/lang/IllegalMonitorStateException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/lang/ref/PhantomReference +instanceKlass java/lang/ref/FinalReference +instanceKlass java/lang/ref/WeakReference +instanceKlass java/lang/ref/SoftReference +ciInstanceKlass java/lang/ref/Reference 1 1 131 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 7 100 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +instanceKlass com/google/common/cache/LocalCache$SoftValueReference +instanceKlass org/openide/util/TimedSoftReference +instanceKlass sun/security/util/MemoryCache$SoftCacheEntry +instanceKlass sun/font/FontDesignMetrics$KeyReference +instanceKlass sun/font/StrikeCache$SoftDisposerRef +instanceKlass sun/util/locale/provider/LocaleResources$ResourceReference +instanceKlass com/google/common/collect/MapMakerInternalMap$SoftValueReference +instanceKlass sun/misc/SoftCache$ValueCell +instanceKlass java/lang/invoke/LambdaFormEditor$Transform +instanceKlass java/util/ResourceBundle$BundleReference +instanceKlass sun/util/locale/LocaleObjectCache$CacheEntry +ciInstanceKlass java/lang/ref/SoftReference 1 1 32 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +instanceKlass org/apache/commons/logging/impl/WeakHashtable$WeakKey +instanceKlass org/apache/commons/logging/impl/WeakHashtable$WeakKey +instanceKlass java/lang/reflect/Proxy$Key2 +instanceKlass java/io/ObjectStreamClass$FieldReflectorKey +instanceKlass java/io/ObjectStreamClass$WeakClassKey +instanceKlass com/google/common/cache/LocalCache$WeakEntry +instanceKlass com/sun/jna/CallbackReference +instanceKlass com/google/common/cache/LocalCache$WeakValueReference +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference$1 +instanceKlass org/openide/util/WeakListenerImpl$ListenerReference +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty$WeakPCL +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge$WeakLink +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler$DocReference +instanceKlass javax/swing/text/GapContent$MarkData +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$ProxyListener +instanceKlass javax/swing/ActionPropertyChangeListener$OwnedWeakReference +instanceKlass java/beans/WeakIdentityMap$Entry +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty$WeakPCL +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty$WeakPCL +instanceKlass sun/awt/image/ImageWatched$AccWeakReference +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry +instanceKlass java/util/logging/LogManager$LoggerWeakRef +instanceKlass java/util/ResourceBundle$LoaderReference +instanceKlass java/lang/reflect/WeakCache$CacheValue +instanceKlass java/lang/reflect/Proxy$Key1 +instanceKlass java/lang/reflect/WeakCache$CacheKey +instanceKlass java/lang/ThreadLocal$ThreadLocalMap$Entry +instanceKlass java/lang/ClassValue$Entry +instanceKlass java/util/WeakHashMap$Entry +ciInstanceKlass java/lang/ref/WeakReference 1 1 17 1 1 1 1 1 1 7 100 1 1 1 1 12 12 10 10 +instanceKlass java/lang/ref/Finalizer +ciInstanceKlass java/lang/ref/FinalReference 1 1 13 1 1 1 1 1 100 7 1 1 1 12 10 +instanceKlass sun/misc/Cleaner +ciInstanceKlass java/lang/ref/PhantomReference 1 1 16 1 1 1 1 1 1 1 1 100 7 1 1 1 12 10 +ciInstanceKlass sun/misc/Cleaner 1 1 71 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 11 +staticfield sun/misc/Cleaner dummyQueue Ljava/lang/ref/ReferenceQueue; java/lang/ref/ReferenceQueue +ciInstanceKlass java/lang/ref/Finalizer 1 1 145 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 100 7 7 100 100 100 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/ref/Finalizer lock Ljava/lang/Object; java/lang/Object +instanceKlass com/mathworks/eps/notificationclient/impl/executors/ExecutorServiceGroup$1 +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager$1 +instanceKlass com/jidesoft/utils/PortingUtils$1 +instanceKlass java/awt/EventDispatchThread +instanceKlass sun/awt/image/ImageFetcher +instanceKlass java/util/logging/LogManager$Cleaner +instanceKlass java/util/TimerThread +instanceKlass java/lang/ref/Finalizer$FinalizerThread +instanceKlass java/lang/ref/Reference$ReferenceHandler +ciInstanceKlass java/lang/Thread 1 1 536 3 3 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 100 100 100 100 100 100 7 100 100 7 100 100 7 7 7 100 7 100 7 7 100 100 100 100 100 100 7 7 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 1 1 1 1 +staticfield java/lang/Thread EMPTY_STACK_TRACE [Ljava/lang/StackTraceElement; 0 [Ljava/lang/StackTraceElement; +staticfield java/lang/Thread SUBCLASS_IMPLEMENTATION_PERMISSION Ljava/lang/RuntimePermission; java/lang/RuntimePermission +ciInstanceKlass java/lang/ThreadGroup 1 1 265 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 7 100 100 7 7 100 100 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +ciInstanceKlass java/util/Map 1 1 129 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 +instanceKlass java/util/Hashtable +ciInstanceKlass java/util/Dictionary 1 1 28 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 1 1 1 1 1 1 12 10 +instanceKlass org/apache/commons/logging/impl/WeakHashtable +instanceKlass org/apache/commons/logging/impl/WeakHashtable +instanceKlass org/netbeans/editor/BaseDocument$LazyPropertyMap +instanceKlass javax/swing/UIDefaults +instanceKlass java/util/Properties +ciInstanceKlass java/util/Hashtable 1 1 413 3 3 4 4 8 8 8 8 8 8 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 100 7 100 100 100 7 100 7 100 100 7 100 100 7 100 7 100 100 100 7 100 7 7 100 7 7 7 7 100 7 7 7 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 +instanceKlass java/security/Provider +instanceKlass com/mathworks/services/Prefs$PrefsProperties +ciInstanceKlass java/util/Properties 1 1 260 3 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 +staticfield java/util/Properties hexDigit [C 16 +instanceKlass java/lang/reflect/Executable +instanceKlass java/lang/reflect/Field +ciInstanceKlass java/lang/reflect/AccessibleObject 1 1 141 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/lang/reflect/AccessibleObject ACCESS_PERMISSION Ljava/security/Permission; java/lang/reflect/ReflectPermission +staticfield java/lang/reflect/AccessibleObject reflectionFactory Lsun/reflect/ReflectionFactory; sun/reflect/ReflectionFactory +ciInstanceKlass java/lang/reflect/Field 1 1 359 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 7 100 7 7 100 7 100 7 7 7 7 7 7 7 7 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass java/lang/reflect/Parameter 0 0 207 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +instanceKlass java/lang/reflect/Constructor +instanceKlass java/lang/reflect/Method +ciInstanceKlass java/lang/reflect/Executable 1 1 375 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 100 100 100 100 7 100 7 7 100 100 100 7 100 7 100 7 7 7 7 7 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 1 +ciInstanceKlass java/lang/reflect/Method 1 1 343 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 +ciInstanceKlass java/lang/reflect/Constructor 1 1 327 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 7 100 100 7 7 100 100 100 100 100 7 7 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +instanceKlass sun/reflect/FieldAccessorImpl +instanceKlass sun/reflect/ConstructorAccessorImpl +instanceKlass sun/reflect/MethodAccessorImpl +ciInstanceKlass sun/reflect/MagicAccessorImpl 1 1 10 1 1 1 1 1 7 100 12 10 +instanceKlass sun/reflect/GeneratedMethodAccessor33 +instanceKlass sun/reflect/GeneratedMethodAccessor32 +instanceKlass sun/reflect/GeneratedMethodAccessor31 +instanceKlass sun/reflect/GeneratedMethodAccessor30 +instanceKlass sun/reflect/GeneratedMethodAccessor29 +instanceKlass sun/reflect/GeneratedMethodAccessor28 +instanceKlass sun/reflect/GeneratedMethodAccessor27 +instanceKlass sun/reflect/GeneratedMethodAccessor26 +instanceKlass sun/reflect/GeneratedMethodAccessor25 +instanceKlass sun/reflect/GeneratedMethodAccessor24 +instanceKlass sun/reflect/GeneratedMethodAccessor23 +instanceKlass sun/reflect/GeneratedMethodAccessor22 +instanceKlass sun/reflect/GeneratedMethodAccessor21 +instanceKlass sun/reflect/GeneratedMethodAccessor20 +instanceKlass sun/reflect/GeneratedMethodAccessor19 +instanceKlass sun/reflect/GeneratedMethodAccessor18 +instanceKlass sun/reflect/GeneratedMethodAccessor17 +instanceKlass sun/reflect/GeneratedMethodAccessor16 +instanceKlass sun/reflect/GeneratedMethodAccessor15 +instanceKlass sun/reflect/GeneratedMethodAccessor14 +instanceKlass sun/reflect/GeneratedMethodAccessor13 +instanceKlass sun/reflect/GeneratedMethodAccessor12 +instanceKlass sun/reflect/GeneratedMethodAccessor11 +instanceKlass sun/reflect/GeneratedMethodAccessor10 +instanceKlass sun/reflect/GeneratedMethodAccessor9 +instanceKlass sun/reflect/GeneratedMethodAccessor8 +instanceKlass sun/reflect/GeneratedMethodAccessor7 +instanceKlass sun/reflect/GeneratedMethodAccessor6 +instanceKlass sun/reflect/GeneratedMethodAccessor5 +instanceKlass sun/reflect/GeneratedMethodAccessor4 +instanceKlass sun/reflect/GeneratedMethodAccessor3 +instanceKlass sun/reflect/GeneratedMethodAccessor2 +instanceKlass sun/reflect/GeneratedMethodAccessor1 +instanceKlass sun/reflect/DelegatingMethodAccessorImpl +instanceKlass sun/reflect/NativeMethodAccessorImpl +ciInstanceKlass sun/reflect/MethodAccessorImpl 1 1 19 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 12 10 +instanceKlass sun/reflect/GeneratedConstructorAccessor27 +instanceKlass sun/reflect/GeneratedConstructorAccessor26 +instanceKlass sun/reflect/GeneratedConstructorAccessor25 +instanceKlass sun/reflect/GeneratedConstructorAccessor24 +instanceKlass sun/reflect/GeneratedConstructorAccessor23 +instanceKlass sun/reflect/GeneratedConstructorAccessor22 +instanceKlass sun/reflect/GeneratedConstructorAccessor21 +instanceKlass sun/reflect/GeneratedConstructorAccessor20 +instanceKlass sun/reflect/GeneratedConstructorAccessor19 +instanceKlass sun/reflect/GeneratedConstructorAccessor18 +instanceKlass sun/reflect/GeneratedConstructorAccessor17 +instanceKlass sun/reflect/GeneratedConstructorAccessor16 +instanceKlass sun/reflect/GeneratedConstructorAccessor15 +instanceKlass sun/reflect/GeneratedConstructorAccessor14 +instanceKlass sun/reflect/GeneratedConstructorAccessor13 +instanceKlass sun/reflect/GeneratedConstructorAccessor12 +instanceKlass sun/reflect/GeneratedConstructorAccessor11 +instanceKlass sun/reflect/GeneratedConstructorAccessor10 +instanceKlass sun/reflect/SerializationConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor9 +instanceKlass sun/reflect/GeneratedConstructorAccessor8 +instanceKlass sun/reflect/GeneratedConstructorAccessor7 +instanceKlass sun/reflect/GeneratedConstructorAccessor6 +instanceKlass sun/reflect/GeneratedConstructorAccessor5 +instanceKlass sun/reflect/GeneratedConstructorAccessor4 +instanceKlass sun/reflect/GeneratedConstructorAccessor3 +instanceKlass sun/reflect/GeneratedConstructorAccessor2 +instanceKlass sun/reflect/BootstrapConstructorAccessorImpl +instanceKlass sun/reflect/GeneratedConstructorAccessor1 +instanceKlass sun/reflect/DelegatingConstructorAccessorImpl +instanceKlass sun/reflect/NativeConstructorAccessorImpl +ciInstanceKlass sun/reflect/ConstructorAccessorImpl 1 1 21 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 12 10 +ciInstanceKlass sun/reflect/DelegatingClassLoader 1 1 10 1 1 1 1 7 100 1 12 10 +ciInstanceKlass sun/reflect/ConstantPool 1 1 103 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/reflect/UnsafeFieldAccessorImpl +ciInstanceKlass sun/reflect/FieldAccessorImpl 1 1 53 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 10 +instanceKlass sun/reflect/UnsafeLongFieldAccessorImpl +instanceKlass sun/reflect/UnsafeBooleanFieldAccessorImpl +instanceKlass sun/reflect/UnsafeDoubleFieldAccessorImpl +instanceKlass sun/reflect/UnsafeIntegerFieldAccessorImpl +instanceKlass sun/reflect/UnsafeObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeFieldAccessorImpl 1 1 226 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/reflect/UnsafeFieldAccessorImpl unsafe Lsun/misc/Unsafe; sun/misc/Unsafe +instanceKlass sun/reflect/UnsafeStaticObjectFieldAccessorImpl +instanceKlass sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl +ciInstanceKlass sun/reflect/UnsafeStaticFieldAccessorImpl 1 1 35 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 1 1 1 1 12 12 12 12 12 9 9 10 10 10 +ciInstanceKlass sun/reflect/CallerSensitive 0 0 15 1 1 1 1 1 1 1 100 100 100 1 1 1 1 +instanceKlass java/lang/invoke/DelegatingMethodHandle +instanceKlass java/lang/invoke/BoundMethodHandle +instanceKlass java/lang/invoke/DirectMethodHandle +ciInstanceKlass java/lang/invoke/MethodHandle 1 1 435 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 7 100 100 7 7 7 100 7 7 7 7 100 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/invoke/MethodHandle FORM_OFFSET J 20 +staticfield java/lang/invoke/MethodHandle $assertionsDisabled Z 1 +instanceKlass java/lang/invoke/DirectMethodHandle$Special +instanceKlass java/lang/invoke/DirectMethodHandle$Accessor +ciInstanceKlass java/lang/invoke/DirectMethodHandle 1 1 689 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 100 7 100 100 100 7 100 7 100 100 7 7 100 7 7 100 7 7 100 7 7 7 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 1 1 1 1 +staticfield java/lang/invoke/DirectMethodHandle IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/DirectMethodHandle ACCESSOR_FORMS [Ljava/lang/invoke/LambdaForm; 132 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/DirectMethodHandle $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MemberName 1 1 639 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 7 7 100 100 100 7 7 100 100 100 100 100 100 100 100 100 7 100 7 7 7 7 7 100 7 7 100 100 100 100 7 100 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 +staticfield java/lang/invoke/MemberName $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodHandleNatives 1 1 424 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +staticfield java/lang/invoke/MethodHandleNatives COUNT_GWT Z 1 +staticfield java/lang/invoke/MethodHandleNatives $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/LambdaForm 1 1 964 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 8 100 100 100 100 7 7 100 100 100 7 100 100 100 100 100 100 100 100 7 7 7 100 7 7 100 100 100 7 100 7 100 100 7 7 7 7 7 100 100 7 7 7 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 1 1 +staticfield java/lang/invoke/LambdaForm COMPILE_THRESHOLD I 0 +staticfield java/lang/invoke/LambdaForm INTERNED_ARGUMENTS [[Ljava/lang/invoke/LambdaForm$Name; 5 [[Ljava/lang/invoke/LambdaForm$Name; +staticfield java/lang/invoke/LambdaForm IMPL_NAMES Ljava/lang/invoke/MemberName$Factory; java/lang/invoke/MemberName$Factory +staticfield java/lang/invoke/LambdaForm LF_identityForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm LF_zeroForm [Ljava/lang/invoke/LambdaForm; 6 [Ljava/lang/invoke/LambdaForm; +staticfield java/lang/invoke/LambdaForm NF_identity [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm NF_zero [Ljava/lang/invoke/LambdaForm$NamedFunction; 6 [Ljava/lang/invoke/LambdaForm$NamedFunction; +staticfield java/lang/invoke/LambdaForm DEBUG_NAME_COUNTERS Ljava/util/HashMap; null +staticfield java/lang/invoke/LambdaForm TRACE_INTERPRETER Z 0 +staticfield java/lang/invoke/LambdaForm $assertionsDisabled Z 1 +ciInstanceKlass java/lang/invoke/MethodType 1 1 588 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 5 0 7 100 100 100 7 100 100 7 100 7 100 100 100 100 100 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 +staticfield java/lang/invoke/MethodType internTable Ljava/lang/invoke/MethodType$ConcurrentWeakInternSet; java/lang/invoke/MethodType$ConcurrentWeakInternSet +staticfield java/lang/invoke/MethodType NO_PTYPES [Ljava/lang/Class; 0 [Ljava/lang/Class; +staticfield java/lang/invoke/MethodType objectOnlyTypes [Ljava/lang/invoke/MethodType; 20 [Ljava/lang/invoke/MethodType; +staticfield java/lang/invoke/MethodType serialPersistentFields [Ljava/io/ObjectStreamField; 0 [Ljava/io/ObjectStreamField; +staticfield java/lang/invoke/MethodType rtypeOffset J 12 +staticfield java/lang/invoke/MethodType ptypesOffset J 16 +staticfield java/lang/invoke/MethodType $assertionsDisabled Z 1 +ciInstanceKlass java/lang/BootstrapMethodError 0 0 35 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 +instanceKlass java/lang/invoke/VolatileCallSite +instanceKlass java/lang/invoke/MutableCallSite +instanceKlass java/lang/invoke/ConstantCallSite +ciInstanceKlass java/lang/invoke/CallSite 1 1 308 8 8 8 8 8 8 8 8 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 100 7 100 100 100 100 100 100 7 100 7 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/invoke/CallSite GET_TARGET Ljava/lang/invoke/MethodHandle; java/lang/invoke/DirectMethodHandle +staticfield java/lang/invoke/CallSite THROW_UCS Ljava/lang/invoke/MethodHandle; java/lang/invoke/MethodHandleImpl$AsVarargsCollector +staticfield java/lang/invoke/CallSite TARGET_OFFSET J 12 +ciInstanceKlass java/lang/invoke/ConstantCallSite 1 1 39 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 1 1 12 12 12 12 12 12 9 9 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/MutableCallSite 0 0 54 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/invoke/VolatileCallSite 0 0 30 1 1 1 1 1 1 1 1 1 1 1 1 100 100 1 1 1 12 12 12 12 12 12 10 10 10 10 10 10 +instanceKlass java/lang/StringBuilder +instanceKlass java/lang/StringBuffer +ciInstanceKlass java/lang/AbstractStringBuilder 1 1 315 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 7 7 100 100 7 7 7 100 7 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/StringBuffer 1 1 368 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 7 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 +staticfield java/lang/StringBuffer serialPersistentFields [Ljava/io/ObjectStreamField; 3 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/lang/StringBuilder 1 1 323 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass sun/misc/Unsafe 1 1 386 8 8 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 7 100 7 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/misc/Unsafe theUnsafe Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BYTE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_SHORT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_CHAR_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_INT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_LONG_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_FLOAT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_OBJECT_BASE_OFFSET I 16 +staticfield sun/misc/Unsafe ARRAY_BOOLEAN_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_BYTE_INDEX_SCALE I 1 +staticfield sun/misc/Unsafe ARRAY_SHORT_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_CHAR_INDEX_SCALE I 2 +staticfield sun/misc/Unsafe ARRAY_INT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_LONG_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_FLOAT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ARRAY_DOUBLE_INDEX_SCALE I 8 +staticfield sun/misc/Unsafe ARRAY_OBJECT_INDEX_SCALE I 4 +staticfield sun/misc/Unsafe ADDRESS_SIZE I 8 +instanceKlass java/lang/ProcessBuilder$NullInputStream +instanceKlass com/sun/imageio/plugins/common/InputStreamAdapter +instanceKlass java/io/ObjectInputStream$PeekInputStream +instanceKlass java/io/ObjectInputStream$BlockDataInputStream +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil$2 +instanceKlass org/tmatesoft/svn/core/internal/util/SVNLogInputStream +instanceKlass java/util/jar/JarVerifier$VerifierStream +instanceKlass org/apache/xerces/impl/XMLEntityManager$RewindableInputStream +instanceKlass java/io/SequenceInputStream +instanceKlass org/apache/commons/io/input/ClosedInputStream +instanceKlass sun/java2d/cmm/ProfileDeferralInfo +instanceKlass java/io/ObjectInputStream +instanceKlass java/util/zip/ZipFile$ZipFileInputStream +instanceKlass java/io/FilterInputStream +instanceKlass java/io/FileInputStream +instanceKlass java/io/ByteArrayInputStream +ciInstanceKlass java/io/InputStream 1 1 58 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 100 100 100 7 100 100 100 7 12 12 12 12 12 10 10 10 10 10 10 10 +instanceKlass sun/security/util/DerInputBuffer +ciInstanceKlass java/io/ByteArrayInputStream 1 1 59 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 7 100 7 1 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 +instanceKlass sun/awt/shell/ShellFolder +ciInstanceKlass java/io/File 1 1 575 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 7 7 7 7 7 7 100 7 7 7 100 100 100 100 100 7 100 100 100 100 100 7 100 100 100 100 7 7 7 100 7 7 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 1 +staticfield java/io/File fs Ljava/io/FileSystem; java/io/WinNTFileSystem +staticfield java/io/File separatorChar C 92 +staticfield java/io/File separator Ljava/lang/String; "\" +staticfield java/io/File pathSeparatorChar C 59 +staticfield java/io/File pathSeparator Ljava/lang/String; ";" +staticfield java/io/File PATH_OFFSET J 16 +staticfield java/io/File PREFIX_LENGTH_OFFSET J 12 +staticfield java/io/File UNSAFE Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield java/io/File $assertionsDisabled Z 1 +instanceKlass com/mathworks/eps/notificationclient/api/classloader/DirectLoadURLClassLoader +instanceKlass com/mathworks/jmi/ClassLoaderManager$StandaloneURLClassLoader +instanceKlass com/mathworks/jmi/CustomURLClassLoader +instanceKlass sun/misc/Launcher$ExtClassLoader +instanceKlass sun/misc/Launcher$AppClassLoader +ciInstanceKlass java/net/URLClassLoader 1 1 518 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 100 100 7 7 7 100 100 7 100 100 100 7 100 7 100 7 100 7 7 7 7 7 100 100 100 7 7 100 100 100 7 7 7 7 100 7 100 100 100 7 7 7 100 7 7 7 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 +ciInstanceKlass java/net/URL 1 1 547 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 100 7 100 7 7 7 7 100 7 100 7 7 100 7 7 100 100 100 100 7 100 100 7 100 7 7 7 100 100 7 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield java/net/URL serialPersistentFields [Ljava/io/ObjectStreamField; 7 [Ljava/io/ObjectStreamField; +ciInstanceKlass java/util/jar/Manifest 1 1 227 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 7 7 7 100 7 7 100 7 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass sun/misc/Launcher 1 1 215 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 100 100 100 100 7 100 7 100 7 7 100 7 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 1 +ciInstanceKlass sun/misc/Launcher$AppClassLoader 1 1 198 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 7 100 7 100 7 7 100 100 7 100 7 100 7 100 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 +staticfield sun/misc/Launcher$AppClassLoader $assertionsDisabled Z 1 +ciInstanceKlass sun/misc/Launcher$ExtClassLoader 1 1 222 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 7 7 7 100 100 7 7 7 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 +ciInstanceKlass java/security/CodeSource 1 1 321 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 100 100 100 7 100 100 100 7 7 7 7 100 100 100 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 +ciInstanceKlass java/lang/StackTraceElement 1 1 95 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 100 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/nio/DoubleBuffer +instanceKlass java/nio/FloatBuffer +instanceKlass java/nio/ShortBuffer +instanceKlass java/nio/IntBuffer +instanceKlass java/nio/LongBuffer +instanceKlass java/nio/CharBuffer +instanceKlass java/nio/ByteBuffer +ciInstanceKlass java/nio/Buffer 1 1 100 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 100 7 100 7 100 100 100 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/Boolean 1 1 107 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 100 100 100 7 100 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Boolean TRUE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean FALSE Ljava/lang/Boolean; java/lang/Boolean +staticfield java/lang/Boolean TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Character 1 1 456 3 3 3 3 3 3 3 3 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 5 0 5 0 100 100 7 7 100 100 100 7 100 7 100 100 100 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 1 1 1 1 +staticfield java/lang/Character TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Character $assertionsDisabled Z 1 +instanceKlass com/google/gson/internal/LazilyParsedNumber +instanceKlass com/google/gson/BufferedImageConverter$OptimizedImageElementNumber +instanceKlass com/sun/jna/IntegerType +instanceKlass java/math/BigDecimal +instanceKlass com/google/gson/internal/LazilyParsedNumber +instanceKlass java/math/BigInteger +instanceKlass com/mathworks/util/types/UnsignedNumber +instanceKlass java/util/concurrent/atomic/AtomicLong +instanceKlass java/util/concurrent/atomic/AtomicInteger +instanceKlass java/lang/Long +instanceKlass java/lang/Integer +instanceKlass java/lang/Short +instanceKlass java/lang/Byte +instanceKlass java/lang/Double +instanceKlass java/lang/Float +ciInstanceKlass java/lang/Number 1 1 31 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 12 12 10 10 +ciInstanceKlass java/lang/Float 1 1 166 3 3 3 4 4 4 4 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 4 4 5 0 7 100 100 7 100 7 7 100 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Float TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Double 1 1 220 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 100 7 100 100 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/lang/Double TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Byte 1 1 150 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 7 7 100 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Byte TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Short 1 1 156 3 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 5 0 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Short TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/Integer 1 1 306 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 100 7 7 100 100 7 7 100 7 100 7 7 100 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Integer TYPE Ljava/lang/Class; java/lang/Class +staticfield java/lang/Integer digits [C 36 +staticfield java/lang/Integer DigitTens [C 100 +staticfield java/lang/Integer DigitOnes [C 100 +staticfield java/lang/Integer sizeTable [I 10 +ciInstanceKlass java/lang/Long 1 1 353 3 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 7 7 100 100 7 7 7 7 100 7 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Long TYPE Ljava/lang/Class; java/lang/Class +ciInstanceKlass java/lang/NullPointerException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass java/lang/ArithmeticException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 10 10 +instanceKlass java/security/cert/X509Certificate +ciInstanceKlass java/security/cert/Certificate 1 1 105 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 7 100 100 100 100 100 100 7 100 100 100 7 7 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 1 +ciInstanceKlass java/util/Collection 1 1 84 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 10 10 10 11 11 11 11 11 11 +ciInstanceKlass java/util/List 1 1 109 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 7 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 10 10 10 11 11 11 11 11 11 +instanceKlass com/google/common/collect/Maps$Values +instanceKlass com/google/common/collect/AbstractMultimap$Values +instanceKlass com/sun/jna/Structure$2$StructureSet +instanceKlass java/util/EnumMap$Values +instanceKlass com/google/common/collect/ImmutableCollection +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection +instanceKlass java/util/TreeMap$Values +instanceKlass java/util/LinkedHashMap$LinkedValues +instanceKlass java/util/IdentityHashMap$Values +instanceKlass java/util/AbstractQueue +instanceKlass java/util/HashMap$Values +instanceKlass java/util/ArrayDeque +instanceKlass java/util/AbstractSet +instanceKlass java/util/AbstractList +ciInstanceKlass java/util/AbstractCollection 1 1 140 3 3 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 100 100 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ElementPropertyInfoImpl$1 +instanceKlass org/jdom/ContentList$FilterList +instanceKlass org/jdom/AttributeList +instanceKlass org/jdom/ContentList +instanceKlass org/netbeans/lib/editor/util/GapList +instanceKlass java/util/Collections$SingletonList +instanceKlass sun/security/jca/ProviderList$ServiceList +instanceKlass com/google/common/collect/Lists$Partition +instanceKlass com/google/common/collect/Lists$TransformingRandomAccessList +instanceKlass sun/security/jca/ProviderList$3 +instanceKlass sun/awt/util/IdentityArrayList +instanceKlass java/util/SubList +instanceKlass com/mathworks/services/settings/SettingPath +instanceKlass java/util/Arrays$ArrayList +instanceKlass java/util/ArrayList$SubList +instanceKlass java/util/AbstractSequentialList +instanceKlass java/util/Collections$EmptyList +instanceKlass java/util/ArrayList +instanceKlass java/util/Vector +ciInstanceKlass java/util/AbstractList 1 1 164 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 7 100 7 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 1 1 +instanceKlass com/sun/istack/internal/FinalArrayList +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$DependentList +instanceKlass com/mathworks/widgets/desk/DTNotifyingList +ciInstanceKlass java/util/ArrayList 1 1 353 3 3 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 7 7 100 100 7 100 100 100 100 100 7 7 100 100 7 100 7 7 100 7 7 7 7 100 7 100 100 7 100 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 1 1 1 +staticfield java/util/ArrayList EMPTY_ELEMENTDATA [Ljava/lang/Object; 0 [Ljava/lang/Object; +staticfield java/util/ArrayList DEFAULTCAPACITY_EMPTY_ELEMENTDATA [Ljava/lang/Object; 0 [Ljava/lang/Object; +ciInstanceKlass java/util/Set 1 1 45 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 12 10 +ciInstanceKlass java/util/Collections$EmptyList 1 1 122 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 7 100 7 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 11 11 +instanceKlass com/google/gson/internal/LinkedTreeMap +instanceKlass com/google/common/cache/LocalCache +instanceKlass com/google/common/collect/Maps$ImprovedAbstractMap +instanceKlass java/util/EnumMap +instanceKlass com/google/common/collect/MapMaker$NullConcurrentMap +instanceKlass com/google/common/collect/MapMakerInternalMap +instanceKlass sun/misc/SoftCache +instanceKlass java/util/TreeMap +instanceKlass java/util/IdentityHashMap +instanceKlass java/util/concurrent/ConcurrentHashMap +instanceKlass sun/util/PreHashedMap +instanceKlass java/util/WeakHashMap +instanceKlass java/util/HashMap +instanceKlass java/util/Collections$EmptyMap +ciInstanceKlass java/util/AbstractMap 1 1 149 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 7 100 7 100 100 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 +ciInstanceKlass java/util/Collections$UnmodifiableRandomAccessList 1 1 39 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 7 7 100 1 1 1 1 1 1 12 12 12 9 10 10 11 1 1 +instanceKlass org/openide/util/Utilities$ActiveQueue +instanceKlass java/lang/ref/ReferenceQueue$Null +ciInstanceKlass java/lang/ref/ReferenceQueue 1 1 118 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 100 7 100 100 7 7 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/ref/ReferenceQueue $assertionsDisabled Z 1 +instanceKlass sun/nio/ch/WindowsSelectorImpl$FdMap +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$PropertySorter +instanceKlass com/jidesoft/utils/CacheMap$Cache +instanceKlass javax/swing/UIDefaults$TextAndMnemonicHashMap +instanceKlass java/lang/ProcessEnvironment +instanceKlass com/mathworks/services/message/MWMessage +instanceKlass java/util/LinkedHashMap +ciInstanceKlass java/util/HashMap 1 1 479 3 3 4 4 4 4 4 8 8 8 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 5 0 100 7 7 100 7 100 100 100 7 100 100 7 100 100 7 100 7 100 100 100 7 100 100 7 100 7 100 100 100 100 7 100 7 7 100 100 7 7 7 7 7 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass sun/misc/VM 1 1 223 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 5 0 5 0 100 100 100 7 7 100 7 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/misc/VM lock Ljava/lang/Object; java/lang/Object +staticfield sun/misc/VM savedProps Ljava/util/Properties; java/util/Properties +ciInstanceKlass java/util/Hashtable$Entry 1 1 86 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 7 100 100 100 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/Math 1 1 278 3 3 3 3 3 3 4 4 4 4 4 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 100 100 7 7 7 7 100 7 7 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +staticfield java/lang/Math $assertionsDisabled Z 1 +ciInstanceKlass java/util/Objects 1 1 79 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/util/Enumeration 1 0 12 1 1 1 1 1 1 1 1 100 100 1 +ciInstanceKlass java/util/Iterator 1 1 42 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 1 1 1 1 12 12 12 12 12 10 10 11 11 11 +instanceKlass java/io/ObjectOutputStream +instanceKlass org/apache/log4j/ConsoleAppender$SystemOutStream +instanceKlass org/apache/log4j/ConsoleAppender$SystemErrStream +instanceKlass org/apache/commons/io/output/NullOutputStream +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil$1 +instanceKlass org/tmatesoft/svn/core/internal/util/SVNLogStream +instanceKlass org/tmatesoft/svn/core/internal/util/SVNLogOutputStream +instanceKlass org/apache/commons/io/output/ByteArrayOutputStream +instanceKlass com/mathworks/util/Log$TextAreaOutputStream +instanceKlass java/io/ByteArrayOutputStream +instanceKlass java/io/FilterOutputStream +instanceKlass java/io/FileOutputStream +ciInstanceKlass java/io/OutputStream 1 1 34 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 7 12 12 12 10 10 10 10 10 +instanceKlass java/lang/ClassValue$ClassValueMap +ciInstanceKlass java/util/WeakHashMap 1 1 317 3 3 4 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 7 7 100 100 7 100 100 7 7 100 100 100 7 7 7 100 7 7 100 7 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/WeakHashMap NULL_KEY Ljava/lang/Object; java/lang/Object +ciInstanceKlass java/util/Arrays 1 1 797 3 8 8 8 8 8 8 8 8 100 100 100 100 100 100 7 100 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 100 100 100 7 7 100 100 100 7 7 100 100 7 100 100 100 7 100 100 100 100 100 7 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 7 7 100 100 100 100 100 100 100 100 7 100 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 15 15 15 15 15 16 18 18 18 18 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/Arrays $assertionsDisabled Z 1 +ciInstanceKlass java/io/PrintStream 1 1 279 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 100 100 7 100 100 7 7 7 100 100 100 100 100 100 100 100 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +instanceKlass java/nio/MappedByteBuffer +instanceKlass java/nio/HeapByteBuffer +ciInstanceKlass java/nio/ByteBuffer 1 1 251 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 100 7 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/nio/charset/UnsupportedCharsetException +instanceKlass java/security/InvalidParameterException +instanceKlass java/lang/IllegalThreadStateException +instanceKlass org/jdom/IllegalNameException +instanceKlass org/jdom/IllegalDataException +instanceKlass org/jdom/IllegalAddException +instanceKlass java/util/regex/PatternSyntaxException +instanceKlass java/util/IllegalFormatException +instanceKlass java/nio/file/InvalidPathException +instanceKlass java/lang/NumberFormatException +ciInstanceKlass java/lang/IllegalArgumentException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +ciInstanceKlass sun/security/util/Debug 1 1 294 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 100 100 100 100 7 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/security/util/Debug hexDigits [C 16 +ciInstanceKlass java/util/Locale 1 1 888 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 5 0 8 8 8 8 100 100 100 100 100 100 100 100 7 100 100 100 7 100 100 100 100 7 100 100 7 100 7 100 100 7 100 100 100 100 100 7 7 7 100 7 7 100 100 7 100 7 100 100 7 7 7 7 100 100 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/Locale LOCALECACHE Ljava/util/Locale$Cache; java/util/Locale$Cache +staticfield java/util/Locale ENGLISH Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale FRENCH Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale GERMAN Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale ITALIAN Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale JAPANESE Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale KOREAN Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale CHINESE Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale SIMPLIFIED_CHINESE Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale TRADITIONAL_CHINESE Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale FRANCE Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale GERMANY Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale ITALY Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale JAPAN Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale KOREA Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale CHINA Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale PRC Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale TAIWAN Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale UK Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale US Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale CANADA Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale CANADA_FRENCH Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale ROOT Ljava/util/Locale; java/util/Locale +staticfield java/util/Locale serialPersistentFields [Ljava/io/ObjectStreamField; 6 [Ljava/io/ObjectStreamField; +staticfield java/util/Locale $assertionsDisabled Z 1 +ciInstanceKlass java/util/concurrent/ConcurrentHashMap 1 1 1009 3 3 3 4 8 8 8 8 7 7 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 5 0 5 0 5 0 5 0 5 0 5 0 8 8 8 8 8 8 100 100 100 100 100 100 7 100 100 7 100 100 100 100 100 7 100 100 7 7 100 100 100 100 100 7 100 7 7 7 7 100 100 100 100 7 100 100 100 100 100 100 100 100 100 7 100 7 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 7 100 100 100 100 100 100 7 100 100 100 100 7 100 100 100 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/util/concurrent/ConcurrentHashMap MAX_RESIZERS I 65535 +staticfield java/util/concurrent/ConcurrentHashMap RESIZE_STAMP_SHIFT I 16 +staticfield java/util/concurrent/ConcurrentHashMap NCPU I 10 +staticfield java/util/concurrent/ConcurrentHashMap serialPersistentFields [Ljava/io/ObjectStreamField; 3 [Ljava/io/ObjectStreamField; +staticfield java/util/concurrent/ConcurrentHashMap U Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield java/util/concurrent/ConcurrentHashMap SIZECTL J 20 +staticfield java/util/concurrent/ConcurrentHashMap TRANSFERINDEX J 32 +staticfield java/util/concurrent/ConcurrentHashMap BASECOUNT J 24 +staticfield java/util/concurrent/ConcurrentHashMap CELLSBUSY J 36 +staticfield java/util/concurrent/ConcurrentHashMap CELLVALUE J 144 +staticfield java/util/concurrent/ConcurrentHashMap ABASE J 16 +staticfield java/util/concurrent/ConcurrentHashMap ASHIFT I 2 +instanceKlass java/util/concurrent/ConcurrentHashMap$ReservationNode +instanceKlass java/util/concurrent/ConcurrentHashMap$ForwardingNode +ciInstanceKlass java/util/concurrent/ConcurrentHashMap$Node 1 1 84 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 11 11 +instanceKlass sun/net/www/protocol/http/Handler +instanceKlass sun/net/www/protocol/jar/Handler +instanceKlass sun/net/www/protocol/file/Handler +ciInstanceKlass java/net/URLStreamHandler 1 1 227 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 7 7 100 100 7 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass sun/net/www/protocol/file/Handler 1 1 123 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 7 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/security/Principal 1 1 27 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 12 12 10 11 +ciInstanceKlass sun/misc/URLClassPath 1 1 496 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 100 7 100 100 7 100 100 7 100 100 7 100 7 100 100 100 7 100 7 100 7 100 7 7 100 7 100 100 100 7 100 7 7 7 7 100 100 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 1 1 1 +staticfield sun/misc/URLClassPath JAVA_VERSION Ljava/lang/String; "1.8.0_152" +staticfield sun/misc/URLClassPath DEBUG Z 0 +staticfield sun/misc/URLClassPath DEBUG_LOOKUP_CACHE Z 0 +staticfield sun/misc/URLClassPath DISABLE_JAR_CHECKING Z 0 +staticfield sun/misc/URLClassPath DISABLE_ACC_CHECKING Z 0 +ciInstanceKlass sun/net/www/protocol/jar/Handler 1 1 152 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 7 7 7 7 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/net/URLClassLoader$1 1 1 75 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 7 7 100 100 7 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 +instanceKlass sun/misc/URLClassPath$JarLoader +ciInstanceKlass sun/misc/URLClassPath$Loader 1 1 120 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 7 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 +ciInstanceKlass sun/misc/URLClassPath$JarLoader 1 1 449 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 7 7 100 100 7 100 100 100 100 7 7 100 100 7 100 100 7 7 7 100 7 7 100 7 7 100 7 7 100 7 7 7 7 7 7 7 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 +staticfield sun/misc/URLClassPath$JarLoader zipAccess Lsun/misc/JavaUtilZipFileAccess; java/util/zip/ZipFile$1 +instanceKlass java/util/jar/JarFile +ciInstanceKlass java/util/zip/ZipFile 1 1 509 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 5 0 5 0 5 0 5 0 100 100 7 100 100 100 100 100 100 7 100 100 100 7 100 100 7 7 7 100 100 7 100 100 100 7 100 7 7 100 7 100 7 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 1 1 1 +staticfield java/util/zip/ZipFile usemmap Z 1 +staticfield java/util/zip/ZipFile ensuretrailingslash Z 1 +instanceKlass sun/net/www/protocol/jar/URLJarFile +ciInstanceKlass java/util/jar/JarFile 1 1 447 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 100 7 7 100 7 7 100 7 7 100 100 100 7 100 7 100 7 100 100 100 7 7 7 7 7 7 100 7 7 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 1 1 1 +staticfield java/util/jar/JarFile CLASSPATH_CHARS [C 10 +staticfield java/util/jar/JarFile CLASSPATH_LASTOCC [I 128 +staticfield java/util/jar/JarFile CLASSPATH_OPTOSFT [I 10 +ciInstanceKlass java/util/zip/ZipCoder 1 1 191 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 100 100 7 7 7 100 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 +ciInstanceKlass sun/misc/PerfCounter 1 1 149 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 7 100 7 7 7 7 7 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 1 1 +staticfield sun/misc/PerfCounter perf Lsun/misc/Perf; sun/misc/Perf +ciInstanceKlass sun/misc/PerfCounter$CoreCounters 1 1 50 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 1 1 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 1 +staticfield sun/misc/PerfCounter$CoreCounters pdt Lsun/misc/PerfCounter; sun/misc/PerfCounter +staticfield sun/misc/PerfCounter$CoreCounters lc Lsun/misc/PerfCounter; sun/misc/PerfCounter +staticfield sun/misc/PerfCounter$CoreCounters lct Lsun/misc/PerfCounter; sun/misc/PerfCounter +staticfield sun/misc/PerfCounter$CoreCounters rcbt Lsun/misc/PerfCounter; sun/misc/PerfCounter +staticfield sun/misc/PerfCounter$CoreCounters zfc Lsun/misc/PerfCounter; sun/misc/PerfCounter +staticfield sun/misc/PerfCounter$CoreCounters zfot Lsun/misc/PerfCounter; sun/misc/PerfCounter +instanceKlass java/nio/DirectLongBufferU +ciInstanceKlass java/nio/LongBuffer 1 1 174 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 100 100 100 100 7 100 100 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/nio/DirectLongBufferU 1 1 198 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 7 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/nio/DirectLongBufferU unsafe Lsun/misc/Unsafe; sun/misc/Unsafe +staticfield java/nio/DirectLongBufferU arrayBaseOffset J 16 +staticfield java/nio/DirectLongBufferU unaligned Z 1 +staticfield java/nio/DirectLongBufferU $assertionsDisabled Z 1 +instanceKlass java/util/jar/JarEntry +ciInstanceKlass java/util/zip/ZipEntry 1 1 223 3 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 5 0 5 0 5 0 5 0 100 7 100 100 100 100 7 7 100 7 100 100 7 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry +instanceKlass java/util/jar/JarFile$JarFileEntry +ciInstanceKlass java/util/jar/JarEntry 1 1 44 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 1 1 1 1 1 1 12 12 12 12 12 12 9 9 9 10 10 10 10 10 +ciInstanceKlass java/util/jar/JarFile$JarFileEntry 1 1 79 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 100 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 1 +ciInstanceKlass java/util/zip/ZipFile$ZipFileInputStream 1 1 94 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 7 7 7 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 11 1 +instanceKlass java/net/UnknownServiceException +instanceKlass org/apache/http/ContentTooLongException +instanceKlass java/nio/channels/ClosedChannelException +instanceKlass org/apache/http/client/ClientProtocolException +instanceKlass org/apache/http/ConnectionClosedException +instanceKlass org/apache/http/conn/UnsupportedSchemeException +instanceKlass org/apache/http/nio/reactor/IOReactorException +instanceKlass com/google/gson/stream/MalformedJsonException +instanceKlass java/rmi/RemoteException +instanceKlass java/net/UnknownHostException +instanceKlass java/io/InterruptedIOException +instanceKlass javax/net/ssl/SSLException +instanceKlass org/apache/commons/httpclient/HttpException +instanceKlass java/net/SocketException +instanceKlass java/util/InvalidPropertiesFormatException +instanceKlass java/nio/file/FileSystemException +instanceKlass org/apache/commons/io/FileExistsException +instanceKlass java/io/ObjectStreamException +instanceKlass java/io/CharConversionException +instanceKlass org/apache/xerces/util/URI$MalformedURIException +instanceKlass com/google/gson/stream/MalformedJsonException +instanceKlass java/io/EOFException +instanceKlass java/net/MalformedURLException +instanceKlass java/io/UnsupportedEncodingException +instanceKlass java/io/FileNotFoundException +ciInstanceKlass java/io/IOException 1 1 24 1 1 1 1 1 1 1 1 1 1 5 0 100 7 1 12 12 12 12 10 10 10 10 +ciInstanceKlass java/util/zip/Inflater 1 1 150 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 100 100 100 7 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield java/util/zip/Inflater defaultBuf [B 0 +staticfield java/util/zip/Inflater $assertionsDisabled Z 1 +ciInstanceKlass java/util/zip/ZipFile$ZipFileInflaterInputStream 1 1 109 3 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 7 100 100 7 7 7 7 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 11 1 1 +ciInstanceKlass sun/misc/IOUtils 1 1 65 3 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 100 100 7 100 1 1 1 1 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass sun/misc/URLClassPath$JarLoader$2 +ciInstanceKlass sun/misc/Resource 1 1 96 3 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 7 7 100 7 7 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass sun/misc/URLClassPath$JarLoader$2 1 1 80 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 7 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 1 +ciInstanceKlass java/util/jar/Attributes 1 1 248 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 100 100 7 7 100 100 7 7 7 7 7 7 7 100 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 +ciInstanceKlass java/util/jar/Manifest$FastInputStream 1 1 76 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 100 7 100 7 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 1 +ciInstanceKlass java/util/jar/Attributes$Name 1 1 169 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 7 7 7 100 7 7 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 11 +staticfield java/util/jar/Attributes$Name MANIFEST_VERSION Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name SIGNATURE_VERSION Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name CONTENT_TYPE Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name CLASS_PATH Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name MAIN_CLASS Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name SEALED Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name EXTENSION_LIST Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name EXTENSION_NAME Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name EXTENSION_INSTALLATION Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name IMPLEMENTATION_TITLE Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name IMPLEMENTATION_VERSION Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name IMPLEMENTATION_VENDOR Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name IMPLEMENTATION_VENDOR_ID Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name IMPLEMENTATION_URL Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name SPECIFICATION_TITLE Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name SPECIFICATION_VERSION Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +staticfield java/util/jar/Attributes$Name SPECIFICATION_VENDOR Ljava/util/jar/Attributes$Name; java/util/jar/Attributes$Name +ciInstanceKlass java/util/jar/JarVerifier 1 1 549 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 7 7 100 7 7 100 100 7 100 100 7 7 7 100 7 100 100 7 100 7 7 100 7 100 100 7 100 7 100 100 7 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 +staticfield java/util/jar/JarVerifier debug Lsun/security/util/Debug; null +ciInstanceKlass java/security/CodeSigner 1 1 107 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 7 100 100 7 100 100 100 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 +ciInstanceKlass java/util/jar/JarVerifier$3 1 1 33 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 7 1 1 1 12 12 12 9 10 10 10 +instanceKlass sun/security/util/DerOutputStream +instanceKlass com/mathworks/mvm/helpers/MatlabPrintStreamManager$MatlabStream +ciInstanceKlass java/io/ByteArrayOutputStream 1 1 107 3 3 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 100 100 100 100 100 100 7 7 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +ciInstanceKlass java/lang/Package 1 1 377 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 100 7 7 7 100 100 100 7 7 7 7 7 100 100 7 7 100 7 7 7 7 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 +ciInstanceKlass sun/security/util/SignatureFileVerifier 1 1 598 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 100 7 100 7 7 100 100 7 100 100 100 7 100 7 100 100 100 100 100 7 7 7 7 100 7 7 7 7 7 7 7 7 7 7 100 7 7 7 7 7 7 7 7 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 1 +staticfield sun/security/util/SignatureFileVerifier debug Lsun/security/util/Debug; null +staticfield sun/security/util/SignatureFileVerifier JAR_DISABLED_CHECK Lsun/security/util/DisabledAlgorithmConstraints; sun/security/util/DisabledAlgorithmConstraints +staticfield sun/security/util/SignatureFileVerifier ATTR_DIGEST Ljava/lang/String; "-DIGEST-MANIFEST-MAIN-ATTRIBUTES" +staticfield sun/security/util/SignatureFileVerifier hexc [C 16 +ciInstanceKlass sun/security/util/ManifestEntryVerifier 1 1 282 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 100 7 100 7 100 100 7 100 7 7 7 7 7 7 7 100 7 7 7 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 1 1 +staticfield sun/security/util/ManifestEntryVerifier debug Lsun/security/util/Debug; null +staticfield sun/security/util/ManifestEntryVerifier hexc [C 16 +ciInstanceKlass sun/nio/ByteBuffered 0 0 10 1 1 1 1 1 100 100 100 1 +instanceKlass javax/crypto/CryptoPermissionCollection +instanceKlass javax/crypto/CryptoAllPermissionCollection +instanceKlass javax/crypto/CryptoPermissions +instanceKlass java/security/AllPermissionCollection +instanceKlass java/security/BasicPermissionCollection +instanceKlass java/io/FilePermissionCollection +instanceKlass java/security/Permissions +ciInstanceKlass java/security/PermissionCollection 1 1 69 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 7 100 100 7 100 100 1 1 1 1 1 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 11 11 +ciInstanceKlass java/lang/AssertionError 0 0 62 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 100 100 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/security/AccessControlException +ciInstanceKlass java/lang/SecurityException 0 0 24 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 12 12 12 12 10 10 10 10 +instanceKlass java/lang/StringIndexOutOfBoundsException +instanceKlass java/lang/ArrayIndexOutOfBoundsException +ciInstanceKlass java/lang/IndexOutOfBoundsException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass java/lang/reflect/WeakCache$CacheKey 1 1 82 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 100 7 100 100 100 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 11 11 11 11 11 1 +staticfield java/lang/reflect/WeakCache$CacheKey NULL_KEY Ljava/lang/Object; java/lang/Object +instanceKlass java/util/ArrayList$ListItr +ciInstanceKlass java/util/ArrayList$Itr 1 1 84 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 7 7 7 100 100 100 100 100 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 11 1 +ciInstanceKlass com/mathworks/services/Prefs$PrefsProperties 1 1 68 10 10 10 10 10 10 7 10 10 10 7 7 1 1 1 1 1 1 1 1 1 100 100 100 100 1 1 1 100 1 1 1 1 12 7 12 12 12 12 1 12 12 100 12 1 1 1 1 1 1 1 1 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass sun/net/www/protocol/jar/URLJarFile 1 1 254 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 7 100 100 7 100 100 100 7 7 7 7 7 7 7 100 7 7 100 7 7 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 1 1 +ciInstanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry 1 1 67 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 100 100 100 100 7 100 7 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 9 9 10 10 10 10 10 10 10 10 10 11 1 +instanceKlass com/mathworks/util/QueueEvent$QueueTarget +instanceKlass java/awt/Canvas +instanceKlass javax/swing/ImageIcon$3 +instanceKlass javax/swing/ImageIcon$2$1 +instanceKlass java/awt/Container +ciInstanceKlass java/awt/Component 1 1 2811 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 4 4 4 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 100 100 7 100 100 100 100 7 7 100 100 100 100 100 7 100 7 100 100 100 7 100 7 100 100 7 100 100 100 100 7 100 100 100 100 7 7 100 100 7 100 7 100 7 7 100 100 100 100 100 7 100 100 100 100 100 7 100 7 100 100 7 7 7 7 7 7 7 7 7 7 7 7 7 100 7 7 7 7 7 100 100 100 100 7 100 100 100 100 7 100 7 100 100 7 100 100 100 100 100 100 100 100 7 100 100 7 100 7 100 100 100 100 100 100 100 7 100 7 100 100 100 100 7 100 100 7 100 100 100 7 7 100 7 7 100 7 100 7 100 7 100 7 100 7 100 100 7 100 7 100 7 7 100 7 7 100 7 100 100 100 100 100 100 100 7 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +staticfield java/awt/Component log Lsun/util/logging/PlatformLogger; sun/util/logging/PlatformLogger +staticfield java/awt/Component eventLog Lsun/util/logging/PlatformLogger; sun/util/logging/PlatformLogger +staticfield java/awt/Component focusLog Lsun/util/logging/PlatformLogger; sun/util/logging/PlatformLogger +staticfield java/awt/Component mixingLog Lsun/util/logging/PlatformLogger; sun/util/logging/PlatformLogger +staticfield java/awt/Component focusTraversalKeyPropertyNames [Ljava/lang/String; 4 [Ljava/lang/String; +staticfield java/awt/Component LOCK Ljava/lang/Object; java/awt/Component$AWTTreeLock +staticfield java/awt/Component coalesceMap Ljava/util/Map; java/util/WeakHashMap +staticfield java/awt/Component coalesceEventsParams [Ljava/lang/Class; 2 [Ljava/lang/Class; +staticfield java/awt/Component $assertionsDisabled Z 1 +ciInstanceKlass org/apache/log4j/CategoryKey 1 1 72 10 100 100 10 10 10 9 10 9 9 8 10 10 7 10 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 12 1 1 100 12 12 12 12 7 12 12 12 1 12 12 1 12 1 1 1 1 1 1 1 1 1 1 +ciInstanceKlass sun/security/jca/ProviderConfig 1 1 186 8 8 8 8 8 8 8 8 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 100 7 100 7 100 100 7 7 7 100 7 100 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +staticfield sun/security/jca/ProviderConfig debug Lsun/security/util/Debug; null +staticfield sun/security/jca/ProviderConfig CL_STRING [Ljava/lang/Class; 1 [Ljava/lang/Class; +ciInstanceKlass java/io/EOFException 1 1 18 1 1 1 1 1 1 1 1 1 5 0 100 7 12 12 10 10 +ciInstanceKlass javax/swing/KeyboardManager$ComponentKeyStrokePair 1 1 35 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 7 1 1 12 12 12 12 12 12 9 9 9 10 10 10 1 +ciInstanceKlass java/lang/StringIndexOutOfBoundsException 0 0 35 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 1 1 12 12 12 12 12 10 10 10 10 10 10 +ciInstanceKlass java/security/cert/CertificateFactory 1 1 122 8 8 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 100 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 +ciInstanceKlass sun/security/x509/X509CertImpl 1 1 1052 3 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 100 100 100 100 100 100 100 100 100 100 100 100 7 100 7 7 100 7 7 100 100 100 100 100 7 100 100 7 100 7 7 7 100 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 7 7 100 100 100 7 100 7 100 100 7 100 100 100 100 100 7 100 100 100 100 100 100 100 100 100 100 100 7 100 7 100 7 100 100 100 100 7 100 100 100 100 100 7 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 11 15 15 16 16 18 1 +instanceKlass sun/security/provider/certpath/X509CertPath +ciInstanceKlass java/security/cert/CertPath 1 1 137 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 100 7 100 100 100 7 100 100 100 100 100 100 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 1 +ciInstanceKlass sun/security/provider/certpath/X509CertPath 1 1 307 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5 0 8 100 100 100 100 100 100 100 100 100 100 100 7 100 100 100 7 7 100 100 7 7 7 100 100 100 100 7 100 100 100 100 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 +staticfield sun/security/provider/certpath/X509CertPath encodingList Ljava/util/Collection; java/util/Collections$UnmodifiableCollection +ciInstanceKlass java/util/jar/JarVerifier$VerifierStream 1 1 72 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 100 7 7 7 7 100 7 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 10 10 10 10 10 10 10 10 10 10 1 +ciInstanceKlass java/nio/file/attribute/FileTime 1 1 279 3 3 8 8 8 8 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 100 100 100 100 7 100 100 7 100 100 100 100 7 7 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 +instanceKlass java/net/SocketTimeoutException +instanceKlass org/apache/commons/httpclient/ConnectTimeoutException +ciInstanceKlass java/io/InterruptedIOException 0 0 22 1 1 1 1 1 1 1 1 1 1 1 5 0 100 100 12 12 12 9 10 10 +instanceKlass java/security/cert/CertificateParsingException +ciInstanceKlass java/security/cert/CertificateException 0 0 24 1 1 1 1 1 1 1 1 1 1 5 0 100 100 1 12 12 12 12 10 10 10 10 +compile java/net/URLClassLoader$1 run ()Ljava/lang/Object; -1 4 inline 234 0 -1 java/net/URLClassLoader$1 run ()Ljava/lang/Object; 1 1 java/net/URLClassLoader$1 run ()Ljava/lang/Class; 2 8 java/lang/String replace (CC)Ljava/lang/String; 3 121 java/lang/String ([CZ)V 4 1 java/lang/Object ()V 2 13 java/lang/String concat (Ljava/lang/String;)Ljava/lang/String; 3 1 java/lang/String length ()I 3 24 java/util/Arrays copyOf ([CI)[C 3 33 java/lang/String getChars ([CI)V 3 43 java/lang/String ([CZ)V 4 1 java/lang/Object ()V 2 21 java/net/URLClassLoader access$000 (Ljava/net/URLClassLoader;)Lsun/misc/URLClassPath; 2 43 java/net/URLClassLoader access$100 (Ljava/net/URLClassLoader;Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 3 3 java/net/URLClassLoader defineClass (Ljava/lang/String;Lsun/misc/Resource;)Ljava/lang/Class; 4 7 java/lang/String lastIndexOf (I)I 5 9 java/lang/String lastIndexOf (II)I 4 13 sun/misc/URLClassPath$JarLoader$2 getCodeSourceURL ()Ljava/net/URL; 5 4 sun/misc/URLClassPath$JarLoader access$600 (Lsun/misc/URLClassPath$JarLoader;)Ljava/net/URL; 4 28 java/lang/String substring (II)Ljava/lang/String; 5 75 java/lang/String ([CII)V 6 1 java/lang/Object ()V 6 75 java/util/Arrays copyOfRange ([CII)[C 4 34 sun/misc/URLClassPath$JarLoader$2 getManifest ()Ljava/util/jar/Manifest; 5 4 sun/misc/URLClassPath$JarLoader access$700 (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/jar/JarFile; 5 7 java/util/jar/JarFile getManifest ()Ljava/util/jar/Manifest; 6 1 java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 7 11 java/lang/ref/SoftReference get ()Ljava/lang/Object; 7 27 java/util/jar/JarFile getManEntry ()Ljava/util/jar/JarEntry; 8 11 java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 9 2 java/util/jar/JarFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 10 16 java/util/jar/JarFile$JarFileEntry (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V 8 63 java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 9 2 java/util/jar/JarFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 10 16 java/util/jar/JarFile$JarFileEntry (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V 7 44 java/util/jar/JarFile getBytes (Ljava/util/zip/ZipEntry;)[B 8 10 java/util/zip/ZipEntry getSize ()J 7 57 java/io/ByteArrayInputStream ([B)V 8 1 java/io/InputStream ()V 9 1 java/lang/Object ()V 7 60 java/util/jar/Manifest (Ljava/io/InputStream;)V 8 1 java/lang/Object ()V 8 9 java/util/jar/Attributes ()V 9 3 java/util/jar/Attributes (I)V 10 1 java/lang/Object ()V 10 10 java/util/HashMap (I)V 8 20 java/util/HashMap ()V 9 1 java/util/AbstractMap ()V 10 1 java/lang/Object ()V 7 77 java/util/jar/JarVerifier ([B)V 8 1 java/lang/Object ()V 8 29 java/lang/Object ()V 8 40 java/util/HashMap ()V 9 1 java/util/AbstractMap ()V 10 1 java/lang/Object ()V 8 51 java/util/HashMap ()V 9 1 java/util/AbstractMap ()V 10 1 java/lang/Object ()V 8 71 java/util/jar/JarVerifier$3 (Ljava/util/jar/JarVerifier;)V 9 6 java/lang/Object ()V 8 87 java/util/Hashtable ()V 9 5 java/util/Hashtable (IF)V 10 1 java/util/Dictionary ()V 10 47 java/lang/Float isNaN (F)Z 10 106 java/lang/Math min (FF)F 8 98 java/util/Hashtable ()V 9 5 java/util/Hashtable (IF)V 10 1 java/util/Dictionary ()V 10 47 java/lang/Float isNaN (F)Z 10 106 java/lang/Math min (FF)F 8 111 java/util/Hashtable (I)V 9 4 java/util/Hashtable (IF)V 10 1 java/util/Dictionary ()V 10 47 java/lang/Float isNaN (F)Z 10 106 java/lang/Math min (FF)F 8 122 java/util/ArrayList ()V 9 1 java/util/AbstractList ()V 10 1 java/util/AbstractCollection ()V 8 133 java/io/ByteArrayOutputStream ()V 9 3 java/io/ByteArrayOutputStream (I)V 10 1 java/io/OutputStream ()V 8 144 java/util/ArrayList ()V 9 1 java/util/AbstractList ()V 10 1 java/util/AbstractCollection ()V 7 95 java/util/jar/Manifest (Ljava/io/InputStream;)V 8 1 java/lang/Object ()V 8 9 java/util/jar/Attributes ()V 9 3 java/util/jar/Attributes (I)V 10 1 java/lang/Object ()V 10 10 java/util/HashMap (I)V 8 20 java/util/HashMap ()V 9 1 java/util/AbstractMap ()V 10 1 java/lang/Object ()V 7 105 java/lang/ref/SoftReference (Ljava/lang/Object;)V 8 2 java/lang/ref/Reference (Ljava/lang/Object;)V 9 3 java/lang/ref/Reference (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V 10 1 java/lang/Object ()V 4 50 sun/misc/Resource getByteBuffer ()Ljava/nio/ByteBuffer; 5 1 sun/misc/Resource cachedInputStream ()Ljava/io/InputStream; 6 9 sun/misc/URLClassPath$JarLoader$2 getInputStream ()Ljava/io/InputStream; 7 4 sun/misc/URLClassPath$JarLoader access$700 (Lsun/misc/URLClassPath$JarLoader;)Ljava/util/jar/JarFile; 7 11 java/util/jar/JarFile getInputStream (Ljava/util/zip/ZipEntry;)Ljava/io/InputStream; 8 1 java/util/jar/JarFile maybeInstantiateVerifier ()V 9 45 java/lang/String endsWith (Ljava/lang/String;)Z 10 13 java/lang/String startsWith (Ljava/lang/String;I)Z 9 54 java/lang/String endsWith (Ljava/lang/String;)Z 10 13 java/lang/String startsWith (Ljava/lang/String;I)Z 9 63 java/lang/String endsWith (Ljava/lang/String;)Z 10 13 java/lang/String startsWith (Ljava/lang/String;I)Z 9 72 java/lang/String endsWith (Ljava/lang/String;)Z 10 13 java/lang/String startsWith (Ljava/lang/String;I)Z 9 79 java/util/jar/JarFile getManifest ()Ljava/util/jar/Manifest; 10 1 java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 8 51 java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 9 11 java/lang/ref/SoftReference get ()Ljava/lang/Object; 9 27 java/util/jar/JarFile getManEntry ()Ljava/util/jar/JarEntry; 10 11 java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 10 63 java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 9 44 java/util/jar/JarFile getBytes (Ljava/util/zip/ZipEntry;)[B 10 10 java/util/zip/ZipEntry getSize ()J 9 57 java/io/ByteArrayInputStream ([B)V 10 1 java/io/InputStream ()V 9 60 java/util/jar/Manifest (Ljava/io/InputStream;)V 10 1 java/lang/Object ()V 10 9 java/util/jar/Attributes ()V 10 20 java/util/HashMap ()V 9 77 java/util/jar/JarVerifier ([B)V 10 1 java/lang/Object ()V 10 29 java/lang/Object ()V 10 40 java/util/HashMap ()V 10 51 java/util/HashMap ()V 10 71 java/util/jar/JarVerifier$3 (Ljava/util/jar/JarVerifier;)V 10 87 java/util/Hashtable ()V 10 98 java/util/Hashtable ()V 10 111 java/util/Hashtable (I)V 10 122 java/util/ArrayList ()V 10 133 java/io/ByteArrayOutputStream ()V 10 144 java/util/ArrayList ()V 9 95 java/util/jar/Manifest (Ljava/io/InputStream;)V 10 1 java/lang/Object ()V 10 9 java/util/jar/Attributes ()V 10 20 java/util/HashMap ()V 9 105 java/lang/ref/SoftReference (Ljava/lang/Object;)V 10 2 java/lang/ref/Reference (Ljava/lang/Object;)V 8 70 java/util/zip/ZipEntry getName ()Ljava/lang/String; 8 73 java/util/jar/JarFile getJarEntry (Ljava/lang/String;)Ljava/util/jar/JarEntry; 9 2 java/util/jar/JarFile getEntry (Ljava/lang/String;)Ljava/util/zip/ZipEntry; 10 16 java/util/jar/JarFile$JarFileEntry (Ljava/util/jar/JarFile;Ljava/util/zip/ZipEntry;)V 8 85 java/util/jar/JarVerifier$VerifierStream (Ljava/util/jar/Manifest;Ljava/util/jar/JarEntry;Ljava/io/InputStream;Ljava/util/jar/JarVerifier;)V 9 1 java/io/InputStream ()V 10 1 java/lang/Object ()V 9 21 sun/security/util/ManifestEntryVerifier (Ljava/util/jar/Manifest;)V 10 1 java/lang/Object ()V 10 26 java/util/HashMap (I)V 10 37 java/util/ArrayList ()V 10 48 java/util/ArrayList ()V 9 41 java/util/zip/ZipEntry getSize ()J 4 103 sun/misc/URLClassPath$JarLoader$2 getCodeSigners ()[Ljava/security/CodeSigner; 5 4 java/util/jar/JarFile$JarFileEntry getCodeSigners ()[Ljava/security/CodeSigner; 6 4 java/util/jar/JarFile access$200 (Ljava/util/jar/JarFile;)V 7 1 java/util/jar/JarFile maybeInstantiateVerifier ()V 8 45 java/lang/String endsWith (Ljava/lang/String;)Z 9 13 java/lang/String startsWith (Ljava/lang/String;I)Z 8 54 java/lang/String endsWith (Ljava/lang/String;)Z 9 13 java/lang/String startsWith (Ljava/lang/String;I)Z 8 63 java/lang/String endsWith (Ljava/lang/String;)Z 9 13 java/lang/String startsWith (Ljava/lang/String;I)Z 8 72 java/lang/String endsWith (Ljava/lang/String;)Z 9 13 java/lang/String startsWith (Ljava/lang/String;I)Z 8 79 java/util/jar/JarFile getManifest ()Ljava/util/jar/Manifest; 9 1 java/util/jar/JarFile getManifestFromReference ()Ljava/util/jar/Manifest; 10 11 java/lang/ref/SoftReference get ()Ljava/lang/Object; 10 27 java/util/jar/JarFile getManEntry ()Ljava/util/jar/JarEntry; 10 44 java/util/jar/JarFile getBytes (Ljava/util/zip/ZipEntry;)[B 10 57 java/io/ByteArrayInputStream ([B)V 10 60 java/util/jar/Manifest (Ljava/io/InputStream;)V 10 77 java/util/jar/JarVerifier ([B)V 10 95 java/util/jar/Manifest (Ljava/io/InputStream;)V 10 105 java/lang/ref/SoftReference (Ljava/lang/Object;)V 6 31 java/util/jar/JarFile access$300 (Ljava/util/jar/JarFile;)Ljava/util/jar/JarVerifier; 4 116 java/security/CodeSource (Ljava/net/URL;[Ljava/security/CodeSigner;)V 5 1 java/lang/Object ()V 4 121 sun/misc/PerfCounter getReadClassBytesTime ()Lsun/misc/PerfCounter; 4 125 sun/misc/PerfCounter addElapsedTimeFrom (J)V 5 6 sun/misc/PerfCounter add (J)V 6 1 sun/misc/PerfCounter get ()J 7 5 java/nio/DirectLongBufferU get (I)J 8 6 java/nio/Buffer checkIndex (I)I 8 9 java/nio/DirectLongBufferU ix (I)J 6 13 java/nio/DirectLongBufferU put (IJ)Ljava/nio/LongBuffer; 7 6 java/nio/Buffer checkIndex (I)I 7 9 java/nio/DirectLongBufferU ix (I)J 4 138 java/security/SecureClassLoader defineClass (Ljava/lang/String;[BIILjava/security/CodeSource;)Ljava/lang/Class; 5 12 java/lang/ClassLoader defineClass (Ljava/lang/String;[BIILjava/security/ProtectionDomain;)Ljava/lang/Class; 6 4 java/lang/ClassLoader preDefineClass (Ljava/lang/String;Ljava/security/ProtectionDomain;)Ljava/security/ProtectionDomain; 7 2 java/lang/ClassLoader checkName (Ljava/lang/String;)Z 8 5 java/lang/String length ()I 8 16 java/lang/String indexOf (I)I 9 3 java/lang/String indexOf (II)I 8 23 sun/misc/VM allowArraySyntax ()Z 8 31 java/lang/String charAt (I)C 7 42 java/lang/String startsWith (Ljava/lang/String;)Z 8 3 java/lang/String startsWith (Ljava/lang/String;I)Z 7 101 java/security/ProtectionDomain getCodeSource ()Ljava/security/CodeSource; 7 104 java/lang/ClassLoader checkCerts (Ljava/lang/String;Ljava/security/CodeSource;)V 8 3 java/lang/String lastIndexOf (I)I 9 9 java/lang/String lastIndexOf (II)I 8 20 java/lang/String substring (II)Ljava/lang/String; 9 75 java/lang/String ([CII)V 10 1 java/lang/Object ()V 10 75 java/util/Arrays copyOfRange ([CII)[C 8 33 java/security/CodeSource getCertificates ()[Ljava/security/cert/Certificate; 9 29 java/util/ArrayList ()V 10 1 java/util/AbstractList ()V 9 51 java/security/CodeSigner getSignerCertPath ()Ljava/security/cert/CertPath; 9 54 sun/security/provider/certpath/X509CertPath getCertificates ()Ljava/util/List; 9 70 java/util/ArrayList size ()I 8 59 java/util/Hashtable get (Ljava/lang/Object;)Ljava/lang/Object; 9 6 java/lang/String hashCode ()I 8 138 java/util/concurrent/ConcurrentHashMap putIfAbsent (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 8 156 java/lang/ClassLoader compareCerts ([Ljava/security/cert/Certificate;[Ljava/security/cert/Certificate;)Z 6 12 java/lang/ClassLoader defineClassSourceLocation (Ljava/security/ProtectionDomain;)Ljava/lang/String; 7 1 java/security/ProtectionDomain getCodeSource ()Ljava/security/CodeSource; 7 12 java/security/CodeSource getLocation ()Ljava/net/URL; 7 19 java/security/CodeSource getLocation ()Ljava/net/URL; 7 22 java/net/URL toString ()Ljava/lang/String; 8 1 java/net/URL toExternalForm ()Ljava/lang/String; 6 37 java/lang/ClassLoader postDefineClass (Ljava/lang/Class;Ljava/security/ProtectionDomain;)V 7 1 java/security/ProtectionDomain getCodeSource ()Ljava/security/CodeSource; 7 8 java/security/ProtectionDomain getCodeSource ()Ljava/security/CodeSource; 7 11 java/security/CodeSource getCertificates ()[Ljava/security/cert/Certificate; 8 51 java/security/CodeSigner getSignerCertPath ()Ljava/security/cert/CertPath; 8 54 sun/security/provider/certpath/X509CertPath getCertificates ()Ljava/util/List; 8 70 java/util/ArrayList size ()I 7 22 java/lang/ClassLoader setSigners (Ljava/lang/Class;[Ljava/lang/Object;)V diff --git a/downloaded/replay_pid7616.log b/downloaded/replay_pid7616.log new file mode 100644 index 0000000..4db778d --- /dev/null +++ b/downloaded/replay_pid7616.log @@ -0,0 +1,7040 @@ +JvmtiExport can_access_local_variables 0 +JvmtiExport can_hotswap_or_post_breakpoint 0 +JvmtiExport can_post_on_exceptions 0 +# 252 ciObject found +ciMethod java/lang/Object getClass ()Ljava/lang/Class; 2049 1 256 0 -1 +ciMethod java/lang/Class isInstance (Ljava/lang/Object;)Z 2049 1 256 0 -1 +ciMethod java/lang/Class getName ()Ljava/lang/String; 633 1 38273 0 -1 +ciMethod java/lang/System arraycopy (Ljava/lang/Object;ILjava/lang/Object;II)V 93185 1 11648 0 -1 +ciMethod java/lang/Throwable getMessage ()Ljava/lang/String; 297 1 36 0 -1 +ciMethod java/lang/RuntimeException (Ljava/lang/Throwable;)V 0 0 1 0 -1 +ciMethod java/lang/ClassCastException ()V 0 0 1 0 -1 +ciMethod java/util/Hashtable ()V 2121 1 6467 0 -1 +ciMethod java/util/Hashtable put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 2337 953 5739 0 -1 +ciMethod java/lang/StringBuilder ()V 4097 1 88185 0 -1 +ciMethod java/lang/StringBuilder append (Ljava/lang/String;)Ljava/lang/StringBuilder; 4097 1 186351 0 -1 +ciMethod java/lang/StringBuilder toString ()Ljava/lang/String; 4097 1 90098 0 -1 +ciMethod sun/misc/Unsafe compareAndSwapObject (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z 2049 1 256 0 -1 +ciMethod java/io/InputStream read ()I 0 0 1 0 -1 +ciMethod java/io/InputStream read ([BII)I 0 0 1 0 -1 +ciMethod java/io/InputStream available ()I 0 0 1 0 -1 +ciMethod java/io/InputStream close ()V 0 0 1 0 -1 +ciMethod java/lang/NullPointerException ()V 0 0 3 0 -1 +ciMethod java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 4097 1 5278 0 0 +ciMethod java/io/BufferedInputStream getBufIfOpen ()[B 3449 1 35812 0 64 +ciMethod java/io/BufferedInputStream (Ljava/io/InputStream;)V 4089 1 2192 0 -1 +ciMethod java/io/BufferedInputStream fill ()V 2465 1 4014 0 0 +ciMethod java/io/BufferedInputStream read ()I 3033 1 5509 0 960 +ciMethod java/io/BufferedInputStream read1 ([BII)I 3633 1 12155 0 0 +ciMethod java/io/BufferedInputStream read ([BII)I 2073 1561 12047 0 0 +ciMethod java/io/FilterInputStream read ([BII)I 2513 1 5439 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 0 0 1 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl accessCheck (Ljava/lang/Object;)V 9 1 611 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl throwAccessCheckException (Ljava/lang/Object;)V 0 0 1 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl valueCheck (Ljava/lang/Object;)V 9 1 611 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl throwCCE ()V 0 0 1 0 -1 +ciMethod java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 9 1 611 0 0 +ciMethodData sun/awt/image/PNGImageDecoder property (Ljava/lang/String;Ljava/lang/Object;)V 1 619 orig 264 136 98 31 106 0 0 0 0 120 169 131 104 0 0 0 0 216 1 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 49 16 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 16 0x10007 0x206 0x20 0x0 0x90007 0x94 0x30 0x172 0x110002 0x172 0x1d0005 0x0 0x6b4a7a90 0x206 0x0 0x0 oops 1 12 java/util/Hashtable +ciMethod java/io/IOException (Ljava/lang/String;)V 9 1 189 0 -1 +ciMethod java/util/zip/Inflater ()V 825 1 436 0 -1 +ciMethod java/util/zip/Inflater getRemaining ()I 2081 1 645 0 -1 +ciMethod java/util/zip/Inflater needsInput ()Z 2201 1 3656 0 -1 +ciMethod java/util/zip/Inflater needsDictionary ()Z 2201 1 3656 0 -1 +ciMethod java/util/zip/Inflater finished ()Z 2761 1 4349 0 -1 +ciMethod java/util/zip/Inflater inflate ([BII)I 3897 1 5632 0 -1 +ciMethod java/util/zip/Inflater getBytesRead ()J 3089 1 758 0 -1 +ciMethod java/util/zip/Inflater getBytesWritten ()J 3081 1 1777 0 -1 +ciMethod java/util/zip/InflaterInputStream ensureOpen ()V 4097 1 8396 0 -1 +ciMethod java/util/zip/InflaterInputStream (Ljava/io/InputStream;Ljava/util/zip/Inflater;)V 825 1 436 0 -1 +ciMethod java/util/zip/InflaterInputStream read ([BII)I 3281 2193 5557 0 3104 +ciMethod java/util/zip/InflaterInputStream fill ()V 2137 1 2498 0 -1 +ciMethod java/util/jar/JarVerifier update (I[BIILsun/security/util/ManifestEntryVerifier;)V 81 1 1295 0 -1 +ciMethod java/lang/IllegalAccessException (Ljava/lang/String;)V 0 0 1 0 -1 +ciMethod java/lang/ArrayIndexOutOfBoundsException ()V 0 0 1 0 -1 +ciMethod java/lang/IndexOutOfBoundsException ()V 0 0 1 0 -1 +ciMethodData sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[III)I 2 5690 orig 264 136 98 31 106 0 0 0 0 88 217 131 104 0 0 0 0 80 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 209 169 0 0 209 169 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 14 0 2 0 0 0 200 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 25 0x50005 0x0 0x13e8cb630 0x153a 0x0 0x0 0x110005 0x0 0x13dd5a090 0x2a74 0x0 0x0 0x170007 0x153a 0x68 0x153a 0x2c0005 0x0 0x13e8cb840 0x153a 0x0 0x0 0x340003 0x153a 0xffffffffffffff80 oops 3 2 sun/awt/image/URLImageSource 8 sun/awt/image/PNGImageDecoder 18 sun/awt/image/ImageRepresentation +ciMethod java/util/jar/JarInputStream read ([BII)I 4097 1 4140 0 0 +ciMethod java/util/zip/ZipInputStream ensureOpen ()V 4097 1 8867 0 0 +ciMethod java/util/zip/ZipInputStream read ([BII)I 4097 1 4140 0 0 +ciMethod java/util/zip/ZipInputStream readEnd (Ljava/util/zip/ZipEntry;)V 753 1 645 0 -1 +ciMethod java/util/zip/ZipInputStream readFully ([BII)V 3625 3625 4270 0 -1 +ciMethod java/io/PushbackInputStream ensureOpen ()V 3553 1 6338 0 -1 +ciMethod java/io/PushbackInputStream read ([BII)I 3281 1 5693 0 704 +ciMethod java/io/PushbackInputStream unread ([BII)V 2809 1 645 0 -1 +ciMethod java/util/zip/CRC32 update ([BII)V 1321 1 1694 0 0 +ciMethod java/util/zip/CRC32 getValue ()J 753 1 660 0 0 +ciMethod java/util/zip/CRC32 updateBytes (I[BII)I 0 0 1 0 -1 +ciMethod java/util/zip/ZipUtils get32 ([BI)J 4097 1 8932 0 -1 +ciMethod java/util/zip/ZipUtils get64 ([BI)J 0 0 1 0 -1 +ciMethodData java/util/zip/ZipInputStream ensureOpen ()V 2 8867 orig 264 136 98 31 106 0 0 0 0 168 54 68 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 25 5 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 6 0x40007 0x20a3 0x30 0x0 0xd0002 0x0 oops 0 +ciMethodData java/io/PushbackInputStream ensureOpen ()V 2 6338 orig 264 136 98 31 106 0 0 0 0 16 85 68 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 188 1 0 0 49 184 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 6 0x40007 0x1706 0x30 0x0 0xd0002 0x0 oops 0 +ciMethodData java/io/BufferedInputStream getBufIfOpen ()[B 2 35845 orig 264 136 98 31 106 0 0 0 0 136 2 37 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 175 1 0 0 177 82 4 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 6 0x60007 0x8a56 0x30 0x0 0xf0002 0x0 oops 0 +ciMethodData java/io/PushbackInputStream read ([BII)I 2 5693 orig 264 136 98 31 106 0 0 0 0 32 88 68 104 0 0 0 0 8 3 0 0 240 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 154 1 0 0 25 165 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 30 0 2 0 0 0 168 1 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 53 0x10002 0x14a3 0x50007 0x14a3 0x30 0x0 0xc0002 0x0 0x110007 0x0 0x60 0x14a3 0x150007 0x0 0x40 0x14a3 0x1d0007 0x14a3 0x30 0x0 0x240002 0x0 0x290007 0x14a3 0x20 0x0 0x3c0007 0xfdf 0x50 0x4c4 0x420007 0x26 0x20 0x49e 0x540002 0x4c4 0x6d0007 0x49e 0x88 0x1005 0x740002 0x1005 0x7a0007 0x1005 0x58 0x0 0x7f0007 0x0 0x38 0x0 0x830003 0x0 0x18 oops 0 +ciMethodData java/io/FilterInputStream read ([BII)I 2 5439 orig 264 136 98 31 106 0 0 0 0 160 17 37 104 0 0 0 0 144 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 58 1 0 0 41 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 7 0 0 0 0 0 data 6 0x70005 0x1 0x13e1a2570 0x1005 0x13e3acbc0 0x3ff oops 2 2 java/io/FileInputStream 4 java/util/zip/ZipFile$ZipFileInflaterInputStream +ciMethodData java/util/zip/InflaterInputStream read ([BII)I 2 7032 orig 264 136 98 31 106 0 0 0 0 64 14 56 104 0 0 0 0 48 4 0 0 192 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 154 1 0 0 217 160 0 0 49 211 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 51 0 2 0 0 0 208 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 90 0x10002 0x141b 0x50007 0x141b 0x30 0x0 0xc0002 0x0 0x110007 0x0 0x60 0x141b 0x150007 0x0 0x40 0x141b 0x1d0007 0x141b 0x30 0x0 0x240002 0x0 0x290007 0x141b 0x20 0x0 0x350005 0x0 0x13df3d1f0 0x2150 0x0 0x0 0x3b0007 0x11ad 0x158 0xfa5 0x420005 0x0 0x13df3d1f0 0xfa5 0x0 0x0 0x450007 0x26f 0x70 0xd36 0x4c0005 0x0 0x13df3d1f0 0xd36 0x0 0x0 0x4f0007 0xd36 0x20 0x0 0x5d0005 0x0 0x13df3d1f0 0xd36 0x0 0x0 0x600007 0x0 0xfffffffffffffee0 0xd35 0x640005 0x7 0x13e3acbc0 0x709 0x13e1a24c0 0x626 0x670003 0xd36 0xfffffffffffffe90 0x710005 0x0 0x0 0x0 0x0 0x0 0x7c0007 0x0 0x38 0x0 0x810003 0x0 0x18 0x860002 0x0 oops 6 28 java/util/zip/Inflater 38 java/util/zip/Inflater 48 java/util/zip/Inflater 58 java/util/zip/Inflater 68 java/util/zip/ZipFile$ZipFileInflaterInputStream 70 java/util/jar/JarInputStream +ciMethodData java/util/jar/JarInputStream read ([BII)I 2 4140 orig 264 136 98 31 106 0 0 0 0 176 41 68 104 0 0 0 0 248 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 97 113 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 152 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 19 0x40007 0x0 0x48 0xe2c 0xb0002 0xe2c 0x100003 0xe2c 0x18 0x1a0007 0xe2c 0x50 0x0 0x2a0005 0x0 0x0 0x0 0x0 0x0 oops 0 +ciMethodData java/util/zip/ZipInputStream read ([BII)I 2 4140 orig 264 136 98 31 106 0 0 0 0 32 60 68 104 0 0 0 0 200 5 0 0 72 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 97 113 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 35 0 2 0 0 0 104 4 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 141 0x10002 0xe2c 0x50007 0x0 0x60 0xe2c 0x90007 0x0 0x40 0xe2c 0x110007 0xe2c 0x30 0x0 0x180002 0x0 0x1d0007 0xe2c 0x20 0x0 0x260007 0xa02 0x20 0x42a 0x320008 0x6 0x0 0x398 0xb 0xc8 0xe 0x40 0x500002 0x818 0x560007 0x5ee 0x48 0x22a 0x5e0002 0x22a 0x6b0003 0x22a 0x48 0x750005 0x0 0x118d57d60 0x5ee 0x0 0x0 0x800007 0xd 0x20 0x1dd 0x960007 0x0 0x20 0xd 0xa60005 0x0 0x13e427610 0xd 0x0 0x0 0xac0007 0xd 0x30 0x0 0xb50002 0x0 0xc00005 0x0 0x118d57d60 0xd 0x0 0x0 0xd40007 0x0 0x200 0xd 0xe20005 0x0 0x118d57d60 0xd 0x0 0x0 0xe60007 0xd 0x1b0 0x0 0xf10002 0x0 0xf60005 0x0 0x0 0x0 0x0 0x0 0x1000002 0x0 0x1030005 0x0 0x0 0x0 0x0 0x0 0x1080005 0x0 0x0 0x0 0x0 0x0 0x10f0005 0x0 0x0 0x0 0x0 0x0 0x1120002 0x0 0x1150005 0x0 0x0 0x0 0x0 0x0 0x11a0005 0x0 0x0 0x0 0x0 0x0 0x11d0005 0x0 0x0 0x0 0x0 0x0 0x1200002 0x0 0x12c0002 0x0 oops 4 45 java/util/zip/CRC32 59 java/io/PushbackInputStream 71 java/util/zip/CRC32 81 java/util/zip/CRC32 +ciMethodData java/util/zip/CRC32 update ([BII)V 2 1694 orig 264 136 98 31 106 0 0 0 0 168 105 68 104 0 0 0 0 16 2 0 0 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 165 0 0 0 201 47 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 12 0 2 0 0 0 176 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 22 0x10007 0x5f9 0x30 0x0 0x80002 0x0 0xd0007 0x0 0x60 0x5f9 0x110007 0x0 0x40 0x5f9 0x190007 0x5f9 0x30 0x0 0x200002 0x0 0x2c0002 0x5f9 oops 0 +ciMethodData java/util/zip/CRC32 getValue ()J 2 660 orig 264 136 98 31 106 0 0 0 0 128 108 68 104 0 0 0 0 32 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0 177 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 3 0 1 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 data 0 oops 0 +ciMethodData java/util/zip/ZipInputStream readEnd (Ljava/util/zip/ZipEntry;)V 1 645 orig 264 136 98 31 106 0 0 0 0 184 66 68 104 0 0 0 0 72 10 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0 57 17 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 60 0 2 0 0 0 248 8 0 0 255 255 255 255 5 0 4 0 0 0 0 0 data 287 0x40005 0x0 0x13df3d1f0 0x227 0x0 0x0 0x90007 0x0 0x80 0x227 0x100004 0x0 0x13e427610 0x227 0x0 0x0 0x1e0005 0x0 0x13e427610 0x227 0x0 0x0 0x2a0007 0x1be 0x2e8 0x69 0x310005 0x0 0x13df3d1f0 0x69 0x0 0x0 0x380007 0x0 0x70 0x69 0x3f0005 0x0 0x13df3d1f0 0x69 0x0 0x0 0x460007 0x69 0x140 0x0 0x510002 0x0 0x590002 0x0 0x620007 0x0 0xb8 0x0 0x700002 0x0 0x7d0002 0x0 0x870004 0x0 0x0 0x0 0x0 0x0 0x910005 0x0 0x0 0x0 0x0 0x0 0x940003 0x0 0x48 0x9d0002 0x0 0xaa0002 0x0 0xb70002 0x0 0xbd0003 0x0 0x120 0xc80002 0x69 0xd00002 0x69 0xd90007 0x69 0xb8 0x0 0xe70002 0x0 0xf40002 0x0 0xfe0004 0x0 0x0 0x0 0x0 0x0 0x1080005 0x0 0x0 0x0 0x0 0x0 0x10b0003 0x0 0x48 0x1140002 0x69 0x1210002 0x69 0x12e0002 0x69 0x13c0005 0x0 0x13df3d1f0 0x227 0x0 0x0 0x1400007 0x227 0x190 0x0 0x14b0002 0x0 0x1500005 0x0 0x0 0x0 0x0 0x0 0x1570005 0x0 0x0 0x0 0x0 0x0 0x15c0005 0x0 0x0 0x0 0x0 0x0 0x1630005 0x0 0x0 0x0 0x0 0x0 0x1660005 0x0 0x0 0x0 0x0 0x0 0x16b0005 0x0 0x0 0x0 0x0 0x0 0x16e0005 0x0 0x0 0x0 0x0 0x0 0x1710002 0x0 0x17d0005 0x0 0x13df3d1f0 0x227 0x0 0x0 0x1810007 0x227 0x190 0x0 0x18c0002 0x0 0x1910005 0x0 0x0 0x0 0x0 0x0 0x1980005 0x0 0x0 0x0 0x0 0x0 0x19d0005 0x0 0x0 0x0 0x0 0x0 0x1a40005 0x0 0x0 0x0 0x0 0x0 0x1a70005 0x0 0x0 0x0 0x0 0x0 0x1ac0005 0x0 0x0 0x0 0x0 0x0 0x1af0005 0x0 0x0 0x0 0x0 0x0 0x1b20002 0x0 0x1be0005 0x0 0x118d57d60 0x227 0x0 0x0 0x1c20007 0x227 0x1b0 0x0 0x1cd0002 0x0 0x1d20005 0x0 0x0 0x0 0x0 0x0 0x1d90002 0x0 0x1dc0005 0x0 0x0 0x0 0x0 0x0 0x1e10005 0x0 0x0 0x0 0x0 0x0 0x1e80005 0x0 0x0 0x0 0x0 0x0 0x1eb0002 0x0 0x1ee0005 0x0 0x0 0x0 0x0 0x0 0x1f30005 0x0 0x0 0x0 0x0 0x0 0x1f60005 0x0 0x0 0x0 0x0 0x0 0x1f90002 0x0 oops 8 2 java/util/zip/Inflater 12 java/io/PushbackInputStream 18 java/io/PushbackInputStream 28 java/util/zip/Inflater 38 java/util/zip/Inflater 117 java/util/zip/Inflater 173 java/util/zip/Inflater 229 java/util/zip/CRC32 +ciMethodData java/io/BufferedInputStream read ([BII)I 2 12047 orig 264 136 98 31 106 0 0 0 0 248 7 37 104 0 0 0 0 208 2 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 97 112 1 0 89 63 0 0 172 22 0 0 204 6 0 0 2 0 0 0 1 0 23 0 2 0 0 0 112 1 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 46 0x10002 0x2e0c 0x130007 0x2e0c 0x30 0x0 0x1a0002 0x0 0x1f0007 0x2e0c 0x20 0x0 0x310002 0x35f7 0x380007 0x3092 0x58 0x565 0x3d0007 0x1f5 0x38 0x370 0x420003 0x370 0x18 0x520007 0x968 0x20 0x272a 0x600007 0x0 0x70 0x968 0x650005 0x36b 0x13e1a24c0 0x5db 0x13e1a2570 0x22 0x680007 0x7eb 0x20 0x17d 0x6e0003 0x7eb 0xffffffffffffff08 oops 2 35 java/util/jar/JarInputStream 37 java/io/FileInputStream +ciMethodData java/io/BufferedInputStream read1 ([BII)I 2 12155 orig 264 136 98 31 106 0 0 0 0 248 6 37 104 0 0 0 0 152 2 0 0 128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 198 1 0 0 169 109 1 0 1 0 0 0 63 21 0 0 0 0 0 0 2 0 0 0 0 0 25 0 2 0 0 0 56 1 0 0 255 255 255 255 7 0 13 0 0 0 0 0 data 39 0xd0007 0x2125 0xe0 0xc90 0x120002 0xc90 0x160007 0x899 0x80 0x3f7 0x1de007 0x3 0x60 0x3f5 0x210002 0x3f5 0x27f005 0x6 0x13e1a24c0 0x3ea 0x13e1a2570 0x9 0x2c0002 0x89c 0x3c0007 0x58f 0x20 0x30d 0x440007 0x202b 0x38 0x689 0x490003 0x689 0x18 0x500002 0x26b4 0x5b0002 0x26b4 oops 2 18 java/util/jar/JarInputStream 20 java/io/FileInputStream +ciMethodData java/io/BufferedInputStream getInIfOpen ()Ljava/io/InputStream; 2 5280 orig 264 136 98 31 106 0 0 0 0 224 1 37 104 0 0 0 0 80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 149 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 5 0 2 0 0 0 48 0 0 0 255 255 255 255 7 0 6 0 0 0 0 0 data 6 0x60007 0x12a0 0x30 0x0 0xf0002 0x0 oops 0 +ciMethodData java/io/BufferedInputStream fill ()V 2 4020 orig 264 136 98 31 106 0 0 0 0 64 5 37 104 0 0 0 0 136 3 0 0 208 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 1 0 0 1 116 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 39 0 2 0 0 0 64 2 0 0 255 255 255 255 2 0 1 0 0 0 0 0 data 72 0x10002 0xe80 0x90007 0x613 0x38 0x86d 0x110003 0x86d 0x1b0 0x1a0007 0x611 0x198 0x2 0x210007 0x2 0x48 0x0 0x360002 0x0 0x430003 0x0 0x148 0x4c0007 0x0 0x38 0x2 0x590003 0x2 0x110 0x610007 0x0 0x30 0x0 0x6a0002 0x0 0x7a0007 0x0 0x38 0x0 0x830003 0x0 0x18 0x8f0007 0x0 0x20 0x0 0xa30002 0x0 0xac0005 0x0 0x0 0x0 0x0 0x0 0xaf0007 0x0 0x30 0x0 0xb80002 0x0 0xc70002 0xe80 0xd60005 0x70c 0x13e1a24c0 0x56a 0x13e3acbc0 0x20a 0xdb0007 0x30c 0x20 0xb74 oops 2 64 java/util/jar/JarInputStream 66 java/util/zip/ZipFile$ZipFileInflaterInputStream +ciMethodData java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl compareAndSet (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z 1 613 orig 264 136 98 31 106 0 0 0 0 120 54 37 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 33 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 80 0 0 0 255 255 255 255 2 0 2 0 0 0 0 0 data 10 0x20002 0x264 0x70002 0x264 0x140005 0xff 0x0 0x0 0x0 0x0 oops 0 +ciMethodData java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl accessCheck (Ljava/lang/Object;)V 1 613 orig 264 136 98 31 106 0 0 0 0 184 51 37 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 33 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 12 0x50005 0xff 0x6b4a6750 0x165 0x0 0x0 0x80007 0x264 0x30 0x0 0xd0002 0x0 oops 1 2 java/lang/Class +ciMethodData java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl throwAccessCheckException (Ljava/lang/Object;)V 1 0 orig 264 136 98 31 106 0 0 0 0 160 52 37 104 0 0 0 0 192 3 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 112 2 0 0 255 255 255 255 7 0 8 0 0 0 0 0 data 78 0x80007 0x0 0x30 0x0 0xf0002 0x0 0x1f0002 0x0 0x240005 0x0 0x0 0x0 0x0 0x0 0x2b0005 0x0 0x0 0x0 0x0 0x0 0x2e0005 0x0 0x0 0x0 0x0 0x0 0x330005 0x0 0x0 0x0 0x0 0x0 0x3a0005 0x0 0x0 0x0 0x0 0x0 0x3d0005 0x0 0x0 0x0 0x0 0x0 0x420005 0x0 0x0 0x0 0x0 0x0 0x460005 0x0 0x0 0x0 0x0 0x0 0x490005 0x0 0x0 0x0 0x0 0x0 0x4c0005 0x0 0x0 0x0 0x0 0x0 0x4f0005 0x0 0x0 0x0 0x0 0x0 0x520002 0x0 0x550002 0x0 oops 0 +ciMethodData java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl valueCheck (Ljava/lang/Object;)V 1 613 orig 264 136 98 31 106 0 0 0 0 64 53 37 104 0 0 0 0 208 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 33 19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 128 0 0 0 255 255 255 255 7 0 1 0 0 0 0 0 data 16 0x10007 0x264 0x80 0x0 0x90005 0x0 0x0 0x0 0x0 0x0 0xc0007 0x0 0x30 0x0 0xf0002 0x0 oops 0 +ciMethod java/awt/image/ColorModel getRGBdefault ()Ljava/awt/image/ColorModel; 1257 1 3140 0 -1 +ciMethod java/awt/image/IndexColorModel (II[B[B[B)V 0 0 1 0 -1 +ciMethod java/awt/image/IndexColorModel (II[B[B[BI)V 0 0 1 0 -1 +ciMethod java/awt/image/IndexColorModel (II[B[B[B[B)V 0 0 3 0 -1 +ciMethod sun/awt/image/InputStreamImageSource startProduction ()V 137 1 581 0 -1 +ciMethod sun/awt/image/InputStreamImageSource doneDecoding (Lsun/awt/image/ImageDecoder;)V 4097 1 9085 0 0 +ciMethod sun/awt/image/InputStreamImageSource latchConsumers (Lsun/awt/image/ImageDecoder;)V 4097 1 7987 0 0 +ciMethod java/awt/image/ImageConsumer setPixels (IIIILjava/awt/image/ColorModel;[III)V 0 0 1 0 -1 +ciMethod java/awt/image/ImageConsumer imageComplete (I)V 0 0 1 0 -1 +ciMethod sun/awt/image/PNGImageDecoder property (Ljava/lang/String;Ljava/lang/Object;)V 809 1 614 0 0 +ciMethod sun/awt/image/PNGImageDecoder produceImage ()V 825 372985 435 0 -1 +ciMethod sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 2177 1 6432 0 160 +ciMethod sun/awt/image/PNGImageDecoder sendPixels (IIII[BII)Z 0 0 47 0 0 +ciMethod sun/awt/image/PNGImageDecoder filterRow ([B[BIII)V 897 49249 3558 0 -1 +ciMethod sun/awt/image/PNGImageDecoder getData ()Z 825 3305 435 0 -1 +ciMethod sun/awt/image/ImageDecoder nextConsumer (Lsun/awt/image/ImageConsumerQueue;)Lsun/awt/image/ImageConsumerQueue; 2185 1 5524 0 832 +ciMethod sun/awt/image/ImageDecoder setDimensions (II)I 1065 1065 516 0 -1 +ciMethod sun/awt/image/ImageDecoder setColorModel (Ljava/awt/image/ColorModel;)I 1065 1065 516 0 -1 +ciMethod sun/awt/image/ImageDecoder setHints (I)I 1065 1065 516 0 -1 +ciMethod sun/awt/image/ImageDecoder headerComplete ()V 1065 1 516 0 -1 +ciMethod sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[BII)I 4097 4089 1781 0 -1 +ciMethod sun/awt/image/ImageDecoder setPixels (IIIILjava/awt/image/ColorModel;[III)I 2049 2049 5690 0 2496 +ciMethod sun/awt/image/ImageDecoder imageComplete (IZ)I 1073 1073 516 0 0 +ciMethod sun/awt/image/ImageDecoder close ()V 1073 1 515 0 0 +ciMethodData java/io/BufferedInputStream read ()I 2 5509 orig 264 136 98 31 106 0 0 0 0 0 6 37 104 0 0 0 0 128 1 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 119 1 0 0 81 160 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 11 0 2 0 0 0 96 0 0 0 255 255 255 255 7 0 8 0 0 0 0 0 data 12 0x80007 0x13f6 0x50 0x14 0xc0002 0x14 0x170007 0x14 0x20 0x0 0x1d0002 0x140a oops 0 +ciMethodData sun/awt/image/ImageDecoder nextConsumer (Lsun/awt/image/ImageConsumerQueue;)Lsun/awt/image/ImageConsumerQueue; 2 5524 orig 264 136 98 31 106 0 0 0 0 136 212 131 104 0 0 0 0 240 1 0 0 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 0 0 25 164 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 20 0 2 0 0 0 200 0 0 0 255 255 255 255 7 0 11 0 0 0 0 0 data 25 0xb0007 0x1483 0x20 0x0 0x130007 0xa42 0x38 0xa41 0x1a0003 0xa41 0x18 0x230007 0xa42 0x58 0xa41 0x2a0007 0x0 0x20 0xa41 0x360003 0x0 0xffffffffffffffc0 0x3b0003 0xa42 0x18 oops 0 +ciMethodData sun/awt/image/InputStreamImageSource doneDecoding (Lsun/awt/image/ImageDecoder;)V 2 9085 orig 264 136 98 31 106 0 0 0 0 200 161 130 104 0 0 0 0 160 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 233 11 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 8 0 2 0 0 0 80 0 0 0 255 255 255 255 7 0 5 0 0 0 0 0 data 10 0x50007 0x2002 0x50 0x17b 0x110007 0x17b 0x30 0x0 0x150002 0x0 oops 0 +ciMethodData sun/awt/image/InputStreamImageSource latchConsumers (Lsun/awt/image/ImageDecoder;)V 2 7989 orig 264 136 98 31 106 0 0 0 0 88 162 130 104 0 0 0 0 128 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 169 233 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 10 0 2 0 0 0 48 0 0 0 255 255 255 255 5 0 2 0 0 0 0 0 data 6 0x20005 0x1bf 0x13e8cb6e0 0x120 0x13e8cb630 0x1a56 oops 2 2 sun/awt/image/ByteArrayImageSource 4 sun/awt/image/URLImageSource +ciMethodData sun/awt/image/PNGImageDecoder sendPixels (IIII[III)Z 2 6432 orig 264 136 98 31 106 0 0 0 0 248 185 131 104 0 0 0 0 8 2 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 1 0 0 129 192 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 2 0 0 0 136 0 0 0 255 255 255 255 5 0 16 0 0 0 0 0 data 17 0x100005 0x0 0x13dd5a090 0x1810 0x0 0x0 0x170007 0x1810 0x20 0x0 0x230007 0x0 0x38 0x1810 0x270003 0x1810 0x18 oops 1 2 sun/awt/image/PNGImageDecoder +ciMethodData sun/awt/image/PNGImageDecoder filterRow ([B[BIII)V 2 264096 orig 264 136 98 31 106 0 0 0 0 8 189 131 104 0 0 0 0 88 5 0 0 24 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 24 0 0 225 112 0 0 161 124 31 0 56 10 0 0 240 192 2 0 2 0 0 0 8 0 57 0 2 0 0 0 240 3 0 0 255 255 255 255 8 0 4 0 0 0 0 0 data 126 0x40008 0xc 0x0 0x3e0 0x4 0x70 0xd 0x88 0xe 0xc0 0x3 0x118 0x30 0x1e0 0x280003 0x1d4 0x380 0x330007 0x297 0x368 0xbda3 0x480003 0xbda3 0xffffffffffffffe0 0x4ce007 0x6 0x330 0x405 0x530007 0x405 0x310 0x15ddc 0x650003 0x15ddc 0xffffffffffffffe0 0x69e007 0x2 0x90 0x2d 0x700007 0x2d 0x38 0xb2 0x880003 0xb2 0xffffffffffffffe0 0x8f0007 0x2d 0x280 0xb98 0xb30003 0xb98 0xffffffffffffffe0 0xbe0007 0x2 0x248 0xa0 0xd90003 0xa0 0xffffffffffffffe0 0xdde007 0x2 0x1c8 0x578 0xe40007 0x578 0x38 0x1574 0xf60003 0x1574 0xffffffffffffffe0 0xfd0007 0x574 0x1b8 0x1b139 0x1320007 0x1693b 0x38 0x47fe 0x13a0003 0x47fe 0x18 0x1480007 0x161a6 0x38 0x4f93 0x1500003 0x4f93 0x18 0x15e0007 0x14266 0x38 0x6ed3 0x1660003 0x6ed3 0x18 0x1790007 0x6706 0x58 0x14a33 0x1800007 0x4c1 0x38 0x14572 0x1850003 0x14572 0x50 0x18c0007 0x88f 0x38 0x6338 0x1910003 0x6338 0x18 0x19c0003 0x1b139 0xfffffffffffffea8 0x1a70007 0x2 0x48 0x78 0x1bc0003 0x78 0xffffffffffffffe0 0x1c60002 0x0 oops 0 +ciMethodData sun/awt/image/PNGImageDecoder produceImage ()V 2 196378 orig 264 136 98 31 106 0 0 0 0 64 185 131 104 0 0 0 0 136 16 0 0 144 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 182 0 0 97 10 0 0 217 71 18 0 14 1 0 0 123 155 1 0 2 0 0 0 10 0 180 0 2 0 0 0 208 14 0 0 255 255 255 255 7 0 7 0 0 0 0 0 data 474 0x70007 0x14c 0x98 0xa60 0x170005 0x0 0x13dd5b380 0xa60 0x0 0x0 0x1a0007 0xa60 0x30 0x0 0x240002 0x0 0x2b0003 0xa60 0xffffffffffffff80 0x3e0002 0x14c 0x410002 0x14c 0x440002 0x14c 0x490005 0x0 0x13dd5a090 0x14c 0x0 0x0 0x5e0008 0xc 0x0 0xe8 0x0 0x70 0x0 0x88 0x0 0xa0 0x3 0xb8 0x0 0xd0 0x930003 0x0 0x88 0x990003 0x0 0x70 0x9f0003 0x0 0x58 0xa50003 0x14c 0x40 0xab0003 0x0 0x28 0xb50002 0x0 0xbd0007 0x13d 0x38 0xf 0xcf0003 0xf 0x18 0xe90007 0x0 0x38 0x14c 0xee0003 0x14c 0x18 0xfe0008 0x12 0x0 0x298 0x0 0x140 0x0 0x298 0x0 0x270 0x0 0xa0 0x0 0x270 0x0 0x298 0x3 0x270 0x0 0xa0 0x1300007 0x2 0x30 0x0 0x13a0002 0x0 0x1420007 0x2 0x48 0x0 0x15f0002 0x0 0x1650003 0x0 0x28 0x1860002 0x3 0x1910003 0x3 0x180 0x1970007 0x0 0x38 0x0 0x19b0003 0x0 0x18 0x1ad0007 0x0 0xe0 0x0 0x1c50007 0x0 0x38 0x0 0x1dc0003 0x0 0xffffffffffffffe0 0x1e40007 0x0 0x48 0x0 0x1f90002 0x0 0x1ff0003 0x0 0x28 0x21c0002 0x0 0x22b0004 0x0 0x0 0x0 0x0 0x0 0x2310003 0x0 0x50 0x2350002 0x14a 0x2400003 0x14a 0x28 0x24a0002 0x0 0x2570005 0x0 0x13dd5a090 0x14d 0x0 0x0 0x2600005 0x0 0x13dd5a090 0x14d 0x0 0x0 0x2680007 0x13e 0x38 0xf 0x26d0003 0xf 0x18 0x2770005 0x0 0x13dd5a090 0x14d 0x0 0x0 0x27c0005 0x0 0x13dd5a090 0x14d 0x0 0x0 0x2850007 0x14a 0x38 0x3 0x2890003 0x3 0x88 0x2920007 0x0 0x38 0x14a 0x2960003 0x14a 0x18 0x2a00007 0x11 0x38 0x139 0x2a40003 0x139 0x18 0x2c10007 0xf 0x38 0x13e 0x2ca0003 0x13e 0x18 0x2db0007 0x14d 0x658 0x1a7 0x32d0007 0x1a7 0x38 0x0 0x3300003 0x0 0xffffffffffffffc0 0x3370007 0x69 0x38 0x13e 0x3410003 0x13e 0x18 0x3630007 0x1a7 0x538 0x198c 0x3670005 0x0 0x13dd5b380 0x198c 0x0 0x0 0x3730007 0x198c 0x98 0x198c 0x3800005 0x0 0x13dd5b380 0x198c 0x0 0x0 0x3870007 0x198c 0x30 0x0 0x3910002 0x0 0x39c0003 0x198c 0xffffffffffffff80 0x3a40007 0x17e5 0x38 0x1a7 0x3a80003 0x1a7 0x18 0x3b30002 0x198c 0x3c60007 0x198c 0x378 0x209d7 0x3ca0007 0x2e1 0x248 0x206f6 0x3cf0008 0xe 0x0 0x218 0x0 0xb0 0x0 0x1e8 0x7c3 0x80 0x0 0xe8 0x0 0x200 0x0 0x98 0x4480003 0x1aa5e 0x2a0 0x48c0003 0x0 0x288 0x4be0007 0x0 0x20 0x5c98 0x4d40003 0x5c98 0x250 0x5040007 0x0 0x38 0x0 0x5080003 0x0 0x18 0x5130007 0x0 0x90 0x0 0x51a0007 0x0 0x70 0x0 0x5360007 0x0 0x38 0x0 0x53a0003 0x0 0x18 0x5440003 0x0 0xffffffffffffff88 0x5490007 0x0 0x20 0x0 0x55f0003 0x0 0x150 0x5940003 0x0 0x138 0x5c90003 0x0 0x120 0x5d30002 0x0 0x5db0008 0xc 0x0 0xe8 0x0 0x70 0x0 0x88 0x0 0xa0 0x100 0xb8 0x0 0xd0 0x6290003 0x0 0x88 0x6490003 0x0 0x70 0x66a0003 0x0 0x58 0x67c0003 0x2e1 0x40 0x68e0003 0x0 0x28 0x6980002 0x0 0x6a30003 0x209d7 0xfffffffffffffca0 0x6aa0007 0x375 0x78 0x1617 0x6ae0007 0x2f 0x48 0x15e8 0x6c00002 0x15e8 0x6c40003 0x15e8 0x28 0x6d60002 0x2f 0x6fa0003 0x198c 0xfffffffffffffae0 0x7010007 0x13e 0x78 0x69 0x7050007 0x0 0x48 0x69 0x7190002 0x69 0x71d0003 0x69 0x28 0x7310002 0x0 0x7350003 0x1a7 0xfffffffffffff9c0 0x73b0005 0x0 0x13dd5a090 0x14d 0x0 0x0 0x7400005 0x0 0x13dd5a090 0x14c 0x0 0x0 0x7430003 0x14c 0x138 0x7470003 0x0 0x120 0x74f0007 0x0 0x60 0x0 0x7560002 0x0 0x75c0005 0x0 0x0 0x0 0x0 0x0 0x7630005 0x0 0x0 0x0 0x0 0x0 0x7660003 0x0 0x78 0x76a0003 0x0 0x60 0x7700005 0x0 0x0 0x0 0x0 0x0 0x7730003 0x0 0x18 oops 10 6 java/io/BufferedInputStream 27 sun/awt/image/PNGImageDecoder 163 sun/awt/image/PNGImageDecoder 169 sun/awt/image/PNGImageDecoder 182 sun/awt/image/PNGImageDecoder 188 sun/awt/image/PNGImageDecoder 244 java/io/BufferedInputStream 254 java/io/BufferedInputStream 425 sun/awt/image/PNGImageDecoder 431 sun/awt/image/PNGImageDecoder +ciMethodData sun/awt/image/PNGImageDecoder sendPixels (IIII[BII)Z 1 47 orig 264 136 98 31 106 0 0 0 0 176 186 131 104 0 0 0 0 8 2 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 121 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 136 0 0 0 255 255 255 255 5 0 16 0 0 0 0 0 data 17 0x100005 0x0 0x13dd5a090 0x2f 0x0 0x0 0x170007 0x2f 0x20 0x0 0x230007 0x0 0x38 0x2f 0x270003 0x2f 0x18 oops 1 2 sun/awt/image/PNGImageDecoder +ciMethodData sun/awt/image/ImageDecoder imageComplete (IZ)I 1 518 orig 264 136 98 31 106 0 0 0 0 32 218 131 104 0 0 0 0 112 2 0 0 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 0 0 0 1 12 0 0 1 12 0 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 23 0 2 0 0 0 24 1 0 0 255 255 255 255 5 0 5 0 0 0 0 0 data 35 0x50005 0x1f 0x13e8cb630 0x15f 0x13e8cb6e0 0x2 0x90007 0x0 0x50 0x180 0x160005 0x1f 0x13e8cb630 0x15f 0x13e8cb6e0 0x2 0x200005 0x0 0x13dd5a090 0x29a 0x13e8cb790 0x66 0x250007 0x180 0x68 0x180 0x2d0005 0x3 0x13e8cb840 0x17a 0x13e8cb8f0 0x3 0x350003 0x180 0xffffffffffffff80 oops 8 2 sun/awt/image/URLImageSource 4 sun/awt/image/ByteArrayImageSource 12 sun/awt/image/URLImageSource 14 sun/awt/image/ByteArrayImageSource 18 sun/awt/image/PNGImageDecoder 20 sun/awt/image/GifImageDecoder 28 sun/awt/image/ImageRepresentation 30 java/awt/image/ReplicateScaleFilter +ciMethodData sun/awt/image/ImageDecoder close ()V 1 518 orig 264 136 98 31 106 0 0 0 0 0 220 131 104 0 0 0 0 176 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 68 79 32 101 120 116 114 97 32 100 97 116 97 32 108 111 99 107 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 134 0 0 0 1 12 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0 255 255 255 255 7 0 4 0 0 0 0 0 data 13 0x40007 0x0 0x68 0x180 0xb0005 0x0 0x13dd5b380 0x180 0x0 0x0 0xe0003 0x180 0x18 oops 1 6 java/io/BufferedInputStream +instanceKlass java/lang/Throwable$PrintStreamOrWriter +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$8 +instanceKlass com/mathworks/webservices/authenticationws/client/rest/http/ContentTypeBaseHandler +instanceKlass com/sun/xml/internal/bind/v2/runtime/FilterTransducer +instanceKlass org/apache/xerces/xs/datatypes/ObjectList +instanceKlass org/apache/xerces/xs/ShortList +instanceKlass org/apache/xerces/impl/dv/XSFacets +instanceKlass org/apache/xerces/util/SymbolHash$Entry +instanceKlass org/apache/xerces/util/SymbolHash +instanceKlass org/apache/xerces/impl/dv/SchemaDVFactory +instanceKlass org/apache/xerces/impl/xs/XSGroupDecl +instanceKlass org/apache/xerces/xs/XSWildcard +instanceKlass org/apache/xerces/impl/xs/util/XSObjectListImpl +instanceKlass org/apache/xerces/xs/XSObjectList +instanceKlass org/apache/xerces/xs/XSNotationDeclaration +instanceKlass org/apache/xerces/xs/StringList +instanceKlass org/apache/xerces/xs/XSModelGroupDefinition +instanceKlass org/apache/xerces/impl/xs/util/XIntPool +instanceKlass org/apache/xerces/impl/xs/util/XInt +instanceKlass org/apache/xerces/impl/xs/traversers/XSAttributeChecker +instanceKlass org/apache/xerces/impl/xs/traversers/XSDHandler$XSDKey +instanceKlass javax/xml/bind/annotation/XmlSchemaType$DEFAULT +instanceKlass org/apache/xerces/util/DOMUtil +instanceKlass org/apache/xerces/impl/xs/SchemaSymbols +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/package-info +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ResendVerificationCodeDetailResponse +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/Error +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/Token +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/MfaPendingToken +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ErrorResponse +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ReferenceDetail +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/StandardResponse +instanceKlass org/apache/xerces/impl/ExternalSubsetResolver +instanceKlass com/mathworks/webservices/authenticationws/client/rest/response/ObjectFactory +instanceKlass com/mathworks/webservices/authenticationws/client/rest/xml/JaxbResponseHandler +instanceKlass com/sun/xml/internal/bind/v2/model/impl/GetterSetterPropertySeed +instanceKlass com/mathworks/webservices/client/core/http/HttpHeader +instanceKlass sun/misc/ProxyGenerator$1 +instanceKlass org/apache/xerces/util/XMLGrammarPoolImpl$Entry +instanceKlass com/sun/xml/internal/bind/api/impl/NameUtil +instanceKlass com/sun/xml/internal/bind/api/impl/NameConverter +instanceKlass java/lang/Package$1PackageInfoProxy +instanceKlass javax/xml/validation/SchemaFactoryFinder$1 +instanceKlass org/apache/xerces/jaxp/validation/XMLSchemaFactory$XMLGrammarPoolWrapper +instanceKlass org/apache/xerces/util/DOMEntityResolverWrapper +instanceKlass org/apache/xerces/jaxp/validation/DraconianErrorHandler +instanceKlass com/mathworks/webservices/client/core/MathWorksServiceResponse +instanceKlass org/apache/xerces/impl/xs/XSAttributeUseImpl +instanceKlass org/apache/xerces/xs/XSAttributeUse +instanceKlass org/apache/xerces/impl/dv/xs/XSSimpleTypeDecl +instanceKlass org/apache/xerces/impl/dv/XSSimpleType +instanceKlass com/mathworks/webservices/client/core/xml/ErrorMessage +instanceKlass com/mathworks/webservices/client/core/xml/JaxbResponseHandler +instanceKlass org/apache/xerces/impl/xs/XSComplexTypeDecl +instanceKlass org/apache/xerces/xs/XSComplexTypeDefinition +instanceKlass org/apache/commons/httpclient/util/IdleConnectionHandler +instanceKlass org/apache/xerces/impl/xs/XSModelGroupImpl +instanceKlass org/apache/xerces/xs/XSModelGroup +instanceKlass org/apache/commons/httpclient/MultiThreadedHttpConnectionManager$ConnectionPool +instanceKlass org/apache/xerces/impl/xs/XSDeclarationPool +instanceKlass org/apache/xerces/impl/xs/opti/SchemaDOMParser$BooleanStack +instanceKlass org/apache/commons/httpclient/HttpConnection +instanceKlass org/apache/commons/httpclient/MultiThreadedHttpConnectionManager +instanceKlass org/apache/xerces/impl/xs/opti/DefaultXMLDocumentHandler +instanceKlass org/apache/commons/httpclient/HostConfiguration +instanceKlass org/apache/xerces/impl/xs/util/SimpleLocator +instanceKlass org/apache/xerces/impl/xs/traversers/XSDocumentInfo +instanceKlass org/apache/commons/httpclient/HttpState +instanceKlass org/apache/xerces/impl/xs/XSParticleDecl +instanceKlass org/apache/xerces/xs/XSParticle +instanceKlass org/apache/commons/httpclient/DefaultHttpMethodRetryHandler +instanceKlass org/apache/commons/httpclient/HttpMethodRetryHandler +instanceKlass org/apache/xerces/impl/xs/opti/DefaultNode +instanceKlass org/apache/xerces/impl/xs/XSAttributeGroupDecl +instanceKlass org/apache/xerces/xs/XSAttributeGroupDefinition +instanceKlass org/apache/xerces/impl/xs/XSAttributeDecl +instanceKlass org/apache/xerces/xs/XSAttributeDeclaration +instanceKlass org/apache/commons/httpclient/SimpleHttpConnectionManager +instanceKlass org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser +instanceKlass org/apache/xerces/impl/xs/traversers/XSDHandler +instanceKlass org/apache/commons/httpclient/HttpVersion +instanceKlass org/apache/commons/httpclient/params/DefaultHttpParamsFactory +instanceKlass org/apache/xerces/impl/xs/models/XSEmptyCM +instanceKlass org/apache/xerces/impl/xs/models/XSCMValidator +instanceKlass org/apache/xerces/impl/xs/models/CMBuilder +instanceKlass org/apache/commons/httpclient/params/HttpParamsFactory +instanceKlass org/apache/commons/httpclient/params/DefaultHttpParams +instanceKlass org/apache/xerces/impl/dtd/models/CMNode +instanceKlass org/apache/xerces/impl/xs/models/CMNodeFactory +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler$OneSubGroup +instanceKlass org/apache/xerces/impl/xs/XSElementDecl +instanceKlass org/apache/xerces/xs/XSElementDeclaration +instanceKlass org/apache/xerces/xs/XSTerm +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserEvent +instanceKlass org/apache/xerces/impl/xs/SubstitutionGroupHandler +instanceKlass org/apache/xerces/impl/xs/XSGrammarBucket +instanceKlass org/apache/xerces/impl/xs/XSMessageFormatter +instanceKlass org/apache/xerces/util/DefaultErrorHandler +instanceKlass org/w3c/dom/DOMStringList +instanceKlass org/apache/xerces/xs/XSModel +instanceKlass org/apache/xerces/impl/xs/SchemaGrammar +instanceKlass org/apache/commons/logging/impl/SimpleLog$1 +instanceKlass org/apache/xerces/xs/XSNamespaceItem +instanceKlass org/apache/xerces/xni/grammars/XSGrammar +instanceKlass org/apache/commons/logging/impl/SimpleLog +instanceKlass org/apache/commons/logging/Log +instanceKlass org/apache/xerces/xni/grammars/XMLSchemaDescription +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$1 +instanceKlass org/apache/commons/logging/impl/LogFactoryImpl$2 +instanceKlass org/apache/xerces/impl/xs/XMLSchemaLoader +instanceKlass org/apache/xerces/xs/XSLoader +instanceKlass org/apache/commons/logging/LogFactory$2 +instanceKlass javax/xml/transform/sax/SAXSource +instanceKlass javax/xml/transform/stream/StreamSource +instanceKlass org/apache/xerces/util/XMLGrammarPoolImpl +instanceKlass javax/xml/validation/Schema +instanceKlass org/apache/xerces/jaxp/validation/XSGrammarPoolContainer +instanceKlass javax/xml/validation/SchemaFactoryFinder$2 +instanceKlass org/apache/commons/logging/LogFactory$3 +instanceKlass javax/xml/validation/SecuritySupport$8 +instanceKlass javax/xml/validation/SecuritySupport$2 +instanceKlass javax/xml/validation/SchemaFactoryFinder +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadAdapter +instanceKlass javax/xml/validation/SecuritySupport$1 +instanceKlass javax/xml/validation/SecuritySupport +instanceKlass javax/xml/validation/SchemaFactory +instanceKlass org/apache/commons/logging/LogFactory$4 +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameList +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Intercepter +instanceKlass com/teamdev/jxbrowser/chromium/w +instanceKlass com/teamdev/jxbrowser/chromium/internal/PluginManagerImpl +instanceKlass org/apache/commons/logging/impl/WeakHashtable$Referenced +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/ChildLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/ArrayERProperty$ReceiverImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/StructureLoader$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/a +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/UnmarshallerChain +instanceKlass org/apache/commons/logging/LogFactory$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCacheStorage +instanceKlass javax/xml/bind/annotation/W3CDomHandler +instanceKlass javax/xml/bind/annotation/DomHandler +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChannelCookieStorage +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeArrayInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ArrayInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/DialogHandlerDelegate +instanceKlass com/sun/xml/internal/bind/v2/runtime/ElementBeanInfoImpl$1 +instanceKlass javax/xml/bind/JAXBElement$GlobalScope +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils$1 +instanceKlass org/apache/commons/logging/LogFactory$6 +instanceKlass com/sun/xml/internal/bind/v2/runtime/Utils +instanceKlass org/apache/commons/logging/LogFactory +instanceKlass com/mathworks/mlwidgets/array/ArrayDialog +instanceKlass org/apache/commons/httpclient/params/HttpParams +instanceKlass org/apache/commons/httpclient/HttpClient +instanceKlass org/apache/commons/httpclient/protocol/SSLProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/DefaultProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/Protocol +instanceKlass org/apache/commons/httpclient/Credentials +instanceKlass org/apache/commons/httpclient/HttpConnectionManager +instanceKlass org/apache/commons/httpclient/protocol/SecureProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/protocol/ProtocolSocketFactory +instanceKlass org/apache/commons/httpclient/HttpMethod +instanceKlass com/mathworks/webservices/client/core/http/MathWorksHttpClient +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter$a +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/TagAndType +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageUIDGenerator +instanceKlass com/sun/xml/internal/bind/v2/runtime/LifecycleMethods +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelIDGenerator +instanceKlass com/teamdev/jxbrowser/chromium/internal/ProxyParams +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/o +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannel +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/TransducedAccessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/Name +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketInfo +instanceKlass com/mathworks/webservices/authenticationws/client/rest/request/BaseLoginServiceRequest +instanceKlass com/mathworks/webservices/authenticationws/client/rest/http/ResponseHandler +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageField +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessageSerializer +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/MessagesBufferIterator +instanceKlass com/mathworks/webservices/client/core/http/ResponseHandler +instanceKlass com/mathworks/webservices/client/core/MathWorksWebServiceClient +instanceKlass java/net/Socket$2 +instanceKlass java/net/Socket$3 +instanceKlass sun/swing/plaf/synth/SynthIcon +instanceKlass com/mathworks/webservices/client/core/ClientConfiguration +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexArrayFactory +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClient +instanceKlass com/mathworks/webservices/client/core/WebServiceClient +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Channel +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector$1 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/n +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelReader +instanceKlass com/mathworks/webservices/authenticationws/client/rest/AuthenticationWSClientFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelWriter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamAdapter +instanceKlass com/mathworks/matlab_login/WebServiceProxy +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketChannelStream +instanceKlass com/mathworks/internal/activationws/client/ActivationService +instanceKlass com/mathworks/matlab_login/LoginWorkspace +instanceKlass com/mathworks/matlab_login/MatlabLogin$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$9$1 +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalarFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Injector +instanceKlass com/mathworks/eps/notificationclient/impl/utils/NotificationLog +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/SecureLoader +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/AccessorInjector +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Ref +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/Bean +instanceKlass com/sun/xml/internal/bind/v2/bytecode/ClassTailor +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory +instanceKlass com/sun/xml/internal/bind/v2/ClassFactory +instanceKlass com/mathworks/widgets/spreadsheet/data/ValueSummaryFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Utils +instanceKlass com/mathworks/apache/commons/lang3/text/StrTokenizer +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister$2 +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/ListIterator +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Lister +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils$1 +instanceKlass com/mathworks/apache/commons/lang3/text/StrBuilder +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Utils +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory$1 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeMapPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/MapPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeReferencePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ReferencePropertyInfo +instanceKlass com/mathworks/apache/commons/lang3/text/StrLookup +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/PropertyImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/Property +instanceKlass com/sun/xml/internal/bind/v2/runtime/property/StructureLoaderBuilder +instanceKlass com/sun/xml/internal/bind/v2/runtime/AttributeAccessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Loader +instanceKlass com/mathworks/apache/commons/lang3/StringUtils +instanceKlass javax/xml/bind/Marshaller +instanceKlass javax/xml/bind/Unmarshaller +instanceKlass com/sun/xml/internal/bind/v2/runtime/JaxBeanInfo +instanceKlass com/sun/xml/internal/bind/v2/util/FlattenIterator +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ElementInfoImpl$PropertyImpl +instanceKlass com/mathworks/mlservices/WorkspaceVariable +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementInfo +instanceKlass javax/xml/bind/annotation/XmlElementDecl$GLOBAL +instanceKlass com/mathworks/apache/commons/lang3/text/StrMatcher +instanceKlass javax/xml/bind/annotation/XmlSeeAlso +instanceKlass java/util/Collections$1 +instanceKlass com/mathworks/apache/commons/lang3/text/StrSubstitutor +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeRefImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeRef +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/TODO +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AttributePropertyInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeAttributePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElementRef +instanceKlass com/sun/xml/internal/bind/v2/model/core/AttributePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElementRef +instanceKlass com/sun/xml/internal/bind/annotation/XmlLocation +instanceKlass javax/xml/bind/annotation/XmlSchemaTypes +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ParameterizedTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator$BinderArg +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapters +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Util +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertyInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimePropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ElementPropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/PropertyInfo +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ClassInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/FieldPropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeClassInfoImpl$RuntimePropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/impl/PropertySeed +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationSource +instanceKlass com/sun/xml/internal/bind/v2/runtime/reflect/Accessor +instanceKlass com/sun/xml/internal/bind/v2/runtime/unmarshaller/Receiver +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageModel$CodeAnalyzerMessage +instanceKlass javax/xml/bind/annotation/XmlElement$DEFAULT +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnvImpl +instanceKlass com/sun/xml/internal/bind/AccessorFactoryImpl +instanceKlass com/sun/xml/internal/bind/InternalAccessorFactory +instanceKlass com/sun/xml/internal/bind/AccessorFactory +instanceKlass com/mathworks/mwswing/AppearanceFocusEvent +instanceKlass javax/xml/bind/annotation/XmlAccessorOrder +instanceKlass com/mathworks/webservices/urlmanager/ReleaseEnv +instanceKlass com/mathworks/webservices/urlmanager/UrlManagerFactory +instanceKlass javax/swing/text/JTextComponent$InputMethodRequestsHandler +instanceKlass javax/xml/bind/annotation/XmlNs +instanceKlass com/mathworks/installservicehandler/xml/package-info +instanceKlass com/sun/xml/internal/bind/annotation/OverrideAnnotationOf +instanceKlass javax/xml/bind/annotation/XmlMixed +instanceKlass com/mathworks/brsanthu/dataexporter/DataExporter +instanceKlass javax/xml/bind/annotation/XmlAnyElement +instanceKlass javax/xml/bind/annotation/XmlElements +instanceKlass javax/xml/bind/annotation/XmlAnyAttribute +instanceKlass javax/xml/bind/annotation/XmlList +instanceKlass javax/xml/bind/annotation/XmlElementWrapper +instanceKlass javax/xml/bind/annotation/XmlAttachmentRef +instanceKlass javax/xml/bind/annotation/XmlMimeType +instanceKlass javax/xml/bind/annotation/XmlInlineBinaryData +instanceKlass javax/xml/bind/annotation/XmlIDREF +instanceKlass javax/xml/bind/annotation/XmlID +instanceKlass javax/xml/bind/annotation/adapters/XmlJavaTypeAdapter +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoImpl +instanceKlass com/mathworks/apache/commons/cli/CommandLineParser +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/Element +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeClassInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/ClassInfo +instanceKlass com/mathworks/webservices/urlmanager/UrlManager +instanceKlass javax/xml/bind/annotation/XmlType$DEFAULT +instanceKlass javax/xml/bind/annotation/XmlAccessorType +instanceKlass java/net/PasswordAuthentication +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/MethodLocatable +instanceKlass javax/xml/bind/JAXBElement +instanceKlass com/mathworks/notification_client_util/ProxyInfo +instanceKlass com/mathworks/installservicehandler/xml/ServiceConfigType +instanceKlass java/text/AttributedString$AttributedStringIterator +instanceKlass sun/awt/im/CompositionAreaHandler +instanceKlass com/mathworks/installservicehandler/xml/ServiceType +instanceKlass com/mathworks/notification_client_util/MATLABNotificationClientParams +instanceKlass com/mathworks/installservicehandler/xml/ServiceContainerType +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientParamsMLWrapper +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RegistryInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/model/core/RegistryInfo +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/SecureLoader +instanceKlass javax/xml/bind/annotation/XmlValue +instanceKlass javax/xml/bind/annotation/XmlType +instanceKlass javax/xml/bind/annotation/XmlTransient +instanceKlass java/awt/KeyboardFocusManager$3 +instanceKlass javax/xml/bind/annotation/XmlSchemaType +instanceKlass java/awt/KeyboardFocusManager$4 +instanceKlass javax/xml/bind/annotation/XmlRootElement +instanceKlass javax/xml/bind/annotation/XmlEnum +instanceKlass javax/xml/bind/annotation/XmlElementRefs +instanceKlass com/mathworks/widgets/find/FindClientRegistry$6 +instanceKlass javax/xml/bind/annotation/XmlElementRef +instanceKlass javax/xml/bind/annotation/XmlElementDecl +instanceKlass com/mathworks/widgets/find/LookinItem +instanceKlass javax/xml/bind/annotation/XmlElement +instanceKlass javax/xml/bind/annotation/XmlAttribute +instanceKlass com/mathworks/widgets/find/FindClientRegistry$RegisteredComponent +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Quick +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Init +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/LocatableAnnotation +instanceKlass com/mathworks/widgets/find/FindClientRegistry$3 +instanceKlass com/mathworks/widgets/find/FindClientRegistry +instanceKlass javax/xml/bind/annotation/XmlRegistry +instanceKlass com/sun/xml/internal/bind/v2/model/core/Ref +instanceKlass com/sun/xml/internal/bind/api/CompositeStructure +instanceKlass com/sun/xml/internal/bind/v2/runtime/IllegalAnnotationsException$Builder +instanceKlass com/sun/xml/internal/bind/v2/runtime/RuntimeUtil +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1$1 +instanceKlass com/mathworks/eps/notificationclient/impl/utils/LogMessageTask +instanceKlass com/mathworks/eps/notificationclient/impl/executors/LabelledThreadFactory +instanceKlass com/mathworks/widgets/messagepanel/DefaultMessagePanelPainter +instanceKlass com/sun/xml/internal/bind/v2/model/impl/AnyTypeImpl +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl$1 +instanceKlass javax/xml/datatype/Duration +instanceKlass com/mathworks/eps/notificationclient/impl/executors/ExecutorServiceGroup +instanceKlass com/mathworks/eps/notificationclient/messages/utils/APSConstants +instanceKlass org/apache/http/client/CredentialsProvider +instanceKlass org/apache/http/auth/Credentials +instanceKlass org/apache/http/HttpEntity +instanceKlass com/mathworks/eps/notificationclient/impl/utils/APSUtils +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationTransporter +instanceKlass com/mathworks/eps/notificationclient/messages/request/NotificationRequestMessage +instanceKlass org/netbeans/editor/CodeFoldingSideBar$PaintInfo +instanceKlass com/mathworks/eps/notificationclient/impl/NotificationClientImpl +instanceKlass com/mathworks/eps/notificationclient/api/NotificationClient +instanceKlass com/mathworks/eps/notificationclient/impl/RemoteClientCreator +instanceKlass com/mathworks/eps/notificationclient/api/ClientCreator +instanceKlass com/mathworks/webintegration/vrd/VRDController$ValidateCommandWorker$1 +instanceKlass javax/xml/datatype/XMLGregorianCalendar +instanceKlass javax/activation/DataHandler +instanceKlass com/mathworks/vrd/command/ValidateCommandInternal +instanceKlass com/mathworks/vrd/command/ValidateCommandImpl +instanceKlass javax/xml/datatype/DatatypeConstants$Field +instanceKlass javax/xml/datatype/DatatypeConstants +instanceKlass javax/xml/namespace/QName$1 +instanceKlass javax/xml/namespace/QName +instanceKlass com/mathworks/vrd/license/LicenseUtil +instanceKlass com/sun/xml/internal/bind/v2/model/impl/RuntimeBuiltinLeafInfoImpl$1 +instanceKlass com/sun/xml/internal/bind/v2/model/impl/LeafInfoImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/Transducer +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeBuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeNonElement +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/BuiltinLeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/LeafInfo +instanceKlass com/sun/xml/internal/bind/v2/model/core/MaybeElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/NonElement +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfo +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/Locatable +instanceKlass com/sun/xml/internal/bind/v2/model/impl/TypeInfoSetImpl +instanceKlass com/sun/xml/internal/bind/v2/model/runtime/RuntimeTypeInfoSet +instanceKlass com/sun/xml/internal/bind/v2/model/core/TypeInfoSet +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder$1 +instanceKlass com/sun/xml/internal/bind/v2/model/core/ErrorHandler +instanceKlass com/sun/xml/internal/bind/v2/runtime/Location +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils$1 +instanceKlass com/sun/xml/internal/bind/v2/model/nav/TypeVisitor +instanceKlass com/sun/xml/internal/bind/v2/model/nav/ReflectionNavigator +instanceKlass com/sun/xml/internal/bind/v2/model/nav/Navigator +instanceKlass com/sun/xml/internal/bind/v2/model/impl/Utils +instanceKlass com/sun/xml/internal/bind/WhiteSpaceProcessor +instanceKlass javax/xml/bind/annotation/XmlSchema +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilder +instanceKlass com/sun/xml/internal/bind/v2/model/impl/ModelBuilderI +instanceKlass com/mathworks/eps/notificationclient/api/utils/ClassLoaderUtils +instanceKlass com/sun/xml/internal/bind/v2/runtime/NameBuilder +instanceKlass com/sun/istack/internal/Pool$Impl +instanceKlass com/sun/istack/internal/Pool +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap$Entry +instanceKlass com/sun/xml/internal/bind/v2/util/QNameMap +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$6 +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AbstractInlineAnnotationReaderImpl +instanceKlass com/sun/xml/internal/bind/v2/runtime/JAXBContextImpl$JAXBContextBuilder +instanceKlass com/mathworks/eps/notificationclient/api/classloader/ClassLoaderHelper +instanceKlass com/sun/xml/internal/bind/v2/util/TypeCast +instanceKlass com/sun/xml/internal/bind/Util +instanceKlass com/mathworks/installservicehandler/xml/ObjectFactory +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/RuntimeAnnotationReader +instanceKlass com/sun/xml/internal/bind/v2/model/annotation/AnnotationReader +instanceKlass com/mathworks/eps/notificationclient/api/ClientFactory +instanceKlass com/sun/xml/internal/bind/v2/ContextFactory +instanceKlass com/mathworks/eps/notificationclient/api/ClientParamsBuilder +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler$Extension +instanceKlass com/mathworks/mlwidgets/graphics/PlotToolSetHandler +instanceKlass javax/xml/bind/GetPropertyAction +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber$InternalServiceCaller +instanceKlass javax/xml/bind/ContextFinder +instanceKlass javax/xml/bind/JAXBContext +instanceKlass com/mathworks/notification_client_util/UIMessage +instanceKlass com/mathworks/notification_client_util/UICallback +instanceKlass com/mathworks/notification_client_util/NotificationServiceCaller +instanceKlass com/mathworks/installservicehandler/InstallServiceHandlerFactory +instanceKlass com/mathworks/update_notification_subscriber/UpdateNotificationSubscriber +instanceKlass com/mathworks/update_notification_subscriber/NotificationSubscriber +instanceKlass com/mathworks/supportsoftwarematlabmanagement/utilities/SsiSettings +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfoImpl +instanceKlass com/mathworks/matlab_login/MATLABLoginLogoutHandler +instanceKlass com/mathworks/widgets/desk/PreferencePanel +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/SsiUpgradePreChecksUtils +instanceKlass com/mathworks/instutil/licensefiles/LicenseUtil$LicFileFilter +instanceKlass com/mathworks/mde/desk/ContributedTools$ToolBoxInfo +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1$1 +instanceKlass java/net/InetAddress$CacheEntry +instanceKlass sun/net/InetAddressCachePolicy$2 +instanceKlass sun/net/InetAddressCachePolicy$1 +instanceKlass sun/net/InetAddressCachePolicy +instanceKlass java/net/Inet4AddressImpl +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$2 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade$1 +instanceKlass com/mathworks/supportsoftwarematlabmanagement/upgrade/TriggerSsiUpgrade +instanceKlass com/mathworks/instutil/licensefiles/LicenseNamesBase +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$10 +instanceKlass com/mathworks/net/hyperlink/AbstractHyperlinkProvider +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$StartRequestedState +instanceKlass com/mathworks/instwiz/resources/ComponentName +instanceKlass com/mathworks/instutil/wizard/ComponentName +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$1 +instanceKlass com/mathworks/mde/vrd/ProxyLicenseActions +instanceKlass com/mathworks/webintegration/vrd/PostActionHandler +instanceKlass com/mathworks/webintegration/vrd/VRDController +instanceKlass com/mathworks/vrd/command/ValidateCommand +instanceKlass com/mathworks/vrd/command/ValidateCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/RefreshCommand +instanceKlass com/mathworks/vrd/command/RefreshCommandFactoryDefault +instanceKlass com/mathworks/vrd/command/DeactivateCommand +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactoryDefault +instanceKlass com/mathworks/webintegration/vrd/CurrentMatlabSearchPathLicenseFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseInfo +instanceKlass com/mathworks/vrd/model/VRDModelImpl +instanceKlass com/mathworks/mlwebservices/WSSwingWorker +instanceKlass com/mathworks/mlwebservices/DefaultService +instanceKlass com/mathworks/vrd/model/VRDModel +instanceKlass com/mathworks/mlwebservices/ValidationService +instanceKlass com/mathworks/mlwebservices/Service +instanceKlass com/mathworks/vrd/model/VRDModelFactoryDefault +instanceKlass com/mathworks/webproxy/AbstractSystemProxyConfiguration +instanceKlass com/mathworks/webproxy/SystemProxyConfiguration +instanceKlass com/mathworks/webproxy/PropertiesProxyConfigurationImpl +instanceKlass com/mathworks/webproxy/SystemPropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/AbstractCompositeProxyConfiguration +instanceKlass com/mathworks/addon_matlab_path_service_provider/DefaultCompletionObserver +instanceKlass com/mathworks/addon_enable_disable_management/AddonEnableDisableManager +instanceKlass com/mathworks/addon_enable_disable_management/java_class_path_service_provider/AddonJavaClassPathServiceProvider +instanceKlass com/mathworks/addon_matlab_path_service_provider/AddonMATLABPathServiceProvider +instanceKlass com/mathworks/addon_enable_disable_management/EnableDisableManagementNotifierImpl +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifier +instanceKlass com/mathworks/addons_common/notificationframework/RegistrationManager +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers$1 +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObserver +instanceKlass com/mathworks/addons_common/notificationframework/InstalledFolderRegistryObservers +instanceKlass java/util/concurrent/ConcurrentHashMap$MapEntry +instanceKlass com/mathworks/addons_common/notificationframework/FolderRegistry +instanceKlass com/mathworks/addons_common/notificationframework/AddonStateInitializer +instanceKlass com/mathworks/webproxy/NativeProxySettings +instanceKlass com/mathworks/addons_zip/legacy_format_support/PopulateLegacyZipsListTask +instanceKlass com/mathworks/webproxy/ProxyAuthenticator +instanceKlass com/mathworks/webproxy/SystemProxySettings +instanceKlass com/mathworks/webproxy/PropertiesProxyConfiguration +instanceKlass com/mathworks/webproxy/WebproxyFactory +instanceKlass com/mathworks/toolboxmanagement/legacy_format_support/LegacyMltbxInstallsRetriever +instanceKlass com/mathworks/instutil/WinSecurity +instanceKlass com/mathworks/addons_zip/legacy_format_support/LegacyZipsRetriever +instanceKlass com/mathworks/instutil/WindowsSecurityOverride +instanceKlass com/mathworks/appmanagement/legacy_format_support/LegacyMlappinstallInstallsRetriever +instanceKlass com/mathworks/instutil/services/ServiceThread +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/a +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsRetriever +instanceKlass com/mathworks/instutil/services/ServiceThreadFactoryImpl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcessLogger +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallationsUtil +instanceKlass java/lang/ProcessImpl$2 +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseAdapter +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$2 +instanceKlass com/mathworks/vrd/license/LicenseFileFilterImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParserImpl +instanceKlass com/mathworks/instutil/SystemEnvironment +instanceKlass com/mathworks/metadata_serializer/DocumentationMetadataSerializer +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinderDefault +instanceKlass com/mathworks/instutil/Environment +instanceKlass com/mathworks/webintegration/vrd/NativeLmgrLicenseFileFinder +instanceKlass sun/font/SunFontManager$9 +instanceKlass com/mathworks/instutil/wizard/CJKFontSize +instanceKlass com/mathworks/instutil/wizard/FontSizeStrategy +instanceKlass com/mathworks/instutil/FontHandlerImpl +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$InitialState +instanceKlass com/mathworks/instwiz/AutoCreateLogFileWILogger$LoggerState +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$4 +instanceKlass com/teamdev/jxbrowser/chromium/internal/LibraryLoader +instanceKlass com/mathworks/metadata_serializer/PathMetadataSerializer +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils$1 +instanceKlass com/sun/imageio/plugins/common/ReaderUtil +instanceKlass sun/java2d/cmm/CMSManager +instanceKlass com/sun/imageio/plugins/png/PNGImageDataEnumeration +instanceKlass javax/imageio/IIOParam +instanceKlass com/mathworks/instwiz/WIResourceBundle +instanceKlass com/mathworks/instwiz/arch/ArchGuiBase +instanceKlass javax/imageio/ImageIO$CanDecodeInputFilter +instanceKlass com/sun/imageio/stream/CloseableDisposerRecord +instanceKlass com/mathworks/instwiz/arch/ArchGui +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactoryImpl +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB$8 +instanceKlass com/mathworks/instutil/services/ProxyTester +instanceKlass com/mathworks/metadata_serializer/MetadataSerializerLoader +instanceKlass com/mathworks/instutil/InstUtilResourceBundle +instanceKlass com/mathworks/instutil/FontHandler +instanceKlass com/mathworks/metadata_serializer/AddonCoreMetadataSerializer +instanceKlass com/mathworks/instwiz/arch/ArchGuiFactory +instanceKlass com/mathworks/webintegration/vrd/VRDViewMATLAB +instanceKlass com/mathworks/metadata_core/MetadataCoreLoader +instanceKlass javax/xml/stream/XMLStreamWriter +instanceKlass org/apache/axiom/om/OMElement +instanceKlass org/apache/axiom/om/OMContainer +instanceKlass com/mathworks/jniutils_java/NativeObjectContainer +instanceKlass org/apache/axiom/om/OMNode +instanceKlass org/apache/axiom/om/OMSerializable +instanceKlass org/apache/axiom/om/OMDataSource +instanceKlass javax/xml/stream/XMLStreamReader +instanceKlass javax/xml/stream/XMLStreamConstants +instanceKlass com/mathworks/internal/activationws/client/MWAMachineAttribute +instanceKlass com/mathworks/metadata_core/CompatibilityMetadata +instanceKlass org/apache/axis2/databinding/ADBBean +instanceKlass com/mathworks/addons_metadata/AddonMetadataProviderWithFolder +instanceKlass com/mathworks/metadata_core/DocumentationMetadata +instanceKlass com/mathworks/metadata_core/PathMetadata +instanceKlass com/mathworks/metadata_core/IncludedAppsMetadata +instanceKlass com/mathworks/metadata_core/AddonCoreMetadata +instanceKlass com/mathworks/addons_common/util/InstalledAddonMetadataUtils +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyFolderStructureUtils +instanceKlass com/mathworks/resources_folder/ResourcesFolderUtils +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderView +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils$2 +instanceKlass com/mathworks/addons_common/installation_folder/InstallationFolderViewFactory +instanceKlass java/nio/file/Files$3 +instanceKlass java/nio/file/FileTreeWalker$Event +instanceKlass com/mathworks/addons_metadata/AddonMetadataProvider +instanceKlass java/nio/file/FileTreeWalker$DirectoryNode +instanceKlass sun/nio/fs/AbstractBasicFileAttributeView +instanceKlass sun/nio/fs/WindowsFileAttributeViews +instanceKlass java/nio/file/attribute/BasicFileAttributeView +instanceKlass java/nio/file/FileTreeWalker +instanceKlass com/mathworks/toolboxmanagement/util/ManagerUtils +instanceKlass com/mathworks/appmanagement/model/LegacyPackagingApi +instanceKlass com/mathworks/appmanagement/model/PackagingApi +instanceKlass com/mathworks/instutil/NativeUtility +instanceKlass com/mathworks/addons_common/util/InstallationFoldersWalker +instanceKlass com/mathworks/appmanagement/model/InstalledAppMetadata +instanceKlass com/mathworks/appmanagement/model/AppMetadata +instanceKlass com/mathworks/instutil/DisplayProperties +instanceKlass com/mathworks/instutil/MachineInfo +instanceKlass com/mathworks/appmanagement/MlappinstallUtil +instanceKlass com/mathworks/vrd/command/ValidateCommandFactory +instanceKlass com/mathworks/vrd/command/RefreshCommandFactory +instanceKlass com/mathworks/vrd/command/DeactivateCommandFactory +instanceKlass com/mathworks/vrd/license/LicenseFactory +instanceKlass com/mathworks/addons_zip/tasks/GetInstalledTask +instanceKlass com/mathworks/vrd/license/License +instanceKlass com/mathworks/toolboxmanagement/tasks/GetInstalledTask +instanceKlass com/mathworks/vrd/model/VRDModelFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileFinder +instanceKlass com/mathworks/addons_app/tasks/GetInstalledTask +instanceKlass com/mathworks/vrd/license/LicenseFileFilter +instanceKlass com/mathworks/addons_common/util/FolderNameUtils +instanceKlass com/teamdev/jxbrowser/chromium/internal/SharedMemoryLibrary +instanceKlass com/mathworks/instutil/services/ServiceThreadFactory +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileParser +instanceKlass com/mathworks/vrd/view/VRDView +instanceKlass com/mathworks/instutil/services/ServiceThreadView +instanceKlass com/mathworks/webintegration/vrd/VRDConfigMATLAB +instanceKlass com/mathworks/vrd/config/VRDConfig +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnInformation +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/d +instanceKlass java/net/Socket +instanceKlass com/mathworks/addons_product/ProductManager$1 +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder$1 +instanceKlass com/mathworks/matlab_login/UserLoginInfo +instanceKlass com/mathworks/vrd/config/VRDConfigFactory +instanceKlass com/mathworks/matlab_login/PersistLoginInfo +instanceKlass com/mathworks/addons_common/InstalledAddon$Builder +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/LatchUtil +instanceKlass com/mathworks/matlab_login/LoginLevel4Impl +instanceKlass com/mathworks/matlab_login/LoginLevel3Impl +instanceKlass com/mathworks/addons_product/ProductDocumentationProvider +instanceKlass com/mathworks/matlab_login/LoginLevel2Impl +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/e +instanceKlass com/mathworks/matlab_login/LoginLevel1Impl +instanceKlass com/mathworks/matlab_login/LoginLevel0Impl +instanceKlass com/mathworks/matlab_login/LoginLevel +instanceKlass com/mathworks/product/util/ProductIdentifierMap +instanceKlass com/mathworks/webintegration/vrd/LicenseActions$ActionList +instanceKlass sun/net/ResourceManager +instanceKlass com/mathworks/webintegration/vrd/LicenseActions +instanceKlass java/net/DatagramPacket +instanceKlass java/net/DatagramSocket$1 +instanceKlass java/net/AbstractPlainDatagramSocketImpl$1 +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory$LazyHolder +instanceKlass com/mathworks/matlab_login/Task +instanceKlass java/net/DatagramSocketImpl +instanceKlass com/mathworks/matlab_login/MatlabLogin +instanceKlass com/mathworks/mde/vrd/NoOpLicenseActions +instanceKlass com/mathworks/webintegration/vrd/LicenseActionsFactory +instanceKlass java/net/DefaultDatagramSocketImplFactory$1 +instanceKlass java/net/DefaultDatagramSocketImplFactory +instanceKlass java/net/DatagramSocket +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator$1 +instanceKlass com/mathworks/mde/vrd/LicenseActions +instanceKlass com/mathworks/mde/vrd/LicenseActionsFactory +instanceKlass sun/net/NetHooks +instanceKlass com/mathworks/services/lmgr/FeatureInfo +instanceKlass com/mathworks/mde/desk/StartupClassLoader$1 +instanceKlass java/net/InetSocketAddress$InetSocketAddressHolder +instanceKlass com/mathworks/mde/desk/StartupClassLoader +instanceKlass java/net/PlainSocketImpl$1 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$3 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$1 +instanceKlass java/net/AbstractPlainSocketImpl$1 +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader$2 +instanceKlass java/net/SocketImpl +instanceKlass java/net/SocketOptions +instanceKlass com/mathworks/mde/desk/LoginStatusIndicatorLoader +instanceKlass java/net/SocksConsts +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$1 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifierFactory +instanceKlass java/net/ServerSocket +instanceKlass sun/net/util/IPAddressUtil +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$9 +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/SocketUtil +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$8 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$13 +instanceKlass com/teamdev/jxbrowser/chromium/Browser$b +instanceKlass com/teamdev/jxbrowser/chromium/ProxyConfig +instanceKlass com/mathworks/html/jxbrowser/chromium/ProxyHandler +instanceKlass com/teamdev/jxbrowser/chromium/PluginManager +instanceKlass java/text/BreakIterator +instanceKlass com/teamdev/jxbrowser/chromium/dom/DOMDocument +instanceKlass com/teamdev/jxbrowser/chromium/dom/SearchContext +instanceKlass javax/swing/text/GlyphView$GlyphPainter +instanceKlass com/teamdev/jxbrowser/chromium/DownloadItem +instanceKlass com/teamdev/jxbrowser/chromium/Callback +instanceKlass com/teamdev/jxbrowser/chromium/events/LoadListener +instanceKlass com/teamdev/jxbrowser/chromium/events/BrowserListener +instanceKlass com/teamdev/jxbrowser/chromium/CacheStorage +instanceKlass com/teamdev/jxbrowser/chromium/CookieStorage +instanceKlass com/teamdev/jxbrowser/chromium/Browser +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder$TooltipBuilderArgumentAppender +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$TooltipBuilder +instanceKlass com/mathworks/html/jxbrowser/chromium/MWNetworkDelegate +instanceKlass com/teamdev/jxbrowser/chromium/swing/DefaultNetworkDelegate +instanceKlass com/google/common/primitives/Ints +instanceKlass com/teamdev/jxbrowser/chromium/internal/BrowserContextIDGenerator +instanceKlass com/teamdev/jxbrowser/chromium/FormData +instanceKlass com/teamdev/jxbrowser/chromium/PostData +instanceKlass com/teamdev/jxbrowser/chromium/HttpHeaders +instanceKlass com/teamdev/jxbrowser/chromium/NetworkService +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/c +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumEventQueue +instanceKlass com/teamdev/jxbrowser/chromium/ZoomService +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/b +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities$1 +instanceKlass com/mathworks/widgets/text/mcode/CodeAnalyzerUtilities +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerAdapter +instanceKlass com/teamdev/jxbrowser/chromium/internal/FileUtil +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor$a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumExtractor +instanceKlass com/mathworks/services/lmgr/NonDemoFeatureInfoList +instanceKlass java/text/DontCareFieldPosition$1 +instanceKlass java/text/CalendarBuilder +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$3 +instanceKlass com/mathworks/install/InstalledProduct +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory$LoggingUncaughtExceptionHandler +instanceKlass com/mathworks/toolbox/parallel/pctutil/concurrent/NamedThreadFactory +instanceKlass com/teamdev/jxbrowser/chromium/ao +instanceKlass com/mathworks/toolbox/parallel/pctutil/logging/RootLog +instanceKlass com/mathworks/toolbox/distcomp/RootLog +instanceKlass com/mathworks/toolbox/distcomp/ui/PackageInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/l +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeNotification +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$PoolIconDecorator +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$PollingNotificationMacPathsWorkaround +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/k +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$6 +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressNotifier +instanceKlass com/mathworks/toolbox/distcomp/mjs/service/DistcompServiceInfo +instanceKlass com/teamdev/jxbrowser/chromium/al +instanceKlass com/mathworks/toolbox/distcomp/wsclients/cloudconsole/CloudConsoleClusterInfo +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip +instanceKlass com/teamdev/jxbrowser/chromium/an +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTip +instanceKlass com/teamdev/jxbrowser/chromium/am +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicatorTooltip$HyperlinkHandler +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChromiumProcess +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator$ParallelStatusIndicatorUI$TooltipDetailsUpdater +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/ChannelStream +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChannelStreamListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory$Fireable +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionService +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Server +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionFactory +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC$a +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/IPCChannelListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ChromiumProcessListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionInfo +instanceKlass com/mathworks/toolbox/parallel/util/concurrent/PredicateCondition +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/events/ServerListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/IPC +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/Sender +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionEvent +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClientSessionInfoProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/SessionInfoProvider +instanceKlass com/teamdev/jxbrowser/chromium/BrowserContext +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudProgressListener +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionListener +instanceKlass sun/nio/fs/WindowsSecurity +instanceKlass com/mathworks/toolbox/distcomp/mjs/cloudprogress/CloudCreationListener +instanceKlass sun/nio/fs/AbstractAclFileAttributeView +instanceKlass sun/nio/fs/DynamicFileAttributeView +instanceKlass com/mathworks/toolbox/distcomp/pmode/SessionCreationListener +instanceKlass java/nio/file/attribute/AclFileAttributeView +instanceKlass java/nio/file/attribute/FileOwnerAttributeView +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelStatusIndicator +instanceKlass sun/nio/fs/WindowsLinkSupport +instanceKlass com/mathworks/toolbox/distcomp/ui/MatlabPoolIndicator +instanceKlass sun/nio/fs/WindowsFileSystemProvider$1 +instanceKlass com/teamdev/jxbrowser/chromium/ProductInfo +instanceKlass com/teamdev/jxbrowser/chromium/internal/ChromiumBuild +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserVersionInfo +instanceKlass com/teamdev/jxbrowser/chromium/NetworkDelegate +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserContextRegistry +instanceKlass com/mathworks/ddux/JSBridge$DataSubscriber +instanceKlass com/mathworks/html/jxbrowser/chromium/ChromiumLocaleUtils +instanceKlass com/mathworks/ddux/JSBridge$2 +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DebugWindowListener +instanceKlass com/mathworks/html/jxbrowser/chromium/debug/ChromiumDebugMode$DefaultDebugListener +instanceKlass com/teamdev/jxbrowser/chromium/internal/Environment +instanceKlass com/teamdev/jxbrowser/chromium/DownloadHandler +instanceKlass com/teamdev/jxbrowser/chromium/PrintHandler +instanceKlass com/teamdev/jxbrowser/chromium/DialogHandler +instanceKlass com/mathworks/html/jxbrowser/chromium/BrowserViewBuilder +instanceKlass com/teamdev/jxbrowser/chromium/BrowserPreferences +instanceKlass com/mathworks/widgets/text/layer/DefaultEditorMessage +instanceKlass com/mathworks/matlab/api/editor/EditorMessage +instanceKlass com/mathworks/widgets/text/MarkPair +instanceKlass com/mathworks/toolstrip/accessories/TSRobot +instanceKlass com/mathworks/install_impl/usage/NonCustomerFacingUsageStrategy +instanceKlass java/awt/AWTEvent$2 +instanceKlass java/awt/LightweightDispatcher$1 +instanceKlass java/awt/Container$MouseEventTargetFilter +instanceKlass java/awt/Container$EventTargetFilter +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$UpdateEvent +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28$1 +instanceKlass java/awt/KeyboardFocusManager$LightweightFocusRequest +instanceKlass java/awt/DefaultKeyboardFocusManager$TypeAheadMarker +instanceKlass java/awt/KeyboardFocusManager$HeavyweightFocusRequest +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$LocalWindowListener$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$38 +instanceKlass com/mathworks/util/tree/TreeUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$6 +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$11 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$3 +instanceKlass com/mathworks/install_impl/usage/CustomerFacingUsageStrategy +instanceKlass com/mathworks/install/usage/UsageStrategy +instanceKlass com/mathworks/install_impl/usage/UsageStrategyFactory +instanceKlass com/mathworks/install_impl/InstallableProductImpl$InstallableComponentVisitor +instanceKlass org/jdom/output/Format$DefaultEscapeStrategy +instanceKlass org/jdom/output/Format$TextMode +instanceKlass org/jdom/output/EscapeStrategy +instanceKlass org/jdom/output/Format +instanceKlass org/jdom/output/NamespaceStack +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/NonBlockingMessage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/CommonMessage +instanceKlass com/teamdev/jxbrowser/chromium/internal/ipc/message/Message +instanceKlass org/jdom/output/XMLOutputter +instanceKlass com/mathworks/install_impl/ComponentContainerImpl$ComponentDataFlyweight +instanceKlass com/mathworks/install_impl/ProductImpl +instanceKlass com/mathworks/html/jxbrowser/chromium/logging/JxBrowserChromiumLogger +instanceKlass com/mathworks/html/HtmlPanelSupport +instanceKlass com/mathworks/html/jxbrowser/chromium/NavigationHelper +instanceKlass com/mathworks/html/jxbrowser/chromium/JxBrowserChromiumFactory +instanceKlass java/util/Formattable +instanceKlass com/mathworks/install_impl/UninstallerComponentContainerHandler +instanceKlass com/mathworks/mlwidgets/html/ChromiumConfig$1 +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager$ZoomLevel +instanceKlass com/mathworks/html/jxbrowser/chromium/ZoomManager +instanceKlass com/mathworks/install_impl/AbstractFileListParser +instanceKlass com/mathworks/install/FileListParser +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder$1 +instanceKlass com/mathworks/html/ProxySettings$1 +instanceKlass com/mathworks/html/ProxySettings +instanceKlass com/mathworks/html/HtmlActionGroup +instanceKlass java/io/SerialCallbackContext +instanceKlass java/io/ObjectStreamClass$ClassDataSlot +instanceKlass java/io/ObjectStreamClass$FieldReflector +instanceKlass com/teamdev/jxbrowser/chromium/LoadHandler +instanceKlass java/io/ObjectStreamClass$2 +instanceKlass java/io/ObjectStreamClass$EntryFuture +instanceKlass java/io/ObjectStreamClass$Caches +instanceKlass java/io/ObjectStreamClass +instanceKlass java/io/Bits +instanceKlass sun/misc/ObjectInputFilter$Config$$Lambda$21 +instanceKlass sun/misc/ObjectInputFilter +instanceKlass sun/misc/ObjectInputFilter$Config +instanceKlass java/io/ObjectInputStream$ValidationList +instanceKlass java/io/ObjectInputStream$HandleTable$HandleList +instanceKlass java/io/ObjectInputStream$HandleTable +instanceKlass java/io/ObjectInputStream$$Lambda$20 +instanceKlass sun/misc/JavaObjectInputStreamAccess +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/misc/ObjectStreamClassValidator +instanceKlass java/io/ObjectInputStream$1 +instanceKlass sun/misc/JavaOISAccess +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableUtils +instanceKlass com/mathworks/install/OwningProductResponse +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl$FileCollectionVisitor +instanceKlass com/mathworks/html/jxbrowser/chromium/LightweightChromiumBrowser +instanceKlass com/mathworks/install_impl/InstalledProductDataImpl +instanceKlass com/mathworks/html/ProxyAuthenticationFailureHandler +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserBuilder +instanceKlass com/mathworks/mlwidgets/html/LightweightBrowserFactory +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/CachedLightweightBrowserFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/OpenToLineColumn +instanceKlass com/mathworks/instutil/FolderUtilsImpl +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceImpl$2 +instanceKlass com/mathworks/html/LightweightBrowser +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ContextMenuService +instanceKlass com/mathworks/instutil/ParentFolderOperation +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceImpl +instanceKlass com/mathworks/instutil/FileIO +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$4 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$2 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$2 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$3 +instanceKlass com/google/inject/internal/InjectorImpl$2$1 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$5 +instanceKlass com/google/inject/internal/CircularDependencyProxy +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$4 +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter$1 +instanceKlass sun/awt/EventListenerAggregate +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$3 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/ConnectorFactory +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport$1 +instanceKlass com/mathworks/fileiconprovider/FileIconProvider$1 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentEventSupport +instanceKlass com/jidesoft/popup/JidePopup$17 +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService$1 +instanceKlass java/net/URLEncoder +instanceKlass com/jidesoft/popup/JidePopup$16 +instanceKlass java/net/URLDecoder +instanceKlass com/jidesoft/popup/JidePopup$15 +instanceKlass com/google/gson/annotations/SerializedName +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$AsMap$AsMapIterator +instanceKlass com/mathworks/settings_service/SettingsService$1 +instanceKlass com/mathworks/mde/desk/ToolsFetcher$3 +instanceKlass java/awt/datatransfer/FlavorListener +instanceKlass com/mathworks/mde/desk/ToolsFetcher$2 +instanceKlass com/mathworks/services/clipboardservice/ConnectorClipboardService +instanceKlass com/mathworks/mde/desk/ToolsFetcher$1 +instanceKlass com/mathworks/searchservice/SearchService$1 +instanceKlass com/google/inject/internal/InternalContext$DependencyStack +instanceKlass com/google/inject/internal/InternalContext +instanceKlass com/google/inject/internal/InternalInjectorCreator$1 +instanceKlass com/google/common/collect/Iterators$5 +instanceKlass com/google/common/collect/TransformedIterator +instanceKlass com/google/common/collect/FluentIterable +instanceKlass com/google/common/collect/Iterables +instanceKlass java/lang/reflect/WeakCache$LookupValue +instanceKlass com/google/inject/internal/InjectorImpl$2 +instanceKlass com/mathworks/install/command/NativeDotNet +instanceKlass java/lang/ProcessBuilder +instanceKlass java/lang/Process +instanceKlass com/mathworks/instutil/licensefiles/LicenseFileLocation +instanceKlass com/mathworks/install/input/DeltaData +instanceKlass com/mathworks/install/input/ComponentData +instanceKlass com/mathworks/install/input/ProductData +instanceKlass com/mathworks/install/input/ComponentURLProvider +instanceKlass com/mathworks/install/input/InstallationInputFile +instanceKlass com/mathworks/install/udc/UdcResourceKey +instanceKlass com/mathworks/instutil/InstallerDownloadURLInfo +instanceKlass com/mathworks/install/InputStreamProvider +instanceKlass com/mathworks/install/input/Contents +instanceKlass java/awt/geom/LineIterator +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$16 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$15 +instanceKlass sun/awt/image/OffScreenImageSource +instanceKlass java/lang/Deprecated +instanceKlass java/util/function/BiConsumer +instanceKlass com/sun/java/swing/plaf/windows/WindowsButtonUI$1 +instanceKlass com/google/inject/util/Types +instanceKlass com/mathworks/install/ComponentAggregator +instanceKlass com/mathworks/install_impl/ProductInstallerImpl$ComponentVisitor +instanceKlass java/awt/geom/RoundRectIterator +instanceKlass sun/java2d/pipe/ShapeSpanIterator +instanceKlass sun/java2d/pipe/SpanIterator +instanceKlass java/awt/PointerInfo +instanceKlass sun/awt/DefaultMouseInfoPeer +instanceKlass java/awt/peer/MouseInfoPeer +instanceKlass java/awt/MouseInfo +instanceKlass com/mathworks/install_impl/XMLParserImpl +instanceKlass com/mathworks/install/XMLParser +instanceKlass com/mathworks/install/ComponentContainerHandler +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler$1 +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$2 +instanceKlass com/mathworks/install/InstallableComponent +instanceKlass com/mathworks/install/input/ComponentSourceProvider +instanceKlass com/mathworks/install_impl/InstallableProductImpl +instanceKlass com/mathworks/install/InstallableProduct +instanceKlass com/mathworks/install/ComponentData +instanceKlass com/google/inject/internal/SingleParameterInjector +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService$1 +instanceKlass com/mathworks/pathdataservice/PathDataService$1 +instanceKlass com/mathworks/mde/desk/PrefsFetcher$2 +instanceKlass com/mathworks/mde/desk/PrefsFetcher$1 +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory$1 +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService$1 +instanceKlass com/google/inject/internal/cglib/reflect/$FastMember +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService$1 +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer$2 +instanceKlass com/mathworks/mldosharingservice/SharingDataService +instanceKlass com/google/inject/internal/DefaultConstructionProxyFactory +instanceKlass com/google/inject/internal/ConstructorInjector +instanceKlass com/mathworks/addons_product/MatlabOnlineStrategy +instanceKlass com/mathworks/settings_service/SettingsService +instanceKlass com/google/inject/internal/ConstructionProxy +instanceKlass com/google/inject/internal/cglib/proxy/$CallbackFilter +instanceKlass com/mathworks/searchservice/SearchService +instanceKlass com/google/inject/internal/ProxyFactory +instanceKlass com/google/inject/internal/MembersInjectorImpl +instanceKlass com/mathworks/pathdataservice/PathDataService +instanceKlass com/google/inject/internal/EncounterImpl +instanceKlass com/mathworks/fileiconprovider/FileIconProvider +instanceKlass com/google/inject/internal/ConstructorBindingImpl$Factory +instanceKlass com/google/inject/ProvidedBy +instanceKlass com/mathworks/filesystem_adapter/services/AddressBarFileDataService +instanceKlass com/google/inject/ImplementedBy +instanceKlass com/mathworks/filesystem_adapter/services/actiondataservice/JSActionsSynchronizer +instanceKlass com/mathworks/filesystem_adapter/services/filedataservice/FileDataService +instanceKlass com/mathworks/filesystem_adapter/services/filechooserservice/FileChooserService +instanceKlass com/mathworks/filesystem_adapter/services/validationService/ValidationService +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback$ProvisionCallback +instanceKlass com/google/inject/internal/ProviderInternalFactory +instanceKlass com/mathworks/mde/explorer/JavaScriptCurrentFolderInstance +instanceKlass com/mathworks/mde/desk/ContributedTools +instanceKlass com/google/inject/spi/ProvidesMethodTargetVisitor +instanceKlass com/mathworks/widgets/desk/PreferencePanel$Tool +instanceKlass com/mathworks/mde/desk/PrefsFetcher$Handler +instanceKlass com/mathworks/mde/desk/PrefsFetcher +instanceKlass com/google/inject/internal/ProvisionListenerStackCallback +instanceKlass com/mathworks/matlabserver/connector/impl/ConnectorLifecycleHelperImpl$1 +instanceKlass com/google/common/cache/LocalCache$AbstractReferenceEntry +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore$KeyBinding +instanceKlass com/google/inject/internal/InternalFactoryToProviderAdapter +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory$ReentrantCycleDetectingLock +instanceKlass com/google/inject/internal/ConstructionContext +instanceKlass com/google/inject/internal/SingletonScope$1 +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycle +instanceKlass com/mathworks/mde/desk/ToolsFetcher$ToolData +instanceKlass com/google/inject/internal/ProviderToInternalFactoryAdapter +instanceKlass com/mathworks/mde/desk/ToolsFetcher$Handler +instanceKlass com/google/inject/internal/FactoryProxy +instanceKlass com/mathworks/mde/desk/ToolsFetcher +instanceKlass com/google/inject/internal/util/Classes +instanceKlass com/google/inject/spi/ExposedBinding +instanceKlass com/google/inject/internal/CreationListener +instanceKlass com/google/inject/internal/InjectorShell$LoggerFactory +instanceKlass com/google/inject/internal/InjectorShell$InjectorFactory +instanceKlass com/google/inject/internal/Initializables$1 +instanceKlass com/google/inject/internal/Initializables +instanceKlass com/google/inject/internal/ConstantFactory +instanceKlass com/google/inject/internal/InjectorShell +instanceKlass com/google/inject/internal/ProvisionListenerCallbackStore +instanceKlass com/google/inject/spi/TypeEncounter +instanceKlass com/google/inject/internal/SingleMemberInjector +instanceKlass com/google/inject/internal/MembersInjectorStore +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$4 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$2 +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$1 +instanceKlass com/google/inject/spi/TypeConverterBinding +instanceKlass com/google/inject/matcher/AbstractMatcher +instanceKlass com/google/inject/matcher/Matchers +instanceKlass com/google/inject/internal/TypeConverterBindingProcessor$5 +instanceKlass com/google/inject/internal/ConstructionProxyFactory +instanceKlass com/google/inject/internal/FailableCache +instanceKlass com/google/inject/internal/ConstructorInjectorStore +instanceKlass com/google/inject/internal/DeferredLookups +instanceKlass com/google/inject/internal/InjectorImpl$BindingsMultimap +instanceKlass com/google/inject/spi/ProviderBinding +instanceKlass com/google/inject/spi/ConvertedConstantBinding +instanceKlass com/google/inject/internal/InjectorImpl +instanceKlass com/google/inject/internal/Lookups +instanceKlass com/google/inject/internal/InjectorImpl$InjectorOptions +instanceKlass com/google/inject/spi/DefaultBindingScopingVisitor +instanceKlass java/net/Proxy +instanceKlass com/mathworks/webproxy/ProxyConfigurationVisitor +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$5 +instanceKlass com/mathworks/instutil/IOObserver +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$4 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$3 +instanceKlass com/mathworks/install/InstallFlowControlHandler +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$2 +instanceKlass com/mathworks/install/archive/Archive +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace$1$1 +instanceKlass com/mathworks/instutil/DefaultSecurityOverrideImpl +instanceKlass com/mathworks/matlabserver/connectorcommon/embeddedwebserver/WebServerConfig +instanceKlass com/mathworks/peermodel/impl/ObservableImpl$PeerNodeListenerAdapter +instanceKlass sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter +instanceKlass sun/util/locale/provider/TimeZoneNameUtility +instanceKlass java/util/logging/LogRecord +instanceKlass com/mathworks/peermodel/PeerNodeVisitor$Cancellable +instanceKlass com/mathworks/peermodel/impl/PeerNodeImpl +instanceKlass com/mathworks/peermodel/PeerNodeSyncable +instanceKlass com/mathworks/peermodel/ManagerInfo +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$2 +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer$1 +instanceKlass com/mathworks/peermodel/synchronizer/utils/EventCoalescer +instanceKlass com/mathworks/instutil/ResourceDefaultLocaleImpl +instanceKlass com/mathworks/instutil/ResourceLocale +instanceKlass com/mathworks/instutil/ResourceLocaleFactory +instanceKlass com/mathworks/peermodel/impl/ObservableImpl +instanceKlass org/jdom/ContentList$FilterListIterator +instanceKlass com/mathworks/peermodel/events/Event +instanceKlass com/mathworks/peermodel/PeerNodeVisitor +instanceKlass org/jdom/filter/AbstractFilter +instanceKlass com/mathworks/peermodel/PeerNode +instanceKlass com/mathworks/peermodel/events/PeerNodeListenable +instanceKlass com/mathworks/peermodel/impl/PeerModelManagerImpl +instanceKlass com/mathworks/peermodel/PeerModelManagerSyncable +instanceKlass com/mathworks/peermodel/events/ObservableSyncable +instanceKlass org/jdom/Namespace +instanceKlass com/mathworks/peermodel/events/PeerNodeAdapter +instanceKlass com/mathworks/peermodel/events/PeerNodeListener +instanceKlass org/jdom/filter/Filter +instanceKlass com/mathworks/mde/liveeditor/debug/PeerModelBreakpointDataStoreService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointFileService +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$2 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService$5 +instanceKlass org/jdom/Verifier +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMessageService +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService$1 +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$LocatorProxy +instanceKlass org/xml/sax/ext/Locator2 +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/export/LaTeXExportStylesheetService +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$7 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$6 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$5 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$3 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$8 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$4 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$2 +instanceKlass org/apache/xerces/util/URI +instanceKlass com/mathworks/connector/message_service/bayeux/PublishRequest +instanceKlass com/google/gson/internal/LinkedTreeMap$LinkedTreeMapIterator +instanceKlass com/google/gson/internal/Streams +instanceKlass com/google/gson/internal/LinkedTreeMap$Node +instanceKlass com/google/gson/internal/LinkedTreeMap$1 +instanceKlass org/apache/xerces/util/SAXMessageFormatter +instanceKlass org/jdom/input/BuilderErrorHandler +instanceKlass com/google/gson/internal/ConstructorConstructor$11 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$3 +instanceKlass org/apache/xerces/parsers/SecuritySupport$3 +instanceKlass org/xml/sax/DocumentHandler +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/ExtraStepOnLastLineOfFunctionInterceptor +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$StackCallback +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller$9 +instanceKlass javax/xml/parsers/SAXParser +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/debug/DebuggerInstaller +instanceKlass javax/xml/parsers/SAXParserFactory +instanceKlass com/mathworks/services/mlx/service/SerializationService$3 +instanceKlass org/jdom/input/JAXPParserFactory +instanceKlass com/mathworks/services/mlx/service/SerializationService$2 +instanceKlass com/mathworks/services/mlx/service/SerializationService$1 +instanceKlass com/mathworks/services/mlx/service/SerializationService +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$2 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService$1 +instanceKlass com/mathworks/mde/editor/plugins/editordataservice/MatlabExecutionService +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService$Subscription +instanceKlass org/jdom/Document +instanceKlass com/mathworks/messageservice/MessageUtils +instanceKlass org/jdom/input/TextBuffer +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$2 +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager$SingletonHolder +instanceKlass com/mathworks/services/editordataservice/EditorDataServiceManager +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientPropertiesResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentClientProperties +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProductsResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentEntitledProducts +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDirResponse +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$GetCurrentUserHomeDir +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl$OpenWithBrowser +instanceKlass org/jdom/Content +instanceKlass org/jdom/Parent +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenOrCreateInEditor +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl$OpenToLineInEditor +instanceKlass org/xml/sax/ext/DeclHandler +instanceKlass org/xml/sax/ext/LexicalHandler +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonceResponse +instanceKlass com/mathworks/matlabserver/connector/nonce/NewNonce +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonceResponse +instanceKlass org/jdom/DefaultJDOMFactory +instanceKlass com/mathworks/matlabserver/connector/nonce/ApplyNonce +instanceKlass org/jdom/JDOMFactory +instanceKlass com/mathworks/matlabserver/connector/http/AddStaticContentPath +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener$MatlabExecutionStateReturnVal +instanceKlass com/mathworks/matlabserver/workercommon/desktopservices/eval/WorkerEvalExecutionListener +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoResponse +instanceKlass org/jdom/input/SAXBuilder +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$EchoRequest +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$2 +instanceKlass com/mathworks/instutil/VersionInfo +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$1 +instanceKlass sun/nio/fs/WindowsUriSupport +instanceKlass com/mathworks/connector/Promise +instanceKlass com/mathworks/connector/Future +instanceKlass com/mathworks/connector/cosg/CosgRegisterOpaqueType +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl$CosgHandlerContainer +instanceKlass com/mathworks/instutil/logging/AbstractAppLogger +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateResponseMessageDO +instanceKlass com/mathworks/instutil/ExecutorServiceManagerImpl +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateRequestMessageDO +instanceKlass com/mathworks/cosg/CosgResponseWrapper +instanceKlass com/mathworks/matlabserver/workercommon/messageservices/matlabexecutionservices/MatlabExecutionStateImpl +instanceKlass com/mathworks/peermodel/synchronizer/utils/ClientPagedDataJSONConverter +instanceKlass com/mathworks/peermodel/pageddata/PagedDataFactory +instanceKlass com/mathworks/peermodel/pageddata/impl/PagedDataImpl +instanceKlass com/mathworks/peermodel/pageddata/ClientPagedData +instanceKlass com/mathworks/peermodel/pageddata/ServerPagedData +instanceKlass com/mathworks/webproxy/ProxyConfiguration +instanceKlass com/mathworks/instutil/Downloader +instanceKlass com/mathworks/peermodel/PeerSynchronizerFactory +instanceKlass com/mathworks/peermodel/synchronizer/PeerSynchronizer +instanceKlass com/mathworks/peermodel/events/Observer +instanceKlass com/google/common/collect/SortedIterable +instanceKlass com/mathworks/peermodel/PeerSynchronizer +instanceKlass com/mathworks/peermodel/PeerModelManagers +instanceKlass com/mathworks/peermodel/PeerModelManager +instanceKlass com/mathworks/peermodel/events/PeerModelListenable +instanceKlass com/mathworks/peermodel/events/PeerEventObservable +instanceKlass com/mathworks/peermodel/events/Observable +instanceKlass com/mathworks/peermodel/PeerModelBuilderImpl +instanceKlass com/mathworks/peermodel/PeerModelBuilder +instanceKlass com/mathworks/peermodel/synchronizer/utils/PeerModelInitialize +instanceKlass com/mathworks/instutil/ExecutorServiceManager +instanceKlass com/mathworks/install_impl/command/DotNetFrameworkImpl +instanceKlass com/mathworks/install/command/DotNetFramework +instanceKlass com/mathworks/instutil/RegistryImpl +instanceKlass com/mathworks/instutil/ProcessExecutorImpl +instanceKlass com/mathworks/instutil/ProcessExecutor +instanceKlass com/mathworks/instutil/MWNativeLibraryLoader +instanceKlass com/mathworks/connector/message_service/impl/JniMessageServiceAdaptorImpl$1 +instanceKlass com/mathworks/messageservice/MessageServiceFactory +instanceKlass com/google/gson/BufferedImageConverter +instanceKlass com/mathworks/messageservice/json/converters/JSONTypeConverter +instanceKlass com/mathworks/instutil/logging/AppLogger +instanceKlass com/mathworks/instutil/WinTaskSchedulerImpl +instanceKlass com/mathworks/instutil/WinTaskScheduler +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl$MessageJSONCustomConverter +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactoryImpl +instanceKlass com/mathworks/instutil/licensefiles/LicenseLocationFactory +instanceKlass com/mathworks/install_impl/ApplicationSpecificCommandAdapter +instanceKlass com/mathworks/connector/message_service/impl/JSONConverterImpl +instanceKlass com/mathworks/install/ApplicationSpecificCommand +instanceKlass com/mathworks/install_impl/InstallOptionProviderImpl +instanceKlass com/mathworks/install/InstallOptionProvider +instanceKlass com/mathworks/instutil/LocalizedHelpPathFinder +instanceKlass com/mathworks/messageservice/json/JSONCustomConverters +instanceKlass com/mathworks/instutil/SecurityOverride +instanceKlass com/mathworks/instutil/PlatformImpl +instanceKlass com/mathworks/messageservice/MessageService +instanceKlass com/mathworks/instutil/LicenseNumberProvider +instanceKlass com/mathworks/install/CommandContainer +instanceKlass com/mathworks/install_impl/input/UpdateComponentContainerImpl +instanceKlass com/mathworks/install/UpdateComponentContainer +instanceKlass com/mathworks/messageservice/Message +instanceKlass com/mathworks/messageservice/ContextState +instanceKlass com/mathworks/install_impl/input/UpdateProductContainerImpl +instanceKlass com/mathworks/connector/message_service/impl/AbstractMessageService +instanceKlass com/mathworks/install/UpdateProductContainer +instanceKlass com/mathworks/install_impl/input/JSONInstallationFileParserImpl +instanceKlass com/mathworks/install/JSONInstallationFileParser +instanceKlass com/mathworks/messageservice/MessageServiceOpaque +instanceKlass com/mathworks/install_impl/input/AbstractInstallationInputFileStrategy +instanceKlass com/mathworks/install/input/InstallationInputFileStrategy +instanceKlass com/mathworks/install_impl/input/InstallationInputFileFactoryImpl +instanceKlass com/mathworks/install/input/InstallationInputFileFactory +instanceKlass com/mathworks/install/input/ComponentSourceFactory +instanceKlass sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$GenericArrayTypeImpl +instanceKlass sun/reflect/generics/tree/ArrayTypeSignature +instanceKlass com/google/inject/internal/MoreTypes$WildcardTypeImpl +instanceKlass sun/reflect/generics/tree/VoidDescriptor +instanceKlass com/google/inject/internal/MoreTypes$ParameterizedTypeImpl +instanceKlass com/google/inject/internal/MoreTypes$CompositeType +instanceKlass sun/reflect/generics/tree/TypeVariableSignature +instanceKlass com/google/inject/internal/asm/$Handler +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$4 +instanceKlass com/google/inject/internal/cglib/core/$Block +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$14 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$13 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$12 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$11 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$10 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$GetIndexCallback +instanceKlass com/google/inject/internal/cglib/core/$MethodInfoTransformer +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$6 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$5 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$3 +instanceKlass com/google/inject/internal/cglib/reflect/$FastClassEmitter$1 +instanceKlass com/google/inject/internal/asm/$Context +instanceKlass com/google/inject/internal/asm/$Attribute +instanceKlass com/google/inject/internal/cglib/core/$ClassNameReader +instanceKlass com/google/inject/internal/asm/$ClassReader +instanceKlass com/google/inject/internal/cglib/core/$DebuggingClassWriter$1 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$9 +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$8 +instanceKlass com/google/inject/internal/cglib/core/$Local +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$7 +instanceKlass com/google/inject/internal/asm/$Edge +instanceKlass com/google/inject/internal/cglib/core/$ClassEmitter$FieldInfo +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ArrayDelimiters +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils$ParameterTyper +instanceKlass com/google/inject/internal/cglib/core/$ProcessArrayCallback +instanceKlass com/google/inject/internal/cglib/core/$EmitUtils +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$2 +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory$1 +instanceKlass com/google/inject/internal/cglib/core/$Customizer +instanceKlass com/google/inject/internal/cglib/core/$KeyFactory +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper$MethodWrapperKey +instanceKlass com/google/inject/internal/cglib/core/$MethodWrapper +instanceKlass com/google/inject/internal/cglib/core/$DuplicatesPredicate +instanceKlass com/google/inject/MembersInjector +instanceKlass com/google/inject/spi/Message +instanceKlass com/google/inject/spi/ProvisionListener +instanceKlass com/google/inject/spi/TypeListener +instanceKlass org/aopalliance/intercept/MethodInterceptor +instanceKlass org/aopalliance/intercept/Interceptor +instanceKlass org/aopalliance/aop/Advice +instanceKlass com/google/inject/spi/TypeConverter +instanceKlass com/google/inject/matcher/Matcher +instanceKlass java/lang/AssertionStatusDirectives +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$2 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils$1 +instanceKlass com/google/inject/internal/cglib/core/$ReflectUtils +instanceKlass com/google/inject/internal/cglib/core/$VisibilityPredicate +instanceKlass com/google/inject/internal/asm/$Frame +instanceKlass com/google/inject/internal/cglib/core/$LocalVariablesSorter$State +instanceKlass com/google/inject/internal/cglib/core/$MethodInfo +instanceKlass com/google/inject/internal/asm/$Label +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$1 +instanceKlass com/google/inject/internal/cglib/core/$Constants +instanceKlass com/google/inject/internal/asm/$Opcodes +instanceKlass com/google/inject/internal/asm/$Type +instanceKlass com/google/inject/internal/cglib/core/$Signature +instanceKlass com/google/inject/internal/cglib/core/$CollectionUtils +instanceKlass com/google/inject/internal/cglib/core/$TypeUtils +instanceKlass com/google/inject/internal/cglib/core/$ObjectSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$ProcessSwitchCallback +instanceKlass com/google/inject/internal/cglib/core/$Transformer +instanceKlass com/google/inject/internal/cglib/core/$ClassInfo +instanceKlass com/google/inject/internal/asm/$Item +instanceKlass com/google/inject/internal/asm/$ByteVector +instanceKlass com/google/inject/internal/asm/$FieldVisitor +instanceKlass com/google/inject/internal/asm/$MethodVisitor +instanceKlass com/google/inject/internal/asm/$AnnotationVisitor +instanceKlass com/google/inject/internal/asm/$ClassVisitor +instanceKlass com/google/inject/internal/cglib/core/$DefaultGeneratorStrategy +instanceKlass com/google/inject/internal/cglib/reflect/$FastClass +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator$Source +instanceKlass com/google/inject/internal/cglib/core/$Predicate +instanceKlass com/google/inject/internal/cglib/core/$GeneratorStrategy +instanceKlass com/google/inject/internal/cglib/core/$DefaultNamingPolicy +instanceKlass com/google/inject/internal/cglib/core/$AbstractClassGenerator +instanceKlass com/google/inject/internal/cglib/core/$ClassGenerator +instanceKlass com/google/inject/internal/cglib/core/$NamingPolicy +instanceKlass com/google/inject/internal/BytecodeGen +instanceKlass com/google/inject/Exposed +instanceKlass com/google/inject/internal/ProviderMethod +instanceKlass com/google/inject/spi/ProvidesMethodBinding +instanceKlass com/google/inject/spi/ProviderWithExtensionVisitor +instanceKlass com/google/inject/spi/ProviderLookup$1 +instanceKlass com/google/inject/spi/ProviderWithDependencies +instanceKlass com/google/inject/spi/ProviderLookup +instanceKlass com/google/inject/spi/Dependency +instanceKlass com/google/inject/internal/Nullability +instanceKlass com/mathworks/install_impl/archive/zip/commonscompress/CommonsCompressArchiveFactory +instanceKlass com/mathworks/install/archive/ArchiveFactory +instanceKlass com/mathworks/install_impl/DefaultProductCorrelatorImpl +instanceKlass com/mathworks/install/ProductCorrelator +instanceKlass com/mathworks/install/udc/NoOpUsageDataCollectorImpl +instanceKlass com/mathworks/install/udc/UsageDataCollector +instanceKlass com/mathworks/install_impl/InstallerDownloadInfoContainerImpl +instanceKlass com/mathworks/install/InstallerDownloadInfoContainer +instanceKlass com/mathworks/install_impl/XMLParseStrategyForInstall +instanceKlass com/mathworks/install/XMLParseStrategy +instanceKlass com/mathworks/install_impl/ProductDownloaderImpl +instanceKlass com/mathworks/install/ProductDownloader +instanceKlass com/mathworks/install_impl/ContentOptimizerImpl +instanceKlass com/mathworks/install/ContentOptimizer +instanceKlass com/mathworks/install_impl/XMLInstallationFileParserImpl +instanceKlass com/mathworks/install/input/XMLInstallationFileParser +instanceKlass com/mathworks/install_impl/InstalledProductDataVersionImpl +instanceKlass com/mathworks/install/InstalledProductDataVersion +instanceKlass com/mathworks/install_impl/InstallConfigurationPersistenceImpl +instanceKlass com/mathworks/install/InstallConfigurationPersistence +instanceKlass com/mathworks/instutil/IO +instanceKlass com/mathworks/instutil/FolderUtils +instanceKlass com/mathworks/install/service/ServiceFactory +instanceKlass com/mathworks/net/hyperlink/HyperlinkProvider +instanceKlass com/mathworks/install/Installer +instanceKlass com/mathworks/install/SoftwareManager +instanceKlass com/mathworks/install/InstallerRequirements +instanceKlass com/mathworks/install/command/CommandFactory +instanceKlass com/mathworks/install/Product +instanceKlass com/google/inject/util/Providers$ConstantProvider +instanceKlass com/google/inject/util/Providers +instanceKlass com/google/inject/Inject +instanceKlass javax/inject/Inject +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMembers +instanceKlass com/google/inject/spi/InjectionPoint$InjectableMember +instanceKlass com/google/inject/spi/InjectionPoint +instanceKlass com/mathworks/install_impl/ProductInstallerImpl +instanceKlass com/mathworks/install_impl/status/InstallStatusObserverAdapter +instanceKlass javax/inject/Named +instanceKlass com/google/inject/Key$AnnotationInstanceStrategy +instanceKlass com/google/common/util/concurrent/Uninterruptibles +instanceKlass com/google/common/base/Platform +instanceKlass com/google/common/base/Stopwatch +instanceKlass com/google/common/util/concurrent/ExecutionList +instanceKlass com/google/common/util/concurrent/AbstractFuture +instanceKlass com/google/common/util/concurrent/ListenableFuture +instanceKlass com/google/common/cache/LocalCache$LoadingValueReference +instanceKlass java/lang/annotation/Documented +instanceKlass java/lang/annotation/Inherited +instanceKlass java/lang/annotation/Target +instanceKlass sun/reflect/annotation/AnnotationInvocationHandler +instanceKlass sun/reflect/annotation/AnnotationParser$1 +instanceKlass sun/reflect/annotation/ExceptionProxy +instanceKlass sun/reflect/annotation/AnnotationType$1 +instanceKlass java/lang/annotation/Retention +instanceKlass javax/inject/Qualifier +instanceKlass com/google/inject/BindingAnnotation +instanceKlass javax/inject/Scope +instanceKlass com/google/inject/ScopeAnnotation +instanceKlass com/google/inject/internal/Annotations$AnnotationChecker +instanceKlass com/google/inject/internal/Annotations$3 +instanceKlass com/google/inject/internal/Annotations +instanceKlass com/google/inject/name/NamedImpl +instanceKlass com/google/inject/name/Named +instanceKlass com/google/inject/name/Names +instanceKlass com/mathworks/install/status/InstallStatusObserver +instanceKlass com/mathworks/install_impl/XMLParserFactoryImpl +instanceKlass com/mathworks/install/XMLParserFactory +instanceKlass com/mathworks/install_impl/ComponentInstallerImpl +instanceKlass com/mathworks/install/ComponentInstaller +instanceKlass com/mathworks/install_impl/ComponentContainerImpl +instanceKlass com/mathworks/install/ComponentContainer +instanceKlass com/mathworks/install_impl/ProductContainerImpl +instanceKlass com/google/inject/internal/Scoping +instanceKlass com/google/inject/internal/InternalFactory +instanceKlass com/google/inject/spi/InstanceBinding +instanceKlass com/google/inject/spi/ProviderInstanceBinding +instanceKlass com/google/inject/spi/ProviderKeyBinding +instanceKlass com/google/inject/internal/DelayedInitialize +instanceKlass com/google/inject/spi/ConstructorBinding +instanceKlass com/google/inject/spi/HasDependencies +instanceKlass com/google/inject/spi/LinkedKeyBinding +instanceKlass com/google/inject/spi/UntargettedBinding +instanceKlass com/google/inject/internal/BindingImpl +instanceKlass com/google/common/base/Suppliers$MemoizingSupplier +instanceKlass com/google/inject/Key$1 +instanceKlass com/google/inject/Key$AnnotationStrategy +instanceKlass com/mathworks/install/ProductContainer +instanceKlass com/google/common/base/Optional +instanceKlass com/google/inject/Provides +instanceKlass com/google/inject/internal/ProviderMethodsModule$Signature +instanceKlass com/google/common/collect/ImmutableMap$Builder +instanceKlass com/google/inject/internal/MoreTypes +instanceKlass com/google/inject/TypeLiteral +instanceKlass com/google/inject/spi/ModuleAnnotatedMethodScanner +instanceKlass javax/inject/Singleton +instanceKlass com/google/inject/spi/ElementSource +instanceKlass com/google/inject/spi/ScopeBinding +instanceKlass com/google/inject/Scopes$2 +instanceKlass com/google/inject/Scopes$1 +instanceKlass com/google/common/collect/AbstractMapEntry +instanceKlass com/google/common/collect/LinkedHashMultimap$ValueSetLink +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$1 +instanceKlass com/google/common/collect/SetMultimap +instanceKlass com/mathworks/util/TypeFilter$1 +instanceKlass com/google/inject/internal/CycleDetectingLock +instanceKlass com/google/inject/internal/CycleDetectingLock$CycleDetectingLockFactory +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileTypeFinder +instanceKlass com/google/inject/Provider +instanceKlass javax/inject/Provider +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2$1 +instanceKlass com/google/inject/internal/SingletonScope +instanceKlass com/google/inject/Scope +instanceKlass com/google/inject/Scopes +instanceKlass com/google/inject/Singleton +instanceKlass com/google/inject/spi/Elements$ModuleInfo +instanceKlass com/google/inject/PrivateModule +instanceKlass com/google/inject/internal/util/StackTraceElements$InMemoryStackTraceElement +instanceKlass com/google/inject/internal/util/StackTraceElements +instanceKlass com/google/inject/spi/ModuleSource +instanceKlass com/google/inject/internal/InternalFlags$1 +instanceKlass com/google/inject/internal/InternalFlags +instanceKlass com/google/inject/internal/ProviderMethodsModule +instanceKlass com/google/common/collect/Hashing +instanceKlass com/google/inject/internal/AbstractBindingBuilder +instanceKlass com/google/inject/binder/ConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedConstantBindingBuilder +instanceKlass com/google/inject/binder/AnnotatedElementBuilder +instanceKlass com/google/inject/binder/AnnotatedBindingBuilder +instanceKlass com/google/inject/binder/LinkedBindingBuilder +instanceKlass com/google/inject/binder/ScopedBindingBuilder +instanceKlass sun/awt/geom/Edge +instanceKlass sun/awt/geom/ChainEnd +instanceKlass com/google/inject/spi/Elements$RecordingBinder +instanceKlass sun/awt/geom/CurveLink +instanceKlass sun/awt/geom/AreaOp$1 +instanceKlass com/google/inject/PrivateBinder +instanceKlass sun/awt/geom/AreaOp +instanceKlass sun/awt/geom/Curve +instanceKlass java/awt/geom/Area +instanceKlass com/google/inject/Binding +instanceKlass com/google/inject/spi/DefaultBindingTargetVisitor +instanceKlass com/google/inject/spi/BindingTargetVisitor +instanceKlass com/google/inject/spi/Elements +instanceKlass com/google/inject/internal/InjectorShell$RootModule +instanceKlass com/jidesoft/grid/HasFocusCellRenderer +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator$RowLoadRequest +instanceKlass com/mathworks/util/TypeFilter$TargetedRequest +instanceKlass com/jidesoft/swing/NavigationComponent +instanceKlass java/util/concurrent/ConcurrentLinkedQueue$Node +instanceKlass com/google/common/cache/Weigher +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUIDelegate$Cell +instanceKlass com/google/common/cache/LocalCache$1 +instanceKlass com/google/common/util/concurrent/ListeningScheduledExecutorService +instanceKlass com/jidesoft/grid/HeaderStyleModel +instanceKlass com/google/common/util/concurrent/ListeningExecutorService +instanceKlass com/google/common/util/concurrent/MoreExecutors +instanceKlass com/google/common/cache/LocalCache$ReferenceEntry +instanceKlass com/google/common/cache/CacheLoader +instanceKlass com/google/common/cache/LocalCache$LocalManualCache +instanceKlass com/google/inject/internal/WeakKeySet$1 +instanceKlass com/google/common/cache/LocalCache$StrongValueReference +instanceKlass com/google/common/cache/LocalCache$ValueReference +instanceKlass com/google/common/cache/CacheBuilder$2 +instanceKlass com/google/common/cache/CacheStats +instanceKlass com/google/common/base/Suppliers$SupplierOfInstance +instanceKlass com/google/common/base/Suppliers +instanceKlass com/google/common/cache/CacheBuilder$1 +instanceKlass com/google/common/cache/AbstractCache$StatsCounter +instanceKlass com/google/common/cache/LoadingCache +instanceKlass com/google/common/cache/Cache +instanceKlass com/google/common/base/Supplier +instanceKlass com/jidesoft/plaf/vsnet/VsnetUtils +instanceKlass com/google/common/cache/CacheBuilder +instanceKlass com/google/common/cache/RemovalListener +instanceKlass com/google/inject/internal/WeakKeySet +instanceKlass java/awt/geom/Path2D$Iterator +instanceKlass sun/dc/pr/Rasterizer$ConsumerDisposer +instanceKlass com/google/inject/internal/State$1 +instanceKlass sun/dc/pr/PathDasher$1 +instanceKlass sun/dc/pr/PathDasher +instanceKlass sun/awt/geom/PathConsumer2D +instanceKlass com/google/inject/internal/InheritingState +instanceKlass sun/dc/pr/PathStroker$1 +instanceKlass sun/dc/pr/PathStroker +instanceKlass com/google/inject/internal/ProcessedBindingData +instanceKlass com/google/inject/spi/Element +instanceKlass com/google/inject/spi/DefaultElementVisitor +instanceKlass com/google/inject/internal/State +instanceKlass sun/dc/pr/PathFiller$1 +instanceKlass sun/dc/pr/PathFiller +instanceKlass sun/dc/path/PathConsumer +instanceKlass com/google/inject/internal/InjectorShell$Builder +instanceKlass sun/dc/pr/Rasterizer +instanceKlass sun/java2d/pipe/AATileGenerator +instanceKlass com/google/inject/internal/Initializable +instanceKlass com/google/inject/internal/Initializer +instanceKlass com/google/common/collect/CollectPreconditions +instanceKlass com/google/common/collect/ImmutableCollection$Builder +instanceKlass com/google/inject/internal/util/SourceProvider +instanceKlass com/google/inject/Key +instanceKlass com/google/inject/internal/Errors$Converter +instanceKlass com/google/common/collect/Platform +instanceKlass com/google/inject/internal/Errors +instanceKlass com/mathworks/mlwidgets/workspace/MatlabCustomClassRegistry +instanceKlass com/google/inject/internal/util/Stopwatch +instanceKlass com/google/inject/internal/ContextualCallable +instanceKlass com/google/inject/Injector +instanceKlass com/google/inject/internal/InternalInjectorCreator +instanceKlass com/google/inject/Guice +instanceKlass com/google/inject/spi/BindingScopingVisitor +instanceKlass com/google/inject/Binder +instanceKlass com/mathworks/instutil/Machine +instanceKlass com/mathworks/instutil/Registry +instanceKlass com/mathworks/instutil/system/HostIdProvider +instanceKlass org/netbeans/editor/DrawGraphics$GraphicsDG$1 +instanceKlass com/google/inject/util/Modules$RealOverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules$EmptyModule +instanceKlass com/google/inject/spi/ElementVisitor +instanceKlass com/google/inject/util/Modules$OverriddenModuleBuilder +instanceKlass com/google/inject/util/Modules +instanceKlass com/mathworks/install/archive/ArchiveInputStreamExtractor +instanceKlass com/mathworks/install/archive/ArchiveFileExtractor +instanceKlass com/mathworks/install/archive/zip/commonscompress/ArchiveEntryExtractor +instanceKlass com/mathworks/install/InstallOption +instanceKlass com/mathworks/install/command/Command +instanceKlass com/mathworks/install_impl/InstallConfigurationAdapter +instanceKlass com/mathworks/install/InstalledProductDataFactory +instanceKlass com/mathworks/install/InstalledProductData +instanceKlass com/mathworks/install/DownloaderBuilderFactory +instanceKlass com/mathworks/install/InstallerFactory +instanceKlass com/mathworks/install/DefaultDirectoryProvider +instanceKlass com/mathworks/install/InstallerBuilder +instanceKlass com/mathworks/install/SoftwareManagerBuilder +instanceKlass com/mathworks/instutil/MinimalProducts +instanceKlass com/mathworks/install/ProductInstaller +instanceKlass com/mathworks/install/InstallConfiguration +instanceKlass com/google/inject/AbstractModule +instanceKlass com/google/inject/Module +instanceKlass com/mathworks/install_impl/InstalledProductFactory$InstallerWorkSpace +instanceKlass com/mathworks/install_impl/InstalledProductFactory$1 +instanceKlass com/mathworks/install_impl/InstalledProductFactory$Task +instanceKlass com/mathworks/install_impl/InstalledProductFactory +instanceKlass com/mathworks/addons_product/ProductManagerUtils +instanceKlass com/mathworks/addons_product/MatlabDesktopStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategy +instanceKlass com/mathworks/addons_product/MatlabPlatformStrategyFactory +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheDecorator +instanceKlass com/mathworks/cmlink/management/cache/NullCmStatusCache +instanceKlass com/mathworks/cmlink/management/queue/CMQueue +instanceKlass com/mathworks/cmlink/util/interactor/NullTerminator +instanceKlass com/mathworks/cmlink/util/system/CommandInstalledChecker +instanceKlass com/mathworks/cmlink/util/system/PersistentAvailabilityCheck +instanceKlass com/mathworks/cmlink/util/system/AvailabilityCheck +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNExecutor +instanceKlass com/mathworks/cmlink/implementations/svncore/SVNCoreAdapterFactoryDecorator +instanceKlass org/netbeans/editor/DrawEngine$DrawInfo +instanceKlass org/netbeans/editor/DrawContext +instanceKlass org/netbeans/editor/DrawEngine +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils$1 +instanceKlass org/netbeans/editor/DrawGraphics$AbstractDG +instanceKlass com/mathworks/addons_common/notificationframework/AddOnCollectionUtils +instanceKlass com/mathworks/widgets/text/MWEditorUIUtils +instanceKlass com/mathworks/addons_common/notificationframework/StartupCacheInitializationTask +instanceKlass com/mathworks/addons_toolbox/AddOnInstallationObserverAdapter +instanceKlass com/mathworks/appmanagement/addons/AppManagerUtils +instanceKlass com/mathworks/addons_zip/tasks/AddOnInstallationObservers +instanceKlass java/nio/file/SimpleFileVisitor +instanceKlass com/mathworks/addons_common/AddonCustomMetadata +instanceKlass com/mathworks/addons_zip/utils/ZipManagerUtils +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService$WrappedCallable +instanceKlass com/mathworks/cmlink/util/CMExecutorService$2 +instanceKlass com/mathworks/addons_app/AppManager +instanceKlass com/mathworks/cmlink/util/CMExecutorService$1 +instanceKlass com/mathworks/cmlink/util/CMExecutorService +instanceKlass com/mathworks/cmlink/management/queue/CMAdapterFactoryQueued$1 +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$1 +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader +instanceKlass com/mathworks/toolboxmanagement/ToolboxContributedToolsLoader +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserverCollection +instanceKlass com/mathworks/toolboxmanagement/DefaultToolboxManagementObserver +instanceKlass com/mathworks/toolboxmanagement/ExecutorServiceFactory +instanceKlass com/mathworks/toolboxmanagement/CustomToolboxManager +instanceKlass com/mathworks/toolboxmanagement/ToolboxManagementObserver +instanceKlass com/mathworks/addons_toolbox/ToolboxManagerForAddOns +instanceKlass java/awt/PrintGraphics +instanceKlass com/mathworks/cmlink/implementations/localcm/resources/SQLiteCMResources +instanceKlass java/awt/print/PrinterGraphics +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IAbortPoll +instanceKlass com/mathworks/addons_common/DocumentationProvider +instanceKlass com/mathworks/cmlink/implementations/localcm/api/utils/IProgressReporter +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMBase +instanceKlass sun/swing/ImageCache$Entry +instanceKlass com/sun/java/swing/plaf/windows/AnimationController$PartUIClientPropertyKey +instanceKlass com/sun/java/swing/plaf/windows/AnimationController +instanceKlass com/mathworks/addons_product/CommandBuilder +instanceKlass com/mathworks/services/lmgr/FeatureInfoList +instanceKlass com/mathworks/addons_product/ProductManager +instanceKlass java/awt/geom/RectIterator +instanceKlass java/awt/geom/PathIterator +instanceKlass com/mathworks/supportsoftwarematlabmanagement/api/UninstallAPI +instanceKlass java/awt/GradientPaintContext +instanceKlass com/mathworks/install_task/BackgroundTask +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/resources/SVNKitResources +instanceKlass com/mathworks/cmlink/util/adapter/AdapterFactoryComparator +instanceKlass com/mathworks/supportsoftwareinstaller/api/InstallAPI +instanceKlass com/mathworks/cmlink/util/CMAdapterFactoryDecorator +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryListCollection +instanceKlass com/mathworks/cmlink/management/registration/FactoryHidingFactoryList +instanceKlass com/mathworks/hwsmanagement/HwsManager +instanceKlass com/mathworks/cmlink/management/registration/QueuedCMAdapterFactoryList +instanceKlass com/mathworks/supportsoftwareinstaller/addons/SupportSoftwareInstallerObserver +instanceKlass com/mathworks/addons_common/InstalledAddon +instanceKlass com/mathworks/mde/liveeditor/LiveEditorFunctionsInfo +instanceKlass com/mathworks/mde/liveeditor/LiveEditorSectionsInfo +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCILogger +instanceKlass com/mathworks/mde/liveeditor/BackingStoreUpdater +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader$SccProviderInstallRegEntry +instanceKlass com/mathworks/addons_zip/ZipManager +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport +instanceKlass com/mathworks/mde/liveeditor/LiveEditor +instanceKlass com/mathworks/mwswing/MJFileChooserPerPlatform +instanceKlass com/mathworks/mwswing/NativeDialogLauncher +instanceKlass com/mathworks/addons_mlconnector/MLConnectorManager +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/RichDocument +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserverImpl +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache$LazyHolder +instanceKlass com/mathworks/addons_common/notificationframework/AddOnInstallationObserver +instanceKlass com/mathworks/cmlink/implementations/msscci/NativeMSSCCIRegistryReader +instanceKlass com/mathworks/cmlink/implementations/msscci/MSSCCIRegistryReader +instanceKlass com/mathworks/addons_common/notificationframework/InstalledAddOnsCache +instanceKlass sun/java2d/opengl/OGLGraphicsConfig +instanceKlass sun/java2d/pipe/hw/AccelGraphicsConfig +instanceKlass sun/java2d/pipe/hw/BufferedContextProvider +instanceKlass com/mathworks/html/PageChangedListener +instanceKlass com/mathworks/cmlink/management/registration/MSSCCICMAdapterFactoryList +instanceKlass com/mathworks/cmlink/api/version/r14a/CMAdapterFactory +instanceKlass com/mathworks/cmlink/api/version/r16b/CMAdapterFactory +instanceKlass sun/awt/SunGraphicsCallback +instanceKlass com/mathworks/cmlink/implementations/localcm/LocalCMAdapterFactory +instanceKlass javax/swing/RepaintManager$4 +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher$IgnoresAncestorKeyBindings +instanceKlass javax/swing/RepaintManager$2$1 +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/DepthAwareCaller +instanceKlass javax/swing/RepaintManager$3 +instanceKlass com/mathworks/addons/launchers/InitializeCacheAndRegisterAddonsAndAddSupportPackages +instanceKlass com/mathworks/toolbox/cmlinkutils/reflection/Caller +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterCaller +instanceKlass com/mathworks/cmlink/implementations/svnintegration/SVNAdapterFactory +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$2 +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory$1 +instanceKlass com/mathworks/cmlink/api/StatusListener +instanceKlass com/mathworks/mde/liveeditor/LiveEditorClientFactory +instanceKlass com/mathworks/widgets/text/fold/FoldInfo +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/DefaultMethodInvocation +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/CMAdapterFactoryWrapper +instanceKlass com/mathworks/mde/liveeditor/LiveEditorInitializationManager +instanceKlass com/mathworks/mde/desk/MLDesktop$7$1 +instanceKlass com/mathworks/widgets/text/mcode/MFoldInfoCollector +instanceKlass com/mathworks/mwswing/MJScrollPane$1 +instanceKlass org/eclipse/jgit/transport/Transport +instanceKlass com/mathworks/jmi/MatlabEvent +instanceKlass org/eclipse/jgit/transport/PackTransport +instanceKlass org/eclipse/jgit/transport/WalkTransport +instanceKlass com/mathworks/mde/cmdwin/CmdWinSyntaxWrapper +instanceKlass org/eclipse/jgit/lib/Repository +instanceKlass com/mathworks/mde/cmdhist/AltHistory$16 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$15 +instanceKlass org/eclipse/jgit/transport/PacketLineIn +instanceKlass com/mathworks/mde/cmdhist/AltHistory$13 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$12 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$11 +instanceKlass org/eclipse/jgit/transport/PacketLineOut +instanceKlass com/mathworks/mde/cmdhist/AltHistory$PreferenceListener +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17$1 +instanceKlass com/mathworks/mde/cmdhist/AltHistory$17 +instanceKlass org/eclipse/jgit/util/FS +instanceKlass com/mathworks/mde/cmdhist/AltHistory$31 +instanceKlass org/eclipse/jgit/transport/CredentialsProvider +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$DragListener +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$2 +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$1 +instanceKlass ca/odell/glazedlists/impl/gui/ThreadProxyEventList$UpdateRunner +instanceKlass ca/odell/glazedlists/swing/GlazedListsSwing +instanceKlass com/mathworks/mde/cmdhist/AltHistoryTable$HistoryTableFormat +instanceKlass java/security/Timestamp +instanceKlass sun/security/timestamp/TimestampToken +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeNode +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$WriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$ReadLock +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock$Sync +instanceKlass sun/security/pkcs/PKCS9Attributes +instanceKlass ca/odell/glazedlists/util/concurrent/J2SE14ReadWriteLock +instanceKlass ca/odell/glazedlists/matchers/AbstractMatcherEditor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecordListListener +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandSaver +instanceKlass com/mathworks/cmlink/implementations/git/GitAdapterFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$TimeoutTask +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool$DaemonThreadFactory +instanceKlass org/tmatesoft/svn/core/wc/DefaultSVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/io/ISVNConnectionListener +instanceKlass org/tmatesoft/svn/core/io/ISVNSession +instanceKlass org/tmatesoft/svn/core/wc/SVNBasicClient +instanceKlass org/tmatesoft/svn/core/wc/admin/SVNAdminBasicClient +instanceKlass org/tmatesoft/svn/core/wc/ISVNEventHandler +instanceKlass org/tmatesoft/svn/core/wc/SVNClientManager +instanceKlass org/tmatesoft/svn/core/wc/ISVNRepositoryPool +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$SimplePasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$3 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$2 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring$1 +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetStringCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationGetKeyringInfoCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary$GnomeKeyringOperationDoneCallback +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNGnomeKeyring +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNMacOsKeychain +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$WinCryptPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider$IPasswordStorage +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWinCrypt +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptions +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNPersistentAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$1 +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$CacheAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager$DumbAuthenticationProvider +instanceKlass javax/net/ssl/TrustManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNProxyManager +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNHostOptionsProvider +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorage +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNAuthenticationStorageOptions +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationProvider +instanceKlass org/tmatesoft/svn/core/auth/SVNAuthentication +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/auth/ISVNSSHHostVerifier +instanceKlass org/tmatesoft/svn/core/internal/wc/ISVNSSLPasspharsePromptSupport +instanceKlass sun/nio/ch/Util$5 +instanceKlass sun/nio/ch/FileChannelImpl$Unmapper +instanceKlass java/nio/channels/FileChannel$MapMode +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNCompositeConfigFile +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNConfigFile +instanceKlass org/tmatesoft/svn/core/wc/ISVNMerger +instanceKlass org/tmatesoft/svn/core/internal/wc/DefaultSVNOptions +instanceKlass org/tmatesoft/svn/core/wc/ISVNMergerFactory +instanceKlass org/apache/commons/io/filefilter/IOFileFilter +instanceKlass org/apache/commons/io/FileUtils +instanceKlass com/sun/jna/Structure$ByReference +instanceKlass com/sun/jna/Function$PostCallRead +instanceKlass java/lang/reflect/AnnotatedType +instanceKlass com/sun/jna/Library$Handler$FunctionInfo +instanceKlass com/sun/jna/WeakIdentityHashMap +instanceKlass com/sun/jna/Structure$StructField +instanceKlass com/sun/jna/Structure$LayoutInfo +instanceKlass com/sun/jna/NativeMappedConverter +instanceKlass com/sun/jna/TypeConverter +instanceKlass java/lang/reflect/Proxy$1 +instanceKlass com/sun/jna/FunctionMapper +instanceKlass com/sun/jna/NativeLibrary +instanceKlass com/sun/jna/Library$Handler +instanceKlass com/sun/jna/Native$7 +instanceKlass com/sun/jna/Native$2 +instanceKlass com/sun/jna/Structure$FFIType$FFITypes +instanceKlass com/sun/jna/Native$ffi_callback +instanceKlass com/sun/jna/PointerType +instanceKlass com/sun/jna/NativeMapped +instanceKlass com/sun/jna/WString +instanceKlass com/sun/jna/CallbackProxy +instanceKlass com/sun/jna/Callback +instanceKlass com/sun/jna/Structure$ByValue +instanceKlass com/sun/jna/FromNativeContext +instanceKlass com/sun/jna/FromNativeConverter +instanceKlass com/sun/jna/ToNativeConverter +instanceKlass com/sun/jna/ToNativeContext +instanceKlass com/sun/jna/Structure +instanceKlass com/sun/jna/Pointer +instanceKlass java/io/DeleteOnExitHook$1 +instanceKlass java/io/DeleteOnExitHook +instanceKlass java/io/File$TempDirectory +instanceKlass com/sun/jna/Platform +instanceKlass com/sun/jna/Native$5 +instanceKlass com/sun/jna/Native$1 +instanceKlass com/sun/jna/Callback$UncaughtExceptionHandler +instanceKlass com/sun/jna/Native +instanceKlass com/sun/jna/Version +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsCFLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNMacOsSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNGnomeKeyringLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNCLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWin32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNSecurityLibrary +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNKernel32Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/ISVNWinCryptLibrary +instanceKlass com/sun/jna/win32/StdCallLibrary +instanceKlass com/sun/jna/win32/StdCall +instanceKlass com/sun/jna/AltCallingConvention +instanceKlass org/tmatesoft/svn/core/internal/util/jna/JNALibraryLoader +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNWin32Util +instanceKlass org/tmatesoft/svn/util/SVNLogType +instanceKlass com/sun/jna/Library +instanceKlass org/tmatesoft/svn/core/internal/util/jna/SVNJNAUtil +instanceKlass org/tmatesoft/svn/core/auth/ISVNAuthenticationManager +instanceKlass org/tmatesoft/svn/core/wc/SVNWCUtil +instanceKlass org/tmatesoft/svn/core/wc/ISVNOptions +instanceKlass org/tmatesoft/svn/core/io/ISVNTunnelProvider +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer$AuthenticatingClientManager +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/ClientManagerContainer +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitCanceller +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnection +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/dav/http/IHTTPConnectionFactory +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnector +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory$1 +instanceKlass org/tmatesoft/svn/core/internal/io/svn/ISVNConnectorFactory +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap$TableEntry +instanceKlass org/tmatesoft/svn/core/internal/util/SVNHashMap +instanceKlass org/tmatesoft/svn/core/io/ISVNReporter +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$1 +instanceKlass com/mathworks/util/CircularBuffer +instanceKlass org/tmatesoft/svn/core/io/SVNRepository +instanceKlass com/mathworks/services/SystemServices +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$CommandRecord +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$ProductionPrefsProvider +instanceKlass org/tmatesoft/svn/core/io/SVNRepositoryFactory +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection$PrefsProvider +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/NoUpgradeSVNAdminFactorySelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminArea +instanceKlass com/mathworks/mde/cmdhist/AltHistory$FocusAppearanceUpdater +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/CategorizedView +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/ViewBuilder +instanceKlass java/time/Instant +instanceKlass java/time/temporal/TemporalAdjuster +instanceKlass java/time/temporal/Temporal +instanceKlass java/time/temporal/TemporalAccessor +instanceKlass com/mathworks/mde/cmdhist/AltHistoryCollection +instanceKlass java/nio/file/FileVisitor +instanceKlass java/nio/file/FileStore +instanceKlass java/nio/file/attribute/FileAttributeView +instanceKlass java/nio/file/attribute/AttributeView +instanceKlass java/nio/file/attribute/UserPrincipal +instanceKlass java/util/function/BiPredicate +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$4 +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$SpecialCharacter +instanceKlass java/nio/file/attribute/FileTime +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$AnnotatedInfo +instanceKlass java/nio/file/CopyOption +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNFileUtil +instanceKlass org/tmatesoft/svn/core/internal/wc/SVNClassLoader +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory$DefaultSelector +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/SVNAdminAreaFactory +instanceKlass org/tmatesoft/svn/util/SVNDebugLog +instanceKlass org/tmatesoft/svn/util/SVNDebugLogAdapter +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/BooleanMapUtil +instanceKlass org/tmatesoft/svn/util/ISVNDebugLog +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/logging/SVNKitLogFactory +instanceKlass org/tmatesoft/svn/core/internal/wc/admin/ISVNAdminAreaFactorySelector +instanceKlass com/mathworks/cmlink/api/CMAdapter +instanceKlass com/mathworks/cmlink/api/CMRepository +instanceKlass com/mathworks/cmlink/api/CMInteractor +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/SVNKitAdapterFactory +instanceKlass com/mathworks/cmlink/api/CMAdapterFactory +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMRepository +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/Cancellable +instanceKlass org/tmatesoft/svn/core/ISVNCanceller +instanceKlass com/mathworks/cmlink/implementations/svnkitintegration/BuiltInSVNAdapterFactory +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$7 +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r11b/R11bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r14a/R14aToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/r16b/R16bToInternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/util/adapter/wrappers/InternalCMAdapterFactoryConverter +instanceKlass com/mathworks/cmlink/management/registration/OsgiCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/CMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/registration/SingletonCMAdapterFactoryList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingTerminator$1 +instanceKlass com/mathworks/cmlink/management/pool/shared/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingExceptionHandler +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingStatusBroadcaster +instanceKlass com/mathworks/util/collections/CopyOnWriteList +instanceKlass com/mathworks/cmlink/management/pool/shared/aggregators/AggregatingProgressIndicator +instanceKlass com/mathworks/cmlink/management/pool/shared/SharedInteractor +instanceKlass com/mathworks/cmlink/api/TerminationListener +instanceKlass com/mathworks/cmlink/management/pool/shared/CMProcessTerminator +instanceKlass com/mathworks/cmlink/management/pool/AutoRefreshedRecord +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor$1 +instanceKlass java/util/concurrent/SynchronousQueue$TransferStack$SNode +instanceKlass com/mathworks/widgets/grouptable/ColorStyle$1 +instanceKlass java/util/concurrent/SynchronousQueue$Transferer +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects$CombinedToolTipGenerator +instanceKlass com/mathworks/toolbox/shared/computils/threads/CountingThreadFactory +instanceKlass com/mathworks/toolbox/shared/computils/threads/WrappingExecutorService +instanceKlass com/mathworks/cmlink/management/pool/shared/CMStatusCacheExecutor +instanceKlass com/mathworks/toolbox/cmlinkutils/preferences/PreferenceManager +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCache +instanceKlass com/mathworks/cmlink/management/cache/CmStatusCacheQueries +instanceKlass com/mathworks/cmlink/management/cache/RootSearchingCmStatusCacheFactory +instanceKlass com/mathworks/cmlink/management/pool/adapter/PrefBackedAdapterFactoryProvider +instanceKlass com/mathworks/cmlink/util/adapter/transformer/MutableTransformableCMAdapterFactoryProvider$NullAdapterTransformer +instanceKlass com/mathworks/cmlink/util/adapter/transformer/AdapterTransformer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$PathToolTipGenerator +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProviderDecorator +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemFilter +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheEntry +instanceKlass com/mathworks/cmlink/management/pool/PooledCmStatusCacheProvider +instanceKlass com/mathworks/cmlink/util/adapter/CMAdapterFactoryProvider +instanceKlass com/mathworks/mlwidgets/explorer/util/FileSystemUtils +instanceKlass com/mathworks/cmlink/management/pool/CmStatusCacheProvider +instanceKlass com/mathworks/cmlink/management/pool/shared/SingletonPooledCmStatusCacheProvider +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance$StatusToolTipGenerator +instanceKlass com/mathworks/widgets/grouptable/DisplayEffects +instanceKlass com/mathworks/util/Disposable$Parent +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger$MyActionListener +instanceKlass com/mathworks/hg/peer/DebugUtilities$Logger +instanceKlass sun/text/normalizer/ReplaceableString +instanceKlass sun/text/normalizer/Replaceable +instanceKlass sun/text/normalizer/UCharacterIterator +instanceKlass sun/text/CollatorUtilities +instanceKlass java/text/CollationElementIterator +instanceKlass sun/text/normalizer/UTF16 +instanceKlass sun/text/ComposedCharIter +instanceKlass java/text/EntryPair +instanceKlass java/text/PatternEntry +instanceKlass java/text/PatternEntry$Parser +instanceKlass java/text/MergeCollation +instanceKlass sun/text/normalizer/NormalizerImpl$DecomposeArgs +instanceKlass sun/text/normalizer/UnicodeSet +instanceKlass sun/text/normalizer/UnicodeMatcher +instanceKlass sun/text/normalizer/CharTrie$FriendAgent +instanceKlass sun/text/normalizer/Trie +instanceKlass sun/text/normalizer/NormalizerImpl$AuxTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$NormTrieImpl +instanceKlass sun/text/normalizer/NormalizerImpl$FCDTrieImpl +instanceKlass sun/text/normalizer/Trie$DataManipulate +instanceKlass sun/text/normalizer/ICUBinary +instanceKlass sun/text/normalizer/NormalizerDataReader +instanceKlass sun/text/normalizer/ICUBinary$Authenticate +instanceKlass sun/text/normalizer/ICUData +instanceKlass sun/text/normalizer/NormalizerImpl +instanceKlass sun/text/UCompactIntArray +instanceKlass sun/text/IntHashtable +instanceKlass java/text/RBCollationTables$BuildAPI +instanceKlass java/text/RBTableBuilder +instanceKlass java/text/RBCollationTables +instanceKlass java/text/Collator +instanceKlass com/mathworks/fileutils/UIFileUtils$NameTokenizer +instanceKlass com/mathworks/fileutils/UIFileUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance$GrayedOutStyle +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1$1 +instanceKlass com/mathworks/widgets/grouptable/ColorStyle +instanceKlass com/mathworks/mlwidgets/explorer/model/table/PathAffordance +instanceKlass com/mathworks/widgets/grouptable/GroupingTableRow$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$2 +instanceKlass com/mathworks/widgets/grouptable/RowComparator +instanceKlass com/mathworks/widgets/grouptable/OldAscendingSortComparator +instanceKlass com/mathworks/widgets/grouptable/AscendingSortComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$EditorConnection +instanceKlass com/mathworks/jmi/AWTUtilities$WatchedRunnable +instanceKlass com/mathworks/jmi/AWTUtilities$WatchDog +instanceKlass com/mathworks/jmi/AWTUtilities +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$3 +instanceKlass java/awt/EventQueue$4 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutsToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$CategoryActionsProvider +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryPopupListenerShower +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$FavoriteMenuContributor +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandToolSet$FavoriteToolTipContentProvider +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$7 +instanceKlass com/mathworks/mde/desk/MLDesktop$9 +instanceKlass com/mathworks/mde/desk/MLDesktop$6 +instanceKlass com/mathworks/mde/desk/MLDesktop$18 +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$RestoreData +instanceKlass java/awt/SequencedEvent$1 +instanceKlass sun/awt/AWTAccessor$SequencedEventAccessor +instanceKlass com/mathworks/mde/cmdhist/CommandStyleInfo +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointRenderUtils +instanceKlass java/awt/GridBagLayoutInfo +instanceKlass javax/swing/JTable$5 +instanceKlass com/jidesoft/swing/StyleRange +instanceKlass com/jidesoft/swing/StyledLabelBuilder +instanceKlass com/jidesoft/grid/HeaderLineWrapModel +instanceKlass com/mathworks/mde/explorer/Explorer$19 +instanceKlass com/mathworks/toolstrip/impl/ToolstripSectionComponentWithHeader$1 +instanceKlass com/mathworks/toolstrip/plaf/SplitButtonUI$Layout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$1 +instanceKlass com/google/common/collect/Iterators$2 +instanceKlass com/google/common/collect/PeekingIterator +instanceKlass com/google/common/collect/Iterators +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout$Section +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout$Sizes +instanceKlass javax/swing/SizeRequirements +instanceKlass com/mathworks/jmi/NativeWindows +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUI$1 +instanceKlass org/openide/util/WeakListenerImpl +instanceKlass org/openide/util/WeakListeners +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireEnabler +instanceKlass javax/swing/JTable$AccessibleJTable$AccessibleJTableModelChange +instanceKlass javax/accessibility/AccessibleTableModelChange +instanceKlass com/jidesoft/grid/JideTable$s_ +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$2 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyFocusListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyMouseListener +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$MyKeyListener +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$RootProvider +instanceKlass com/mathworks/util/event/EventUtils +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher$1 +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$MnemonicEventListener +instanceKlass com/google/common/collect/Sets +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory$1 +instanceKlass com/mathworks/util/event/AbstractInputEventsDispatcher +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl$Collector +instanceKlass com/mathworks/util/async/Callback +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagerImpl +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManager +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$KeyboardFocusProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$DefaultFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers$MnemonicsManagerFactory +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsManagers +instanceKlass com/mathworks/ddux/UIEventLog +instanceKlass com/mathworks/mde/desk/DDUXLoggerBridge +instanceKlass com/mathworks/mwswing/UIEventLogger$Implementation +instanceKlass com/mathworks/widgets/desk/DTTabbedPane$TitleTabUI$ScrollAdjuster +instanceKlass com/mathworks/widgets/text/mcode/MLint$AutoFixChange +instanceKlass com/mathworks/widgets/text/mcode/MLint$Message +instanceKlass com/mathworks/widgets/text/mcode/MLint$DefaultCodeAnalyzerContentType +instanceKlass java/util/AbstractList$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1$1 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1$1 +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker$1 +instanceKlass com/mathworks/widgets/editor/EditorRegionImpl +instanceKlass com/mathworks/matlab/api/editor/EditorRegion +instanceKlass com/mathworks/widgets/editor/LiveCodeUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/Cell +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$6 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$13 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$9 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$8 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$7 +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$5 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer$2 +instanceKlass com/mathworks/mde/autosave/AutoSaveTimer +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor$1 +instanceKlass com/mathworks/mde/autosave/AutoSaveUtils +instanceKlass com/mathworks/mde/editor/TextFileBackingStoreAutoSaveImplementor +instanceKlass com/mathworks/mde/editor/EditorViewClient$1$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$3 +instanceKlass com/mathworks/widgets/text/STPIncSearch +instanceKlass com/mathworks/mde/editor/EditorStatusBar$2 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$1 +instanceKlass com/mathworks/mde/editor/EditorStatusBar$FunctionNameListener +instanceKlass com/mathworks/mwswing/MJCheckBox$ActionPropertyHandler +instanceKlass com/mathworks/mde/editor/EditorOptions +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$4 +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory$WindowAction$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$2 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$4 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$3 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu$1 +instanceKlass com/mathworks/mde/editor/codepad/PublishMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7$1 +instanceKlass com/mathworks/widgets/util/EmptyIcon +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$2 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$8 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$1 +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActions$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$RunTestsToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/LiveMatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptionsListener +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/MatlabStatusIndicator +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetActionController +instanceKlass com/mathworks/mde/editor/EditorUtils$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$8 +instanceKlass com/mathworks/mlwidgets/debug/MatlabDebuggerActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$16 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$15 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$14 +instanceKlass com/mathworks/mde/editor/ProfilerButton$1 +instanceKlass com/mathworks/mde/editor/ProfilerButton +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$4 +instanceKlass com/mathworks/mde/editor/EditorUtils$5 +instanceKlass com/mathworks/mde/editor/EditorUtils$4 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListListenerBridge +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$15 +instanceKlass java/rmi/server/UID +instanceKlass org/apache/commons/lang/exception/Nestable +instanceKlass org/apache/commons/lang/StringEscapeUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationNameUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$9 +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuItemSelectionManager$SelectableMenuItem +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu$2 +instanceKlass com/mathworks/mde/editor/gotomenu/AbstractGoToMenu +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$10 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$13 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$3 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$2 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$12 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$6 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$7 +instanceKlass com/jidesoft/swing/JideMenu$1 +instanceKlass com/jidesoft/swing/JideMenu$MenuCreator +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuOriginCalculator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$2 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$2 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager$1 +instanceKlass com/mathworks/widgets/glazedlists/MappedEventList +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector$PropertyChangeHandler +instanceKlass ca/odell/glazedlists/impl/beans/BeanConnector +instanceKlass ca/odell/glazedlists/impl/SimpleIterator +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorNode +instanceKlass java/util/IdentityHashMap$EntryIterator$Entry +instanceKlass com/jidesoft/introspector/BeanIntrospector$LazyValue +instanceKlass com/jidesoft/utils/TypeUtils +instanceKlass com/jidesoft/introspector/BeanIntrospector +instanceKlass com/jidesoft/introspector/Introspector +instanceKlass com/jidesoft/converter/EnumConverter +instanceKlass com/jidesoft/converter/YearNameConverter +instanceKlass com/jidesoft/converter/MonthNameConverter +instanceKlass com/jidesoft/converter/MultilineStringConverter +instanceKlass com/jidesoft/converter/FontConverter +instanceKlass com/jidesoft/converter/QuarterNameConverter +instanceKlass com/jidesoft/converter/StringArrayConverter +instanceKlass com/jidesoft/converter/ColorConverter +instanceKlass com/jidesoft/converter/MonthConverter +instanceKlass java/text/DateFormatSymbols +instanceKlass com/jidesoft/converter/DateConverter +instanceKlass com/jidesoft/converter/FontNameConverter +instanceKlass com/jidesoft/converter/FileConverter +instanceKlass com/jidesoft/converter/BooleanConverter +instanceKlass com/jidesoft/converter/ArrayConverter +instanceKlass com/jidesoft/converter/NumberConverter +instanceKlass com/jidesoft/converter/ObjectConverterManager +instanceKlass com/jidesoft/converter/DefaultObjectConverter +instanceKlass com/jidesoft/converter/ObjectConverter +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationJideUtils +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$LoadBundle +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/PersistenceUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/PublishOptions +instanceKlass com/mathworks/mlwidgets/configeditor/ui/UiSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin$PersistenceSupport +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPlugin +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginManager +instanceKlass com/mathworks/mlwidgets/configeditor/plugin/ConfigurationPluginUtils +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationManager +instanceKlass com/mathworks/mlwidgets/configeditor/ConfigurationUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$MatlabMenuContribution +instanceKlass com/mathworks/widgets/menus/DefaultMenuID +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolInfoImpl +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor$DiffToolMenuContribution +instanceKlass com/mathworks/jmi/MatlabWorker$2 +instanceKlass com/mathworks/jmi/MatlabWorker$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$4 +instanceKlass com/mathworks/widgets/text/mcode/MLintConfiguration +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$3 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution$1 +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor$Contribution +instanceKlass com/mathworks/mde/editor/codepad/CodepadMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/difftool/DiffToolMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/mlint/MLintMenuContributor +instanceKlass com/mathworks/mde/editor/ActionManager$1 +instanceKlass com/mathworks/mde/editor/ActionManager$CodeFoldsMenuItemValidationListener +instanceKlass com/mathworks/mde/editor/ActionManager$3 +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuGroup +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuMenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder$MenuContainer +instanceKlass com/mathworks/widgets/menus/DefaultMenuBuilder +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils$1 +instanceKlass com/mathworks/mde/editor/plugins/matlab/ConfigurationPopupMenuCustomizer +instanceKlass com/jidesoft/swing/JideMenu$PopupMenuCustomizer +instanceKlass com/mathworks/widgets/DropdownButton$ArrowIcon +instanceKlass com/mathworks/widgets/DropdownButton$1 +instanceKlass com/mathworks/widgets/PickerButton$2 +instanceKlass com/mathworks/widgets/PickerButton$ToolTippableButton +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$1 +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration$Type +instanceKlass com/mathworks/mlwidgets/configeditor/data/AbstractFileConfiguration +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution$3 +instanceKlass com/mathworks/widgets/PopupMenuCustomizer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor$MatlabToolBarContribution +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabToolBarContributor +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$1 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems$2 +instanceKlass com/mathworks/widgets/toolbars/ToolBarItems +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor$ToolBarItem +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarBuilder +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBars +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$34 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DefaultActionInput +instanceKlass com/mathworks/mde/editor/PathActionInputSource +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreActionProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$DocumentTabActionProvider +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenuUnhandledException +instanceKlass com/mathworks/mde/editor/EditorToolstripTabFactory +instanceKlass com/mathworks/mde/editor/EditorViewClient$7 +instanceKlass com/mathworks/mde/editor/EditorView$8 +instanceKlass com/mathworks/mde/editor/EditorView$12 +instanceKlass org/apache/xerces/dom/NodeListCache +instanceKlass com/mathworks/widgets/STPStateManagerImpl +instanceKlass com/mathworks/widgets/StateMRUFiles +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl$1 +instanceKlass com/mathworks/mde/editor/EditorStateManagerImpl +instanceKlass com/mathworks/mde/editor/EditorStateManager +instanceKlass com/mathworks/mde/editor/EditorStateManagerFactory +instanceKlass org/netbeans/editor/JumpList$Entry +instanceKlass com/mathworks/mde/editor/codepad/Codepad$3 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/AbstractEditorHighlighter +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo$BaseDocumentCell +instanceKlass org/netbeans/editor/AdjustFinder +instanceKlass com/mathworks/widgets/text/mcode/cell/CellUtils +instanceKlass com/mathworks/widgets/text/mcode/cell/BaseDocumentCellInfo +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$2 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$1 +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadCaretListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager$CodepadDocumentListener +instanceKlass com/mathworks/mde/editor/codepad/Codepad$TaggedLineManager +instanceKlass com/mathworks/mde/editor/codepad/Codepad$CodepadPrefListener +instanceKlass java/text/ParsePosition +instanceKlass com/mathworks/mde/editor/codepad/Codepad$1 +instanceKlass com/mathworks/mde/editor/PopupAction$Callback +instanceKlass com/mathworks/mde/editor/EditorView$13 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$1 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$2 +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay$TextEventHandler +instanceKlass com/mathworks/mde/editor/MatlabExecutionDisplayAdapter$DebugInterests$2 +instanceKlass com/mathworks/widgets/text/mcode/MExecutionDisplayAdapter +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter$RepaintListener +instanceKlass com/mathworks/mde/editor/breakpoints/BreakpointInstallationResult +instanceKlass ca/odell/glazedlists/impl/adt/BarcodeIterator +instanceKlass ca/odell/glazedlists/FilterList$PrivateMatcherEditorListener +instanceKlass ca/odell/glazedlists/impl/matchers/TrueMatcher +instanceKlass ca/odell/glazedlists/matchers/Matchers +instanceKlass ca/odell/glazedlists/impl/adt/Barcode +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils$1 +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor$Listener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$4 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointViewPopupBuilder +instanceKlass com/mathworks/matlab/api/debug/BreakpointStyle +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUiInfoProvider +instanceKlass com/mathworks/widgets/editor/breakpoints/BreakpointView +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$1 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$5 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$5 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$2 +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin$3 +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabBreakpointMarginImpl$4 +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$JUnitExpose +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextViewListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdMgrTextEventHandler +instanceKlass com/mathworks/widgets/text/mcode/CmdManager +instanceKlass com/mathworks/matlab/api/debug/BreakpointUiInfoProvider +instanceKlass com/mathworks/matlab/api/debug/BreakpointMarginPopUpMenu +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$ClearBkptListener +instanceKlass com/mathworks/matlab/api/debug/BreakpointModel +instanceKlass com/mathworks/matlab/api/debug/ContextMenuListener +instanceKlass com/mathworks/widgets/text/mcode/CmdManager$CmdLineListener +instanceKlass com/mathworks/widgets/text/mcode/AbstractMBreakpointMargin +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointMargin +instanceKlass com/mathworks/jmi/MLFileUtils +instanceKlass com/mathworks/widgets/datamodel/FutureFileStorageLocation +instanceKlass com/mathworks/mlwidgets/configeditor/data/ConfigurationSelectionListener +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabPluginUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMarginProvider +instanceKlass com/mathworks/mde/functionhints/FunctionHintUtils +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor$2 +instanceKlass com/mathworks/widgets/editor/SelfRemovingEditorEventListener +instanceKlass com/mathworks/mlwidgets/debug/RunOrContinueAction$2 +instanceKlass com/mathworks/matlab/api/menus/MenuID +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabMenuContributor +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabKeyBindingContributor +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$ViewHierarchyChangeListenerImpl +instanceKlass com/mathworks/widgets/text/fold/MWCodeFoldingSideBar$ViewHierarchyChangeNotifier +instanceKlass org/netbeans/editor/CodeFoldingSideBar$1 +instanceKlass org/netbeans/editor/CodeFoldingSideBar$SideBarFoldHierarchyListener +instanceKlass org/netbeans/editor/CodeFoldingSideBar$Mark +instanceKlass com/mathworks/widgets/text/MWEditorUI$3 +instanceKlass org/netbeans/editor/GlyphGutter$EditorUIListener +instanceKlass org/netbeans/editor/GlyphGutter$3 +instanceKlass org/netbeans/editor/GlyphGutter$Observer +instanceKlass org/netbeans/editor/Annotations$2 +instanceKlass org/netbeans/editor/Annotations$1 +instanceKlass org/netbeans/editor/Annotations$MenuComparator +instanceKlass org/netbeans/editor/GlyphGutter$GlyphGutterFoldHierarchyListener +instanceKlass org/netbeans/editor/Annotations +instanceKlass com/mathworks/mwswing/TextComponentUtils +instanceKlass com/mathworks/widgets/text/DocumentUtils +instanceKlass com/mathworks/widgets/SyntaxTextPane$2$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6$1 +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$UpperOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$LowerOffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/util/swing/ElementUtilities +instanceKlass org/netbeans/editor/Syntax$BaseStateInfo +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenInfo +instanceKlass com/mathworks/util/IntBuffer +instanceKlass com/mathworks/widgets/text/matlab/LexicalBuffer +instanceKlass org/netbeans/editor/SyntaxUpdateTokens +instanceKlass org/netbeans/editor/FixLineSyntaxState +instanceKlass org/netbeans/editor/BaseDocument$NotifyModifyStatus +instanceKlass org/netbeans/editor/ext/ExtUtilities +instanceKlass com/mathworks/widgets/text/mcode/MTreeUtils +instanceKlass java/util/DualPivotQuicksort +instanceKlass com/mathworks/widgets/text/mcode/MDocumentUtils +instanceKlass com/mathworks/mwswing/TextComponentUtils$FullIdentifier +instanceKlass com/mathworks/widgets/text/mcode/variables/Variable +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$1 +instanceKlass org/netbeans/editor/BaseCaret$3 +instanceKlass org/netbeans/editor/ext/FormatSupport +instanceKlass org/netbeans/editor/ext/AbstractFormatLayer +instanceKlass org/netbeans/editor/StatusBar$1 +instanceKlass org/netbeans/editor/StatusBar$CaretListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$DocUpdateHandler +instanceKlass com/mathworks/util/tree/TreeUtils$3 +instanceKlass com/mathworks/util/tree/DefaultMutableTree +instanceKlass com/mathworks/util/Cache$Entry +instanceKlass java/util/JumboEnumSet$EnumSetIterator +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldsInfo +instanceKlass com/mathworks/widgets/text/mcode/MTree$1 +instanceKlass com/mathworks/util/Cache +instanceKlass com/mathworks/widgets/text/mcode/MTree$Node +instanceKlass com/mathworks/util/Cache$Loader +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider$1 +instanceKlass com/mathworks/widgets/text/mcode/BaseDocumentMTreeProvider +instanceKlass com/mathworks/widgets/text/mcode/MTreeBaseDocumentCache +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl$HierarchyUpdateListener +instanceKlass com/mathworks/widgets/text/fold/FoldStateManagerImpl +instanceKlass com/mathworks/widgets/text/fold/FoldStateManager +instanceKlass com/mathworks/widgets/StateManager +instanceKlass com/mathworks/widgets/STPStateManagerFactory +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager$FoldSettingsListener +instanceKlass com/mathworks/widgets/text/mcode/MFoldManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabState +instanceKlass com/mathworks/widgets/text/matlab/LexicalAccumulator +instanceKlass com/mathworks/widgets/text/matlab/MatlabLexer +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxFactory +instanceKlass com/mathworks/widgets/text/matlab/AbstractTokenManager +instanceKlass com/mathworks/widgets/text/matlab/MatlabTokenManager +instanceKlass com/mathworks/widgets/text/STPMessagePanel$9 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData$1 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightData +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataFactory +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$9 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener$1 +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$NeedToUpdateListener +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightPrefs +instanceKlass com/mathworks/widgets/text/STPMessagePanel$2 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$8 +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$1 +instanceKlass java/awt/GradientPaint +instanceKlass com/mathworks/widgets/text/STPMessagePanel$7 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessagePainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel$1 +instanceKlass com/mathworks/widgets/text/STPMessagePanel$LayerMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessagePanel$TextAlignmentProvider +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelListener +instanceKlass com/mathworks/widgets/messagepanel/MessagePanelPainter +instanceKlass com/mathworks/widgets/text/STPMessagePanel +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$2 +instanceKlass com/mathworks/widgets/text/mcode/MLintPrefsUtils +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$8 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$MLintRunnable +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread$1 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerThread +instanceKlass com/mathworks/widgets/menus/DefaultMenuGroupID +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerMessageBarContributor +instanceKlass com/mathworks/widgets/text/LayerMarkList +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$7 +instanceKlass com/mathworks/widgets/text/mcode/MLint$MessageDefinition +instanceKlass com/mathworks/widgets/text/mcode/MLint$CodeAnalyzerContentType +instanceKlass com/mathworks/widgets/text/mcode/MLint +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightActions +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerActions +instanceKlass com/mathworks/mde/editor/EditorTabCompletion +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer$1 +instanceKlass com/mathworks/widgets/text/mcode/MTokenColorMap +instanceKlass com/mathworks/widgets/text/mcode/MColorScheme +instanceKlass com/mathworks/widgets/text/matlab/ColorScheme +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerUtils +instanceKlass com/mathworks/widgets/text/ColoringFactory +instanceKlass java/awt/LightweightDispatcher$2 +instanceKlass com/jidesoft/popup/JidePopup$14 +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$2 +instanceKlass sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar +instanceKlass sun/util/locale/InternalLocaleBuilder +instanceKlass sun/util/locale/StringTokenIterator +instanceKlass sun/util/locale/ParseStatus +instanceKlass sun/awt/im/InputMethodAdapter +instanceKlass java/awt/im/spi/InputMethod +instanceKlass java/awt/im/spi/InputMethodContext +instanceKlass java/awt/im/InputContext +instanceKlass java/awt/Window$1DisposeAction +instanceKlass com/jidesoft/document/DefaultStringConverter +instanceKlass com/jidesoft/swing/AbstractLayoutPersistence +instanceKlass com/jidesoft/swing/StringConverter +instanceKlass com/jidesoft/swing/LayoutPersistence +instanceKlass com/jidesoft/document/FloatingDocumentContainer +instanceKlass com/jidesoft/document/IDocumentGroup +instanceKlass com/jidesoft/document/DocumentComponent +instanceKlass com/jidesoft/swing/IContour +instanceKlass com/jidesoft/document/IDocumentPane +instanceKlass sun/awt/GlobalCursorManager$NativeUpdater +instanceKlass sun/awt/GlobalCursorManager +instanceKlass com/jidesoft/popup/JidePopup$9 +instanceKlass com/jidesoft/popup/JidePopup$6 +instanceKlass com/jidesoft/popup/JidePopup$4 +instanceKlass com/jidesoft/plaf/vsnet/ResizeFrameBorder +instanceKlass com/jidesoft/swing/Resizable +instanceKlass com/jidesoft/utils/PortingUtils +instanceKlass java/awt/peer/DialogPeer +instanceKlass java/awt/BufferCapabilities +instanceKlass java/awt/AttributeValue +instanceKlass sun/awt/NullComponentPeer +instanceKlass java/awt/peer/LightweightPeer +instanceKlass sun/awt/im/ExecutableInputMethodManager$3 +instanceKlass sun/awt/im/InputMethodLocator +instanceKlass sun/awt/windows/WInputMethodDescriptor +instanceKlass java/awt/im/spi/InputMethodDescriptor +instanceKlass sun/awt/im/InputMethodManager +instanceKlass sun/awt/FontConfiguration$2 +instanceKlass sun/awt/NativeLibLoader$1 +instanceKlass sun/awt/NativeLibLoader +instanceKlass sun/awt/PlatformFont +instanceKlass java/awt/peer/FontPeer +instanceKlass javax/swing/RepaintManager$2 +instanceKlass sun/awt/windows/WComponentPeer$2 +instanceKlass sun/awt/windows/WColor +instanceKlass sun/java2d/StateTracker$2 +instanceKlass sun/java2d/StateTracker$1 +instanceKlass sun/java2d/StateTracker +instanceKlass sun/java2d/SurfaceDataProxy +instanceKlass sun/awt/image/SurfaceManager$FlushableCacheData +instanceKlass sun/java2d/windows/GDIRenderer +instanceKlass sun/java2d/ScreenUpdateManager +instanceKlass sun/awt/im/InputMethodWindow +instanceKlass sun/awt/ExtendedKeyCodes +instanceKlass sun/awt/RepaintArea +instanceKlass sun/awt/windows/WWindowPeer$GuiDisposedListener +instanceKlass sun/awt/windows/WWindowPeer$ActiveWindowListener +instanceKlass java/awt/peer/CanvasPeer +instanceKlass java/awt/peer/PanelPeer +instanceKlass java/awt/peer/FramePeer +instanceKlass java/awt/peer/WindowPeer +instanceKlass java/awt/peer/ContainerPeer +instanceKlass java/awt/SplashScreen +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip$1 +instanceKlass com/jidesoft/tooltip/c +instanceKlass com/jidesoft/tooltip/ExpandedTip +instanceKlass com/jidesoft/tooltip/d$a_ +instanceKlass com/jidesoft/tooltip/BalloonTipUI$a_ +instanceKlass com/jidesoft/tooltip/composite/EdgeEffectComposite +instanceKlass com/jidesoft/tooltip/ShadowComposite +instanceKlass com/jidesoft/tooltip/shadows/PerspectiveShadow +instanceKlass com/jidesoft/tooltip/shapes/RoundedRectangularBalloonShape +instanceKlass com/jidesoft/tooltip/ShadowStyle +instanceKlass com/jidesoft/tooltip/ShadowSettings +instanceKlass com/mathworks/widgets/tooltip/CalloutRectangularBalloonShape +instanceKlass com/mathworks/mwswing/MJDialog$1 +instanceKlass com/mathworks/mwswing/MJDialog$DoShow +instanceKlass com/mathworks/mwswing/MJDialog$KeyCatcher +instanceKlass com/mathworks/mwswing/TransparentWindowFactory +instanceKlass com/jidesoft/tooltip/BalloonShape +instanceKlass com/mathworks/widgets/messagepanel/MessageModelListener +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerLayer +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$6 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$5 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$4 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$3 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$2 +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer$1 +instanceKlass com/mathworks/matlab/api/editor/EditorMessageBarContributor +instanceKlass com/mathworks/mwswing/api/UndoListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightDataListener +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingLayer +instanceKlass com/mathworks/widgets/text/mcode/analyzer/CodeAnalyzerEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingEditorLayerProvider +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$OSGiEditorLayerProviderContributor +instanceKlass com/mathworks/widgets/text/mcode/MEditorUI$EditorLayerProviderContributor +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$4 +instanceKlass com/mathworks/mde/editor/EditorView$10 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$EditorKitInfo +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils +instanceKlass com/mathworks/mde/editor/EditorMKit$1 +instanceKlass com/mathworks/mlwidgets/MatlabHyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/LayerUtils +instanceKlass com/mathworks/widgets/tooltip/BalloonToolTip +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabMKit$MatlabHelper +instanceKlass com/mathworks/widgets/text/mcode/MTreeUpdater$MTreeListener +instanceKlass com/mathworks/widgets/text/mcode/variables/NonlocalVariableHighlightingLayer +instanceKlass com/mathworks/matlab/api/editor/EditorLayer +instanceKlass com/mathworks/widgets/messagepanel/AbstractMessageModel +instanceKlass com/mathworks/widgets/messagepanel/MessageModel +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$NonLocalDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils$CodeAnalyzerDocHelper +instanceKlass com/mathworks/matlab/api/editor/EditorTipDocHelper +instanceKlass com/mathworks/mlwidgets/text/mcode/MatlabDocUtils +instanceKlass com/mathworks/widgets/text/mcode/variables/VariableStatusBarUtils$VariableHighlightingLayerStatusInfoProvider +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkStatusBarHandler +instanceKlass com/mathworks/widgets/text/layer/EditorTip$CommandHelper +instanceKlass org/netbeans/editor/ext/FormatLayer +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabEditorKitProvider +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$3 +instanceKlass com/mathworks/mwswing/MJRadioButtonMenuItem$ActionPropertyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsRadioButtonMenuItemUI$1 +instanceKlass com/mathworks/widgets/SplitScreenActions +instanceKlass com/mathworks/mde/editor/EditorApplicationComponentActivator +instanceKlass com/mathworks/widgets/text/ComponentActivator +instanceKlass com/mathworks/mde/editor/EditorSyntaxTextPane$EditorDropTargetListener +instanceKlass com/mathworks/widgets/text/SmartFormatter +instanceKlass com/mathworks/widgets/text/MWCaret$1 +instanceKlass com/mathworks/widgets/text/TextDragAndDrop +instanceKlass com/mathworks/widgets/text/MWDrawLayerFactory +instanceKlass org/netbeans/editor/BaseCaret$2 +instanceKlass org/netbeans/editor/SegmentCache +instanceKlass org/netbeans/editor/DocumentUtilities +instanceKlass org/netbeans/editor/BaseCaret$1 +instanceKlass org/netbeans/editor/Syntax$StateInfo +instanceKlass com/mathworks/widgets/Tokenizer$TokenInfo +instanceKlass com/mathworks/widgets/TokenizerFactory +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingImpl +instanceKlass org/netbeans/editor/Mark$MarkComparator +instanceKlass com/mathworks/widgets/text/MWCaret$DelimiterMatchingController +instanceKlass org/netbeans/editor/Mark +instanceKlass org/netbeans/editor/BaseCaret +instanceKlass org/netbeans/editor/AtomicLockListener +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$2 +instanceKlass org/netbeans/editor/view/spi/FlyView$Parent +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl$OffsetMatchUpdater +instanceKlass org/netbeans/lib/editor/view/ViewUtilitiesImpl +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$1 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$3 +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager$2 +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter +instanceKlass com/mathworks/matlab/api/editor/highlighting/EditorHighlighter$HighlighterUpdateListener +instanceKlass com/mathworks/widgets/editor/highlights/HighlighterManager +instanceKlass com/mathworks/widgets/text/MWEditorUI$4 +instanceKlass org/netbeans/editor/FontMetricsCache$InfoImpl +instanceKlass org/netbeans/editor/EditorUI$3 +instanceKlass com/mathworks/widgets/text/MWToolTipSupport$DismissEventListener +instanceKlass org/netbeans/editor/ext/ToolTipSupport$2 +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl$CollapsedFoldIterator +instanceKlass org/netbeans/modules/editor/fold/FoldUtilitiesImpl +instanceKlass org/netbeans/editor/FontMetricsCache$Info +instanceKlass org/netbeans/editor/FontMetricsCache +instanceKlass com/mathworks/widgets/text/MWEditorUI$2 +instanceKlass org/netbeans/editor/EditorUI$ComponentLock +instanceKlass org/netbeans/editor/PopupManager$HorizontalBounds +instanceKlass org/netbeans/editor/PopupManager$Placement +instanceKlass com/mathworks/widgets/text/layer/EditorTip +instanceKlass com/mathworks/widgets/text/layer/EditorTip$MEditorTipStrategy +instanceKlass com/mathworks/widgets/text/MWEditorUI$1 +instanceKlass org/netbeans/editor/EditorUI$1 +instanceKlass org/netbeans/editor/PopupManager +instanceKlass org/netbeans/editor/StatusBar +instanceKlass org/netbeans/editor/SideBarFactory +instanceKlass org/netbeans/editor/Annotations$AnnotationsListener +instanceKlass org/netbeans/api/editor/fold/FoldUtilities +instanceKlass org/netbeans/spi/editor/fold/FoldHierarchyTransaction +instanceKlass org/netbeans/api/editor/fold/FoldStateChange +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyTransactionImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution$1 +instanceKlass org/netbeans/api/editor/fold/Fold +instanceKlass org/netbeans/modules/editor/fold/SpiPackageAccessor +instanceKlass org/netbeans/spi/editor/fold/FoldOperation +instanceKlass org/netbeans/modules/editor/fold/FoldOperationImpl +instanceKlass org/netbeans/modules/editor/fold/FoldHierarchyExecution +instanceKlass org/netbeans/modules/editor/fold/ApiPackageAccessor +instanceKlass org/netbeans/api/editor/fold/FoldHierarchy +instanceKlass org/netbeans/lib/editor/util/PriorityMutex +instanceKlass org/netbeans/lib/editor/view/GapObjectArray +instanceKlass org/netbeans/lib/editor/view/GapObjectArray$RemoveUpdater +instanceKlass org/netbeans/editor/BaseTextUI$UIWatcher +instanceKlass com/mathworks/widgets/SyntaxTextPane$2 +instanceKlass com/mathworks/widgets/SyntaxTextPane$1 +instanceKlass org/netbeans/editor/LocaleSupport$Localizer +instanceKlass org/netbeans/editor/LocaleSupport +instanceKlass org/openide/util/Task +instanceKlass org/openide/util/Cancellable +instanceKlass org/openide/util/Utilities$RE +instanceKlass org/openide/util/Utilities +instanceKlass org/openide/util/RequestProcessor +instanceKlass org/openide/util/NbBundle$LocaleIterator +instanceKlass org/openide/util/NbBundle +instanceKlass com/mathworks/widgets/SyntaxTextPane$EmptyUniqueKeyProvider +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedFocusListener +instanceKlass com/mathworks/widgets/SyntaxTextPane$SharedCaretListener +instanceKlass com/mathworks/mwswing/undo/FilterUndoableEdit +instanceKlass com/mathworks/widgets/SyntaxTextPane$ActionManager +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$3 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$1 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$KitStore +instanceKlass org/netbeans/editor/Settings$KitAndValue +instanceKlass org/netbeans/api/editor/fold/FoldHierarchyListener +instanceKlass org/netbeans/editor/ActionFactory$JumpListNextAction$1 +instanceKlass org/netbeans/editor/JumpList$1 +instanceKlass org/netbeans/editor/JumpList +instanceKlass org/netbeans/editor/ActionFactory$JumpListPrevAction$1 +instanceKlass com/mathworks/widgets/text/layer/LayerActions +instanceKlass com/mathworks/widgets/text/MWKit$InstancesNotEqual +instanceKlass org/netbeans/lib/editor/util/swing/DocumentListenerPriority +instanceKlass org/netbeans/editor/BaseDocument$PropertyEvaluator +instanceKlass org/netbeans/editor/MarkChain +instanceKlass org/netbeans/editor/view/spi/EstimatedSpanView +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState +instanceKlass org/netbeans/editor/view/spi/ViewLayoutState$Parent +instanceKlass org/netbeans/editor/FindSupport +instanceKlass org/netbeans/editor/BaseDocument$1 +instanceKlass org/netbeans/editor/Registry +instanceKlass org/netbeans/editor/Analyzer +instanceKlass org/openide/ErrorManager +instanceKlass org/netbeans/editor/Utilities +instanceKlass java/lang/Package$1 +instanceKlass org/netbeans/editor/FinderFactory$AbstractFinder +instanceKlass org/netbeans/spi/editor/fold/FoldManager +instanceKlass com/mathworks/widgets/text/mcode/MFoldManagerFactory +instanceKlass org/netbeans/spi/editor/fold/FoldManagerFactory +instanceKlass org/netbeans/modules/editor/fold/FoldManagerFactoryProvider +instanceKlass com/mathworks/widgets/text/fold/CustomFoldManagerFactoryProvider +instanceKlass org/netbeans/editor/WeakPropertyChangeSupport +instanceKlass org/netbeans/editor/AnnotationTypes +instanceKlass org/netbeans/editor/SettingsAdapter +instanceKlass com/mathworks/widgets/text/mcode/codepad/CodepadOptions +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults$1 +instanceKlass com/mathworks/mwswing/GraphicsUtils +instanceKlass com/mathworks/widgets/text/MWSettingsDefaults +instanceKlass org/netbeans/editor/Formatter +instanceKlass org/netbeans/editor/MultiKeymap +instanceKlass org/netbeans/editor/ext/Completion +instanceKlass org/netbeans/editor/ext/CompletionJavaDoc +instanceKlass org/netbeans/editor/SettingsUtil$PrintColoringEvaluator +instanceKlass org/netbeans/editor/SettingsUtil +instanceKlass org/netbeans/editor/LineElement +instanceKlass org/netbeans/lib/editor/util/swing/GapBranchElement +instanceKlass org/netbeans/lib/editor/util/PriorityListenerList +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities$ModificationTextElement +instanceKlass org/netbeans/lib/editor/util/swing/DocumentUtilities +instanceKlass org/netbeans/editor/DrawLayerList +instanceKlass org/netbeans/editor/AcceptorFactory$4 +instanceKlass org/netbeans/editor/AcceptorFactory$3 +instanceKlass org/netbeans/editor/AcceptorFactory$2 +instanceKlass org/netbeans/editor/AcceptorFactory$1 +instanceKlass org/netbeans/editor/AcceptorFactory$TwoChar +instanceKlass org/netbeans/editor/AcceptorFactory$Char +instanceKlass org/netbeans/editor/AcceptorFactory$Fixed +instanceKlass org/netbeans/editor/Acceptor +instanceKlass org/netbeans/editor/AcceptorFactory +instanceKlass org/netbeans/editor/SettingsDefaults +instanceKlass org/netbeans/editor/BasePosition +instanceKlass org/netbeans/editor/MultiMark +instanceKlass org/netbeans/editor/MarkVector +instanceKlass org/netbeans/editor/DocumentContent +instanceKlass org/netbeans/editor/GapStart +instanceKlass org/netbeans/editor/PrintContainer +instanceKlass javax/swing/text/DocumentFilter$FilterBypass +instanceKlass org/netbeans/editor/CharSeq +instanceKlass org/netbeans/editor/Finder +instanceKlass org/netbeans/editor/DrawGraphics +instanceKlass org/netbeans/editor/AtomicLockDocument +instanceKlass com/mathworks/widgets/STPPrefsManager$PrintColoringEvaluator +instanceKlass com/mathworks/widgets/text/ErrorLogger +instanceKlass org/netbeans/api/editor/fold/FoldType +instanceKlass com/mathworks/widgets/text/mcode/MTree +instanceKlass com/mathworks/widgets/text/simscape/SimscapeSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/mcode/MSyntaxHighlighting +instanceKlass org/netbeans/modules/xml/text/syntax/XMLTokenIDs +instanceKlass com/mathworks/widgets/text/xml/XMLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cuda/CudaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/cplusplus/CAndCPlusPlusSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/vhdl/VHDLSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/verilog/VerilogSyntaxHighlighting +instanceKlass org/netbeans/editor/ImageTokenID +instanceKlass org/netbeans/editor/BaseTokenCategory +instanceKlass com/mathworks/widgets/text/java/JavaSyntaxHighlighting +instanceKlass com/mathworks/widgets/text/CommonResources +instanceKlass org/netbeans/editor/TokenContextPath$ArrayMatcher +instanceKlass org/netbeans/editor/TokenContextPath +instanceKlass org/netbeans/editor/BaseTokenID +instanceKlass com/mathworks/widgets/text/DefaultSyntaxColor +instanceKlass com/mathworks/widgets/text/tlc/TLCSyntaxHighlighting +instanceKlass com/mathworks/widgets/SyntaxHighlightingUtils +instanceKlass com/mathworks/widgets/STPPrefsManager$STPPrefsListener +instanceKlass org/netbeans/editor/SettingsNames +instanceKlass com/mathworks/widgets/text/EditorPrefsAccessor +instanceKlass org/netbeans/editor/Settings$Evaluator +instanceKlass org/netbeans/editor/TokenContext +instanceKlass com/mathworks/widgets/STPPrefsManager +instanceKlass org/netbeans/editor/Settings$AbstractInitializer +instanceKlass org/netbeans/editor/Settings$Initializer +instanceKlass org/netbeans/editor/Settings +instanceKlass org/netbeans/editor/BaseKit$1 +instanceKlass org/netbeans/editor/Syntax +instanceKlass org/netbeans/editor/ImplementationProvider +instanceKlass org/netbeans/editor/SyntaxSupport +instanceKlass com/mathworks/mwswing/undo/UndoManagerListener +instanceKlass com/mathworks/matlab/api/editor/SyntaxHighlightingColor +instanceKlass org/netbeans/editor/EditorUI +instanceKlass org/netbeans/editor/TokenID +instanceKlass org/netbeans/editor/TokenCategory +instanceKlass com/mathworks/widgets/text/ViewHierarchyModificationComponent +instanceKlass java/text/AttributedCharacterIterator +instanceKlass org/netbeans/editor/Coloring +instanceKlass org/netbeans/editor/DrawLayer$AbstractLayer +instanceKlass org/netbeans/editor/DrawLayer +instanceKlass org/netbeans/editor/SettingsChangeListener +instanceKlass java/text/AttributedString +instanceKlass com/mathworks/widgets/text/print/TextPrintable +instanceKlass java/awt/print/Printable +instanceKlass javax/print/DocPrintJob +instanceKlass com/mathworks/mwswing/api/ExtendedUndoManager +instanceKlass com/mathworks/mwswing/api/UndoabilityChangeListener +instanceKlass com/mathworks/widgets/text/ViewHierarchyChangeListener +instanceKlass java/awt/im/InputMethodRequests +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView$LastActiveFocusListener +instanceKlass com/mathworks/mde/editor/EditorView$4 +instanceKlass com/mathworks/mde/editor/EditorView$7 +instanceKlass com/mathworks/widgets/SyntaxTextPaneBase$PostKeyListener +instanceKlass com/mathworks/mde/editor/EditorView$6 +instanceKlass com/mathworks/mde/editor/EditorView$5 +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager$1 +instanceKlass com/mathworks/mde/editor/codepad/CodepadAction +instanceKlass com/mathworks/mde/editor/ActionManager$OSGiKeyBindingContributorProvider +instanceKlass com/mathworks/widgets/editor/SaveOnBlurImpl +instanceKlass com/mathworks/mde/editor/EditorView$1 +instanceKlass com/mathworks/mde/editor/EditorView$EditorPrefListener +instanceKlass com/mathworks/mde/editor/EditorView$11 +instanceKlass com/mathworks/mde/editor/EditorView$3 +instanceKlass com/mathworks/mde/editor/EditorView$2 +instanceKlass com/mathworks/matlab/api/debug/BreakpointMargin +instanceKlass com/mathworks/util/AbsoluteFile +instanceKlass com/mathworks/mde/editor/codepad/CodepadActionManager +instanceKlass com/mathworks/mde/editor/ExecutionArrowDisplay +instanceKlass com/mathworks/mde/editor/codepad/Codepad +instanceKlass com/mathworks/mde/editor/EditorView$OSGiEditorLayerProviderDistributor +instanceKlass com/mathworks/mde/editor/EditorViewClient$8 +instanceKlass com/mathworks/matlab/api/debug/ExecutionDisplayAdapter +instanceKlass com/mathworks/widgets/SyntaxTextPane$UniqueKeyProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStoreEventListener +instanceKlass com/mathworks/matlab/api/debug/ViewProvider +instanceKlass com/mathworks/mde/editor/codepad/CodepadContainer +instanceKlass com/mathworks/widgets/SyntaxTextPaneMultiView +instanceKlass com/mathworks/matlab/api/editor/SaveOnBlur +instanceKlass com/mathworks/matlab/api/editor/DirtyState +instanceKlass com/mathworks/mde/editor/EditorView$EditorLayerProviderDistributor +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$2 +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPopupMenuListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxListSelectionListener +instanceKlass javax/swing/JComboBox$AccessibleJComboBox$AccessibleJComboBoxPropertyChangeListener +instanceKlass com/mathworks/mwswing/ComboBoxItem +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$4 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$3 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripComboBoxUI$2 +instanceKlass javax/swing/JList$ListSelectionHandler +instanceKlass com/mathworks/toolstrip/plaf/ToolstripListUI$1 +instanceKlass com/mathworks/mlwidgets/stack/StackComboBox$StackCallback +instanceKlass com/mathworks/widgets/datamodel/StorageLocationUtils +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefreshListenerManager +instanceKlass com/mathworks/mde/editor/MatlabEditor$EditorVisibilityListener +instanceKlass com/mathworks/matlab/api/debug/ExecutionArrowMargin +instanceKlass com/mathworks/mde/editor/TextFileUiInfoProvider$1 +instanceKlass com/mathworks/matlab/api/dataview/BasicUiInfoProvider +instanceKlass com/mathworks/widgets/datamodel/FileStorageLocation +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$DefaultEncodingProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultDialogProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyFileChooserSetupDelegate +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$AlwaysSaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$EmptyDefaultFileNameProvider +instanceKlass org/apache/commons/io/IOCase +instanceKlass com/mathworks/widgets/text/EditorPreferences +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils$1 +instanceKlass com/mathworks/widgets/text/vhdl/VHDLLanguage +instanceKlass com/mathworks/widgets/text/verilog/VerilogLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CLanguage +instanceKlass com/mathworks/widgets/text/tlc/TLCLanguage +instanceKlass com/mathworks/widgets/text/simscape/SimscapeLanguage +instanceKlass com/mathworks/widgets/text/xml/XMLLanguage +instanceKlass com/mathworks/widgets/text/java/JavaLanguage +instanceKlass com/mathworks/widgets/text/cuda/CudaLanguage +instanceKlass com/mathworks/widgets/text/cplusplus/CPlusPlusLanguage +instanceKlass com/mathworks/widgets/text/plain/PlainLanguage +instanceKlass com/mathworks/widgets/text/mcode/MLanguage +instanceKlass com/mathworks/project/impl/PRJLanguage +instanceKlass com/mathworks/widgets/text/EditorLanguageUtils +instanceKlass com/mathworks/widgets/text/STPViewModificationInterface +instanceKlass com/mathworks/matlab/api/debug/ViewProviderKey +instanceKlass com/mathworks/widgets/SyntaxTextPaneUtilities +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DialogInfoUserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore$UserInteractionModel +instanceKlass com/mathworks/widgets/datamodel/DialogProvider +instanceKlass com/mathworks/mde/editor/EditorViewClient$12 +instanceKlass com/mathworks/mde/editor/EditorViewClient$11 +instanceKlass com/mathworks/mde/editor/EditorViewClient$2 +instanceKlass com/mathworks/mde/editor/MatlabEditor +instanceKlass com/mathworks/mde/editor/EditorViewClient$6 +instanceKlass com/mathworks/mde/editor/EditorViewClient$5 +instanceKlass com/mathworks/mde/editor/EditorViewClient$4 +instanceKlass com/mathworks/mde/editor/EditorViewClient$3 +instanceKlass com/mathworks/mwswing/api/DirtyStateChangeListener +instanceKlass com/mathworks/mde/editor/EditorViewListener +instanceKlass com/mathworks/mde/editor/EditorViewCallback +instanceKlass com/mathworks/widgets/debug/DebuggerManager$DebuggerManagerStateListener +instanceKlass com/mathworks/jmi/MatlabMCR$AWTReplyEvent +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$DBStackCallback +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry +instanceKlass com/mathworks/mwswing/UIEventLogger +instanceKlass com/mathworks/widgets/desk/DTEvent +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$2 +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$WSBPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LoggingActionListener +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$VariableInfo +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$PlottingSelectionListener +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDialogs +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$1 +instanceKlass com/mathworks/mlwidgets/workspace/VariableRecordlistModel$SizeStringComparator +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceDnDListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger$LoggingProxyActionListener +instanceKlass com/mathworks/mlwidgets/array/UserActionLogger +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceSelectionPopupMenu$LoggingActionListener +instanceKlass com/mathworks/widgets/spreadsheet/IClipboardOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/IPrintingOpProvider +instanceKlass com/mathworks/widgets/spreadsheet/ISaveOpProvider +instanceKlass com/mathworks/mlwidgets/array/UpdatableData +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceTable$WorkspaceTableActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$AppFocusL +instanceKlass com/mathworks/widgets/recordlist/RecordlistResources +instanceKlass com/mathworks/widgets/recordlist/ObserverAdapter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$3 +instanceKlass javax/swing/JTable$4 +instanceKlass javax/swing/JTable$2 +instanceKlass javax/swing/JTable$Resizable3 +instanceKlass javax/swing/JTable$Resizable2 +instanceKlass com/mathworks/widgets/spreadsheet/UndoActionFactory +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$FieldEditor$1 +instanceKlass javax/swing/DefaultCellEditor$EditorDelegate +instanceKlass com/mathworks/widgets/recordlist/FullRLTCellRenderer +instanceKlass com/mathworks/mlwidgets/workspace/util/WorkspaceIcon +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ColumnSelectionRecorder +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$SelectionRecorder +instanceKlass com/mathworks/util/ArrayUtils$EmptyObjects +instanceKlass com/mathworks/widgets/recordlist/RecordlistSelectionTracker +instanceKlass com/mathworks/widgets/recordlist/RecordlistTable$ActionHelper +instanceKlass com/mathworks/widgets/recordlist/ActionUtils +instanceKlass com/mathworks/mwswing/table/PlatformDelegatingHeaderRenderer +instanceKlass com/mathworks/mwswing/TableUtils +instanceKlass javax/swing/tree/TreeCellEditor +instanceKlass com/mathworks/util/ArrayUtils$EmptyPrimitives +instanceKlass com/mathworks/mlwidgets/graphics/PlotPickerOpener +instanceKlass com/mathworks/widgets/recordlist/IDuplicationObserver +instanceKlass com/mathworks/widgets/recordlist/ICreationObserver +instanceKlass com/mathworks/widgets/recordlist/ICopyingObserver +instanceKlass com/mathworks/widgets/recordlist/IOpeningObserver +instanceKlass com/mathworks/widgets/recordlist/IEditingObserver +instanceKlass com/mathworks/mwswing/TableCell +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$RowLocationData +instanceKlass com/mathworks/widgets/recordlist/IRecordFilter +instanceKlass com/mathworks/widgets/recordlist/RecordlistTableModel$ViewUpdater +instanceKlass com/mathworks/mwswing/table/RestrictedSortTableModel +instanceKlass com/mathworks/mwswing/table/PresortedTableModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistListener +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$ActionProvider +instanceKlass com/mathworks/mlwidgets/workspace/ActionUtils$InputMapActionProvider +instanceKlass com/mathworks/mwswing/MJTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/spreadsheet/IUndoManagerProvider +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$8 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4$1 +instanceKlass com/mathworks/mlservices/MLExecutionEvent$1 +instanceKlass com/mathworks/widgets/recordlist/IDeletionObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordOperationObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordSecondaryIconProvider +instanceKlass com/mathworks/widgets/recordlist/InternalActionHelper +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceLog +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspacePrefs +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WhosObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterObserver +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceMCRProvider +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceCommands +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceChange +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$LocalWorkspaceEventObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$3 +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$InterpreterFreeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener$WorkspaceChangeTimerCallback +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceListener +instanceKlass com/mathworks/mlwidgets/workspace/FetchedValueBuffer +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$MWMCompletionObserver +instanceKlass com/mathworks/mlwidgets/workspace/MatlabWorkspaceModel$RQI +instanceKlass com/mathworks/mlwidgets/workspace/NestingInformation +instanceKlass com/mathworks/mlwidgets/workspace/WhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/ClassicWhosInformation +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceResources +instanceKlass com/mathworks/widgets/spreadsheet/format/FormatIdentifier$1 +instanceKlass com/mathworks/mlwidgets/workspace/WorkspaceObserver +instanceKlass com/mathworks/widgets/recordlist/IRecordQueryInformant +instanceKlass com/mathworks/widgets/datatransfer/VariableLiteral +instanceKlass com/mathworks/widgets/recordlist/AbstractRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IVirtualRecordContainer +instanceKlass com/mathworks/widgets/recordlist/IRecordIconProvider +instanceKlass com/mathworks/mlwidgets/workspace/ValueLookup +instanceKlass com/mathworks/widgets/recordlist/IRecordlistRefresher +instanceKlass com/mathworks/widgets/recordlist/IRestrictedSortRecordlist +instanceKlass com/mathworks/widgets/recordlist/IRecordEditor +instanceKlass com/mathworks/widgets/recordlist/IRecordOpener +instanceKlass com/mathworks/widgets/recordlist/IRecordDuplicator +instanceKlass com/mathworks/widgets/recordlist/IRecordDeleter +instanceKlass com/mathworks/widgets/recordlist/IRecordCreator +instanceKlass com/mathworks/widgets/recordlist/IRecordFieldCopier +instanceKlass com/mathworks/widgets/recordlist/IRecordCopier +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowser$LocalChangeListener +instanceKlass com/mathworks/mlwidgets/stack/StackInfoRegistry$StackInfoChange +instanceKlass com/mathworks/widgets/spreadsheet/IUndoOpProvider +instanceKlass com/mathworks/widgets/recordlist/IRecordValueMutator +instanceKlass com/mathworks/widgets/recordlist/IRecordlistMutator +instanceKlass com/mathworks/mlwidgets/graphics/IPlotPickerDisplayTrigger +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphingActionListener +instanceKlass com/mathworks/mlwidgets/workspace/graphics/IGraphableInfoProvider +instanceKlass com/mathworks/mlwidgets/workspace/IWorkspaceActionProvider +instanceKlass com/mathworks/widgets/recordlist/IActionProvider +instanceKlass com/mathworks/widgets/recordlist/IGenericNameSupplier +instanceKlass com/mathworks/widgets/recordlist/IRecordlistModel +instanceKlass com/mathworks/widgets/recordlist/IRecordlistFieldConfig +instanceKlass com/mathworks/widgets/recordlist/IRecordContainer +instanceKlass javax/swing/JTabbedPane$ModelListener +instanceKlass com/mathworks/mwswing/MJTabbedPane$TabMouseListener +instanceKlass com/mathworks/jmi/AWTUtilities$Latch +instanceKlass com/mathworks/jmi/AWTUtilities$MatlabWait +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$FlushRunnable +instanceKlass com/mathworks/mde/cmdwin/CommandWindowRegistrar +instanceKlass com/mathworks/mlservices/MLCommandWindow +instanceKlass com/mathworks/mlservices/MLCommandWindowRegistrar +instanceKlass org/netbeans/editor/WeakTimerListener +instanceKlass java/util/Observable +instanceKlass com/mathworks/widgets/incSearch/IncSearchStatusBar$1 +instanceKlass com/mathworks/widgets/incSearch/IncSearch$IncSearchResults +instanceKlass com/mathworks/mwswing/ClipboardMonitor$TypeChangedNotifier +instanceKlass com/mathworks/mde/cmdwin/CmdWinEditorKit$1 +instanceKlass com/mathworks/mwswing/ClipboardMonitor +instanceKlass java/text/StringCharacterIterator +instanceKlass com/mathworks/mwswing/text/MTextAction$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl$1 +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionExecutionListener +instanceKlass com/mathworks/mde/cmdwin/TabCompletionImpl +instanceKlass com/mathworks/mlwidgets/tabcompletion/TabCompletionInterface +instanceKlass com/mathworks/jmi/tabcompletion/TabCompletion +instanceKlass com/mathworks/mde/cmdhist/AltHistory$RecallListener +instanceKlass com/mathworks/mde/cmdwin/CmdWin$1 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$4 +instanceKlass com/mathworks/mde/cmdwin/FunctionBrowserRowHeader$1 +instanceKlass javax/accessibility/AccessibleBundle +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$MyAppearanceFocusListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$5 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$2 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$1 +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$SearchData +instanceKlass com/mathworks/mwswing/text/DocumentSearch +instanceKlass com/mathworks/widgets/Tokenizer +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup +instanceKlass com/mathworks/services/KeyboardPrefs +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher$Options +instanceKlass com/mathworks/widgets/tokenmatch/TokenMatchPopup$TokenMatchListener +instanceKlass com/mathworks/mde/cmdwin/TokenMatcher +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$8 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWPrefsListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CWCaretListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$FindClientImpl +instanceKlass com/mathworks/mde/cmdwin/CWDragDropImpl +instanceKlass com/mathworks/mde/cmdwin/XCaret$2 +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$3 +instanceKlass com/mathworks/util/Assert +instanceKlass com/mathworks/widgets/find/FindDialog +instanceKlass com/mathworks/widgets/find/FindParentListener +instanceKlass com/mathworks/mde/cmdwin/XCmdWndView$CmdWinFontListener +instanceKlass com/mathworks/widgets/incSearch/IncSearchData +instanceKlass com/mathworks/widgets/find/FindClientInterface +instanceKlass javax/print/DocFlavor +instanceKlass javax/print/attribute/AttributeSet +instanceKlass com/mathworks/mwswing/datatransfer/AutoScroller +instanceKlass com/mathworks/services/PrefEvent +instanceKlass com/mathworks/mwswing/ClipboardListener +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$4 +instanceKlass com/mathworks/widgets/desk/DTGroupFrame$ArrangementControls$2 +instanceKlass com/mathworks/mwswing/MJComboBox$2 +instanceKlass com/mathworks/mwswing/MJComboBox$3 +instanceKlass com/mathworks/mwswing/MJComboBox$DelegatingMouseListener +instanceKlass com/mathworks/mwswing/MacAppearanceUtils +instanceKlass com/mathworks/mwswing/MJToggleButton$ActionPropertyHandler +instanceKlass com/mathworks/widgets/desk/DTTabbedDocumentPane$1 +instanceKlass org/jdesktop/animation/timing/interpolation/LengthItem +instanceKlass org/jdesktop/animation/timing/interpolation/SplineInterpolator +instanceKlass org/jdesktop/animation/timing/interpolation/Interpolator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingAdditions +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$Animator +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$PendingRemovals +instanceKlass com/mathworks/widgets/desk/Range +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$TabDragger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$EdgeListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$TileAction$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$1 +instanceKlass com/mathworks/widgets/desk/DTDocumentTabs$AnimationDoneListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$Tiling +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties +instanceKlass com/mathworks/widgets/desk/DTTitleBar$2 +instanceKlass com/mathworks/widgets/desk/DTTitleButton$ActionPropertyListener +instanceKlass com/mathworks/widgets/desk/DTTitleButton$IconData +instanceKlass com/mathworks/widgets/desk/DTBorderFactory$SelectionDependent +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$BarState +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ContainerState +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$State +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step$1 +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Condition +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder$Step +instanceKlass com/mathworks/widgets/FocusTraversalPolicyBuilder +instanceKlass com/mathworks/mde/explorer/Explorer$1 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils$3 +instanceKlass com/mathworks/mde/explorer/ToolbarUtils +instanceKlass com/mathworks/widgets/desk/DTToolSet$1 +instanceKlass com/mathworks/widgets/desk/DTToolSet$KeyOwnerCombo +instanceKlass com/mathworks/widgets/desk/DTToolBarFactory +instanceKlass com/mathworks/widgets/desk/DTToolSet$ItemInfo +instanceKlass com/mathworks/widgets/desk/DTToolSet +instanceKlass com/mathworks/mde/explorer/Explorer$9 +instanceKlass com/mathworks/mde/explorer/Explorer$17 +instanceKlass com/mathworks/mde/explorer/Explorer$15 +instanceKlass com/mathworks/mde/explorer/Explorer$16 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$3 +instanceKlass com/mathworks/services/ColorPrefs$ColorListener +instanceKlass com/mathworks/services/ColorPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ColorListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/util/ExplicitColorAndFontProvider +instanceKlass com/mathworks/util/tree/TreeUtils$8 +instanceKlass com/mathworks/util/tree/TreeUtils$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$5 +instanceKlass com/mathworks/util/tree/VisitStrategy +instanceKlass com/mathworks/util/tree/TreeUtils$9 +instanceKlass com/mathworks/util/tree/Visitor +instanceKlass com/mathworks/util/tree/TreeUtils +instanceKlass com/mathworks/util/tree/ComponentTree +instanceKlass com/mathworks/services/OldFontPrefs +instanceKlass com/mathworks/mde/functionbrowser/FunctionBrowserFontPrefs +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils$ClipboardPrefListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs$DecimalSeparatorListener +instanceKlass com/mathworks/widgets/spreadsheet/SpreadsheetPrefs +instanceKlass com/mathworks/widgets/spreadsheet/format/SupplementalFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/CompositeFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory$BooleanFormatterImpl +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/BooleanFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/data/ComplexScalar +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$GEBestFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory$1 +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatter +instanceKlass com/mathworks/widgets/spreadsheet/format/ComplexScalarFormatterFactory +instanceKlass com/mathworks/widgets/spreadsheet/format/Formatter +instanceKlass com/mathworks/mlwidgets/array/ArrayUtils +instanceKlass com/mathworks/mde/array/ArrayEditorFontPrefs +instanceKlass com/mathworks/mde/workspace/WorkspaceBrowserResources +instanceKlass com/mathworks/mde/workspace/WorkspaceFontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$ExplorerFontPrefs +instanceKlass com/mathworks/mde/editor/EditorFontPrefs +instanceKlass com/mathworks/mde/cmdhist/CmdHistoryPrefs +instanceKlass com/mathworks/services/FontPrefs$FontItem +instanceKlass com/mathworks/services/PrefsAWT +instanceKlass com/mathworks/services/FontPrefs$HtmlFontPrefs +instanceKlass com/mathworks/services/FontPrefs +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$ComponentListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils$1 +instanceKlass com/mathworks/util/tree/Tree +instanceKlass com/mathworks/services/FontListener +instanceKlass com/mathworks/mlwidgets/explorer/util/PrefUtils +instanceKlass com/mathworks/mde/explorer/Explorer$4 +instanceKlass com/mathworks/mde/explorer/Explorer$3 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$5 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$4 +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer$Header$1 +instanceKlass java/awt/GridBagConstraints +instanceKlass java/awt/GridBagLayout +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane$2 +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder +instanceKlass javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout +instanceKlass javax/swing/plaf/basic/BasicBorders$SplitPaneBorder +instanceKlass com/mathworks/sourcecontrol/ThreadUtils$1 +instanceKlass com/mathworks/sourcecontrol/ThreadUtils +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$2 +instanceKlass java/util/UUID$Holder +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$1 +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay$2 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$2 +instanceKlass com/mathworks/widgets/tooltip/TooltipUtils +instanceKlass java/util/function/Predicate +instanceKlass java/util/function/Consumer +instanceKlass java/util/function/UnaryOperator +instanceKlass com/mathworks/mwswing/ComponentUtils +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$2 +instanceKlass javax/swing/text/html/AccessibleHTML$DocumentHandler +instanceKlass javax/swing/text/html/AccessibleHTML$ElementInfo +instanceKlass javax/swing/text/html/AccessibleHTML$PropertyChangeHandler +instanceKlass javax/swing/text/html/AccessibleHTML +instanceKlass javax/swing/text/DefaultStyledDocument$ChangeUpdateRunnable +instanceKlass java/util/Formatter$Conversion +instanceKlass java/util/Formatter$Flags +instanceKlass java/util/Formatter$FormatSpecifier +instanceKlass java/util/Formatter$FixedString +instanceKlass java/util/Formatter$FormatString +instanceKlass java/util/Formatter +instanceKlass com/mathworks/services/settings/SettingLevel$1 +instanceKlass com/mathworks/util/HTMLUtils +instanceKlass javax/swing/text/GapContent$UndoPosRef +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer$ElemChanges +instanceKlass javax/swing/text/DefaultStyledDocument$ElementSpec +instanceKlass javax/swing/text/html/parser/ContentModelState +instanceKlass javax/swing/text/html/parser/TagStack +instanceKlass javax/swing/text/html/parser/TagElement +instanceKlass javax/swing/text/html/parser/Parser +instanceKlass javax/swing/text/html/HTMLDocument$HTMLReader$TagAction +instanceKlass javax/swing/text/html/HTMLEditorKit$ParserCallback +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$6 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler$1 +instanceKlass com/mathworks/mwswing/JEditorPaneHyperlinkHandler +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$5 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$3 +instanceKlass javax/swing/text/TabableView +instanceKlass javax/swing/text/html/StyleSheet$1 +instanceKlass javax/swing/text/html/CSSBorder$StrokePainter +instanceKlass javax/swing/text/html/CSSBorder$SolidPainter +instanceKlass javax/swing/text/html/CSSBorder$NullPainter +instanceKlass javax/swing/text/html/CSSBorder$BorderPainter +instanceKlass javax/swing/text/html/StyleSheet$BoxPainter +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass javax/swing/text/html/StyleSheet$SearchBuffer +instanceKlass com/mathworks/jmi/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass javax/swing/text/html/MuxingAttributeSet +instanceKlass javax/swing/text/FlowView$FlowStrategy +instanceKlass javax/swing/text/DefaultStyledDocument$AbstractChangeHandler +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$4 +instanceKlass javax/swing/text/html/parser/AttributeList +instanceKlass javax/swing/text/html/parser/ContentModel +instanceKlass com/mathworks/hg/util/HGPeerQueue +instanceKlass javax/swing/text/html/parser/ParserDelegator$1 +instanceKlass javax/swing/text/html/parser/Entity +instanceKlass javax/swing/text/html/parser/Element +instanceKlass javax/swing/text/html/parser/DTD +instanceKlass javax/swing/text/html/parser/DTDConstants +instanceKlass javax/swing/text/html/HTMLEditorKit$Parser +instanceKlass javax/swing/text/DefaultStyledDocument$ElementBuffer +instanceKlass javax/swing/text/html/CSS$ShorthandMarginParser +instanceKlass javax/swing/text/html/CSS$LengthUnit +instanceKlass javax/swing/text/html/CSSParser +instanceKlass javax/swing/text/html/StyleSheet$CssParser +instanceKlass javax/swing/text/html/CSSParser$CSSParserCallback +instanceKlass javax/swing/text/html/HTMLEditorKit$1 +instanceKlass javax/swing/text/html/StyleSheet$SelectorMapping +instanceKlass javax/swing/text/html/CSS$CssValue +instanceKlass javax/swing/text/html/CSS$Value +instanceKlass javax/swing/text/html/CSS$Attribute +instanceKlass javax/swing/text/html/CSS +instanceKlass javax/swing/text/StyledEditorKit$AttributeTracker +instanceKlass javax/swing/text/html/HTML$Attribute +instanceKlass javax/swing/text/html/HTML +instanceKlass javax/swing/text/html/HTML$Tag +instanceKlass javax/swing/text/html/HTMLEditorKit$HTMLFactory +instanceKlass javax/swing/text/StyledEditorKit$StyledViewFactory +instanceKlass javax/swing/text/StyledDocument +instanceKlass com/mathworks/sourcecontrol/SCInfoBar$1 +instanceKlass javax/swing/event/HyperlinkListener +instanceKlass com/mathworks/widgets/HyperlinkTextLabel +instanceKlass com/mathworks/toolbox/shared/computils/widgets/DisposableBusyAffordance$1 +instanceKlass com/mathworks/sourcecontrol/SCInfoBar +instanceKlass com/mathworks/sourcecontrol/ActionStatusDisplay +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$9 +instanceKlass com/mathworks/sourcecontrol/StatusToolTipAffordance +instanceKlass com/mathworks/sourcecontrol/SourceControlUI$SourceControlUIHolder +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$MainContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/DynamicMenuContributor +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$4 +instanceKlass com/mathworks/matlab/api/explorer/CutCopyPasteActionValidator +instanceKlass java/awt/EventQueue$1AWTInvocationLock +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$6 +instanceKlass java/util/WeakHashMap$HashIterator +instanceKlass com/mathworks/util/RequestFilter$1$1 +instanceKlass sun/awt/datatransfer/DataTransferer$IndexedComparator +instanceKlass sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder +instanceKlass java/awt/datatransfer/SystemFlavorMap$2 +instanceKlass sun/net/DefaultProgressMeteringPolicy +instanceKlass sun/net/ProgressMeteringPolicy +instanceKlass sun/net/ProgressMonitor +instanceKlass java/awt/datatransfer/SystemFlavorMap$1 +instanceKlass sun/awt/Mutex +instanceKlass sun/awt/datatransfer/ToolkitThreadBlockedHandler +instanceKlass sun/awt/datatransfer/DataTransferer +instanceKlass java/awt/datatransfer/Clipboard +instanceKlass com/mathworks/widgets/grouptable/transfer/Transfer +instanceKlass com/mathworks/mlwidgets/explorer/util/MLPathUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/MatlabPathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$1 +instanceKlass com/mathworks/sourcecontrol/EmptyProject +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$1 +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor$2 +instanceKlass com/mathworks/cmlink/util/status/CMStatusChangeServer +instanceKlass com/mathworks/sourcecontrol/SCProcessTerminator +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressState +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster$EventDispatcher +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/statuswidget/progressindication/ProgressEventBroadcaster +instanceKlass com/mathworks/sourcecontrol/sandboxcreation/controller/CMMonitorDispatcher +instanceKlass com/mathworks/cmlink/api/ExceptionHandler +instanceKlass com/mathworks/cmlink/api/ProgressIndicator +instanceKlass com/mathworks/cmlink/api/StatusBroadcaster +instanceKlass com/mathworks/cmlink/util/interactor/CMMonitor +instanceKlass com/mathworks/cmlink/util/adapter/TriggerableTerminator +instanceKlass com/mathworks/cmlink/api/Terminator +instanceKlass com/mathworks/sourcecontrol/MLApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager$SCAdapterConnectionManagerHolder +instanceKlass com/mathworks/cmlink/management/cache/CMStatusCacheListener +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapter +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMInteractor +instanceKlass com/mathworks/cmlink/util/interactor/MonitoringApplicationInteractor +instanceKlass com/mathworks/cmlink/api/ApplicationInteractor +instanceKlass com/mathworks/sourcecontrol/SCAdapterConnectionManager +instanceKlass java/util/concurrent/ConcurrentHashMap$Traverser +instanceKlass sun/font/SunFontManager$TTorT1Filter +instanceKlass com/mathworks/sourcecontrol/prefs/SCSettingsUtilities +instanceKlass com/mathworks/util/LazyFilter$1 +instanceKlass sun/font/SunFontManager$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$2 +instanceKlass com/mathworks/util/LazyFilter +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ApplicableChecker +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$6 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$5 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$4 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$3 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$2 +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$9 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$8 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider$1 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$4 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$3 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$2 +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider$1 +instanceKlass sun/awt/windows/WDesktopPeer +instanceKlass java/awt/peer/DesktopPeer +instanceKlass java/awt/Desktop +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DeleteActionCode +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/MenuUtils +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$32 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider$1 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$7 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$6 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$5 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$4 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$3 +instanceKlass sun/font/SunFontManager$13 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$2 +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider$1 +instanceKlass com/mathworks/hg/util/HGUtils$ComponentImageRunnable +instanceKlass com/mathworks/mde/explorer/PathActionProvider$8 +instanceKlass com/mathworks/hg/util/HGUtils +instanceKlass com/mathworks/mde/explorer/PathActionProvider$7 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$6 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$5 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$4 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$3 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/WritablePathModel +instanceKlass com/mathworks/mde/explorer/PathActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicates$33 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$DebugStateListener$1 +instanceKlass com/mathworks/mde/explorer/PathActionProvider$PathChangeNotifier +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider$1 +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider$ReportRunner +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$5 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$4 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$1 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$3 +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveIconFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider$1 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$2 +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$2 +instanceKlass com/mathworks/explorer/MATFileInfoProvider$1 +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider$1 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$3 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$2 +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$1 +instanceKlass com/mathworks/hg/peer/DebugUtilities$1 +instanceKlass com/mathworks/hg/peer/DebugUtilities +instanceKlass com/mathworks/jmi/AWTUtilities$Synchronizer +instanceKlass com/mathworks/hg/peer/FigureRenderLocker +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider$2 +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch$1 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration$1 +instanceKlass com/mathworks/toolboxmanagement/tasks/ToolboxInstallTask +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider$1 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$3 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider$1 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$4 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$3 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$2 +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$3 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$CachedData +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider$6 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider$5 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$ImmutableEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem$MountPoint +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput$1 +instanceKlass com/mathworks/util/ObjectPool$Entry +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$6 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionPredicate +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$5 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$3 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$7 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$2 +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider$6 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$1 +instanceKlass com/mathworks/util/ObjectPool +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/CommonsCompressZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/StreamingZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipInput +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem$InputFailoverChain +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileSystem +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$2 +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderBinding +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl$ProviderConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl$ProviderBinding +instanceKlass com/mathworks/util/ExtendedIterable +instanceKlass com/mathworks/matlab/api/explorer/ActionConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionConfigurationImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DeferHandler +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$2 +instanceKlass com/mathworks/matlab/api/explorer/ActionRegistry +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionRegistryImpl +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$5 +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager$ActionList +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$4 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider$1 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProviderProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveUtils +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$4 +instanceKlass com/mathworks/mde/explorer/Explorer$PathAffordanceAdapter +instanceKlass com/mathworks/widgets/WorkMonitor$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$DecorationResolvingInstantiator +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabCodeFileDetailPanel +instanceKlass com/mathworks/matlab/api/explorer/DetailPanel +instanceKlass javax/accessibility/AccessibleExtendedTable +instanceKlass javax/accessibility/AccessibleTable +instanceKlass javax/accessibility/AccessibleSelection +instanceKlass com/mathworks/explorer/VariableTransferHandler +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/H1Retriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$3 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TransferFileGroup +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1$2 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$2 +instanceKlass java/awt/datatransfer/MimeType +instanceKlass java/awt/datatransfer/MimeTypeParameterList +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$5 +instanceKlass java/awt/datatransfer/DataFlavor +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel$1 +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/FileTransferHandler +instanceKlass com/mathworks/mwswing/table/ListColorUtils +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$20 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$19 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$18 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$3 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$TableContext$1 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$2 +instanceKlass com/mathworks/mwswing/CellViewerUtils$AbstractContext$1 +instanceKlass com/mathworks/fileutils/MLFileUtils +instanceKlass com/mathworks/mwswing/CellViewer$4 +instanceKlass com/mathworks/mwswing/CellViewer$3 +instanceKlass com/mathworks/mwswing/CellViewer$2 +instanceKlass com/mathworks/mwswing/CellViewer$1 +instanceKlass com/mathworks/mwswing/CellViewer +instanceKlass com/mathworks/fl/i18n/XMLMessageSystemJNI +instanceKlass com/mathworks/mwswing/CellPainterProvider +instanceKlass com/mathworks/mwswing/CellViewerUtils$Context +instanceKlass com/mathworks/mwswing/CellViewerUtils +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$1 +instanceKlass com/mathworks/mwswing/DefaultTableCellViewerCustomizer +instanceKlass com/mathworks/fl/i18n/XMLMessageSystem +instanceKlass com/mathworks/widgets/grouptable/RightClickSelectionHandler +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler$3 +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfo +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$2 +instanceKlass com/mathworks/matlab/api/explorer/FileDecorators +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler$2 +instanceKlass com/mathworks/matlab/api/explorer/FileDecorations +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationModel +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$1 +instanceKlass com/mathworks/matlab/api/explorer/CoreFileDecoration +instanceKlass com/mathworks/mlwidgets/explorer/widgets/table/FileTable$5 +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionRunner +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$26 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Element +instanceKlass com/jidesoft/grid/SortableTableModel$a_ +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$8 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$4 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$3 +instanceKlass com/mathworks/util/RequestQueue$3 +instanceKlass com/mathworks/util/RequestQueue$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/FileDecorationCache +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileListExpansionContext +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider$State +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$2 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext$1 +instanceKlass com/mathworks/widgets/grouptable/CombinedExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$3 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$1 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener$2 +instanceKlass com/mathworks/widgets/tooltip/ToolTipAndComponentAWTListener +instanceKlass com/mathworks/widgets/grouptable/ToolTipSupport +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$37 +instanceKlass java/awt/font/LineMetrics +instanceKlass sun/font/CoreMetrics +instanceKlass sun/font/StandardGlyphVector$GlyphStrike +instanceKlass java/awt/font/GlyphVector +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$TableAppearanceFocusListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$20 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$25 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$24 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$22 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$8 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$14 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$13 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$12 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$11 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$10 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$7 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$9 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$30 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$29 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$28 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$27 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$19 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$18 +instanceKlass java/awt/Cursor$CursorDisposer +instanceKlass java/awt/image/PixelGrabber +instanceKlass java/awt/image/FilteredImageSource +instanceKlass java/awt/image/ImageFilter +instanceKlass java/awt/Cursor$2 +instanceKlass java/awt/Cursor$3 +instanceKlass java/awt/dnd/DragSource +instanceKlass java/awt/dnd/DragSourceAdapter +instanceKlass java/awt/dnd/DragSourceMotionListener +instanceKlass java/awt/dnd/DragSourceListener +instanceKlass java/awt/dnd/DragGestureListener +instanceKlass com/mathworks/widgets/grouptable/transfer/TransferController +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$2 +instanceKlass com/mathworks/util/RequestAggregator$2 +instanceKlass com/mathworks/util/RequestFilter$Request +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$3 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$5 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$4 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$2 +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager$1 +instanceKlass com/mathworks/widgets/grouptable/ColumnActions$4 +instanceKlass com/mathworks/mwswing/MJCheckBoxMenuItem$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsCheckBoxMenuItemUI$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$1 +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$ToggleSelectionPolicy +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler$SelectionPolicy +instanceKlass java/util/concurrent/Semaphore +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$DefaultEditHandler +instanceKlass com/jidesoft/grid/TreeTable$0 +instanceKlass com/jidesoft/grid/SortableTable$0 +instanceKlass com/jidesoft/grid/SortItemSupport +instanceKlass com/jidesoft/grid/g +instanceKlass com/jidesoft/grid/TableModelsWrapper +instanceKlass com/jidesoft/grid/SortItemSupport$SortOrderHandler +instanceKlass com/jidesoft/grid/CellStyleTable$0 +instanceKlass com/jidesoft/grid/JideTable$14 +instanceKlass java/awt/datatransfer/Transferable +instanceKlass javax/swing/TransferHandler$DropLocation +instanceKlass com/jidesoft/grid/JideTable$11 +instanceKlass com/jidesoft/grid/RendererWrapper +instanceKlass com/jidesoft/swing/DelegateMouseInputListener +instanceKlass javax/swing/plaf/basic/BasicTableUI$Handler +instanceKlass com/jidesoft/grid/NavigableModel +instanceKlass com/jidesoft/grid/StyleModel +instanceKlass com/jidesoft/grid/IndexedRowTableModelWrapper +instanceKlass com/jidesoft/grid/IFilterableTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableModel +instanceKlass com/jidesoft/grid/AutoFilterTableHeaderAdapter +instanceKlass com/jidesoft/plaf/basic/BasicJideTableUIDelegate +instanceKlass com/jidesoft/plaf/TableUIDelegate +instanceKlass com/jidesoft/grid/EditorStyleTableModel +instanceKlass com/jidesoft/grid/GroupModelProvider +instanceKlass com/jidesoft/grid/ColumnTableModelWrapper +instanceKlass com/jidesoft/grid/RowTableModelWrapper +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator$a_ +instanceKlass com/jidesoft/grid/SortableTableHeaderCellDecorator +instanceKlass com/jidesoft/grid/CellStyleTableHeader$0 +instanceKlass com/jidesoft/utils/SortedList +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler +instanceKlass javax/swing/plaf/basic/BasicTableHeaderUI$1 +instanceKlass com/jidesoft/plaf/DelegateTableHeaderUI +instanceKlass sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon +instanceKlass com/jidesoft/grid/TableHeaderCellDecorator +instanceKlass javax/swing/JTable$$Lambda$19 +instanceKlass javax/swing/JTable$$Lambda$18 +instanceKlass javax/swing/JTable$$Lambda$17 +instanceKlass javax/swing/JTable$$Lambda$16 +instanceKlass javax/swing/JTable$$Lambda$15 +instanceKlass javax/swing/JTable$$Lambda$14 +instanceKlass javax/swing/JTable$$Lambda$13 +instanceKlass javax/swing/JTable$$Lambda$12 +instanceKlass javax/swing/JTable$$Lambda$11 +instanceKlass javax/swing/JTable$$Lambda$10 +instanceKlass javax/swing/JTable$$Lambda$9 +instanceKlass com/jidesoft/grid/JideTable$8 +instanceKlass com/jidesoft/grid/JideTable$7 +instanceKlass com/jidesoft/plaf/TableHeaderUIDelegate +instanceKlass com/jidesoft/grid/TableUtils +instanceKlass com/jidesoft/grid/TableModelWrapper +instanceKlass com/jidesoft/grid/TableModelWrapperUtils +instanceKlass com/jidesoft/grid/ColumnWidthTableModel +instanceKlass com/jidesoft/grid/ColumnIdentifierTableModel +instanceKlass com/jidesoft/swing/AlignmentSupport +instanceKlass com/jidesoft/swing/ComponentStateSupport +instanceKlass com/jidesoft/swing/ButtonStyle +instanceKlass com/jidesoft/grid/h +instanceKlass javax/swing/table/DefaultTableColumnModel +instanceKlass javax/swing/table/TableColumnModel +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/TableActionInput +instanceKlass com/mathworks/mlwidgets/explorer/model/table/UiFileList +instanceKlass com/mathworks/widgets/grouptable/SelectOnTypeHandler +instanceKlass com/mathworks/matlab/api/explorer/Status +instanceKlass com/mathworks/widgets/grouptable/ColumnActions +instanceKlass com/mathworks/widgets/ClosableToolTipData +instanceKlass com/mathworks/widgets/grouptable/AffordanceManager +instanceKlass com/mathworks/widgets/grouptable/GroupingTableLayout +instanceKlass com/mathworks/widgets/grouptable/EditOnClickHandler +instanceKlass com/mathworks/widgets/grouptable/DragToSelectHandler +instanceKlass com/jidesoft/grid/CellStyleCustomizer +instanceKlass com/jidesoft/grid/TableStyleProvider +instanceKlass com/jidesoft/grid/CellStyleProvider +instanceKlass com/jidesoft/grid/CellStyle +instanceKlass com/jidesoft/swing/Prioritized +instanceKlass javax/swing/table/TableColumn +instanceKlass com/jidesoft/grid/JideCellEditorListener +instanceKlass com/jidesoft/validation/Validator +instanceKlass com/jidesoft/grid/GridColorProvider +instanceKlass com/jidesoft/grid/SortTableHeaderRenderer +instanceKlass com/jidesoft/validation/RowValidator +instanceKlass javax/swing/undo/UndoableEditSupport +instanceKlass com/jidesoft/grid/JideTable$q_ +instanceKlass com/jidesoft/grid/RowHeights +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$10 +instanceKlass com/mathworks/widgets/BusyAffordance$3 +instanceKlass com/mathworks/widgets/WorkMonitor$4 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableUtils +instanceKlass com/mathworks/widgets/WorkMonitor$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$7 +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget +instanceKlass com/mathworks/widgets/WorkMonitor$3 +instanceKlass com/mathworks/widgets/WorkMonitor$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableResources +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$6 +instanceKlass com/mathworks/widgets/grouptable/FlatExpansionContext +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$ConfigurationListener +instanceKlass com/mathworks/util/TypeFilter +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor$TransactionCombiner +instanceKlass com/mathworks/widgets/grouptable/TransactionProcessor +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePopulator +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$RootContextChangeListener +instanceKlass java/lang/Math$RandomNumberGeneratorHolder +instanceKlass com/jidesoft/grid/DefaultExpandable$0 +instanceKlass com/jidesoft/grid/ExpandableCell +instanceKlass com/jidesoft/grid/c +instanceKlass com/jidesoft/grid/Cacheable +instanceKlass com/jidesoft/grid/AbstractNode +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$GroupingTableDefaultIntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$IntegerSettingRetriever +instanceKlass com/mathworks/widgets/grouptable/GroupingTableTransaction$Target +instanceKlass com/mathworks/widgets/grouptable/RowListTransactionTarget$Adapter +instanceKlass com/mathworks/widgets/grouptable/ExpansionChangeListener +instanceKlass javax/swing/tree/TreePath +instanceKlass com/jidesoft/grid/ExpandableRow +instanceKlass com/jidesoft/grid/Expandable +instanceKlass javax/swing/table/AbstractTableModel +instanceKlass com/jidesoft/grid/IndexChangeEventGenerator +instanceKlass com/jidesoft/grid/ITreeTableModel +instanceKlass com/jidesoft/grid/MultiTableModel +instanceKlass com/jidesoft/grid/ContextSensitiveTableModel +instanceKlass com/jidesoft/grid/SpanTableModel +instanceKlass com/jidesoft/grid/SpanModel +instanceKlass com/jidesoft/utils/CacheMap +instanceKlass com/mathworks/matlab/api/explorer/ActionInput +instanceKlass javax/swing/event/TreeWillExpandListener +instanceKlass com/mathworks/widgets/grouptable/NonRectangularCellRenderer +instanceKlass javax/swing/event/TreeExpansionListener +instanceKlass com/mathworks/widgets/grouptable/GroupingTable$MessageFactory +instanceKlass com/mathworks/widgets/grouptable/GroupingTableModel$EditHandler +instanceKlass com/jidesoft/grid/Row +instanceKlass com/jidesoft/grid/Node +instanceKlass com/jidesoft/grid/ISortableTableModel +instanceKlass com/jidesoft/converter/AbstractContext +instanceKlass javax/swing/AbstractCellEditor +instanceKlass com/jidesoft/grid/JideCellEditor +instanceKlass com/jidesoft/grid/EditorStyleSupport +instanceKlass com/jidesoft/grid/EditorContextSupport +instanceKlass com/jidesoft/converter/ConverterContextSupport +instanceKlass com/mathworks/mde/explorer/Explorer$5 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$6 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils$7 +instanceKlass com/mathworks/mlwidgets/explorer/util/UiFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance$1 +instanceKlass com/mathworks/util/ReturnRunnable +instanceKlass com/mathworks/mlwidgets/explorer/model/table/LocationAffordance +instanceKlass com/mathworks/mde/explorer/DirectoryVsFileSeparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$1 +instanceKlass com/mathworks/widgets/grouptable/Group +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$5 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$4 +instanceKlass com/jidesoft/grid/TableSelectionListener +instanceKlass com/jidesoft/grid/TableSelectionModel +instanceKlass com/jidesoft/grid/RowHeightChangeListener +instanceKlass com/jidesoft/grid/TableColumnWidthKeeper +instanceKlass com/jidesoft/grid/FilterableTableModelListener +instanceKlass com/jidesoft/swing/AutoCompletion +instanceKlass com/jidesoft/validation/ValidationResult +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn$2 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$3 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnSize +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration$ColumnConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DescriptionAttribute +instanceKlass com/mathworks/widgets/grouptable/VerticalAttribute +instanceKlass com/jidesoft/grid/CellSpan +instanceKlass com/mathworks/widgets/grouptable/GroupingTablePair +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer$Debouncer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerTableConfigurationSerializer +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/DateColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSizeGenerator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/SizeColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/StatusGroupingMode +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$2 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$1 +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn$IconConverter +instanceKlass com/mathworks/sourcecontrol/resources/CFBSCResources +instanceKlass com/mathworks/sourcecontrol/SCStatusColumn +instanceKlass com/mathworks/sourcecontrol/SourceControlUI +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$3 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableEditor +instanceKlass com/mathworks/mlwidgets/explorer/model/table/NameColumn +instanceKlass com/mathworks/mlwidgets/explorer/model/table/TypeGroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileTypeComparator +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn$1 +instanceKlass com/mathworks/widgets/grouptable/GroupingTableColumn +instanceKlass com/mathworks/widgets/grouptable/GroupingMode +instanceKlass com/mathworks/mlwidgets/explorer/model/table/IconColumn +instanceKlass com/mathworks/widgets/grouptable/ExpansionContext +instanceKlass com/mathworks/mde/explorer/Explorer$14 +instanceKlass com/mathworks/mde/explorer/Explorer$13 +instanceKlass com/mathworks/mde/explorer/Explorer$12 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/GlobalShutdownEventListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/EmptyPoller +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$9 +instanceKlass javax/swing/event/UndoableEditListener +instanceKlass javax/swing/text/DefaultCaret$1 +instanceKlass javax/swing/text/AbstractDocument$UndoRedoDocumentEvent +instanceKlass javax/swing/event/DocumentEvent$ElementChange +instanceKlass javax/swing/text/SegmentCache +instanceKlass javax/swing/text/Utilities +instanceKlass javax/swing/event/DocumentEvent$EventType +instanceKlass javax/swing/undo/AbstractUndoableEdit +instanceKlass javax/swing/undo/UndoableEdit +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$3 +instanceKlass com/mathworks/mwswing/DefaultListCellViewerCustomizer +instanceKlass java/awt/dnd/DragGestureRecognizer +instanceKlass com/mathworks/mwswing/MJList$ListAppearanceFocusListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints$FileSystemHints$1 +instanceKlass javax/swing/JComponent$ActionStandin +instanceKlass com/jidesoft/hints/AbstractIntelliHints$2 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$4 +instanceKlass com/sun/java/swing/plaf/windows/WindowsGraphicsUtils +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager +instanceKlass javax/swing/JComboBox$KeySelectionManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager +instanceKlass javax/swing/plaf/basic/BasicComboBoxUI$Handler +instanceKlass javax/swing/plaf/basic/BasicComboBoxEditor +instanceKlass javax/swing/ComboBoxEditor +instanceKlass javax/swing/plaf/basic/BasicScrollPaneUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$Handler +instanceKlass javax/swing/plaf/basic/BasicScrollBarUI$ModelListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsScrollBarUI$Grid +instanceKlass javax/swing/JScrollBar$ModelListener +instanceKlass java/awt/Adjustable +instanceKlass javax/swing/ViewportLayout +instanceKlass javax/swing/ScrollPaneLayout +instanceKlass javax/swing/plaf/basic/BasicComboPopup$Handler +instanceKlass javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass +instanceKlass javax/swing/plaf/basic/ComboPopup +instanceKlass com/sun/java/swing/plaf/windows/WindowsComboBoxUI$2 +instanceKlass javax/swing/JComboBox$1 +instanceKlass javax/swing/MutableComboBoxModel +instanceKlass javax/swing/ComboBoxModel +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupPropertyChangeListener +instanceKlass com/jidesoft/plaf/basic/BasicJidePopupUI$PopupLayout +instanceKlass com/jidesoft/swing/DraggableHandle +instanceKlass com/jidesoft/swing/Alignable +instanceKlass com/jidesoft/swing/ResizableSupport +instanceKlass com/jidesoft/popup/JidePopupFactory +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8$1 +instanceKlass com/jidesoft/hints/AbstractIntelliHints$8 +instanceKlass com/jidesoft/swing/JideScrollPaneConstants +instanceKlass com/jidesoft/hints/AbstractIntelliHints +instanceKlass com/jidesoft/hints/IntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/DocumentIntelliHints +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent$6 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/LocationTypingModeComponent +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$7 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarTextFieldUtils +instanceKlass com/mathworks/util/RequestFilter$1 +instanceKlass com/mathworks/util/RequestAggregator +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent$1 +instanceKlass com/mathworks/util/Combiner +instanceKlass com/mathworks/util/RequestFilter +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchModeComponent +instanceKlass org/apache/commons/lang/StringUtils +instanceKlass com/mathworks/help/helpui/DocUrlParser +instanceKlass com/mathworks/helpsearch/SearchConfig +instanceKlass com/mathworks/html/Url +instanceKlass com/mathworks/helpsearch/product/DocumentationSet +instanceKlass com/mathworks/util/ParameterRunnable +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/PaintingUtils +instanceKlass java/awt/geom/Line2D +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarIcon +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButton +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/StatToEntryAdapter +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList$1 +instanceKlass com/mathworks/util/AsyncReceiverUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList$1 +instanceKlass com/mathworks/util/Holder +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent$State +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/IconLabel +instanceKlass com/mathworks/mde/editor/debug/MatlabDebuggerActionsProvider +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$8 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel$StateChangeListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugStackPruner +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackInfo +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarButtonPanel +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptor +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugEventTranslator +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/BreadcrumbModeComponent +instanceKlass com/mathworks/fileutils/MatlabPath$PathEntry +instanceKlass com/mathworks/jmi/Matlab$6 +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt$1 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$4 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton$3 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar$2 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/SearchButton +instanceKlass com/mathworks/util/MulticastChangeListener +instanceKlass com/mathworks/mde/explorer/Explorer$11 +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBarModeComponent +instanceKlass com/mathworks/jmi/MatlabPath$PathEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$3 +instanceKlass com/mathworks/addons_common/util/settings/AddOnsSettingsUtils +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation$LazyHolder +instanceKlass com/mathworks/addons_common/util/settings/InstallLocation +instanceKlass com/mathworks/addons_common/util/settings/InstallationFolderUtils +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryFacadeImpl +instanceKlass com/mathworks/mde/editor/debug/DebuggerInstaller +instanceKlass java/util/concurrent/CopyOnWriteArrayList$COWIterator +instanceKlass com/mathworks/addons/AddOnsAddressBarAPIPlugin +instanceKlass com/mathworks/filesystem_adapter/services/MATLABOnlineAddressBarPlugin +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAddressBarPlugin +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager$AddressBarPluginManagerHolder +instanceKlass com/mathworks/fileutils/MatlabPath$3 +instanceKlass com/mathworks/addressbar_api/AddressBarPluginManager +instanceKlass com/mathworks/fileutils/MatlabPath$2 +instanceKlass com/mathworks/mlwidgets/explorer/util/MacEncodingBugWorkaround +instanceKlass com/mathworks/fileutils/MatlabPath$CwdChangeWhenAtPrompt +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$HistoryItem +instanceKlass com/mathworks/fileutils/MatlabPath$1 +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory$4 +instanceKlass com/mathworks/util/MRUList +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationHistory +instanceKlass com/mathworks/fileutils/MatlabPath +instanceKlass com/mathworks/mde/explorer/Explorer$8 +instanceKlass com/mathworks/widgets/WorkMonitor$Task +instanceKlass com/mathworks/mde/explorer/Explorer$18 +instanceKlass com/mathworks/sourcecontrol/SourceControlManagerPluginImpl +instanceKlass com/mathworks/mlwidgets/explorer/SourceControlManager +instanceKlass com/mathworks/mlwidgets/explorer/model/AbstractFileList +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntry +instanceKlass com/mathworks/matlab/api/explorer/FileSystemEntryFactory +instanceKlass com/mathworks/cfbutils/StatEntry +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileList +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualTarget +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext$State +instanceKlass java/util/concurrent/RunnableScheduledFuture +instanceKlass java/util/concurrent/ScheduledFuture +instanceKlass java/util/concurrent/ScheduledExecutorService +instanceKlass java/awt/DisplayMode +instanceKlass com/mathworks/util/NamedDaemonThreadFactory +instanceKlass com/mathworks/util/ExecutorServiceFactory +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon$4 +instanceKlass com/mathworks/hg/util/JavaSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/AbstractSystemScreenInfoProvider +instanceKlass com/mathworks/hg/util/DisplayChangeManager +instanceKlass com/mathworks/mlwidgets/explorer/model/table/RefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/table/ExplorerRefreshDaemon +instanceKlass com/mathworks/mlwidgets/explorer/model/PathModel +instanceKlass com/mathworks/mlwidgets/explorer/util/MLFileSystemUtils +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap$Node +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/LocationMap +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$2 +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem$1 +instanceKlass com/mathworks/matlab/api/editor/Editor +instanceKlass com/mathworks/widgets/datamodel/AbstractBackingStore +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication$12 +instanceKlass com/mathworks/cfbutils/FileSystemAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/DebugAdapter +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$5 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$3 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$2 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$4 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$1 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestRegistrant$MessageHandler +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier +instanceKlass ca/odell/glazedlists/impl/WeakReferenceProxy +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$SubjectAndListener +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/SimpleTree +instanceKlass ca/odell/glazedlists/impl/sort/ComparableComparator +instanceKlass ca/odell/glazedlists/gui/TableFormat +instanceKlass ca/odell/glazedlists/Filterator +instanceKlass ca/odell/glazedlists/FunctionList$Function +instanceKlass ca/odell/glazedlists/CollectionList$Model +instanceKlass ca/odell/glazedlists/ObservableElementList$Connector +instanceKlass ca/odell/glazedlists/matchers/MatcherEditor +instanceKlass ca/odell/glazedlists/TextFilterator +instanceKlass ca/odell/glazedlists/ThresholdList$Evaluator +instanceKlass ca/odell/glazedlists/GlazedLists +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/Element +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/FourColorTree +instanceKlass ca/odell/glazedlists/impl/adt/barcode2/ListToByteCoder +instanceKlass ca/odell/glazedlists/impl/event/Tree4Deltas +instanceKlass ca/odell/glazedlists/impl/adt/gnutrove/TIntArrayList +instanceKlass ca/odell/glazedlists/impl/event/BlockSequence +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter$ListEventFormat +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher$EventFormat +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$ListSequencePublisherAdapter +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$PublisherAdapter +instanceKlass ca/odell/glazedlists/event/SequenceDependenciesEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventPublisher +instanceKlass ca/odell/glazedlists/event/ListEventAssembler$AssemblerHelper +instanceKlass com/mathworks/hg/util/NativeHG +instanceKlass ca/odell/glazedlists/event/ListEventAssembler +instanceKlass com/mathworks/hg/GraphicsOpenGL +instanceKlass ca/odell/glazedlists/impl/java15/LockAdapter +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50ReadWriteLock +instanceKlass ca/odell/glazedlists/util/concurrent/Lock +instanceKlass ca/odell/glazedlists/util/concurrent/ReadWriteLock +instanceKlass ca/odell/glazedlists/impl/java15/J2SE50LockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/DelegateLockFactory +instanceKlass ca/odell/glazedlists/util/concurrent/LockFactory +instanceKlass ca/odell/glazedlists/SortedList$ElementRawOrderComparator +instanceKlass ca/odell/glazedlists/SortedList$ElementComparator +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger$6 +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugInterestNotifier$RegistrationListener +instanceKlass ca/odell/glazedlists/AbstractEventList +instanceKlass ca/odell/glazedlists/event/ListEventListener +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabDebugger +instanceKlass com/mathworks/matlab/api/debug/Debugger +instanceKlass ca/odell/glazedlists/EventList +instanceKlass ca/odell/glazedlists/matchers/Matcher +instanceKlass com/mathworks/mde/editor/breakpoints/MatlabBreakpointUtils +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$SaveInterceptor +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$DefaultFileNameProvider +instanceKlass com/mathworks/widgets/datamodel/TextFileBackingStore$EncodingProvider +instanceKlass com/mathworks/matlab/api/datamodel/BackingStore +instanceKlass com/mathworks/matlab/api/dataview/UiInfoProvider +instanceKlass com/mathworks/matlab/api/datamodel/PropertyChangeProvider +instanceKlass com/mathworks/widgets/datamodel/AbstractFileBackingStore$FileChooserSetupDelegate +instanceKlass com/mathworks/matlab/api/debug/DebugListener +instanceKlass com/mathworks/mde/autosave/AutoSaveImplementor +instanceKlass com/mathworks/jmi/AWTUtilities$InvocationRunnable +instanceKlass com/mathworks/mde/editor/MatlabEditorApplication +instanceKlass com/mathworks/matlab/api/editor/EditorApplication +instanceKlass com/mathworks/mlwidgets/explorer/model/editorfs/EditorFileSystem +instanceKlass com/mathworks/util/ThrowableClosure +instanceKlass com/mathworks/mlwidgets/explorer/model/realfs/RealFileSystem +instanceKlass com/mathworks/mlwidgets/explorer/model/overlayfs/OverlayFileSystem +instanceKlass com/mathworks/matlab/api/explorer/FileSystemTransaction +instanceKlass com/mathworks/matlab/api/explorer/FileList +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileMounter +instanceKlass com/mathworks/mde/liveeditor/OpenAsLiveCodeActionProvider +instanceKlass com/mathworks/jmi/ComponentBridge +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/SupportPackageData +instanceKlass com/mathworks/cfbutils/NativeCfb +instanceKlass com/mathworks/help/helpui/DocRoot +instanceKlass com/mathworks/helpsearch/DocPathBuilder +instanceKlass com/mathworks/helpsearch/product/ProductFilter +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocConfigExceptionHandler +instanceKlass com/mathworks/help/helpui/DocConfigBase +instanceKlass com/mathworks/fileutils/MLFileIconUtils +instanceKlass com/mathworks/mlwidgets/help/DocCenterDocConfig$DocSetAdapter +instanceKlass com/mathworks/help/helpui/AbstractDocConfig +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/DefaultFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/JSZipFileIconInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/EditorFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/BasicTableActionProvider +instanceKlass com/mathworks/mde/explorer/ShowDetailsProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreExternalActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreWriteActionProvider +instanceKlass com/mathworks/jmi/mdt/MatlabCallable +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/CoreReadActionProvider +instanceKlass com/mathworks/mde/explorer/NavigationActionProvider +instanceKlass com/mathworks/matlab/api/explorer/StateChangeNotifier +instanceKlass com/mathworks/mde/explorer/PathActionProvider +instanceKlass com/mathworks/util/AsyncReceiver +instanceKlass com/mathworks/mlwidgets/explorer/util/TransactionLogic +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileInfoProvider +instanceKlass com/mathworks/util/RequestQueue +instanceKlass com/mathworks/mlwidgets/explorer/extensions/archive/ZipFileContentInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MatlabDesktopReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategy +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportStrategyFactory +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/ReportActionProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/TextFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFolderInfoProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivityImpl +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireAction +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireConnectivity +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculatorImpl +instanceKlass java/util/concurrent/Executors$DefaultThreadFactory +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireActionCalculator +instanceKlass com/mathworks/storage/matlabdrivedesktop/TripwireHandler +instanceKlass com/mathworks/storage/matlabdrivedesktop/ActionFinishListener +instanceKlass com/mathworks/storage/mldrivetripwireaccess/NativeMLDriveTripwireAccess +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/registry/PackageInfoLoader +instanceKlass com/mathworks/storage/mldrivetripwireaccess/MLDriveTripwireAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveActionProvider +instanceKlass com/mathworks/storage/matlabdrivedesktop/SettingsFeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/NativeMatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveAccess +instanceKlass com/mathworks/storage/matlabdrivedesktop/FeatureSwitch +instanceKlass com/mathworks/storage/matlabdrivedesktop/MatlabDriveFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/MacPackageInfoProvider +instanceKlass com/mathworks/instutil/Platform +instanceKlass com/mathworks/explorer/RunnableFileInfoProvider +instanceKlass com/mathworks/instutil/FilePermissionsUtil +instanceKlass com/mathworks/instutil/FilePermissions +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/FIGFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/GUIDEFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MEXFileInfoProvider +instanceKlass com/mathworks/jmi/AutoConvertStringToMatlabChar +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/PFileInfoProvider +instanceKlass com/mathworks/explorer/MATFileInfoProvider +instanceKlass com/mathworks/explorer/MatlabCodeFileActionProvider +instanceKlass com/mathworks/mde/liveeditor/MlxFileInfoProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/MFileInfoProvider +instanceKlass com/mathworks/util/DeferrableRetriever +instanceKlass com/mathworks/mlwidgets/explorer/extensions/basic/ImageFileInfoProvider +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider$CMFileProvider +instanceKlass com/mathworks/sourcecontrol/SccFileProvider +instanceKlass com/mathworks/cmlink/api/customization/CMWidget +instanceKlass com/mathworks/cmlink/api/customization/CustomizationWidgetFactory +instanceKlass com/mathworks/sourcecontrol/SCAdapterActionProvider +instanceKlass com/mathworks/sourcecontrol/SccFileListener +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/common/SignpostFileInfoProvider +instanceKlass com/mathworks/appmanagement/AppFileInfoProvider +instanceKlass com/mathworks/toolbox/shared/mldatx/MLDATXFileInfoProvider +instanceKlass com/mathworks/toolboxmanagement/ToolboxFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappMatlabOnlineFileInfoProvider +instanceKlass com/mathworks/toolbox/matlab/appdesigner/MlappFileInfoProvider +instanceKlass com/mathworks/mde/difftool/DiffToolUtils +instanceKlass com/mathworks/comparisons/util/AbstractNamedData +instanceKlass com/mathworks/comparisons/source/ComparisonSource +instanceKlass com/mathworks/comparisons/util/GetPropertyValue +instanceKlass com/mathworks/comparisons/source/ComparisonSourceType +instanceKlass com/mathworks/mde/difftool/ComparisonControl +instanceKlass com/mathworks/mde/difftool/DiffReportImplementor +instanceKlass com/mathworks/mde/difftool/DiffToolControl +instanceKlass com/mathworks/mde/difftool/DiffActionProvider$DocumentDiffToolInfo +instanceKlass com/mathworks/mde/difftool/SelectedFilesDiffToolInfo +instanceKlass com/mathworks/mde/difftool/DiffActionProvider +instanceKlass com/mathworks/explorer/KeyBindingProvider +instanceKlass com/mathworks/mlservices/MLLicenseChecker +instanceKlass com/mathworks/matlab/api/explorer/ActionComponentProvider +instanceKlass com/mathworks/mlwidgets/explorer/extensions/matlab/PathAffordanceActionProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/RunBatchJobActionProvider +instanceKlass com/mathworks/project/impl/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/slproject/resources/SlProjectResources +instanceKlass org/xml/sax/helpers/DefaultHandler +instanceKlass org/xml/sax/DTDHandler +instanceKlass com/mathworks/toolbox/slproject/project/ProjectFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkCacheFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkProtectedModelFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkPackageFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkBackupFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/AutosaveFileInfoProvider +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkTemplateFileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/FileDecoration +instanceKlass com/mathworks/util/Converter +instanceKlass com/mathworks/toolbox/simulink/desktopintegration/SimulinkFileInfoProvider +instanceKlass com/mathworks/toolbox/coder/plugin/CoderResources +instanceKlass com/mathworks/matlab/api/explorer/MenuSection +instanceKlass com/mathworks/matlab/api/explorer/ActionDefinition +instanceKlass com/mathworks/matlab/api/explorer/StatusRunnable +instanceKlass com/mathworks/toolbox/coder/screener/ScreenerActionProvider +instanceKlass com/mathworks/matlab/api/explorer/ActionProvider +instanceKlass com/mathworks/matlab/api/explorer/FileInfoProvider +instanceKlass com/mathworks/matlab/api/explorer/AutoMounter +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerExtensionRegistry +instanceKlass com/mathworks/widgets/WorkMonitor +instanceKlass com/mathworks/mlwidgets/explorer/DetailViewer +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPanePrefs +instanceKlass com/mathworks/mlwidgets/explorer/model/vfs/VirtualFileSystem +instanceKlass com/mathworks/matlab/api/explorer/ExtensionRegistry +instanceKlass com/mathworks/matlab/api/explorer/SearchCriteria +instanceKlass com/mathworks/mlwidgets/explorer/model/actions/ActionManager +instanceKlass com/mathworks/mlwidgets/explorer/model/table/FileSystemExpansionProvider +instanceKlass com/mathworks/mlwidgets/explorer/ExplorerSplitPane +instanceKlass com/mathworks/widgets/grouptable/GroupingTableConfiguration +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationContext +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/AddressBar +instanceKlass com/mathworks/matlab/api/explorer/FileLocation +instanceKlass com/mathworks/mde/explorer/ExplorerToolbar +instanceKlass com/mathworks/widgets/desk/DTToolBarInfo +instanceKlass com/mathworks/widgets/desk/DTTitleChangeHandler +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerPrefs$1 +instanceKlass com/mathworks/widgets/desk/Desktop$ClientListenerData +instanceKlass com/mathworks/mde/help/MLHelpBrowserGroup$DDuxResizedActionListener +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory$1 +instanceKlass com/mathworks/html/NewBrowserListener +instanceKlass com/mathworks/html/HtmlPanelSupportFactory +instanceKlass com/mathworks/html/HtmlContextMenuBuilder +instanceKlass com/mathworks/html/RequestHandler +instanceKlass com/mathworks/html/HtmlPanel +instanceKlass com/mathworks/mlwidgets/html/BrowserTypeConfig +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableEntry +instanceKlass java/util/Collections$UnmodifiableMap$UnmodifiableEntrySet$1 +instanceKlass com/jniwrapper/r +instanceKlass com/jniwrapper/af +instanceKlass com/jniwrapper/PlatformContext +instanceKlass java/security/cert/CertPathValidatorException$Reason +instanceKlass com/teamdev/jxbrowser/BrowserType +instanceKlass sun/security/util/ManifestEntryVerifier$SunProviderHolder +instanceKlass sun/nio/cs/Surrogate +instanceKlass sun/nio/cs/Surrogate$Parser +instanceKlass java/util/Base64$Encoder +instanceKlass java/util/Base64$Decoder +instanceKlass java/util/Base64 +instanceKlass java/security/cert/CertPath +instanceKlass sun/security/rsa/RSAPadding +instanceKlass sun/security/rsa/RSACore +instanceKlass java/security/interfaces/RSAPrivateCrtKey +instanceKlass sun/security/pkcs/PKCS8Key +instanceKlass java/security/interfaces/RSAPrivateKey +instanceKlass java/security/PrivateKey +instanceKlass sun/security/jca/ServiceId +instanceKlass java/security/SignatureSpi +instanceKlass javax/crypto/SecretKey +instanceKlass javax/security/auth/Destroyable +instanceKlass sun/security/util/Length +instanceKlass sun/security/util/KeyUtil +instanceKlass sun/text/normalizer/NormalizerBase$1 +instanceKlass sun/text/normalizer/NormalizerBase$QuickCheckResult +instanceKlass sun/text/normalizer/NormalizerBase$Mode +instanceKlass sun/text/normalizer/NormalizerBase +instanceKlass java/text/Normalizer +instanceKlass sun/security/pkcs/PKCS9Attribute +instanceKlass sun/security/x509/AVAKeyword +instanceKlass sun/security/util/ConstraintsParameters +instanceKlass sun/security/pkcs/SignerInfo +instanceKlass sun/security/x509/NetscapeCertTypeExtension$MapEntry +instanceKlass sun/security/x509/AccessDescription +instanceKlass java/security/cert/PolicyQualifierInfo +instanceKlass sun/security/x509/CertificatePolicyId +instanceKlass sun/security/x509/PolicyInformation +instanceKlass sun/security/x509/DNSName +instanceKlass sun/security/x509/URIName +instanceKlass sun/security/x509/GeneralName +instanceKlass sun/security/x509/GeneralNames +instanceKlass sun/security/x509/DistributionPoint +instanceKlass sun/security/util/MemoryCache$CacheEntry +instanceKlass sun/security/x509/X509AttributeName +instanceKlass sun/security/x509/KeyIdentifier +instanceKlass sun/security/x509/OIDMap$OIDInfo +instanceKlass sun/security/x509/PKIXExtensions +instanceKlass sun/security/x509/OIDMap +instanceKlass sun/security/x509/Extension +instanceKlass java/security/cert/Extension +instanceKlass sun/security/x509/CertificateExtensions +instanceKlass java/security/interfaces/RSAPublicKey +instanceKlass java/security/interfaces/RSAKey +instanceKlass java/security/spec/RSAPrivateKeySpec +instanceKlass java/security/spec/RSAPublicKeySpec +instanceKlass java/security/KeyFactorySpi +instanceKlass sun/security/rsa/SunRsaSignEntries +instanceKlass sun/security/jca/ProviderList$ServiceList$1 +instanceKlass java/security/KeyFactory +instanceKlass java/security/spec/EncodedKeySpec +instanceKlass java/security/spec/KeySpec +instanceKlass sun/security/util/BitArray +instanceKlass sun/security/x509/X509Key +instanceKlass java/security/PublicKey +instanceKlass java/security/Key +instanceKlass sun/security/x509/CertificateX509Key +instanceKlass sun/security/x509/CertificateValidity +instanceKlass sun/security/x509/AVA +instanceKlass sun/security/x509/RDN +instanceKlass javax/security/auth/x500/X500Principal +instanceKlass sun/security/x509/X500Name$1 +instanceKlass sun/security/x509/X500Name +instanceKlass sun/security/x509/GeneralNameInterface +instanceKlass sun/security/x509/CertificateAlgorithmId +instanceKlass sun/security/x509/SerialNumber +instanceKlass sun/security/x509/CertificateSerialNumber +instanceKlass sun/security/x509/CertificateVersion +instanceKlass sun/security/x509/X509CertInfo +instanceKlass sun/security/x509/CertAttrSet +instanceKlass sun/security/util/Cache$EqualByteArray +instanceKlass java/security/cert/X509Extension +instanceKlass sun/security/util/Cache +instanceKlass java/security/cert/CertificateFactorySpi +instanceKlass java/security/cert/CertificateFactory +instanceKlass sun/security/x509/AlgorithmId +instanceKlass sun/security/util/ByteArrayTagOrder +instanceKlass sun/security/util/ByteArrayLexOrder +instanceKlass sun/security/util/DerEncoder +instanceKlass sun/security/util/DerValue +instanceKlass sun/security/util/ObjectIdentifier +instanceKlass sun/security/pkcs/ContentInfo +instanceKlass sun/security/util/DerIndefLenConverter +instanceKlass sun/security/util/DerInputStream +instanceKlass sun/security/pkcs/PKCS7 +instanceKlass sun/security/util/ManifestDigester$Entry +instanceKlass sun/security/util/ManifestDigester$Position +instanceKlass sun/security/util/ManifestDigester +instanceKlass com/mathworks/html/jxbrowser/BrowserHolder +instanceKlass com/mathworks/html/HtmlComponentIdentifier +instanceKlass com/mathworks/html/BrowserSettings +instanceKlass com/mathworks/html/HtmlComponent +instanceKlass com/mathworks/html/HtmlCallbackProvider +instanceKlass com/mathworks/html/HtmlActions +instanceKlass com/mathworks/mlwidgets/html/HtmlComponentFactory +instanceKlass com/mathworks/help/helpui/HelpBrowserResourceBundle +instanceKlass com/mathworks/help/helpui/HelpBrowserUtils +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DefaultDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs$DependencyProvider +instanceKlass com/mathworks/mlwidgets/help/messages/DocConnectorPrefs +instanceKlass com/mathworks/mlwidgets/help/messages/HelpPanelCurrentLocationHandler$PageInfoObserver +instanceKlass java/awt/dnd/DropTargetAdapter +instanceKlass com/mathworks/comparisons/util/ResourceManager +instanceKlass com/mathworks/mde/webbrowser/WebBrowserUtils +instanceKlass com/mathworks/matlab/api/editor/EditorApplicationListener +instanceKlass com/mathworks/mde/editor/EditorGroup$4 +instanceKlass com/mathworks/mde/editor/EditorGroup$3 +instanceKlass com/mathworks/mde/editor/EditorGroup$2 +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarBuilder +instanceKlass com/mathworks/widgets/text/STPInterface +instanceKlass com/mathworks/widgets/text/STPBaseInterface +instanceKlass com/mathworks/widgets/text/STPViewInterface +instanceKlass com/mathworks/widgets/text/STPModelInterface +instanceKlass com/mathworks/widgets/text/STPBaseModelInterface +instanceKlass com/mathworks/matlab/api/menus/MenuBuilder +instanceKlass com/mathworks/matlab/api/menus/MenuGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarGroupID +instanceKlass com/mathworks/matlab/api/toolbars/ToolBars +instanceKlass com/mathworks/matlab/api/menus/MenuContext +instanceKlass com/mathworks/mde/editor/ActionManager$KeyBindingContributorProvider +instanceKlass com/mathworks/mde/editor/ActionManager +instanceKlass com/mathworks/mde/editor/EditorGroup$1 +instanceKlass com/mathworks/mde/editor/EditorGroup$8 +instanceKlass com/mathworks/matlab_login/StatusUpdateListener +instanceKlass com/mathworks/mde/desk/LoginStatusIndicator +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$1 +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener$3 +instanceKlass com/mathworks/widgets/HyperlinkTextLabel$HyperlinkHandler +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider$BadgeActionListener +instanceKlass com/mathworks/mde/desk/MLNotificationUIProvider +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$2 +instanceKlass com/mathworks/toolstrip/components/popups/ListItem +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$2 +instanceKlass com/mathworks/toolstrip/components/popups/PopupList$1 +instanceKlass javax/swing/plaf/basic/BasicListUI$Handler +instanceKlass javax/swing/DefaultListSelectionModel +instanceKlass javax/swing/ListSelectionModel +instanceKlass javax/swing/AbstractListModel +instanceKlass com/mathworks/mwswing/FocusReturnHandler +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox$SearchActionListener +instanceKlass com/jidesoft/swing/SelectAllUtils +instanceKlass com/mathworks/widgets/SearchTextField$4 +instanceKlass com/jgoodies/forms/factories/ComponentFactory2 +instanceKlass com/jgoodies/forms/factories/ComponentFactory +instanceKlass com/jgoodies/forms/builder/AbstractFormBuilder +instanceKlass com/jgoodies/forms/layout/CellConstraints$Alignment +instanceKlass com/jgoodies/forms/layout/CellConstraints +instanceKlass com/jgoodies/forms/layout/FormLayout$CachingMeasure +instanceKlass com/jgoodies/forms/layout/FormLayout$ComponentSizeCache +instanceKlass com/jgoodies/forms/util/FormUtils +instanceKlass com/jgoodies/forms/layout/FormSpecParser +instanceKlass com/jgoodies/forms/layout/BoundedSize +instanceKlass com/jgoodies/forms/util/LayoutStyle +instanceKlass com/jgoodies/forms/layout/Sizes$ComponentSize +instanceKlass com/jgoodies/forms/layout/ConstantSize$Unit +instanceKlass com/jgoodies/forms/layout/ConstantSize +instanceKlass com/jgoodies/forms/util/UnitConverter +instanceKlass com/jgoodies/forms/layout/Sizes +instanceKlass com/jgoodies/forms/layout/FormSpec$DefaultAlignment +instanceKlass com/jgoodies/forms/layout/FormSpec +instanceKlass com/jgoodies/forms/layout/Size +instanceKlass com/jgoodies/forms/factories/FormFactory +instanceKlass com/jgoodies/forms/layout/LayoutMap +instanceKlass com/jgoodies/forms/layout/FormLayout$Measure +instanceKlass com/jgoodies/forms/layout/FormLayout +instanceKlass com/mathworks/widgets/WindowsWidgetFactory$SearchAndClearButton$1 +instanceKlass javax/swing/text/Segment +instanceKlass java/text/CharacterIterator +instanceKlass com/mathworks/widgets/WindowsWidgetFactory +instanceKlass com/mathworks/widgets/SearchTextField$6 +instanceKlass com/mathworks/widgets/WidgetUtils +instanceKlass javax/accessibility/AccessibleExtendedText +instanceKlass javax/accessibility/AccessibleEditableText +instanceKlass javax/swing/event/CaretListener +instanceKlass com/mathworks/widgets/PromptingTextField$1 +instanceKlass org/apache/commons/lang/ArrayUtils +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener$2 +instanceKlass com/mathworks/mwswing/MJPopupMenu$CloseListener +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindings +instanceKlass javax/swing/JTextField$ScrollRepainter +instanceKlass javax/swing/DefaultBoundedRangeModel +instanceKlass javax/swing/BoundedRangeModel +instanceKlass javax/swing/plaf/synth/SynthUI +instanceKlass javax/swing/plaf/synth/SynthConstants +instanceKlass javax/swing/text/JTextComponent$DefaultKeymap +instanceKlass javax/swing/text/Keymap +instanceKlass javax/swing/text/TabExpander +instanceKlass javax/swing/TransferHandler$TransferSupport +instanceKlass javax/swing/TransferHandler$DropHandler +instanceKlass javax/swing/text/DefaultHighlighter$SafeDamager +instanceKlass javax/swing/text/LayeredHighlighter$LayerPainter +instanceKlass javax/swing/text/Highlighter$HighlightPainter +instanceKlass javax/swing/text/Highlighter$Highlight +instanceKlass javax/swing/text/LayeredHighlighter +instanceKlass javax/swing/text/Highlighter +instanceKlass javax/swing/text/DefaultCaret$Handler +instanceKlass java/awt/datatransfer/ClipboardOwner +instanceKlass javax/swing/text/Caret +instanceKlass javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag +instanceKlass javax/swing/plaf/basic/BasicTextUI$UpdateHandler +instanceKlass javax/swing/text/View +instanceKlass javax/swing/text/Position$Bias +instanceKlass javax/swing/TransferHandler +instanceKlass com/mathworks/mwswing/SelectAllOnFocusListener +instanceKlass com/mathworks/mwswing/MJTextField$TextAppearanceFocusListener +instanceKlass com/mathworks/mwswing/AppearanceFocusDispatcher +instanceKlass javax/swing/text/JTextComponent$1 +instanceKlass sun/swing/SwingAccessor$JTextComponentAccessor +instanceKlass com/mathworks/mwswing/AppearanceFocusListener +instanceKlass com/mathworks/widgets/SearchTextField +instanceKlass com/mathworks/mlwidgets/help/DocCenterLocale +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$DefaultDependencyProvider +instanceKlass com/mathworks/html/UrlTransformer +instanceKlass com/mathworks/helpsearch/index/LocalizedFileLocator +instanceKlass com/mathworks/mlwidgets/help/LocalizationFilter +instanceKlass com/mathworks/mlwidgets/help/HelpUtils$HelpDependencyProvider +instanceKlass com/mathworks/mlwidgets/help/HelpUtils +instanceKlass com/mathworks/help/helpui/DocConfig +instanceKlass com/mathworks/mde/help/suggestion/SuggestionRequest +instanceKlass com/mathworks/helpsearch/facets/Facetable +instanceKlass com/mathworks/helpsearch/suggestion/DocumentationSuggestionProvider +instanceKlass com/mathworks/helpsearch/product/DocSetItemResolver +instanceKlass com/mathworks/search/SearchField +instanceKlass com/mathworks/widgets/SearchTextField$Listener +instanceKlass com/mathworks/mde/help/DocCenterBrowserSearchBox +instanceKlass com/mathworks/services/binding/PreferenceState +instanceKlass com/mathworks/widgets/desk/DTKeyBindings +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$1 +instanceKlass com/mathworks/mwswing/MouseLatch +instanceKlass com/mathworks/widgets/desk/DTBorderContainer$EdgeOccupant +instanceKlass com/mathworks/mde/desk/MLMainFrame$1 +instanceKlass com/mathworks/mde/desk/MLMainFrame$StatusTextListener +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$2 +instanceKlass com/mathworks/mwswing/SystemGraphicsEnvironment +instanceKlass com/mathworks/mwswing/ScreenInformationProvider +instanceKlass com/mathworks/mwswing/WindowUtils +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$1 +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu$ContextEventListener +instanceKlass com/mathworks/toolstrip/accessories/ToolstripContextMenu +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$1 +instanceKlass com/mathworks/toolstrip/impl/ToolstripTabContentPanel$1 +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabContentUI$MyBorder +instanceKlass com/mathworks/toolstrip/plaf/SectionWithHeaderUI$SectionWithHeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTabLayout +instanceKlass com/mathworks/toolstrip/DefaultToolstrip$3 +instanceKlass com/mathworks/mwswing/SimpleStringTrimmer +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$HeaderLayout +instanceKlass com/mathworks/toolstrip/plaf/ToolstripHeaderUI$1 +instanceKlass com/mathworks/util/event/AWTMouseListener +instanceKlass com/mathworks/util/event/AWTKeyListener +instanceKlass com/mathworks/widgets/desk/DTFrame$7 +instanceKlass com/mathworks/widgets/desk/DTFrame$6 +instanceKlass java/util/EnumMap$EnumMapIterator +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryButton$1 +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager +instanceKlass com/mathworks/mwswing/StringTrimmer +instanceKlass com/mathworks/toolstrip/accessories/ToolTipContentProvider +instanceKlass com/mathworks/toolstrip/accessories/CalloutToolTipManager$Client +instanceKlass com/mathworks/util/async/Status +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$4 +instanceKlass com/mathworks/util/AllPredicate +instanceKlass com/mathworks/widgets/desk/DTFrame$QuickAccessBarContextFilter +instanceKlass com/mathworks/mde/desk/MLDesktop$13 +instanceKlass com/mathworks/widgets/desk/DTFrame$5 +instanceKlass com/mathworks/widgets/desk/DTBorderFactory +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$ToolBarData +instanceKlass com/mathworks/mde/desk/MLDesktop$12 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$3 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$TabCollectionListener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$2 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$1 +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$6 +instanceKlass com/mathworks/widgets/desk/Desktop$54 +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSRegistry$Listener +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar$ToolBarPopulator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$2 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$5 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$12 +instanceKlass com/mathworks/mde/desk/PlotGalleryManager$2 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1$1 +instanceKlass com/mathworks/mwswing/MJRadioButton$ActionPropertyHandler +instanceKlass javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonIcon +instanceKlass com/mathworks/widgets/BusyAffordance$2$1 +instanceKlass com/mathworks/widgets/BusyAffordance$2 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel$1 +instanceKlass com/mathworks/toolstrip/components/gallery/model/WrappedGalleryModel +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryDisposer +instanceKlass com/mathworks/toolstrip/factory/TSFactory$8 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$4 +instanceKlass com/mathworks/toolstrip/components/gallery/view/GalleryView$3 +instanceKlass com/mathworks/widgets/BusyAffordance$UpdateListener +instanceKlass com/mathworks/widgets/BusyAffordance +instanceKlass com/mathworks/widgets/ComponentBuilder +instanceKlass com/mathworks/toolstrip/components/gallery/view/BusyAffordanceProxy +instanceKlass com/mathworks/toolstrip/Previewer +instanceKlass com/mathworks/toolstrip/components/gallery/model/Item +instanceKlass com/mathworks/toolstrip/components/gallery/view/ItemPopupMenuCustomizer +instanceKlass com/mathworks/services/GalleryViewSettingImpl +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryViewSetting +instanceKlass com/mathworks/toolstrip/factory/TSFactory$7 +instanceKlass com/mathworks/toolstrip/factory/TSFactory$GalleryRestoreData +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryResources +instanceKlass com/mathworks/toolstrip/components/gallery/model/Category +instanceKlass com/mathworks/toolstrip/components/gallery/model/DefaultGalleryModel +instanceKlass com/mathworks/toolstrip/components/TSUtil +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$11 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$10 +instanceKlass javax/swing/ButtonGroup +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$7 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$VariableLabelDecorator +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$6 +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$PlotUpdateListener +instanceKlass com/mathworks/mlwidgets/help/ddux/HelpDduxCommandWrapper$Mock +instanceKlass com/mathworks/help/helpui/ddux/DummyDduxCommandWrapper +instanceKlass com/mathworks/help/helpui/ddux/DduxCommandWrapper +instanceKlass com/mathworks/mlwidgets/help/ddux/DummyDduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler$1 +instanceKlass javax/swing/tree/MutableTreeNode +instanceKlass com/mathworks/mlwidgets/graphics/ModelStateFactory +instanceKlass com/mathworks/mlwidgets/help/ddux/DduxLoggingProvider +instanceKlass com/mathworks/mlwidgets/graphics/PlotActionHandler +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4$1 +instanceKlass com/mathworks/mde/desk/MLFeatures +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1$1 +instanceKlass java/awt/datatransfer/SystemFlavorMap$SoftCache +instanceKlass java/awt/datatransfer/SystemFlavorMap +instanceKlass java/awt/datatransfer/FlavorTable +instanceKlass java/awt/datatransfer/FlavorMap +instanceKlass java/awt/dnd/DropTargetContext +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandDropListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator$1 +instanceKlass com/google/common/collect/ObjectArrays +instanceKlass com/mathworks/toolstrip/sections/IconifiedSectionLayout +instanceKlass com/mathworks/toolstrip/sections/PreferredSectionLayout +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayout +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$2 +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies$1 +instanceKlass com/mathworks/toolstrip/ToolstripSectionLayoutPolicy +instanceKlass com/mathworks/toolstrip/sections/LayoutPolicies +instanceKlass com/mathworks/toolstrip/components/DropDownActionListener +instanceKlass com/mathworks/toolstrip/factory/TSFactory$ListPopupListener +instanceKlass com/mathworks/toolstrip/components/TSDropDownButton$PopupComponentMouseListener +instanceKlass com/mathworks/util/Disposer$Node +instanceKlass com/mathworks/util/Disposer$1 +instanceKlass com/mathworks/util/Disposer +instanceKlass com/google/common/base/Joiner$MapJoiner +instanceKlass com/google/common/base/Joiner +instanceKlass com/google/common/collect/Collections2 +instanceKlass com/google/common/collect/ImmutableMap +instanceKlass com/google/common/base/Converter +instanceKlass com/google/common/collect/UnmodifiableIterator +instanceKlass com/google/common/base/Function +instanceKlass com/google/common/collect/Maps$EntryTransformer +instanceKlass com/google/common/collect/BiMap +instanceKlass java/util/NavigableSet +instanceKlass com/google/common/collect/SortedMapDifference +instanceKlass com/google/common/collect/MapDifference +instanceKlass com/google/common/collect/Maps +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$WrappedCollection$WrappedIterator +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ButtonTrigger +instanceKlass com/mathworks/toolstrip/factory/TSFactory$TriggerDisposer +instanceKlass javax/swing/AncestorNotifier +instanceKlass javax/swing/ClientPropertyKey$1 +instanceKlass sun/awt/AWTAccessor$ClientPropertyKeyAccessor +instanceKlass com/mathworks/toolstrip/components/PopupListener$PopupCallback +instanceKlass com/mathworks/toolstrip/plaf/LAFUtil +instanceKlass com/mathworks/toolstrip/plaf/ToolstripButtonUI$ToolstripButtonListener +instanceKlass com/mathworks/toolstrip/plaf/ComponentMnemonicsProvider +instanceKlass com/mathworks/toolstrip/components/LayoutMode +instanceKlass com/mathworks/desktop/mnemonics/Mnemonic +instanceKlass com/mathworks/toolstrip/factory/TSFactory$9 +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder$Column +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$MySectionBuilder +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$ColumnLayout +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections$SectionLayout +instanceKlass com/mathworks/toolstrip/sections/SectionBuilder +instanceKlass com/mathworks/desktop/overlay/Overlay +instanceKlass com/mathworks/toolstrip/sections/ToolstripSections +instanceKlass com/mathworks/toolstrip/factory/TSToolPath +instanceKlass com/mathworks/toolstrip/factory/TSFactory$1 +instanceKlass com/mathworks/toolbox/shared/hwconnectinstaller/util/SupportPkgInstallerToolSetFactory +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$4 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$1 +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$ProfileAnalyzerInstanceHolder +instanceKlass com/mathworks/toolbox/distcomp/util/mvm/ResultHandler +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/ProfileAnalyzer$OperationNotifier +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/DefaultProfileName +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu$ProfilePropertyChangeListener +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeSupportAdaptor +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileNamesProvider +instanceKlass com/mathworks/toolbox/distcomp/ui/model/PropertyChangeObservable +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/I18nMatlabIdentifiedException +instanceKlass com/mathworks/toolbox/distcomp/util/i18n/HasI18nMatlabIdentifiedMessage +instanceKlass com/mathworks/util/MatlabIdentified +instanceKlass com/mathworks/toolbox/distcomp/ui/profile/model/ProfileUpdateListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ClusterProfilesMenu +instanceKlass com/mathworks/toolbox/distcomp/mwlogin/MatlabLoginController$LoginStatusListener +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/MLDesktopParallelMenu +instanceKlass com/mathworks/toolbox/distcomp/ui/desk/ParallelToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/popupview/GalleryPopup$Listener +instanceKlass com/mathworks/toolstrip/components/gallery/model/GalleryModel +instanceKlass javax/swing/ListCellRenderer +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolPropertyListener +instanceKlass com/mathworks/toolstrip/components/PopupShower +instanceKlass com/mathworks/toolstrip/factory/TSFactory +instanceKlass com/mathworks/mwswing/binding/InputMapActionListener +instanceKlass com/mathworks/mde/vrd/LicenseToolSetFactory +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$3 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$2 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$TearOffOptionsListDecorator +instanceKlass com/mathworks/toolstrip/accessories/Resources +instanceKlass com/mathworks/toolstrip/accessories/CollapseToolstripAction$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$FactoryLayout +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary$Listener +instanceKlass com/mathworks/widgets/desk/DTLayoutToolSetFactory +instanceKlass com/mathworks/matlab/api/explorer/MatlabPlatformUtil +instanceKlass com/mathworks/mlwidgets/explorer/model/ExplorerResources +instanceKlass com/mathworks/mde/desk/CodeReportActionProvider +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$18 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$17 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$16 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$15 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$14 +instanceKlass com/mathworks/desktop/client/ClientCollectionListener$Event +instanceKlass com/google/common/collect/Lists +instanceKlass com/mathworks/desktop/client/DefaultClientCollection +instanceKlass com/mathworks/desktop/attr/AttributeChangeEvent +instanceKlass com/mathworks/desktop/attr/DefaultAttributes +instanceKlass com/mathworks/desktop/client/ClientCollection +instanceKlass com/mathworks/desktop/client/BasicClient +instanceKlass com/mathworks/desktop/client/ClientCollectionListener +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory +instanceKlass com/mathworks/mde/liveeditor/DirtyStateSupport$DirtyStateListener +instanceKlass com/mathworks/mde/liveeditor/AbstractLiveEditorToolSet +instanceKlass com/mathworks/system/editor/toolstrip/SystemEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsKeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsRunnerOptions +instanceKlass com/mathworks/mvm/exec/MvmSwingWorker +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender$Callback +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetMatlabCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandReceiver +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor$ToolstripState +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/ToolSetActionController +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsToolSetCommandSender +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunnerOptions +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/KeyBinder +instanceKlass com/mathworks/toolbox/matlab/testframework/ui/toolstrip/RunTestsEditorToolstripTabContributor +instanceKlass com/mathworks/toolbox/rptgenxmlcomp/comparison/node/customization/CustomizationManager +instanceKlass com/mathworks/matlab/api/editor/EditorLayerProvider +instanceKlass com/mathworks/matlab/api/editor/EditorSyntaxHighlighting +instanceKlass com/mathworks/cmlink/util/internalapi/InternalCMAdapterFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/CheckRunnerProvider +instanceKlass com/mathworks/toolbox/slproject/project/extensions/customization/WorkingFolderExtensionFactory +instanceKlass com/mathworks/cmlink/util/icon/FileIconFactoryProducer +instanceKlass com/mathworks/toolbox/slproject/project/archiving/ProjectArchiverFactory +instanceKlass com/mathworks/toolbox/slproject/project/sharing/api/r15a/ShareExtensionFactory +instanceKlass com/mathworks/toolbox/slproject/project/metadata/MetadataManagerFactory +instanceKlass com/mathworks/toolbox/slproject/project/GUI/projectui/ProjectViewNodeFactory +instanceKlass com/mathworks/toolbox/slproject/project/extensions/ProjectExtensionFactory +instanceKlass com/mathworks/addons_common/notificationframework/BalloonTooltipNotificationClickedCallback +instanceKlass com/mathworks/addons_common/notificationframework/EnableDisableManagementNotifierAPI +instanceKlass com/mathworks/addressbar_api/AddressBarAPI +instanceKlass com/mathworks/mde/find/FileTypeContentsProvider +instanceKlass com/mathworks/find_files_api/FileTypeSpecificOpenToLineActionProvider +instanceKlass com/mathworks/find_files_api/OpenActionProvider +instanceKlass com/mathworks/mde/editor/debug/DebuggerActionsProvider +instanceKlass com/mathworks/matlab/api/editor/actions/KeyBindingContributor +instanceKlass com/mathworks/matlab/api/editor/EditorKitProvider +instanceKlass com/mathworks/matlab/api/editor/actions/EditorToolTipDelegate +instanceKlass com/mathworks/widgets/editor/breakpoints/MarginProvider +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarContributor +instanceKlass com/mathworks/matlab/api/editor/actions/SelectionDelegate +instanceKlass com/mathworks/matlab/api/editor/EditorLanguagePreferencesPanel +instanceKlass com/mathworks/matlab/api/menus/MenuContributor +instanceKlass com/mathworks/comparisons/plugin/ComparisonPlugin +instanceKlass com/mathworks/matlab/api/editor/EditorLanguage +instanceKlass com/mathworks/addons_common/AddonManager +instanceKlass com/mathworks/cmlink/creation/api/RepositoryLocationCreatorFactory +instanceKlass com/mathworks/addons_common/legacy_format_support/LegacyInstallsRetriever +instanceKlass com/mathworks/addon_service_management_api/RegistrationPointServiceProvider +instanceKlass com/mathworks/addon_service_management_api/AddonServiceProvider +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripTabContributor +instanceKlass com/mathworks/matlab/api/editor/actions/Prioritizable +instanceKlass com/mathworks/mlwidgets/explorer/util/SourceControlManagerPlugin +instanceKlass com/mathworks/project/impl/model/TargetFactory +instanceKlass com/mathworks/mwswing/api/FileExtensionFilterContributor +instanceKlass com/mathworks/util/ImplementorsCacheImpl +instanceKlass com/mathworks/util/ImplementorsCache +instanceKlass com/mathworks/util/ImplementorsCacheFactory$LazyHolder +instanceKlass com/mathworks/util/ImplementorsCacheFactory +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabErrorHandlingOptionsListDecorator +instanceKlass com/mathworks/mde/editor/plugins/matlab/MatlabDebugActions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$5 +instanceKlass com/mathworks/matlab/api/editor/EditorToolstripOptions +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$7 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$6 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$1 +instanceKlass com/mathworks/mde/editor/EditorAction +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$20 +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$19 +instanceKlass com/mathworks/services/settings/SettingUtils +instanceKlass com/mathworks/services/mlx/MlxFileUtils +instanceKlass com/mathworks/matlab/api/explorer/AbstractNewFileTemplateWithIcon +instanceKlass com/mathworks/matlab/api/explorer/IconProvider +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$2 +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$1 +instanceKlass com/mathworks/widgets/toolbars/DefaultToolBarID +instanceKlass com/mathworks/mde/editor/RealMatlab +instanceKlass com/mathworks/matlab/api/datamodel/StorageLocation +instanceKlass com/mathworks/mwswing/FilePatternFilter +instanceKlass com/mathworks/matlab/api/toolbars/ToolBarID +instanceKlass com/mathworks/mde/editor/EditorMatlab +instanceKlass com/mathworks/mde/editor/EditorUtils +instanceKlass com/mathworks/cfbutils/FileSystemNotificationUtils +instanceKlass com/mathworks/util/FileSystemNotifier$1 +instanceKlass com/mathworks/cfbutils/FileSystemListener +instanceKlass com/mathworks/cfbutils/FileSystemPollingChangeListener +instanceKlass com/mathworks/util/FileSystemNotifier +instanceKlass com/mathworks/util/FileSystemUtils +instanceKlass com/mathworks/util/FileSystemAdapter +instanceKlass com/mathworks/util/FileSystemListener +instanceKlass com/mathworks/mde/editor/EditorStartup +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager$BusyIdleListener +instanceKlass com/mathworks/mde/editor/debug/EditorToolstripRefreshManager +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandUtilities +instanceKlass com/mathworks/mde/editor/ErrorHandlingGroupFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCategoryIcons +instanceKlass org/apache/xerces/dom/CharacterDataImpl$1 +instanceKlass org/apache/xerces/dom/NamedNodeMapImpl +instanceKlass org/w3c/dom/NamedNodeMap +instanceKlass org/apache/xerces/dom/DeepNodeListImpl +instanceKlass org/apache/xerces/dom/DeferredDocumentImpl$RefCount +instanceKlass org/w3c/dom/traversal/NodeIterator +instanceKlass org/w3c/dom/events/MutationEvent +instanceKlass org/w3c/dom/ranges/Range +instanceKlass org/w3c/dom/traversal/TreeWalker +instanceKlass org/w3c/dom/events/Event +instanceKlass org/w3c/dom/CDATASection +instanceKlass org/w3c/dom/Comment +instanceKlass org/w3c/dom/DocumentFragment +instanceKlass org/w3c/dom/ProcessingInstruction +instanceKlass org/w3c/dom/Text +instanceKlass org/w3c/dom/DOMConfiguration +instanceKlass org/w3c/dom/Attr +instanceKlass com/mathworks/mde/difftool/FileDiffToolInfo +instanceKlass com/mathworks/mde/difftool/UnsavedChangesDiffToolInfo +instanceKlass org/w3c/dom/DocumentType +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu +instanceKlass org/w3c/dom/Notation +instanceKlass com/mathworks/mde/editor/plugins/matlab/RunMenu$RunButtonStateChangeListener +instanceKlass com/mathworks/matlab/api/editor/EditorEventListener +instanceKlass java/util/Observer +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$4 +instanceKlass javax/swing/event/ListDataListener +instanceKlass org/w3c/dom/TypeInfo +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$3 +instanceKlass org/apache/xerces/xs/XSSimpleTypeDefinition +instanceKlass org/apache/xerces/xs/XSTypeDefinition +instanceKlass org/apache/xerces/xs/XSObject +instanceKlass org/apache/xerces/xs/ItemPSVI +instanceKlass org/w3c/dom/EntityReference +instanceKlass org/w3c/dom/Entity +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$2 +instanceKlass org/w3c/dom/CharacterData +instanceKlass org/w3c/dom/DOMError +instanceKlass org/w3c/dom/ranges/DocumentRange +instanceKlass org/w3c/dom/events/DocumentEvent +instanceKlass org/w3c/dom/traversal/DocumentTraversal +instanceKlass com/mathworks/mwswing/CustomizablePopupMenu +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistrant +instanceKlass com/mathworks/toolstrip/components/AcceptsMnemonic +instanceKlass org/apache/xerces/dom/DeferredNode +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$1 +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$OpenWorkspaceVariableAction$1 +instanceKlass org/apache/xerces/dom/NodeImpl +instanceKlass org/w3c/dom/events/EventTarget +instanceKlass org/w3c/dom/NodeList +instanceKlass org/apache/xerces/jaxp/TeeXMLDocumentFilterImpl +instanceKlass org/apache/xerces/impl/xs/XMLSchemaValidator +instanceKlass org/apache/xerces/impl/xs/identity/FieldActivator +instanceKlass org/apache/xerces/jaxp/JAXPConstants +instanceKlass javax/xml/parsers/DocumentBuilder +instanceKlass javax/xml/parsers/SecuritySupport$1 +instanceKlass javax/xml/parsers/SecuritySupport$2 +instanceKlass javax/xml/parsers/SecuritySupport +instanceKlass javax/xml/parsers/FactoryFinder +instanceKlass javax/xml/parsers/DocumentBuilderFactory +instanceKlass com/google/common/collect/AbstractMapBasedMultimap$KeySet$1 +instanceKlass java/util/Vector$1 +instanceKlass com/mathworks/mlwidgets/shortcuts/Shortcut +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutUtils +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$LocalExtensionHandler +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$2 +instanceKlass java/util/concurrent/CountDownLatch +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar$1 +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$2 +instanceKlass sun/java2d/loops/FontInfo +instanceKlass sun/font/CMap +instanceKlass sun/font/T2KFontScaler$1 +instanceKlass sun/font/FontScaler +instanceKlass sun/font/StrikeCache$DisposableStrike +instanceKlass sun/font/FontStrikeDisposer +instanceKlass sun/java2d/Disposer$PollDisposable +instanceKlass sun/font/FontStrikeDesc +instanceKlass sun/font/FontDesignMetrics$MetricsKey +instanceKlass java/awt/FontMetrics +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteIconContainer +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandIcons +instanceKlass java/text/FieldPosition$Delegate +instanceKlass java/text/Format$FieldDelegate +instanceKlass java/text/DigitList +instanceKlass java/util/Currency$CurrencyNameGetter +instanceKlass java/util/Currency$1 +instanceKlass java/util/Currency +instanceKlass java/text/DecimalFormatSymbols +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference$Pair +instanceKlass java/util/concurrent/atomic/AtomicMarkableReference +instanceKlass javax/swing/Timer$1 +instanceKlass java/text/FieldPosition +instanceKlass com/mathworks/mde/desk/MLDesktopRegistrar +instanceKlass com/mathworks/mlservices/MatlabDesktopRegistrar +instanceKlass com/mathworks/mlwidgets/shortcuts/ShortcutIconUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetExtensionHandler +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandResources +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands$GalleryModelReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$GalleryButtonDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$GalleryModelCreator +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory +instanceKlass com/mathworks/toolstrip/components/gallery/GalleryOptions +instanceKlass com/mathworks/beans/EnumPair +instanceKlass com/mathworks/jmi/bean/UDDMethodDescription +instanceKlass com/mathworks/jmi/bean/UDDPropertyDescription +instanceKlass com/mathworks/jmi/bean/UDDBeanClass +instanceKlass com/mathworks/jmi/bean/OpCode +instanceKlass com/mathworks/jmi/bean/ClassFileConstants +instanceKlass com/mathworks/jmi/bean/UDDListener +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$Listener +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ListDecorator +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolSupplier +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar$1 +instanceKlass com/mathworks/toolstrip/accessories/TSContextMenuContributor +instanceKlass com/mathworks/toolstrip/components/popups/ListActionListener +instanceKlass javax/swing/ListModel +instanceKlass com/mathworks/widgets/desk/DTWindowPopupAction$1 +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Tool +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Dependency +instanceKlass com/mathworks/mwswing/IconSet$IconSizeComparator +instanceKlass com/mathworks/mwswing/IconSet +instanceKlass com/mathworks/mwswing/ResizableIcon +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$ToolParameters +instanceKlass org/apache/commons/lang/builder/HashCodeBuilder +instanceKlass com/mathworks/util/Pair +instanceKlass com/mathworks/toolstrip/factory/XMLUtils +instanceKlass com/mathworks/mwswing/SimpleDOMUtils +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Tool +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$ToolParameters +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration$Section +instanceKlass com/mathworks/toolstrip/factory/TSTabConfiguration +instanceKlass com/mathworks/mde/editor/EditorViewToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/codepad/CodepadToolSetFactory$Registrar +instanceKlass com/mathworks/mde/liveeditor/LiveEditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory$Registrar +instanceKlass com/mathworks/mde/array/ArrayEditorToolstripTabFactory$Registrar +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommandsToolSetFactory$Registrar +instanceKlass com/mathworks/toolstrip/components/gallery/model/ActionsProvider +instanceKlass com/mathworks/mlwidgets/favoritecommands/UserFavoriteCommands$ToolSetReadyListener +instanceKlass com/mathworks/mlwidgets/favoritecommands/FavoriteCommands +instanceKlass com/mathworks/mde/desk/MLToolstripFactory$Registrar +instanceKlass com/mathworks/toolstrip/factory/TSToolSet$ToolDecorator +instanceKlass com/mathworks/mde/desk/CommonToolRegistrar +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$FocusTracker +instanceKlass com/mathworks/widgets/desk/DTFrame$1 +instanceKlass java/util/SortedSet +instanceKlass com/google/common/collect/Multiset +instanceKlass com/google/common/collect/AbstractMultimap +instanceKlass com/mathworks/mwswing/modality/ModalLevel +instanceKlass com/mathworks/mwswing/modality/ModalStackImpl +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl$ModalityManagerAWTEventListener +instanceKlass com/mathworks/mwswing/modality/ModalStack +instanceKlass com/mathworks/mwswing/modality/ModalManagerImpl +instanceKlass com/mathworks/mwswing/MJFrame$1 +instanceKlass com/mathworks/mwswing/window/MJFullWindowRegistry +instanceKlass javax/swing/LayoutComparator +instanceKlass java/util/function/IntBinaryOperator +instanceKlass java/util/function/LongBinaryOperator +instanceKlass java/util/function/DoubleBinaryOperator +instanceKlass java/util/function/BinaryOperator +instanceKlass java/util/function/IntToDoubleFunction +instanceKlass java/util/function/IntToLongFunction +instanceKlass java/util/function/IntUnaryOperator +instanceKlass java/util/function/IntFunction +instanceKlass java/util/stream/LongStream +instanceKlass java/util/stream/DoubleStream +instanceKlass java/util/stream/Stream +instanceKlass java/util/stream/IntStream +instanceKlass java/util/stream/BaseStream +instanceKlass java/util/Spliterator$OfDouble +instanceKlass java/util/Spliterator$OfInt +instanceKlass java/util/Spliterator$OfLong +instanceKlass java/util/Spliterator$OfPrimitive +instanceKlass java/util/Spliterator +instanceKlass javax/swing/SortingFocusTraversalPolicy$1 +instanceKlass javax/swing/RepaintManager$PaintManager +instanceKlass javax/swing/JRootPane$RootLayout +instanceKlass com/mathworks/mde/desk/PlotGalleryManager +instanceKlass com/mathworks/widgets/desk/DTMultipleClientFrame$ClientMenuInfo +instanceKlass com/mathworks/widgets/desk/DTToolBarLocation +instanceKlass com/mathworks/toolstrip/factory/TSToolSet +instanceKlass java/io/ObjectOutput +instanceKlass com/mathworks/toolstrip/Toolstrip +instanceKlass com/mathworks/widgets/desk/DTFrame$DeferredMenuBarUpdate +instanceKlass com/mathworks/util/NativeEvent$Listener +instanceKlass com/mathworks/mwswing/MJFrame$FullScreenListener +instanceKlass com/mathworks/mwswing/modality/ModalManager +instanceKlass com/mathworks/services/Branding +instanceKlass com/mathworks/widgets/desk/DTFrame$MenuToStatusBarBridge +instanceKlass com/mathworks/mde/desk/MLFeatures$Listener +instanceKlass com/mathworks/toolstrip/components/TSComponent +instanceKlass com/mathworks/desktop/mnemonics/HasMnemonic +instanceKlass com/mathworks/toolstrip/ToolstripSection +instanceKlass com/mathworks/widgets/desk/DTComponentBar$DragOffListener +instanceKlass com/mathworks/toolstrip/components/TSUtil$KeyTriggerListener +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry$ActivatorData +instanceKlass com/mathworks/mde/desk/MLDesktop$Initializer +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF$GoToNullPrompt +instanceKlass com/mathworks/jmi/mldisplay/VariableDisplayEvent +instanceKlass com/mathworks/jmi/diagnostic/IssuedWarningEvent +instanceKlass com/mathworks/jmi/correction/SuggestionEvent +instanceKlass com/mathworks/mvm/MvmWrapper +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$2 +instanceKlass com/mathworks/mde/cmdwin/CmdWinDocument$1 +instanceKlass com/mathworks/mde/cmdwin/Prompt +instanceKlass javax/swing/text/StyleContext$KeyEnumeration +instanceKlass javax/swing/text/GapContent$StickyPosition +instanceKlass javax/swing/text/Position +instanceKlass javax/swing/text/AbstractDocument$1 +instanceKlass javax/swing/text/AbstractDocument$AbstractElement +instanceKlass javax/swing/tree/TreeNode +instanceKlass javax/swing/text/Element +instanceKlass java/util/Collections$3 +instanceKlass javax/swing/text/StyleContext$SmallAttributeSet +instanceKlass java/util/Collections$EmptyEnumeration +instanceKlass javax/swing/text/StyleContext$NamedStyle +instanceKlass javax/swing/text/Style +instanceKlass javax/swing/text/SimpleAttributeSet$EmptyAttributeSet +instanceKlass javax/swing/text/SimpleAttributeSet +instanceKlass javax/swing/text/MutableAttributeSet +instanceKlass javax/swing/text/AttributeSet +instanceKlass javax/swing/text/StyleContext$FontKey +instanceKlass javax/swing/text/AttributeSet$ParagraphAttribute +instanceKlass javax/swing/text/AttributeSet$ColorAttribute +instanceKlass javax/swing/text/AttributeSet$FontAttribute +instanceKlass javax/swing/text/AttributeSet$CharacterAttribute +instanceKlass javax/swing/text/StyleConstants +instanceKlass javax/swing/text/StyleContext +instanceKlass javax/swing/text/AbstractDocument$AttributeContext +instanceKlass javax/swing/text/GapVector +instanceKlass javax/swing/event/DocumentEvent +instanceKlass javax/swing/text/AbstractDocument$Content +instanceKlass javax/swing/event/DocumentListener +instanceKlass javax/swing/text/AbstractDocument +instanceKlass com/mathworks/widgets/text/print/PrintableTextDocument +instanceKlass javax/swing/text/Document +instanceKlass com/mathworks/mde/cmdwin/CmdWinMLIF +instanceKlass com/mathworks/mde/cmdwin/KeystrokeRequestedEvent +instanceKlass com/mathworks/mde/cmdwin/LoadNativeCmdWin +instanceKlass com/mathworks/mde/cmdwin/CmdWinSinkRegistrar +instanceKlass com/mathworks/mlwidgets/prefs/ConfirmationDialogPrefsPanel$DialogItem +instanceKlass com/mathworks/mwswing/table/AccessibleTextProvider +instanceKlass javax/swing/table/TableCellEditor +instanceKlass javax/swing/CellEditor +instanceKlass javax/swing/table/TableCellRenderer +instanceKlass com/mathworks/mde/cmdwin/CmdWinPrefs +instanceKlass com/mathworks/services/FontPrefsComponent +instanceKlass com/mathworks/services/lmgr/NativeLmgr +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService$nativeBorrowAPI +instanceKlass com/mathworks/services/lmgr/BorrowAPI +instanceKlass com/mathworks/services/lmgr/NativeLmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrBorrowService +instanceKlass com/mathworks/services/lmgr/LmgrServiceFactory +instanceKlass com/mathworks/jmi/Support +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManagerImpl +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI$LazyHolder +instanceKlass com/mathworks/jmi/MatlabWorker +instanceKlass com/mathworks/mde/licensing/borrowing/model/BorrowManager +instanceKlass com/mathworks/mde/licensing/borrowing/BorrowUI +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$3 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$2 +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$4 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$2 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBusyIdleStateManager$1 +instanceKlass com/mathworks/mde/editor/MatlabBatchedBusyIdleStateManager$2 +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager +instanceKlass com/mathworks/mde/editor/EditorPauseAction$3 +instanceKlass com/mathworks/mde/editor/EditorPauseAction$1 +instanceKlass com/mathworks/mde/editor/EditorToolSetFactory +instanceKlass com/mathworks/mde/editor/BusyIdleStateManager$BusyIdleListener +instanceKlass com/mathworks/mwswing/ToolTipProvider +instanceKlass com/mathworks/mde/editor/EditorPauseAction +instanceKlass com/mathworks/mlservices/MatlabDebugAdapter +instanceKlass com/mathworks/services/PrefChangeListener +instanceKlass com/mathworks/mlwidgets/debug/DebugActions$DebugAction$13$1 +instanceKlass com/mathworks/mlservices/MatlabDebugServices$1 +instanceKlass com/mathworks/mlservices/MatlabExecutionErrorHandler +instanceKlass com/mathworks/mde/cmdwin/CmdWinExecuteServices +instanceKlass com/mathworks/mlservices/MLExecuteRegistrar +instanceKlass com/mathworks/mlservices/MLExecute +instanceKlass com/mathworks/mlservices/MLServicesRegistry$EventMulticaster +instanceKlass com/mathworks/mlservices/MLServicesRegistry +instanceKlass com/mathworks/mlservices/MLExecuteServices$ServicesRegistryListener +instanceKlass com/mathworks/mlservices/MLServicesRegistry$Listener +instanceKlass com/mathworks/mlservices/MLServices +instanceKlass com/mathworks/mlservices/MatlabDebugServices$InterestCallback +instanceKlass sun/util/logging/LoggingSupport$2 +instanceKlass java/util/logging/Formatter +instanceKlass java/util/logging/ErrorManager +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager$InterceptorComparator +instanceKlass com/mathworks/mlservices/debug/DebugEventInterceptorManager +instanceKlass com/mathworks/mlservices/MatlabDebugServices$BusyExecutionListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$CtrlCListener +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabPauseObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DefaultMatlabDebugObserver +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackCallback +instanceKlass com/mathworks/mlservices/MatlabDebugServices$StackDispatch +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch$DebugExitStackCheck +instanceKlass com/mathworks/mlservices/MatlabDebugServices$DebugDispatch +instanceKlass com/mathworks/matlab/api/debug/Breakpoint +instanceKlass com/mathworks/mlservices/BreakpointBase +instanceKlass com/mathworks/mlservices/MatlabDebugServices +instanceKlass com/mathworks/mlservices/MatlabDebugObserver +instanceKlass com/mathworks/mlwidgets/debug/DebugActions +instanceKlass com/mathworks/widgets/desk/Desktop$43 +instanceKlass com/mathworks/widgets/debug/DebuggerManager$IdleMatlabDebugger +instanceKlass com/mathworks/widgets/debug/DebuggerManager +instanceKlass com/mathworks/matlab/api/editor/actions/DebuggerActions +instanceKlass com/mathworks/jmi/Matlab$1 +instanceKlass com/mathworks/mde/desk/MLDesktop$3 +instanceKlass com/mathworks/mde/desk/MLDesktop$2 +instanceKlass com/mathworks/toolstrip/ToolstripTab +instanceKlass com/mathworks/desktop/client/Client +instanceKlass com/mathworks/desktop/attr/Attributes +instanceKlass com/mathworks/widgets/desk/DTGroup$DeferredPropertyChange +instanceKlass com/mathworks/widgets/desk/DTGroup$1 +instanceKlass com/mathworks/widgets/desk/DTPropertyBridge +instanceKlass java/awt/event/WindowAdapter +instanceKlass com/sun/java/swing/plaf/windows/WindowsPopupMenuUI$MnemonicListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper +instanceKlass javax/swing/MenuSelectionManager +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$1 +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper +instanceKlass javax/swing/Popup +instanceKlass com/mathworks/mwswing/MJMenuItem$ActionPropertyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$PropertyChangeHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuKeyHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MenuDragMouseHandler +instanceKlass com/mathworks/mwswing/plaf/MBasicMenuItemUI$MouseInputHandler +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemArrowIcon +instanceKlass javax/swing/plaf/basic/BasicMenuItemUI$Handler +instanceKlass javax/swing/event/MenuDragMouseListener +instanceKlass javax/swing/event/MenuKeyListener +instanceKlass javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler +instanceKlass com/mathworks/mwswing/MJMenu$WindowsVistaPropertyChangeListener +instanceKlass sun/swing/MenuItemLayoutHelper +instanceKlass javax/swing/plaf/basic/BasicGraphicsUtils +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuArrowIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuUI$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuItemUIAccessor +instanceKlass javax/swing/JMenuItem$MenuItemFocusListener +instanceKlass javax/swing/JMenu$MenuChangeListener +instanceKlass sun/swing/UIAction +instanceKlass javax/swing/plaf/basic/BasicMenuBarUI$Handler +instanceKlass com/sun/java/swing/plaf/windows/WindowsMenuBarUI$2 +instanceKlass javax/swing/plaf/basic/BasicBorders +instanceKlass javax/swing/DefaultSingleSelectionModel +instanceKlass javax/swing/SingleSelectionModel +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler$1 +instanceKlass com/mathworks/mwswing/WeakPropertyChangeCoupler +instanceKlass com/mathworks/mwswing/MJButton$ActionPropertyHandler +instanceKlass javax/swing/ActionPropertyChangeListener +instanceKlass javax/swing/KeyboardManager$ComponentKeyStrokePair +instanceKlass javax/swing/KeyboardManager +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager$ActionTrigger +instanceKlass com/google/common/collect/ListMultimap +instanceKlass com/google/common/collect/Multimap +instanceKlass com/mathworks/toolstrip/factory/ContextTargetingManager +instanceKlass com/mathworks/widgets/desk/DTMenuMergeTag +instanceKlass com/mathworks/services/PrefUtils +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferenceUtils +instanceKlass org/apache/xerces/impl/Constants$ArrayEnumeration +instanceKlass org/apache/xerces/impl/Constants +instanceKlass com/mathworks/mwswing/binding/ContextID +instanceKlass com/mathworks/mwswing/binding/ContextActionData +instanceKlass com/mathworks/mwswing/binding/ContextReader +instanceKlass java/util/Collections$UnmodifiableList$1 +instanceKlass com/mathworks/mwswing/binding/MetaBindingUtils +instanceKlass com/mathworks/mwswing/binding/NavigationalBindingUtils +instanceKlass java/util/LinkedList$ListItr +instanceKlass com/mathworks/util/InitializationHelper +instanceKlass com/mathworks/util/InitializeBeforeAccess +instanceKlass org/apache/xerces/util/XMLSymbols +instanceKlass org/apache/xerces/util/XMLChar +instanceKlass org/apache/xerces/xni/parser/XMLInputSource +instanceKlass org/xml/sax/InputSource +instanceKlass org/apache/xerces/util/ErrorHandlerWrapper +instanceKlass com/mathworks/xml/EncodingParser$QuietErrorHandler +instanceKlass org/apache/xerces/parsers/AbstractSAXParser$AttributesProxy +instanceKlass org/xml/sax/ext/Attributes2 +instanceKlass org/apache/xerces/impl/msg/XMLMessageFormatter +instanceKlass org/apache/xerces/impl/XMLVersionDetector +instanceKlass org/apache/xerces/impl/validation/ValidationManager +instanceKlass org/apache/xerces/impl/dv/dtd/NMTOKENDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/NOTATIONDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ENTITYDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/ListDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDREFDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/IDDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/dtd/StringDatatypeValidator +instanceKlass org/apache/xerces/impl/dv/DatatypeValidator +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$2 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport$1 +instanceKlass org/apache/xerces/impl/dv/SecuritySupport +instanceKlass org/apache/xerces/impl/dv/ObjectFactory +instanceKlass org/apache/xerces/impl/dv/DTDDVFactory +instanceKlass org/apache/xerces/impl/dtd/DTDGrammarBucket +instanceKlass org/apache/xerces/impl/dtd/XMLAttributeDecl +instanceKlass org/apache/xerces/impl/dtd/XMLSimpleType +instanceKlass org/apache/xerces/impl/dtd/XMLElementDecl +instanceKlass org/apache/xerces/impl/validation/ValidationState +instanceKlass org/apache/xerces/impl/dv/ValidationContext +instanceKlass org/apache/xerces/impl/dtd/DTDGrammar +instanceKlass org/apache/xerces/xni/grammars/Grammar +instanceKlass org/apache/xerces/impl/validation/EntityState +instanceKlass org/apache/xerces/impl/dtd/XMLEntityDecl +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$TrailingMiscDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$DTDDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$PrologDispatcher +instanceKlass org/apache/xerces/impl/XMLDocumentScannerImpl$XMLDeclDispatcher +instanceKlass org/apache/xerces/util/NamespaceSupport +instanceKlass org/apache/xerces/util/XMLAttributesImpl$Attribute +instanceKlass org/apache/xerces/util/XMLAttributesImpl +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$FragmentContentDispatcher +instanceKlass org/apache/xerces/xni/QName +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$ElementStack +instanceKlass org/apache/xerces/xni/grammars/XMLDTDDescription +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarDescription +instanceKlass org/apache/xerces/impl/XMLDocumentFragmentScannerImpl$Dispatcher +instanceKlass org/apache/xerces/xni/XMLAttributes +instanceKlass org/apache/xerces/xni/XMLString +instanceKlass org/apache/xerces/impl/XMLErrorReporter +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBuffer +instanceKlass org/apache/xerces/impl/XMLEntityManager$CharacterBufferPool +instanceKlass org/apache/xerces/impl/XMLEntityManager$ByteBufferPool +instanceKlass org/apache/xerces/util/AugmentationsImpl$AugmentationsItemsContainer +instanceKlass org/apache/xerces/util/AugmentationsImpl +instanceKlass org/apache/xerces/util/XMLResourceIdentifierImpl +instanceKlass org/apache/xerces/impl/XMLEntityManager$1 +instanceKlass org/apache/xerces/xni/Augmentations +instanceKlass org/apache/xerces/impl/XMLEntityScanner +instanceKlass org/apache/xerces/xni/XMLResourceIdentifier +instanceKlass org/apache/xerces/impl/XMLEntityManager$Entity +instanceKlass org/apache/xerces/impl/XMLEntityManager +instanceKlass org/apache/xerces/util/SymbolTable$Entry +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarPool +instanceKlass org/apache/xerces/util/SymbolTable +instanceKlass org/apache/xerces/xni/NamespaceContext +instanceKlass org/apache/xerces/xni/XMLLocator +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidator +instanceKlass org/apache/xerces/impl/RevalidationHandler +instanceKlass org/apache/xerces/xni/grammars/XMLGrammarLoader +instanceKlass org/apache/xerces/impl/dtd/XMLDTDProcessor +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDFilter +instanceKlass org/apache/xerces/xni/parser/XMLDTDScanner +instanceKlass org/apache/xerces/util/MessageFormatter +instanceKlass org/apache/xerces/impl/XMLScanner +instanceKlass org/apache/xerces/impl/XMLEntityHandler +instanceKlass org/apache/xerces/impl/dtd/XMLDTDValidatorFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentFilter +instanceKlass org/apache/xerces/xni/parser/XMLDocumentScanner +instanceKlass org/apache/xerces/xni/parser/XMLDocumentSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDContentModelSource +instanceKlass org/apache/xerces/xni/parser/XMLDTDSource +instanceKlass org/apache/xerces/xni/parser/XMLComponent +instanceKlass org/apache/xerces/util/ParserConfigurationSettings +instanceKlass org/apache/xerces/parsers/XML11Configurable +instanceKlass org/apache/xerces/xni/parser/XMLPullParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLParserConfiguration +instanceKlass org/apache/xerces/xni/parser/XMLComponentManager +instanceKlass org/apache/xerces/parsers/SecuritySupport$6 +instanceKlass org/apache/xerces/parsers/SecuritySupport$7 +instanceKlass org/apache/xerces/parsers/SecuritySupport$4 +instanceKlass org/apache/xerces/parsers/SecuritySupport$2 +instanceKlass org/apache/xerces/parsers/SecuritySupport$1 +instanceKlass org/apache/xerces/parsers/SecuritySupport +instanceKlass org/apache/xerces/parsers/ObjectFactory +instanceKlass org/xml/sax/helpers/LocatorImpl +instanceKlass org/xml/sax/Locator +instanceKlass org/xml/sax/Attributes +instanceKlass org/xml/sax/AttributeList +instanceKlass org/apache/xerces/xni/parser/XMLErrorHandler +instanceKlass org/apache/xerces/xni/parser/XMLEntityResolver +instanceKlass org/apache/xerces/parsers/XMLParser +instanceKlass org/apache/xerces/xni/XMLDTDContentModelHandler +instanceKlass org/apache/xerces/xni/XMLDTDHandler +instanceKlass org/apache/xerces/xni/XMLDocumentHandler +instanceKlass org/xml/sax/XMLReader +instanceKlass org/xml/sax/Parser +instanceKlass org/apache/xerces/xs/PSVIProvider +instanceKlass javax/xml/transform/Source +instanceKlass javax/xml/transform/Result +instanceKlass org/xml/sax/EntityResolver +instanceKlass org/xml/sax/ErrorHandler +instanceKlass org/xml/sax/ContentHandler +instanceKlass com/mathworks/xml/XMLUtils +instanceKlass org/apache/commons/io/IOUtils +instanceKlass com/mathworks/mwswing/binding/KeyBindingReaderUtils +instanceKlass com/mathworks/mwswing/binding/ActionDataReader +instanceKlass com/mathworks/services/binding/MatlabKeyBindingPreferences +instanceKlass com/mathworks/mwswing/binding/ActionDataID +instanceKlass com/mathworks/mwswing/binding/DefaultKeyBindingSetID +instanceKlass com/mathworks/mwswing/binding/AbstractNamedUniqueID +instanceKlass com/mathworks/mwswing/binding/UniqueID +instanceKlass com/mathworks/mwswing/binding/KeyBindingManager +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerRegistry +instanceKlass com/mathworks/services/binding/KeyBindingPreferences +instanceKlass com/mathworks/services/binding/MatlabKeyBindings +instanceKlass com/mathworks/mwswing/MJToolBar$LocalContainerListener +instanceKlass javax/accessibility/AccessibleRelationSet +instanceKlass javax/accessibility/AccessibleContext$1 +instanceKlass sun/awt/AWTAccessor$AccessibleContextAccessor +instanceKlass javax/accessibility/AccessibleExtendedComponent +instanceKlass javax/accessibility/AccessibleComponent +instanceKlass javax/accessibility/AccessibleText +instanceKlass javax/accessibility/AccessibleValue +instanceKlass javax/accessibility/AccessibleAction +instanceKlass com/mathworks/mwswing/MJToolBar$2 +instanceKlass java/beans/VetoableChangeListener +instanceKlass javax/swing/plaf/basic/BasicButtonListener +instanceKlass javax/swing/AbstractButton$Handler +instanceKlass javax/swing/DefaultButtonModel +instanceKlass javax/swing/ButtonModel +instanceKlass com/mathworks/mwswing/Painter +instanceKlass com/mathworks/mwswing/MJButton$LocalHierarchyListener +instanceKlass java/awt/VKCollection +instanceKlass javax/swing/plaf/basic/BasicToolBarUI$Handler +instanceKlass javax/swing/event/MouseInputListener +instanceKlass com/sun/java/swing/plaf/windows/WindowsBorders +instanceKlass javax/swing/BoxLayout +instanceKlass javax/swing/JToolBar$DefaultToolBarLayout +instanceKlass com/mathworks/mwswing/CellViewerCustomizer +instanceKlass javax/swing/event/PopupMenuListener +instanceKlass com/mathworks/hg/peer/FigurePeer$BreakpointDispatch +instanceKlass com/mathworks/hg/peer/EchoEvent +instanceKlass com/mathworks/hg/peer/EchoListener +instanceKlass com/mathworks/hg/peer/Echo +instanceKlass com/mathworks/hg/peer/event/ToolbuttonListener +instanceKlass com/mathworks/hg/peer/AbstractToolbuttonPeer +instanceKlass com/mathworks/hg/peer/ToolbarPeer +instanceKlass com/mathworks/hg/peer/AbstractSplitButtonPeer +instanceKlass com/mathworks/hg/peer/ContextMenuPeer +instanceKlass com/mathworks/hg/peer/event/UiMenuListener +instanceKlass com/mathworks/hg/peer/utils/MatlabIconComponent +instanceKlass com/mathworks/hg/peer/MenuPeer +instanceKlass com/mathworks/hg/peer/FigurePeerAcceleratorKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerPaintListener +instanceKlass com/mathworks/hg/peer/FigurePeerKeyListener +instanceKlass com/mathworks/hg/peer/FigurePeerFocusListener +instanceKlass com/mathworks/hg/peer/FigurePeerMouseListener +instanceKlass com/mathworks/hg/peer/FigurePeerComponentListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowListener +instanceKlass com/mathworks/hg/peer/FigureNotification +instanceKlass com/mathworks/hg/peer/FigureComponentProxy +instanceKlass com/mathworks/hg/peer/CanvasComponentCreationListener +instanceKlass com/mathworks/jmi/Callback +instanceKlass com/mathworks/hg/peer/AbstractUicontrolPeer +instanceKlass com/mathworks/hg/types/GUIDEViewProvider +instanceKlass com/mathworks/hg/peer/CallbackTrigger +instanceKlass com/mathworks/hg/UicontrolPeer +instanceKlass com/mathworks/hg/BaseControl +instanceKlass com/mathworks/hg/peer/AxisComponent +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStateListener +instanceKlass com/mathworks/hg/peer/FigurePeerWindowStyleListener +instanceKlass com/mathworks/hg/peer/FigurePeerScrollWheelListener +instanceKlass com/mathworks/hg/peer/FigurePeerButtonMotionListener +instanceKlass com/mathworks/hg/peer/FigureChild +instanceKlass java/util/TreeMap$PrivateEntryIterator +instanceKlass sun/reflect/annotation/AnnotationParser +instanceKlass java/beans/Transient +instanceKlass com/sun/beans/WildcardTypeImpl +instanceKlass sun/reflect/generics/tree/MethodTypeSignature +instanceKlass sun/reflect/generics/tree/Wildcard +instanceKlass sun/reflect/generics/tree/BottomSignature +instanceKlass com/sun/beans/TypeResolver +instanceKlass java/beans/MethodRef +instanceKlass com/sun/beans/util/Cache$CacheEntry +instanceKlass com/sun/beans/util/Cache +instanceKlass com/sun/beans/finder/AbstractFinder +instanceKlass java/beans/SimpleBeanInfo +instanceKlass com/sun/beans/finder/ClassFinder +instanceKlass java/beans/BeanInfo +instanceKlass com/sun/beans/finder/InstanceFinder +instanceKlass java/beans/WeakIdentityMap +instanceKlass java/beans/ThreadGroupContext +instanceKlass java/beans/FeatureDescriptor +instanceKlass com/sun/beans/WeakCache +instanceKlass java/beans/Introspector +instanceKlass com/mathworks/hg/peer/LightWeightManager +instanceKlass com/mathworks/hg/peer/FigureFrameProxyBase +instanceKlass com/mathworks/hg/peer/PositionableFigureClient +instanceKlass com/mathworks/hg/peer/FigureEditableComponent +instanceKlass javax/swing/event/AncestorListener +instanceKlass com/mathworks/hg/peer/event/HGSendPollable +instanceKlass com/mathworks/jmi/bean/Coalesceable +instanceKlass com/mathworks/hg/util/HGPeerRunnable +instanceKlass com/mathworks/hg/peer/FigureJavaComponentListener$FigureJavaComponentSizeListener +instanceKlass com/mathworks/hg/peer/FigurePeer +instanceKlass com/mathworks/hg/peer/UIComponentParentWithLayout +instanceKlass com/mathworks/hg/peer/UIComponentParent +instanceKlass com/mathworks/hg/peer/FigureValidator +instanceKlass com/mathworks/hg/peer/FigureNotificationHandler +instanceKlass com/mathworks/hg/util/HGPeerQueueUser +instanceKlass com/mathworks/widgets/desk/DTGroupProperty$1 +instanceKlass com/mathworks/widgets/desk/DTGroupBase +instanceKlass com/mathworks/jmi/ClassLoaderManager +instanceKlass com/mathworks/mwswing/BorderUtils +instanceKlass javax/swing/plaf/basic/BasicHTML +instanceKlass java/awt/Component$3 +instanceKlass sun/reflect/ClassDefiner$1 +instanceKlass sun/reflect/ClassDefiner +instanceKlass sun/reflect/MethodAccessorGenerator$1 +instanceKlass sun/reflect/Label$PatchInfo +instanceKlass sun/reflect/Label +instanceKlass sun/reflect/UTF8 +instanceKlass sun/reflect/ClassFileAssembler +instanceKlass sun/reflect/ByteVectorImpl +instanceKlass sun/reflect/ByteVector +instanceKlass sun/reflect/ByteVectorFactory +instanceKlass sun/reflect/AccessorGenerator +instanceKlass sun/reflect/ClassFileConstants +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager$1 +instanceKlass com/mathworks/widgets/desk/DTClient$LocationListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$State +instanceKlass com/mathworks/widgets/desk/TargetedAction +instanceKlass javax/swing/event/MenuListener +instanceKlass com/mathworks/widgets/desk/DTDocumentArranger +instanceKlass com/mathworks/widgets/desk/DTDocumentTabsProperties$Listener +instanceKlass com/mathworks/mwswing/MJAbstractAction$1 +instanceKlass com/mathworks/mwswing/binding/KeyStrokeList +instanceKlass com/mathworks/widgets/desk/DTNestingContainer$TreeState +instanceKlass java/awt/event/KeyEvent$1 +instanceKlass sun/awt/AWTAccessor$KeyEventAccessor +instanceKlass com/mathworks/mwswing/binding/KeyStrokeUtils +instanceKlass javax/swing/ArrayTable +instanceKlass com/mathworks/mwswing/ActionUtils +instanceKlass com/mathworks/mwswing/binding/ExtendedActionBridge +instanceKlass com/mathworks/mwswing/KeyControlledDragger +instanceKlass java/awt/TrayIcon +instanceKlass com/mathworks/widgets/desk/DTDropTarget +instanceKlass java/awt/MenuComponent +instanceKlass java/awt/EventQueue$3 +instanceKlass sun/awt/dnd/SunDragSourceContextPeer +instanceKlass java/awt/dnd/peer/DragSourceContextPeer +instanceKlass sun/awt/EventQueueDelegate +instanceKlass java/awt/ModalEventFilter +instanceKlass java/awt/EventDispatchThread$HierarchyEventFilter +instanceKlass java/awt/EventFilter +instanceKlass java/awt/EventDispatchThread$1 +instanceKlass java/awt/Conditional +instanceKlass com/mathworks/mlwidgets/util/MatlabDropTargetListener +instanceKlass java/awt/EventQueue$5 +instanceKlass java/awt/event/InvocationEvent$1 +instanceKlass sun/awt/AWTAccessor$InvocationEventAccessor +instanceKlass java/awt/ActiveEvent +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy$1 +instanceKlass com/mathworks/widgets/desk/DTGroup$LocationListener +instanceKlass java/awt/event/ComponentAdapter +instanceKlass com/mathworks/mwswing/SimpleDOMParser +instanceKlass com/sun/java/swing/SwingUtilities3 +instanceKlass javax/swing/RepaintManager$ProcessingRunnable +instanceKlass sun/reflect/misc/Trampoline +instanceKlass sun/reflect/misc/MethodUtil$1 +instanceKlass java/awt/FlowLayout +instanceKlass com/mathworks/widgets/grouptable/transfer/ReceiveHandler +instanceKlass com/mathworks/widgets/grouptable/transfer/SendHandler +instanceKlass com/mathworks/mwswing/ExtendedButton +instanceKlass com/mathworks/mwswing/PopupMenuCustomizer +instanceKlass com/mathworks/widgets/grouptable/Affordance +instanceKlass com/mathworks/widgets/grouptable/ExpansionProvider +instanceKlass com/mathworks/widgets/grouptable/TableConfigurationSerializer +instanceKlass com/mathworks/widgets/grouptable/GroupingTableSelectionListener +instanceKlass com/mathworks/mlwidgets/explorer/model/navigation/NavigationListener +instanceKlass com/mathworks/mlwidgets/explorer/widgets/address/TitleChangeListener +instanceKlass com/mathworks/mlwidgets/explorer/util/ComponentInjector +instanceKlass com/jidesoft/grid/IndexChangeListener +instanceKlass com/jidesoft/grid/TableAdapter +instanceKlass com/jidesoft/grid/SortListener +instanceKlass com/mathworks/mwswing/table/SortedTable +instanceKlass com/mathworks/matlab/api/explorer/ActionInputSource +instanceKlass com/mathworks/matlab/api/explorer/FileSystem +instanceKlass com/mathworks/mde/desk/DesktopExplorerAdapterImpl +instanceKlass com/mathworks/mde/desk/MLDesktop$doMatlabStatus +instanceKlass com/mathworks/widgets/desk/DTToolBarConfiguration +instanceKlass com/mathworks/widgets/desk/DTPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTProperty +instanceKlass javax/swing/AbstractAction +instanceKlass com/mathworks/widgets/desk/DTGroupPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTWindowRegistry +instanceKlass com/mathworks/widgets/desk/DefaultViewTabFactory +instanceKlass com/mathworks/toolstrip/accessories/QuickAccessToolBar +instanceKlass javax/swing/ActionMap +instanceKlass com/mathworks/widgets/desk/DTMainToolBarSupplier +instanceKlass com/mathworks/widgets/desk/RecentFiles +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration +instanceKlass com/mathworks/toolstrip/factory/TSToolSetContents$Listener +instanceKlass org/w3c/dom/Element +instanceKlass org/w3c/dom/Document +instanceKlass com/mathworks/mde/desk/MLDesktop$MatlabReadyListener +instanceKlass com/mathworks/widgets/desk/DTLayoutLibrary +instanceKlass com/mathworks/mwswing/SimpleNode +instanceKlass com/mathworks/widgets/desk/DTLazyPropertyProvider +instanceKlass com/mathworks/widgets/desk/DTClientPropertyProvider +instanceKlass com/mathworks/mde/liveeditor/ToolstripManager +instanceKlass com/mathworks/mde/editor/debug/ToolstripRefresher +instanceKlass com/mathworks/widgets/desk/DTRecoverable +instanceKlass com/mathworks/toolstrip/factory/TSRegistry +instanceKlass com/mathworks/mde/desk/MLDesktopShutdownHelper +instanceKlass com/mathworks/mde/desk/MLDesktop$DesktopStatusPauseObserver +instanceKlass com/mathworks/widgets/desk/DeferredDesktopFacade +instanceKlass com/mathworks/widgets/desk/Desktop$DeferredFacadeProxy +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry +instanceKlass com/mathworks/widgets/desk/DTGlobalActionManager +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$1 +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalLocationListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager$LocalArrangementListener +instanceKlass com/mathworks/widgets/desk/DTGroupAdapter +instanceKlass com/mathworks/widgets/desk/DTClientAdapter +instanceKlass com/mathworks/widgets/desk/DTLocation$Listener +instanceKlass com/mathworks/widgets/desk/DTGroupListener +instanceKlass com/mathworks/widgets/desk/DTClientListener +instanceKlass com/mathworks/widgets/desk/DTLayoutSaveManager +instanceKlass com/mathworks/desktop/attr/AttributeChangeListener +instanceKlass com/mathworks/desktop/attr/Attribute +instanceKlass com/mathworks/widgets/desk/DTSelectionManager +instanceKlass javax/swing/TimerQueue$DelayedTimer +instanceKlass java/util/concurrent/Delayed +instanceKlass javax/swing/TimerQueue$1 +instanceKlass javax/swing/TimerQueue +instanceKlass com/mathworks/ddux/JSBridge$1 +instanceKlass com/mathworks/messageservice/Subscriber +instanceKlass com/mathworks/ddux/JSBridge +instanceKlass com/mathworks/mvm/eventmgr/EventListening +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr +instanceKlass com/mathworks/mvm/MvmSession +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks$1 +instanceKlass com/mathworks/matlab/environment/context/Util +instanceKlass com/mathworks/addons_common/util/MatlabPlatformUtil +instanceKlass com/mathworks/addons/launchers/TriggerAddOnsStartUpTasks +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer$1 +instanceKlass com/mathworks/util/DeleteOnExitShutdownInitializer +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFacade +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistryFactory +instanceKlass com/google/gson/internal/$Gson$Types$ParameterizedTypeImpl +instanceKlass sun/reflect/generics/reflectiveObjects/LazyReflectiveObjectGenerator +instanceKlass java/lang/reflect/TypeVariable +instanceKlass sun/reflect/generics/reflectiveObjects/ParameterizedTypeImpl +instanceKlass com/mathworks/connector/client_services/UserManagerImpl$SupportedProducts +instanceKlass sun/reflect/generics/visitor/Reifier +instanceKlass sun/reflect/generics/visitor/TypeTreeVisitor +instanceKlass sun/reflect/generics/tree/ClassSignature +instanceKlass sun/reflect/generics/tree/Signature +instanceKlass sun/reflect/generics/tree/ClassTypeSignature +instanceKlass sun/reflect/generics/tree/SimpleClassTypeSignature +instanceKlass sun/reflect/generics/tree/FieldTypeSignature +instanceKlass sun/reflect/generics/tree/BaseType +instanceKlass sun/reflect/generics/tree/TypeSignature +instanceKlass sun/reflect/generics/tree/ReturnType +instanceKlass sun/reflect/generics/tree/TypeArgument +instanceKlass sun/reflect/generics/tree/FormalTypeParameter +instanceKlass sun/reflect/generics/tree/TypeTree +instanceKlass sun/reflect/generics/tree/Tree +instanceKlass sun/reflect/generics/parser/SignatureParser +instanceKlass sun/reflect/generics/factory/CoreReflectionFactory +instanceKlass sun/reflect/generics/factory/GenericsFactory +instanceKlass sun/reflect/generics/scope/AbstractScope +instanceKlass sun/reflect/generics/scope/Scope +instanceKlass com/mathworks/connector/client_services/UserManagerImpl +instanceKlass com/mathworks/matlabserver/internalservices/workersecurity/UserManager +instanceKlass com/mathworks/connector/client_services/ClientCommandWindowServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientCommandWindowService +instanceKlass com/mathworks/connector/client_services/ClientBrowserServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientBrowserService +instanceKlass com/mathworks/connector/client_services/ClientEditorServiceImpl +instanceKlass com/mathworks/matlabserver/workercommon/client/services/ClientEditorService +instanceKlass com/mathworks/matlabserver/workercommon/client/services/MessageProducer +instanceKlass com/mathworks/matlabserver/workercommon/client/impl/ClientServiceRegistryImpl +instanceKlass com/mathworks/matlabserver/connector/api/ConnectorLifecycleHelper +instanceKlass com/mathworks/connector/json/impl/JsonDeserializationServiceProvider +instanceKlass com/mathworks/connector/json/impl/JsonSerializationServiceProvider +instanceKlass com/mathworks/connector/MessageBase +instanceKlass com/google/gson/TreeTypeAdapter$SingleTypeFactory +instanceKlass com/google/gson/internal/$Gson$Types$GenericArrayTypeImpl +instanceKlass java/lang/reflect/ParameterizedType +instanceKlass java/lang/reflect/GenericArrayType +instanceKlass java/lang/reflect/WildcardType +instanceKlass com/google/gson/internal/$Gson$Types +instanceKlass com/google/gson/reflect/TypeToken +instanceKlass com/google/gson/InstanceCreator +instanceKlass com/google/gson/internal/$Gson$Preconditions +instanceKlass com/google/gson/JsonSerializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl$GenericMessageDeserializer +instanceKlass com/google/gson/JsonDeserializer +instanceKlass com/mathworks/connector/json/impl/JsonSerializerImpl +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory$BoundField +instanceKlass com/google/gson/internal/bind/ReflectiveTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/MapTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/CollectionTypeAdapterFactory +instanceKlass com/google/gson/internal/bind/ArrayTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/SqlDateTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TimeTypeAdapter$1 +instanceKlass java/util/Date +instanceKlass com/google/gson/internal/bind/DateTypeAdapter$1 +instanceKlass java/text/Format +instanceKlass com/google/gson/internal/bind/ObjectTypeAdapter$1 +instanceKlass com/google/gson/internal/bind/TypeAdapters$26 +instanceKlass com/google/gson/internal/bind/TypeAdapters$30 +instanceKlass com/google/gson/internal/bind/TypeAdapters$22 +instanceKlass java/util/UUID +instanceKlass com/google/gson/internal/bind/TypeAdapters$31 +instanceKlass com/google/gson/internal/bind/TypeAdapters$29 +instanceKlass com/google/gson/internal/bind/TypeAdapters$28 +instanceKlass com/google/gson/internal/bind/TypeAdapters +instanceKlass com/google/gson/internal/ObjectConstructor +instanceKlass com/google/gson/internal/ConstructorConstructor +instanceKlass com/google/gson/Gson$2 +instanceKlass com/google/gson/Gson$1 +instanceKlass com/google/gson/JsonSerializationContext +instanceKlass com/google/gson/JsonDeserializationContext +instanceKlass com/google/gson/stream/JsonReader +instanceKlass com/google/gson/stream/JsonWriter +instanceKlass com/google/gson/Gson +instanceKlass com/google/gson/JsonElement +instanceKlass com/google/gson/TypeAdapter +instanceKlass com/google/gson/internal/Excluder +instanceKlass com/google/gson/TypeAdapterFactory +instanceKlass com/google/gson/FieldNamingStrategy +instanceKlass com/google/gson/GsonBuilder +instanceKlass com/mathworks/cosg/CosgRegistryFactory +instanceKlass com/mathworks/connector/Message +instanceKlass com/mathworks/connector/cosg/impl/CosgRegistryImpl +instanceKlass com/mathworks/connector/Address +instanceKlass com/mathworks/connector/impl/ContextImpl +instanceKlass com/mathworks/cosg/CosgRegistry +instanceKlass com/mathworks/connector/cosg/impl/CosgServiceProvider +instanceKlass com/mathworks/messageservice/builders/MessageServiceBuilder +instanceKlass com/mathworks/connector/Future$Continuation +instanceKlass com/mathworks/connector/native_bridge/impl/NativeBridgeServiceProvider +instanceKlass com/mathworks/connector/Context +instanceKlass com/mathworks/connector/impl/ConnectorImpl +instanceKlass com/mathworks/matlabserver/connector/api/Server +instanceKlass com/mathworks/matlabserver/connector/util/SessionNonceHelper +instanceKlass com/mathworks/cosg/CosgMessageHandler +instanceKlass com/mathworks/connector/json/JsonSerializer +instanceKlass com/mathworks/connector/native_bridge/NativeBridge +instanceKlass com/mathworks/connector/ServiceProvider +instanceKlass com/mathworks/connector/Connector +instanceKlass com/mathworks/matlabserver/workercommon/client/ClientServiceRegistry +instanceKlass com/mathworks/connector/message_service/api/JniMessageServiceAdaptor +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost$1 +instanceKlass com/mathworks/connector/standalone_host/StandaloneHost +instanceKlass com/mathworks/matlabserver/connector/api/Connector +instanceKlass com/mathworks/matlabserver/connector/api/AutoStart +instanceKlass com/mathworks/jmi/MatlabPath$PathCallback +instanceKlass com/mathworks/services/message/MWHandler +instanceKlass com/mathworks/jmi/MatlabMCR +instanceKlass com/mathworks/jmi/MatlabPath +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder$1 +instanceKlass com/mathworks/mlwidgets/prefs/InitialWorkingFolder +instanceKlass com/mathworks/toolstrip/plaf/ToolstripTheme +instanceKlass javax/swing/text/ViewFactory +instanceKlass com/mathworks/toolstrip/plaf/TSComponentUI +instanceKlass com/mathworks/mde/desk/MLDesktop$ClientInfo +instanceKlass sun/java2d/pipe/AlphaPaintPipe$TileContext +instanceKlass java/awt/ColorPaintContext +instanceKlass java/awt/PaintContext +instanceKlass com/mathworks/mwswing/ColorUtils +instanceKlass com/mathworks/mwswing/IconUtils +instanceKlass com/mathworks/mwswing/ContrastingIcon +instanceKlass com/mathworks/mwswing/ExtendedAction +instanceKlass com/mathworks/widgets/desk/DTUtilities +instanceKlass java/lang/StrictMath +instanceKlass java/io/RandomAccessFile$1 +instanceKlass javax/imageio/metadata/IIOMetadata +instanceKlass javax/imageio/stream/FileCacheImageInputStream$StreamDisposerRecord +instanceKlass com/sun/imageio/stream/StreamCloser$2 +instanceKlass com/sun/imageio/stream/StreamCloser$1 +instanceKlass com/sun/imageio/stream/StreamCloser$CloseAction +instanceKlass com/sun/imageio/stream/StreamCloser +instanceKlass sun/nio/fs/WindowsChannelFactory$2 +instanceKlass sun/nio/fs/WindowsChannelFactory$Flags +instanceKlass sun/nio/fs/WindowsChannelFactory$1 +instanceKlass sun/nio/fs/WindowsChannelFactory +instanceKlass sun/nio/fs/WindowsSecurityDescriptor +instanceKlass java/nio/file/OpenOption +instanceKlass sun/nio/fs/WindowsPath$1 +instanceKlass sun/nio/fs/BasicFileAttributesHolder +instanceKlass sun/nio/fs/WindowsDirectoryStream$WindowsDirectoryIterator +instanceKlass sun/nio/fs/WindowsFileAttributes +instanceKlass java/nio/file/attribute/DosFileAttributes +instanceKlass java/nio/file/attribute/BasicFileAttributes +instanceKlass sun/nio/fs/NativeBuffer$Deallocator +instanceKlass sun/nio/fs/NativeBuffer +instanceKlass sun/nio/fs/NativeBuffers +instanceKlass sun/nio/fs/WindowsNativeDispatcher$BackupResult +instanceKlass sun/nio/fs/WindowsNativeDispatcher$CompletionStatus +instanceKlass sun/nio/fs/WindowsNativeDispatcher$AclInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$Account +instanceKlass sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace +instanceKlass sun/nio/fs/WindowsNativeDispatcher$VolumeInformation +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstStream +instanceKlass sun/nio/fs/WindowsNativeDispatcher$FirstFile +instanceKlass sun/nio/fs/WindowsNativeDispatcher$1 +instanceKlass sun/nio/fs/WindowsNativeDispatcher +instanceKlass sun/nio/fs/WindowsDirectoryStream +instanceKlass java/nio/file/DirectoryStream +instanceKlass java/nio/file/Files$AcceptAllFilter +instanceKlass java/nio/file/DirectoryStream$Filter +instanceKlass java/net/NetworkInterface$2 +instanceKlass java/net/DefaultInterface +instanceKlass java/net/InterfaceAddress +instanceKlass java/net/NetworkInterface$1 +instanceKlass java/net/NetworkInterface +instanceKlass sun/security/provider/ByteArrayAccess +instanceKlass sun/security/provider/SeedGenerator$1 +instanceKlass sun/security/provider/SeedGenerator +instanceKlass sun/security/provider/SecureRandom$SeederHolder +instanceKlass sun/security/jca/GetInstance$Instance +instanceKlass java/security/MessageDigestSpi +instanceKlass sun/security/jca/GetInstance +instanceKlass java/security/SecureRandomSpi +instanceKlass java/security/Provider$UString +instanceKlass java/security/Provider$Service +instanceKlass sun/security/provider/NativePRNG$NonBlocking +instanceKlass sun/security/provider/NativePRNG$Blocking +instanceKlass sun/security/provider/NativePRNG +instanceKlass sun/security/provider/SunEntries$1 +instanceKlass sun/security/provider/SunEntries +instanceKlass sun/security/jca/ProviderConfig$2 +instanceKlass sun/security/jca/ProviderList$2 +instanceKlass sun/misc/FDBigInteger +instanceKlass java/security/Provider$EngineDescription +instanceKlass java/security/Provider$ServiceKey +instanceKlass sun/security/jca/ProviderConfig +instanceKlass sun/security/jca/ProviderList +instanceKlass sun/security/jca/Providers +instanceKlass java/util/Random +instanceKlass sun/nio/fs/AbstractPath +instanceKlass java/net/URI$Parser +instanceKlass java/net/URI +instanceKlass sun/nio/fs/Util +instanceKlass sun/nio/fs/WindowsPathParser$Result +instanceKlass sun/nio/fs/WindowsPathParser +instanceKlass java/nio/file/FileSystem +instanceKlass java/nio/file/spi/FileSystemProvider +instanceKlass sun/nio/fs/DefaultFileSystemProvider +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder$1 +instanceKlass java/nio/file/FileSystems$DefaultFileSystemHolder +instanceKlass java/nio/file/FileSystems +instanceKlass java/nio/file/Paths +instanceKlass java/nio/file/TempFileHelper +instanceKlass java/nio/file/Files +instanceKlass javax/imageio/stream/ImageInputStreamImpl +instanceKlass javax/imageio/ImageIO$CacheInfo +instanceKlass javax/imageio/ImageIO$ImageReaderIterator +instanceKlass javax/imageio/spi/FilterIterator +instanceKlass javax/imageio/spi/PartialOrderIterator +instanceKlass javax/imageio/ImageIO$ContainsFilter +instanceKlass javax/imageio/spi/ServiceRegistry$Filter +instanceKlass javax/imageio/ImageTypeSpecifier +instanceKlass javax/imageio/ImageWriter +instanceKlass javax/imageio/ImageTranscoder +instanceKlass javax/imageio/metadata/IIOMetadataFormat +instanceKlass javax/imageio/ImageReader +instanceKlass javax/imageio/spi/IIORegistry$1 +instanceKlass com/sun/imageio/plugins/jpeg/JPEG +instanceKlass javax/imageio/stream/ImageOutputStream +instanceKlass javax/imageio/spi/DigraphNode +instanceKlass javax/imageio/stream/ImageInputStream +instanceKlass javax/imageio/spi/SubRegistry +instanceKlass javax/imageio/spi/IIOServiceProvider +instanceKlass javax/imageio/spi/RegisterableService +instanceKlass javax/imageio/spi/ServiceRegistry +instanceKlass javax/imageio/ImageIO +instanceKlass org/apache/batik/transcoder/TranscoderOutput +instanceKlass com/mathworks/util/IconUtils +instanceKlass com/mathworks/widgets/desk/DTToolstripFactory +instanceKlass com/mathworks/toolstrip/components/PopupListener +instanceKlass com/mathworks/widgets/desk/ToolstripInfoRegistrar +instanceKlass com/mathworks/widgets/incSearch/IncSearchInterface +instanceKlass java/awt/dnd/Autoscroll +instanceKlass com/mathworks/mvm/eventmgr/MvmListener +instanceKlass com/mathworks/mde/desk/ContributedToolsLoader$DoneListener +instanceKlass javax/swing/InputMap +instanceKlass com/mathworks/services/PrefListener +instanceKlass com/mathworks/widgets/desk/RecentFiles$Opener +instanceKlass com/mathworks/widgets/desk/RecentFiles$IconSupplier +instanceKlass com/mathworks/widgets/desk/MacScreenMenuProxy +instanceKlass com/mathworks/widgets/desk/DTMnemonicsProvider +instanceKlass com/mathworks/desktop/mnemonics/MnemonicsProvider +instanceKlass com/mathworks/util/Predicate +instanceKlass com/mathworks/mde/liveeditor/widget/rtc/DocumentListener +instanceKlass com/mathworks/matlab/api/explorer/NewFileTemplate +instanceKlass com/mathworks/mlservices/MatlabPauseObserver +instanceKlass com/mathworks/explorer/DesktopExplorerAdapter +instanceKlass com/mathworks/mwswing/ControlKeyOverride +instanceKlass com/mathworks/mwswing/MJTiledPane$GridListener +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction$DoneListener +instanceKlass com/mathworks/widgets/desk/DTDocumentContainer$ArrangementListener +instanceKlass com/mathworks/mwswing/modality/ModalParticipant +instanceKlass com/mathworks/util/HWndProvider +instanceKlass java/io/Externalizable +instanceKlass org/w3c/dom/Node +instanceKlass com/mathworks/toolstrip/factory/QuickAccessConfiguration$ChangeListener +instanceKlass com/mathworks/widgets/desk/DTCloseTransaction +instanceKlass com/mathworks/widgets/desk/DTCloseReplyListener +instanceKlass com/mathworks/widgets/desk/DTLocation +instanceKlass com/mathworks/widgets/desk/DTMenuContributor +instanceKlass com/mathworks/widgets/desk/DTContainer +instanceKlass com/mathworks/widgets/desk/DTToolBarContainer$Listener +instanceKlass com/mathworks/widgets/desk/DTOccupant +instanceKlass com/mathworks/widgets/desk/DTToolBarRegistry$Registrant +instanceKlass com/mathworks/widgets/desk/DTAsyncWindowCloser +instanceKlass com/mathworks/widgets/desk/DTWindowCloser +instanceKlass com/mathworks/widgets/desk/DTSelectable +instanceKlass com/mathworks/widgets/desk/Desktop$CallableWrapper +instanceKlass com/mathworks/mwswing/SynchronousInvokeUtility$SynchronousEvent +instanceKlass com/mathworks/widgets/desk/Desktop +instanceKlass com/mathworks/widgets/desk/DTWindowActivator +instanceKlass com/mathworks/mlservices/MatlabDesktop +instanceKlass com/mathworks/mlservices/MLExecutionListener +instanceKlass com/mathworks/toolstrip/plaf/TSLookAndFeel +instanceKlass com/mathworks/mwswing/EdtUncaughtExceptionHandler +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsCustomizer +instanceKlass com/jidesoft/plaf/basic/BasicPainter +instanceKlass com/jidesoft/plaf/basic/ThemePainter +instanceKlass com/jidesoft/plaf/vsnet/HeaderCellBorder +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$14 +instanceKlass java/util/TimSort +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$2 +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr$1 +instanceKlass sun/java2d/loops/GeneralRenderer +instanceKlass sun/java2d/loops/CustomComponent +instanceKlass sun/java2d/pipe/ValidatePipe +instanceKlass java/awt/BasicStroke +instanceKlass java/awt/Stroke +instanceKlass java/awt/AlphaComposite +instanceKlass sun/java2d/loops/XORComposite +instanceKlass java/awt/Composite +instanceKlass sun/awt/ConstrainableGraphics +instanceKlass sun/java2d/loops/GraphicsPrimitiveMgr +instanceKlass sun/java2d/loops/GraphicsPrimitive +instanceKlass sun/java2d/loops/CompositeType +instanceKlass sun/java2d/DefaultDisposerRecord +instanceKlass sun/java2d/loops/RenderLoops +instanceKlass sun/awt/image/BufImgSurfaceData$ICMColorData +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$13 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$12 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$11 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$10 +instanceKlass com/jidesoft/chart/Product +instanceKlass com/jidesoft/shortcut/Product +instanceKlass com/jidesoft/wizard/Product +instanceKlass com/jidesoft/grid/Product +instanceKlass com/jidesoft/document/Product +instanceKlass com/jidesoft/action/Product +instanceKlass com/jidesoft/docking/Product +instanceKlass sun/awt/image/GifFrame +instanceKlass java/awt/Graphics +instanceKlass com/jidesoft/icons/IconsFactory +instanceKlass com/jidesoft/icons/JideIconsFactory +instanceKlass javax/swing/plaf/BorderUIResource +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory$CheckBoxIcon +instanceKlass com/jidesoft/plaf/windows/WindowsIconFactory +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$9 +instanceKlass com/jidesoft/plaf/basic/Painter +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$8 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$7 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$6 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$5 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$4 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$3 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$2 +instanceKlass com/jidesoft/plaf/vsnet/VsnetWindowsUtils$1 +instanceKlass com/jidesoft/plaf/ExtWindowsDesktopProperty +instanceKlass com/jidesoft/swing/JideSwingUtilities$10 +instanceKlass com/jidesoft/utils/SystemInfo$JavaVersion +instanceKlass com/jidesoft/utils/SystemInfo +instanceKlass com/jidesoft/utils/SecurityUtils +instanceKlass javax/swing/event/ChangeListener +instanceKlass com/jidesoft/dialog/ButtonNames +instanceKlass com/jidesoft/dialog/ButtonListener +instanceKlass javax/swing/event/RowSorterListener +instanceKlass javax/swing/event/CellEditorListener +instanceKlass javax/swing/event/ListSelectionListener +instanceKlass javax/swing/event/TableColumnModelListener +instanceKlass javax/swing/event/TableModelListener +instanceKlass javax/swing/table/TableModel +instanceKlass com/jidesoft/swing/JideSwingUtilities$Handler +instanceKlass com/jidesoft/swing/JideSwingUtilities$GetHandler +instanceKlass com/jidesoft/swing/JideSwingUtilities +instanceKlass com/jidesoft/plaf/WindowsDesktopProperty +instanceKlass com/jidesoft/plaf/vsnet/ConvertListener +instanceKlass com/jidesoft/plaf/basic/BasicLookAndFeelExtension +instanceKlass com/jidesoft/plaf/LookAndFeelExtension +instanceKlass java/util/Vector$Itr +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$UIDefaultsInitializer +instanceKlass com/jidesoft/plaf/LookAndFeelFactory$1 +instanceKlass com/jidesoft/plaf/UIDefaultsLookup +instanceKlass com/jidesoft/plaf/LookAndFeelFactory +instanceKlass java/math/MutableBigInteger +instanceKlass com/jidesoft/utils/Q +instanceKlass sun/util/calendar/CalendarUtils +instanceKlass sun/util/calendar/CalendarDate +instanceKlass sun/util/locale/LanguageTag +instanceKlass sun/util/resources/LocaleData$1 +instanceKlass sun/util/resources/LocaleData +instanceKlass sun/util/locale/provider/LocaleResources +instanceKlass sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter +instanceKlass sun/util/locale/provider/SPILocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleServiceProviderPool +instanceKlass sun/util/locale/provider/CalendarDataUtility +instanceKlass java/util/Calendar$Builder +instanceKlass sun/util/locale/provider/JRELocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/LocaleDataMetaInfo +instanceKlass sun/util/locale/provider/AvailableLanguageTags +instanceKlass sun/util/locale/provider/LocaleProviderAdapter$1 +instanceKlass sun/util/locale/provider/ResourceBundleBasedAdapter +instanceKlass sun/util/locale/provider/LocaleProviderAdapter +instanceKlass java/util/spi/LocaleServiceProvider +instanceKlass java/util/Locale$1 +instanceKlass java/util/TimeZone$1 +instanceKlass sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule +instanceKlass sun/util/calendar/ZoneInfoFile$1 +instanceKlass sun/util/calendar/ZoneInfoFile +instanceKlass sun/util/calendar/CalendarSystem +instanceKlass java/util/TimeZone +instanceKlass java/util/Calendar +instanceKlass javax/swing/RootPaneContainer +instanceKlass javax/swing/WindowConstants +instanceKlass com/jidesoft/utils/Lm +instanceKlass com/jidesoft/utils/ProductNames +instanceKlass com/mathworks/mwswing/MJStartup$2 +instanceKlass java/awt/event/KeyAdapter +instanceKlass java/awt/event/MouseMotionAdapter +instanceKlass javax/swing/ToolTipManager$stillInsideTimerAction +instanceKlass javax/swing/ToolTipManager$outsideTimerAction +instanceKlass javax/swing/Timer$DoPostEvent +instanceKlass javax/swing/event/EventListenerList +instanceKlass javax/swing/ToolTipManager$insideTimerAction +instanceKlass javax/swing/Timer +instanceKlass java/awt/event/MouseAdapter +instanceKlass java/awt/event/FocusAdapter +instanceKlass com/mathworks/mwswing/binding/KeySequenceDispatcher +instanceKlass com/mathworks/mwswing/MKeyEventDispatcher +instanceKlass com/mathworks/mwswing/BareSwingDetector +instanceKlass com/mathworks/mwswing/MJStartup$1 +instanceKlass com/mathworks/mwswing/MJStartup +instanceKlass com/mathworks/mwswing/MJStartupForDesktop$EscapeKeyHandler +instanceKlass com/mathworks/mwswing/plaf/PlafUtils$SystemColorTracker +instanceKlass sun/font/TrueTypeFont$DirectoryEntry +instanceKlass java/nio/DirectByteBuffer$Deallocator +instanceKlass sun/nio/ch/Util$BufferCache +instanceKlass sun/nio/ch/Util$2 +instanceKlass sun/nio/ch/Util +instanceKlass sun/nio/ch/IOStatus +instanceKlass sun/nio/ch/NativeThread +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel$1 +instanceKlass sun/nio/ch/FileDispatcherImpl$1 +instanceKlass sun/nio/ch/NativeDispatcher +instanceKlass sun/nio/ch/NativeThreadSet +instanceKlass java/net/Inet6Address$Inet6AddressHolder +instanceKlass java/net/InetAddress$2 +instanceKlass sun/net/spi/nameservice/NameService +instanceKlass java/net/Inet6AddressImpl +instanceKlass java/net/InetAddressImpl +instanceKlass java/net/InetAddressImplFactory +instanceKlass java/net/InetAddress$Cache +instanceKlass java/net/InetAddress$InetAddressHolder +instanceKlass java/net/InetAddress$1 +instanceKlass java/net/InetAddress +instanceKlass sun/nio/ch/IOUtil$1 +instanceKlass sun/nio/ch/IOUtil +instanceKlass java/nio/file/attribute/FileAttribute +instanceKlass java/nio/channels/spi/AbstractInterruptibleChannel +instanceKlass java/nio/channels/InterruptibleChannel +instanceKlass java/nio/channels/ScatteringByteChannel +instanceKlass java/nio/channels/GatheringByteChannel +instanceKlass java/nio/channels/SeekableByteChannel +instanceKlass java/nio/channels/ByteChannel +instanceKlass java/nio/channels/WritableByteChannel +instanceKlass java/nio/channels/ReadableByteChannel +instanceKlass java/nio/channels/Channel +instanceKlass java/io/RandomAccessFile +instanceKlass sun/font/TrueTypeFont$1 +instanceKlass sun/font/TrueTypeFont$TTDisposerRecord +instanceKlass sun/font/SunFontManager$5 +instanceKlass sun/font/SunFontManager$FamilyDescription +instanceKlass sun/awt/Win32FontManager$2 +instanceKlass sun/font/SunFontManager$3 +instanceKlass sun/font/FontFamily +instanceKlass sun/font/Font2DHandle +instanceKlass sun/font/CompositeFontDescriptor +instanceKlass sun/awt/FontDescriptor +instanceKlass sun/awt/FontConfiguration +instanceKlass sun/font/SunFontManager$FontRegistrationInfo +instanceKlass sun/font/SunFontManager$2 +instanceKlass sun/awt/Win32FontManager$1 +instanceKlass sun/font/GlyphList +instanceKlass sun/font/StrikeCache$1 +instanceKlass sun/font/StrikeCache +instanceKlass sun/font/FontStrike +instanceKlass sun/font/CharToGlyphMapper +instanceKlass java/awt/geom/Path2D +instanceKlass sun/font/StrikeMetrics +instanceKlass sun/font/Font2D +instanceKlass sun/font/FontManagerNativeLibrary$1 +instanceKlass sun/font/FontManagerNativeLibrary +instanceKlass sun/font/SunFontManager$1 +instanceKlass sun/font/SunFontManager$T1Filter +instanceKlass sun/font/SunFontManager$TTFilter +instanceKlass java/io/FilenameFilter +instanceKlass sun/font/SunFontManager +instanceKlass sun/font/FontManagerForSGE +instanceKlass sun/font/FontManager +instanceKlass sun/java2d/FontSupport +instanceKlass sun/font/FontManagerFactory$1 +instanceKlass sun/font/FontManagerFactory +instanceKlass sun/font/FontUtilities$1 +instanceKlass sun/font/FontUtilities +instanceKlass org/apache/commons/lang/Validate +instanceKlass com/mathworks/mwswing/FontSize +instanceKlass com/mathworks/mwswing/FontUtils +instanceKlass com/mathworks/services/DisplayScaleFactorSetting +instanceKlass com/mathworks/util/ResolutionUtils +instanceKlass com/mathworks/mwswing/ScreenSizeChangeHandler +instanceKlass com/mathworks/cfbutils/StatEntryReceiver +instanceKlass com/mathworks/util/NativeJava +instanceKlass com/mathworks/mwswing/ExtendedInputMap +instanceKlass com/mathworks/mwswing/binding/KeyBindingManagerListener +instanceKlass javax/swing/Scrollable +instanceKlass javax/swing/Action +instanceKlass com/mathworks/mwswing/MJUtilities +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$SkinIcon +instanceKlass javax/swing/BorderFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$1 +instanceKlass java/util/EnumMap$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$RadioButtonMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$CheckBoxMenuItemIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon +instanceKlass javax/swing/plaf/basic/BasicIconFactory +instanceKlass java/awt/ItemSelectable +instanceKlass javax/swing/MenuElement +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory$VistaMenuItemCheckIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$MenuItemCheckIcon +instanceKlass sun/swing/SwingLazyValue$1 +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$VistaMenuItemCheckIconFactory +instanceKlass sun/swing/MenuItemCheckIconFactory +instanceKlass sun/util/ResourceBundleEnumeration +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$ActiveWindowsIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory$FrameButtonIcon +instanceKlass com/sun/java/swing/plaf/windows/WindowsIconFactory +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$LazyWindowsIcon +instanceKlass sun/swing/SwingUtilities2$AATextInfo +instanceKlass com/sun/java/swing/plaf/windows/XPStyle$Skin +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPColorValue$XPColorValueKey +instanceKlass com/sun/java/swing/plaf/windows/WindowsLookAndFeel$XPValue +instanceKlass com/sun/java/swing/plaf/windows/DesktopProperty +instanceKlass com/sun/java/swing/plaf/windows/WindowsTreeUI$ExpandedIcon +instanceKlass javax/swing/UIDefaults$LazyInputMap +instanceKlass javax/swing/plaf/basic/BasicLookAndFeel$2 +instanceKlass sun/swing/SwingUtilities2$2 +instanceKlass javax/swing/border/AbstractBorder +instanceKlass javax/swing/UIDefaults$ActiveValue +instanceKlass sun/swing/SwingLazyValue +instanceKlass javax/swing/UIDefaults$LazyValue +instanceKlass javax/swing/plaf/UIResource +instanceKlass java/awt/SystemColor$$Lambda$8 +instanceKlass sun/awt/AWTAccessor$SystemColorAccessor +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass com/sun/java/swing/plaf/windows/WindowsRootPaneUI$AltProcessor +instanceKlass javax/swing/plaf/ComponentUI +instanceKlass javax/swing/UIManager$2 +instanceKlass sun/awt/PaintEventDispatcher +instanceKlass sun/swing/SwingAccessor +instanceKlass javax/swing/RepaintManager$1 +instanceKlass sun/swing/SwingAccessor$RepaintManagerAccessor +instanceKlass javax/swing/RepaintManager$DisplayChangedHandler +instanceKlass javax/swing/RepaintManager +instanceKlass javax/swing/UIManager$1 +instanceKlass sun/swing/ImageCache +instanceKlass sun/swing/CachedPainter +instanceKlass com/sun/java/swing/plaf/windows/XPStyle +instanceKlass sun/swing/DefaultLookup +instanceKlass javax/swing/UIManager$LAFState +instanceKlass sun/swing/SwingUtilities2$LSBCacheEntry +instanceKlass java/awt/font/FontRenderContext +instanceKlass sun/swing/SwingUtilities2 +instanceKlass sun/swing/StringUIClientPropertyKey +instanceKlass sun/swing/UIClientPropertyKey +instanceKlass javax/swing/LookAndFeel +instanceKlass java/util/IdentityHashMap$IdentityHashMapIterator +instanceKlass java/awt/Toolkit$DesktopPropertyChangeSupport$1 +instanceKlass java/util/ComparableTimSort +instanceKlass java/util/Arrays$LegacyMergeSort +instanceKlass sun/awt/SunHints$Value +instanceKlass java/awt/RenderingHints$Key +instanceKlass sun/awt/SunHints +instanceKlass java/awt/RenderingHints +instanceKlass sun/awt/windows/WDesktopProperties$WinPlaySound +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock +instanceKlass java/util/concurrent/locks/ReentrantReadWriteLock +instanceKlass java/util/concurrent/locks/ReadWriteLock +instanceKlass sun/awt/windows/ThemeReader +instanceKlass sun/awt/windows/WDesktopProperties +instanceKlass sun/awt/OSInfo$1 +instanceKlass sun/awt/OSInfo$WindowsVersion +instanceKlass sun/awt/OSInfo +instanceKlass javax/swing/UIManager$LookAndFeelInfo +instanceKlass javax/swing/UIManager +instanceKlass javax/swing/border/Border +instanceKlass com/mathworks/mwswing/plaf/PlafUtils +instanceKlass java/awt/AWTEventMulticaster +instanceKlass java/awt/event/TextListener +instanceKlass java/awt/event/AdjustmentListener +instanceKlass java/awt/event/ItemListener +instanceKlass java/awt/event/ActionListener +instanceKlass java/awt/event/WindowStateListener +instanceKlass java/awt/event/WindowFocusListener +instanceKlass java/awt/event/ContainerListener +instanceKlass java/awt/Toolkit$SelectiveAWTEventListener +instanceKlass java/util/EventListenerProxy +instanceKlass javax/swing/ScrollPaneConstants +instanceKlass com/mathworks/mwswing/MouseWheelRedirector +instanceKlass com/google/common/collect/MapMakerInternalMap$StrongEntry +instanceKlass java/awt/image/BufferedImage$1 +instanceKlass java/awt/image/WritableRenderedImage +instanceKlass java/awt/image/RenderedImage +instanceKlass java/awt/image/SampleModel +instanceKlass java/awt/image/DataBuffer$1 +instanceKlass sun/awt/image/SunWritableRaster$DataStealer +instanceKlass java/awt/image/DataBuffer +instanceKlass java/awt/image/Raster +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/ImageWatched$WeakLink$$Lambda$7 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/awt/image/PNGImageDecoder$Chromaticities +instanceKlass sun/awt/image/ImageDecoder +instanceKlass sun/awt/image/ImageFetcher$1 +instanceKlass sun/awt/image/FetcherInfo +instanceKlass sun/awt/image/ImageConsumerQueue +instanceKlass sun/awt/image/ImageWatched$Link +instanceKlass sun/awt/image/ImageWatched +instanceKlass java/awt/image/ImageConsumer +instanceKlass sun/awt/image/MultiResolutionImage +instanceKlass java/awt/MediaEntry +instanceKlass sun/awt/image/NativeLibLoader$1 +instanceKlass sun/awt/image/NativeLibLoader +instanceKlass sun/awt/image/InputStreamImageSource +instanceKlass sun/awt/image/ImageFetchable +instanceKlass java/awt/image/ImageProducer +instanceKlass java/awt/MediaTracker +instanceKlass javax/accessibility/AccessibleContext +instanceKlass sun/awt/EventQueueItem +instanceKlass java/awt/event/InputMethodListener +instanceKlass java/awt/event/MouseWheelListener +instanceKlass java/awt/event/MouseMotionListener +instanceKlass java/awt/event/MouseListener +instanceKlass java/awt/event/KeyListener +instanceKlass java/awt/event/HierarchyBoundsListener +instanceKlass java/awt/event/HierarchyListener +instanceKlass java/awt/event/FocusListener +instanceKlass java/awt/event/ComponentListener +instanceKlass java/awt/dnd/DropTarget +instanceKlass java/awt/dnd/DropTargetListener +instanceKlass java/awt/image/BufferStrategy +instanceKlass javax/swing/ImageIcon$2 +instanceKlass javax/swing/ImageIcon$1 +instanceKlass javax/swing/ImageIcon +instanceKlass com/mathworks/util/StringUtils +instanceKlass java/util/concurrent/atomic/AtomicReferenceArray +instanceKlass com/google/common/collect/MapMaker$RemovalListener +instanceKlass com/google/common/base/Ticker +instanceKlass com/google/common/base/Predicate +instanceKlass com/google/common/base/Equivalence +instanceKlass com/google/common/base/Objects +instanceKlass com/google/common/collect/MapMakerInternalMap$1 +instanceKlass com/google/common/collect/MapMakerInternalMap$ReferenceEntry +instanceKlass com/google/common/base/Preconditions +instanceKlass com/google/common/collect/MapMakerInternalMap$ValueReference +instanceKlass com/google/common/collect/GenericMapMaker +instanceKlass com/mathworks/util/logger/impl/LegacyLoggerFactory +instanceKlass com/mathworks/util/logger/LoggerFactory +instanceKlass com/mathworks/util/logger/Log +instanceKlass javax/swing/Icon +instanceKlass com/mathworks/common/icons/IconEnumerationUtils +instanceKlass com/mathworks/common/icons/IconContainer +instanceKlass sun/awt/KeyboardFocusManagerPeerImpl +instanceKlass java/awt/peer/KeyboardFocusManagerPeer +instanceKlass java/awt/FocusTraversalPolicy +instanceKlass java/awt/DefaultKeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor +instanceKlass java/awt/AWTKeyStroke$1 +instanceKlass java/awt/AWTKeyStroke +instanceKlass java/awt/KeyboardFocusManager$1 +instanceKlass sun/awt/AWTAccessor$KeyboardFocusManagerAccessor +instanceKlass java/awt/KeyboardFocusManager +instanceKlass java/awt/KeyEventPostProcessor +instanceKlass java/awt/KeyEventDispatcher +instanceKlass java/awt/Window$WindowDisposerRecord +instanceKlass sun/awt/windows/WToolkit$$Lambda$6 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass sun/awt/windows/WToolkit$$Lambda$5 +instanceKlass sun/awt/windows/WToolkit$$Lambda$4 +instanceKlass sun/awt/windows/WToolkit$$Lambda$3 +instanceKlass sun/awt/AWTAutoShutdown +instanceKlass sun/misc/ThreadGroupUtils +instanceKlass sun/java2d/Disposer$$Lambda$2 +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/java2d/Disposer$1 +instanceKlass sun/java2d/Disposer +instanceKlass sun/awt/windows/WToolkit$ToolkitDisposer +instanceKlass sun/java2d/DisposerRecord +instanceKlass sun/misc/PerformanceLogger$TimeData +instanceKlass sun/misc/PerformanceLogger +instanceKlass sun/awt/SunToolkit$ModalityListenerList +instanceKlass sun/awt/ModalityListener +instanceKlass java/beans/ChangeListenerMap +instanceKlass java/beans/PropertyChangeSupport +instanceKlass java/awt/Toolkit$2 +instanceKlass java/awt/BorderLayout +instanceKlass java/awt/LayoutManager2 +instanceKlass java/awt/GraphicsConfiguration +instanceKlass sun/awt/image/SurfaceManager$ProxiedGraphicsConfig +instanceKlass java/awt/GraphicsDevice +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer +instanceKlass sun/misc/FloatingDecimal$ASCIIToBinaryConverter +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer +instanceKlass sun/misc/FloatingDecimal$BinaryToASCIIConverter +instanceKlass sun/misc/FloatingDecimal +instanceKlass sun/java2d/SunGraphicsEnvironment$1 +instanceKlass sun/awt/SunDisplayChanger +instanceKlass sun/java2d/SurfaceManagerFactory +instanceKlass sun/java2d/windows/WindowsFlags$1 +instanceKlass sun/java2d/windows/WindowsFlags +instanceKlass sun/awt/windows/WToolkit$2 +instanceKlass sun/awt/image/SurfaceManager +instanceKlass sun/awt/image/SurfaceManager$ImageAccessor +instanceKlass java/awt/ImageCapabilities +instanceKlass java/awt/Image +instanceKlass sun/java2d/DestSurfaceProvider +instanceKlass sun/java2d/loops/RenderCache$Entry +instanceKlass sun/java2d/loops/RenderCache +instanceKlass sun/java2d/pipe/DrawImage +instanceKlass sun/java2d/pipe/GeneralCompositePipe +instanceKlass sun/java2d/pipe/SpanShapeRenderer +instanceKlass sun/java2d/pipe/AlphaPaintPipe +instanceKlass sun/java2d/pipe/AAShapePipe +instanceKlass sun/java2d/pipe/RegionIterator +instanceKlass sun/java2d/pipe/Region +instanceKlass sun/java2d/pipe/SpanClipRenderer +instanceKlass sun/java2d/pipe/PixelToShapeConverter +instanceKlass sun/java2d/pipe/AlphaColorPipe +instanceKlass sun/java2d/pipe/CompositePipe +instanceKlass sun/java2d/pipe/GlyphListPipe +instanceKlass sun/java2d/pipe/OutlineTextRenderer +instanceKlass sun/java2d/pipe/RenderingEngine$1 +instanceKlass sun/java2d/pipe/RenderingEngine +instanceKlass sun/java2d/pipe/LoopPipe +instanceKlass sun/java2d/pipe/LoopBasedPipe +instanceKlass sun/java2d/pipe/ParallelogramPipe +instanceKlass sun/java2d/pipe/NullPipe +instanceKlass sun/java2d/pipe/DrawImagePipe +instanceKlass sun/java2d/pipe/TextPipe +instanceKlass sun/java2d/pipe/ShapeDrawPipe +instanceKlass sun/java2d/pipe/PixelFillPipe +instanceKlass sun/java2d/pipe/PixelDrawPipe +instanceKlass sun/java2d/StateTrackableDelegate$2 +instanceKlass sun/java2d/StateTrackableDelegate +instanceKlass java/awt/color/ICC_Profile$1 +instanceKlass sun/java2d/cmm/ProfileActivator +instanceKlass sun/java2d/cmm/ProfileDeferralMgr +instanceKlass java/awt/color/ICC_Profile +instanceKlass java/awt/color/ColorSpace +instanceKlass java/awt/image/ColorModel$1 +instanceKlass java/awt/image/ColorModel +instanceKlass sun/awt/image/PixelConverter +instanceKlass sun/java2d/loops/SurfaceType +instanceKlass sun/java2d/SurfaceData +instanceKlass sun/java2d/Surface +instanceKlass sun/java2d/StateTrackable +instanceKlass sun/java2d/DisposerTarget +instanceKlass sun/awt/windows/WToolkit$1 +instanceKlass sun/awt/DisplayChangedListener +instanceKlass java/awt/Cursor$1 +instanceKlass sun/awt/AWTAccessor$CursorAccessor +instanceKlass java/awt/geom/Point2D +instanceKlass java/awt/Cursor +instanceKlass java/awt/ComponentOrientation +instanceKlass java/awt/Frame$1 +instanceKlass sun/awt/AWTAccessor$FrameAccessor +instanceKlass java/awt/Window$1 +instanceKlass sun/awt/AWTAccessor$WindowAccessor +instanceKlass java/awt/event/WindowListener +instanceKlass sun/awt/PostEventQueue +instanceKlass sun/awt/MostRecentKeyValue +instanceKlass java/awt/Queue +instanceKlass java/awt/EventQueue$2 +instanceKlass sun/awt/AWTAccessor$EventQueueAccessor +instanceKlass java/awt/EventQueue$1 +instanceKlass java/awt/EventQueue +instanceKlass sun/awt/AppContext$1 +instanceKlass sun/awt/KeyboardFocusManagerPeerProvider +instanceKlass sun/awt/InputMethodSupport +instanceKlass sun/awt/ComponentFactory +instanceKlass sun/awt/WindowClosingListener +instanceKlass sun/awt/WindowClosingSupport +instanceKlass sun/awt/AppContext$2 +instanceKlass sun/awt/AppContext$3 +instanceKlass sun/awt/AppContext$6 +instanceKlass sun/misc/JavaAWTAccess +instanceKlass sun/awt/AppContext$GetAppContextLock +instanceKlass sun/awt/AppContext +instanceKlass javax/swing/SwingUtilities +instanceKlass javax/swing/SwingConstants +instanceKlass javax/swing/JComponent$1 +instanceKlass java/awt/Container$1 +instanceKlass sun/awt/AWTAccessor$ContainerAccessor +instanceKlass java/awt/geom/Dimension2D +instanceKlass java/awt/LightweightDispatcher +instanceKlass java/awt/LayoutManager +instanceKlass java/awt/Component$DummyRequestFocusController +instanceKlass sun/awt/RequestFocusController +instanceKlass java/awt/Component$1 +instanceKlass sun/awt/AWTAccessor$ComponentAccessor +instanceKlass java/text/AttributedCharacterIterator$Attribute +instanceKlass sun/font/AttributeValues +instanceKlass java/awt/geom/AffineTransform +instanceKlass sun/font/FontAccess +instanceKlass sun/awt/windows/WObjectPeer +instanceKlass java/awt/dnd/peer/DropTargetPeer +instanceKlass java/awt/peer/ComponentPeer +instanceKlass java/awt/event/InputEvent$1 +instanceKlass sun/awt/AWTAccessor$InputEventAccessor +instanceKlass java/awt/event/NativeLibLoader$1 +instanceKlass java/awt/event/NativeLibLoader +instanceKlass java/awt/AWTEvent$1 +instanceKlass sun/awt/AWTAccessor$AWTEventAccessor +instanceKlass java/util/EventObject +instanceKlass java/awt/Insets +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InnerClassLambdaMetafactory$1 +instanceKlass java/awt/GraphicsEnvironment$$Lambda$1 +instanceKlass java/lang/invoke/InfoFromMemberName +instanceKlass java/lang/invoke/MethodHandleInfo +instanceKlass sun/security/util/SecurityConstants +instanceKlass java/security/AccessController$1 +instanceKlass java/lang/invoke/AbstractValidatingLambdaMetafactory +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass jdk/internal/org/objectweb/asm/FieldVisitor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory$1 +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData$1 +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaFormBuffer +instanceKlass java/lang/invoke/LambdaFormEditor +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/MethodHandleImpl$Lazy +instanceKlass java/lang/invoke/LambdaForm$BMH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/util/SubList$1 +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/LambdaForm$MH +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$CpPatch +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass java/lang/invoke/LambdaForm$DMH +instanceKlass sun/invoke/empty/Empty +instanceKlass sun/invoke/util/VerifyType +instanceKlass java/lang/invoke/InvokerBytecodeGenerator$2 +instanceKlass jdk/internal/org/objectweb/asm/AnnotationVisitor +instanceKlass jdk/internal/org/objectweb/asm/Frame +instanceKlass jdk/internal/org/objectweb/asm/Label +instanceKlass jdk/internal/org/objectweb/asm/Type +instanceKlass jdk/internal/org/objectweb/asm/MethodVisitor +instanceKlass jdk/internal/org/objectweb/asm/Item +instanceKlass jdk/internal/org/objectweb/asm/ByteVector +instanceKlass jdk/internal/org/objectweb/asm/ClassVisitor +instanceKlass java/lang/invoke/InvokerBytecodeGenerator +instanceKlass java/util/AbstractList$Itr +instanceKlass java/util/Collections$UnmodifiableCollection$1 +instanceKlass java/lang/invoke/DirectMethodHandle$Lazy +instanceKlass sun/invoke/util/BytecodeDescriptor +instanceKlass java/lang/invoke/BoundMethodHandle$Factory +instanceKlass java/lang/invoke/BoundMethodHandle$SpeciesData +instanceKlass java/lang/invoke/LambdaForm$NamedFunction +instanceKlass java/lang/invoke/LambdaForm$Name +instanceKlass sun/invoke/util/ValueConversions +instanceKlass sun/invoke/util/VerifyAccess +instanceKlass java/lang/Character$CharacterCache +instanceKlass java/lang/Short$ShortCache +instanceKlass java/lang/Byte$ByteCache +instanceKlass sun/invoke/util/Wrapper$Format +instanceKlass java/lang/invoke/MethodHandles +instanceKlass java/lang/invoke/Invokers +instanceKlass java/lang/invoke/MethodTypeForm +instanceKlass java/lang/invoke/MethodType$ConcurrentWeakInternSet +instanceKlass java/lang/invoke/MethodHandles$Lookup +instanceKlass java/lang/invoke/LambdaMetafactory +instanceKlass java/awt/GraphicsEnvironment +instanceKlass java/awt/Toolkit$1 +instanceKlass java/awt/Toolkit$3 +instanceKlass java/util/ResourceBundle$RBClassLoader$1 +instanceKlass java/awt/Toolkit$5 +instanceKlass sun/awt/AWTAccessor +instanceKlass java/awt/Toolkit$4 +instanceKlass sun/awt/AWTAccessor$ToolkitAccessor +instanceKlass java/awt/Toolkit +instanceKlass java/awt/Component$AWTTreeLock +instanceKlass java/util/logging/Logger$1 +instanceKlass java/awt/Component +instanceKlass java/awt/MenuContainer +instanceKlass java/awt/image/ImageObserver +instanceKlass javax/swing/TransferHandler$HasGetTransferHandler +instanceKlass javax/accessibility/Accessible +instanceKlass java/awt/event/AWTEventListener +instanceKlass com/mathworks/mwswing/MJStartupForDesktop +instanceKlass com/mathworks/services/AntialiasedFontPrefs +instanceKlass org/apache/log4j/helpers/AppenderAttachableImpl +instanceKlass org/apache/log4j/CategoryKey +instanceKlass org/apache/log4j/helpers/LogLog +instanceKlass org/apache/log4j/helpers/Loader +instanceKlass org/apache/log4j/spi/Configurator +instanceKlass org/apache/log4j/helpers/OptionConverter +instanceKlass org/apache/log4j/spi/DefaultRepositorySelector +instanceKlass org/apache/log4j/DefaultCategoryFactory +instanceKlass org/apache/log4j/or/DefaultRenderer +instanceKlass org/apache/log4j/or/ObjectRenderer +instanceKlass org/apache/log4j/or/RendererMap +instanceKlass org/apache/log4j/spi/LoggerFactory +instanceKlass org/apache/log4j/Hierarchy +instanceKlass org/apache/log4j/spi/RendererSupport +instanceKlass org/apache/log4j/spi/RepositorySelector +instanceKlass org/apache/log4j/spi/LoggerRepository +instanceKlass org/apache/log4j/LogManager +instanceKlass org/apache/log4j/Category +instanceKlass org/apache/log4j/spi/AppenderAttachable +instanceKlass org/apache/log4j/helpers/OnlyOnceErrorHandler +instanceKlass org/apache/log4j/spi/ErrorHandler +instanceKlass org/apache/log4j/Priority +instanceKlass org/apache/log4j/AppenderSkeleton +instanceKlass org/apache/log4j/spi/OptionHandler +instanceKlass org/apache/log4j/Appender +instanceKlass com/mathworks/services/Log4JConfiguration +instanceKlass com/mathworks/html/HtmlDataListener +instanceKlass com/mathworks/html/SystemBrowserLauncher +instanceKlass com/mathworks/mlwidgets/html/MatlabSystemBrowserStrategy +instanceKlass java/net/SocketAddress +instanceKlass com/mathworks/net/transport/AbstractTransportClientProperties +instanceKlass java/util/logging/LogManager$5 +instanceKlass sun/reflect/UnsafeFieldAccessorFactory +instanceKlass java/util/logging/LoggingProxyImpl +instanceKlass sun/util/logging/LoggingProxy +instanceKlass sun/util/logging/LoggingSupport$1 +instanceKlass sun/util/logging/LoggingSupport +instanceKlass sun/util/logging/PlatformLogger$LoggerProxy +instanceKlass sun/util/logging/PlatformLogger$1 +instanceKlass sun/util/logging/PlatformLogger +instanceKlass java/util/logging/LogManager$LoggerContext$1 +instanceKlass java/util/logging/LogManager$3 +instanceKlass java/util/logging/LogManager$2 +instanceKlass java/lang/Shutdown$Lock +instanceKlass java/lang/Shutdown +instanceKlass java/lang/ApplicationShutdownHooks$1 +instanceKlass java/lang/ApplicationShutdownHooks +instanceKlass java/util/logging/LogManager$LogNode +instanceKlass java/util/logging/LogManager$LoggerContext +instanceKlass java/util/logging/LogManager$1 +instanceKlass java/util/logging/LogManager +instanceKlass java/util/concurrent/CopyOnWriteArrayList +instanceKlass java/util/logging/Logger$LoggerBundle +instanceKlass java/util/logging/Level$KnownLevel +instanceKlass java/util/logging/Level +instanceKlass java/util/logging/Handler +instanceKlass java/util/logging/Logger +instanceKlass java/net/Authenticator +instanceKlass com/mathworks/net/transport/MWTransportClientProperties +instanceKlass com/mathworks/net/transport/MWTransportClientPropertiesFactory +instanceKlass com/mathworks/html/SystemBrowserStrategy +instanceKlass com/mathworks/mlwidgets/html/HTMLPrefs +instanceKlass com/mathworks/services/Prefs$1 +instanceKlass com/mathworks/services/DefaultFontPrefs +instanceKlass com/mathworks/services/settings/SettingValidator +instanceKlass com/mathworks/services/RGBInteger +instanceKlass java/util/RegularEnumSet$EnumSetIterator +instanceKlass java/lang/Class$4 +instanceKlass com/mathworks/services/settings/SettingInfo +instanceKlass com/mathworks/services/settings/SettingAdapter +instanceKlass java/util/TreeMap$Entry +instanceKlass java/lang/ProcessEnvironment$CheckedEntry +instanceKlass java/lang/ProcessEnvironment$CheckedEntrySet$1 +instanceKlass java/util/NavigableMap +instanceKlass java/util/SortedMap +instanceKlass sun/nio/ch/Interruptible +instanceKlass java/util/Collections$UnmodifiableMap +instanceKlass java/util/concurrent/locks/LockSupport +instanceKlass java/lang/ProcessEnvironment$EntryComparator +instanceKlass java/lang/ProcessEnvironment$NameComparator +instanceKlass java/util/concurrent/atomic/AtomicReference +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference$1 +instanceKlass com/mathworks/services/settings/SettingPath$TreeReference +instanceKlass com/mathworks/mvm/eventmgr/MvmDynamicEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/HomeEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/CLCEvent +instanceKlass com/mathworks/mvm/eventmgr/SinkTextEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/DebugLoopEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/IqmInputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/prompt/InputRequestEvent +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$MvmNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$FactoryNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$SessionNativeMethods +instanceKlass com/mathworks/mvm/eventmgr/DefaultEventMgr$NativeMethods +instanceKlass com/mathworks/mvm/eventmgr/InsecureReflection +instanceKlass com/mathworks/mvm/exec/FutureResult +instanceKlass com/mathworks/mvm/exec/MatlabIIP +instanceKlass com/mathworks/mvm/exec/NativeFutureResult +instanceKlass com/mathworks/mvm/exec/MatlabRequest +instanceKlass com/mathworks/mvm/MvmImpl +instanceKlass com/mathworks/mvm/MVM +instanceKlass com/mathworks/mvm/eventmgr/EventMgr +instanceKlass com/mathworks/mvm/MvmFactory +instanceKlass com/mathworks/mvm/context/ThreadContext +instanceKlass com/mathworks/mvm/context/MvmContext +instanceKlass com/mathworks/services/settings/SettingTestEnvironment +instanceKlass com/mathworks/services/settings/SettingTransaction +instanceKlass com/mathworks/services/settings/SettingLevel$Helper +instanceKlass java/awt/geom/RectangularShape +instanceKlass java/awt/Shape +instanceKlass java/awt/Color +instanceKlass java/awt/Paint +instanceKlass java/awt/Transparency +instanceKlass java/awt/Font +instanceKlass com/mathworks/services/settings/SettingConverter +instanceKlass com/mathworks/services/settings/Setting +instanceKlass java/io/FileFilter +instanceKlass javax/swing/text/EditorKit +instanceKlass com/mathworks/cfbutils/FileUtils +instanceKlass com/mathworks/util/FileUtils +instanceKlass com/mathworks/services/Prefs$pairSet +instanceKlass com/mathworks/util/Log +instanceKlass com/mathworks/util/CharBuffer +instanceKlass com/mathworks/services/Prefs$TwoWayMap +instanceKlass com/mathworks/services/lmgr/events/HeartbeatShutdown +instanceKlass com/mathworks/services/lmgr/events/LicServerReconnectAttempt +instanceKlass sun/net/www/protocol/jar/JarFileFactory +instanceKlass sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController +instanceKlass java/net/URLClassLoader$2 +instanceKlass java/util/ResourceBundle$Control$1 +instanceKlass java/util/ResourceBundle$CacheKeyReference +instanceKlass java/util/ResourceBundle$CacheKey +instanceKlass java/util/ResourceBundle$Control +instanceKlass java/net/URLClassLoader$3$1 +instanceKlass java/util/Collections$EmptyIterator +instanceKlass sun/misc/CompoundEnumeration +instanceKlass java/net/URLClassLoader$3 +instanceKlass sun/misc/URLClassPath$1 +instanceKlass java/lang/ClassLoader$2 +instanceKlass sun/misc/URLClassPath$2 +instanceKlass java/util/zip/ZipUtils +instanceKlass java/util/zip/CRC32 +instanceKlass java/util/zip/Checksum +instanceKlass sun/misc/Launcher$BootClassPathHolder$1 +instanceKlass sun/misc/Launcher$BootClassPathHolder +instanceKlass java/util/ServiceLoader$1 +instanceKlass java/util/ServiceLoader$LazyIterator +instanceKlass java/util/ServiceLoader +instanceKlass java/util/spi/ResourceBundleControlProvider +instanceKlass java/util/ResourceBundle +instanceKlass com/mathworks/services/Prefs$PrefString +instanceKlass com/mathworks/services/settings/SettingListener +instanceKlass org/apache/commons/io/FilenameUtils +instanceKlass com/mathworks/services/Prefs +instanceKlass com/mathworks/util/ManifestAttributeProviderImpl +instanceKlass com/mathworks/util/ManifestAttributeProvider +instanceKlass com/mathworks/util/LanguageUtils +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$LazyHolder +instanceKlass com/mathworks/util/SystemPropertiesInitializer +instanceKlass java/util/concurrent/Executors$RunnableAdapter +instanceKlass java/util/concurrent/FutureTask$WaitNode +instanceKlass java/util/concurrent/Callable +instanceKlass java/util/concurrent/FutureTask +instanceKlass java/util/concurrent/RunnableFuture +instanceKlass java/util/concurrent/Future +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory$1 +instanceKlass java/util/concurrent/LinkedBlockingQueue$Node +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject +instanceKlass java/util/concurrent/locks/Condition +instanceKlass java/util/concurrent/locks/AbstractQueuedSynchronizer$Node +instanceKlass java/util/concurrent/locks/AbstractOwnableSynchronizer +instanceKlass java/util/concurrent/BlockingQueue +instanceKlass java/util/concurrent/ThreadPoolExecutor$AbortPolicy +instanceKlass java/util/concurrent/RejectedExecutionHandler +instanceKlass java/util/concurrent/AbstractExecutorService +instanceKlass java/util/concurrent/ExecutorService +instanceKlass java/util/concurrent/Executor +instanceKlass java/util/concurrent/Executors +instanceKlass com/mathworks/util/DaemonThreadFactory +instanceKlass java/util/concurrent/ThreadFactory +instanceKlass com/mathworks/util/ThreadUtils +instanceKlass com/mathworks/util/ManifestAttributeProviderFactory +instanceKlass com/mathworks/util/PostVMInit$StartupClass +instanceKlass com/mathworks/util/PostVMInit +instanceKlass java/lang/reflect/WeakCache$Value +instanceKlass sun/misc/ProxyGenerator$ExceptionTableEntry +instanceKlass sun/misc/ProxyGenerator$PrimitiveTypeInfo +instanceKlass java/lang/Void +instanceKlass sun/misc/ProxyGenerator$FieldInfo +instanceKlass java/util/ArrayList$Itr +instanceKlass java/io/DataOutput +instanceKlass sun/misc/ProxyGenerator$ConstantPool$Entry +instanceKlass sun/misc/ProxyGenerator$MethodInfo +instanceKlass java/util/HashMap$HashIterator +instanceKlass sun/misc/ProxyGenerator$ProxyMethod +instanceKlass sun/misc/ProxyGenerator$ConstantPool +instanceKlass java/lang/Class$MethodArray +instanceKlass sun/security/action/GetBooleanAction +instanceKlass sun/misc/ProxyGenerator +instanceKlass java/lang/reflect/WeakCache$Factory +instanceKlass java/util/function/Supplier +instanceKlass java/lang/reflect/Proxy$ProxyClassFactory +instanceKlass java/lang/reflect/Proxy$KeyFactory +instanceKlass java/util/function/BiFunction +instanceKlass java/lang/reflect/WeakCache +instanceKlass java/lang/reflect/Proxy +instanceKlass com/mathworks/util/event/EventListenerList$1 +instanceKlass com/mathworks/util/Disposable +instanceKlass java/lang/reflect/InvocationHandler +instanceKlass com/mathworks/util/event/EventListenerList +instanceKlass java/util/Collections$SynchronizedMap +instanceKlass com/mathworks/util/event/GlobalEventManager +instanceKlass com/mathworks/jmi/Matlab$4 +instanceKlass java/util/Timer$1 +instanceKlass java/util/TaskQueue +instanceKlass java/util/Timer +instanceKlass com/mathworks/jmi/bean/IMatlabObjectListener +instanceKlass com/mathworks/jmi/bean/UDDObject +instanceKlass com/mathworks/jmi/bean/DynamicProperties +instanceKlass com/mathworks/jmi/bean/MTObject +instanceKlass com/mathworks/services/Browseable +instanceKlass com/mathworks/jmi/bean/TreeObject +instanceKlass com/mathworks/jmi/types/MLArrayRef +instanceKlass com/mathworks/jmi/idlebusy/MatlabIdleBusyStatusEvent +instanceKlass com/mathworks/mvm/eventmgr/FirableMvmEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmTypedEvent +instanceKlass com/mathworks/mvm/eventmgr/MvmEvent +instanceKlass java/lang/ClassLoaderHelper +instanceKlass com/mathworks/util/NativeJavaSwitch +instanceKlass com/mathworks/util/ClassLoaderBridge +instanceKlass com/mathworks/jmi/Matlab$2 +instanceKlass java/beans/PropertyChangeListener +instanceKlass com/mathworks/util/PlatformInfo +instanceKlass com/mathworks/util/FactoryUtilAdapter +instanceKlass com/mathworks/jmi/Matlab$MatlabQuitListener +instanceKlass java/lang/Long$LongCache +instanceKlass com/mathworks/jmi/MatlabLooper +instanceKlass com/mathworks/util/ClassLoaderSupplier +instanceKlass com/mathworks/util/FactoryUtilSupplier +instanceKlass com/mathworks/jmi/MatlabListener +instanceKlass com/mathworks/jmi/CompletionObserver +instanceKlass java/util/TimerTask +instanceKlass com/mathworks/util/event/GlobalEventListener +instanceKlass java/util/EventListener +instanceKlass com/mathworks/jmi/Matlab +instanceKlass com/mathworks/mvm/helpers/MatlabPrintStreamManager +instanceKlass com/mathworks/jmi/MatlabLanguage +instanceKlass com/mathworks/jmi/NativeMatlab$MCRIDGetter +instanceKlass com/mathworks/jmi/NativeMatlab +instanceKlass com/mathworks/util/FactoryUtils +instanceKlass java/io/ObjectStreamConstants +instanceKlass java/io/ObjectInput +instanceKlass java/io/DataInput +instanceKlass com/mathworks/jmi/OpaqueJavaInterface +instanceKlass java/io/FilePermission$1 +instanceKlass sun/net/www/MessageHeader +instanceKlass java/net/URLConnection +instanceKlass java/security/PermissionCollection +instanceKlass sun/nio/ByteBuffered +instanceKlass sun/security/util/ManifestEntryVerifier +instanceKlass sun/security/util/DisabledAlgorithmConstraints$1 +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraint +instanceKlass java/util/regex/Matcher +instanceKlass java/util/regex/MatchResult +instanceKlass sun/security/util/DisabledAlgorithmConstraints$Constraints +instanceKlass java/util/ArrayList$SubList$1 +instanceKlass java/util/ListIterator +instanceKlass java/util/Properties$LineReader +instanceKlass java/security/Security$1 +instanceKlass java/security/Security +instanceKlass sun/security/util/AbstractAlgorithmConstraints$1 +instanceKlass java/util/regex/ASCII +instanceKlass java/util/regex/Pattern$TreeInfo +instanceKlass java/util/regex/Pattern$Node +instanceKlass java/util/regex/Pattern +instanceKlass sun/security/util/AlgorithmDecomposer +instanceKlass sun/security/util/AbstractAlgorithmConstraints +instanceKlass java/security/AlgorithmConstraints +instanceKlass sun/security/util/SignatureFileVerifier +instanceKlass java/lang/Package +instanceKlass java/util/jar/JarVerifier$3 +instanceKlass java/security/CodeSigner +instanceKlass java/util/jar/JarVerifier +instanceKlass sun/misc/ASCIICaseInsensitiveComparator +instanceKlass java/util/jar/Attributes$Name +instanceKlass java/lang/StringCoding$StringDecoder +instanceKlass java/util/jar/Attributes +instanceKlass sun/misc/Resource +instanceKlass sun/misc/IOUtils +instanceKlass java/util/zip/ZStreamRef +instanceKlass java/util/zip/Inflater +instanceKlass sun/misc/ExtensionDependency +instanceKlass java/util/LinkedList$Node +instanceKlass java/util/zip/ZipEntry +instanceKlass sun/misc/JarIndex +instanceKlass sun/nio/ch/DirectBuffer +instanceKlass sun/misc/PerfCounter$CoreCounters +instanceKlass sun/misc/Perf +instanceKlass sun/misc/Perf$GetPerfAction +instanceKlass sun/misc/PerfCounter +instanceKlass java/util/zip/ZipCoder +instanceKlass java/util/Deque +instanceKlass java/util/Queue +instanceKlass java/nio/charset/StandardCharsets +instanceKlass java/util/jar/JavaUtilJarAccessImpl +instanceKlass sun/misc/JavaUtilJarAccess +instanceKlass sun/misc/FileURLMapper +instanceKlass sun/misc/URLClassPath$JarLoader$1 +instanceKlass sun/nio/cs/ThreadLocalCoders$Cache +instanceKlass sun/nio/cs/ThreadLocalCoders +instanceKlass java/util/zip/ZipFile$1 +instanceKlass sun/misc/JavaUtilZipFileAccess +instanceKlass java/util/zip/ZipFile +instanceKlass java/util/zip/ZipConstants +instanceKlass sun/misc/URLClassPath$Loader +instanceKlass sun/misc/URLClassPath$3 +instanceKlass sun/net/util/URLUtil +instanceKlass java/net/URLClassLoader$1 +instanceKlass java/io/FileOutputStream$1 +instanceKlass java/lang/StringCoding$StringEncoder +instanceKlass java/lang/ThreadLocal$ThreadLocalMap +instanceKlass java/lang/StringCoding +instanceKlass sun/usagetracker/UsageTrackerClient$3 +instanceKlass jdk/internal/util/EnvUtils +instanceKlass sun/usagetracker/UsageTrackerClient$2 +instanceKlass sun/usagetracker/UsageTrackerClient$4 +instanceKlass sun/usagetracker/UsageTrackerClient$1 +instanceKlass java/util/concurrent/atomic/AtomicBoolean +instanceKlass sun/usagetracker/UsageTrackerClient +instanceKlass sun/misc/PostVMInitHook +instanceKlass java/lang/invoke/MethodHandleStatics$1 +instanceKlass java/lang/invoke/MethodHandleStatics +instanceKlass java/lang/invoke/MemberName$Factory +instanceKlass java/lang/ClassValue$Version +instanceKlass java/lang/ClassValue$Identity +instanceKlass java/lang/ClassValue +instanceKlass java/lang/invoke/MethodHandleImpl$3 +instanceKlass java/lang/invoke/MethodHandleImpl$2 +instanceKlass java/util/function/Function +instanceKlass java/lang/invoke/MethodHandleImpl$1 +instanceKlass java/lang/Integer$IntegerCache +instanceKlass java/lang/invoke/MethodHandleImpl +instanceKlass java/lang/SystemClassLoaderAction +instanceKlass java/util/LinkedHashMap$LinkedHashIterator +instanceKlass sun/misc/Launcher$AppClassLoader$1 +instanceKlass sun/misc/URLClassPath +instanceKlass java/security/Principal +instanceKlass java/security/ProtectionDomain$Key +instanceKlass java/security/ProtectionDomain$2 +instanceKlass sun/misc/JavaSecurityProtectionDomainAccess +instanceKlass java/security/ProtectionDomain$JavaSecurityAccessImpl +instanceKlass sun/misc/JavaSecurityAccess +instanceKlass java/net/URLStreamHandler +instanceKlass java/net/Parts +instanceKlass java/util/BitSet +instanceKlass sun/net/www/ParseUtil +instanceKlass java/io/FileInputStream$1 +instanceKlass sun/util/locale/LocaleUtils +instanceKlass java/util/Locale$LocaleKey +instanceKlass sun/util/locale/BaseLocale$Key +instanceKlass sun/util/locale/BaseLocale +instanceKlass java/util/concurrent/ConcurrentHashMap$CollectionView +instanceKlass java/util/concurrent/ConcurrentHashMap$CounterCell +instanceKlass java/util/concurrent/ConcurrentHashMap$Node +instanceKlass java/util/concurrent/locks/ReentrantLock +instanceKlass java/util/concurrent/locks/Lock +instanceKlass java/util/concurrent/ConcurrentMap +instanceKlass sun/util/locale/LocaleObjectCache +instanceKlass java/util/Locale +instanceKlass java/lang/reflect/Array +instanceKlass java/nio/charset/CoderResult$Cache +instanceKlass java/nio/charset/CoderResult +instanceKlass java/nio/charset/CharsetDecoder +instanceKlass sun/nio/cs/ArrayDecoder +instanceKlass java/io/Reader +instanceKlass java/lang/Readable +instanceKlass sun/misc/MetaIndex +instanceKlass sun/misc/Launcher$ExtClassLoader$1 +instanceKlass java/util/StringTokenizer +instanceKlass java/net/URLClassLoader$7 +instanceKlass sun/misc/JavaNetAccess +instanceKlass java/lang/ClassLoader$ParallelLoaders +instanceKlass sun/security/util/Debug +instanceKlass sun/misc/Launcher$Factory +instanceKlass java/net/URLStreamHandlerFactory +instanceKlass java/lang/Compiler$1 +instanceKlass java/lang/Compiler +instanceKlass java/lang/System$2 +instanceKlass sun/misc/JavaLangAccess +instanceKlass sun/io/Win32ErrorMode +instanceKlass sun/misc/OSEnvironment +instanceKlass sun/misc/NativeSignalHandler +instanceKlass sun/misc/Signal +instanceKlass java/lang/Terminator$1 +instanceKlass sun/misc/SignalHandler +instanceKlass java/lang/Terminator +instanceKlass java/lang/ClassLoader$NativeLibrary +instanceKlass java/io/ExpiringCache$Entry +instanceKlass java/lang/ClassLoader$3 +instanceKlass java/nio/file/Path +instanceKlass java/nio/file/Watchable +instanceKlass java/lang/Enum +instanceKlass java/io/ExpiringCache +instanceKlass java/io/FileSystem +instanceKlass java/io/DefaultFileSystem +instanceKlass java/lang/Runtime +instanceKlass java/nio/Bits$1 +instanceKlass sun/misc/JavaNioAccess +instanceKlass java/nio/ByteOrder +instanceKlass java/nio/Bits +instanceKlass java/nio/charset/CodingErrorAction +instanceKlass java/nio/charset/CharsetEncoder +instanceKlass sun/nio/cs/ArrayEncoder +instanceKlass sun/reflect/ReflectionFactory$1 +instanceKlass java/lang/Class$1 +instanceKlass sun/nio/cs/SingleByte +instanceKlass sun/nio/cs/HistoricallyNamedCharset +instanceKlass sun/security/action/GetPropertyAction +instanceKlass java/lang/ThreadLocal +instanceKlass java/nio/charset/spi/CharsetProvider +instanceKlass java/nio/charset/Charset +instanceKlass java/io/Writer +instanceKlass java/util/Arrays +instanceKlass sun/reflect/misc/ReflectUtil +instanceKlass java/lang/reflect/ReflectAccess +instanceKlass sun/reflect/LangReflectAccess +instanceKlass java/lang/reflect/Modifier +instanceKlass sun/reflect/annotation/AnnotationType +instanceKlass java/lang/Class$AnnotationData +instanceKlass sun/reflect/generics/repository/AbstractRepository +instanceKlass java/lang/Class$Atomic +instanceKlass java/lang/Class$ReflectionData +instanceKlass java/lang/Class$3 +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1 +instanceKlass java/security/PrivilegedExceptionAction +instanceKlass java/util/concurrent/atomic/AtomicReferenceFieldUpdater +instanceKlass java/io/OutputStream +instanceKlass java/io/Flushable +instanceKlass java/io/FileDescriptor$1 +instanceKlass sun/misc/JavaIOFileDescriptorAccess +instanceKlass java/io/FileDescriptor +instanceKlass sun/misc/Version +instanceKlass java/lang/CharacterData +instanceKlass java/util/Hashtable$Enumerator +instanceKlass java/util/Iterator +instanceKlass java/util/Enumeration +instanceKlass java/util/Objects +instanceKlass java/util/Collections$SynchronizedCollection +instanceKlass java/lang/Math +instanceKlass java/util/Hashtable$Entry +instanceKlass sun/misc/VM +instanceKlass java/util/HashMap$Node +instanceKlass java/util/Map$Entry +instanceKlass sun/reflect/Reflection +instanceKlass sun/misc/SharedSecrets +instanceKlass java/lang/ref/Reference$1 +instanceKlass sun/misc/JavaLangRefAccess +instanceKlass java/lang/ref/ReferenceQueue$Lock +instanceKlass java/lang/ref/ReferenceQueue +instanceKlass java/util/Collections$UnmodifiableCollection +instanceKlass java/util/AbstractMap +instanceKlass java/util/Set +instanceKlass java/util/Collections +instanceKlass java/lang/ref/Reference$Lock +instanceKlass sun/reflect/ReflectionFactory +instanceKlass java/util/AbstractCollection +instanceKlass java/util/RandomAccess +instanceKlass java/util/Lis \ No newline at end of file diff --git a/downloaded/ridgeModel-master - Copy.zip b/downloaded/ridgeModel-master - Copy.zip new file mode 100644 index 0000000..a898233 Binary files /dev/null and b/downloaded/ridgeModel-master - Copy.zip differ diff --git a/downloaded/ridgeModel-master/LICENSE b/downloaded/ridgeModel-master/LICENSE new file mode 100644 index 0000000..f46906f --- /dev/null +++ b/downloaded/ridgeModel-master/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Churchland laboratory + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/downloaded/ridgeModel-master/README.md b/downloaded/ridgeModel-master/README.md new file mode 100644 index 0000000..690b3e1 --- /dev/null +++ b/downloaded/ridgeModel-master/README.md @@ -0,0 +1,40 @@ +# ridgeModel + +Linear regression model, using ridge regression to fit a combination of task- or movement-events to high-dimensional neural data sets. + +The script 'tutorial_linearModel.m' shows how to build a large design matrix and fit it to neural data. To use it, you need the [widefield data set](http://repository.cshl.edu/38599/) from our paper ‘Single-trial neural dynamics are dominated by richly varied movements’ by Musall, Kaufman et al., 2019. +The tutorial will use an example widefield recording and extract different events (e.g. stimulus onset, whisking, etc) that are used to model the neural data. Have a look at the [paper](https://www.nature.com/articles/s41593-019-0502-4) for a more detailed explanation of the model. + +Each event is transformed into a 'design matrix' which is needed to estimate neural responses to each moment in time, before and after the event occurred. This is done by the function 'makeDesignMatrix' which turns an event matrix where each column is a trace of binary events into a larger design matrix and also returns an index that indicates which regressors in the new matrix correspond to the initial event trace. +In the tutorial, we are using three different event types that influence the range of regressors in the created design matrix. +'Whole-trial' matrices (eventType = 1) include every sample after the occurrence of the event until the end of the trial. We use this to estimate trials of a certain type, e.g. trials that were rewarded. +'Post-event' matrices (eventType = 2) include every sample after event occurrence until time 'sPostTime' has been reached. We use this for example to fit a stimulus-response. +'Peri-event' matrices (eventType = 3) include samples before the event, defined by 'mPreTime', and samples after the event, defined by 'mPostTime'. We usually use this for movements. +The model can also include continuous regressors. Just add them in as additional columns to the design matrix. In general, it is good practice to keep all regressors zero-mean and normalize their magnitude by dividing them by their standard deviation. The fitting function 'ridgeMML' will also do this internally by default. + +After the design matrix ('fullR') is created, it is fitted against a neural data set ('Vc'), using the 'ridgeMML' function. Here, neural data is a matrix with each column being a recording of some kind (e.g. a single neuron or in the tutorial a widefield dimension). +RidgeMML estimates the ridge penalty lambda for each column in Vc seperately ('ridgeVals') and also returns the corresponding beta weights for each regressor in fullR ('dimBeta'). + +The line + +```Vm = (fullR * dimBeta)'``` + +creates a reconstructed data set 'Vm' based on the model fits. + +The beta weights can then be explored to assess the neural responses to different events in the model. +Lastly, the tutorial shows how to run cross-validation using the 'crossValModel' function to test the model's predictive performance on left-out data. + + +# Other code, related to the paper + +The repo also includes other functions that were either used in the paper or somewhat simplified to provide an intuition of the neural data in general. They are located in the 'delayedDetection' folder. + +'delayDec_rebuildAvg' creates average responses of the widefield data for different times in the behavioral paradigm. It also creates d' maps for choice and sensory modality. + +'delayDec_regressModel' is the model that was used in the paper. All its functionality is also included in the tutorial. + +'delayDec_compareRegressors' compares cvR² and dR² for different model variables, creates plots that show increased spatial specificity for dR² over cvR² and computes dR² for each time point in the trial. + +'delayDec_compare2pRegressors' is mostly similar to 'delayDec_compareRegressors' but is used for 2-photon data. + +'delayDec_Neuropixels' fits a simplified version of the linear model to Neuropixels recordings in awake mice during visual stimulation. Subsequently, use 'delayDec_NeuropixelsResults' to visualize the results. \ No newline at end of file diff --git a/downloaded/ridgeModel-master/crossValModel.m b/downloaded/ridgeModel-master/crossValModel.m new file mode 100644 index 0000000..481ee93 --- /dev/null +++ b/downloaded/ridgeModel-master/crossValModel.m @@ -0,0 +1,80 @@ +function [Vm, cBeta, cR, subIdx, cRidge, cLabels] = crossValModel(fullR, Vc, cLabels, regIdx, regLabels, folds) +% function to compute cross-validated R^2 + +cIdx = ismember(regIdx, find(ismember(regLabels,cLabels))); %get index for task regressors +cLabels = regLabels(sort(find(ismember(regLabels,cLabels)))); %make sure motorLabels is in the right order + +%create new regressor index that matches motor labels +subIdx = regIdx; +subIdx = subIdx(cIdx); +temp = unique(subIdx); +for x = 1 : length(temp) + subIdx(subIdx == temp(x)) = x; +end +cR = fullR(:,cIdx); + +Vm = zeros(size(Vc),'single'); %pre-allocate motor-reconstructed V +rng(1) % for reproducibility +randIdx = randperm(size(Vc,2)); %generate randum number index +foldCnt = floor(size(Vc,2) / folds); +cBeta = cell(1,folds); + +for iFolds = 1:folds + dataIdx = true(1,size(Vc,2)); + + if folds > 1 + dataIdx(randIdx(((iFolds - 1)*foldCnt) + (1:foldCnt))) = false; %index for training data + if iFolds == 1 + [cRidge, cBeta{iFolds}] = ridgeMML(Vc(:,dataIdx)', cR(dataIdx,:), true); %get beta weights and ridge penalty for task only model + else + [~, cBeta{iFolds}] = ridgeMML(Vc(:,dataIdx)', cR(dataIdx,:), true, cRidge); %get beta weights for task only model. ridge value should be the same as in the first run. + end + + Vm(:,~dataIdx) = (cR(~dataIdx,:) * cBeta{iFolds})'; %predict remaining data + + if rem(iFolds,folds/5) == 0 + fprintf(1, 'Current fold is %d out of %d\n', iFolds, folds); + end + else + [cRidge, cBeta{iFolds}] = ridgeMML(Vc', cR, true); %get beta weights for task-only model. + Vm = (cR * cBeta{iFolds})'; %predict remaining data + disp('Ridgefold is <= 1, fit to complete dataset instead'); + end +end + +% % computed all predicted variance +% Vc = reshape(Vc,size(Vc,1),[]); +% Vm = reshape(Vm,size(Vm,1),[]); +% if length(size(U)) == 3 +% U = arrayShrink(U, squeeze(isnan(U(:,:,1)))); +% end +% covVc = cov(Vc'); % S x S +% covVm = cov(Vm'); % S x S +% cCovV = bsxfun(@minus, Vm, mean(Vm,2)) * Vc' / (size(Vc, 2) - 1); % S x S +% covP = sum((U * cCovV) .* U, 2)'; % 1 x P +% varP1 = sum((U * covVc) .* U, 2)'; % 1 x P +% varP2 = sum((U * covVm) .* U, 2)'; % 1 x P +% stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P +% cMap = gather((covP ./ stdPxPy)'); +% +% % movie for predicted variance +% cMovie = zeros(size(U,1),frames, 'single'); +% for iFrames = 1:frames +% +% frameIdx = iFrames:frames:size(Vc,2); %index for the same frame in each trial +% cData = bsxfun(@minus, Vc(:,frameIdx), mean(Vc(:,frameIdx),2)); +% cModel = bsxfun(@minus, Vm(:,frameIdx), mean(Vm(:,frameIdx),2)); +% covVc = cov(cData'); % S x S +% covVm = cov(cModel'); % S x S +% cCovV = cModel * cData' / (length(frameIdx) - 1); % S x S +% covP = sum((U * cCovV) .* U, 2)'; % 1 x P +% varP1 = sum((U * covVc) .* U, 2)'; % 1 x P +% varP2 = sum((U * covVm) .* U, 2)'; % 1 x P +% stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P +% cMovie(:,iFrames) = gather(covP ./ stdPxPy)'; +% clear cData cModel +% +% end +% fprintf('Run finished. RMSE: %f\n', median(cMovie(:).^2)); + +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDecRecordings.m b/downloaded/ridgeModel-master/delayedDetection/delayDecRecordings.m new file mode 100644 index 0000000..33db655 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDecRecordings.m @@ -0,0 +1,54 @@ +function [dataOverview, motorLabels, sensorLabels, cogLabels, segIdx, segLabels, segIdxRealign, fPath] = delayDecRecordings +%overview over recordings that are used in the delayed detection study. +%Also includes some other basic variables to ensure that different codes +%will use the same values. + +dataOverview = { + +'mSM30' 'Visual' '10-Oct-2017'; ... +'mSM30' 'Visual' '12-Oct-2017'; ... +'mSM34' 'Visual' '01-Dec-2017'; ... +'mSM34' 'Visual' '02-Dec-2017'; ... +'mSM36' 'Visual' '05-Dec-2017'; ... +'mSM36' 'Visual' '07-Dec-2017'; ... +'mSM46' 'Visual' '01-Dec-2017'; ... +'mSM46' 'Visual' '13-Jan-2018'; ... +'mSM49' 'Visual' '19-Dec-2017'; ... +'mSM49' 'Visual' '12-Mar-2018'; ... +'mSM57' 'Visual' '02-Feb-2018'; ... +'mSM57' 'Visual' '08-Feb-2018'; ... + +'mSM43' 'Audio' '21-Nov-2017'; ... +'mSM43' 'Audio' '23-Nov-2017'; ... +'mSM44' 'Audio' '21-Nov-2017'; ... +'mSM44' 'Audio' '29-Nov-2017'; ... +'mSM53' 'Audio' '14-Mar-2018'; ... +'mSM53' 'Audio' '21-Mar-2018'; ... +'mSM55' 'Audio' '13-Feb-2018'; ... +'mSM55' 'Audio' '16-Feb-2018'; ... +'mSM56' 'Audio' '22-Feb-2018'; ... +'mSM56' 'Audio' '27-Feb-2018'; ... +'mSM65' 'Audio' '08-Sep-2018'; ... +'mSM65' 'Audio' '10-Sep-2018'; ... +'mSM66' 'Audio' '08-Sep-2018'; ... +'mSM66' 'Audio' '10-Sep-2018'; ... + +}; + +%regressors for motor-based reconstruction +motorLabels = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel' 'lLick' 'rLick' 'fastPupil' 'slowPupil'... + 'piezo' 'whisk' 'nose' 'face' 'body' 'BaselineMove' 'HandleMove' 'StimulusMove' 'WaitMove' 'Move' 'bhvVideo'}; + +%regressors for sensory-based reconstruction +sensorLabels = {'lVisStim' 'rVisStim' 'lAudStim' 'rAudStim'}; + +%regressors for cognitive reconstruction +cogLabels = {'time' 'Choice' 'reward' 'prevReward' 'prevChoice' 'prevMod' 'water'}; + +%segment indices to compute changes per task episodes. +segIdx = {1:54 55:81 89:99 122:132 140:162 170:189}; %segment index for handel aligned data +segLabels = {'Baseline' 'Handle' 'Stim1' 'Stim2' 'Wait' 'Response'}; +segIdxRealign = {1:54 55:79 80:98 113:131 132:162 163:179}; %segment index after realignment on both handle and stimulus + +% file path on grid server +fPath = '\\grid-hs\churchland_nlsas_data\data\BpodImager\Animals\'; %data path on the server diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuroPixels.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuroPixels.m new file mode 100644 index 0000000..5b7ad01 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuroPixels.m @@ -0,0 +1,282 @@ +function delayDec_NeuroPixels(Animal,reload) + +if ~exist('reload','var') + reload = false; %flag to reload video data and re-compute movement variables +end + +%% some variables +nrBlocks = 16; %number of blocks for svd +nrDims = 200; +ridgeFolds = 10; +sRate = 30; +preStim = 0.5; %baseline before stim onset +stimDur = 2.5; %total duration for stimulus regressor/PSTH +fPath = []; +filterOrder = 50; +lowCut = 0.03; %lower cutoff for low-pass filter (for ACh) +highCut = 10; %higher cutoff for band-pass filter (for NE) +mPreTime = ceil(0.5 * sRate); % precede motor events to capture preparatory activity in frames +mPostTime = ceil(3 * sRate); % follow motor events for mPostStim in frames +motorIdx = [-(mPreTime: -1 : 1) 0 (1:mPostTime)]; %index for design matrix to cover pre- and post motor action + +eyeThresh(2) = 0.075; +eyeThresh(1) = 0; +cPath = [pwd filesep 'Neuropixels' filesep]; %path to neuropixels data +fPath = [cPath filesep Animal filesep]; + +if strcmpi(Animal, 'NP9') + videoData = 'NP9_006_Video_1.mp4'; + spikeData = 'NP9_006_spikes.mat'; + trialData = 'NP9_006_sync.mat'; + vidFrames = 76216; +elseif strcmpi(Animal, 'N14') + videoData = 'N14_008_Video_1.mp4'; + spikeData = 'NP14_008_spikes.mat'; + trialData = 'NP14_008_sync.mat'; + vidFrames = 41334; +end + +% regressor groups +regGroups = {'stim' 'pupil' 'nose' 'snout' 'motion' 'video' 'movement'}; %group names, second row are individual regressor labels +regGroups{2,1} = {'stim'}; +regGroups{2,2} = {'fastPupil' 'slowPupil'}; +regGroups{2,3} = {'nose'}; +regGroups{2,4} = {'snout'}; +regGroups{2,5} = {'ME'}; +regGroups{2,6} = {'video'}; +regGroups{2,7} = {'fastPupil' 'slowPupil' 'nose' 'snout' 'ME' 'video'}; + +%% load video data +if ~exist([fPath 'faceVars.mat'], 'file') || ~exist([fPath 'vidR.mat'], 'file') || ~exist([fPath 'absVidR.mat'], 'file') || reload + Cnt = 0; + v = VideoReader([fPath videoData]); + cVideo = zeros(300,480,vidFrames, 'uint8'); + while hasFrame(v) + Cnt = Cnt + 1; + temp = readFrame(v); + cVideo(:,:,Cnt) = arrayResize(temp(:,:,1),2); + + if rem(Cnt, 1000) == 0 + disp(Cnt) + end + end + vidSize = size(cVideo); + disp(Cnt); +end + +%% check for facial features and create if missing +if ~exist([fPath 'faceVars.mat'], 'file') || reload + [eyeVars, snoutMotion, noseMotion] = Behavior_getFaceMovements(cVideo, fPath, [], true); + save([fPath 'faceVars.mat'],'eyeVars', 'snoutMotion', 'noseMotion'); +else + load([fPath 'faceVars.mat'],'eyeVars', 'snoutMotion', 'noseMotion'); +end + +%% create pupil variables +% remove outliers and filter pupil +pupil = mean(eyeVars.axes,2); +temp = (pupil - nanmean(pupil)) ./ nanstd(pupil); +idx = [0;diff(temp) > 0.25] | [0;diff(temp) < -0.25] | temp < -4 | temp > 4; %index for blinks / false reads +pupil(idx) = NaN; +pupilFill = fillgaps(pupil, 300); %fill NaN gaps between trials +pupilFill = [pupilFill;pupilFill(end-round(length(pupil) * 0.1):end)]; %add some padding to the end to avoid filter artefacts +pupilFill = zscore(pupilFill); + +% high-pass butter filter for pupil data. this is to isolate adrenergic component +fastFilter = fdesign.bandpass('N,F3dB1,F3dB2', filterOrder, lowCut, highCut, sRate); +fastFilter = design(fastFilter, 'butter'); +fastPupil = fastFilter.filter(pupilFill); fastPupil = flipud(fastFilter.filter(flipud(fastPupil))); %filter twice to correct for phaseshift + +% low-pass butter filter for pupil data. this is to isolate cholinergic component +slowFilter = fdesign.lowpass('N,F3dB', filterOrder, lowCut, sRate); +slowFilter = design(slowFilter, 'butter'); +slowPupil = slowFilter.filter(pupilFill); slowPupil = flipud(slowFilter.filter(flipud(slowPupil))); + +%remove padding +pupilFill(end-round(length(pupil) * 0.1):end) = []; +fastPupil(end-round(length(pupil) * 0.1):end) = []; +slowPupil(end-round(length(pupil) * 0.1):end) = []; + +%% check for video SVD and create if missing +if ~exist([fPath 'vidR.mat'], 'file') || reload + cVideo = reshape(cVideo, [], vidSize(3)); %merge all pixels + blockSize = ceil(vidSize(1:2)/sqrt(nrBlocks)); %size of each block + ind = im2col(reshape(1:prod(vidSize(1:2)),vidSize(1:2)),blockSize,'distinct'); %build index for diffent image blocks + + tic + vidV = NaN(nrDims, nrBlocks, size(cVideo,2)); + for x = 1 : size(ind,2) + mov = single(cVideo(ind(:,x),:)); %get current segment + [~, s, Vr] = fsvd(mov, nrDims, 1, 0); + vidV(:, x, :) = s * Vr'; %multiply S into V, so only U and V from here on + end + + vidV = reshape(vidV, [], size(vidV,3)); %merge video dimensions + [~, s, Vr] = fsvd(vidV, nrDims, 1, 0); + vidR = s * Vr'; + vidR = bsxfun(@minus, vidR, mean(vidR, 2)); + vidR = bsxfun(@rdivide, vidR, std(vidR, [], 2))'; %this is the video regressor in the model + disp('First SVD complete'); toc + save([fPath 'vidR.mat'],'vidR'); + cVideo = reshape(cVideo, vidSize); %back to original form +else + load([fPath 'vidR.mat'],'vidR'); +end + +%% compute motion energy and repeat svd +if ~exist([fPath 'absVidR.mat'], 'file') || reload + cVideo = reshape(cVideo, vidSize); + cVideo = cat(3,cVideo(:,:,1),cVideo); %duplicate first frame + cVideo = abs(diff(cVideo,[],3)); %compute absolute of temporal derivative (motion energy) + cVideo = reshape(cVideo, [], vidSize(3)); %merge all pixels + blockSize = ceil(vidSize(1:2)/sqrt(nrBlocks)); %size of each block + ind = im2col(reshape(1:prod(vidSize(1:2)),vidSize(1:2)),blockSize,'distinct'); %build index for diffent image blocks + + vidV = NaN(nrDims, nrBlocks, size(cVideo,2)); + for x = 1 : size(ind,2) + mov = single(cVideo(ind(:,x),:)); %get current segment + tic; [~, s, Vr] = fsvd(mov, nrDims, 1, 0); toc; + vidV(:, x, :) = s * Vr'; %multiply S into V, so only U and V from here on + end + vidV = reshape(vidV, [], size(vidV,3)); %merge video dimensions + [~, s, Vr] = fsvd(vidV, nrDims, 1, 0); + absVidR = s * Vr'; + absVidR = bsxfun(@minus, absVidR, mean(absVidR, 2)); + absVidR = bsxfun(@rdivide, absVidR, std(absVidR, [], 2))'; %this is the motion energy regressor in the model + disp('Second SVD complete'); toc + save([fPath 'absVidR.mat'],'absVidR'); +else + load([fPath 'absVidR.mat'],'absVidR'); +end +clear cVideo + +%% get ephys data +load([fPath spikeData],'sp'); +load([fPath trialData],'sync_data'); +if strcmp(trialData, 'NP9_006_sync.mat') + sync_data.photodiode(57) = []; +end + +dataCut = min([round((sp.st(end)-sync_data.photodiode(1)) * sRate) size(vidR,1)]); %last datapoint to be used +spikeCluster = unique(sp.clu); +spikeTrace = zeros(dataCut, size(sp.cgs,2), 'single'); +for iUnits = 1 : size(sp.cgs,2) + cData = sp.st(sp.clu == spikeCluster(iUnits)) - sync_data.photodiode(1); + cData(cData <= 0) = []; + cData(cData > dataCut / sRate) = []; + spikeTrace(:, iUnits) = histcounts(cData, 0 : 1/sRate : dataCut / sRate ); +end +spikeTrace = smoothCol(spikeTrace, 5, 'gauss'); %do some smoothing +spikeTrace = bsxfun(@minus, spikeTrace, mean(spikeTrace)); %make zero-mean +save([fPath 'spikeTrace.mat'], 'spikeTrace'); + +%% cut behavioral regressors to size and make design matrices +vidR = vidR(1:dataCut, :); +absVidR = absVidR(1:dataCut, :); + +% keep unfiltered pupil estimate in the model +temp = zeros(dataCut,2,'single'); +temp(:,1) = zscore(pupilFill(1:dataCut)); +temp(2:end,2) = diff(zscore(pupilFill(1:dataCut))); + +slowPupilR = [temp makeDesignMat(slowPupil)]; +fastPupilR = makeDesignMat(fastPupil); +noseMotionR = makeDesignMat(smooth(noseMotion, 10)); +snoutMotionR = makeDesignMat(smooth(snoutMotion, 10)); + +%% build stim regressors +stimIDs = unique(sync_data.stimIDs); +stimCnt = length(unique(sync_data.stimIDs)); +stimOn = sync_data.photodiode - sync_data.photodiode(1); +stimR = cell(1, stimCnt); + +sMat = single(diag(ones(1,(stimDur*sRate)))); +for iStim = 1 : stimCnt + cIdx = sync_data.stimIDs == stimIDs(iStim); + cIdx = round(stimOn(cIdx) * sRate); + cIdx(cIdx + ((stimDur-1)*sRate) > size(spikeTrace,1)) = []; + cIdx(cIdx - (sRate*preStim) < 0) = []; + + % create stim regressors + stimR{iStim} = zeros(size(sMat,1), dataCut, 'single'); + for iRuns = 1 : length(cIdx) + stimR{iStim}(:, cIdx(iRuns)- (sRate*preStim) : cIdx(iRuns) + ((stimDur-preStim)*sRate)-1) = sMat; + end +end +stimR = cat(1, stimR{:}); +stimR = bsxfun(@minus, stimR, mean(stimR, 2)); +stimR = bsxfun(@rdivide, stimR, std(stimR, [], 2))'; + +%% create full design matrix +fullR = [stimR fastPupilR slowPupilR noseMotionR snoutMotionR absVidR vidR]; +fullR = bsxfun(@minus, fullR, mean(fullR, 1)); + +% labels for different regressor sets. It is REALLY important this agrees with the order of regressors in fullR. +regLabels = {'stim' 'fastPupil' 'slowPupil' 'nose' 'snout' 'ME' 'video'}; + +%index to reconstruct different response kernels +regIdx = [ + ones(1,size(stimR,2))*find(ismember(regLabels,'stim')) ... + ones(1,size(fastPupilR,2))*find(ismember(regLabels,'fastPupil')) ... + ones(1,size(slowPupilR,2))*find(ismember(regLabels,'slowPupil')) ... + ones(1,size(noseMotionR,2))*find(ismember(regLabels,'nose')) ... + ones(1,size(snoutMotionR,2))*find(ismember(regLabels,'snout')) ... + ones(1,size(absVidR,2))*find(ismember(regLabels,'ME')) ... + ones(1,size(vidR,2))*find(ismember(regLabels,'video'))]; + +%% run full model fit for PSTHs +[~, dimBeta] = ridgeMML(spikeTrace, fullR, true); %make model fit +fullFit = fullR * dimBeta; %fit data +stimIdx = regIdx == find(ismember(regLabels,'stim')); +vidFit = fullR(:, ~stimIdx) * dimBeta(~stimIdx, :); %fit data +stimFit = fullR(:, stimIdx) * dimBeta(stimIdx, :); %fit data +save([fPath 'fullFit.mat'], 'fullFit', 'vidFit', 'stimFit'); +save([fPath 'regData.mat'], 'fullR', 'dimBeta', 'regLabels', 'regIdx'); +disp('Full model fit completed'); + +%% cross-validated models - create for different regressors +fullV = crossValModel(regLabels); %cross-validated full model. +allV = NaN(size(fullV,1), size(fullV,2), 2, size(regGroups,2), 'single'); +for iRegs = 1 : size(regGroups,2) + allV(:, :, 1, iRegs) = crossValModel(regGroups{2,iRegs}(:)'); %regressor-alone model + allV(:, :, 2, iRegs) = crossValModel(regLabels(~ismember(regLabels,regGroups{2,iRegs}(:)'))); %regressor-exclude model + fprintf('CrossVal for %s complete (%g/%g)\n', regGroups{1,iRegs}, iRegs, size(regGroups,2)); +end +save([fPath 'fullV.mat'], 'fullV', 'regLabels'); +save([fPath 'allV.mat'], 'allV', 'regGroups'); + +%% nested functions + function dataR = makeDesignMat(data) + data = data(1:dataCut); + temp = (data - prctile(data,1))./ nanstd(data); %minimum values are at 0, signal in standard deviation units + [dMat, traceOut] = delayDec_analogToDesign(temp, prctile(temp,60), 1, sRate, sRate, motorIdx, 0); + dataR = [zscore(single(traceOut)) cat(1,dMat{:})]; %rebuild continuous format +% temp = [zscore(single(traceOut)) cat(1,dMat{:})]; %rebuild continuous format +% [dMat, ~] = delayDec_analogToDesign(traceOut, prctile(traceOut,75), 1, sRate, sRate, motorIdx, 0); +% dataR = [temp cat(1,dMat{:})]; %add high amplitude movements separately + end + + function [Vm, cBeta, cLabels] = crossValModel(cLabels) + rng(1) % for reproducibility + Vm = zeros(size(spikeTrace),'single'); %pre-allocate reconstructed spikeTrace + randIdx = randperm(size(spikeTrace,1)); %generate randum number index + foldCnt = floor(size(spikeTrace,1) / ridgeFolds); + cIdx = ismember(regIdx, find(ismember(regLabels,cLabels))); %get index for task regressors + + for iFolds = 1:ridgeFolds + dataIdx = true(1,size(spikeTrace,1)); + dataIdx(randIdx(((iFolds - 1)*foldCnt) + (1:foldCnt))) = false; %index for training data + if iFolds == 1 + [cRidge, cBeta] = ridgeMML(spikeTrace(dataIdx,:), fullR(dataIdx,cIdx), true); %get beta weights and ridge penalty for task only model + else + [~, cBeta] = ridgeMML(spikeTrace(dataIdx,:), fullR(dataIdx,cIdx), true, cRidge); %get beta weights for task only model. ridge value should be the same as in the first run. + end + Vm(~dataIdx, :) = (fullR(~dataIdx,cIdx) * cBeta); %predict remaining data + + if rem(iFolds,ridgeFolds/5) == 0 + fprintf(1, 'Current fold is %d out of %d\n', iFolds, ridgeFolds); + end + end + end +end + diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuropixelsResults.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuropixelsResults.m new file mode 100644 index 0000000..cf0803f --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_NeuropixelsResults.m @@ -0,0 +1,270 @@ +function delayDec_NeuropixelsResults(Animal) + +cPath = [pwd filesep 'Neuropixels' filesep]; %path to neuropixels data + +% clusterLabels = {'V1', 'Cingulate', 'SC', 'Reticular'}; +clusterLabels = {'VC', 'SC', 'RF'}; +if strcmpi(Animal, 'all') + fPath{1} = [cPath filesep 'NP9' filesep]; + fPath{2} = [cPath filesep 'N14' filesep]; + trialData{1} = 'NP9_006_sync.mat'; + trialData{2} = 'NP14_008_sync.mat'; + spikeData{1} = 'NP9_006_spikes.mat'; + spikeData{2} = 'NP14_008_spikes.mat'; + depthClusters{1} = {[2541 3500], [1371 2540], [0 1370]}; + depthClusters{2} = {[2011 3700], [871 2010], [0 870]}; +elseif strcmpi(Animal, 'NP9') + fPath{1} = [cPath filesep Animal filesep]; + trialData{1} = 'NP9_006_sync.mat'; + spikeData{1} = 'NP9_006_spikes.mat'; + depthClusters{1} = {[2541 3500], [1371 2540], [0 1370]}; +elseif strcmpi(Animal, 'N14') + fPath{1} = [cPath filesep Animal filesep]; + trialData{1} = 'NP14_008_sync.mat'; + spikeData{1} = 'NP14_008_spikes.mat'; + depthClusters{2} = {[2011 3700], [871 2010], [0 870]}; +end +preStim = 0.5; +stimDur = 2.5; +sRate = 30; + +%% load data for PSTHs +allSpikes = cell(1, length(fPath)); +fullModel = cell(1, length(fPath)); +vidModel = cell(1, length(fPath)); +stimModel = cell(1, length(fPath)); +for x = 1 : length(fPath) + load([fPath{x} 'spikeTrace.mat'], 'spikeTrace'); + load([fPath{x} 'fullFit.mat'], 'fullFit', 'vidFit', 'stimFit'); + allSpikes{x} = spikeTrace; + + load([fPath{x} trialData{x}],'sync_data'); + stimIdx = round((sync_data.photodiode - sync_data.photodiode(1)) * sRate); %stimulus onset times + stimIdx(stimIdx + ((stimDur-preStim)*sRate) > size(spikeTrace,1)) = []; + stimIdx(stimIdx - sRate < 0) = []; + stimIdx = bsxfun(@plus, repmat(stimIdx, 1, (stimDur*sRate)), -(preStim*sRate):((stimDur-preStim)*sRate)-1)'; + stimIdx = stimIdx(:); + + % create average over all stimuli + cData = spikeTrace(stimIdx, :); + cData = reshape(cData, (stimDur*sRate), [], size(cData,2)); + rawMean{x} = squeeze(mean(cData,2)); + + cData = fullFit(stimIdx, :); + cData = reshape(cData, (stimDur*sRate), [], size(cData,2)); + fullMean{x} = squeeze(mean(cData,2)); + + cData = stimFit(stimIdx, :); + cData = reshape(cData, (stimDur*sRate), [], size(cData,2)); + stimMean{x} = squeeze(mean(cData,2)); + + cData = vidFit(stimIdx, :); + cData = reshape(cData, (stimDur*sRate), [], size(cData,2)); + vidMean{x} = squeeze(mean(cData,2)); + + % load spike data to get depth for each contact + load([fPath{x} spikeData{x}],'sp'); + if strcmpi(fPath{x}, '\\grid-hs\churchland_nlsas_data\data\ashley_looming\PupilVideos\N14\') + allDepths{x} = sp.clusterDepths' - 1020; %this recording needs to be corrected for some reason + else + allDepths{x} = sp.clusterDepths'; + end +end +rawMean = cat(2,rawMean{:}); +fullMean = cat(2,fullMean{:}); +stimMean = cat(2,stimMean{:}); +vidMean = cat(2,vidMean{:}); + +%% make PSTH figure - mean over all neurons +figure; +subplot(2, 2, 1:2); +plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, mean(rawMean,2), 'linewidth', 4, 'color', 'k'); hold on +plot(1/sRate : 1/sRate : size(fullMean,1) / sRate, mean(fullMean,2), 'linewidth', 4, 'color', 'r'); axis square; hold off +xlim([0 stimDur]) + +subplot(2,2,3); +plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, mean(rawMean,2), 'linewidth', 4, 'color', [0.5 0.5 0.5]); axis square; hold on +plot(1/sRate : 1/sRate : size(stimMean,1) / sRate, mean(stimMean,2), 'linewidth', 4, 'color', 'g'); hold off +xlim([0 stimDur]) + +subplot(2,2,4); +plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, mean(rawMean,2), 'linewidth', 4, 'color', [0.5 0.5 0.5]); axis square; hold on +plot(1/sRate : 1/sRate : size(vidMean,1) / sRate, mean(vidMean,2), 'linewidth', 4, 'color', 'b'); hold off +xlim([0 stimDur]) + +%% show task/motor index histogram +vidVar = sum(abs(vidMean),1); +stimVar = sum(abs(stimMean),1); +taskIndex = (((stimVar-vidVar) ./ (stimVar + vidVar)) + 1) / 2; +motorIndex = (((vidVar-stimVar) ./ (stimVar + vidVar)) + 1) / 2; + +h1 = figure; +subplot(2,1,1); +histogram(taskIndex,0:0.05:1, 'FaceColor', 'g'); +ylim([0 75]); +axis square; title(['Median modIdx: ' num2str(median(taskIndex)) ' - TaskIndex']) +xlabel('task index'); ylabel('cell count'); +% vline(taskIndex([5849 5944 6005 5941 5986]),'r', 'task cell'); + +subplot(2,1,2); +histogram(motorIndex,0:0.05:1, 'FaceColor', 'r'); +ylim([0 75]); +axis square; title(['Median modIdx: ' num2str(median(motorIndex)) ' - MotorIndex']) +xlabel('Move index'); ylabel('cell count'); +% vline(taskIndex([5849 5944 6005 5941 5986]),'r', 'task cell'); + +%% single cell examples +% [~, c] = sort(motorIndex,'descend'); +% figure; +% for x = 1 : length(c) +% +% subplot(2, 2, 1:2); +% plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, rawMean(:,c(x)), 'linewidth', 4, 'color', 'k'); hold on +% plot(1/sRate : 1/sRate : size(fullMean,1) / sRate, fullMean(:,c(x)), 'linewidth', 4, 'color', 'r'); axis square; hold off +% +% subplot(2,2,3); +% plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, rawMean(:,c(x)), 'linewidth', 4, 'color', [0.5 0.5 0.5]); axis square; hold on +% plot(1/sRate : 1/sRate : size(stimMean,1) / sRate, stimMean(:,c(x)), 'linewidth', 4, 'color', 'g'); hold off +% +% subplot(2,2,4); +% plot(1/sRate : 1/sRate : size(rawMean,1) / sRate, rawMean(:,c(x)), 'linewidth', 4, 'color', [0.5 0.5 0.5]); axis square; hold on +% plot(1/sRate : 1/sRate : size(vidMean,1) / sRate, vidMean(:,c(x)), 'linewidth', 4, 'color', 'b'); hold off +% +% pause +% end + +%% load data for predicted R2 using different models +cFull = cell(1,length(fPath)); +cRegs = cell(1,length(fPath)); +animalID = cell(1,length(fPath)); +for x = 1 : length(fPath) + load([fPath{x} 'fullV.mat'], 'fullV', 'regLabels'); + load([fPath{x} 'allV.mat'], 'allV', 'regGroups'); + Vm{x} = fullV; % + animalID{x} = ones(size(Vm{x},2),1)*x; + for y = 1:size(allSpikes{x},2) + cFull{x}(y,1) = corr2(allSpikes{x}(:,y), fullV(:,y))^2; + for z = 1:size(allV,4) + cRegs{x}(y,1,z) = corr2(allSpikes{x}(:,y), allV(:,y,1,z))^2; + cRegs{x}(y,2,z) = corr2(allSpikes{x}(:,y), allV(:,y,2,z))^2; + end + end +end +cFull = cat(1,cFull{:}); +cRegs = cat(1,cRegs{:}); +animalID = cat(1,animalID{:}); + +%% make R2 trace figure +stimReg = ismember(regGroups(1,:), 'stim'); +moveReg = ismember(regGroups(1,:), 'movement'); + +figure +subplot(1,2,1) +[~, c] = sort(cFull,'descend'); +plot(cFull(c), 'linewidth', 4, 'color', 'k'); hold on; +plot(cRegs(c, 1, moveReg), 'linewidth', 4, 'color', 'r'); +plot(cRegs(c, 1, stimReg), 'linewidth', 4, 'color', 'g'); +xlabel('Neurons'); +ylabel('cross-val. R^2'); +grid on; axis square +title('Predicted R^2 - video only'); + +subplot(1,2,2) +fullMean = [mean(cRegs(:, 1, stimReg)) mean(cRegs(:, 1, moveReg))]; +fullError = [sem(cRegs(:, 1, stimReg)) sem(cRegs(:, 1, moveReg))]; + +errorbar(fullMean,fullError,'k-','linestyle','none','lineWidth',3); hold on +bar(fullMean,'FaceColor','g','EdgeColor','k','BarWidth',0.5,'LineWidth',2); + +uniqueMean = [mean(cFull-cRegs(:, 2, stimReg)) mean(cFull-cRegs(:, 2, moveReg))]; +uniqueError = [sem(cFull-cRegs(:, 2, stimReg)) sem(cFull-cRegs(:, 2, moveReg))]; + +errorbar(-uniqueMean,uniqueError,'k-','linestyle','none','lineWidth',3); hold on +bar(-uniqueMean,'FaceColor',[25 111 61]/255,'EdgeColor','k','BarWidth',0.5,'LineWidth',2); + +ax = gca; +set(ax,'xTick',1:size(fullMean,2)) +set(ax,'xTickLabel',{'Stimulus' 'Movement'}) +set(ax,'XTickLabelRotation',45) +ax.TickLength = [0 0]; +ylabel('cross-val. R^2 R^2'); ylim([-0.2 0.2]); +axis square + +%% R^2 for different depths +figure +for iAreas = 1 : length(clusterLabels) + % run analysis for selected neurons + stimReg = ismember(regGroups(1,:), 'stim'); + moveReg = ismember(regGroups(1,:), 'movement'); + + % find contacts at the right depth for each area + cIdx = {}; clear cData uniqueData + for x = 1 : length(fPath) + if ~isempty(depthClusters{x}{iAreas}) + cIdx{x} = find(allDepths{x} > depthClusters{x}{iAreas}(1) & allDepths{x} < depthClusters{x}{iAreas}(2))'; + end + if x == 2 + cIdx{x} = cIdx{x} + size(allSpikes{1},2); + end + cData(x,1) = mean(cRegs(cIdx{x}, 1, stimReg)); + cData(x,2) = mean(cRegs(cIdx{x}, 1, moveReg)); + + uniqueData(x,1) = mean(cFull(cIdx{x}, 1) - cRegs(cIdx{x}, 1, moveReg)); + uniqueData(x,2) = mean(cFull(cIdx{x}, 1) - cRegs(cIdx{x}, 1, stimReg)); + disp(size(cIdx{x},2)); + end + + subplot(1,length(clusterLabels),iAreas) + fullMean = [nanmean(cData(:,1),1) nanmean(cData(:,2),1)]; +% fullError = [sem(cData(:,1),1) sem(cData(:,2),1)]; +% errorbar(fullMean,fullError,'k-','linestyle','none','lineWidth',3); hold on + bar(fullMean,'FaceColor','g','EdgeColor','k','BarWidth',0.5,'LineWidth',2); hold on; + plot([1 1; 2 2]',cData,'og','MarkerFaceColor','w') + + uniqueMean = [nanmean(uniqueData(:,1),1) nanmean(uniqueData(:,2),1)]; +% uniqueError = [sem(uniqueData(:,1),1) sem(uniqueData(:,2),1)]; +% errorbar(uniqueMean,uniqueError,'k-','linestyle','none','lineWidth',3); hold on + + bar(-uniqueMean,'FaceColor',[25 111 61]/255,'EdgeColor','k','BarWidth',0.5,'LineWidth',2); + plot([1 1; 2 2]',-uniqueData,'ob','Color',[25 111 61]/255,'MarkerFaceColor','w') + + ax = gca; + set(ax,'xTick',1:size(fullMean,2)) + set(ax,'xTickLabel',{'Stimulus' 'Movement'}) + set(ax,'XTickLabelRotation',45) + ax.TickLength = [0 0]; + ylabel('cross-val. R^2'); + ylim([-0.35 0.35]); + axis square + title(clusterLabels{iAreas}); +end + +%% single cell example +[~, c] = sort(cFull,'descend'); +figure +% for x = 1 : length(c) + x = 12; + if c(x) <= size(allSpikes{1},2) + cTime = (1/sRate : 1/sRate : size(allSpikes{1},1)/sRate)/60; %time in minutes + plot(cTime, smooth(allSpikes{1}(:,c(x)),10),'linewidth',2,'color',[0.5 0.5 0.5]); hold on + plot(cTime, smooth(Vm{1}(:,c(x)),10),'linewidth',2,'color','k'); hold off + else + cTime = (1/sRate : 1/sRate : size(allSpikes{2},1)/sRate)/60; %time in minutes + plot(cTime, smooth(allSpikes{2}(:,c(x)-size(allSpikes{1},2)),10),'linewidth',2,'color',[0.5 0.5 0.5]); hold on + plot(cTime, smooth(Vm{2}(:,c(x)-size(allSpikes{1},2)),10),'linewidth',2,'color','k'); hold off + end +% pause +% end +xlim([cTime(1) cTime(end)]); xlabel('time (min)');legend({'Raw data' 'Model'}); +ylabel('Firing rate (Hz)'); + +%% correlation between neurons +[~, c] = sort(cFull,'descend'); +% [~, c] = sort(cat(1,allDepths{:}),'ascend'); +R1 = corrcoef(allSpikes{1}(:,c(c <= size(allSpikes{1},2)))); +R2 = corrcoef(allSpikes{2}(:,c(c > size(allSpikes{1},2))-size(allSpikes{1},2))); + +figure +subplot(1,2,1); imagesc(abs(R1));axis square; caxis([0 0.5]); title('NP9');xlabel('Neurons (sorted)');ylabel('Neurons (sorted)'); +subplot(1,2,2); imagesc(abs(R2));axis square; caxis([0 0.5]); title('N14');xlabel('Neurons (sorted)');ylabel('Neurons (sorted)'); + diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_RegressModel.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_RegressModel.m new file mode 100644 index 0000000..e754e65 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_RegressModel.m @@ -0,0 +1,954 @@ +function delayDec_RegressModel(cPath,Animal,Rec,dType) + +if ~strcmpi(cPath(end),filesep) + cPath = [cPath filesep]; +end + +if ~exist('dType', 'var') || isempty(dType) + dType = 'Widefield'; %default is widefield data +end + +if strcmpi(dType,'twoP') + sRate = 31; % Sampling rate of imaging in Hz + piezoLine = 5; % channel in the analog data that contains data from piezo sensor + stimLine = 4; % channel in the analog data that contains stimulus trigger. + +elseif strcmpi(dType,'Widefield') + sRate = 30; % Sampling rate of imaging in Hz + piezoLine = 2; % channel in the analog data that contains data from piezo sensor + stimLine = 6; % channel in the analog data that contains stimulus trigger. +end + +%% general variables +Paradigm = 'SpatialDisc'; +cPath = [cPath Animal filesep Paradigm filesep Rec filesep]; %Widefield data path +sPath = ['\\grid-hs\churchland_nlsas_data\data\BpodImager\Animals\' Animal filesep Paradigm filesep Rec filesep]; %server data path. not used on hpc. +% sPath = ['/sonas-hs/churchland/hpc/home/space_managed_data/BpodImager/Animals/' Animal filesep Paradigm filesep Rec filesep]; %server data path. not used on hpc. +preStimDur = ceil(1.8*sRate) / sRate; % Duration of trial before lever grab in seconds +postStimDur = ceil(4.5*sRate) / sRate; % Duration of trial after lever grab onset in seconds +frames = round((preStimDur + postStimDur) * sRate); %nr of frames per trial +trialDur = (frames * (1/sRate)); %duration of trial in seconds + +%other variables +mPreTime = ceil(0.5*sRate) / sRate; % precede motor events to capture preparatory activity in seconds +mPostTime = ceil(2*sRate) / sRate; % follow motor events for mPostStim in seconds +motorIdx = [-((mPreTime * sRate): -1 : 1) 0 (1:(mPostTime * sRate))]; %index for design matrix to cover pre- and post motor action +tapDur = 0.1; % minimum time of lever contact, required to count as a proper grab. +leverMoveDur = 0.25; %duration of lever movement. this is used to orthogonalize video against lever movement. +leverMoveDur = ceil(leverMoveDur * sRate); %convert to frames +ridgeFolds = 10; %number of cross-validations for motor/task models +opMotorLabels = {'lLick' 'rLick' 'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel'}; %operant motor regressors + +bhvDimCnt = 200; % number of dimensions from behavioral videos that are used as regressors. +% dims = 200; % number of dimensions from V that will be used in the model - will be overwritten if analyzing twoP data instead. +gaussShift = 1; % inter-frame interval between regressors. Will use only every 'gaussShift' regressor and convolve with gaussian of according FHWM to reduce total number of used regressors. +trialSegments = {1:54 55:81 89:132 140:162 170:188}; %trial segments to determine motion. + +[~, motorLabels] = delayDecRecordings; %get motor labels for motor-only model + +%% load data +bhvFile = dir([cPath filesep Animal '_' Paradigm '*.mat']); +load([cPath bhvFile(1).name],'SessionData'); %load behavior data +SessionData.TrialStartTime = SessionData.TrialStartTime * 86400; %convert trailstart timestamps to seconds + +if strcmpi(dType,'Widefield') + if exist([cPath 'Vc.mat'],'file') ~= 2 %check if data file exists and get from server otherwise + copyfile([sPath 'Vc.mat'],[cPath 'Vc.mat']); + copyfile([sPath 'mask.mat'],[cPath 'mask.mat']); + bhvFile = dir([sPath filesep Animal '_' Paradigm '*.mat']); + copyfile([sPath bhvFile.name],[cPath bhvFile.name]); + end + + load([cPath 'mask.mat'], 'mask') + load([cPath 'Vc.mat'], 'Vc', 'U', 'trials') + dims = size(Vc,1); + + Vc = Vc(1:dims,:,:); + U = U(:,:,1:dims); + + % ensure there are not too many trials in Vc + ind = trials > SessionData.nTrials; + trials(ind) = []; + Vc(:,:,ind) = []; + if ~exist('bTrials','var') + bTrials = trials; + end + +elseif strcmpi(dType,'twoP') + + load([cPath 'data'], 'data'); %load 2p data + % ensure there are not too many trials in the dataset + bTrials = data.trialNumbers; + trials = bTrials; + bTrials(~ismember(data.trialNumbers,data.bhvTrials)) = []; %don't use trials that have problems with trial onset times + bTrials(SessionData.DidNotChoose(bTrials) | SessionData.DidNotLever(bTrials) | ~SessionData.Assisted(bTrials)) = []; %don't use unperformed/assisted trials + + data.dFOF(:,:,~ismember(data.trialNumbers,bTrials)) = []; + data.DS(:,:,~ismember(data.trialNumbers,bTrials)) = []; + data.analog(:,:,~ismember(data.trialNumbers,bTrials)) = []; + + Vc = data.dFOF; %Vc is now neurons x frames x trials + dims = size(data.dFOF,1); %dims is now # of neurons instead +end + +bhv = selectBehaviorTrials(SessionData,bTrials); %only use completed trials that are in the Vc dataset +trialCnt = length(bTrials); + +%% load behavior data +if exist([cPath 'BehaviorVideo' filesep 'SVD_CombinedSegments.mat'],'file') ~= 2 || ... %check if svd behavior exists on hdd and pull from server otherwise + exist([cPath 'BehaviorVideo' filesep 'motionSVD_CombinedSegments.mat'],'file') ~= 2 + + if ~exist([cPath 'BehaviorVideo' filesep], 'dir') + mkdir([cPath 'BehaviorVideo' filesep]); + end + copyfile([sPath 'BehaviorVideo' filesep 'SVD_CombinedSegments.mat'],[cPath 'BehaviorVideo' filesep 'SVD_CombinedSegments.mat']); + copyfile([sPath 'BehaviorVideo' filesep 'motionSVD_CombinedSegments.mat'],[cPath 'BehaviorVideo' filesep 'motionSVD_CombinedSegments.mat']); + copyfile([sPath 'BehaviorVideo' filesep 'FilteredPupil.mat'],[cPath 'BehaviorVideo' filesep 'FilteredPupil.mat']); + copyfile([sPath 'BehaviorVideo' filesep 'segInd1.mat'],[cPath 'BehaviorVideo' filesep 'segInd1.mat']); + copyfile([sPath 'BehaviorVideo' filesep 'segInd2.mat'],[cPath 'BehaviorVideo' filesep 'segInd2.mat']); + + movFiles = dir([sPath 'BehaviorVideo' filesep '*Video_*1.mj2']); + copyfile([sPath 'BehaviorVideo' filesep movFiles(1).name],[cPath 'BehaviorVideo' filesep movFiles(1).name]); + movFiles = dir([sPath 'BehaviorVideo' filesep '*Video_*2.mj2']); + copyfile([sPath 'BehaviorVideo' filesep movFiles(1).name],[cPath 'BehaviorVideo' filesep movFiles(1).name]); + + svdFiles = dir([sPath 'BehaviorVideo' filesep '*SVD*-Seg*']); + for iFiles = 1:length(svdFiles) + copyfile([sPath 'BehaviorVideo' filesep svdFiles(iFiles).name],[cPath 'BehaviorVideo' filesep svdFiles(iFiles).name]); + end +end + +load([cPath 'BehaviorVideo' filesep 'SVD_CombinedSegments.mat'],'vidV'); %load behavior video data +V1 = vidV(:,1:bhvDimCnt); %behavioral video regressors +load([cPath 'BehaviorVideo' filesep 'motionSVD_CombinedSegments.mat'],'vidV'); %load abs motion video data +V2 = vidV(:,1:bhvDimCnt); % motion regressors + +load([cPath 'BehaviorVideo' filesep 'FilteredPupil.mat'], 'pTime', 'fPupil', 'sPupil', 'whisker', 'faceM', 'bodyM', 'nose', 'bTime'); %load pupil data +%check if timestamps from pupil data are shifted against bhv data +timeCheck1 = (SessionData.TrialStartTime(1)) - (pTime{1}(1)); %time difference between first acquired frame and onset of first trial +timeCheck2 = (SessionData.TrialStartTime(1)) - (bTime{1}(1)); %time difference between first acquired frame and onset of first trial +if (timeCheck1 > 3590 && timeCheck1 < 3610) && (timeCheck2 > 3590 && timeCheck2 < 3610) %timeshift by one hour (+- 10seconds) + warning('Behavioral and video timestamps are shifted by 1h. Will adjust timestamps in video data accordingly.') + for iTrials = 1 : length(pTime) + pTime{iTrials} = pTime{iTrials} + 3600; %add one hour + bTime{iTrials} = bTime{iTrials} + 3600; %add one hour + end +elseif timeCheck1 > 30 || timeCheck1 < -30 || timeCheck2 > 30 || timeCheck2 < -30 + error('Something wrong with timestamps in behavior and video data. Time difference is larger as 30 seconds.') +end + +if any(bTrials > length(pTime)) + warning(['There are insufficient trials in the pupil data. Rejected the last ' num2str(sum(bTrials > length(pTime))) ' trial(s)']); + bTrials(bTrials > length(pTime)) = []; + trialCnt = length(bTrials); +end + +%% find events in BPod time - All timestamps are relative to stimulus onset event to synchronize to imaging data later +% pre-allocate vectors +lickL = cell(1,trialCnt); +lickR = cell(1,trialCnt); +leverIn = NaN(1,trialCnt); +levGrabL = cell(1,trialCnt); +levGrabR = cell(1,trialCnt); +levReleaseL = cell(1,trialCnt); +levReleaseR = cell(1,trialCnt); +water = NaN(1,trialCnt); + +for iTrials = 1:trialCnt + + leverTimes = [reshape(bhv.RawEvents.Trial{iTrials}.States.WaitForAnimal1',1,[]) ... + reshape(bhv.RawEvents.Trial{iTrials}.States.WaitForAnimal2',1,[]) ... + reshape(bhv.RawEvents.Trial{iTrials}.States.WaitForAnimal3',1,[])]; + stimGrab(iTrials) = leverTimes(find(leverTimes == bhv.RawEvents.Trial{iTrials}.States.WaitForCam(1))-1); %find start of lever state that triggered stimulus onset + + try + stimTime(iTrials) = bhv.RawEvents.Trial{iTrials}.Events.Wire3High - stimGrab(iTrials); %time of stimulus onset - measured from soundcard + catch + stimTime(iTrials) = NaN; + end + + %check for spout motion + if isfield(bhv.RawEvents.Trial{iTrials}.States,'MoveSpout') + spoutTime(iTrials) = bhv.RawEvents.Trial{iTrials}.States.MoveSpout(1) - stimGrab(iTrials); + + %also get time when the other spout was moved out at + if bhv.Rewarded(iTrials) + spoutOutTime(iTrials) = bhv.RawEvents.Trial{iTrials}.States.Reward(1) - stimGrab(iTrials); + else + spoutOutTime(iTrials) = bhv.RawEvents.Trial{iTrials}.States.HardPunish(1) - stimGrab(iTrials); + end + else + spoutTime(iTrials) = NaN; + spoutOutTime(iTrials) = NaN; + end + + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Port1In') %check for licks + lickL{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Port1In; + lickL{iTrials}(lickL{iTrials} < bhv.RawEvents.Trial{iTrials}.States.MoveSpout(1)) = []; %dont use false licks that occured before spouts were moved in + lickL{iTrials} = lickL{iTrials} - stimGrab(iTrials); + end + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Port3In') %check for right licks + lickR{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Port3In; + lickR{iTrials}(lickR{iTrials} < bhv.RawEvents.Trial{iTrials}.States.MoveSpout(1)) = []; %dont use false licks that occured before spouts were moved in + lickR{iTrials} = lickR{iTrials} - stimGrab(iTrials); + end + + leverIn(iTrials) = min(bhv.RawEvents.Trial{iTrials}.States.Reset(:)) - stimGrab(iTrials); %first reset state causes lever to move in + + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Wire2High') %check for left grabs + levGrabL{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Wire2High - stimGrab(iTrials); + end + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Wire1High') %check for right grabs + levGrabR{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Wire1High - stimGrab(iTrials); + end + + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Wire2Low') %check for left release + levReleaseL{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Wire2Low - stimGrab(iTrials); + end + if isfield(bhv.RawEvents.Trial{iTrials}.Events,'Wire1Low') %check for right release + levReleaseR{iTrials} = bhv.RawEvents.Trial{iTrials}.Events.Wire1Low - stimGrab(iTrials); + end + + if ~isnan(bhv.RawEvents.Trial{iTrials}.States.Reward(1)) %check for reward state + water(iTrials) = bhv.RawEvents.Trial{iTrials}.States.Reward(1) - stimGrab(iTrials); + end +end + +maxStimRegs = length(min(round((preStimDur + stimTime) * sRate)) : (preStimDur + postStimDur) * sRate); %maximal number of required stimulus regressors +maxSpoutRegs = length(min(round((preStimDur + spoutTime) * sRate)) : (preStimDur + postStimDur) * sRate); %maximal number of required stimulus regressors + +%% build regressors - create design matrix based on event times +%basic time regressors +timeR = logical(diag(ones(1,frames))); + +lGrabR = cell(1,trialCnt); +lGrabRelR = cell(1,trialCnt); +rGrabR = cell(1,trialCnt); +rGrabRelR = cell(1,trialCnt); +lLickR = cell(1,trialCnt); +rLickR = cell(1,trialCnt); +leverInR = cell(1,trialCnt); + +lVisStimR = cell(1,trialCnt); +rVisStimR = cell(1,trialCnt); +lAudStimR = cell(1,trialCnt); +rAudStimR = cell(1,trialCnt); +spoutR = cell(1,trialCnt); +spoutOutR = cell(1,trialCnt); + +rewardR = cell(1,trialCnt); +prevRewardR = cell(1,trialCnt); + +ChoiceR = cell(1,trialCnt); + +prevChoiceR = cell(1,trialCnt); +prevModR = cell(1,trialCnt); + +waterR = cell(1,trialCnt); +fastPupilR = cell(1,trialCnt); +slowPupilR = cell(1,trialCnt); + +whiskR = cell(1,trialCnt); +noseR = cell(1,trialCnt); +piezoR = cell(1,trialCnt); +piezoMoveR = cell(1,trialCnt); +faceR = cell(1,trialCnt); +bodyR = cell(1,trialCnt); + +%% +tic +for iTrials = 1:trialCnt + %% vis/aud stim - regressors cover the remaining trial after stimulus onset + stimIdx = round((preStimDur + stimTime(iTrials)) * sRate) : round((preStimDur + postStimDur) * sRate); %index for which part of the trial should be covered by stim regressors + + % vision + lVisStimR{iTrials} = false(frames, maxStimRegs); + rVisStimR{iTrials} = false(frames, maxStimRegs); + if bhv.StimType(iTrials) == 1 || bhv.StimType(iTrials) == 3 %visual or mixed stimulus + if bhv.CorrectSide(iTrials) == 1 + lVisStimR{iTrials}(:, 1:length(stimIdx)) = timeR(:, stimIdx); + else + rVisStimR{iTrials}(:, 1:length(stimIdx)) = timeR(:, stimIdx); + end + end + + % audio + lAudStimR{iTrials} = false(frames, maxStimRegs); + rAudStimR{iTrials} = false(frames, maxStimRegs); + if bhv.StimType(iTrials) == 2 || bhv.StimType(iTrials) == 3 %auditory or mixed stimulus + if bhv.CorrectSide(iTrials) == 1 + lAudStimR{iTrials}(:, 1:length(stimIdx)) = timeR(:, stimIdx); + else + rAudStimR{iTrials}(:, 1:length(stimIdx)) = timeR(:, stimIdx); + end + end + + if gaussShift > 1 + % subsample regressors + lVisStimR{iTrials} = lVisStimR{iTrials}(:,1:gaussShift:end); + rVisStimR{iTrials} = rVisStimR{iTrials}(:,1:gaussShift:end); + lAudStimR{iTrials} = lAudStimR{iTrials}(:,1:gaussShift:end); + rAudStimR{iTrials} = rAudStimR{iTrials}(:,1:gaussShift:end); + end + + %% spout regressors + spoutIdx = round((preStimDur + spoutTime(iTrials)) * sRate) : round((preStimDur + postStimDur) * sRate); %index for which part of the trial should be covered by spout regressors + spoutR{iTrials} = false(frames, maxSpoutRegs); + spoutR{iTrials}(:, 1:length(spoutIdx)) = timeR(:, spoutIdx); + + spoutOutR{iTrials} = false(frames, 3); + spoutOut = round((preStimDur + spoutOutTime(iTrials)) * sRate); %time when opposing spout moved out again + if ~isnan(spoutOut) && spoutOut < (frames + 1) + cInd = spoutOut : spoutOut + 2; cInd(cInd > frames) = []; + temp = diag(ones(1,3)); + spoutOutR{iTrials}(cInd, :) = temp(1:length(cInd),:); + end + + %% lick regressors + lLickR{iTrials} = false(frames, length(motorIdx)); + rLickR{iTrials} = false(frames, length(motorIdx)); + + for iRegs = 0 : length(motorIdx)-1 + licks = lickL{iTrials} - (mPreTime - (iRegs * 1/sRate)); + lLickR{iTrials}(logical(histcounts(licks,-preStimDur:1/sRate:postStimDur)),iRegs+1) = 1; + + licks = lickR{iTrials} - (mPreTime - (iRegs * 1/sRate)); + rLickR{iTrials}(logical(histcounts(licks,-preStimDur:1/sRate:postStimDur)),iRegs+1) = 1; + end + + if gaussShift > 1 + % subsample regressors + lLickR{iTrials} = lLickR{iTrials}(:,1:gaussShift:end); + rLickR{iTrials} = rLickR{iTrials}(:,1:gaussShift:end); + end + + %% lever in + leverInR{iTrials} = false(frames, leverMoveDur); + leverShift = round((preStimDur + leverIn(iTrials))* sRate); %timepoint in frames when lever moved in, relative to lever grab + + if ~isnan(leverShift) + if leverShift > 0 %lever moved in during the recorded trial + leverInR{iTrials}(leverShift : leverShift + leverMoveDur -1, :) = diag(ones(1, leverMoveDur)); + elseif (leverShift + leverMoveDur) > 0 %lever was moving before data was recorded but still moving at trial onset + leverInR{iTrials}(1 : leverMoveDur + leverShift, :) = [zeros(leverMoveDur + leverShift, abs(leverShift)) diag(ones(1, leverMoveDur + leverShift))]; + end + end + + if gaussShift > 1 + % subsample regressors + leverInR{iTrials} = leverInR{iTrials}(:,1:gaussShift:end); + end + + %% choice and reward + stimShift = round((stimTime(iTrials))* sRate) - sRate; %timepoint in frames when the stimulus was presented. This is the shift relative to the expectation that the stimulus comes up 1s after grabing the lever. + + stimTemp = false(frames,frames); + if stimShift > 0 %stim came later than 1s from lever grab + stimTemp(:, 1: frames - stimShift) = timeR(:, stimShift+1:end); + else %stim came earlier than 1s from lever grab + stimTemp(:, abs(stimShift) + 1 : end) = timeR(:, 1: frames + stimShift); + end + stimTemp(:,end-4:end) = []; %don't use the last timepoint to avoid rank defficient design matrix + + rewardR{iTrials} = false(size(stimTemp)); + if bhv.Rewarded(iTrials) %rewarded + rewardR{iTrials} = stimTemp; %trial was rewarded + end + + % get L/R choices as binary design matrix + ChoiceR{iTrials} = false(size(stimTemp)); + if bhv.ResponseSide(iTrials) == 1 + ChoiceR{iTrials} = stimTemp; + end + + % previous trial regressors + if iTrials == 1 %don't use first trial + prevRewardR{iTrials} = NaN(size(timeR(:,1:end-4))); + prevChoiceR{iTrials} = NaN(size(timeR(:,1:end-4))); + prevModR{iTrials} = NaN(size(timeR(:,1:end-4))); + + else %for all subsequent trials + % same as for regular choice regressors but for prevoious trial + prevChoiceR{iTrials} = false(size(timeR(:,1:end-4))); + if SessionData.ResponseSide(bTrials(iTrials)-1) == 1 + prevChoiceR{iTrials} = timeR(:,1:end-4); + end + + prevModR{iTrials} = false(size(timeR(:,1:end-4))); + if SessionData.StimType(bTrials(iTrials)-1) == 1 || SessionData.StimType(bTrials(iTrials)-1) == 3 + prevModR{iTrials} = timeR(:,1:end-4); % if previous trial was vision + end + + prevRewardR{iTrials} = false(size(timeR(:,1:end-4))); + if SessionData.Rewarded(bTrials(iTrials)-1) %last trial was rewarded + prevRewardR{iTrials} = timeR(:,1:end-4); + end + end + + if gaussShift > 1 + % subsample regressors + rewardR{iTrials} = rewardR{iTrials}(:,1:gaussShift:end); + prevRewardR{iTrials} = prevRewardR{iTrials}(:,1:gaussShift:end); + + ChoiceR{iTrials} = ChoiceR{iTrials}(:,1:gaussShift:end); + prevChoiceR{iTrials} = prevChoiceR{iTrials}(:,1:gaussShift:end); + + prevModR{iTrials} = prevModR{iTrials}(:,1:Shift:end); + end + + %determine timepoint of reward given + waterR{iTrials} = false(frames, sRate); + if ~isnan(water(iTrials)) && ~isempty(water(iTrials)) + waterOn = round((preStimDur + water(iTrials)) * sRate); %timepoint in frames when reward was given + waterR{iTrials}(:, 1: size(timeR,2) - waterOn + 1) = timeR(:, waterOn:end); + end + + if gaussShift > 1 + waterR{iTrials} = waterR{iTrials}(:,1:gaussShift:end); % subsample regressor + end + + %% lever grabs + cGrabs = levGrabL{iTrials}; + cGrabs(cGrabs >= postStimDur) = []; %remove grabs after end of imaging + cGrabs(find(diff(cGrabs) < tapDur) + 1) = []; %remove grabs that are too close to one another + lGrabR{iTrials} = histcounts(cGrabs,-preStimDur:1/sRate:postStimDur)'; %convert to binary trace + + cGrabs = levGrabR{iTrials}; + cGrabs(cGrabs >= postStimDur) = []; %remove grabs after end of imaging + cGrabs(find(diff(cGrabs) < tapDur) + 1) = []; %remove grabs that are too close to one another + rGrabR{iTrials} = histcounts(cGrabs,-preStimDur:1/sRate:postStimDur)'; %convert to binary trace + + %% pupil / whisk / nose / face / body regressors + bhvFrameRate = round(1/mean(diff(pTime{bTrials(iTrials)}))); %framerate of face camera + trialOn = bhv.TrialStartTime(iTrials) + (stimGrab(iTrials) - preStimDur); + trialTime = pTime{bTrials(iTrials)} - trialOn; + idx = trialTime < trialDur; %don't use late frames + trialTime = trialTime(idx); + + if trialTime(1) > 0 %check if there is missing time at the beginning of a trial + warning(['Trial ' int2str(bTrials(iTrials)) ': Missing behavioral video frames at trial onset. Trial removed from analysis']); + fastPupilR{iTrials} = NaN(frames, 1); + slowPupilR{iTrials} = NaN(frames, 1); + whiskR{iTrials} = NaN(frames, 1); + noseR{iTrials} = NaN(frames, 1); + faceR{iTrials} = NaN(frames, 1); + bodyR{iTrials} = NaN(frames, 1); + + else + timeLeft = trialDur - trialTime(end); %check if there is missing time at the end of a trial + if (timeLeft < trialDur * 0.9) && (timeLeft > 0) %if there is some time missing to make a whole trial + addTime = trialTime(end) + (1/bhvFrameRate : 1/bhvFrameRate : timeLeft + 1/bhvFrameRate); %add some dummy times to make complete trial + trialTime = [trialTime' addTime]; + end + + fastPupilR{iTrials} = Behavior_vidResamp(fPupil{bTrials(iTrials)}(idx), trialTime, sRate); + fastPupilR{iTrials} = smooth(fastPupilR{iTrials}(end - frames + 1 : end), 'rlowess'); + + slowPupilR{iTrials} = Behavior_vidResamp(sPupil{bTrials(iTrials)}(idx), trialTime, sRate); + slowPupilR{iTrials} = smooth(slowPupilR{iTrials}(end - frames + 1 : end), 'rlowess'); + + whiskR{iTrials} = Behavior_vidResamp(whisker{bTrials(iTrials)}(idx), trialTime, sRate); + whiskR{iTrials} = smooth(whiskR{iTrials}(end - frames + 1 : end), 'rlowess'); + + noseR{iTrials} = Behavior_vidResamp(nose{bTrials(iTrials)}(idx), trialTime, sRate); + noseR{iTrials} = smooth(noseR{iTrials}(end - frames + 1 : end), 'rlowess'); + + faceR{iTrials} = Behavior_vidResamp(faceM{bTrials(iTrials)}(idx), trialTime, sRate); + faceR{iTrials} = smooth(faceR{iTrials}(end - frames + 1 : end), 'rlowess'); + + + % body regressors + bhvFrameRate = round(1/mean(diff(bTime{bTrials(iTrials)}))); %framerate of body camera + trialTime = bTime{bTrials(iTrials)} - trialOn; + idx = trialTime < trialDur; %don't use late frames + trialTime = trialTime(idx); + timeLeft = trialDur - trialTime(end); %check if there is missing time at the end of a trial + + if (timeLeft < trialDur * 0.9) && (timeLeft > 0) %if there is some time missing to make a whole trial + addTime = trialTime(end) + (1/bhvFrameRate : 1/bhvFrameRate : timeLeft + 1/bhvFrameRate); %add some dummy times to make complete trial + trialTime = [trialTime' addTime]; + end + + bodyR{iTrials} = Behavior_vidResamp(bodyM{bTrials(iTrials)}(idx), trialTime, sRate); + bodyR{iTrials} = smooth(bodyR{iTrials}(end - frames + 1 : end), 'rlowess'); + end + + %% piezo sensor information + if strcmpi(dType,'Widefield') + if exist([cPath 'Analog_' num2str(trials(iTrials)) '.dat'],'file') ~= 2 %check if files exists on hdd and pull from server otherwise + cFile = dir([sPath 'Analog_' num2str(trials(iTrials)) '.dat']); + copyfile([sPath 'Analog_' num2str(trials(iTrials)) '.dat'],[cPath 'Analog_' num2str(trials(iTrials)) '.dat']); + end + [~,Analog] = Widefield_LoadData([cPath 'Analog_' num2str(trials(iTrials)) '.dat'],'Analog'); %load analog data + stimOn = find(diff(double(Analog(stimLine,:)) > 1500) == 1); %find stimulus onset in current trial + elseif strcmpi(dType,'twoP') + Analog = squeeze(data.analog(:,:,iTrials)); + stimOn = find(diff(double(Analog(stimLine,:)) > 1) == 1); %find stimulus onset in current trial + end + + Analog(1,round(stimOn + ((postStimDur-stimTime(iTrials)) * 1000) - 1)) = 0; %make sure there are enough datapoints in analog signal + temp = Analog(piezoLine,round(stimOn - ((preStimDur + stimTime(iTrials)) * 1000)) : round(stimOn + ((postStimDur - stimTime(iTrials))* 1000) - 1)); % data from piezo sensor. Should encode animals hindlimb motion. + temp = smooth(double(temp), sRate*5, 'lowess')'; %do some smoothing + temp = [repmat(temp(1),1,1000) temp repmat(temp(end),1,1000)]; %add some padding on both sides to avoid edge effects when resampling + temp = resample(double(temp), sRate, 1000); %resample to imaging rate + piezoR{iTrials} = temp(sRate + 1 : end - sRate)'; %remove padds again + piezoR{iTrials} = piezoR{iTrials}(end - frames + 1:end); %make sure, the length is correct + + temp = abs(hilbert(diff(piezoR{iTrials}))); + piezoMoveR{iTrials} = [temp(1); temp]; %keep differential motion signal + clear temp + + % give some feedback over progress + if rem(iTrials,50) == 0 + fprintf(1, 'Current trial is %d out of %d\n', iTrials,trialCnt); + toc + end +end + +%% get proper design matrices for handle grab +lGrabR = cat(1,lGrabR{:}); +lGrabR = delayDec_analogToDesign(lGrabR, 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); %get design matrix + +rGrabR = cat(1,rGrabR{:}); +rGrabR = delayDec_analogToDesign(rGrabR, 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); %get design matrix + +%% rebuild analog motor regressors to get proper design matrices +temp = double(cat(1,fastPupilR{:})); +temp = (temp - prctile(temp,1))./ nanstd(temp); %minimum values are at 0, signal in standard deviation units +[dMat, traceOut] = delayDec_analogToDesign(temp, median(temp), trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [single(traceOut) cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(traceOut, prctile(traceOut,75), trialCnt, sRate, sRate, motorIdx, gaussShift); +fastPupilR = [temp cat(1,dMat{:})]; %add high amplitude movements separately + +[dMat, traceOut] = delayDec_analogToDesign(double(cat(1,whiskR{:})), 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [single(traceOut) cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(double(cat(1,whiskR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +whiskR = [temp cat(1,dMat{:})]; %add high amplitude movements separately + +[dMat, traceOut] = delayDec_analogToDesign(double(cat(1,noseR{:})), 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [single(traceOut) cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(double(cat(1,noseR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +noseR = [temp cat(1,dMat{:})]; %add high amplitude movements separately + +% [dMat, traceOut] = delayDec_analogToDesign(double(cat(1,piezoR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +% piezoR1 = [traceOut cat(1,dMat{:})]; %rebuild continuous format +[dMat, traceOut] = delayDec_analogToDesign(double(cat(1,piezoMoveR{:})), 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [traceOut cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(double(cat(1,piezoMoveR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +piezoR = [temp cat(1,dMat{:})]; %add high amplitude movements separately +% piezoR = [piezoR1 temp cat(1,dMat{:})]; %add high amplitude movements separately + +[dMat, traceOut] = delayDec_analogToDesign(double(cat(1,faceR{:})), 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [single(traceOut) cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(double(cat(1,faceR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +faceR = [temp cat(1,dMat{:})]; %add high amplitude movements separately + +[dMat, traceOut] = delayDec_analogToDesign(double(cat(1,bodyR{:})), 0.5, trialCnt, sRate, sRate, motorIdx, gaussShift); +temp = [single(traceOut) cat(1,dMat{:})]; %rebuild continuous format +[dMat, ~] = delayDec_analogToDesign(double(cat(1,bodyR{:})), 2, trialCnt, sRate, sRate, motorIdx, gaussShift); +bodyR = [temp cat(1,dMat{:})]; %add high amplitude movements separately +clear piezoR1 piezoR2 dMat traceOut temp + +%% re-align behavioral video data and Vc to lever grab instead of stimulus onset +if strcmpi(dType,'Widefield') + iiSpikeFrames = findInterictalSpikes(U, Vc, 2, false); %find interictal spikes + Vc = interpOverInterictal(Vc, iiSpikeFrames); %interpolate over interictal spikes +end + +V1 = reshape(V1,205,[],bhvDimCnt); %get to trial format +V2 = reshape(V2,205,[],bhvDimCnt); %get to trial format +vidR = V1(:,bTrials,:); clear V1 %get correct trials from behavioral video data. +moveR = V2(:,bTrials,:); clear V2 %get correct trials from behavioral video data. + +% re-align video data +temp1 = NaN(dims,frames,trialCnt); +temp2 = NaN(frames,trialCnt,bhvDimCnt); +temp3 = NaN(frames,trialCnt,bhvDimCnt); +temp4 = NaN(2,frames,trialCnt); +shVal = sRate * 3 + 1; %expected position of stimulus relative to stim onset in s. Usually stimulus onset is after 3s. +for x = 1 : size(vidR,2) + try + temp1(:,:,x) = Vc(:,(shVal - ceil(stimTime(x) / (1/sRate))) - (preStimDur * sRate) : (shVal - ceil(stimTime(x) / (1/sRate))) + (postStimDur * sRate) - 1,x); + temp2(:,x,:) = vidR((shVal - ceil(stimTime(x) / (1/sRate))) - (preStimDur * sRate) : (shVal - ceil(stimTime(x) / (1/sRate))) + (postStimDur * sRate) - 1,x,:); + temp3(:,x,:) = moveR((shVal - ceil(stimTime(x) / (1/sRate))) - (preStimDur * sRate) : (shVal - ceil(stimTime(x) / (1/sRate))) + (postStimDur * sRate) - 1,x,:); + if strcmpi(dType,'twoP') + temp4(:,:,x) = data.DS(:,(shVal - ceil(stimTime(x) / (1/sRate))) - (preStimDur * sRate) : (shVal - ceil(stimTime(x) / (1/sRate))) + (postStimDur * sRate) - 1,x); + end + catch + fprintf(1,'Could not align trial %d. Relative stim time: %fs\n', x, stimTime(x)); + end +end +Vc = reshape(temp1,dims,[]); clear temp1 +vidR = reshape(temp2,[],bhvDimCnt); clear temp2 +moveR = reshape(temp3,[],bhvDimCnt); clear temp3 + +if strcmpi(dType,'twoP') + DS = reshape(temp4,2,[]); %keep image motion trace for 2p imaging +end +clear temp4 + +%% reshape regressors, make design matrix and indices for regressors that are used for the model +timeR = repmat(logical(diag(ones(1,frames))),trialCnt,1); %time regressor +timeR = timeR(:,1:end-4); + +lGrabR = cat(1,lGrabR{:}); +lGrabRelR = cat(1,lGrabRelR{:}); +rGrabR = cat(1,rGrabR{:}); +rGrabRelR = cat(1,rGrabRelR{:}); + +lLickR = cat(1,lLickR{:}); +rLickR = cat(1,rLickR{:}); +leverInR = cat(1,leverInR{:}); +leverInR(:,sum(leverInR) == 0) = []; + +lVisStimR = cat(1,lVisStimR{:}); +rVisStimR = cat(1,rVisStimR{:}); +lAudStimR = cat(1,lAudStimR{:}); +rAudStimR = cat(1,rAudStimR{:}); +spoutR = cat(1,spoutR{:}); +spoutOutR = cat(1,spoutOutR{:}); +spoutR(:,sum(spoutR) == 0) = []; +spoutOutR(:,sum(spoutOutR) == 0) = []; + +rewardR = cat(1,rewardR{:}); +prevRewardR = cat(1,prevRewardR{:}); + +ChoiceR = cat(1,ChoiceR{:}); + +prevChoiceR = cat(1,prevChoiceR{:}); +prevModR = cat(1,prevModR{:}); + +waterR = cat(1,waterR{:}); + +slowPupilR = cat(1,slowPupilR{:}); +slowPupilR(~isnan(slowPupilR(:,1)),:) = zscore(slowPupilR(~isnan(slowPupilR(:,1)),:)); + +%% compute average motion change in each segment for each trial +vidMove = nanmean(reshape([bodyR(:,1) faceR(:,1)],frames,[],2),3); %reshape to trials and average over face and body camera motion +for x = 1: length(trialSegments)-1 %this should be 4 segments in total (Baseline, Handle, Stim and Waiting period) + trialMove(x,:) = mean(vidMove(trialSegments{x},:)); %compute average motion change in each segment for each trial +end + +for iTrials = 1:size(trialMove,2) +% BaselineMoveR{iTrials} = diag(repmat(trialMove(1,iTrials),frames,1)); +% HandleMoveR{iTrials} = diag(repmat(trialMove(2,iTrials),frames-trialSegments{2}(1),1),-trialSegments{2}(1)); +% StimulusMoveR{iTrials} = diag(repmat(trialMove(3,iTrials),frames-trialSegments{3}(1),1),-trialSegments{3}(1)); +% WaitMoveR{iTrials} = diag(repmat(trialMove(4,iTrials),frames-trialSegments{4}(1),1),-trialSegments{4}(1)); + + BaselineMoveR{iTrials} = zeros(frames, 1, 'single'); + HandleMoveR{iTrials} = zeros(frames, 1, 'single'); + StimulusMoveR{iTrials} = zeros(frames, 1, 'single'); + WaitMoveR{iTrials} = zeros(frames, 1, 'single'); +end + +BaselineMoveR = cat(1,BaselineMoveR{:}); +HandleMoveR = cat(1,HandleMoveR{:}); +StimulusMoveR = cat(1,StimulusMoveR{:}); +WaitMoveR = cat(1,WaitMoveR{:}); + +%% create full design matrix +fullR = [timeR ChoiceR rewardR lGrabR lGrabRelR rGrabR rGrabRelR lLickR rLickR lVisStimR rVisStimR lAudStimR rAudStimR ... + prevRewardR prevChoiceR prevModR waterR piezoR whiskR noseR fastPupilR slowPupilR faceR bodyR BaselineMoveR HandleMoveR StimulusMoveR WaitMoveR moveR vidR]; + +% labels for different regressor sets. It is REALLY important this agrees with the order of regressors in fullR. +recLabels = { + 'time' 'Choice' 'reward' 'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel' 'lLick' 'rLick' 'lVisStim' 'rVisStim' ... + 'lAudStim' 'rAudStim' 'prevReward' 'prevChoice' 'prevMod' 'water' 'piezo' 'whisk' 'nose' 'fastPupil' 'slowPupil' 'face' 'body' 'BaselineMove' 'HandleMove' 'StimulusMove' 'WaitMove' 'Move' 'bhvVideo'}; + +%index to reconstruct different response kernels +recIdx = [ + ones(1,size(timeR,2))*find(ismember(recLabels,'time')) ... + ones(1,size(ChoiceR,2))*find(ismember(recLabels,'Choice')) ... + ones(1,size(rewardR,2))*find(ismember(recLabels,'reward')) ... + ones(1,size(lGrabR,2))*find(ismember(recLabels,'lGrab')) ... + ones(1,size(lGrabRelR,2))*find(ismember(recLabels,'lGrabRel')) ... + ones(1,size(rGrabR,2))*find(ismember(recLabels,'rGrab')) ... + ones(1,size(rGrabRelR,2))*find(ismember(recLabels,'rGrabRel')) ... + ones(1,size(lLickR,2))*find(ismember(recLabels,'lLick')) ... + ones(1,size(rLickR,2))*find(ismember(recLabels,'rLick')) ... + ones(1,size(lVisStimR,2))*find(ismember(recLabels,'lVisStim')) ... + ones(1,size(rVisStimR,2))*find(ismember(recLabels,'rVisStim')) ... + ones(1,size(lAudStimR,2))*find(ismember(recLabels,'lAudStim')) ... + ones(1,size(rAudStimR,2))*find(ismember(recLabels,'rAudStim')) ... + ones(1,size(prevRewardR,2))*find(ismember(recLabels,'prevReward')) ... + ones(1,size(prevChoiceR,2))*find(ismember(recLabels,'prevChoice')) ... + ones(1,size(prevModR,2))*find(ismember(recLabels,'prevMod')) ... + ones(1,size(waterR,2))*find(ismember(recLabels,'water')) ... + ones(1,size(piezoR,2))*find(ismember(recLabels,'piezo')) ... + ones(1,size(whiskR,2))*find(ismember(recLabels,'whisk')) ... + ones(1,size(noseR,2))*find(ismember(recLabels,'nose')) ... + ones(1,size(fastPupilR,2))*find(ismember(recLabels,'fastPupil')) ... + ones(1,size(slowPupilR,2))*find(ismember(recLabels,'slowPupil')) ... + ones(1,size(faceR,2))*find(ismember(recLabels,'face')) ... + ones(1,size(bodyR,2))*find(ismember(recLabels,'body')) ... + ones(1,size(BaselineMoveR,2))*find(ismember(recLabels,'BaselineMove')) ... + ones(1,size(HandleMoveR,2))*find(ismember(recLabels,'HandleMove')) ... + ones(1,size(StimulusMoveR,2))*find(ismember(recLabels,'StimulusMove')) ... + ones(1,size(WaitMoveR,2))*find(ismember(recLabels,'WaitMove')) ... + ones(1,size(moveR,2))*find(ismember(recLabels,'Move')) ... + ones(1,size(vidR,2))*find(ismember(recLabels,'bhvVideo'))]; + +% check if enough stimuli of each modality were presented +%vision +cMod = ismember(recIdx,find(ismember(recLabels,{'lVisStim' 'rVisStim'}))); +stimCheck = sum(fullR(:,cMod),1); +stimCheck = stimCheck < 10; %if 10 trials or less were presented, dont use them in the analysis +if ~any(~stimCheck) + fullR = reshape(fullR, frames, [], size(fullR,2)); + fullR(:, bhv.StimType == 1, cMod) = NaN; %mark for deletion + fullR = reshape(fullR, [], size(fullR,3)); + lVisStimR = []; rVisStimR = []; +end +%audio +cMod = ismember(recIdx,find(ismember(recLabels,{'lAudStim' 'rAudStim'}))); +stimCheck = sum(fullR(:,cMod),1); +stimCheck = stimCheck < 10; %if 10 trials or less were presented, dont use them in the analysis +if ~any(~stimCheck) + fullR = reshape(fullR, frames, [], size(fullR,2)); + fullR(:, bhv.StimType == 2, cMod) = NaN; %mark for deletion + fullR = reshape(fullR, [], size(fullR,3)); +end + +% orthogonalize video against spout/handle movement and visual stimuli +if ~isempty(lVisStimR) + cInd = find(ismember(recIdx, find(ismember(recLabels,'lVisStim')))); + lVisStimR = fullR(:,cInd([1:ceil(0.6*sRate) ceil(1.1*sRate):ceil(1.7*sRate)])); %regressors for visual stimulus. Only use ON times of stimulus for QR(1.2s with 0.5s gap in between). + cInd = find(ismember(recIdx, find(ismember(recLabels,'rVisStim')))); + rVisStimR = fullR(:,cInd([1:ceil(0.6*sRate) ceil(1.1*sRate):ceil(1.7*sRate)])); %regressors for visual stimulus. Only use ON times of stimulus for QR(1.2s with 0.5s gap in between). +end +vidIdx = find(ismember(recIdx, find(ismember(recLabels,{'Move' 'bhvVideo'})))); %index for video regressors +trialIdx = ~isnan(mean(fullR(:,vidIdx),2)); %don't use trials that failed to contain behavioral video data +smallR = [leverInR spoutR spoutOutR lVisStimR rVisStimR]; + +for iRegs = 1 : length(vidIdx) + Q = qr([smallR(trialIdx,:) fullR(trialIdx,vidIdx(iRegs))],0); %orthogonalize video against other regressors + fullR(trialIdx,vidIdx(iRegs)) = Q(:,end); % transfer orthogonolized video regressors back to design matrix +end + +% reject trials with broken regressors that contain NaNs +trialIdx = isnan(mean(fullR,2)); %don't use first trial or trials that failed to contain behavioral video data +fprintf(1, 'Rejected %d/%d trials for NaN entries in regressors\n', sum(trialIdx)/frames,trialCnt); +fullR(trialIdx,:) = []; %clear bad trials + +%reject regressors that are too sparse +idx = nansum(abs(fullR)) < 10; +fullR(:,idx) = []; %clear empty regressors +fprintf(1, 'Rejected %d/%d empty regressors\n', sum(idx),length(idx)); + +%% save modified Vc +Vc(:,trialIdx) = []; %clear bad trials + +if strcmpi(dType,'Widefield') + save([cPath 'interpVc.mat'], 'Vc', 'frames'); +elseif strcmpi(dType,'twoP') + DS(:,trialIdx) = []; %clear bad trials + save([cPath 'interpVc.mat'], 'Vc', 'DS', 'frames'); +end + +%% apply gaussian filter to design matrix if using sub-sampling +if gaussShift > 1 + [a,b] = size(fullR); + + % find non-continous regressors (contain values different from -1, 0 or 1) + temp = false(size(fullR)); + temp(fullR(:) ~= 0 & fullR(:) ~= 1 & fullR(:) ~= -1 & ~isnan(fullR(:))) = true; + regIdx = nanmean(temp) == 0; %index for non-continous regressors + + % do gaussian convolution. perform trialwise to avoid overlap across trials. + trialCnt = a/frames; + fullR = reshape(fullR,frames,trialCnt,b); + for iTrials = 1:trialCnt + fullR(:,iTrials,regIdx) = smoothCol(squeeze(fullR(:,iTrials,regIdx)),gaussShift*2,'gauss'); + end + fullR = reshape(fullR,a,b); +end + +%% clear individual regressors +clear stimR lGrabR lGrabRelR rGrabR rGrabRelR waterR lLickR rLickR ... + lVisStimR rVisStimR lAudStimR rAudStimR rewardR prevRewardR visChoiceR audChoiceR ... + prevChoiceR prevModR fastPupilR moveR piezoR whiskR noseR faceR bodyR + +%% run QR and check for rank-defficiency +[~, fullQRR] = qr(bsxfun(@rdivide,fullR,sqrt(sum(fullR.^2))),0); %orthogonalize design matrix +% figure; plot(abs(diag(fullQRR))); ylim([0 1.1]); title('Regressor orthogonality'); drawnow; %this shows how orthogonal individual regressors are to the rest of the matrix +if sum(abs(diag(fullQRR)) > max(size(fullR)) * eps(fullQRR(1))) < size(fullR,2) %check if design matrix is full rank + error('Design matrix is rank-defficient') +end + +%% run ridge regression in low-D +%run model. Zero-mean without intercept. only video qr. +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for original video, zero-mean model: %f\n', mean(ridgeVals)); +save([cPath 'orgdimBeta.mat'], 'dimBeta', 'ridgeVals'); +save([cPath filesep 'orgregData.mat'], 'fullR', 'idx' ,'trialIdx', 'recIdx', 'recLabels','gaussShift','fullQRR','-v7.3'); +Behavior_betaRebuild(cPath, 'org'); % rebuild video regressors by projecting beta weights for each wiedfield dimensions back on the behavioral video data + +mInd = ismember(recIdx(~idx), find(ismember(recLabels,motorLabels(~ismember(motorLabels,opMotorLabels))))); +spontMotorR = fullR(:, mInd); +[spontMotorRidge, spontMotorBeta] = ridgeMML(Vc', spontMotorR, true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for original video, spont-motor only model: %f\n', mean(spontMotorRidge)); +Vm = (spontMotorR * spontMotorBeta)'; +save([cPath 'orgVspontMotor.mat'], 'Vm', 'frames'); %save predicted data based on motor model + +%% orthogonalize some regressors for clarity +% orthogonalize spontaneous from operant movement regressors +lInd = ismember(recIdx(~idx), find(ismember(recLabels,{'lLick', 'rLick'}))); +hInd = ismember(recIdx(~idx), find(ismember(recLabels,{'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel'}))); +pInd = ismember(recIdx(~idx), find(ismember(recLabels,{'fastPupil', 'slowPupil'}))); +wInd = ismember(recIdx(~idx), find(ismember(recLabels,'whisk'))); +nInd = ismember(recIdx(~idx), find(ismember(recLabels,'nose'))); +piInd = ismember(recIdx(~idx), find(ismember(recLabels,'piezo'))); +fInd = ismember(recIdx(~idx), find(ismember(recLabels,'face'))); +mInd = ismember(recIdx(~idx), find(ismember(recLabels,'Move'))); +vInd = ismember(recIdx(~idx), find(ismember(recLabels,'bhvVideo'))); + +smallR = [fullR(:,lInd) fullR(:,hInd) fullR(:,pInd) fullR(:,wInd) fullR(:,nInd) fullR(:,piInd) fullR(:,fInd) fullR(:,mInd) fullR(:,vInd)]; +[Q, redQRR] = qr(smallR,0); clear smallR %orthogonalize spont. from operant movement + +% replace original with orthogonalized regressors (only for spont. movements) +fullR(:,pInd) = Q(:,sum(lInd | hInd) + 1 : sum(lInd | hInd | pInd)); %pupil +fullR(:,wInd) = Q(:,sum(lInd | hInd | pInd) + 1 : sum(lInd | hInd | pInd | wInd)); %whisk +fullR(:,nInd) = Q(:,sum(lInd | hInd | pInd | wInd) + 1 : sum(lInd | hInd | pInd | wInd | nInd)); %nose +fullR(:,piInd) = Q(:,sum(lInd | hInd | pInd | wInd | nInd) + 1 : sum(lInd | hInd | pInd | wInd | nInd | piInd)); %piezo +fullR(:,fInd) = Q(:,sum(lInd | hInd | pInd | wInd | nInd | piInd) + 1 : sum(lInd | hInd | pInd | wInd | nInd | piInd | fInd)); %face +fullR(:,mInd) = Q(:,sum(lInd | hInd | pInd | wInd | nInd | piInd | fInd) + 1 : sum(lInd | hInd | pInd | wInd | nInd | piInd | fInd | mInd)); %motion energy +fullR(:,vInd) = Q(:,sum(lInd | hInd | pInd | wInd | nInd | piInd | fInd | mInd) + 1 : sum(lInd | hInd | pInd | wInd | nInd | piInd | fInd | mInd | vInd)); %raw video + +%% run model with orthogonalized spontaneous movement regressors. Zero-mean without intercept. +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for zero-mean model: %f\n', mean(ridgeVals)); +save([cPath 'dimBeta.mat'], 'dimBeta', 'ridgeVals'); +save([cPath 'regData.mat'], 'fullR', 'idx' ,'trialIdx', 'recIdx', 'recLabels','gaussShift','redQRR','-v7.3'); +Behavior_betaRebuild(cPath); % rebuild video regressors by projecting beta weights for each wiedfield dimensions back on the behavioral video data + +% compute cross-validated prediction for full model +[Vm, cBeta] = crossValModel(recLabels); +save([cPath 'interpVfull.mat'], 'Vm', 'frames', 'cBeta'); %save predicted data based on full model + +%% run same model without choice. +tIdx = idx; tRecIdx = recIdx; tFullR = fullR; +cIdx = ~ismember(recIdx, find(ismember(recLabels,'Choice'))); %index to exclude choice +idx = idx(cIdx); +recIdx = recIdx(cIdx); +fullR = fullR(:, cIdx(~tIdx)); + +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for zero-mean model: %f\n', mean(ridgeVals)); +save([cPath 'noChoicedimBeta.mat'], 'dimBeta', 'ridgeVals'); +save([cPath 'noChoiceregData.mat'], 'fullR', 'idx' ,'trialIdx', 'recIdx', 'recLabels','gaussShift','redQRR','-v7.3'); +% Behavior_betaRebuild(cPath); % rebuild video regressors by projecting beta weights for each wiedfield dimensions back on the behavioral video data + +% run same model without choice and orthogonal to spont movements. +cInd = ismember(recIdx(~idx), find(ismember(recLabels,motorLabels(~ismember(motorLabels,opMotorLabels))))); %find spontaneous movements +smallR = [fullR(:,cInd) fullR(:,~cInd)]; +[Q, redQRR] = qr(smallR,0); clear smallR %orthogonalize task vs spont movements +fullR = Q(:,sum(cInd)+1:end); %only use orthogonalized task/op movement regressors +cIdx = ismember(recIdx, find(~ismember(recLabels,motorLabels(~ismember(motorLabels,opMotorLabels))))); %find task/op movements +idx = idx(cIdx); +recIdx = recIdx(cIdx); + +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for zero-mean model: %f\n', mean(ridgeVals)); +save([cPath 'TaskNoChoiceNoSpontdimBeta.mat'], 'dimBeta', 'ridgeVals'); +save([cPath 'TaskNoChoiceNoSpontregData.mat'], 'fullR', 'idx' ,'trialIdx', 'recIdx', 'recLabels','gaussShift','redQRR','-v7.3'); +idx = tIdx; recIdx = tRecIdx; fullR = tFullR; %recreate full design matrx/indices + +%% run motor/task/opMotor and spontMotor only models. Zero-mean without intercept. +cIdx = ismember(recIdx(~idx), find(ismember(recLabels,motorLabels))); %get index for motor regressors +motorLabels = recLabels(sort(find(ismember(recLabels,motorLabels)))); %make sure motorLabels is in the right order + +[Vmotor, motorBeta, motorR, motorIdx, motorRidge, motorLabels] = crossValModel(motorLabels); +fprintf('Mean ridge penalty for motor-only, zero-mean model: %f\n', mean(motorRidge)); +save([cPath 'interpVmotor.mat'], 'Vmotor', 'frames'); %save predicted data based on motor model +save([cPath 'motorBeta.mat'], 'motorBeta', 'motorRidge'); +save([cPath filesep 'motorregData.mat'], 'motorR','trialIdx', 'motorIdx', 'motorLabels','gaussShift','-v7.3'); + +[Vtask, taskBeta, taskR, taskIdx, taskRidge, taskLabels] = crossValModel(recLabels(~ismember(recLabels,motorLabels))); +fprintf('Mean ridge penalty for task-only, zero-mean model: %f\n', mean(taskRidge)); +save([cPath 'interpVtask.mat'], 'Vtask', 'frames'); %save predicted data based on motor model +save([cPath 'taskBeta.mat'], 'taskBeta', 'taskRidge'); +save([cPath filesep 'taskregData.mat'], 'taskR','trialIdx', 'taskIdx', 'taskLabels','gaussShift','-v7.3'); + +[VopMotor, opMotorBeta, opMotorR, opMotorIdx, opMotorRidge, opMotorLabels] = crossValModel(opMotorLabels); +fprintf('Mean ridge penalty for opMotor-only, zero-mean model: %f\n', mean(opMotorRidge)); +save([cPath 'interpVopMotor.mat'], 'VopMotor', 'frames'); %save predicted data based on motor model +save([cPath 'opMotorBeta.mat'], 'opMotorBeta', 'opMotorRidge'); +save([cPath filesep 'opMotorregData.mat'], 'opMotorR','trialIdx', 'opMotorIdx', 'opMotorLabels','gaussShift','-v7.3'); + +[VspontMotor, spontMotorBeta, spontMotorR, spontMotorIdx, spontMotorRidge, spontMotorLabels] = crossValModel(motorLabels(~ismember(motorLabels,opMotorLabels))); +fprintf('Mean ridge penalty for spontMotor-only, zero-mean model: %f\n', mean(spontMotorRidge)); +save([cPath 'interpVspontMotor.mat'], 'VspontMotor', 'frames'); %save predicted data based on motor model +save([cPath 'spontMotorBeta.mat'], 'spontMotorBeta', 'spontMotorRidge'); +save([cPath filesep 'spontMotorregData.mat'], 'spontMotorR','trialIdx', 'spontMotorIdx', 'spontMotorLabels','gaussShift','-v7.3'); + +%% run video only model. Zero-mean without intercept. +idx = false(1,size(vidR,2)); +recLabels = {'bhvVideo'}; +recIdx = ones(1,size(vidR,2)); +[ridgeVals, dimBeta] = ridgeMML(Vc', vidR(~trialIdx,:), true); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for video-only zero-mean model: %f\n', mean(ridgeVals)); +save([cPath 'vidOnlydimBeta.mat'], 'dimBeta', 'ridgeVals'); +save([cPath filesep 'vidOnlyregData.mat'], 'vidR', 'idx', 'trialIdx', 'recIdx', 'recLabels','gaussShift','-v7.3'); +Behavior_betaRebuild(cPath, 'vidOnly'); % rebuild video regressors by projecting beta weights for each wiedfield dimensions back on the behavioral video data + +%% re-run model with orthogonalized video. Baseline-corrected with intercept. +Vc = reshape(Vc, dims, frames, []); +temp = squeeze(mean(mean(Vc(:,floor(1:sRate/2),:),3),2)); +Vc = reshape(Vc, dims, []); +Vc = bsxfun(@minus, Vc, temp); + +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, false); %get ridge penalties and beta weights. +fprintf('Mean ridge penalty for baseline-corrected model: %f\n', mean(ridgeVals)); +save([cPath 'offsetdimBeta.mat'], 'dimBeta', 'ridgeVals') + +fullR = [ones(size(fullR,1), 1) fullR]; %add intercept to design matrix +recIdx = [1 recIdx+1]; %add zero for intercept +idx = [false idx]; %add zero for intercept +recLabels = ['offset' recLabels]; +save([cPath filesep 'offsetregData.mat'], 'fullR', 'idx' ,'trialIdx', 'recIdx', 'recLabels','gaussShift','-v7.3'); + + +%% nested functions +function [Vm, cBeta, cR, subIdx, cRidge, cLabels] = crossValModel(cLabels) + +cIdx = ismember(recIdx(~idx), find(ismember(recLabels,cLabels))); %get index for task regressors +cLabels = recLabels(sort(find(ismember(recLabels,cLabels)))); %make sure motorLabels is in the right order + +%create new regressor index that matches motor labels +subIdx = recIdx(~idx); +subIdx = subIdx(cIdx); +temp = unique(subIdx); +for x = 1 : length(temp) + subIdx(subIdx == temp(x)) = x; +end +cR = fullR(:,cIdx); + +Vm = zeros(size(Vc),'single'); %pre-allocate motor-reconstructed V +randIdx = randperm(size(Vc,2)); %generate randum number index +foldCnt = floor(size(Vc,2) / ridgeFolds); +cBeta = cell(1,ridgeFolds); + +for iFolds = 1:ridgeFolds + dataIdx = true(1,size(Vc,2)); + + if ridgeFolds > 1 + dataIdx(randIdx(((iFolds - 1)*foldCnt) + (1:foldCnt))) = false; %index for training data + if iFolds == 1 + [cRidge, cBeta{iFolds}] = ridgeMML(Vc(:,dataIdx)', cR(dataIdx,:), true); %get beta weights and ridge penalty for task only model + else + [~, cBeta{iFolds}] = ridgeMML(Vc(:,dataIdx)', cR(dataIdx,:), true, cRidge); %get beta weights for task only model. ridge value should be the same as in the first run. + end + Vm(:,~dataIdx) = (cR(~dataIdx,:) * cBeta{iFolds})'; %predict remaining data + + if rem(iFolds,ridgeFolds/5) == 0 + fprintf(1, 'Current fold is %d out of %d\n', iFolds, ridgeFolds); + end + else + [cRidge, cBeta{iFolds}] = ridgeMML(Vc', cR, true); %get beta weights for task-only model. + Vm = (cR * cBeta{iFolds})'; %predict remaining data + disp('Ridgefold is <= 1, fit to complete dataset instead'); + end +end +end +end + diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_analogToDesign.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_analogToDesign.m new file mode 100644 index 0000000..155f1eb --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_analogToDesign.m @@ -0,0 +1,43 @@ +function [dMat, traceOut] = Widefield_analogToDesign(traceIn, stdThresh, trialCnt, sourceRate, targRate, motorIdx, gaussShift) +% code to create a peri-event design matrix based on an analog trace. Trace +% should be continous and will be reshaped into a trial structure to create +% a design matrix for every trial individually. +% Inputs: traceIn = analog trace. +% stdThresh = threshold for event detection in SDUs +% trialCnt = number of trials in the dataset. used to reshape analog trace. +% sourceRate = sampling rate of analog trace +% targRate = sampling rate of design matrix. +% motorIdx = index for peri-event matrix. +% gaussShift = variable for subsampling in case model is used with gaussian convolution. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +traceIn = (traceIn - prctile(traceIn,1))./ nanstd(traceIn); %minimum values are at 0, signal in standard deviation units +traceOut = traceIn; %return normalized analog trace +traceIn = traceIn > stdThresh; %take activity above supplied threshold as indicator for event occurence +traceIn = diff([0; traceIn]) == 1; %find event onsets +traceIn = reshape(traceIn,[],trialCnt); %reshape to trial structure +frames = size(traceIn,1) / (sourceRate/targRate); %second dimension is trials so first should be frames per trial when taking differences in sampling rate into account + +dMat = cell(1,trialCnt); +for iTrials = 1:trialCnt + + trace = logical(histcounts(find(traceIn(:,iTrials)), 0: sourceRate/targRate : (sourceRate/targRate)*frames))'; %resample to imaging frame rate. This is the zero lag regressor. + + % create full design matrix + cIdx = bsxfun(@plus,find(trace),motorIdx); + cIdx(cIdx < 1) = 0; + cIdx(cIdx > frames) = frames; + cIdx = bsxfun(@plus,cIdx,(0:frames:frames*length(motorIdx)-1)); + cIdx(cIdx < 1) = frames; + cIdx(cIdx > (frames * length(motorIdx))) = frames * length(motorIdx); + + dMat{iTrials} = false(frames, length(motorIdx)); + dMat{iTrials}(cIdx(:)) = true; + dMat{iTrials}(end,:) = false; %don't use last timepoint of design matrix to avoid confusion with indexing. + dMat{iTrials}(end,2:end) = dMat{iTrials}(end-1,1:end-1); %replace with shifted version of previous timepoint + + if gaussShift > 1 + dMat{iTrials} = dMat{iTrials}(:,1:gaussShift:end); + end +end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_compare2pRegressors.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_compare2pRegressors.m new file mode 100644 index 0000000..7201ae7 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_compare2pRegressors.m @@ -0,0 +1,870 @@ +reload = false; +fileExt = []; +cMod = 'all'; +cPath = '\\churchlandNAS\homes\DOMAIN=CSHL\smusall\NNpaper_Dataset\2pData\Animals\'; +sPath = '\\churchlandNAS\homes\DOMAIN=CSHL\smusall\NNpaper_Dataset\2pData\Animals\'; %local data path to save down results + +%% select data sets +[dataOverview, motorLabels, sensorLabels, cogLabels, segIdx, segLabels, segIdxRealign] = twoP_delayDecRecordings; +taskLabels = [sensorLabels cogLabels]; %combine sensory and cognitive labels, so sensory is really 'non-motor' here +segIdxRealign{2} = 46:65; +visExp = ismember(dataOverview(:,2),'Visual'); %index for visual experts +audExp = ismember(dataOverview(:,2),'Audio'); %index for auditory experts +modTypes = {'shCurrent' 'shOther' 'shTaskCurrent' 'shOtherMotor'}; +orgVars = {'fastPupil', 'slowPupil', 'whisk', 'nose', 'face', 'lLick', 'rLick', ... + 'pupils', 'licks', 'bhvVideo', 'Move', 'allMove', 'motorNoVideo', 'motor'}; %make sure to load original version during shOther condition to avoid false results from orthogonalization. + +%% load data +check = true; +if ~reload %check for a saved dataset + if ~exist(sPath,'dir') + check = false; + else + try + load([sPath fileExt 'corrMaps2p.mat'],'corrMaps'); + load([sPath fileExt 'meanRsq2p.mat'],'aRsq','aTimeRsq','nRecLabels'); + load([sPath fileExt 'segMovies2p.mat'],'segMovies'); + load([sPath fileExt 'fullCorrMaps2p.mat'],'fullCorrMaps', 'recSite', 'recDepth', 'recAnimal', 'recDate'); + load([sPath fileExt 'fullSegMovies2p.mat'],'fullSegMovies'); + load([sPath fileExt 'otherMsegMovies2p.mat'],'otherMsegMovies'); + load([sPath fileExt 'otherMcorrMaps2p.mat'],'otherMcorrMaps'); + load([sPath fileExt 'twoP_rebuild2p.mat'],'recV', 'semV', 'allBeta', 'recLabels', 'allRecIdx', 'dataPath', 'modIdx', 'sideIdx', 'alignIdx', 'baseLength', 'frames', 'stimTimes', 'cellCnt', 'otherMotorLabels'); + + catch + check = false; + end + end + if ~check + reload = true; + disp('Could not find saved results. Load predVariance data instead. Maybe go get a coffe in the meantime.') + end +end + +%% go through predVariance folders if reloading that data +if reload + animals = dataOverview(:,1); + Cnt = 0; + + % check animal count + if strcmpi(cMod,'all') + animalCnt = size(dataOverview,1); + else + animalCnt = sum(ismember(dataOverview(:,2)',cMod)); + end + + cellCnt = 0; + for iAnimals = 1:length(animals) + regCnt = 0; + + if strcmpi(dataOverview{iAnimals,2},cMod) || strcmpi(cMod,'all') + Cnt = Cnt + 1; + fPath = [cPath animals{iAnimals} filesep 'SpatialDisc' filesep dataOverview{iAnimals,3} filesep]; + disp(fPath); + tic; + try + %load design matrix and check for regressors that were used in the model + load([fPath 'regData.mat'],'recIdx','idx','recLabels') + usedR{Cnt} = recLabels(unique(recIdx(~idx))); %regressors that were used in the model + + if Cnt == 1 + % get labels for all regressors + load([fPath 'predVariance' filesep modTypes{1} filesep fileExt 'fullcorr.mat'],'recLabels'); %load current labels + load([fPath 'predVariance' filesep 'extraGroups.mat'],'extraGroups'); %load extra group labels + load([fPath 'predVariance' filesep 'oMotorLabels.mat'],'oMotorLabels'); %load other motor labels + nRecLabels = [recLabels{:} extraGroups(1,:)]; %labels of all regressors + nRecLabels = nRecLabels(~strcmpi(nRecLabels,'leverIn')); %don't use leverIn regressor + + % make recLabels where modality is swapped for expertise + altRecLabels = nRecLabels; + altRecLabels(ismember(nRecLabels,'visReward')) = {'expReward'}; + altRecLabels(ismember(nRecLabels,'audReward')) = {'novReward'}; + end + + for iRuns = 1:length(modTypes) + + if iRuns == 1 %load full model data only once - running through different versions makes no difference here + load([fPath 'predVariance' filesep modTypes{iRuns} filesep fileExt 'fullcorr.mat'],'cMap','segMovie','recLabels'); %load current data + fprintf('%s_%d_%d\n',fPath,iAnimals,length(recLabels)); + cMap = cMap.^2; + segMovie = segMovie.^2; + + fullCorrMaps(cellCnt + 1:cellCnt + size(cMap,1)) = cMap; + aRsq(1,Cnt,1) = nanmean(cMap(:)); + + recSite(cellCnt + 1:cellCnt + size(cMap,1)) = repmat({dataOverview{iAnimals,7}}, 1, size(cMap,1)); %keep track of recording site + recDepth(cellCnt + 1:cellCnt + size(cMap,1)) = dataOverview{iAnimals,8}; %keep track of recording depth + recAnimal(cellCnt + 1:cellCnt + size(cMap,1)) = repmat({dataOverview{iAnimals,1}}, 1, size(cMap,1)); %keep track of recording depth + recDate(cellCnt + 1:cellCnt + size(cMap,1)) = repmat({dataOverview{iAnimals,3}}, 1, size(cMap,1)); %keep track of recording depth + if strcmp(dataOverview{iAnimals,2},'Visual') + recExp(cellCnt + 1:cellCnt + size(cMap,1)) = repmat('v', 1, size(cMap,1)); %keep track of visual expertise + else + recExp(cellCnt + 1:cellCnt + size(cMap,1)) = repmat('a', 1, size(cMap,1)); %keep track of auditory expertise + end + + % align segMovie to allen coordinates + fullSegMovies(cellCnt + 1:cellCnt + size(cMap,1), :) = segMovie; + aTimeRsq(1,:,Cnt,1) = nanmean(segMovie); + + load([fPath 'data.mat'],'data'); %load current data + cellRej(cellCnt + 1:cellCnt + size(cMap,1)) = data.rejIdx; + trialCnt(cellCnt + 1:cellCnt + size(cMap,1)) = length(data.bhvTrials); + end + + for iRegs = 1:length(nRecLabels) + try + % get data from individual regressors + if ~ismember(nRecLabels{iRegs}, [usedR{Cnt} extraGroups(1,:)]) && strcmpi(modTypes{iRuns},'shOther') % if regressor was not used and other regressors were shuffled, set all results to zero + load([fPath 'predVariance' filesep 'shCurrent' filesep fileExt 'fullcorr.mat'],'cMap','segMovie'); %load full model instead of current regressor data + cMap = cMap - cMap; %set to 0 + segMovie = segMovie - segMovie; %set to 0 + elseif ismember(nRecLabels{iRegs}, orgVars) && strcmpi(modTypes{iRuns},'shOther') % use original for standalone video regressors + load([fPath 'predVariance' filesep modTypes{iRuns} filesep fileExt 'org' nRecLabels{iRegs} 'corr.mat'],'cMap','segMovie'); %load current data + else + load([fPath 'predVariance' filesep modTypes{iRuns} filesep fileExt nRecLabels{iRegs} 'corr.mat'],'cMap','segMovie'); %load current data + end + cMap = cMap.^2; + segMovie = segMovie.^2; + + cInd = iRegs; + if strcmpi(nRecLabels{iRegs},'visReward') || strcmpi(nRecLabels{iRegs},'audReward') + if (visExp(iAnimals) && strcmpi(nRecLabels{iRegs},'visReward')) || (audExp(iAnimals) && strcmpi(nRecLabels{iRegs},'audReward')) + cInd = find(ismember(altRecLabels, 'expReward')); %change index to point to expert instead of modality + else + cInd = find(ismember(altRecLabels, 'novReward')); %change index to point to novice instead of modality + end + end + + aTimeRsq(cInd + 1, :, iRuns) = nanmean(segMovie); + aRsq(cInd + 1, iRuns) = nanmean(cMap(:)); + + if ~strcmpi(modTypes{iRuns},'shOtherMotor') + segMovies(cellCnt + 1:cellCnt + size(cMap,1), cInd, :, iRuns) = segMovie; + corrMaps(cellCnt + 1:cellCnt + size(cMap,1), cInd, iRuns) = cMap; + else + regCnt = regCnt + 1; + otherMsegMovies(cellCnt + 1:cellCnt + size(cMap,1), regCnt, :) = segMovie; + otherMcorrMaps(cellCnt + 1:cellCnt + size(cMap,1), regCnt) = cMap; + otherMotorLabels{regCnt} = nRecLabels{iRegs}; + end + end + end + end + cellCnt = cellCnt + size(cMap,1); + cellPerAnimal(Cnt) = size(cMap,1); + catch + Cnt = Cnt - 1; + disp('Cant load recording'); + end + toc; + end + + % check if shOtherMotor was loaded correctly + if length(oMotorLabels) ~= sum(ismember(oMotorLabels,otherMotorLabels)) + error('oMotorLabels and otherMotorLabels are not the same. Problem with loading shOtherMotor variables?') + end + end + clear segMovie cMap + + %% load reconstructed PSTH data + [recV, semV, allBeta, recLabels, dataPath, modIdx, sideIdx, alignIdx, allRecIdx, baseLength, frames, stimTimes, cellCnt] = twoP_motorReconstruct(cMod); %get reconstructed V, used full model + recV = cat(4,recV{:}); + semV = cat(4,semV{:}); + stimTimes = cat(2,stimTimes{:}); + stimTimes(stimTimes > 1.5) = []; + recLabels = [recLabels {'task' 'motor' 'all'}]; + + %% save down results + if ~exist(sPath,'dir') + mkdir(sPath); + end + save([sPath fileExt 'fullCorrMaps2p.mat'],'fullCorrMaps', 'recSite', 'recDepth', 'recDate', 'recAnimal'); + save([sPath fileExt 'fullSegMovies2p.mat'],'fullSegMovies'); + save([sPath fileExt 'corrMaps2p.mat'],'corrMaps'); + save([sPath fileExt 'segMovies2p.mat'],'segMovies', '-v7.3'); + save([sPath fileExt 'otherMsegMovies2p.mat'],'otherMsegMovies', '-v7.3'); + save([sPath fileExt 'otherMcorrMaps2p.mat'],'otherMcorrMaps'); + save([sPath fileExt 'meanRsq2p.mat'],'aRsq','aTimeRsq','nRecLabels'); + save([sPath fileExt 'twoP_rebuild2p.mat'],'recV', 'semV', 'allBeta', 'recLabels', 'allRecIdx', 'dataPath', 'modIdx', 'sideIdx', 'alignIdx', 'baseLength', 'frames', 'stimTimes', 'cellCnt', 'otherMotorLabels', '-v7.3'); +end + +%% make overview figure for overall task- and motor explained variance +rejIdx = (sum(abs(recV(:, :, 6, end)),2) > std(sum(abs(recV(:, :, 6, end)),2))*1)'; %exclude neurons with weird PSTH + +% taskFull = corrMaps(:,strcmpi(nRecLabels,{'motor'}),strcmpi(modTypes,'shCurrent'))'; +% spMotorFull = corrMaps(:,strcmpi(nRecLabels,{'spontMotor'}),strcmpi(modTypes,'shOther'))'; +% opMotorFull = corrMaps(:,strcmpi(nRecLabels,{'opMotor'}),strcmpi(modTypes,'shOther'))'; + +taskRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'motor'}),strcmpi(modTypes,'shOther'))'; +spMotorRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'spontMotor'}),strcmpi(modTypes,'shCurrent'))'; +opMotorRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'opMotor'}),strcmpi(modTypes,'shCurrent'))'; + +% find cells that may suffer from overfitting and remove from analysis. +% Also remove cells with weird PSTH reconstruction (only 1 so far). +cIdx = spMotorRed < 0 | opMotorRed < 0 | taskRed < 0 | sum(abs(recV(:, :, 7, 1)), 2)' > 100; +fullCorrMaps(cIdx) = []; +corrMaps(cIdx, :, :) = []; +recSite = recSite(~cIdx); +recAnimal = recAnimal(~cIdx); +recDate = recDate(~cIdx); +recDepth(cIdx) = []; +recV(cIdx, :, :, :) = []; +fprintf('Removed %d/%d (%f) cells for having negative task/motor information\n', sum(cIdx), length(cIdx), 100*sum(cIdx)/length(cIdx)) + +taskFull = corrMaps(:,strcmpi(nRecLabels,{'motor'}),strcmpi(modTypes,'shCurrent'))'; +spMotorFull = corrMaps(:,strcmpi(nRecLabels,{'spontMotor'}),strcmpi(modTypes,'shOther'))'; +opMotorFull = corrMaps(:,strcmpi(nRecLabels,{'opMotor'}),strcmpi(modTypes,'shOther'))'; + +taskRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'motor'}),strcmpi(modTypes,'shOther'))'; +spMotorRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'spontMotor'}),strcmpi(modTypes,'shCurrent'))'; +opMotorRed = fullCorrMaps - corrMaps(:,strcmpi(nRecLabels,{'opMotor'}),strcmpi(modTypes,'shCurrent'))'; + +[~, cellIdx] = sort(fullCorrMaps, 'descend'); +% [~, cellIdx] = sort(taskFull, 'descend'); +% cellIdx = 1:cellCnt; + +cellIdx(isnan(fullCorrMaps(cellIdx))) = []; + +figure; hold on; +smoothFact = 3; +plot(smooth(fullCorrMaps(cellIdx),smoothFact),'color', [0.5 0.5 0.5], 'linewidth',4); axis square; +plot(smooth(spMotorFull(cellIdx),smoothFact),'k'); axis square; +plot(smooth(opMotorFull(cellIdx),smoothFact),'b'); axis square; +plot(smooth(taskFull(cellIdx),smoothFact),'g'); axis square; + +plot(smooth(-spMotorRed(cellIdx),smoothFact),'k'); axis square; +plot(smooth(-opMotorRed(cellIdx),smoothFact),'b'); +plot(smooth(-taskRed(cellIdx),smoothFact),'g'); axis square; + +axis square;hline(0); +ylabel('crossVal R^2'); +xlabel('Neurons') +xlim([0 length(cellIdx)]); + + +%% relative to full model plot +figure; hold on; +smoothFact = 5; +fullData = smooth(fullCorrMaps(cellIdx),smoothFact); +plot(smooth(opMotorFull(cellIdx),smoothFact) ./ fullData,'b'); axis square; +plot(smooth(taskFull(cellIdx),smoothFact) ./ fullData,'g'); axis square; +plot(smooth(spMotorFull(cellIdx),smoothFact) ./ fullData,'k'); axis square; +axis square; + +axis square;hline(0); +ylabel('Relative cvR^2'); +xlabel('Neurons') +% xlim([0 length(cellIdx)]); +xlim([0 10000]); + +%% Task-dependent R2 reduction for all regressors +clear cData +opMotorLabels = {'handles' 'licks'}; %operant motor regressors +spMotorLabels = {'piezo' 'whisk' 'nose' 'body' 'bhvVideo' 'allMove' 'pupils'}; %spontaneous motor regressors +% cIdx = ismember(recSite,'RS'); +cIdx = true(1, length(recSite)); + +clear cData cRegMod cRegRedM +for x = 1:length(nRecLabels) + + cReg = corrMaps(cIdx,x,ismember(modTypes,'shOther')); %this is the current regressor model. All regressor information. + cRegM = fullCorrMaps(cIdx)' - corrMaps(cIdx,x,ismember(modTypes,'shCurrent')); %this is the current regressor. This has non-redundant information. + + %normalize for animals + animals = unique(recAnimal); + for iAnimals = 1 : length(animals) + aIdx = ismember(recAnimal,animals{iAnimals}); + cRegMod(iAnimals) = mean(cReg(aIdx)); + cRegRedM(iAnimals) = mean(cRegM(aIdx)); + end + + cData(1,x,:) = cRegMod; + cData(2,x,:) = cRegRedM; +end + +idx = zeros(1,length(nRecLabels)); +idx(ismember(nRecLabels,opMotorLabels)) = 3; +idx(ismember(nRecLabels,cogLabels)) = 2; +idx(ismember(nRecLabels,sensorLabels)) = 1; +idx(ismember(nRecLabels,spMotorLabels)) = 4; + +figure('renderer','painters') +[ax, idxGroup] = regressorBoxPlot(squeeze(cData(1,idx>0,:))',nRecLabels(idx>0),5,subplot(2,2,1:2),[0 1 0],idx(idx>0),0.6,[-0.2 0.4]); +ax = regressorBoxPlot(squeeze(-cData(2,idx>0,:))',nRecLabels(idx>0),5,ax,[25 111 61]/255,idxGroup,0.6,[-0.2 0.4]); +legend(ax.Children(1:2),{'All information' 'Non-redundant information'},'location','northwest') +title('Single varibles: All (top) / Unique (bottom)'); +ylabel('unique delta cv R^2'); +xlim([0 25]); %make this a fixed value to ensure bars have always the same width + +%% R2 reduction for regressor groups +clear cData +motorM = corrMaps(:,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shOther')); %this is the current regressor. This ha sall information. + +taskM = corrMaps(:,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shCurrent')); %this is the current regressor. This ha sall information. +taskRedM = fullCorrMaps' - motorM; %this is the non-redundant task only model. + +spMotorM = corrMaps(:,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shOther')); %this is the current regressor. This ha sall information. +spMotorRedM = fullCorrMaps' - corrMaps(:,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shCurrent')); %this is the non-redundant task only model. + +opMotorM = corrMaps(:,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shOther')); %this is the current regressor. This ha sall information. +opMotorRedM = fullCorrMaps' - corrMaps(:,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shCurrent')); %this is the non-redundant task only model. + +clear cData cError +cData(1,:,:) = [taskM spMotorM opMotorM fullCorrMaps']; %all reg information +cData(2,:,:) = [taskRedM spMotorRedM opMotorRedM fullCorrMaps']; %all reg information + +figure +[ax, idxGroup] = regressorPlot(squeeze(cData(1,:,:)), {'Task' 'spontMove' 'opMove' 'full'}, 5, subplot(2,2,1:4), [0 1 0], {[1 3 2 4]},0.6,[-0.5 0.5]); +ax = regressorPlot(squeeze(-cData(2,:,:)), {'Task' 'spontMove' 'opMove' 'full'}, 5, ax, [25 111 61]/255, idxGroup,0.6,[-0.5 0.5]); +title('Regg groups: All (top) / Unique (bottom)'); xlim([0 30]); %make this a fixed value to ensure bars have always the same width +ylabel('total cv R^2'); +hline(mean(fullCorrMaps),'k--') + + +%% R2 reduction for regressor groups: area specific +clear areaData areaError +% areas = unique(recSite); %different recording sites +areas = {'ALM' 'MM' 'V1' 'RS' 'S1'}; %different recording sites + +for iAreas = 1 : length(areas) + 1 + + if iAreas > 1 + cIdx = ismember(recSite,areas{iAreas - 1}); + else + cIdx = true(1, length(recSite)); + end + + %cvR^2 - normalize for animals + animals = unique(recAnimal); clear temp + for iAnimals = 1 : length(animals) + aIdx = cIdx & ismember(recAnimal,animals{iAnimals}); + temp(iAnimals,1) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shCurrent'))); %this is the task model + temp(iAnimals,2) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shOther'))); %this is the operant motor model + temp(iAnimals,3) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shOther'))); %this is the spont. motor model + temp(iAnimals,4) = nanmean(fullCorrMaps(aIdx)); %this is the full model + end + areaData(iAreas, :, :, 1) = (temp); + + %dR^2 - normalize for animals + animals = unique(recAnimal); clear temp + for iAnimals = 1 : length(animals) + aIdx = cIdx & ismember(recAnimal,animals{iAnimals}); + temp(iAnimals,1) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shOther'))); %this is the task model + temp(iAnimals,2) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shCurrent'))); %this is the operant motor model + temp(iAnimals,3) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shCurrent'))); %this is the spont. motor model + temp(iAnimals,4) = nanmean(fullCorrMaps(aIdx)); %this is the full model + end + areaData(iAreas, :, :, 2) = (temp); +end + +figure('renderer','painters'); +areaLabels = ['Full' areas]; +for x = 1 : size(areaData,1) + subplot(2,max(size(areaData,1)/2),x);hold on; + [ax, idxGroup] = regressorBoxPlot(areaData(x,:,:,1), {'Task' 'spontMove' 'opMove' 'full'}, 5, gca, [0 1 0], {[1 2 3 4]},0.6,[-0.5 0.5]); + ax = regressorBoxPlot(squeeze(-areaData(x,:,:,2)), {'Task' 'spontMove' 'opMove' 'full'}, 5, ax, [25 111 61]/255, idxGroup,0.6,[-0.5 0.5]); + axis square + title(areaLabels{x}); +end + +ngroups = size(areaData, 1); +nbars = size(areaData, 2); +groupwidth = min(0.8, nbars/(nbars + 1.5)); +for i = 1:nbars + x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars); + errorbar(x, areaData(:,i,1), areaError(:,i,1), 'k', 'linestyle', 'none','LineWidth',2); + errorbar(x, -areaData(:,i,2), areaError(:,i,2), 'k', 'linestyle', 'none','LineWidth',2); +end +ax = bar(areaData(:,:,1), 'FaceColor', 'g', 'barwidth', 0.6,'LineWidth',2); +bar(-areaData(:,:,2), 'FaceColor', [25 111 61]/255, 'barwidth', 0.6,'LineWidth',2) +set(ax(1).Parent,'XTick',1:ngroups) +set(ax(1).Parent,'xTickLabel',['Full' areas]) +set(ax(1).Parent,'XTickLabelRotation',45) +axis square; grid on; title('Pred.Var / areas'); + +%% R2 reduction for regressor groups: depth specific +clear areaData areaError +depthLabels = {'Superficial' 'Infragranular'}; +depths = [0 350 1000]; %define range of depths to group neurons +for iDepths = 1 : length(depths) - 1 + + cIdx = recDepth >= depths(iDepths) & recDepth < depths(iDepths + 1); + + %cvR^2 - normalize for animals + animals = unique(recAnimal); clear temp + for iAnimals = 1 : length(animals) + aIdx = cIdx & ismember(recAnimal,animals{iAnimals}); + temp(iAnimals,1) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shCurrent'))); %this is the task model + temp(iAnimals,2) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shOther'))); %this is the operant motor model + temp(iAnimals,3) = nanmean(corrMaps(aIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shOther'))); %this is the spont. motor model + temp(iAnimals,4) = nanmean(fullCorrMaps(aIdx)); %this is the full model + end + areaData(iDepths, :, :, 1) = (temp); + + %dR^2 - normalize for animals + animals = unique(recAnimal); clear temp + for iAnimals = 1 : length(animals) + aIdx = cIdx & ismember(recAnimal,animals{iAnimals}); + temp(iAnimals,1) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shOther'))); %this is the task model + temp(iAnimals,2) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shCurrent'))); %this is the operant motor model + temp(iAnimals,3) = nanmean(fullCorrMaps(aIdx)' - corrMaps(aIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shCurrent'))); %this is the spont. motor model + temp(iAnimals,4) = nanmean(fullCorrMaps(aIdx)); %this is the full model + end + areaData(iDepths, :, :, 2) = (temp); +end + +figure('renderer','painters'); +for x = 1 : size(areaData,1) + subplot(2,max(size(areaData,1)/2),x);hold on; + [ax, idxGroup] = regressorBoxPlot(areaData(x,:,:,1), {'Task' 'spontMove' 'opMove' 'full'}, 5, gca, [0 1 0], {[1 2 3 4]},0.6,[-0.5 0.5]); + ax = regressorBoxPlot(squeeze(-areaData(x,:,:,2)), {'Task' 'spontMove' 'opMove' 'full'}, 5, ax, [25 111 61]/255, idxGroup,0.6,[-0.5 0.5]); + axis square + grid on; title(depthLabels{x}); +end + + +%% plot PSTH over all neurons for each area +clear areaData areaError +areas = {'ALM' 'MM' 'V1' 'RS' 'S1'}; %different recording sites + +temp = recV(:, 1 : baseLength, 1, end) - recV(:, 1 : baseLength, 2, end); +baseRejIdx = ((abs(mean(recV(:, baseLength:end, 1, end),2)) < 0.01) | rejIdx')'; +% baseRejIdx = ((abs(mean(temp,2)) > 0.05) | rejIdx)'; +iMod = 1; + +figure('units','normalized','outerposition',[0 0 1 1]) +for iAreas = 1 : length(areas) + cIdx = ismember(recSite,areas{iAreas}) ; + subplot(ceil(length(areas)/2), 2, iAreas); + cStim = baseLength+2; + + stdshade(recV(cIdx & ~baseRejIdx, 1 : baseLength, iMod, end), 'k', (1 : baseLength) / 31, 0.5); hold on + stdshade(recV(cIdx & ~baseRejIdx, cStim : end, iMod, end), 'k', (cStim : size(recV,2)) / 31, 0.5); + + stdshade(recV(cIdx & ~baseRejIdx, 1 : baseLength, iMod, end-3), 'r', (1 : baseLength) / 31, 0.5); hold on + stdshade(recV(cIdx & ~baseRejIdx, cStim : end, iMod, end-3), 'r', (cStim : size(recV,2)) / 31, 0.5); + + stdshade(recV(cIdx & ~baseRejIdx, 1 : baseLength, iMod, end-2), 'g', (1 : baseLength) / 31, 0.5); hold on + stdshade(recV(cIdx & ~baseRejIdx, cStim : end, iMod, end-2), 'g', (cStim : size(recV,2)) / 31, 0.5); + + stdshade(recV(cIdx & ~baseRejIdx, 1 : baseLength, iMod, end-1), 'b', (1 : baseLength) / 31, 0.5); hold on + stdshade(recV(cIdx & ~baseRejIdx, cStim : end, iMod, end-1), 'b', (cStim : size(recV,2)) / 31, 0.5); + + + title([areas{iAreas} ' - ' num2str(sum(cIdx & ~baseRejIdx))]); + axis square; xlim([0 6]); + cStim = cStim / 31; vline([1.8 cStim cStim+0.6 cStim+1.1 cStim+1.7 cStim+2.7]) + ylim([-0.02 0.03]) + +end + +%% +iMod = 6; +allVar = sum(abs(recV(:, :, iMod, end)),2); +spMotorVar = sum(abs(recV(:, :, iMod, end-1)),2); +opMotorVar = sum(abs(recV(:, :, iMod, end-2)),2); +taskVar = sum(abs(recV(:, :, iMod, end-3)),2); + +cIdx = NaN(1, length(allVar)); +cIdx(taskVar > opMotorVar & taskVar > spMotorVar) = 3; +cIdx(opMotorVar > taskVar & opMotorVar > spMotorVar) = 2; +cIdx(spMotorVar > taskVar & spMotorVar > opMotorVar) = 1; +cIdx(sum(abs(recV(:, :, iMod, end)),2) > std(sum(abs(recV(:, :, iMod, end)),2))*3) = NaN; + +figure; +for x = 1:3 + + [~, b] = sort(sum(abs(recV(cIdx == x, :, iMod, end-x)),2), 'descend'); + + subplot(1,3,x); + temp = sum(abs(recV(cIdx == x, :, iMod, end-3)),2); %task + plot(temp(b),'r','linewidth',2); hold on + temp = sum(abs(recV(cIdx == x, :, iMod, end-2)),2); %op motor + plot(temp(b),'g','linewidth',2); hold on + temp = sum(abs(recV(cIdx == x, :, iMod, end-1)),2); %sp motor + plot(temp(b),'k','linewidth',2); hold on + +end +fprintf('Modulation index: SpMajor: %d, OpMajor: %d, TaskMajor: %d\n', sum(cIdx == 1), sum(cIdx == 2), sum(cIdx == 3)); + +%% individual regressors / neurons +cReg = 'spontMotor'; +clear cData; + +cRegMod = corrMaps(:,ismember(nRecLabels,cReg),ismember(modTypes,'shOther')); %this is the current regressor model. All regressor information. +cRegRedM = fullCorrMaps' - corrMaps(:,ismember(nRecLabels,cReg),ismember(modTypes,'shCurrent')); %this is the current regressor. This has non-redundant information. + +cData(1,:) = cRegMod; +cData(2,:) = cRegRedM; + +figure; +subplot(1,2,1); +plot(cData'); +axis square +title(['Single regressor - ' fileExt]); +ylabel('crossVal R^2'); +xlabel('Neurons'); +ylim([0 1]); + +subplot(1,2,2); +a = histogram(cData(1,:)); hold on +histogram(cData(2,:),a.BinEdges); +axis square +title(['Single regressor - ' fileExt]); +xlabel('crossVal R^2'); +ylabel('Neurons') + +% %% single cell betas +% lickBetas = cell(1, length(allBeta)); +% handleBetas = cell(1, length(allBeta)); +% visBetas = cell(1, length(allBeta)); +% audBetas = cell(1, length(allBeta)); +% for iSessions = 1 : length(allBeta) +% cBeta = allBeta{iSessions}; +% cLick = mean(abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'lLick')), :))); +% cLick(2,:) = mean(abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'rLick')), :))); +% lickBetas{iSessions} = cLick; +% +% cHandle = mean(abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'lGrab')), :))); +% cHandle(2,:) = mean(abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'rGrab')), :))); +% handleBetas{iSessions} = cHandle; +% +% temp = abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'lVisStim')), :)); +% cVisStim = mean(temp(1:50, :)); +% temp = abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'rVisStim')), :)); +% cVisStim(2,:) = mean(temp(1:50, :)); +% visBetas{iSessions} = cVisStim; +% +% temp = abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'lAudStim')), :)); +% cAudStim = mean(temp(1:50, :)); +% temp = abs(cBeta(allRecIdx{iSessions} == find(ismember(recLabels, 'rAudStim')), :)); +% cAudStim(2,:) = mean(temp(1:50, :)); +% audBetas{iSessions} = cAudStim; +% end +% lickBetas = cat(2, lickBetas{:}); +% handleBetas = cat(2, handleBetas{:}); +% visBetas = cat(2, visBetas{:}); +% audBetas = cat(2, audBetas{:}); +% +% % +% figure +% clear areaData depthData +% areas = unique(recSite); %different recording sites +% depths = [0 350 1000]; %define range of depths to group neurons +% plotCnt = 1 : (length(depths) - 1) * length(areas); +% plotCnt = reshape(plotCnt, length(areas), [])'; +% Cnt = 0; +% for iAreas = 1 : length(areas) +% for iDepths = 1 : length(depths) - 1 +% +% cIdx = ismember(recSite,areas{iAreas}) & recDepth > depths(iDepths) & recDepth < depths(iDepths + 1); +% +% %make figure +% try +% [ax, idxGroup] = regressorPlot(squeeze(areaData{iAreas, iDepths}(1,:,:)), {'Task' 'Instructed' 'Uninstructed' 'Full'}, 5, subplot(length(depths) - 1, length(areas), plotCnt(Cnt)), [0 1 0], [1 1 1 1], 0.6); +% regressorPlot(squeeze(-areaData{iAreas, iDepths}(2,:,:)), {'Task' 'Instructed' 'Uninstructed' 'Full'}, 5, ax, [25 111 61]/255, idxGroup, 0.6, [-0.5 0.5]); +% catch +% subplot(length(depths) - 1, length(areas), plotCnt(Cnt)); +% axis square; +% end +% title(['Regressor groups: ' areas{iAreas} ' - ' num2str(depths(iDepths+1)) ' (' num2str(sum(cIdx)) ' cells) - ' fileExt]); +% ylabel('crossVal R^2'); axis square +% xlim([0 5]); axis square +% +% end +% end + + +%% +% meanBase = mean((fullRec(:,1:17,7)),2); +% stdBase = mean((fullErr(:,[1:17 169:end],7)),2); +% meanLick = mean((fullRec(:,169:end,7)),2); +% glassLick = (meanLick - meanBase) ./ stdBase; + +% figure +% histogram(glassLick,30); axis square +% title(['d" - ' fileExt]); +% ylabel('d"'); +% +% % make figure +% [a, b] = (sort(modIndex,'ascend')); %sort indices +% ind = round(a*200); +% modMat = false(size(modIndex,1),200); +% +% for x = 1 : length(ind) +% modMat(x, 1:ind(x)) = true; +% end +% +% figure +% imagesc((modMat')); +% caxis([-0.5 1.5]); +% hline(100,'--w'); +% vline(find(ind>100,1),'--w'); +% colormap(colormap_blueblackred); +% axis square +% xlabel('Sorted neurons'); +% ylabel('Modulation index'); hold on +% plot((ind),'w') +% +% figure; +% cData = motorVar + taskVar; +% [a, b] = (sort(cData,'descend')); %sort indices +% plot(a,'k','linewidth',2); hold on +% plot(taskVar(b),'g','linewidth',2); axis square +% ylabel('Absolute trial-average modulation') +% xlabel('Sorted neurons'); + +%% trace examples +%% R2 reduction for regressor groups: area specific +figure +clear areaData depthData +% areas = unique(recSite); %different recording sites +areas = {'ALM' 'MM'}; %different recording sites +depths = [0 350 1000]; %define range of depths to group neurons +plotCnt = 1 : (length(depths) - 1) * length(areas); +plotCnt = reshape(plotCnt, length(areas), [])'; +Cnt = 0; + +for iAreas = 1 : length(areas) + for iDepths = 1 : length(depths) - 1 + + Cnt = Cnt + 1; + cIdx = ismember(recSite,areas{iAreas}) & recDepth > depths(iDepths) & recDepth < depths(iDepths + 1); + + spMotorM = corrMaps(cIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shOther')); %this is the current regressor. This ha sall information. + spMotorRedM = fullCorrMaps(cIdx)' - corrMaps(cIdx,ismember(nRecLabels,{'spontMotor'}),ismember(modTypes,'shCurrent')); %this is the non-redundant task only model. + + opMotorM = corrMaps(cIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shOther')); %this is the current regressor. This ha sall information. + opMotorRedM = fullCorrMaps(cIdx)' - corrMaps(cIdx,ismember(nRecLabels,{'opMotor'}),ismember(modTypes,'shCurrent')); %this is the non-redundant task only model. + + taskM = corrMaps(cIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shCurrent')); %this is the current regressor. This ha sall information. + taskRedM = fullCorrMaps(cIdx)' - corrMaps(cIdx,ismember(nRecLabels,{'motor'}),ismember(modTypes,'shOther')); %this is the non-redundant task only model. + + areaData{iAreas, iDepths}(1,:,:) = [taskM spMotorM opMotorM fullCorrMaps(cIdx)']; %all reg information + areaData{iAreas, iDepths}(2,:,:) = [taskRedM spMotorRedM opMotorRedM fullCorrMaps(cIdx)']; %all reg information + + %make figure + try + [ax, idxGroup] = regressorPlot(squeeze(areaData{iAreas, iDepths}(1,:,:)), {'Task' 'Uninstructed' 'Instructed' 'Full'}, 5, subplot(length(depths) - 1, length(areas), plotCnt(Cnt)), [0 1 0], {[1 3 2 4]}, 0.6); + regressorPlot(squeeze(-areaData{iAreas, iDepths}(2,:,:)), {'Task' 'Uninstructed' 'Instructed' 'Full'}, 5, ax, [25 111 61]/255, idxGroup, 0.6, [-0.5 0.5]); + catch + subplot(length(depths) - 1, length(areas), plotCnt(Cnt)); + axis square; + end + title(['Regressor groups: ' areas{iAreas} ' - ' num2str(depths(iDepths+1)) ' (' num2str(sum(cIdx)) ' cells) - ' fileExt]); + ylabel('crossVal R^2'); axis square + xlim([0 5]); axis square + + end +end + +%% compute modulation index +avgType = 6; %all trials + +spMotorRec = recV(:,:,:,end - 1); +opMotorRec = recV(:,:,:,end - 2); +taskRec = recV(:,:,:,end - 3); +motorRec = spMotorRec + opMotorRec; +taskOpRec = taskRec + opMotorRec; +taskSpRec = taskRec + spMotorRec; + +taskVar = sum(abs(taskRec(:,:,avgType)),2); +motorVar = sum(abs(motorRec(:,:,avgType)),2); +taskOpVar = sum(abs(taskOpRec(:,:,avgType)),2); +taskSpVar = sum(abs(taskSpRec(:,:,avgType)),2); +spMotorVar = sum(abs(spMotorRec(:,:,avgType)),2); +opMotorVar = sum(abs(opMotorRec(:,:,avgType)),2); + +taskIndex = (((taskVar-motorVar) ./ (taskVar + motorVar)) + 1) / 2; +spMotorIndex = (((spMotorVar-taskOpVar) ./ (spMotorVar + taskOpVar)) + 1) / 2; +opMotorIndex = (((opMotorVar-taskSpVar) ./ (opMotorVar + taskSpVar)) + 1) / 2; + +taskModIndex = taskVar - recV(:,:,:,end); + + +h1 = figure; +subplot(3,1,1); +histogram(taskIndex,0:0.05:1, 'FaceColor', 'g'); ylim([0 3000]); +% vline(taskIndex([5849 5944 6005 5941 5986]),'r', 'task cell'); +axis square; title(['Median modIdx: ' num2str(median(taskIndex)) ' - TaskIndex']) +xlabel('task index'); ylabel('cell count'); + +subplot(3,1,2); +histogram(spMotorIndex,0:0.05:1, 'FaceColor', 'k'); ylim([0 3000]); +% vline(spMotorIndex([5849 5944 6005 5941 5986]),'r', 'uninstructed cell'); +axis square; title(['Median modIdx: ' num2str(median(spMotorIndex)) ' - UninstructedIndex']) +xlabel('task index'); ylabel('cell count'); + +subplot(3,1,3); +histogram(opMotorIndex,0:0.05:1, 'FaceColor', 'b'); ylim([0 3000]); +% vline(opMotorIndex([5849 5944 6005 5941 5986]),'r', 'instructed cell'); +axis square; title(['Median modIdx: ' num2str(median(opMotorIndex)) ' - InstructedIndex']) +xlabel('task index'); ylabel('cell count'); + +%% compute distribution of single variable contributions +cLabels = recLabels(ismember(recLabels,[taskLabels motorLabels])); %all task/motor variables +totalVar = sum(sum(abs(recV(:,:,avgType,ismember(recLabels,cLabels))),2),4); %total absolute modulation by all variables +variableVar = squeeze(sum(abs(recV(:,:,avgType,ismember(recLabels,cLabels))),2)); %absolute modulation for each variable + +variableVar = bsxfun(@rdivide,variableVar,totalVar); +variableVar = cumsum(sort(variableVar,2,'descend'),2); + + +varPowerDist = NaN(length(cLabels)-6,1); +for x = 1 : length(cLabels)-6 + varPowerDist(x) = sum(variableVar(:,x) > 0.3 ); +end +figure +% bar(varPowerDist); hold on; +bar(diff([0;varPowerDist])) +xlim([0 10]); + +%% single cell examples +% cData = motorVar + taskVar; +% [~, cellIdx] = (sort(cData,'descend')); %sort indices +% [~, cellIdx] = sort(opMotorIndex, 'descend'); +% [~, cellIdx] = sort(taskIndex, 'descend'); +% [~, cellIdx] = sort(motorVar + taskVar, 'descend'); +% [~, cellIdx] = sort(glassLick, 'descend'); +[~, cellIdx] = sort(fullCorrMaps, 'descend'); + +figure +avgType = 6; %all trials +fullRec = recV(:,:,:,end); +spMotorRec = recV(:,:,:,end - 1); +opMotorRec = recV(:,:,:,end - 2); +taskRec = recV(:,:,:,end - 3); +fullErr = semV(:,:,:,end); +spMotorErr = semV(:,:,:,end - 1); +opMotorErr = semV(:,:,:,end - 2); +taskErr = semV(:,:,:,end - 3); + +motorRec = recV(:,:,:,end - 1) + recV(:,:,:,end - 2); + +% taskVar = sum(abs(taskRec(:,:,avgType)),2); +% spMotorVar = sum(abs(spMotorRec(:,:,avgType)),2); +% opMotorVar = sum(abs(opMotorRec(:,:,avgType)),2); +% motorVar = sum(abs(motorRec(:,:,avgType)),2); + +% modIndex = ((taskVar-(opMotorVar)) ./ (taskVar + (opMotorVar))); +% modIndex = ((spMotorVar-(taskVar)) ./ (spMotorVar + (taskVar))); +% modIndex = ((taskVar-motorVar) ./ (taskVar + motorVar)); + +% [~, cellIdx] = sort((taskModIndex), 'descend'); +% cellIdx(ismember(cellIdx, find(isnan(corrMaps(:,1,1))))) = []; + +% for x = 6093 +% for x = [5849 5944 6005 5941 5986] +% for x = [5973 3022 7361 9951 4625 2973 6444 6003 6442 5944 5947 6093 1711 3017 5957 5971 4877 11384 5986 5794 5817 5849 5853 6005 5851 5855 6008 5860 5872 5914 5941] +% for x = [3531 8195 8311 8000 12967 12979 1755 7910 8269 12978 7972 7771 8414 8609 2681 8263 8311 2897 8113 8289] % potential motor cell +% for x = [2946 2703 5801 2784 3652 3869 3511 6003 2861 2941 6596 2748 2695 6820 8117 3350] % potential task cells +for x = cellIdx' + % cCell = cellIdx(8); +% cCell = 6093; +% cCell = 3460; %task cell1 +% cCell = 12979; %uninstructed cell1 +% cCell = 8263; %uninstructed cell1 +% cCell = 11972; %instructed cell1 + + cCell = (x); + + + clear cData + for y = 1:length(nRecLabels) + + cRegMod = corrMaps(cCell,y,ismember(modTypes,'shOther')); %this is the current regressor model. All regressor information. + cRegRedM = fullCorrMaps(cCell)' - corrMaps(cCell,y,ismember(modTypes,'shCurrent')); %this is the current regressor. This has non-redundant information. + + cData(1,y) = cRegMod; + cData(2,y) = cRegRedM; + + end + + if sum(isnan(cData(:))) ~= numel(cData) + idx = zeros(1,length(nRecLabels)); + idx(ismember(nRecLabels,cogLabels)) = 1; + idx(ismember(nRecLabels,sensorLabels)) = 2; + idx(ismember(nRecLabels,otherMotorLabels)) = 3; + % idx(cData(2,:) < 0.01) = 0; + + delete(subplot(2,2,1:2)); + ax = regressorPlot(squeeze(cData(1,idx>0,:)),nRecLabels(idx>0),5,subplot(2,2,1:2),[0 1 0],idx(idx>0),0.6, [0 max(squeeze(cData(1,idx>0,:)))]); + ax = regressorPlot(squeeze(cData(2,idx>0,:)),nRecLabels(idx>0),5,ax,[25 111 61]/255,idx(idx>0),0.3, [0 max(squeeze(cData(1,idx>0,:)))]); + legend(ax.Children([3 1]),{'All information' 'Non-redundant information'},'location','northwest') + title(['Regressor comparison - ' recSite{cCell} ' - ' num2str(recDepth(cCell)) ' - ' fileExt]); + ylabel('crossVal R^2'); + xlim([0 sum(idx>0)+1]); + + % subplot(2,8,9:11) + ax1 = subplot(4,8,[17 18 25 26]); + ax2 = subplot(4,8,[19 20 27 28]); + ax3 = subplot(4,8,[21 22 29 30]); + cla(ax1);cla(ax2);cla(ax3); + + amean{1} = fullRec(cCell,1:81,avgType); amean{2} = fullRec(cCell,83:end,avgType); + astd{1} = fullErr(cCell,1:81,avgType); astd{2} = fullErr(cCell,83:end,avgType); + F{1} = (1:length(amean{1}))/31; + F{2} = (F{1}(end) + 0.1) + (1:length(amean{2}))/31; + splitErrorshade(ax1, amean, [], F, [0.5 0.5 0.5]); + splitErrorshade(ax2, amean, [], F, [0.5 0.5 0.5]); + splitErrorshade(ax3, amean, [], F, [0.5 0.5 0.5]); + + amean{1} = opMotorRec(cCell,1:81,avgType); amean{2} = opMotorRec(cCell,83:end,avgType); + astd{1} = opMotorErr(cCell,1:81,avgType); astd{2} = opMotorErr(cCell,83:end,avgType); + F{1} = (1:length(amean{1}))/31; + F{2} = (F{1}(end) + 0.1) + (1:length(amean{2}))/31; + splitErrorshade(ax1, amean, astd, F, 'b'); + + amean{1} = spMotorRec(cCell,1:81,avgType); amean{2} = spMotorRec(cCell,83:end,avgType); + astd{1} = spMotorErr(cCell,1:81,avgType); astd{2} = spMotorErr(cCell,83:end,avgType); + F{1} = (1:length(amean{1}))/31; + F{2} = (F{1}(end) + 0.1) + (1:length(amean{2}))/31; + splitErrorshade(ax2, amean, astd, F, 'k'); + + amean{1} = taskRec(cCell,1:81,avgType); amean{2} = taskRec(cCell,83:end,avgType); + astd{1} = taskErr(cCell,1:81,avgType); astd{2} = taskErr(cCell,83:end,avgType); + F{1} = (1:length(amean{1}))/31; + F{2} = (F{1}(end) + 0.1) + (1:length(amean{2}))/31; + splitErrorshade(ax3, amean, astd, F, 'g'); + + lines = findall(ax1.Children,'Type','line'); + ax1.XLim = [0 max(cat(2,lines(:).XData))]; + ax2.XLim = [0 max(cat(2,lines(:).XData))]; + ax3.XLim = [0 max(cat(2,lines(:).XData))]; + ax1.XTick = []; + + title(ax1,['CellNr: ' num2str(cCell) ' (Counter: ' num2str(x) ') ; R^2: ' num2str(fullCorrMaps(cCell))]) + ylabel(ax1,'dF / F'); + ylabel(ax2,'dF / F'); + xlabel(ax2, 'time (s)'); + + + ax = subplot(4,8,[23 24 31 32]); cla; + cOpMotor = sum(abs(opMotorRec(cCell,:,avgType)),2); + cSpMotor = sum(abs(spMotorRec(cCell,:,avgType)),2); + cTask = sum(abs(taskRec(cCell,:,avgType)),2); + bar(ax,[sum(abs(fullRec(cCell,:,avgType)),2) cOpMotor cSpMotor cTask]) + set(ax,'xTick',1:4) + set(ax,'xTickLabel',{'Full' 'Instructed' 'Uninstructed' 'Task'}) + set(ax,'XTickLabelRotation',45) + ax.TickLength = [0 0];% + + %total amount of PETH change from all regressors + totalVar = sum(sum(abs(recV(cCell,:,avgType,ismember(recLabels,taskLabels) | ismember(recLabels,motorLabels))),2)); + + % title(['Mod. index ' num2str(modIndex(cCell))]); + delete(subplot(2,8,1:8)); + ax1 = subplot(2,8,1:8); cla; + cLabels = recLabels(ismember(recLabels,[taskLabels motorLabels])); + [a, b] = sort(squeeze(sum(abs(recV(cCell,:,avgType,ismember(recLabels,cLabels))),2))', 'descend'); + bar(ax1,double(a)./totalVar); + set(ax1,'xTick',1:length(a)) + set(ax1,'xTickLabel',cLabels(b)) + set(ax1,'XTickLabelRotation',45) + ax1.TickLength = [0 0];% + title('task'); + + drawnow; + + pause + end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_compareRegressors.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_compareRegressors.m new file mode 100644 index 0000000..20309e0 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_compareRegressors.m @@ -0,0 +1,583 @@ +%% +if ~exist('reload','var') || isempty(reload) + reload = false; +end + +%% select data sets +cMod = 'all'; +[dataOverview, motorLabels, sensorLabels, cogLabels, ~, segLabels] = delayDecRecordings; +% modTypes = {'shCurrent' 'shOther' 'shTaskCurrent' 'shOtherMotor'}; +modTypes = {'shCurrent' 'shOther' 'shOtherMotor' 'shOtherSpontMotor' 'shTaskOtherSpontMotor'}; +orgVars = {'fastPupil', 'slowPupil', 'whisk', 'nose', 'face', 'lLick', 'rLick', 'piezo', ... + 'pupils', 'licks', 'bhvVideo', 'Move', 'allMove', 'motorNoVideo', 'motor', 'opMotor', 'spontMotor'}; %make sure to load original version during shOther condition to avoid false results from orthogonalization. +visExp = ismember(dataOverview(:,2),'Visual'); %index for visual experts +audExp = ismember(dataOverview(:,2),'Audio'); %index for auditory experts +dangerMice = ismember(dataOverview(:,1),{'mSM34' 'mSM36' 'mSM46' 'mSM43' 'mSM44'}); %index for danger mice. 46 has the most, 34 the least inter-ictal events. + +%% general variables +cPath = [pwd filesep 'Widefield' filesep]; %path to widefield data +sPath = [pwd filesep 'Widefield' filesep]; %path to widefield data + +opMotorLabels = {'handles' 'licks'}; %operant motor regressors +spMotorLabels = {'piezo' 'whisk' 'nose' 'body' 'bhvVideo' 'allMove' 'pupils'}; %spontaneous motor regressors + +%% load data +check = true; +if ~reload %check for a saved dataset + if ~exist(sPath,'dir') + check = false; + else + try + load([sPath cMod '_corrMaps.mat'],'corrMaps','allenMask','dorsalMaps'); + load([sPath cMod '_meanRsq.mat'],'aRsq','aTimeRsq','nRecLabels'); + load([sPath cMod '_segMovies.mat'],'segMovies'); + load([sPath cMod '_fullMovies.mat'],'fullMovies','taskMovies','opMotorMovies','spMotorMovies'); + load([sPath cMod '_fullCorrMaps.mat'],'fullCorrMaps', 'animals'); + load([sPath cMod '_fullSegMovies.mat'],'fullSegMovies'); + load([sPath cMod '_otherMsegMovies.mat'],'otherMsegMovies'); + load([sPath cMod '_otherMcorrMaps.mat'],'otherMcorrMaps', 'oMotorLabels', 'otherMotorLabels'); + + catch + check = false; + end + end + if ~check + reload = true; + disp('Could not find saved results. Load predVariance data instead. Maybe go get a coffe in the meantime.') + end +end + +%% go through predVariance folders if reloading that data +% check animal count +if strcmpi(cMod,'all') + animalCnt = size(dataOverview,1); +else + animalCnt = sum(ismember(dataOverview(:,2)',cMod)); +end +animals = dataOverview(:,1); + +if reload + animals = dataOverview(:,1); + Cnt = 0; + + for iAnimals = 1 : length(animals) + regCnt = 0; + + if strcmpi(dataOverview{iAnimals,2},cMod) || strcmpi(cMod,'all') + Cnt = Cnt + 1; + fPath = [cPath animals{iAnimals} filesep dataOverview{iAnimals,3} filesep]; + disp(fPath); tic; + + %load design matrix and check for regressors that were used in the model + load([fPath 'regData.mat'],'recIdx','idx','recLabels') + usedR{Cnt} = recLabels(unique(recIdx(~idx))); %regressors that were used in the model + + load([fPath 'Snapshot_1.mat']); %load snapshot + load([fPath 'mask.mat']); %load mask + allOpts(Cnt) = load([fPath 'opts2.mat']); %load allen alignment file + + if Cnt == 1 + % create mask from allen coordinates + load('allenDorsalMap.mat') + addEdgeOutlinesToDorsalMap(dorsalMaps); %make area figure for orientation + allenMask = ~dorsalMaps.cutMaskScaled; %mask that is used for all datasets + [x1, y1] = size(allenMask); + [x2, y2] = size(mask); + allenMask = allenMask(1:min([x1 x2]), 1:min([y1 y2])); %cut allen mask to size + [x1, y1] = size(allenMask); + + % get labels for all regressors + load([fPath 'predVariance' filesep modTypes{1} filesep 'fullcorr.mat'],'recLabels', 'segMovie','cMovie'); %load current labels + load([fPath 'predVariance' filesep 'extraGroups.mat'],'extraGroups'); %load extra group labels + load([fPath 'predVariance' filesep 'oMotorLabels.mat'],'oMotorLabels'); %load other motor labels + nRecLabels = [recLabels{:} extraGroups(1,:)]; %labels of all regressors + nRecLabels = nRecLabels(~strcmpi(nRecLabels,'leverIn')); %don't use leverIn regressor + + % make recLabels where modality is swapped for expertise + altRecLabels = nRecLabels; + altRecLabels(ismember(nRecLabels,'visReward')) = {'expReward'}; + altRecLabels(ismember(nRecLabels,'audReward')) = {'novReward'}; + + % pre-allocate data matrices + fullCorrMaps = NaN(sum(~allenMask(:)), animalCnt, 'single'); + fullSegMovies = NaN(sum(~allenMask(:)), animalCnt, size(segMovie,2), 'single'); + fullMovies = NaN(sum(~allenMask(:)), animalCnt, size(cMovie,2), 'single'); + taskMovies = NaN(sum(~allenMask(:)), animalCnt, size(cMovie,2), 'single'); + opMotorMovies = NaN(sum(~allenMask(:)), animalCnt, size(cMovie,2), 'single'); + spMotorMovies = NaN(sum(~allenMask(:)), animalCnt, size(cMovie,2), 'single'); + + corrMaps = NaN(sum(~allenMask(:)), animalCnt, length(nRecLabels), 2, 'single'); + segMovies = NaN(sum(~allenMask(:)), animalCnt, length(nRecLabels), size(segMovie,2), 2, 'single'); + + otherMcorrMaps = NaN(sum(~allenMask(:)), animalCnt, length(oMotorLabels), 'single'); + otherMsegMovies = NaN(sum(~allenMask(:)), animalCnt, length(oMotorLabels), size(segMovie,2), 'single'); + + aRsq = NaN(length(nRecLabels) + 1, animalCnt, length(modTypes), 'single'); + aTimeRsq = NaN(length(nRecLabels) + 1, size(segMovie,2), animalCnt, length(modTypes), 'single'); + end + + + for iRuns = 1:length(modTypes) + + if iRuns == 1 %load full model data only once - running through different versions makes no difference here + + load([fPath 'predVariance' filesep modTypes{iRuns} filesep 'fullcorr.mat'],'cMap','segMovie','cMovie','recLabels'); %load current data + + % align cMap to allen coordinates + cMap = arrayShrink(cMap.^2,mask,'split'); + cMap = alignAllenTransIm(cMap,allOpts(Cnt).opts.transParams); + cMap = arrayShrink(cMap(1:x1,1:y1),allenMask); + fullCorrMaps(:, Cnt) = cMap; + aRsq(1,Cnt,1) = nanmean(cMap(:)); + + % align segMovie to allen coordinates + segMovie = arrayShrink(segMovie.^2,mask,'split'); + segMovie = alignAllenTransIm(segMovie,allOpts(Cnt).opts.transParams); + segMovie = arrayShrink(segMovie(1:x1,1:y1,:),allenMask); + fullSegMovies(:, Cnt, :) = segMovie; + aTimeRsq(1,:,Cnt,1) = nanmean(segMovie); + + % align cMovie to allen coordinates + cMovie = arrayShrink(cMovie.^2,mask,'split'); + cMovie = alignAllenTransIm(cMovie,allOpts(Cnt).opts.transParams); + cMovie = arrayShrink(cMovie(1:x1,1:y1,:),allenMask); + fullMovies(:, Cnt, :) = cMovie; + + end + + for iRegs = 1:length(nRecLabels) + try + %check if current regressor is task or motor model and load cMovie for that case + if (strcmpi(modTypes{iRuns},'shOther') && strcmpi(nRecLabels{iRegs},'motor')) || ... %task model. load movie + (strcmpi(modTypes{iRuns},'shCurrent') && strcmpi(nRecLabels{iRegs},'opMotor')) || ... %operant motor model. load movie. + (strcmpi(modTypes{iRuns},'shCurrent') && strcmpi(nRecLabels{iRegs},'spontMotor')) %spontaneous motor model. load movie + + load([fPath 'predVariance' filesep modTypes{iRuns} filesep nRecLabels{iRegs} 'corr.mat'],'cMap','segMovie','cMovie'); %load current data + cMovie = arrayShrink(cMovie.^2,mask,'split'); + cMovie = alignAllenTransIm(cMovie,allOpts(Cnt).opts.transParams); + cMovie = arrayShrink(cMovie(1:x1,1:y1,:),allenMask); + + if strcmpi(modTypes{iRuns},'shOther') && strcmpi(nRecLabels{iRegs},'motor') + taskMovies(:, Cnt, :) = cMovie; + elseif strcmpi(modTypes{iRuns},'shCurrent') && strcmpi(nRecLabels{iRegs},'opMotor') + opMotorMovies(:, Cnt, :) = cMovie; + elseif strcmpi(modTypes{iRuns},'shCurrent') && strcmpi(nRecLabels{iRegs},'spontMotor') + spMotorMovies(:, Cnt, :) = cMovie; + end + else + if ~ismember(nRecLabels{iRegs}, [usedR{Cnt} extraGroups(1,:)]) && strcmpi(modTypes{iRuns},'shOther') % if regressor was not used and other regressors were shuffled, set all results to zero + load([fPath 'predVariance' filesep 'shCurrent' filesep 'fullcorr.mat'],'cMap','segMovie'); %load full model instead of current regressor data + cMap = cMap - cMap; %set to 0 + segMovie = segMovie - segMovie; %set to 0 + elseif (ismember(nRecLabels{iRegs}, orgVars) && strcmpi(modTypes{iRuns},'shOther')) || strcmpi(modTypes{iRuns},'shOtherMotor') || strcmpi(modTypes{iRuns},'shOtherSpontMotor') || strcmpi(modTypes{iRuns},'shTaskOtherSpontMotor') % use original for standalone regressors + load([fPath 'predVariance' filesep modTypes{iRuns} filesep 'org' nRecLabels{iRegs} 'corr.mat'],'cMap','segMovie'); %load current data + else + load([fPath 'predVariance' filesep modTypes{iRuns} filesep nRecLabels{iRegs} 'corr.mat'],'cMap','segMovie'); %load current data + end + end + + segMovie = arrayShrink(segMovie.^2,mask,'split'); + segMovie = alignAllenTransIm(segMovie,allOpts(Cnt).opts.transParams); + segMovie = arrayShrink(segMovie(1:x1,1:y1,:),allenMask); + + cMap = arrayShrink(cMap.^2,mask,'split'); + cMap = alignAllenTransIm(cMap,allOpts(Cnt).opts.transParams); + cMap = arrayShrink(cMap(1:x1,1:y1),allenMask); + + % change current regressor index if modality should point to animal experitise instead. + cInd = iRegs; + if strcmpi(nRecLabels{iRegs},'visReward') || strcmpi(nRecLabels{iRegs},'audReward') + if (visExp(iAnimals) && strcmpi(nRecLabels{iRegs},'visReward')) || (audExp(iAnimals) && strcmpi(nRecLabels{iRegs},'audReward')) + cInd = find(ismember(altRecLabels, 'expReward')); %change index to point to expert instead of modality + else + cInd = find(ismember(altRecLabels, 'novReward')); %change index to point to novice instead of modality + end + end + aTimeRsq(cInd + 1, :, Cnt, iRuns) = nanmean(segMovie); + aRsq(cInd + 1, Cnt, iRuns) = nanmean(cMap(:)); + + if strcmpi(modTypes{iRuns},'shCurrent') || strcmpi(modTypes{iRuns},'shOther') + segMovies(:, Cnt, cInd, :, iRuns) = segMovie; + corrMaps(:, Cnt, cInd, iRuns) = cMap; + elseif strcmpi(modTypes{iRuns},'shOtherMotor') && any(ismember(oMotorLabels,nRecLabels{iRegs})) + regCnt = regCnt + 1; + otherMsegMovies(:, Cnt, regCnt, :) = segMovie; + otherMcorrMaps(:, Cnt, regCnt) = cMap; + otherMotorLabels{regCnt} = nRecLabels{iRegs}; %this is a control. should equal oMotorLabels in the end. + end + end + end + end + toc; + end + end + clear segMovie cMap + + %% save down results + if ~exist(sPath,'dir') + mkdir(sPath); + end + save([sPath cMod '_fullCorrMaps.mat'],'fullCorrMaps', 'animals'); + save([sPath cMod '_fullSegMovies.mat'],'fullSegMovies'); + save([sPath cMod '_fullMovies.mat'],'fullMovies','taskMovies','opMotorMovies','spMotorMovies', '-v7.3'); + save([sPath cMod '_corrMaps.mat'],'corrMaps','allenMask','dorsalMaps'); + save([sPath cMod '_segMovies.mat'],'segMovies', '-v7.3'); + save([sPath cMod '_otherMsegMovies.mat'],'otherMsegMovies', '-v7.3'); + save([sPath cMod '_otherMcorrMaps.mat'],'otherMcorrMaps', 'oMotorLabels', 'otherMotorLabels'); + save([sPath cMod '_meanRsq.mat'],'aRsq','aTimeRsq','nRecLabels'); + +end + +%% check if shOtherMotor was loaded correctly +if length(oMotorLabels) ~= sum(ismember(oMotorLabels,otherMotorLabels)) + error('oMotorLabels and otherMotorLabels are not the same. Problem with loading shOtherMotor variables?') +end + +%% +% fullRecLabels = [{'full'} nRecLabels]; %add full moodel label +segLabels = [{'all'} segLabels]; +altRecLabels = nRecLabels; +altRecLabels(ismember(nRecLabels,'visReward')) = {'expReward'}; +altRecLabels(ismember(nRecLabels,'audReward')) = {'novReward'}; +fullRecLabels = [{'full'} altRecLabels]; %add full moodel label + +%% crossvalidated R2 maps - full model +cMap = arrayShrink(nanmean(fullCorrMaps,2),allenMask,'split'); +cMovie = arrayShrink(nanmean(fullSegMovies,2),allenMask,'split'); +cMovie = cat(3,cMap,squeeze(cMovie)); %combine full correlation map with different segments +% cRange = max(abs(cMap(:))).*0.75; +cRange = 0.5; + +figure; +Cnt = 0; +for iSegs = [2 4 6 7] + % for iSegs = 1:size(cMovie,3) + Cnt = Cnt + 1; + subplot(1,4,Cnt) + mapImg = imshow(cMovie(:,:,iSegs),[0 cRange]);axis image; + set(mapImg,'AlphaData',~allenMask); %make NaNs transparent. + colormap(mapImg.Parent,inferno(256)); + title(['Full model, R^2 - ' segLabels{iSegs}]) +end + +%% make overview figure for overall task- and motor explained variance +fullMap = arrayShrink(nanmean(fullCorrMaps,2),allenMask,'split'); +taskMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'motor'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); +spmotorMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'spontMotor'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); +opmotorMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'opMotor'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + +% cRange = prctile(fullMap(:),99); +cRange = 0.2; + +figure +subplot(1,3,1) +mapImg = imshow(taskMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(taskMap)); %make NaNs transparent. +title('Task model- R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(1,3,2) +mapImg = imshow(opmotorMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(opmotorMap)); %make NaNs transparent. +title('Instructed motor model- R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(1,3,3) +mapImg = imshow(spmotorMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(spmotorMap)); %make NaNs transparent. +title('Spontaneous motor model- R^2') +colormap(mapImg.Parent,inferno(256)); + +%% same figure but comparing visual and auditory experts +for iMod = 1:2 + if iMod == 1 + cIdx = visExp; + else + cIdx = ~visExp; + end + + fullMap = arrayShrink(nanmean(fullCorrMaps(:, cIdx),2),allenMask,'split'); + taskMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'motor'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); + spmotorMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'spontMotor'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + opmotorMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'opMotor'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + + % cRange = prctile(fullMap(:),99); + cRange = 0.2; + figure + subplot(1,3,1) + mapImg = imshow(taskMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(taskMap)); %make NaNs transparent. + title('Task model- R^2') + colormap(mapImg.Parent,inferno(256)); + + subplot(1,3,2) + mapImg = imshow(opmotorMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(opmotorMap)); %make NaNs transparent. + title('Instructed motor model- R^2') + colormap(mapImg.Parent,inferno(256)); + + subplot(1,3,3) + mapImg = imshow(spmotorMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(spmotorMap)); %make NaNs transparent. + title('Spontaneous motor model- R^2') + colormap(mapImg.Parent,inferno(256)); +end + +%% make movie for task- and motor explained variance +% cMovie = arrayShrink(squeeze(nanmean(fullMovies - taskMovies,2)), allenMask, 'split'); +% cMovie = arrayShrink(squeeze(nanmean(fullMovies - opMotorMovies,2)), allenMask, 'split'); +% cMovie = arrayShrink(squeeze(nanmean(fullMovies - spMotorMovies,2)), allenMask, 'split'); +% cMovie = arrayShrink(squeeze(nanmean(fullMovies,2)), allenMask, 'split'); +% compareMovie(cMovie,'outline',dorsalMaps.edgeOutlineSplit); + +%% show predicted R2 over time +figure; +plot(squeeze(nanmean(nanmean(fullMovies))), 'k', 'linewidth', 2) +hold +plot(squeeze(nanmean(nanmean(fullMovies - taskMovies))), 'r', 'linewidth', 2) +plot(squeeze(nanmean(nanmean(fullMovies - opMotorMovies))), 'b', 'linewidth', 2) +plot(squeeze(nanmean(nanmean(fullMovies - spMotorMovies))), 'g', 'linewidth', 2) +axis square; legend({'full' 'task' 'opMotor' 'spMotor'}); +xlabel('time(s)'); ylabel('predicted R^2'); + +%% single variable models +handleMap = arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'rGrab'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); +stimMap = arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'rVisStim'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); +noseMap = arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'nose'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); +pawMap = arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'piezo'}),strcmpi(modTypes,'shOther')),2),allenMask,'split'); + +figure +subplot(2,2,1) +cRange = 0.1; +mapImg = imshow(handleMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(handleMap)); %make NaNs transparent. +title('Right handle- R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,2) +cRange = 0.2; +mapImg = imshow(noseMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(noseMap)); %make NaNs transparent. +title('Nose - R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,3) +cRange = 0.02; +mapImg = imshow(stimMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(stimMap)); %make NaNs transparent. +title('Right stim - R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,4) +cRange = prctile(pawMap(:),99); +mapImg = imshow(pawMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(pawMap)); %make NaNs transparent. +title('Hindpaw - R^2') +colormap(mapImg.Parent,inferno(256)); + + +%% single regressor effects - unique maps +fullMap = arrayShrink(nanmean(fullCorrMaps,2),allenMask,'split'); +handleMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'rGrab'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); +stimMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'rVisStim'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); +noseMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'nose'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); +pawMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,strcmpi(altRecLabels,{'piezo'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + +figure +subplot(2,2,1) +cRange = 0.035; +mapImg = imshow(handleMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(handleMap)); %make NaNs transparent. +title('Right handle- R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,2) +% cRange = prctile(handleMap(:),99); +mapImg = imshow(noseMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(noseMap)); %make NaNs transparent. +title('Nose - R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,3) +cRange = 0.02; +mapImg = imshow(stimMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(stimMap)); %make NaNs transparent. +title('Right stim - R^2') +colormap(mapImg.Parent,inferno(256)); + +subplot(2,2,4) +% cRange = prctile(pawMap(:),99); +mapImg = imshow(pawMap,[0 cRange]);axis image; +set(mapImg,'AlphaData',~isnan(pawMap)); %make NaNs transparent. +title('Hindpaw - R^2') +colormap(mapImg.Parent,inferno(256)); + +%% same figure but comparing visual and auditory experts +for iMod = 1:2 + if iMod == 1 + cIdx = visExp; + else + cIdx = ~visExp; + end + + fullMap = arrayShrink(nanmean(fullCorrMaps(:,cIdx),2),allenMask,'split'); + handleMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'rGrab'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + stimMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'rVisStim'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + noseMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'nose'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + pawMap = fullMap - arrayShrink(nanmean(corrMaps(:,cIdx,strcmpi(altRecLabels,{'piezo'}),strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + + figure + subplot(2,2,1) + cRange = 0.035; + mapImg = imshow(handleMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(handleMap)); %make NaNs transparent. + title('Right handle- R^2') + colormap(mapImg.Parent,inferno(256)); + + subplot(2,2,2) + % cRange = prctile(handleMap(:),99); + mapImg = imshow(noseMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(noseMap)); %make NaNs transparent. + title('Nose - R^2') + colormap(mapImg.Parent,inferno(256)); + + subplot(2,2,3) + cRange = 0.015; + mapImg = imshow(stimMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(stimMap)); %make NaNs transparent. + title('Right stim - R^2') + colormap(mapImg.Parent,inferno(256)); + + + subplot(2,2,4) + % cRange = prctile(pawMap(:),99); + mapImg = imshow(pawMap,[0 cRange]);axis image; + set(mapImg,'AlphaData',~isnan(pawMap)); %make NaNs transparent. + title('Hindpaw - R^2') + colormap(mapImg.Parent,inferno(256)); +end + +%% R2 reduction for all regressors +clear cRegMod cRegRedM cData +cogLabels = [cogLabels {'expReward'} {'novReward'} {'lGrabRel'}]; +fullM = aRsq(ismember(fullRecLabels,{'full'}), :, 1); %full model +cInd = dangerMice; +% cInd = true(1,length(animals)); + +cData = NaN(2,length(fullRecLabels),sum(cInd)); +for x = 1:length(fullRecLabels) + + cRegMod = aRsq(x, cInd, ismember(modTypes,'shOther')); %this is the current regressor model. All regressor information. + cRegRedM = fullM(cInd) - aRsq(x, cInd, ismember(modTypes,'shCurrent')); %this is the current regressor. This has non-redundant information. + + cData(1,x,:) = cRegMod; + cData(2,x,:) = cRegRedM; + +end + +idx = zeros(1,length(fullRecLabels)); +idx(ismember(fullRecLabels,opMotorLabels)) = 3; +idx(ismember(fullRecLabels,cogLabels)) = 2; +idx(ismember(fullRecLabels,sensorLabels)) = 1; +idx(ismember(fullRecLabels,spMotorLabels)) = 4; +% idx(isnan(cData(1,:,1))) = 0; + +figure +[ax, idxGroup] = regressorBoxPlot(squeeze(cData(1,idx>0,:))',fullRecLabels(idx>0),5,subplot(1,1,1),[0 1 0],idx(idx>0),0.6); +regressorBoxPlot(squeeze(-cData(2,idx>0,:))',fullRecLabels(idx>0),5,ax,[25 111 61]/255,idxGroup,0.6, [-0.1 0.35]); + +title('Single varibles: All (top) / Unique (bottom)'); +ylabel('cv R^2'); +ylabel('unique delta cv R^2'); +xlim([0 25]); %make this a fixed value to ensure bars have always the same width + +%% overview figure for all unique R2 maps +rightHs = find(ismember(dorsalMaps.sidesSplit,'R')); %index for labels on the left HS +idx = zeros(1,length(altRecLabels)); +idx(ismember(altRecLabels,cogLabels)) = 1; +idx(ismember(altRecLabels,sensorLabels)) = 1; +idx(ismember(altRecLabels,otherMotorLabels(~ismember(otherMotorLabels,'face')))) = 2; +fullMap = arrayShrink(nanmean(fullCorrMaps,2),allenMask,'split'); + +for iMods = 1 : 2 + figure('name',['iMods = ' int2str(iMods)]) + cIdx = find(idx == iMods); + Cnt = 0; + + for x = cIdx + + Cnt = Cnt +1; + cMap = fullMap - arrayShrink(nanmean(corrMaps(:,:,x,strcmpi(modTypes,'shCurrent')),2),allenMask,'split'); + allScale{iMods}(Cnt) = max(abs(prctile(cMap(:),[1 99]))); + + subplot(ceil(length(cIdx) / 4), 4 ,Cnt); + + cRange = max(abs(prctile(cMap(:),[1 99]))); + mapImg = imshow(cMap,[0 cRange]); + set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + colormap(mapImg.Parent,inferno(256));hold on; + title(altRecLabels{x}); colorbar + drawnow; + + hold(mapImg.Parent, 'on'); + for x = 1: length(rightHs) + plot(dorsalMaps.edgeOutlineSplit{rightHs(x)}(:,2), dorsalMaps.edgeOutlineSplit{rightHs(x)}(:,1), 'w', 'LineWidth', 0.2);axis image + end + + end +end + +%% R2 reduction for regressor groups +% cInd = ~dangerMice; +cInd = true(1,animalCnt); + +fullM = aRsq(ismember(fullRecLabels,{'full'}), cInd, 1); %full model + +spMotorM = aRsq(ismember(fullRecLabels,{'spontMotor'}), cInd, ismember(modTypes,'shOther')); %this is the spont. motor only model. Shuffle everything but motor regressors +spMotorRedM = fullM - aRsq(ismember(fullRecLabels,{'spontMotor'}), cInd, ismember(modTypes,'shCurrent')); %this is the non-redundant spont. motor only model. Shuffle all motor regressors and substract from full. + +opMotorM = aRsq(ismember(fullRecLabels,{'opMotor'}), cInd, ismember(modTypes,'shOther')); %this is the operant motor only model. Shuffle everything but motor regressors +opMotorRedM = fullM - aRsq(ismember(fullRecLabels,{'opMotor'}), cInd, ismember(modTypes,'shCurrent')); %this is the non-redundant operant motor only model. Shuffle all motor regressors and substract from full. + +taskM = aRsq(ismember(fullRecLabels,{'motor'}), cInd, ismember(modTypes,'shCurrent')); %this is the task only model. Shuffle only motor regressors to leave task regressors +taskRedM = fullM - aRsq(ismember(fullRecLabels,{'motor'}), cInd, ismember(modTypes,'shOther')); %this is the non-redundant task only model. + +clear cData cError +cData(1,:,:) = [taskM' spMotorM' opMotorM' fullM']; %all reg information +cData(2,:,:) = [taskRedM' spMotorRedM' opMotorRedM' fullM']; %all reg information + +figure +[ax, idxGroup] = regressorBoxPlot(squeeze(cData(1,:,:)), {'Task' 'spontMove' 'opMove' 'full'}, 5, subplot(2,2,1:4), [0 1 0], {[1 3 2 4]},0.6,[-0.5 0.5]); +ax = regressorBoxPlot(squeeze(-cData(2,:,:)), {'Task' 'spontMove' 'opMove' 'full'}, 5, ax, [25 111 61]/255, idxGroup,0.6,[-0.5 0.5]); +title('Regg groups: All (top) / Unique (bottom)'); xlim([0 30]); %make this a fixed value to ensure bars have always the same width +ylabel('total cv R^2'); +hline(mean(fullM),'k--') + +%% Task-dependent R2 reduction for motor regressors +taskM = aRsq(ismember(fullRecLabels,{'motor'}), :, ismember(modTypes,'shCurrent')); %this is the task only model. Shuffle only motor regressors to leave task regressors + +cData = NaN(2,length(otherMotorLabels),animalCnt); +Cnt = 0; +for x = 1:length(otherMotorLabels) + + Cnt = Cnt +1; + cRegMod = aRsq(ismember(fullRecLabels,otherMotorLabels{x}), :, ismember(modTypes,'shOther')); %this is the current regressor model. All regressor information. + cRegRedM = aRsq(ismember(fullRecLabels,otherMotorLabels{x}), :, ismember(modTypes,'shOtherMotor')) - taskM; %this is the current regressor - task model. This has non-task specific regressor information. + + cData(1,Cnt,:) = cRegMod - cRegRedM; %subtract unique information from full model. Remaining is task-redundant information. + cData(2,Cnt,:) = cRegRedM; + +end + +idx = zeros(1,length(otherMotorLabels)); +idx(ismember(otherMotorLabels,opMotorLabels)) = 1; +idx(ismember(otherMotorLabels,spMotorLabels)) = 2; +idx(ismember(otherMotorLabels,{'opMotor' 'spontMotor'})) = 3; + +figure +[ax, allInd] = regressorBoxPlot(squeeze(cData(1,idx>0,:))',otherMotorLabels(idx>0),5,subplot(2,2,1:4),[0,191,255]/255,idx(idx>0),0.6); +ax = regressorBoxPlot(squeeze(-cData(2,idx>0,:))',otherMotorLabels(idx>0),5,ax,[0,0,139]/255,allInd,0.6,[-0.4 0.4]); +xlim([0 30]); +title('Regressor comparison - Task-dependancy'); +ylabel('crossVal R^2'); +xlim([0 30]); diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_hotMouse.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_hotMouse.m new file mode 100644 index 0000000..d0df831 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_hotMouse.m @@ -0,0 +1,22 @@ +[dataOverview, motorLabels, sensorLabels, cogLabels, ~, segLabels] = delayDecRecordings; +cPath = [pwd filesep 'Widefield' filesep]; %path to widefield data +load allenDorsalMapSM + +varFracThresh = 0.9; +allPlots = 1; +animals = dataOverview(:,1); +recs = dataOverview(:,3); +iAnimals = 14; % for figure, used mSM43 23-Nov-2017 (iAnimals = 14), with varFracThresh = 0.9 + +fPath = [cPath animals{iAnimals} filesep 'SpatialDisc' filesep recs{iAnimals} filesep]; +load([fPath 'betaBhvVid'], 'cam1', 'cam2', 'stdCam1', 'stdCam2', 'meanCam1', 'meanCam2'); %load video data +load([fPath 'interpVc'], 'Vc'); %load model raw data +load([fPath 'Vc'], 'U'); +load([fPath 'mask'], 'mask'); +load([fPath 'opts2'], 'opts'); + +cam = cat(1, cam1, cam2); +stdCam = cat(1, stdCam1, stdCam2); +meanCam = cat(1, meanCam1, meanCam2); +[maps, vid] = delayDec_pcaWFVidBetas(cam, stdCam, meanCam, U, mask, opts.transParams, dorsalMaps, varFracThresh, allPlots); + diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_pcaWFVidBetas.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_pcaWFVidBetas.m new file mode 100644 index 0000000..3f5e110 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_pcaWFVidBetas.m @@ -0,0 +1,102 @@ +function [proj, vidC] = delayDec_pcaWFVidBetas(cam, stdCam, meanCam, U, mask, transParams, dorsalMaps, varFracThresh, allPlots) +% Trying to find how video affects WF, sparsifying WF +% +% PCA the camera-to-WF betas, to get common ways the behavioral video +% pixels influence the WF. This produces a handful of WF maps. Use varimax +% to sparsify the WF maps. To see how each of these maps corresponds to +% behavioral video, take the dot product of each WF map with each +% behavioral video pixel. To convert these dot products into measures of +% influence, multiply by the std devs of the pixels. + +%% Parameters + +% For scaling the video influence frames +maxFrac = 99; +minFrac = 0.1; + +%% Reshape betas + +Cr = reshape(cam, [], size(cam, 3)); +Cr = Cr - mean(Cr, 2); + + +%% PCA + +% PCA to reduce pixels and get strongest WF patterns +[~, scores, latent] = pca(Cr'); + +% Find dimensionality +nDim = find(cumsum(latent) / sum(latent) > varFracThresh, 1); +varRem = 1 - cumsum(latent) / sum(latent); + + +%% Compute sparsified WF maps -- project up and then use varimax + +Ur = arrayShrink(U, mask, 'merge'); +if size(Ur, 2) > size(scores, 1) + Ur = Ur(:, 1:size(scores, 1)); +end +proj = Ur * scores(:, 1:nDim); +[proj, R] = rotatefactors(proj, 'Normalize', 'off'); % sparsify basis + + +%% Show sparsified WF components with the Allen areas aligned +figure; +mapPlots = min([nDim 6]); +if allPlots + for d = 1:mapPlots + im = arrayShrink(proj(:, d), mask, 'split'); + [extreme, extremeI] = max(abs(im(:))); + im = im * (sign(im(extremeI)) / extreme / 2); + + im = alignAllenTransImMasked(im, transParams, 0); + im = arrayShrink(im(:, 1:size(dorsalMaps.allenMask,2)), dorsalMaps.allenMask,'merge'); + im = arrayShrink(im, dorsalMaps.allenMask,'split'); + + subplot(2,3,d); + mapImg = imshow(im,[-0.5 0.5]); + set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make 0s transparent. + colormap(mapImg.Parent,colormap_blueblackred(256));hold on; + hold(mapImg.Parent, 'on'); + + for p = 1:length(dorsalMaps.edgeOutlineSplit) + if strcmpi(dorsalMaps.sidesSplit{p}, 'R') + plot(dorsalMaps.edgeOutlineSplit{p}(:, 2), dorsalMaps.edgeOutlineSplit{p}(:, 1), 'w-', 'LineWidth', 2); + end + end + axis equal off; title(num2str(d)); + end +end + + +%% show weight projection on facecam +vidC = Cr * scores(:, 1:nDim) * R; +vidC = abs(reshape(vidC, [size(cam(:, :, 1)) size(vidC, 2)])); + +backIm = rot90(meanCam(1:size(meanCam,1)/2,:), -1); +foreIm = rot90(sqrt(sum(cam(1:size(meanCam,1)/2,:,:) .^ 2, 3)) .* stdCam(1:size(meanCam,1)/2,:), -1); +theMax = prctile(foreIm(:), maxFrac); +lims = [theMax * minFrac, theMax]; +hf = figure; +cBack = (mat2gray(backIm) .* lims(2)) + lims(1); +backImg = imshow(cBack,[lims(1)*0.5 lims(2)]); hold on; colormap('gray'); +freezeColors; +mapImg = imshow(foreIm,lims); +set(mapImg,'AlphaData',mapImg.CData > lims(1)); %make 0s transparent. +set(mapImg,'AlphaData',mat2gray(mapImg.CData)*10); %make 0s transparent. +colormap(mapImg.Parent,hot(256));hold on; +hold(mapImg.Parent, 'on'); + +%% Scree plot +if allPlots + figure; + hold on; + plot([0 length(latent)], (1 - varFracThresh) * [1 1], 'k--', 'LineWidth', 1); + plot(0:length(latent), [1; varRem], 'LineWidth', 2); + plot(nDim, varRem(nDim), 'ro', 'MarkerSize', 8, 'LineWidth', 2); + xlim([0 20]); + ylim([0 1]); + set(gca, 'TickDir', 'out', 'Box', 'off'); + xlabel('Dimensions'); + ylabel('Fraction variance remaining'); +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_rebuildAvg.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_rebuildAvg.m new file mode 100644 index 0000000..cd5e05e --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_rebuildAvg.m @@ -0,0 +1,131 @@ +%% basic variables +cPath = [pwd filesep 'Widefield' filesep]; %path to widefield data + +trialSegments = [0 55 80 130 160]; %segments to create maps for whole trial regressors +motorIdx = 16; %index for zero-lag motor regressor +baseRange = 1:15; %baseline frames +areaIdx = {'VISp' 'RSPd' 'SSp-ll' 'MOs'}; % V1 - RS - HL - M2 + +% session data +[dataOverview, motorLabels, sensorLabels, cogLabels, ~, segLabels, segIdxRealign] = delayDecRecordings; +sensorLabels = [sensorLabels cogLabels]; %combine sensory and cognitive labels, so sensory is really 'non-motor' or 'task' here + +visExp = ismember(dataOverview(:,2),'Visual'); %index for visual experts +audExp = ismember(dataOverview(:,2),'Audio'); %index for auditory experts + + %get allen maps +load('allenDorsalMapSM.mat') +mask = ~dorsalMaps.cutMaskScaled; %mask that is used for all datasets +[x1, y1] = size(mask); +load([cPath dataOverview{1,1} filesep dataOverview{1,3} filesep 'snapshot_1.mat']) +load([cPath dataOverview{1,1} filesep dataOverview{1,3} filesep 'opts2.mat']) +snap = alignAllenTransIm(single(snap),opts.transParams); +[x2, y2] = size(snap); +mask = mask(1:min([x1 x2]), 1:min([y1 y2])); %cut mask to size +rightHs = find(ismember(dorsalMaps.sidesSplit,'R')); %index for labels on the left HS +allenMask = dorsalMaps.allenMask; + +segFrames = cumsum([54 30 105]); +xRange = [(-segFrames(2) : 1 : 0)./30, (1 : segFrames(end)-segFrames(2)-1) ./30]; %time vector for x-axis. Stimulus onset is at 0s. + +%% load raw data +allU = NaN(sum(~allenMask(:)), 200, size(dataOverview,1), 'single'); %pre-allocate larger data array for all Us +allData = NaN(sum(~allenMask(:)), segFrames(end), size(dataOverview,1), 'single'); %pre-allocate larger data array for all Vs +dMaps = NaN(sum(~allenMask(:)), 2, 2, size(dataOverview,1)); + +for iAnimals = 1:size(dataOverview,1) + + cFile = dir([cPath dataOverview{iAnimals,1} filesep dataOverview{iAnimals,3} filesep dataOverview{iAnimals,1} '_SpatialDisc*.mat']); + load([cPath dataOverview{iAnimals,1} filesep dataOverview{iAnimals,3} filesep strtrim(cFile.name)]); %load behavior data + load([cPath dataOverview{iAnimals,1} filesep dataOverview{iAnimals,3} filesep 'Vc.mat'],'U','Vc','bTrials'); + load([cPath dataOverview{iAnimals,1} filesep dataOverview{iAnimals,3} filesep 'snapshot_1.mat']) + load([cPath dataOverview{iAnimals,1} filesep dataOverview{iAnimals,3} filesep 'opts2.mat']) + + bhv = selectBehaviorTrials(SessionData,bTrials); %only use completed trials that are in the Vc dat + Vc = Widefield_getRealignment(Vc, bhv, segFrames, opts); + + snap = alignAllenTransIm(single(snap),opts.transParams); + U = alignAllenTransIm(U,opts.transParams); + + allSnap(:,iAnimals) = arrayShrink(snap(1:size(allenMask,1),1:size(allenMask,2)),allenMask); + allU(:,:,iAnimals) = arrayShrink(U(1:size(allenMask,1),1:size(allenMask,2),:),allenMask); + + visIdx = bhv.StimType == 1; + allData(:,:,iAnimals) = allU(:,:,iAnimals) * mean(Vc(:,:,visIdx),3); %average over all visual trials + + % get average responses for d' during stim1 and delay + visMap(:,:,1) = squeeze(nanmean(Vc(:,segFrames(2):segFrames(2)+18, visIdx),2)); %visual average during stim1 + visMap(:,:,2) = squeeze(nanmean(Vc(:,segFrames(2) + 51 : segFrames(2) + 51, visIdx),2)); %visual average during delay + + audIdx = bhv.StimType == 2; + audMap(:,:,1) = squeeze(nanmean(Vc(:,segFrames(2):segFrames(2)+18, audIdx),2)); %auditory average during stim1 + audMap(:,:,2) = squeeze(nanmean(Vc(:,segFrames(2) + 51 : segFrames(2) + 51, audIdx),2)); %auditory average during delay + + vLeftIdx = visIdx & bhv.CorrectSide == 1; + visLeft(:,:,1) = squeeze(nanmean(Vc(:,segFrames(2):segFrames(2)+18, vLeftIdx),2)); %visual average during stim1 + visLeft(:,:,2) = squeeze(nanmean(Vc(:,segFrames(2) + 51 : segFrames(2) + 51, vLeftIdx),2)); %visual average during delay + + vRightIdx = visIdx & bhv.CorrectSide == 2; + visRight(:,:,1) = squeeze(nanmean(Vc(:,segFrames(2):segFrames(2)+18, vRightIdx),2)); %visual average during stim1 + visRight(:,:,2) = squeeze(nanmean(Vc(:,segFrames(2) + 51 : segFrames(2) + 51, vRightIdx),2)); %visual average during delay + + % compute d' + for x = 1 : 2 + %modality (vis - audio) + varP(:,1) = (nansum((allU(:,:,iAnimals) * cov(visMap(:,:,x)')) .* allU(:,:,iAnimals), 2)); %variance map + varP(:,2) = (nansum((allU(:,:,iAnimals) * cov(audMap(:,:,x)')) .* allU(:,:,iAnimals), 2)); %variance map + + dMaps(:,x,1,iAnimals) = allU(:,:,iAnimals) * (mean(visMap(:,:,x),2) - mean(audMap(:,:,x),2)); %response difference + dMaps(:,x,1,iAnimals) = dMaps(:,x,1,iAnimals) ./ sqrt(sum(varP,2)/2); %normalize by standard deviation + + %sides (left - right) + varP(:,1) = (nansum((allU(:,:,iAnimals) * cov(visLeft(:,:,x)')) .* allU(:,:,iAnimals), 2)); %variance map + varP(:,2) = (nansum((allU(:,:,iAnimals) * cov(visRight(:,:,x)')) .* allU(:,:,iAnimals), 2)); %variance map + + dMaps(:,x,2,iAnimals) = allU(:,:,iAnimals) * (mean(visLeft(:,:,x),2) - mean(visRight(:,:,x),2)); %response difference + dMaps(:,x,2,iAnimals) = dMaps(:,x,2,iAnimals) ./ sqrt(sum(varP,2)/2); %normalize by standard deviation + end + clear visMap audMap visLeft visRight +end + + +%% show averaged data from visual trials +cMovie = arrayShrink(nanmean(allData,3),mask,'split'); +cMovie = cMovie - mean(cMovie(:,:,baseRange),3); +cRange = [-nanmean(abs(cMovie(:))*2) nanmean(abs(cMovie(:)))*2]; +figure; +for iSegs = 1:5 + subplot(1,5,iSegs) + mapImg = imshow(nanmean(cMovie(:,:,segIdxRealign{iSegs+1}),3),[cRange]); + colormap(mapImg.Parent,colormap_blueblackred); axis image + set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + title(['All mice. cVision: ' segLabels{iSegs+1}]) + + hold(mapImg.Parent, 'on'); + for x = 1: length(rightHs) + plot(dorsalMaps.edgeOutlineSplit{rightHs(x)}(:,2), dorsalMaps.edgeOutlineSplit{rightHs(x)}(:,1), 'w', 'LineWidth', 0.2);axis image + end +end + +%% figure1 : show d' maps: modality and choice +cLabel = {'d" Vision/Audio - Stim' 'd" Choice - Stim' 'd" Vision/Audio - Stim' 'd" Choice - Delay'}; +figure +Cnt = 0; +for iSegs = 1:2 + for iMod = 1:2 + Cnt = Cnt+1; + subplot(2,2,Cnt) + + cMap = arrayShrink(nanmean(dMaps(:,iSegs,iMod,:),4),mask,'split'); + + mapImg = imshow(cMap,[-0.5 0.5]); + colormap(mapImg.Parent,viridis); axis image + set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + title(cLabel{Cnt}) + + hold(mapImg.Parent, 'on'); + for x = 1: length(dorsalMaps.edgeOutlineSplit) + plot(dorsalMaps.edgeOutlineSplit{x}(:,2), dorsalMaps.edgeOutlineSplit{(x)}(:,1), 'w', 'LineWidth', 0.2);axis image + end + end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_test2pRegs.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_test2pRegs.m new file mode 100644 index 0000000..b6ceba5 --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_test2pRegs.m @@ -0,0 +1,243 @@ +function delayDec_test2pRegs(cPath,Animal,Rec,nonOrth,noMove) +% Code to compute predictive power in different regressor or regressor +% groups. This code will create different version of the design matrix, +% where all regressors that correspond to a given variable are shuffled in +% time to assess the importance of that variable for the model. +% There are different shuffling procedures here: 'shCurrent' shuffles all +% regressors of the current variable, 'shOther' shuffles all other +% regressors (resulting in a single variable model), 'shOtherMotor' +% shuffles all regressors that correspond to other movement variables. +% 'shOtherSpontMotor' shuffles all other uninstructed movement variables +% and 'shTaskOtherSpontMotor' shuffles all other uninstructed movement and +% all task variables. The last two modes weren't used for any analysis in +% the paper so subsequent analysis should be ok if they are skipped here. + +if ~exist('nonOrth','var') || isempty(nonOrth) || ~nonOrth + fileExt = ''; %this is to be able to use other kinds of models +else + fileExt = 'org'; %this is for non-orthogonalized model +end + +if ~exist('noMove','var') || isempty(noMove) + noMove = false; %flag to only use data without XY movement +end + +if ~strcmpi(cPath(end),filesep) + cPath = [cPath filesep]; +end +cPath = [cPath Animal filesep 'SpatialDisc' filesep Rec filesep]; %Widefield data path +tPath = [cPath 'predVariance' filesep]; %Path to save the results. Make subfolder to get a bit organized. +load([cPath 'interpVc.mat'],'Vc','DS','frames') %Vc that was used for the model +[dims, times] = size(Vc); + +if ~isempty(fileExt) + betaFile = dir([cPath fileExt '*imBeta.mat']); + regFile = dir([cPath fileExt '*egData.mat']); +else + betaFile = dir([cPath fileExt 'dimBeta.mat']); + regFile = dir([cPath fileExt 'regData.mat']); +end +load([cPath betaFile.name],'ridgeVals'); %load model ridge penalty +load([cPath regFile.name],'fullR','recIdx','idx','recLabels') %load design matrix + +%index for stimulus onset in all trials. This is needed later +stimRegs = sum(fullR(:,ismember(recIdx,find(ismember(recLabels,{'lVisStim' 'rVisStim' 'lAudStim' 'rAudStim'})))),2); +stimRegs = find([0;diff(stimRegs)] > 0.5) - 1; + +if noMove + fileExt = ['noMove' fileExt]; + [b, a] = butter(2, 0.01/31, 'high'); + DS = filtfilt(b, a, DS'); + DS = bsxfun(@minus, DS, median(DS)); + moveIdx = any(DS' > 2); %don't use data with motion above 2 pixels in any direction +else + moveIdx = false(1,size(Vc,2)); +end +Vc(:,moveIdx) = []; +fullR(moveIdx,:) = []; + +%remove intercept if present +recIdx = recIdx(~idx); +if sum(fullR(:,1)) == size(fullR,1) + fullR(:,1) = []; + recLabels = recLabels(2:end); + recIdx = recIdx(2:end) - 1; + idx = idx(2:end); +end + +%make sure Vc and fullR are zero-mean +Vc = bsxfun(@minus,Vc',nanmean(Vc, 2)')'; +fullR = bsxfun(@minus,fullR,nanmean(fullR)); + +%indices for trial segments. Baseline and handle are based on time regressors, remaining segments are based on stimulus regressors. +segIdx = {1:19 57:75 1:19 35:53 59:77 84:102}; %set index so different segments have same #frames +[~, motorLabels, sensorLabels, cogLabels] = delayDecRecordings; + +% assign extra regressor groups that are removed from model together +extraGroups = {'pupils' 'handles' 'licks' 'allMove' 'opMotor' 'spontMotor' 'motor' 'sensory' 'cognitive'}; +extraGroups{2,1} = {'fastPupil' 'slowPupil'}; +extraGroups{2,2} = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel'}; +extraGroups{2,3} = {'lLick' 'rLick'}; +extraGroups{2,4} = {'BaselineMove' 'HandleMove' 'StimulusMove' 'WaitMove' 'Move'}; %all motor regressors without video dimensions +extraGroups{2,5} = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel' 'lLick' 'rLick'}; %all operant motor regressors +extraGroups{2,6} = motorLabels(~ismember(motorLabels,extraGroups{2,5})); %all spontaneous motor regressors +extraGroups{2,7} = motorLabels; %all motor regressors +extraGroups{2,8} = sensorLabels; +extraGroups{2,9} = cogLabels; + +ridgeFolds = 10; %folds for cross-validation when assessing predicted variance +rng default %reset randum number generator +randIdx = randperm(size(Vc,2)); %generate randum number index if required +modLabels = {'shCurrent','shOther','shTaskCurrent','shOtherMotor'}; %shCurrent: Shuffle current regressor, shOther: Shuffle all other regressors, shTaskCurrent: Shuffle all task and current regressors, shOtherMotor: Shuffle all other motor regressors +taskLabels = [sensorLabels cogLabels]; %these are all task regressors + +%motor regressors, used for shOtherMotor analysis +oMotorLabels = ['pupils' motorLabels(~ismember(motorLabels, extraGroups{2, ismember(extraGroups(1,:),'pupils')}))]; +oMotorLabels = ['handles' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'handles')}))]; +oMotorLabels = ['licks' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'licks')}))]; +oMotorLabels = ['allMove' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'allMove')}))]; +oMotorLabels = ['opMotor' oMotorLabels]; +oMotorLabels = ['spontMotor' oMotorLabels]; + +%% test predictive power of individual regressors through cross-validation +Cnt = 0; +for iRegs = 0 : length(recLabels) + size(extraGroups,2) %four additional runs to produce motor (with and without video),sensory and cognitive sets + + Cnt = Cnt+1; + fprintf('Current regressor is %d of %d\n', Cnt,length(recLabels) + size(extraGroups,2)); + + for modRuns = 1:length(modLabels) + + %index for current regressor or group + if iRegs <= length(recLabels) + cIdx = recIdx == iRegs; % index for reduced model. + else + cIdx = ismember(recIdx, find(ismember(recLabels,extraGroups{2,iRegs - length(recLabels)}))); % index for extra regressor group + end + + %control for shOtherMotor condition: Only use for selected subset of motor regressors. + checker = true; + if strcmpi(modLabels{modRuns}, 'shOtherMotor') + if iRegs <= length(recLabels) && iRegs > 0 + checker = any(ismember(recLabels{iRegs},oMotorLabels)); + elseif iRegs > length(recLabels) + checker = any(ismember(extraGroups{1,iRegs - length(recLabels)},oMotorLabels)); + end + end + + if iRegs == 0 + cLabel = 'full'; + elseif iRegs <= length(recLabels) + cLabel = recLabels{iRegs}; + else + cLabel = extraGroups{1,iRegs - length(recLabels)}; + end + + if (strcmpi(modLabels{modRuns}, 'shCurrent') || sum(cIdx) > 0) && checker + + fakeR = fullR; %copy design matrix to shuffle up some regressor set + if strcmpi(modLabels{modRuns}, 'shCurrent') %this is to the shuffle-current regressor + shIdx = cIdx; + elseif strcmpi(modLabels{modRuns}, 'shOther') %this is to the shuffle remaining regressors + shIdx = ~cIdx; + elseif strcmpi(modLabels{modRuns}, 'shTaskCurrent') %this is to the shuffle current and all task regressors. + shIdx = ismember(recIdx, find(ismember(recLabels,taskLabels))); + shIdx = shIdx | cIdx; + elseif strcmpi(modLabels{modRuns}, 'shOtherMotor') %this is to shuffle remaining motor regressors + shIdx = ismember(recIdx, find(ismember(recLabels,taskLabels))); + shIdx = ~(shIdx | cIdx); + end + + %shuffle selected regressors + for iCol = find(shIdx) + fakeR(:,iCol) = fullR(randperm(size(fullR,1)),iCol); + end + + %% run cross-validation + Vm = NaN(size(Vc),'single'); + foldCnt = floor(size(Vc,2) / ridgeFolds); + + tic + for iFolds = 1:ridgeFolds + tic + dataIdx = true(1,size(Vc,2)); %make sure to not use motion frames if those got rejected. + + if ridgeFolds > 1 + if iFolds == ridgeFolds + dataIdx(randIdx(((iFolds - 1)*foldCnt) + 1 : end)) = false; %index for training data on the last fold. + else + dataIdx(randIdx(((iFolds - 1)*foldCnt) + (1:foldCnt))) = false; %index for training data + end + emptyRegs = mean(fakeR(dataIdx,:)) == 0; %check for empty regressors and make sure they are not used + + [~, betas{iFolds}] = ridgeMML(Vc(:,dataIdx)', fakeR(dataIdx,~emptyRegs), true, ridgeVals); %get beta weights for current model. Re-center and supply ridge penalty. + Vm(:,~dataIdx) = (fakeR(~dataIdx,~emptyRegs) * betas{iFolds})'; %predict remaining data + + if rem(iFolds,ridgeFolds/5) == 0 + fprintf(1, 'Current fold is %d out of %d\n', iFolds, ridgeFolds); + toc + end + else + [~, betas{iFolds}] = ridgeMML(Vc', fakeR, true, ridgeVals); %get beta weights for current model. Re-center and supply ridge penalty. + Vm = (fakeR * betas{iFolds})'; %predict remaining data + disp('Ridgefold is <= 1, fit to complete dataset'); + end + end + + %% compute correlation between data and prediction over for all frames / neurons + cMap = NaN(size(Vc,1), 1); + for iCells = 1:size(Vc,1) + cMap(iCells) = corr2(Vc(iCells,~isnan(Vm(iCells,:))), Vm(iCells,~isnan(Vm(iCells,:)))); + end + + %% compute correlation between data and prediction over specific trial segments + segMovie = NaN(size(Vc,1),length(segIdx)); + for iSegs = 1:length(segIdx) + + if iSegs <= 2 %baseline and handle grab, use trial onset times + cIdx = repmat((0:frames:size(Vc,2)-1)',1,length(segIdx{iSegs})); + else %stimulus and later segments, use stimulus onset times + cIdx = repmat(stimRegs,1,length(segIdx{iSegs})); + end + cIdx = bsxfun(@plus,cIdx,segIdx{iSegs}); + cIdx = cIdx(:); + cIdx(cIdx > times) = []; + + logIdx = false(1, times); logIdx(cIdx) = true; % convert to logical index + logIdx(moveIdx) = []; %remove movement times if present + + for iCells = 1:size(Vc,1) + segMovie(iCells, iSegs) = corr2(Vc(iCells,logIdx), Vm(iCells,logIdx)); + end + end + + %% compute correlation between data and prediction for each frame in all trials + cMovie = zeros(size(Vc,1),frames, 'single'); + for iFrames = 1:frames + frameIdx = iFrames:frames:size(Vc,2); %index for the same frame in each trial + logIdx = false(1, times); logIdx(frameIdx) = true; % convert to logical index + logIdx(moveIdx) = []; %remove movement times if present + + if sum(logIdx) > 10 %at least 5 trials should be left + for iCells = 1:size(Vc,1) + cMovie(iCells, iFrames) = corr2(Vc(iCells,logIdx), Vm(iCells,logIdx)); + end + else + cMovie(:, iFrames) = NaN(size(Vc,1), 1); + end + end + fprintf('Run finished. RMSE: %f\n', median(cMovie(:).^2)); + + %% save results + if ~exist([tPath modLabels{modRuns}],'dir') + mkdir([tPath modLabels{modRuns}]); + end + + save([tPath modLabels{modRuns} filesep fileExt cLabel 'corr.mat'], 'cMap', 'cMovie', 'segMovie', 'iRegs', 'recLabels', '-v7.3'); +% save([tPath modLabels{modRuns} filesep fileExt cLabel 'Vm.mat'], 'Vm', 'fakeR', 'betas','-v7.3'); + end + end + fprintf('Finished. Current reg: %d\n', Cnt); +end +save([tPath fileExt 'extraGroups.mat'], 'extraGroups'); %save labels for extra groups +save([tPath fileExt 'oMotorLabels.mat'], 'oMotorLabels'); %save other motor labels where some regressors sets are combined \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/delayDec_testWidefieldRegs.m b/downloaded/ridgeModel-master/delayedDetection/delayDec_testWidefieldRegs.m new file mode 100644 index 0000000..95d2d0c --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/delayDec_testWidefieldRegs.m @@ -0,0 +1,242 @@ +function delayDec_testWidefieldRegs(cPath,Animal,Rec,nonOrth) +% Code to compute predictive power in different regressor or regressor +% groups. This code will create different version of the design matrix, +% where all regressors that correspond to a given variable are shuffled in +% time to assess the importance of that variable for the model. +% There are different shuffling procedures here: 'shCurrent' shuffles all +% regressors of the current variable, 'shOther' shuffles all other +% regressors (resulting in a single variable model), 'shOtherMotor' +% shuffles all regressors that correspond to other movement variables. +% 'shOtherSpontMotor' shuffles all other uninstructed movement variables +% and 'shTaskOtherSpontMotor' shuffles all other uninstructed movement and +% all task variables. The last two modes weren't used for any analysis in +% the paper so subsequent analysis should be ok if they are skipped here. + +if ~exist('nonOrth','var') || isempty(nonOrth) || ~nonOrth + fileExt = ''; %this is to be able to use other kinds of models +else + fileExt = 'org'; %this is for non-orthogonalized model +end + +if ~strcmpi(cPath(end),filesep) + cPath = [cPath filesep]; +end +cPath = [cPath Animal filesep 'SpatialDisc' filesep Rec filesep]; %Widefield data path +tPath = [cPath 'predVariance' filesep]; %Path to save the results. Make subfolder to get a bit organized. +[~, motorLabels, sensorLabels, cogLabels] = delayDecRecordings; + +%% load some data and get into right format +load([cPath 'mask.mat'], 'mask') +load([cPath 'Vc.mat'],'U') +load([cPath 'interpVc.mat'],'Vc','frames') %Vc that was used for the model +dims = size(Vc,1); +U = U(:,:,1:dims); +U = arrayShrink(U,mask); + +betaFile = dir([cPath fileExt 'dimBeta.mat']); +regFile = dir([cPath fileExt 'regData.mat']); +load([cPath betaFile.name],'ridgeVals'); %load model ridge penalty +load([cPath regFile.name],'fullR','recIdx','idx','recLabels') %load design matrix +recIdx = recIdx(~idx); + +%indices for trial segments. Baseline and handle are based on time regressors, remaining segments are based on stimulus regressors. +segIdx = {1:18 55:72 1:18 34:51 57:74 81:98}; %set index so different segments have same #frames + +% assign extra regressor groups that are removed from model together +extraGroups = {'pupils' 'handles' 'licks' 'allMove' 'opMotor' 'spontMotor' 'motor' 'sensory' 'cognitive'}; +extraGroups{2,1} = {'fastPupil' 'slowPupil'}; +extraGroups{2,2} = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel'}; +extraGroups{2,3} = {'lLick' 'rLick'}; +extraGroups{2,4} = {'BaselineMove' 'HandleMove' 'StimulusMove' 'WaitMove' 'Move'}; %all motor regressors without video dimensions +extraGroups{2,5} = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel' 'lLick' 'rLick'}; %all operant motor regressors +extraGroups{2,6} = motorLabels(~ismember(motorLabels,extraGroups{2,5})); %all spontaneous motor regressors +extraGroups{2,7} = motorLabels; %all motor regressors +extraGroups{2,8} = sensorLabels; +extraGroups{2,9} = cogLabels; + +ridgeFolds = 10; %folds for cross-validation when assessing predicted variance +rng default %reset randum number generator +randIdx = randperm(size(Vc,2)); %generate randum number index if required +% shCurrent: Shuffle current regressor, shOther: Shuffle all other regressors, +% shOtherMotor: Shuffle all other motor regressors, shOtherSpontMotor: Shuffle all other spontaneous motor regressors, +% shTaskOtherSpontMotor: Shuffle task and all other spontaneous movements. +modLabels = {'shCurrent','shOther','shOtherMotor','shOtherSpontMotor','shTaskOtherSpontMotor'}; +taskLabels = [sensorLabels cogLabels]; %these are all task regressors + +%motor regressors, used for shOtherMotor analysis +oMotorLabels = ['pupils' motorLabels(~ismember(motorLabels, extraGroups{2, ismember(extraGroups(1,:),'pupils')}))]; +oMotorLabels = ['handles' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'handles')}))]; +oMotorLabels = ['licks' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'licks')}))]; +oMotorLabels = ['allMove' oMotorLabels(~ismember(oMotorLabels, extraGroups{2, ismember(extraGroups(1,:),'allMove')}))]; +oMotorLabels = ['opMotor' oMotorLabels]; +oMotorLabels = ['spontMotor' oMotorLabels]; + +%% test predictive power of individual regressors through cross-validation +Cnt = 0; +for iRegs = 0 : length(recLabels) + size(extraGroups,2) %four additional runs to produce motor (with and without video),sensory and cognitive sets + + Cnt = Cnt+1; + fprintf('Current regressor is %d of %d\n', Cnt,length(recLabels) + size(extraGroups,2)); + + for modRuns = 1:length(modLabels) + + %index for current regressor or group + if iRegs <= length(recLabels) + cIdx = recIdx == iRegs; % index for reduced model. + else + cIdx = ismember(recIdx, find(ismember(recLabels,extraGroups{2,iRegs - length(recLabels)}))); % index for extra regressor group + end + + %control for shOtherMotor/shOtherSpontMotor condition: Only use for motor regressors. + checker = true; + if strcmpi(modLabels{modRuns}, 'shOtherMotor') || strcmpi(modLabels{modRuns}, 'shOtherSpontMotor') || strcmpi(modLabels{modRuns}, 'shTaskOtherSpontMotor') + if iRegs <= length(recLabels) && iRegs > 0 + checker = any(ismember(recLabels{iRegs},oMotorLabels)); + elseif iRegs > length(recLabels) + checker = any(ismember(extraGroups{1,iRegs - length(recLabels)},oMotorLabels)); + end + end + + if iRegs == 0 + cLabel = 'full'; + elseif iRegs <= length(recLabels) + cLabel = recLabels{iRegs}; + else + cLabel = extraGroups{1,iRegs - length(recLabels)}; + end + + if (strcmpi(modLabels{modRuns}, 'shCurrent') || sum(cIdx) > 0) && checker + + fakeR = fullR; %copy design matrix to shuffle up some regressor set + if strcmpi(modLabels{modRuns}, 'shCurrent') %this is to the shuffle-current regressor + shIdx = cIdx; + elseif strcmpi(modLabels{modRuns}, 'shOther') %this is to the shuffle remaining regressors + shIdx = ~cIdx; + elseif strcmpi(modLabels{modRuns}, 'shOtherMotor') %this is to shuffle remaining motor regressors + shIdx = ismember(recIdx, find(ismember(recLabels,taskLabels))); + shIdx = ~(shIdx | cIdx); + elseif strcmpi(modLabels{modRuns}, 'shOtherSpontMotor') %this is to the shuffle all spont. motor regressors + shIdx = ismember(recIdx, find(ismember(recLabels,[taskLabels extraGroups{2,ismember(extraGroups(1,:),{'opMotor'})}]))); %keep task + operant movements + shIdx = ~(shIdx | cIdx); + elseif strcmpi(modLabels{modRuns}, 'shTaskOtherSpontMotor') %this is to the shuffle all spont. motor regressors + shIdx = ismember(recIdx, find(ismember(recLabels,extraGroups{2,ismember(extraGroups(1,:),{'opMotor'})}))); %keep operant movements + shIdx = ~(shIdx | cIdx); + end + + %shuffle selected regressors + for iCol = find(shIdx) + fakeR(:,iCol) = fullR(randperm(size(fullR,1)),iCol); + end + + %% run cross-validation + Vm = zeros(size(Vc),'single'); + foldCnt = floor(size(Vc,2) / ridgeFolds); + + tic + for iFolds = 1:ridgeFolds + tic + dataIdx = true(1,size(Vc,2)); + + if ridgeFolds > 1 + + dataIdx(randIdx(((iFolds - 1)*foldCnt) + (1:foldCnt))) = false; %index for training data + + [~, betas] = ridgeMML(Vc(:,dataIdx)', fakeR(dataIdx,:), true, ridgeVals); %get beta weights for current model. Re-center and supply ridge penalty. + Vm(:,~dataIdx) = (fakeR(~dataIdx,:) * betas)'; %predict remaining data + + if rem(iFolds,ridgeFolds/5) == 0 + fprintf(1, 'Current fold is %d out of %d\n', iFolds, ridgeFolds); + toc + end + else + + [~, betas] = ridgeMML(Vc', fakeR, true, ridgeVals); %get beta weights for current model. Re-center and supply ridge penalty. + Vm = (fakeR * betas)'; %predict remaining data + disp('Ridgefold is <= 1, fit to complete dataset'); + end + end + + + %% compute correlation between data and prediction over for all frames + if ispc + Vc = gpuArray(Vc); + Vm = gpuArray(Vm); + U = gpuArray(U); + end + + Vc = reshape(Vc,size(Vc,1),[]); + Vm = reshape(Vm,size(Vm,1),[]); + covVc = cov(Vc'); % S x S + covVm = cov(Vm'); % S x S + cCovV = bsxfun(@minus, Vm, mean(Vm,2)) * Vc' / (size(Vc, 2) - 1); % S x S + covP = sum((U * cCovV) .* U, 2)'; % 1 x P + varP1 = sum((U * covVc) .* U, 2)'; % 1 x P + varP2 = sum((U * covVm) .* U, 2)'; % 1 x P + stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P + cMap = gather((covP ./ stdPxPy)'); + + + %% compute correlation between data and prediction over specific trial segments + stimRegs = sum(fullR(:,ismember(regIdx,find(ismember(regLabels, sensorLabels)))),2); %index for stimulus onset in all trials + stimRegs = find([0;diff(stimRegs)] > 0.5) - 1; + + segMovie = zeros(size(U,1),length(segIdx), 'single'); + for iSegs = 1:length(segIdx) + if iSegs <= 2 %baseline and handle grab, use trial onset times + cIdx = repmat((0:frames:size(Vc,2)-1)',1,length(segIdx{iSegs})); + else %stimulus and later segments, use stimulus onset times + cIdx = repmat(stimRegs,1,length(segIdx{iSegs})); + end + cIdx = bsxfun(@plus,cIdx,segIdx{iSegs}); + cIdx = cIdx(:); + cIdx(cIdx > size(Vc,2)) = []; + + covVc = cov(Vc(:,cIdx)'); % S x S + covVm = cov(Vm(:,cIdx)'); % S x S + cCovV = bsxfun(@minus, Vm(:,cIdx), mean(Vm(:,cIdx),2)) * Vc(:,cIdx)' / (length(cIdx) - 1); % S x S + covP = sum((U * cCovV) .* U, 2)'; % 1 x P + varP1 = sum((U * covVc) .* U, 2)'; % 1 x P + varP2 = sum((U * covVm) .* U, 2)'; % 1 x P + stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P + segMovie(:,iSegs) = gather((covP ./ stdPxPy))'; + end + + + %% compute correlation between data and prediction for each frame in all trials + cMovie = zeros(size(U,1),frames, 'single'); + for iFrames = 1:frames + + frameIdx = iFrames:frames:size(Vc,2); %index for the same frame in each trial + tic + cData = bsxfun(@minus, Vc(:,frameIdx), mean(Vc(:,frameIdx),2)); + cModel = bsxfun(@minus, Vm(:,frameIdx), mean(Vm(:,frameIdx),2)); + covVc = cov(cData'); % S x S + covVm = cov(cModel'); % S x S + cCovV = cModel * cData' / (length(frameIdx) - 1); % S x S + covP = sum((U * cCovV) .* U, 2)'; % 1 x P + varP1 = sum((U * covVc) .* U, 2)'; % 1 x P + varP2 = sum((U * covVm) .* U, 2)'; % 1 x P + stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P + cMovie(:,iFrames) = gather(covP ./ stdPxPy)'; + clear cData cModel + + if rem(iFrames,round(frames/4)) == 0 + fprintf(1, 'Current frame is %d out of %d\n', iFrames,frames); + toc + end + end + fprintf('Run finished. RMSE: %f\n', median(cMovie(:).^2)); + + %% save results + if ~exist([tPath modLabels{modRuns}],'dir') + mkdir([tPath modLabels{modRuns}]); + end + + save([tPath modLabels{modRuns} filesep fileExt cLabel 'corr.mat'], 'cMap', 'cMovie', 'segMovie', 'iRegs', 'recLabels', '-v7.3'); +% save([tPath modLabels{modRuns} filesep fileExt cLabel 'Vm.mat'], 'Vm', 'fakeR', 'betas','-v7.3'); + end + end + fprintf('Finished. Current reg: %d\n', Cnt); +end +save([tPath fileExt 'extraGroups.mat'], 'extraGroups'); %save labels for extra groups +save([tPath fileExt 'oMotorLabels.mat'], 'oMotorLabels'); %save other motor labels where some regressors sets are combined \ No newline at end of file diff --git a/downloaded/ridgeModel-master/delayedDetection/twoP_delayDecRecordings.m b/downloaded/ridgeModel-master/delayedDetection/twoP_delayDecRecordings.m new file mode 100644 index 0000000..86f821f --- /dev/null +++ b/downloaded/ridgeModel-master/delayedDetection/twoP_delayDecRecordings.m @@ -0,0 +1,112 @@ +function [dataOverview, motorLabels, sensorLabels, cogLabels, segIdx, segLabels, segIdxRealign, fPath] = twoP_delayDecRecordings +%overview over recordings that are used in the delayed detection study. +%This is for 2p data. +% Format of columns is: AnimalID, ExpertModality, Date, RawData path, +% Source path, Usable trials, Recording area, Recording depth, +% cut-off for drift in activity. + +dataOverview = { + +'mSM49' 'Visual' '30-Jul-2018' 'Y:\data\mSM49\imaging\180730' 'Y:\data\2pData\Animals\mSM49\SpatialDisc\30-Jul-2018\' 125:362, 'ALM', 200, [0.4 0.6]; ... +'mSM49' 'Visual' '03-Aug-2018' 'Y:\data\mSM49\imaging\180803' 'Y:\data\2pData\Animals\mSM49\SpatialDisc\03-Aug-2018\' 235:448, 'ALM', 180, [0.4 0.6]; ... +'mSM49' 'Visual' '14-Sep-2018' 'Y:\data\mSM49\imaging\180914' 'Y:\data\2pData\Animals\mSM49\SpatialDisc\14-Sep-2018\' 125:534, 'MM', 180, [0.4 0.6]; ... +'mSM49' 'Visual' '21-Sep-2018' 'Y:\data\mSM49\imaging\180921' 'Y:\data\2pData\Animals\mSM49\SpatialDisc\21-Sep-2018\' 75:419, 'MM', 150, [0.45 0.6]; ... + +'mSM60' 'Visual' '10-May-2018' 'Y:\data\mSM60\imaging\180510' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\10-May-2018\' 100:360 'pALM' 250, [0.4 0.6]; ... +'mSM60' 'Visual' '15-May-2018' 'Y:\data\mSM60\imaging\180515' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\15-May-2018\' Inf 'pALM' 170, [0.3 0.65]; ... +'mSM60' 'Visual' '17-May-2018' 'Y:\data\mSM60\imaging\180517' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\17-May-2018\' Inf 'pALM' 190, [0.4 0.6]; ... +'mSM60' 'Visual' '11-Aug-2018' 'Y:\data\mSM60\imaging\180811' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\11-Aug-2018\' 60:446, 'ALM' 200, [0.4 0.6]; ... +'mSM60' 'Visual' '24-Aug-2018' 'Y:\data\mSM60\imaging\180824' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\24-Aug-2018\' Inf 'MM' 180, [0.4 0.6]; ... +'mSM60' 'Visual' '06-Sep-2018' 'Y:\data\mSM60\imaging\180906' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\06-Sep-2018\' 40:504 'MM' 185, [0.4 0.6]; ... +'mSM60' 'Visual' '14-Sep-2018' 'Y:\data\mSM60\imaging\180914' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\14-Sep-2018\' 80:477 'ALM' 195, [0.4 0.6]; ... +'mSM60' 'Visual' '18-Sep-2018' 'Y:\data\mSM60\imaging\180918' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\18-Sep-2018\' 205:501 'ALM' 375, [0.4 0.6]; ... +'mSM60' 'Visual' '22-Sep-2018' 'Y:\data\mSM60\imaging\180922' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\22-Sep-2018\' 130:489 'MM' 370, [0.4 0.6]; ... +'mSM60' 'Visual' '25-Sep-2018' 'Y:\data\mSM60\imaging\180925' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\25-Sep-2018\' 101:550 'MM' 375, [0.4 0.6]; ... +'mSM60' 'Visual' '27-Sep-2018' 'Y:\data\mSM60\imaging\180927' 'Y:\data\2pData\Animals\mSM60\SpatialDisc\27-Sep-2018\' 101:476 'ALM' 375, [0.4 0.6]; ... + +'mSM61' 'Audio' '21-May-2018' 'Y:\data\mSM61\imaging\180521' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\21-May-2018\' 121:574 'pALM' 180, [0.4 0.6];... +'mSM61' 'Audio' '25-May-2018' 'Y:\data\mSM61\imaging\180525' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\25-May-2018\' 56:504 'MM' 250, [0.4 0.6]; ... +'mSM61' 'Audio' '06-Jun-2018' 'Y:\data\mSM61\imaging\180606' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\06-Jun-2018\' Inf 'ALM' 200, [0.4 0.6]; ... +'mSM61' 'Audio' '08-Jun-2018' 'Y:\data\mSM61\imaging\180608' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\08-Jun-2018\' 130:503 'ALM' 200, [0.4 0.6]; ... +'mSM61' 'Audio' '12-Jun-2018' 'Y:\data\mSM61\imaging\180612' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\12-Jun-2018\' [116:280 305:444] 'ALM' 400, [0.4 0.6]; ... +'mSM61' 'Audio' '15-Jun-2018' 'Y:\data\mSM61\imaging\180615' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\15-Jun-2018\' 1:340 'MM' 375, [0.4 0.6]; ... +'mSM61' 'Audio' '22-Jun-2018' 'Y:\data\mSM61\imaging\180622' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\22-Jun-2018\' 101:423 'ALM' 415, [0.4 0.6]; ... +'mSM61' 'Audio' '27-Jun-2018' 'Y:\data\mSM61\imaging\180627' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\27-Jun-2018\' Inf 'MM' 395, [0.4 0.6]; ... +'mSM61' 'Audio' '19-Jul-2018' 'Y:\data\mSM61\imaging\180719' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\19-Jul-2018\' 1:350 'MM' 215, [0.4 0.6]; ... +'mSM61' 'Audio' '24-Aug-2018' 'Y:\data\mSM61\imaging\180824' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\24-Aug-2018\' 5:443 'MM' 180, [0.4 0.6]; ... +'mSM61' 'Audio' '27-Aug-2018' 'Y:\data\mSM61\imaging\180827' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\27-Aug-2018\' Inf 'MM' 220, [0.4 0.6]; ... +'mSM61' 'Audio' '31-Aug-2018' 'Y:\data\mSM61\imaging\180831' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\31-Aug-2018\' Inf 'MM' 400, [0.4 0.6]; ... +'mSM61' 'Audio' '05-Sep-2018' 'Y:\data\mSM61\imaging\180905' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\05-Sep-2018\' Inf 'MM' 180, [0.4 0.6]; ... +'mSM61' 'Audio' '07-Sep-2018' 'Y:\data\mSM61\imaging\180907' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\07-Sep-2018\' Inf 'MM' 385, [0.4 0.6]; ... +'mSM61' 'Audio' '11-Sep-2018' 'Y:\data\mSM61\imaging\180911' 'Y:\data\2pData\Animals\mSM61\SpatialDisc\11-Sep-2018\' Inf 'MM' 200, [0.4 0.6]; ... + +'mSM62' 'Audio' '26-May-2018' 'Y:\data\mSM62\imaging\180526' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\26-May-2018\' 1:500, 'pALM', 185, [0.4 0.6]; ... +'mSM62' 'Audio' '11-Jul-2018' 'Y:\data\mSM62\imaging\180711' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\11-Jul-2018\' 1:385, 'ALM', 175, [0.4 0.6]; ... +'mSM62' 'Audio' '14-Jul-2018' 'Y:\data\mSM62\imaging\180714' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\14-Jul-2018\' 123:483, 'ALM', 225, [0.4 0.6]; ... +'mSM62' 'Audio' '16-Jul-2018' 'Y:\data\mSM62\imaging\180716' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\16-Jul-2018\' 1:300, 'ALM', 390, [0.4 0.6]; ... +'mSM62' 'Audio' '17-Jul-2018' 'Y:\data\mSM62\imaging\180717' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\17-Jul-2018\' Inf, 'ALM', 360, [0.4 0.6]; ... +'mSM62' 'Audio' '19-Jul-2018' 'Y:\data\mSM62\imaging\180719' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\19-Jul-2018\' 1:430, 'MM', 215, [0.4 0.6]; ... +'mSM62' 'Audio' '20-Jul-2018' 'Y:\data\mSM62\imaging\180720' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\20-Jul-2018\' 90:390, 'MM', 375, [0.4 0.6]; ... +'mSM62' 'Audio' '22-Jul-2018' 'Y:\data\mSM62\imaging\180722' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\22-Jul-2018\' 40:455, 'MM', 415, [0.4 0.6]; ... +'mSM62' 'Audio' '24-Jul-2018' 'Y:\data\mSM62\imaging\180724' 'Y:\data\2pData\Animals\mSM62\SpatialDisc\24-Jul-2018\' 50:500, 'MM', 210, [0.4 0.6]; ... + +'mSM67' 'Audio' '27-Jul-2018' 'Y:\data\mSM67\imaging\180727' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\27-Jul-2018\' Inf, 'ALM', 220, [0.4 0.5]; ... +'mSM67' 'Audio' '28-Jul-2018' 'Y:\data\mSM67\imaging\180728' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\28-Jul-2018\' Inf, 'MM', 180, [0.4 0.6]; ... +'mSM67' 'Audio' '29-Jul-2018' 'Y:\data\mSM67\imaging\180729' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\29-Jul-2018\' Inf, 'pALM', 200, [0.4 0.6]; ... +'mSM67' 'Audio' '01-Aug-2018' 'Y:\data\mSM67\imaging\180801' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\01-Aug-2018\' Inf, 'ALM', 190, [0.4 0.6]; ... +'mSM67' 'Audio' '02-Aug-2018' 'Y:\data\mSM67\imaging\180802' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\02-Aug-2018\' Inf, 'MM', 170, [0.4 0.6]; ... +'mSM67' 'Audio' '04-Aug-2018' 'Y:\data\mSM67\imaging\180804' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\04-Aug-2018\' Inf, 'MM', 180, [0.4 0.6]; ... +'mSM67' 'Audio' '07-Aug-2018' 'Y:\data\mSM67\imaging\180807' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\07-Aug-2018\' Inf, 'ALM', 350, [0.4 0.6]; ... +'mSM67' 'Audio' '09-Aug-2018' 'Y:\data\mSM67\imaging\180809' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\09-Aug-2018\' 100:500, 'MM', 350, [0.4 0.6]; ... +'mSM67' 'Audio' '11-Aug-2018' 'Y:\data\mSM67\imaging\180811' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\11-Aug-2018\' [100:250 300:505], 'pALM', 350, [0.4 0.6]; ... +'mSM67' 'Audio' '13-Aug-2018' 'Y:\data\mSM67\imaging\180813' 'Y:\data\2pData\Animals\mSM67\SpatialDisc\13-Aug-2018\' 150:595, 'MM', 360, [0.4 0.6]; ... + +'mSM76' 'Audio' '03-Aug-2018' 'Y:\data\mSM76\imaging\180803' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\03-Aug-2018\' Inf, 'V1', 180, [0.4 0.6]; ... +'mSM76' 'Audio' '07-Aug-2018' 'Y:\data\mSM76\imaging\180807' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\07-Aug-2018\' Inf, 'V1', 180, [0.4 0.6]; ... +'mSM76' 'Audio' '08-Aug-2018' 'Y:\data\mSM76\imaging\180808' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\08-Aug-2018\' Inf, 'V1', 180, [0.3 0.6]; ... +'mSM76' 'Audio' '10-Aug-2018' 'Y:\data\mSM76\imaging\180810' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\10-Aug-2018\' 150:455, 'S1', 180, [0.4 0.6]; ... +'mSM76' 'Audio' '14-Aug-2018' 'Y:\data\mSM76\imaging\180814' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\14-Aug-2018\' [1:128 362:500], 'RS', 150, [0.4 0.6]; ... +'mSM76' 'Audio' '18-Aug-2018' 'Y:\data\mSM76\imaging\180818' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\18-Aug-2018\' 25:420, 'S1', 180, [0.4 0.6]; ... +'mSM76' 'Audio' '20-Aug-2018' 'Y:\data\mSM76\imaging\180820' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\20-Aug-2018\' 75:433, 'RS', 225, [0.4 0.6]; ... +'mSM76' 'Audio' '22-Aug-2018' 'Y:\data\mSM76\imaging\180822' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\22-Aug-2018\' Inf, 'S1', 125, [0.4 0.6]; ... +'mSM76' 'Audio' '24-Aug-2018' 'Y:\data\mSM76\imaging\180824' 'Y:\data\2pData\Animals\mSM76\SpatialDisc\24-Aug-2018\' 110:500, 'RS', 135, [0.4 0.6]; ... + +'mSM74' 'Visual' '02-Oct-2018' 'Y:\data\mSM74\imaging\181002' 'Y:\data\2pData\Animals\mSM74\SpatialDisc\02-Oct-2018\' 150:522, 'V1', 175, [0.4 0.6]; ... +'mSM74' 'Visual' '04-Oct-2018' 'Y:\data\mSM74\imaging\181004' 'Y:\data\2pData\Animals\mSM74\SpatialDisc\04-Oct-2018\' Inf, 'RS', 165, [0.4 0.6]; ... +'mSM74' 'Visual' '12-Oct-2018' 'Y:\data\mSM74\imaging\181012' 'Y:\data\2pData\Animals\mSM74\SpatialDisc\12-Oct-2018\' 1:405, 'S1', 175, [0.4 0.6]; ... + +'mSM75' 'Audio' '03-Oct-2018' 'Y:\data\mSM75\imaging\181003' 'Y:\data\2pData\Animals\mSM75\SpatialDisc\03-Oct-2018\' Inf, 'V1', 180, [0.4 0.6]; ... +'mSM75' 'Audio' '05-Oct-2018' 'Y:\data\mSM75\imaging\181005' 'Y:\data\2pData\Animals\mSM75\SpatialDisc\05-Oct-2018\' Inf, 'RS', 145, [0.4 0.6]; ... +'mSM75' 'Audio' '09-Oct-2018' 'Y:\data\mSM75\imaging\181009' 'Y:\data\2pData\Animals\mSM75\SpatialDisc\09-Oct-2018\' Inf, 'S1', 175, [0.4 0.6]; ... +'mSM75' 'Audio' '11-Oct-2018' 'Y:\data\mSM75\imaging\181011' 'Y:\data\2pData\Animals\mSM75\SpatialDisc\11-Oct-2018\' Inf, 'S1', 175, [0.4 0.6]; ... + +'RS04' 'Visual' '30-Oct-2018' 'Y:\data\RS04\imaging\181030' 'Y:\data\2pData\Animals\RS04\SpatialDisc\30-Oct-2018\' 105:402, 'V1', 200, [0.4 0.6]; ... +'RS04' 'Visual' '01-Nov-2018' 'Y:\data\RS04\imaging\181101' 'Y:\data\2pData\Animals\RS04\SpatialDisc\01-Nov-2018\' Inf, 'V1', 350, [0.4 0.6]; ... +'RS04' 'Visual' '13-Nov-2018' 'Y:\data\RS04\imaging\181113' 'Y:\data\2pData\Animals\RS04\SpatialDisc\13-Nov-2018\' Inf, 'V1', 175, [0.4 0.6]; ... + +'RS02' 'Visual' '15-Nov-2018' 'Y:\data\RS02\imaging\181115' 'Y:\data\2pData\Animals\RS02\SpatialDisc\15-Nov-2018\' Inf, 'V1', 140, [0.4 0.6]; ... +}; + +%segment indices to compute changes per task episodes. +segIdx = {1:54 55:81 89:99 122:132 140:162 170:189}; +segLabels = {'Baseline' 'Handle' 'Stim1' 'Stim2' 'Wait' 'Response'}; +segIdxRealign = {1:54 55:79 80:98 113:131 132:162 163:179}; %segment index after realignment on both handle and stimulus + +% file path on grid server +% fPath = 'U:\space_managed_data\2pData\Animals\'; +fPath = 'Y:\data\2pData\Animals\'; + +%regressors for motor-based reconstruction +motorLabels = {'lGrab' 'lGrabRel' 'rGrab' 'rGrabRel' 'lLick' 'rLick' 'fastPupil' 'slowPupil'... + 'piezo' 'whisk' 'nose' 'face' 'body' 'BaselineMove' 'HandleMove' 'StimulusMove' 'WaitMove' 'Move' 'bhvVideo'}; + +%regressors for sensory-based reconstruction +sensorLabels = {'lVisStim' 'rVisStim' 'lAudStim' 'rAudStim'}; + +%regressors for cognitive reconstruction +cogLabels = {'time' 'Choice' 'reward' 'prevReward' 'prevChoice' 'prevMod' 'water'}; + +%segment indices to compute changes per task episodes. +segIdx = {1:54 55:81 89:99 122:132 140:162 170:189}; %segment index for handel aligned data +segLabels = {'Baseline' 'Handle' 'Stim1' 'Stim2' 'Wait' 'Response'}; +segIdxRealign = {1:54 55:79 80:98 113:131 132:162 163:179}; %segment index after realignment on both handle and stimulus \ No newline at end of file diff --git a/downloaded/ridgeModel-master/desktop.ini b/downloaded/ridgeModel-master/desktop.ini new file mode 100644 index 0000000..d1b3785 --- /dev/null +++ b/downloaded/ridgeModel-master/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +Widefield_analogToDesign.m=@Widefield_analogToDesign.m,0 diff --git a/downloaded/ridgeModel-master/makeDesignMatrix.m b/downloaded/ridgeModel-master/makeDesignMatrix.m new file mode 100644 index 0000000..264d461 --- /dev/null +++ b/downloaded/ridgeModel-master/makeDesignMatrix.m @@ -0,0 +1,55 @@ +function [fullMat, eventIdx] = makeDesignMatrix(events, eventType, opts) +% function to generate design matrix from a column matrix with binary +% events. eventType defines the type of design matrix that is generated. +% (1 = fullTrial, 2 = post-event, 3 = peri-event) + +frames = opts.framesPerTrial; +fullMat = cell(1,length(eventType)); +eventIdx = cell(1,length(eventType)); +events = reshape(events, frames, [], length(eventType)); %reshape to trials +trialCnt = size(events,2); %nr of trials + +for iRegs = 1 : length(eventType) + + % determine index for current event type + if eventType(iRegs) == 1 + kernelIdx = 0 : frames-1; %index for whole trial + elseif eventType(iRegs) == 2 + kernelIdx = 0 : opts.sPostTime; %index for design matrix to cover post event activity + elseif eventType(iRegs) == 3 + kernelIdx = [-(opts.mPreTime: -1 : 1) 0 (1:opts.mPostTime)]; %index for design matrix to cover pre- and post event activity + else + error('Unknown event type. Must be a value between 1 and 3.') + end + + % run over trials + dMat = cell(1,trialCnt); + for iTrials = 1 : trialCnt + + % Get the zero lag regressor. + trace = logical(events(:,iTrials,iRegs)); + + % create full design matrix + cIdx = bsxfun(@plus,find(trace),kernelIdx); + cIdx(cIdx < 1) = 0; + cIdx(cIdx > frames) = frames; + cIdx = bsxfun(@plus,cIdx,(0:frames:frames*length(kernelIdx)-1)); + cIdx(cIdx < 1) = frames; + cIdx(cIdx > (frames * length(kernelIdx))) = frames * length(kernelIdx); + + dMat{iTrials} = false(frames, length(kernelIdx)); + dMat{iTrials}(cIdx(:)) = true; + dMat{iTrials}(end,:) = false; %don't use last timepoint of design matrix to avoid confusion with indexing. + dMat{iTrials}(end,2:end) = dMat{iTrials}(end-1,1:end-1); %replace with shifted version of previous timepoint + + end + fullMat{iRegs} = cat(1, dMat{:}); %combine all trials + cIdx = sum(fullMat{iRegs},1) > 0; %don't use empty regressors + fullMat{iRegs} = fullMat{iRegs}(:,cIdx); + eventIdx{iRegs} = repmat(iRegs,sum(cIdx),1); %keep index on how many regressor were created +end + +fullMat = cat(2,fullMat{:}); %combine all regressors into larger matrix +eventIdx = cat(1,eventIdx{:}); %combine index so we need what is what + +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/modelCorr.m b/downloaded/ridgeModel-master/modelCorr.m new file mode 100644 index 0000000..ca8de7c --- /dev/null +++ b/downloaded/ridgeModel-master/modelCorr.m @@ -0,0 +1,18 @@ +function [corrMat, varP1, varP2] = modelCorr(Vc,Vm,U) +%short code to compute the correlation between lowD data Vc and modeled +%lowD data Vm. Vc and Vm are temporal components, U is the spatial +%components. corrMat is a the correlation between Vc and Vm in each pixel. + +Vc = reshape(Vc,size(Vc,1),[]); +Vm = reshape(Vm,size(Vm,1),[]); +if length(size(U)) == 3 + U = arrayShrink(U, squeeze(isnan(U(:,:,1)))); +end +covVc = cov(Vc'); % S x S +covVm = cov(Vm'); % S x S +cCovV = bsxfun(@minus, Vm, mean(Vm,2)) * Vc' / (size(Vc, 2) - 1); % S x S +covP = sum((U * cCovV) .* U, 2)'; % 1 x P +varP1 = sum((U * covVc) .* U, 2)'; % 1 x P +varP2 = sum((U * covVm) .* U, 2)'; % 1 x P +stdPxPy = varP1 .^ 0.5 .* varP2 .^ 0.5; % 1 x P +corrMat = gather((covP ./ stdPxPy)'); \ No newline at end of file diff --git a/downloaded/ridgeModel-master/ridgeMML.m b/downloaded/ridgeModel-master/ridgeMML.m new file mode 100644 index 0000000..21ef732 --- /dev/null +++ b/downloaded/ridgeModel-master/ridgeMML.m @@ -0,0 +1,341 @@ +function [L, betas, convergenceFailures] = ridgeMML(Y, X, recenter, L) +% [lambdas, betas, convergenceFailures] = ridgeMML(Y, X [, recenter] [, lambdas]) +% +% This is an implementation of Ridge regression with the Ridge parameter +% lambda determined using the fast algorithm of Karabatsos 2017 (see +% below). I also made some improvements, described below. +% +% Inputs are Y (the outcome variables) and X (the design matrix, aka the +% regressors). Y may be a matrix. X is a matrix with as many rows as Y, and +% should *not* include a column of ones. +% +% A separate value of lambda will be found for each column of Y. +% +% Outputs are the lambdas (the Ridge parameters, one per column of Y); the +% betas (the regression coefficients, again with columns corresponding to +% columns of Y); and a vector of logicals telling you whether fminbnd +% failed to converge for each column of y (this happens frequently). +% +% If recenter is 1 (default), the columns of X and Y will be recentered at +% 0. betas will be of size: size(X, 2) x size(Y, 2) +% To reconstruct the recentered Y, use: +% YRecenteredHat = (X - mean(X, 1)) * betas; +% +% If recenter is 0, the columns of X and Y will not be recentered. betas +% will be of size: size(X, 2)+1 x size(Y, 2) +% The first row corresponds to the intercept term. +% To reconstruct Y, you may therefore use either: +% YHat = [ones(size(X, 1), 1), X] * betas; +% or +% YHat = X * betas(2:end, :) + betas(1, :); +% +% If lambdas is supplied, the optimization step is skipped and the betas +% are computed immediately. This obviously speeds things up a lot. +% +% +% TECHNICAL DETAILS: +% +% To allow for un-centered X and Y, it turns out you can simply avoid +% penalizing the intercept when performing the regression. However, no +% matter what it is important to put the columns of X on the same scale +% before performing the regression (though Matlab's ridge.m does not do +% this if you choose not to recenter). This rescaling step is undone in the +% betas that are returned, so the user does not have to worry about it. But +% this step substantially improves reconstruction quality. +% +% Improvements to the Karabatsos algorithm: as lambda gets large, local +% optima occur frequently. To combat this, I use two strategies. First, +% once we've passed lambda = 25, we stop using the fixed step size of 1/4 +% and start using an adaptive step size: 1% of the current lambda. (This +% also speeds up execution time greatly for large lambdas.) Second, we add +% boxcar smoothing to our likelihood values, with a width of 7. We still +% end up hitting local minima, but the lambdas we find are much bigger and +% closer to the global optimum. +% +% Source: "Marginal maximum likelihood estimation methods for the tuning +% parameters of ridge, power ridge, and generalized ridge regression" by G +% Karabatsos, Communications in Statistics -- Simulation and Computation, +% 2017. Page 6. +% http://www.tandfonline.com/doi/pdf/10.1080/03610918.2017.1321119 +% +% Written by Matt Kaufman, 2018. mattkaufman@uchicago.edu + + +%% Optional arguments + +if ~exist('recenter', 'var') + recenter = 1; +end + +if ~exist('L', 'var') || isnan(L(1)) + computeL = 1; +else + computeL = 0; +end + + +%% Error checking + +if size(Y, 1) ~= size(X, 1) + error('Size mismatch'); +end + + +%% Ensure Y is zero-mean +% This is needed to estimate lambdas, but if recenter = 0, the mean will be +% restored later for the beta estimation + +if computeL || recenter + YMean = mean(Y, 1); + Y = bsxfun(@minus, Y, YMean); +end + +pY = size(Y, 2); + + +%% Renorm (Z-score) + +XStd = std(X, 0, 1); +X = bsxfun(@rdivide, X, XStd); + +if computeL || recenter + XMean = mean(X, 1); + X = bsxfun(@minus, X, XMean); + X(isnan(X)) = 0; +end + + +%% Optimize lambda + +if computeL + + + %% SVD the predictors + + [U, S, V] = svd(X, 0); + + + %% Find the valid singular values of X, compute d and alpha + + n = size(X, 1); % Observations + p = size(V, 2); % Predictors + + d = diag(S); + + % Find the number of good singular values. Ensure numerical stability. + q = sum(d' > eps(U(1)) * (1:p)); + + d2 = d .^ 2; + + % Equation 1 + % Eliminated the diag(1 ./ d2) term: it gets cancelled later and only adds + % numerical instability (since later elements of d may be tiny). + % alph = V' * X' * Y; + alph = S * U' * Y; + alpha2 = alph .^ 2; + + + %% Compute variance of y + % In Equation 19, this is shown as y'y + + YVar = sum(Y .^ 2, 1); + + + %% Compute the lambdas + + L = NaN(1, pY); + + convergenceFailures = false(1, pY); + for i = 1:pY + [L(i), flag] = ridgeMMLOneY(q, d2, n, YVar(i), alpha2(:, i)); + convergenceFailures(i) = (flag < 1); + end + +else + p = size(X, 2); +end + + +%% If requested, perform the actual regression + +if nargout > 1 + + if ~recenter + % Restore the means of X and Y (but don't rescale) + if computeL + Y = bsxfun(@plus, Y, YMean); + X = bsxfun(@plus, X, XMean); + end + + betas = NaN(p + 1, pY); + + % Augment X with a column of ones, to allow for a non-zero intercept + % (offset). This is what we'll use for regression, without a penalty on + % the intercept column. + X = [ones(size(X, 1), 1), X]; + + XTX = X' * X; + + % Prep penalty matrix + ep = eye(p + 1); + ep(1, 1) = 0; % No penalty for intercept column + + % For renorming the betas + % The 1 is so we don't renorm the intercept column. + % Note that the rescaling doesn't alter the intercept. + renorm = [1; XStd']; + + else + betas = NaN(p, pY); + + % You would think you could compute X'X more efficiently as VSSV', but + % this is numerically unstable and can alter results slightly. Oh well. + % XTX = V * bsxfun(@times, V', d2); + XTX = X' * X; + + % Prep penalty matrix + ep = eye(p); + + % For renorming the betas + renorm = XStd'; + end + + + % Compute X' * Y all at once, again for speed + XTY = X' * Y; + + % Compute betas for renormed X + for i = 1:pY + betas(:, i) = ((XTX + L(i) * ep) \ XTY(:, i)); + end + + % Adjust betas to account for renorming. + betas = bsxfun(@rdivide, betas, renorm); + betas(isnan(betas)) = 0; +end + + +%% Display fminbnd failures + +if computeL && nargout < 3 && sum(convergenceFailures) > 0 + fprintf('fminbnd failed to converge %d/%d times\n', sum(convergenceFailures), pY); +end + + + +function [L, flag] = ridgeMMLOneY(q, d2, n, YVar, alpha2) +% Compute the lambda for one column of Y + +% Width of smoothing kernel to use when dealing with large lambda +smooth = 7; %originally was 7 + +% Value of lambda at which to switch from step size 1/4 to step size L/stepDenom. +% Value of stepSwitch must be >= smooth/4, and stepSwitch/stepDenom should +% be >= 1/4. +stepSwitch = 25; %originally was 25 +stepDenom = 100; %originally was 100 + + +%% Set up smoothing + +% These rolling buffers will hold the last few values, to average for +% smoothing +smBuffer = NaN(1, smooth); +testValsL = NaN(1, smooth); + +% Initialize index of the buffers where we'll write the next value +smBufferI = 0; + + +%% Evaluate the log likelihood of the data for increasing values of lambda +% This is step 1 of the two-step algorithm at the bottom of page 6. +% Basically, increment until we pass the peak. Here, I've added trying +% small steps as normal, then switching over to using larger steps and +% smoothing to combat local minima. + +% Mint the negative log-likelihood function +NLLFunc = mintNLLFunc(q, d2, n, YVar, alpha2); + +% Loop through first few values of k before you apply smoothing. +% Step size 1/4, as recommended by Karabatsos +done = 0; +NLL = Inf; +for k = 0:stepSwitch * 4 + smBufferI = mod(smBufferI, smooth) + 1; + prevNLL = NLL; + + % Compute negative log likelihood of the data for this value of lambda + NLL = NLLFunc(k / 4); + + % Add to smoothing buffer + smBuffer(smBufferI) = NLL; + testValsL(smBufferI) = k / 4; + + % Check if we've passed the minimum + if NLL > prevNLL + % Compute limits for L + minL = (k - 2) / 4; + maxL = k / 4; + done = 1; + break; + end +end + + +% If we haven't already hit the max likelihood, continue increasing lambda, +% but now apply smoothing to try to reduce the impact of local minima that +% occur when lambda is large + +% Also increase step size from 1/4 to L/stepDenom, for speed and robustness +% to local minima +if ~done + L = k / 4; + NLL = mean(smBuffer); + while ~done + L = L + L / stepDenom; + smBufferI = mod(smBufferI, smooth) + 1; + prevNLL = NLL; + + % Compute negative log likelihood of the data for this value of lambda, + % overwrite oldest value in the smoothing buffer + smBuffer(smBufferI) = NLLFunc(L); + testValsL(smBufferI) = L; + NLL = mean(smBuffer); + + % Check if we've passed the minimum + if (NLL > prevNLL) + % Adjust for smoothing kernel (walk back by half the kernel) + smBufferI = smBufferI - (smooth - 1) / 2; + smBufferI = smBufferI + smooth * (smBufferI < 1); % wrap around + maxL = testValsL(smBufferI); + + % Walk back by two more steps to find min bound + smBufferI = smBufferI - 2; + smBufferI = smBufferI + smooth * (smBufferI < 1); % wrap around + minL = testValsL(smBufferI); + + done = 1; + end + end +end + + +%% Bounded optimization of lambda +% This is step 2 of the two-step algorithm at the bottom of page 6. Note +% that Karabatsos made a mistake when describing the indexing relative to +% k*, which is fixed here (we need to go from k*-2 to k*, not k*-1 to k*+1) + +[L, ~, flag] = fminbnd(NLLFunc, max(0, minL), maxL, ... + optimset('Display', 'off')); + + +function NLLFunc = mintNLLFunc(q, d2, n, YVar, alpha2) +% Mint an anonymous function with L as the only input parameter, with all +% the other terms determined by the data. + +% Equation 19 +% We've modified the math here to eliminate the d^2 term from both alpha +% (Equation 1, in main function) and here (Equation 19), because they +% cancel out and add numerical instability. +NLLFunc = @(L) -(q * log(L) - sum(log(L + d2(1:q))) - ... + n * log(YVar - sum(alpha2(1:q) ./ (L + d2(1:q))))); diff --git a/downloaded/ridgeModel-master/smallStuff/colormap_blueblackred.m b/downloaded/ridgeModel-master/smallStuff/colormap_blueblackred.m new file mode 100644 index 0000000..7f05466 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/colormap_blueblackred.m @@ -0,0 +1,18 @@ +function map = colormap_blueblackred(m) +if nargin < 1 + m = size(get(gcf,'colormap'),1); +end + +map=[1 1 0; 1 0.96 0; 1 0.92 0; 1 0.88 0; 1 0.84 0; 1 0.80 0; 1 0.76 0; 1 0.72 0; 1 0.68 0; 1 0.64 0; 1 0.60 0; 1 0.56 0; 1 0.52 0; 1 0.48 0; 1 0.44 0; 1 0.40 0; ... + 1 0.36 0; 1 0.32 0; 1 0.28 0; 1 0.24 0; 1 0.20 0; 1 0.16 0; 1 0.12 0; 1 0.08 0; 1 0.04 0; + 1 0 0; 0.96 0 0; 0.92 0 0; 0.88 0 0; 0.84 0 0; 0.80 0 0; 0.76 0 0; 0.72 0 0; 0.68 0 0; 0.64 0 0; 0.60 0 0; 0.56 0 0; 0.52 0 0; 0.48 0 0; 0.44 0 0; 0.40 0 0; ... + 0.36 0 0; 0.32 0 0; 0.28 0 0; 0.24 0 0; 0.20 0 0; 0.16 0 0; 0.12 0 0; 0.08 0 0; 0.04 0 0; 0 0 0; ... + 0 0 0.04; 0 0 0.08; 0 0 0.12; 0 0 0.16; 0 0 0.20; 0 0 0.24; 0 0 0.28; 0 0 0.32; 0 0 0.36; 0 0 0.40; 0 0 0.44; 0 0 0.48; 0 0 0.52; ... + 0 0 0.56; 0 0 0.60; 0 0 0.64; 0 0 0.68; 0 0 0.72; 0 0 0.76; 0 0 0.80; 0 0 0.84; 0 0 0.88; 0 0 0.92; 0 0 0.96; 0 0 1; ... + 0 0.04 1; 0 0.08 1; 0 0.12 1; 0 0.16 1; 0 0.20 1; 0 0.24 1; 0 0.28 1; 0 0.32 1; 0 0.36 1; 0 0.40 1; 0 0.44 1; 0 0.48 1; 0 0.52 1; ... + 0 0.56 1; 0 0.60 1; 0 0.64 1; 0 0.68 1; 0 0.72 1; 0 0.76 1; 0 0.80 1; 0 0.84 1; 0 0.88 1; 0 0.92 1; 0 0.96 1; 0 1 1]; + +map = imresize(map,[m,3]); +map = map - min(map(:)); +map = map ./ max(map(:)); +map = map(end:-1:1,:); \ No newline at end of file diff --git a/downloaded/ridgeModel-master/smallStuff/inferno.m b/downloaded/ridgeModel-master/smallStuff/inferno.m new file mode 100644 index 0000000..bdef08d --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/inferno.m @@ -0,0 +1,269 @@ +function [cm_data]=inferno(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.26726368e-03, 1.26992553e-03, 1.85703520e-02], + [ 3.29899092e-03, 2.24934863e-03, 2.42390508e-02], + [ 4.54690615e-03, 3.39180156e-03, 3.09092475e-02], + [ 6.00552565e-03, 4.69194561e-03, 3.85578980e-02], + [ 7.67578856e-03, 6.13611626e-03, 4.68360336e-02], + [ 9.56051094e-03, 7.71344131e-03, 5.51430756e-02], + [ 1.16634769e-02, 9.41675403e-03, 6.34598080e-02], + [ 1.39950388e-02, 1.12247138e-02, 7.18616890e-02], + [ 1.65605595e-02, 1.31362262e-02, 8.02817951e-02], + [ 1.93732295e-02, 1.51325789e-02, 8.87668094e-02], + [ 2.24468865e-02, 1.71991484e-02, 9.73274383e-02], + [ 2.57927373e-02, 1.93306298e-02, 1.05929835e-01], + [ 2.94324251e-02, 2.15030771e-02, 1.14621328e-01], + [ 3.33852235e-02, 2.37024271e-02, 1.23397286e-01], + [ 3.76684211e-02, 2.59207864e-02, 1.32232108e-01], + [ 4.22525554e-02, 2.81385015e-02, 1.41140519e-01], + [ 4.69146287e-02, 3.03236129e-02, 1.50163867e-01], + [ 5.16437624e-02, 3.24736172e-02, 1.59254277e-01], + [ 5.64491009e-02, 3.45691867e-02, 1.68413539e-01], + [ 6.13397200e-02, 3.65900213e-02, 1.77642172e-01], + [ 6.63312620e-02, 3.85036268e-02, 1.86961588e-01], + [ 7.14289181e-02, 4.02939095e-02, 1.96353558e-01], + [ 7.66367560e-02, 4.19053329e-02, 2.05798788e-01], + [ 8.19620773e-02, 4.33278666e-02, 2.15289113e-01], + [ 8.74113897e-02, 4.45561662e-02, 2.24813479e-01], + [ 9.29901526e-02, 4.55829503e-02, 2.34357604e-01], + [ 9.87024972e-02, 4.64018731e-02, 2.43903700e-01], + [ 1.04550936e-01, 4.70080541e-02, 2.53430300e-01], + [ 1.10536084e-01, 4.73986708e-02, 2.62912235e-01], + [ 1.16656423e-01, 4.75735920e-02, 2.72320803e-01], + [ 1.22908126e-01, 4.75360183e-02, 2.81624170e-01], + [ 1.29284984e-01, 4.72930838e-02, 2.90788012e-01], + [ 1.35778450e-01, 4.68563678e-02, 2.99776404e-01], + [ 1.42377819e-01, 4.62422566e-02, 3.08552910e-01], + [ 1.49072957e-01, 4.54676444e-02, 3.17085139e-01], + [ 1.55849711e-01, 4.45588056e-02, 3.25338414e-01], + [ 1.62688939e-01, 4.35542881e-02, 3.33276678e-01], + [ 1.69575148e-01, 4.24893149e-02, 3.40874188e-01], + [ 1.76493202e-01, 4.14017089e-02, 3.48110606e-01], + [ 1.83428775e-01, 4.03288858e-02, 3.54971391e-01], + [ 1.90367453e-01, 3.93088888e-02, 3.61446945e-01], + [ 1.97297425e-01, 3.84001825e-02, 3.67534629e-01], + [ 2.04209298e-01, 3.76322609e-02, 3.73237557e-01], + [ 2.11095463e-01, 3.70296488e-02, 3.78563264e-01], + [ 2.17948648e-01, 3.66146049e-02, 3.83522415e-01], + [ 2.24762908e-01, 3.64049901e-02, 3.88128944e-01], + [ 2.31538148e-01, 3.64052511e-02, 3.92400150e-01], + [ 2.38272961e-01, 3.66209949e-02, 3.96353388e-01], + [ 2.44966911e-01, 3.70545017e-02, 4.00006615e-01], + [ 2.51620354e-01, 3.77052832e-02, 4.03377897e-01], + [ 2.58234265e-01, 3.85706153e-02, 4.06485031e-01], + [ 2.64809649e-01, 3.96468666e-02, 4.09345373e-01], + [ 2.71346664e-01, 4.09215821e-02, 4.11976086e-01], + [ 2.77849829e-01, 4.23528741e-02, 4.14392106e-01], + [ 2.84321318e-01, 4.39325787e-02, 4.16607861e-01], + [ 2.90763373e-01, 4.56437598e-02, 4.18636756e-01], + [ 2.97178251e-01, 4.74700293e-02, 4.20491164e-01], + [ 3.03568182e-01, 4.93958927e-02, 4.22182449e-01], + [ 3.09935342e-01, 5.14069729e-02, 4.23720999e-01], + [ 3.16281835e-01, 5.34901321e-02, 4.25116277e-01], + [ 3.22609671e-01, 5.56335178e-02, 4.26376869e-01], + [ 3.28920763e-01, 5.78265505e-02, 4.27510546e-01], + [ 3.35216916e-01, 6.00598734e-02, 4.28524320e-01], + [ 3.41499828e-01, 6.23252772e-02, 4.29424503e-01], + [ 3.47771086e-01, 6.46156100e-02, 4.30216765e-01], + [ 3.54032169e-01, 6.69246832e-02, 4.30906186e-01], + [ 3.60284449e-01, 6.92471753e-02, 4.31497309e-01], + [ 3.66529195e-01, 7.15785403e-02, 4.31994185e-01], + [ 3.72767575e-01, 7.39149211e-02, 4.32400419e-01], + [ 3.79000659e-01, 7.62530701e-02, 4.32719214e-01], + [ 3.85228383e-01, 7.85914864e-02, 4.32954973e-01], + [ 3.91452659e-01, 8.09267058e-02, 4.33108763e-01], + [ 3.97674379e-01, 8.32568129e-02, 4.33182647e-01], + [ 4.03894278e-01, 8.55803445e-02, 4.33178526e-01], + [ 4.10113015e-01, 8.78961593e-02, 4.33098056e-01], + [ 4.16331169e-01, 9.02033992e-02, 4.32942678e-01], + [ 4.22549249e-01, 9.25014543e-02, 4.32713635e-01], + [ 4.28767696e-01, 9.47899342e-02, 4.32411996e-01], + [ 4.34986885e-01, 9.70686417e-02, 4.32038673e-01], + [ 4.41207124e-01, 9.93375510e-02, 4.31594438e-01], + [ 4.47428382e-01, 1.01597079e-01, 4.31080497e-01], + [ 4.53650614e-01, 1.03847716e-01, 4.30497898e-01], + [ 4.59874623e-01, 1.06089165e-01, 4.29845789e-01], + [ 4.66100494e-01, 1.08321923e-01, 4.29124507e-01], + [ 4.72328255e-01, 1.10546584e-01, 4.28334320e-01], + [ 4.78557889e-01, 1.12763831e-01, 4.27475431e-01], + [ 4.84789325e-01, 1.14974430e-01, 4.26547991e-01], + [ 4.91022448e-01, 1.17179219e-01, 4.25552106e-01], + [ 4.97257069e-01, 1.19379132e-01, 4.24487908e-01], + [ 5.03492698e-01, 1.21575414e-01, 4.23356110e-01], + [ 5.09729541e-01, 1.23768654e-01, 4.22155676e-01], + [ 5.15967304e-01, 1.25959947e-01, 4.20886594e-01], + [ 5.22205646e-01, 1.28150439e-01, 4.19548848e-01], + [ 5.28444192e-01, 1.30341324e-01, 4.18142411e-01], + [ 5.34682523e-01, 1.32533845e-01, 4.16667258e-01], + [ 5.40920186e-01, 1.34729286e-01, 4.15123366e-01], + [ 5.47156706e-01, 1.36928959e-01, 4.13510662e-01], + [ 5.53391649e-01, 1.39134147e-01, 4.11828882e-01], + [ 5.59624442e-01, 1.41346265e-01, 4.10078028e-01], + [ 5.65854477e-01, 1.43566769e-01, 4.08258132e-01], + [ 5.72081108e-01, 1.45797150e-01, 4.06369246e-01], + [ 5.78303656e-01, 1.48038934e-01, 4.04411444e-01], + [ 5.84521407e-01, 1.50293679e-01, 4.02384829e-01], + [ 5.90733615e-01, 1.52562977e-01, 4.00289528e-01], + [ 5.96939751e-01, 1.54848232e-01, 3.98124897e-01], + [ 6.03138930e-01, 1.57151161e-01, 3.95891308e-01], + [ 6.09330184e-01, 1.59473549e-01, 3.93589349e-01], + [ 6.15512627e-01, 1.61817111e-01, 3.91219295e-01], + [ 6.21685340e-01, 1.64183582e-01, 3.88781456e-01], + [ 6.27847374e-01, 1.66574724e-01, 3.86276180e-01], + [ 6.33997746e-01, 1.68992314e-01, 3.83703854e-01], + [ 6.40135447e-01, 1.71438150e-01, 3.81064906e-01], + [ 6.46259648e-01, 1.73913876e-01, 3.78358969e-01], + [ 6.52369348e-01, 1.76421271e-01, 3.75586209e-01], + [ 6.58463166e-01, 1.78962399e-01, 3.72748214e-01], + [ 6.64539964e-01, 1.81539111e-01, 3.69845599e-01], + [ 6.70598572e-01, 1.84153268e-01, 3.66879025e-01], + [ 6.76637795e-01, 1.86806728e-01, 3.63849195e-01], + [ 6.82656407e-01, 1.89501352e-01, 3.60756856e-01], + [ 6.88653158e-01, 1.92238994e-01, 3.57602797e-01], + [ 6.94626769e-01, 1.95021500e-01, 3.54387853e-01], + [ 7.00575937e-01, 1.97850703e-01, 3.51112900e-01], + [ 7.06499709e-01, 2.00728196e-01, 3.47776863e-01], + [ 7.12396345e-01, 2.03656029e-01, 3.44382594e-01], + [ 7.18264447e-01, 2.06635993e-01, 3.40931208e-01], + [ 7.24102613e-01, 2.09669834e-01, 3.37423766e-01], + [ 7.29909422e-01, 2.12759270e-01, 3.33861367e-01], + [ 7.35683432e-01, 2.15905976e-01, 3.30245147e-01], + [ 7.41423185e-01, 2.19111589e-01, 3.26576275e-01], + [ 7.47127207e-01, 2.22377697e-01, 3.22855952e-01], + [ 7.52794009e-01, 2.25705837e-01, 3.19085410e-01], + [ 7.58422090e-01, 2.29097492e-01, 3.15265910e-01], + [ 7.64009940e-01, 2.32554083e-01, 3.11398734e-01], + [ 7.69556038e-01, 2.36076967e-01, 3.07485188e-01], + [ 7.75058888e-01, 2.39667435e-01, 3.03526312e-01], + [ 7.80517023e-01, 2.43326720e-01, 2.99522665e-01], + [ 7.85928794e-01, 2.47055968e-01, 2.95476756e-01], + [ 7.91292674e-01, 2.50856232e-01, 2.91389943e-01], + [ 7.96607144e-01, 2.54728485e-01, 2.87263585e-01], + [ 8.01870689e-01, 2.58673610e-01, 2.83099033e-01], + [ 8.07081807e-01, 2.62692401e-01, 2.78897629e-01], + [ 8.12239008e-01, 2.66785558e-01, 2.74660698e-01], + [ 8.17340818e-01, 2.70953688e-01, 2.70389545e-01], + [ 8.22385784e-01, 2.75197300e-01, 2.66085445e-01], + [ 8.27372474e-01, 2.79516805e-01, 2.61749643e-01], + [ 8.32299481e-01, 2.83912516e-01, 2.57383341e-01], + [ 8.37165425e-01, 2.88384647e-01, 2.52987700e-01], + [ 8.41968959e-01, 2.92933312e-01, 2.48563825e-01], + [ 8.46708768e-01, 2.97558528e-01, 2.44112767e-01], + [ 8.51383572e-01, 3.02260213e-01, 2.39635512e-01], + [ 8.55992130e-01, 3.07038188e-01, 2.35132978e-01], + [ 8.60533241e-01, 3.11892183e-01, 2.30606009e-01], + [ 8.65005747e-01, 3.16821833e-01, 2.26055368e-01], + [ 8.69408534e-01, 3.21826685e-01, 2.21481734e-01], + [ 8.73740530e-01, 3.26906201e-01, 2.16885699e-01], + [ 8.78000715e-01, 3.32059760e-01, 2.12267762e-01], + [ 8.82188112e-01, 3.37286663e-01, 2.07628326e-01], + [ 8.86301795e-01, 3.42586137e-01, 2.02967696e-01], + [ 8.90340885e-01, 3.47957340e-01, 1.98286080e-01], + [ 8.94304553e-01, 3.53399363e-01, 1.93583583e-01], + [ 8.98192017e-01, 3.58911240e-01, 1.88860212e-01], + [ 9.02002544e-01, 3.64491949e-01, 1.84115876e-01], + [ 9.05735448e-01, 3.70140419e-01, 1.79350388e-01], + [ 9.09390090e-01, 3.75855533e-01, 1.74563472e-01], + [ 9.12965874e-01, 3.81636138e-01, 1.69754764e-01], + [ 9.16462251e-01, 3.87481044e-01, 1.64923826e-01], + [ 9.19878710e-01, 3.93389034e-01, 1.60070152e-01], + [ 9.23214783e-01, 3.99358867e-01, 1.55193185e-01], + [ 9.26470039e-01, 4.05389282e-01, 1.50292329e-01], + [ 9.29644083e-01, 4.11479007e-01, 1.45366973e-01], + [ 9.32736555e-01, 4.17626756e-01, 1.40416519e-01], + [ 9.35747126e-01, 4.23831237e-01, 1.35440416e-01], + [ 9.38675494e-01, 4.30091162e-01, 1.30438175e-01], + [ 9.41521384e-01, 4.36405243e-01, 1.25409440e-01], + [ 9.44284543e-01, 4.42772199e-01, 1.20354038e-01], + [ 9.46964741e-01, 4.49190757e-01, 1.15272059e-01], + [ 9.49561766e-01, 4.55659658e-01, 1.10163947e-01], + [ 9.52075421e-01, 4.62177656e-01, 1.05030614e-01], + [ 9.54505523e-01, 4.68743522e-01, 9.98735931e-02], + [ 9.56851903e-01, 4.75356048e-01, 9.46952268e-02], + [ 9.59114397e-01, 4.82014044e-01, 8.94989073e-02], + [ 9.61292850e-01, 4.88716345e-01, 8.42893891e-02], + [ 9.63387110e-01, 4.95461806e-01, 7.90731907e-02], + [ 9.65397031e-01, 5.02249309e-01, 7.38591143e-02], + [ 9.67322465e-01, 5.09077761e-01, 6.86589199e-02], + [ 9.69163264e-01, 5.15946092e-01, 6.34881971e-02], + [ 9.70919277e-01, 5.22853259e-01, 5.83674890e-02], + [ 9.72590351e-01, 5.29798246e-01, 5.33237243e-02], + [ 9.74176327e-01, 5.36780059e-01, 4.83920090e-02], + [ 9.75677038e-01, 5.43797733e-01, 4.36177922e-02], + [ 9.77092313e-01, 5.50850323e-01, 3.90500131e-02], + [ 9.78421971e-01, 5.57936911e-01, 3.49306227e-02], + [ 9.79665824e-01, 5.65056600e-01, 3.14091591e-02], + [ 9.80823673e-01, 5.72208516e-01, 2.85075931e-02], + [ 9.81895311e-01, 5.79391803e-01, 2.62497353e-02], + [ 9.82880522e-01, 5.86605627e-01, 2.46613416e-02], + [ 9.83779081e-01, 5.93849168e-01, 2.37702263e-02], + [ 9.84590755e-01, 6.01121626e-01, 2.36063833e-02], + [ 9.85315301e-01, 6.08422211e-01, 2.42021174e-02], + [ 9.85952471e-01, 6.15750147e-01, 2.55921853e-02], + [ 9.86502013e-01, 6.23104667e-01, 2.78139496e-02], + [ 9.86963670e-01, 6.30485011e-01, 3.09075459e-02], + [ 9.87337182e-01, 6.37890424e-01, 3.49160639e-02], + [ 9.87622296e-01, 6.45320152e-01, 3.98857472e-02], + [ 9.87818759e-01, 6.52773439e-01, 4.55808037e-02], + [ 9.87926330e-01, 6.60249526e-01, 5.17503867e-02], + [ 9.87944783e-01, 6.67747641e-01, 5.83286889e-02], + [ 9.87873910e-01, 6.75267000e-01, 6.52570167e-02], + [ 9.87713535e-01, 6.82806802e-01, 7.24892330e-02], + [ 9.87463516e-01, 6.90366218e-01, 7.99897176e-02], + [ 9.87123759e-01, 6.97944391e-01, 8.77314215e-02], + [ 9.86694229e-01, 7.05540424e-01, 9.56941797e-02], + [ 9.86174970e-01, 7.13153375e-01, 1.03863324e-01], + [ 9.85565739e-01, 7.20782460e-01, 1.12228756e-01], + [ 9.84865203e-01, 7.28427497e-01, 1.20784651e-01], + [ 9.84075129e-01, 7.36086521e-01, 1.29526579e-01], + [ 9.83195992e-01, 7.43758326e-01, 1.38453063e-01], + [ 9.82228463e-01, 7.51441596e-01, 1.47564573e-01], + [ 9.81173457e-01, 7.59134892e-01, 1.56863224e-01], + [ 9.80032178e-01, 7.66836624e-01, 1.66352544e-01], + [ 9.78806183e-01, 7.74545028e-01, 1.76037298e-01], + [ 9.77497453e-01, 7.82258138e-01, 1.85923357e-01], + [ 9.76108474e-01, 7.89973753e-01, 1.96017589e-01], + [ 9.74637842e-01, 7.97691563e-01, 2.06331925e-01], + [ 9.73087939e-01, 8.05409333e-01, 2.16876839e-01], + [ 9.71467822e-01, 8.13121725e-01, 2.27658046e-01], + [ 9.69783146e-01, 8.20825143e-01, 2.38685942e-01], + [ 9.68040817e-01, 8.28515491e-01, 2.49971582e-01], + [ 9.66242589e-01, 8.36190976e-01, 2.61533898e-01], + [ 9.64393924e-01, 8.43848069e-01, 2.73391112e-01], + [ 9.62516656e-01, 8.51476340e-01, 2.85545675e-01], + [ 9.60625545e-01, 8.59068716e-01, 2.98010219e-01], + [ 9.58720088e-01, 8.66624355e-01, 3.10820466e-01], + [ 9.56834075e-01, 8.74128569e-01, 3.23973947e-01], + [ 9.54997177e-01, 8.81568926e-01, 3.37475479e-01], + [ 9.53215092e-01, 8.88942277e-01, 3.51368713e-01], + [ 9.51546225e-01, 8.96225909e-01, 3.65627005e-01], + [ 9.50018481e-01, 9.03409063e-01, 3.80271225e-01], + [ 9.48683391e-01, 9.10472964e-01, 3.95289169e-01], + [ 9.47594362e-01, 9.17399053e-01, 4.10665194e-01], + [ 9.46809163e-01, 9.24168246e-01, 4.26373236e-01], + [ 9.46391536e-01, 9.30760752e-01, 4.42367495e-01], + [ 9.46402951e-01, 9.37158971e-01, 4.58591507e-01], + [ 9.46902568e-01, 9.43347775e-01, 4.74969778e-01], + [ 9.47936825e-01, 9.49317522e-01, 4.91426053e-01], + [ 9.49544830e-01, 9.55062900e-01, 5.07859649e-01], + [ 9.51740304e-01, 9.60586693e-01, 5.24203026e-01], + [ 9.54529281e-01, 9.65895868e-01, 5.40360752e-01], + [ 9.57896053e-01, 9.71003330e-01, 5.56275090e-01], + [ 9.61812020e-01, 9.75924241e-01, 5.71925382e-01], + [ 9.66248822e-01, 9.80678193e-01, 5.87205773e-01], + [ 9.71161622e-01, 9.85282161e-01, 6.02154330e-01], + [ 9.76510983e-01, 9.89753437e-01, 6.16760413e-01], + [ 9.82257307e-01, 9.94108844e-01, 6.31017009e-01], + [ 9.88362068e-01, 9.98364143e-01, 6.44924005e-01]]; +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(144:end,1)=hsv(144:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/smallStuff/magma.m b/downloaded/ridgeModel-master/smallStuff/magma.m new file mode 100644 index 0000000..a8c3516 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/magma.m @@ -0,0 +1,271 @@ +function [cm_data]=magma(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.25764007e-03, 1.29495431e-03, 1.83311461e-02], + [ 3.27943222e-03, 2.30452991e-03, 2.37083291e-02], + [ 4.51230222e-03, 3.49037666e-03, 2.99647059e-02], + [ 5.94976987e-03, 4.84285000e-03, 3.71296695e-02], + [ 7.58798550e-03, 6.35613622e-03, 4.49730774e-02], + [ 9.42604390e-03, 8.02185006e-03, 5.28443561e-02], + [ 1.14654337e-02, 9.82831486e-03, 6.07496380e-02], + [ 1.37075706e-02, 1.17705913e-02, 6.86665843e-02], + [ 1.61557566e-02, 1.38404966e-02, 7.66026660e-02], + [ 1.88153670e-02, 1.60262753e-02, 8.45844897e-02], + [ 2.16919340e-02, 1.83201254e-02, 9.26101050e-02], + [ 2.47917814e-02, 2.07147875e-02, 1.00675555e-01], + [ 2.81228154e-02, 2.32009284e-02, 1.08786954e-01], + [ 3.16955304e-02, 2.57651161e-02, 1.16964722e-01], + [ 3.55204468e-02, 2.83974570e-02, 1.25209396e-01], + [ 3.96084872e-02, 3.10895652e-02, 1.33515085e-01], + [ 4.38295350e-02, 3.38299885e-02, 1.41886249e-01], + [ 4.80616391e-02, 3.66066101e-02, 1.50326989e-01], + [ 5.23204388e-02, 3.94066020e-02, 1.58841025e-01], + [ 5.66148978e-02, 4.21598925e-02, 1.67445592e-01], + [ 6.09493930e-02, 4.47944924e-02, 1.76128834e-01], + [ 6.53301801e-02, 4.73177796e-02, 1.84891506e-01], + [ 6.97637296e-02, 4.97264666e-02, 1.93735088e-01], + [ 7.42565152e-02, 5.20167766e-02, 2.02660374e-01], + [ 7.88150034e-02, 5.41844801e-02, 2.11667355e-01], + [ 8.34456313e-02, 5.62249365e-02, 2.20755099e-01], + [ 8.81547730e-02, 5.81331465e-02, 2.29921611e-01], + [ 9.29486914e-02, 5.99038167e-02, 2.39163669e-01], + [ 9.78334770e-02, 6.15314414e-02, 2.48476662e-01], + [ 1.02814972e-01, 6.30104053e-02, 2.57854400e-01], + [ 1.07898679e-01, 6.43351102e-02, 2.67288933e-01], + [ 1.13094451e-01, 6.54920358e-02, 2.76783978e-01], + [ 1.18405035e-01, 6.64791593e-02, 2.86320656e-01], + [ 1.23832651e-01, 6.72946449e-02, 2.95879431e-01], + [ 1.29380192e-01, 6.79349264e-02, 3.05442931e-01], + [ 1.35053322e-01, 6.83912798e-02, 3.14999890e-01], + [ 1.40857952e-01, 6.86540710e-02, 3.24537640e-01], + [ 1.46785234e-01, 6.87382323e-02, 3.34011109e-01], + [ 1.52839217e-01, 6.86368599e-02, 3.43404450e-01], + [ 1.59017511e-01, 6.83540225e-02, 3.52688028e-01], + [ 1.65308131e-01, 6.79108689e-02, 3.61816426e-01], + [ 1.71713033e-01, 6.73053260e-02, 3.70770827e-01], + [ 1.78211730e-01, 6.65758073e-02, 3.79497161e-01], + [ 1.84800877e-01, 6.57324381e-02, 3.87972507e-01], + [ 1.91459745e-01, 6.48183312e-02, 3.96151969e-01], + [ 1.98176877e-01, 6.38624166e-02, 4.04008953e-01], + [ 2.04934882e-01, 6.29066192e-02, 4.11514273e-01], + [ 2.11718061e-01, 6.19917876e-02, 4.18646741e-01], + [ 2.18511590e-01, 6.11584918e-02, 4.25391816e-01], + [ 2.25302032e-01, 6.04451843e-02, 4.31741767e-01], + [ 2.32076515e-01, 5.98886855e-02, 4.37694665e-01], + [ 2.38825991e-01, 5.95170384e-02, 4.43255999e-01], + [ 2.45543175e-01, 5.93524384e-02, 4.48435938e-01], + [ 2.52220252e-01, 5.94147119e-02, 4.53247729e-01], + [ 2.58857304e-01, 5.97055998e-02, 4.57709924e-01], + [ 2.65446744e-01, 6.02368754e-02, 4.61840297e-01], + [ 2.71994089e-01, 6.09935552e-02, 4.65660375e-01], + [ 2.78493300e-01, 6.19778136e-02, 4.69190328e-01], + [ 2.84951097e-01, 6.31676261e-02, 4.72450879e-01], + [ 2.91365817e-01, 6.45534486e-02, 4.75462193e-01], + [ 2.97740413e-01, 6.61170432e-02, 4.78243482e-01], + [ 3.04080941e-01, 6.78353452e-02, 4.80811572e-01], + [ 3.10382027e-01, 6.97024767e-02, 4.83186340e-01], + [ 3.16654235e-01, 7.16895272e-02, 4.85380429e-01], + [ 3.22899126e-01, 7.37819504e-02, 4.87408399e-01], + [ 3.29114038e-01, 7.59715081e-02, 4.89286796e-01], + [ 3.35307503e-01, 7.82361045e-02, 4.91024144e-01], + [ 3.41481725e-01, 8.05635079e-02, 4.92631321e-01], + [ 3.47635742e-01, 8.29463512e-02, 4.94120923e-01], + [ 3.53773161e-01, 8.53726329e-02, 4.95501096e-01], + [ 3.59897941e-01, 8.78311772e-02, 4.96778331e-01], + [ 3.66011928e-01, 9.03143031e-02, 4.97959963e-01], + [ 3.72116205e-01, 9.28159917e-02, 4.99053326e-01], + [ 3.78210547e-01, 9.53322947e-02, 5.00066568e-01], + [ 3.84299445e-01, 9.78549106e-02, 5.01001964e-01], + [ 3.90384361e-01, 1.00379466e-01, 5.01864236e-01], + [ 3.96466670e-01, 1.02902194e-01, 5.02657590e-01], + [ 4.02547663e-01, 1.05419865e-01, 5.03385761e-01], + [ 4.08628505e-01, 1.07929771e-01, 5.04052118e-01], + [ 4.14708664e-01, 1.10431177e-01, 5.04661843e-01], + [ 4.20791157e-01, 1.12920210e-01, 5.05214935e-01], + [ 4.26876965e-01, 1.15395258e-01, 5.05713602e-01], + [ 4.32967001e-01, 1.17854987e-01, 5.06159754e-01], + [ 4.39062114e-01, 1.20298314e-01, 5.06555026e-01], + [ 4.45163096e-01, 1.22724371e-01, 5.06900806e-01], + [ 4.51270678e-01, 1.25132484e-01, 5.07198258e-01], + [ 4.57385535e-01, 1.27522145e-01, 5.07448336e-01], + [ 4.63508291e-01, 1.29892998e-01, 5.07651812e-01], + [ 4.69639514e-01, 1.32244819e-01, 5.07809282e-01], + [ 4.75779723e-01, 1.34577500e-01, 5.07921193e-01], + [ 4.81928997e-01, 1.36891390e-01, 5.07988509e-01], + [ 4.88088169e-01, 1.39186217e-01, 5.08010737e-01], + [ 4.94257673e-01, 1.41462106e-01, 5.07987836e-01], + [ 5.00437834e-01, 1.43719323e-01, 5.07919772e-01], + [ 5.06628929e-01, 1.45958202e-01, 5.07806420e-01], + [ 5.12831195e-01, 1.48179144e-01, 5.07647570e-01], + [ 5.19044825e-01, 1.50382611e-01, 5.07442938e-01], + [ 5.25269968e-01, 1.52569121e-01, 5.07192172e-01], + [ 5.31506735e-01, 1.54739247e-01, 5.06894860e-01], + [ 5.37755194e-01, 1.56893613e-01, 5.06550538e-01], + [ 5.44015371e-01, 1.59032895e-01, 5.06158696e-01], + [ 5.50287252e-01, 1.61157816e-01, 5.05718782e-01], + [ 5.56570783e-01, 1.63269149e-01, 5.05230210e-01], + [ 5.62865867e-01, 1.65367714e-01, 5.04692365e-01], + [ 5.69172368e-01, 1.67454379e-01, 5.04104606e-01], + [ 5.75490107e-01, 1.69530062e-01, 5.03466273e-01], + [ 5.81818864e-01, 1.71595728e-01, 5.02776690e-01], + [ 5.88158375e-01, 1.73652392e-01, 5.02035167e-01], + [ 5.94508337e-01, 1.75701122e-01, 5.01241011e-01], + [ 6.00868399e-01, 1.77743036e-01, 5.00393522e-01], + [ 6.07238169e-01, 1.79779309e-01, 4.99491999e-01], + [ 6.13617209e-01, 1.81811170e-01, 4.98535746e-01], + [ 6.20005032e-01, 1.83839907e-01, 4.97524075e-01], + [ 6.26401108e-01, 1.85866869e-01, 4.96456304e-01], + [ 6.32804854e-01, 1.87893468e-01, 4.95331769e-01], + [ 6.39215638e-01, 1.89921182e-01, 4.94149821e-01], + [ 6.45632778e-01, 1.91951556e-01, 4.92909832e-01], + [ 6.52055535e-01, 1.93986210e-01, 4.91611196e-01], + [ 6.58483116e-01, 1.96026835e-01, 4.90253338e-01], + [ 6.64914668e-01, 1.98075202e-01, 4.88835712e-01], + [ 6.71349279e-01, 2.00133166e-01, 4.87357807e-01], + [ 6.77785975e-01, 2.02202663e-01, 4.85819154e-01], + [ 6.84223712e-01, 2.04285721e-01, 4.84219325e-01], + [ 6.90661380e-01, 2.06384461e-01, 4.82557941e-01], + [ 6.97097796e-01, 2.08501100e-01, 4.80834678e-01], + [ 7.03531700e-01, 2.10637956e-01, 4.79049270e-01], + [ 7.09961888e-01, 2.12797337e-01, 4.77201121e-01], + [ 7.16387038e-01, 2.14981693e-01, 4.75289780e-01], + [ 7.22805451e-01, 2.17193831e-01, 4.73315708e-01], + [ 7.29215521e-01, 2.19436516e-01, 4.71278924e-01], + [ 7.35615545e-01, 2.21712634e-01, 4.69179541e-01], + [ 7.42003713e-01, 2.24025196e-01, 4.67017774e-01], + [ 7.48378107e-01, 2.26377345e-01, 4.64793954e-01], + [ 7.54736692e-01, 2.28772352e-01, 4.62508534e-01], + [ 7.61077312e-01, 2.31213625e-01, 4.60162106e-01], + [ 7.67397681e-01, 2.33704708e-01, 4.57755411e-01], + [ 7.73695380e-01, 2.36249283e-01, 4.55289354e-01], + [ 7.79967847e-01, 2.38851170e-01, 4.52765022e-01], + [ 7.86212372e-01, 2.41514325e-01, 4.50183695e-01], + [ 7.92426972e-01, 2.44242250e-01, 4.47543155e-01], + [ 7.98607760e-01, 2.47039798e-01, 4.44848441e-01], + [ 8.04751511e-01, 2.49911350e-01, 4.42101615e-01], + [ 8.10854841e-01, 2.52861399e-01, 4.39304963e-01], + [ 8.16914186e-01, 2.55894550e-01, 4.36461074e-01], + [ 8.22925797e-01, 2.59015505e-01, 4.33572874e-01], + [ 8.28885740e-01, 2.62229049e-01, 4.30643647e-01], + [ 8.34790818e-01, 2.65539703e-01, 4.27671352e-01], + [ 8.40635680e-01, 2.68952874e-01, 4.24665620e-01], + [ 8.46415804e-01, 2.72473491e-01, 4.21631064e-01], + [ 8.52126490e-01, 2.76106469e-01, 4.18572767e-01], + [ 8.57762870e-01, 2.79856666e-01, 4.15496319e-01], + [ 8.63320397e-01, 2.83729003e-01, 4.12402889e-01], + [ 8.68793368e-01, 2.87728205e-01, 4.09303002e-01], + [ 8.74176342e-01, 2.91858679e-01, 4.06205397e-01], + [ 8.79463944e-01, 2.96124596e-01, 4.03118034e-01], + [ 8.84650824e-01, 3.00530090e-01, 4.00047060e-01], + [ 8.89731418e-01, 3.05078817e-01, 3.97001559e-01], + [ 8.94700194e-01, 3.09773445e-01, 3.93994634e-01], + [ 8.99551884e-01, 3.14616425e-01, 3.91036674e-01], + [ 9.04281297e-01, 3.19609981e-01, 3.88136889e-01], + [ 9.08883524e-01, 3.24755126e-01, 3.85308008e-01], + [ 9.13354091e-01, 3.30051947e-01, 3.82563414e-01], + [ 9.17688852e-01, 3.35500068e-01, 3.79915138e-01], + [ 9.21884187e-01, 3.41098112e-01, 3.77375977e-01], + [ 9.25937102e-01, 3.46843685e-01, 3.74959077e-01], + [ 9.29845090e-01, 3.52733817e-01, 3.72676513e-01], + [ 9.33606454e-01, 3.58764377e-01, 3.70540883e-01], + [ 9.37220874e-01, 3.64929312e-01, 3.68566525e-01], + [ 9.40687443e-01, 3.71224168e-01, 3.66761699e-01], + [ 9.44006448e-01, 3.77642889e-01, 3.65136328e-01], + [ 9.47179528e-01, 3.84177874e-01, 3.63701130e-01], + [ 9.50210150e-01, 3.90819546e-01, 3.62467694e-01], + [ 9.53099077e-01, 3.97562894e-01, 3.61438431e-01], + [ 9.55849237e-01, 4.04400213e-01, 3.60619076e-01], + [ 9.58464079e-01, 4.11323666e-01, 3.60014232e-01], + [ 9.60949221e-01, 4.18323245e-01, 3.59629789e-01], + [ 9.63310281e-01, 4.25389724e-01, 3.59469020e-01], + [ 9.65549351e-01, 4.32518707e-01, 3.59529151e-01], + [ 9.67671128e-01, 4.39702976e-01, 3.59810172e-01], + [ 9.69680441e-01, 4.46935635e-01, 3.60311120e-01], + [ 9.71582181e-01, 4.54210170e-01, 3.61030156e-01], + [ 9.73381238e-01, 4.61520484e-01, 3.61964652e-01], + [ 9.75082439e-01, 4.68860936e-01, 3.63111292e-01], + [ 9.76690494e-01, 4.76226350e-01, 3.64466162e-01], + [ 9.78209957e-01, 4.83612031e-01, 3.66024854e-01], + [ 9.79645181e-01, 4.91013764e-01, 3.67782559e-01], + [ 9.81000291e-01, 4.98427800e-01, 3.69734157e-01], + [ 9.82279159e-01, 5.05850848e-01, 3.71874301e-01], + [ 9.83485387e-01, 5.13280054e-01, 3.74197501e-01], + [ 9.84622298e-01, 5.20712972e-01, 3.76698186e-01], + [ 9.85692925e-01, 5.28147545e-01, 3.79370774e-01], + [ 9.86700017e-01, 5.35582070e-01, 3.82209724e-01], + [ 9.87646038e-01, 5.43015173e-01, 3.85209578e-01], + [ 9.88533173e-01, 5.50445778e-01, 3.88365009e-01], + [ 9.89363341e-01, 5.57873075e-01, 3.91670846e-01], + [ 9.90138201e-01, 5.65296495e-01, 3.95122099e-01], + [ 9.90871208e-01, 5.72706259e-01, 3.98713971e-01], + [ 9.91558165e-01, 5.80106828e-01, 4.02441058e-01], + [ 9.92195728e-01, 5.87501706e-01, 4.06298792e-01], + [ 9.92784669e-01, 5.94891088e-01, 4.10282976e-01], + [ 9.93325561e-01, 6.02275297e-01, 4.14389658e-01], + [ 9.93834412e-01, 6.09643540e-01, 4.18613221e-01], + [ 9.94308514e-01, 6.16998953e-01, 4.22949672e-01], + [ 9.94737698e-01, 6.24349657e-01, 4.27396771e-01], + [ 9.95121854e-01, 6.31696376e-01, 4.31951492e-01], + [ 9.95480469e-01, 6.39026596e-01, 4.36607159e-01], + [ 9.95809924e-01, 6.46343897e-01, 4.41360951e-01], + [ 9.96095703e-01, 6.53658756e-01, 4.46213021e-01], + [ 9.96341406e-01, 6.60969379e-01, 4.51160201e-01], + [ 9.96579803e-01, 6.68255621e-01, 4.56191814e-01], + [ 9.96774784e-01, 6.75541484e-01, 4.61314158e-01], + [ 9.96925427e-01, 6.82827953e-01, 4.66525689e-01], + [ 9.97077185e-01, 6.90087897e-01, 4.71811461e-01], + [ 9.97186253e-01, 6.97348991e-01, 4.77181727e-01], + [ 9.97253982e-01, 7.04610791e-01, 4.82634651e-01], + [ 9.97325180e-01, 7.11847714e-01, 4.88154375e-01], + [ 9.97350983e-01, 7.19089119e-01, 4.93754665e-01], + [ 9.97350583e-01, 7.26324415e-01, 4.99427972e-01], + [ 9.97341259e-01, 7.33544671e-01, 5.05166839e-01], + [ 9.97284689e-01, 7.40771893e-01, 5.10983331e-01], + [ 9.97228367e-01, 7.47980563e-01, 5.16859378e-01], + [ 9.97138480e-01, 7.55189852e-01, 5.22805996e-01], + [ 9.97019342e-01, 7.62397883e-01, 5.28820775e-01], + [ 9.96898254e-01, 7.69590975e-01, 5.34892341e-01], + [ 9.96726862e-01, 7.76794860e-01, 5.41038571e-01], + [ 9.96570645e-01, 7.83976508e-01, 5.47232992e-01], + [ 9.96369065e-01, 7.91167346e-01, 5.53498939e-01], + [ 9.96162309e-01, 7.98347709e-01, 5.59819643e-01], + [ 9.95932448e-01, 8.05527126e-01, 5.66201824e-01], + [ 9.95680107e-01, 8.12705773e-01, 5.72644795e-01], + [ 9.95423973e-01, 8.19875302e-01, 5.79140130e-01], + [ 9.95131288e-01, 8.27051773e-01, 5.85701463e-01], + [ 9.94851089e-01, 8.34212826e-01, 5.92307093e-01], + [ 9.94523666e-01, 8.41386618e-01, 5.98982818e-01], + [ 9.94221900e-01, 8.48540474e-01, 6.05695903e-01], + [ 9.93865767e-01, 8.55711038e-01, 6.12481798e-01], + [ 9.93545285e-01, 8.62858846e-01, 6.19299300e-01], + [ 9.93169558e-01, 8.70024467e-01, 6.26189463e-01], + [ 9.92830963e-01, 8.77168404e-01, 6.33109148e-01], + [ 9.92439881e-01, 8.84329694e-01, 6.40099465e-01], + [ 9.92089454e-01, 8.91469549e-01, 6.47116021e-01], + [ 9.91687744e-01, 8.98627050e-01, 6.54201544e-01], + [ 9.91331929e-01, 9.05762748e-01, 6.61308839e-01], + [ 9.90929685e-01, 9.12915010e-01, 6.68481201e-01], + [ 9.90569914e-01, 9.20048699e-01, 6.75674592e-01], + [ 9.90174637e-01, 9.27195612e-01, 6.82925602e-01], + [ 9.89814839e-01, 9.34328540e-01, 6.90198194e-01], + [ 9.89433736e-01, 9.41470354e-01, 6.97518628e-01], + [ 9.89077438e-01, 9.48604077e-01, 7.04862519e-01], + [ 9.88717064e-01, 9.55741520e-01, 7.12242232e-01], + [ 9.88367028e-01, 9.62878026e-01, 7.19648627e-01], + [ 9.88032885e-01, 9.70012413e-01, 7.27076773e-01], + [ 9.87690702e-01, 9.77154231e-01, 7.34536205e-01], + [ 9.87386827e-01, 9.84287561e-01, 7.42001547e-01], + [ 9.87052509e-01, 9.91437853e-01, 7.49504188e-01]]; + + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(170:end,1)=hsv(170:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end diff --git a/downloaded/ridgeModel-master/smallStuff/plasma.m b/downloaded/ridgeModel-master/smallStuff/plasma.m new file mode 100644 index 0000000..367fcb7 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/plasma.m @@ -0,0 +1,270 @@ +function cm_data=plasma(m) + +cm = [[ 5.03832136e-02, 2.98028976e-02, 5.27974883e-01], + [ 6.35363639e-02, 2.84259729e-02, 5.33123681e-01], + [ 7.53531234e-02, 2.72063728e-02, 5.38007001e-01], + [ 8.62217979e-02, 2.61253206e-02, 5.42657691e-01], + [ 9.63786097e-02, 2.51650976e-02, 5.47103487e-01], + [ 1.05979704e-01, 2.43092436e-02, 5.51367851e-01], + [ 1.15123641e-01, 2.35562500e-02, 5.55467728e-01], + [ 1.23902903e-01, 2.28781011e-02, 5.59423480e-01], + [ 1.32380720e-01, 2.22583774e-02, 5.63250116e-01], + [ 1.40603076e-01, 2.16866674e-02, 5.66959485e-01], + [ 1.48606527e-01, 2.11535876e-02, 5.70561711e-01], + [ 1.56420649e-01, 2.06507174e-02, 5.74065446e-01], + [ 1.64069722e-01, 2.01705326e-02, 5.77478074e-01], + [ 1.71573925e-01, 1.97063415e-02, 5.80805890e-01], + [ 1.78950212e-01, 1.92522243e-02, 5.84054243e-01], + [ 1.86212958e-01, 1.88029767e-02, 5.87227661e-01], + [ 1.93374449e-01, 1.83540593e-02, 5.90329954e-01], + [ 2.00445260e-01, 1.79015512e-02, 5.93364304e-01], + [ 2.07434551e-01, 1.74421086e-02, 5.96333341e-01], + [ 2.14350298e-01, 1.69729276e-02, 5.99239207e-01], + [ 2.21196750e-01, 1.64970484e-02, 6.02083323e-01], + [ 2.27982971e-01, 1.60071509e-02, 6.04867403e-01], + [ 2.34714537e-01, 1.55015065e-02, 6.07592438e-01], + [ 2.41396253e-01, 1.49791041e-02, 6.10259089e-01], + [ 2.48032377e-01, 1.44393586e-02, 6.12867743e-01], + [ 2.54626690e-01, 1.38820918e-02, 6.15418537e-01], + [ 2.61182562e-01, 1.33075156e-02, 6.17911385e-01], + [ 2.67702993e-01, 1.27162163e-02, 6.20345997e-01], + [ 2.74190665e-01, 1.21091423e-02, 6.22721903e-01], + [ 2.80647969e-01, 1.14875915e-02, 6.25038468e-01], + [ 2.87076059e-01, 1.08554862e-02, 6.27294975e-01], + [ 2.93477695e-01, 1.02128849e-02, 6.29490490e-01], + [ 2.99855122e-01, 9.56079551e-03, 6.31623923e-01], + [ 3.06209825e-01, 8.90185346e-03, 6.33694102e-01], + [ 3.12543124e-01, 8.23900704e-03, 6.35699759e-01], + [ 3.18856183e-01, 7.57551051e-03, 6.37639537e-01], + [ 3.25150025e-01, 6.91491734e-03, 6.39512001e-01], + [ 3.31425547e-01, 6.26107379e-03, 6.41315649e-01], + [ 3.37683446e-01, 5.61830889e-03, 6.43048936e-01], + [ 3.43924591e-01, 4.99053080e-03, 6.44710195e-01], + [ 3.50149699e-01, 4.38202557e-03, 6.46297711e-01], + [ 3.56359209e-01, 3.79781761e-03, 6.47809772e-01], + [ 3.62553473e-01, 3.24319591e-03, 6.49244641e-01], + [ 3.68732762e-01, 2.72370721e-03, 6.50600561e-01], + [ 3.74897270e-01, 2.24514897e-03, 6.51875762e-01], + [ 3.81047116e-01, 1.81356205e-03, 6.53068467e-01], + [ 3.87182639e-01, 1.43446923e-03, 6.54176761e-01], + [ 3.93304010e-01, 1.11388259e-03, 6.55198755e-01], + [ 3.99410821e-01, 8.59420809e-04, 6.56132835e-01], + [ 4.05502914e-01, 6.78091517e-04, 6.56977276e-01], + [ 4.11580082e-01, 5.77101735e-04, 6.57730380e-01], + [ 4.17642063e-01, 5.63847476e-04, 6.58390492e-01], + [ 4.23688549e-01, 6.45902780e-04, 6.58956004e-01], + [ 4.29719186e-01, 8.31008207e-04, 6.59425363e-01], + [ 4.35733575e-01, 1.12705875e-03, 6.59797077e-01], + [ 4.41732123e-01, 1.53984779e-03, 6.60069009e-01], + [ 4.47713600e-01, 2.07954744e-03, 6.60240367e-01], + [ 4.53677394e-01, 2.75470302e-03, 6.60309966e-01], + [ 4.59622938e-01, 3.57374415e-03, 6.60276655e-01], + [ 4.65549631e-01, 4.54518084e-03, 6.60139383e-01], + [ 4.71456847e-01, 5.67758762e-03, 6.59897210e-01], + [ 4.77343929e-01, 6.97958743e-03, 6.59549311e-01], + [ 4.83210198e-01, 8.45983494e-03, 6.59094989e-01], + [ 4.89054951e-01, 1.01269996e-02, 6.58533677e-01], + [ 4.94877466e-01, 1.19897486e-02, 6.57864946e-01], + [ 5.00677687e-01, 1.40550640e-02, 6.57087561e-01], + [ 5.06454143e-01, 1.63333443e-02, 6.56202294e-01], + [ 5.12206035e-01, 1.88332232e-02, 6.55209222e-01], + [ 5.17932580e-01, 2.15631918e-02, 6.54108545e-01], + [ 5.23632990e-01, 2.45316468e-02, 6.52900629e-01], + [ 5.29306474e-01, 2.77468735e-02, 6.51586010e-01], + [ 5.34952244e-01, 3.12170300e-02, 6.50165396e-01], + [ 5.40569510e-01, 3.49501310e-02, 6.48639668e-01], + [ 5.46157494e-01, 3.89540334e-02, 6.47009884e-01], + [ 5.51715423e-01, 4.31364795e-02, 6.45277275e-01], + [ 5.57242538e-01, 4.73307585e-02, 6.43443250e-01], + [ 5.62738096e-01, 5.15448092e-02, 6.41509389e-01], + [ 5.68201372e-01, 5.57776706e-02, 6.39477440e-01], + [ 5.73631859e-01, 6.00281369e-02, 6.37348841e-01], + [ 5.79028682e-01, 6.42955547e-02, 6.35126108e-01], + [ 5.84391137e-01, 6.85790261e-02, 6.32811608e-01], + [ 5.89718606e-01, 7.28775875e-02, 6.30407727e-01], + [ 5.95010505e-01, 7.71902878e-02, 6.27916992e-01], + [ 6.00266283e-01, 8.15161895e-02, 6.25342058e-01], + [ 6.05485428e-01, 8.58543713e-02, 6.22685703e-01], + [ 6.10667469e-01, 9.02039303e-02, 6.19950811e-01], + [ 6.15811974e-01, 9.45639838e-02, 6.17140367e-01], + [ 6.20918555e-01, 9.89336721e-02, 6.14257440e-01], + [ 6.25986869e-01, 1.03312160e-01, 6.11305174e-01], + [ 6.31016615e-01, 1.07698641e-01, 6.08286774e-01], + [ 6.36007543e-01, 1.12092335e-01, 6.05205491e-01], + [ 6.40959444e-01, 1.16492495e-01, 6.02064611e-01], + [ 6.45872158e-01, 1.20898405e-01, 5.98867442e-01], + [ 6.50745571e-01, 1.25309384e-01, 5.95617300e-01], + [ 6.55579615e-01, 1.29724785e-01, 5.92317494e-01], + [ 6.60374266e-01, 1.34143997e-01, 5.88971318e-01], + [ 6.65129493e-01, 1.38566428e-01, 5.85582301e-01], + [ 6.69845385e-01, 1.42991540e-01, 5.82153572e-01], + [ 6.74522060e-01, 1.47418835e-01, 5.78688247e-01], + [ 6.79159664e-01, 1.51847851e-01, 5.75189431e-01], + [ 6.83758384e-01, 1.56278163e-01, 5.71660158e-01], + [ 6.88318440e-01, 1.60709387e-01, 5.68103380e-01], + [ 6.92840088e-01, 1.65141174e-01, 5.64521958e-01], + [ 6.97323615e-01, 1.69573215e-01, 5.60918659e-01], + [ 7.01769334e-01, 1.74005236e-01, 5.57296144e-01], + [ 7.06177590e-01, 1.78437000e-01, 5.53656970e-01], + [ 7.10548747e-01, 1.82868306e-01, 5.50003579e-01], + [ 7.14883195e-01, 1.87298986e-01, 5.46338299e-01], + [ 7.19181339e-01, 1.91728906e-01, 5.42663338e-01], + [ 7.23443604e-01, 1.96157962e-01, 5.38980786e-01], + [ 7.27670428e-01, 2.00586086e-01, 5.35292612e-01], + [ 7.31862231e-01, 2.05013174e-01, 5.31600995e-01], + [ 7.36019424e-01, 2.09439071e-01, 5.27908434e-01], + [ 7.40142557e-01, 2.13863965e-01, 5.24215533e-01], + [ 7.44232102e-01, 2.18287899e-01, 5.20523766e-01], + [ 7.48288533e-01, 2.22710942e-01, 5.16834495e-01], + [ 7.52312321e-01, 2.27133187e-01, 5.13148963e-01], + [ 7.56303937e-01, 2.31554749e-01, 5.09468305e-01], + [ 7.60263849e-01, 2.35975765e-01, 5.05793543e-01], + [ 7.64192516e-01, 2.40396394e-01, 5.02125599e-01], + [ 7.68090391e-01, 2.44816813e-01, 4.98465290e-01], + [ 7.71957916e-01, 2.49237220e-01, 4.94813338e-01], + [ 7.75795522e-01, 2.53657797e-01, 4.91170517e-01], + [ 7.79603614e-01, 2.58078397e-01, 4.87539124e-01], + [ 7.83382636e-01, 2.62499662e-01, 4.83917732e-01], + [ 7.87132978e-01, 2.66921859e-01, 4.80306702e-01], + [ 7.90855015e-01, 2.71345267e-01, 4.76706319e-01], + [ 7.94549101e-01, 2.75770179e-01, 4.73116798e-01], + [ 7.98215577e-01, 2.80196901e-01, 4.69538286e-01], + [ 8.01854758e-01, 2.84625750e-01, 4.65970871e-01], + [ 8.05466945e-01, 2.89057057e-01, 4.62414580e-01], + [ 8.09052419e-01, 2.93491117e-01, 4.58869577e-01], + [ 8.12611506e-01, 2.97927865e-01, 4.55337565e-01], + [ 8.16144382e-01, 3.02368130e-01, 4.51816385e-01], + [ 8.19651255e-01, 3.06812282e-01, 4.48305861e-01], + [ 8.23132309e-01, 3.11260703e-01, 4.44805781e-01], + [ 8.26587706e-01, 3.15713782e-01, 4.41315901e-01], + [ 8.30017584e-01, 3.20171913e-01, 4.37835947e-01], + [ 8.33422053e-01, 3.24635499e-01, 4.34365616e-01], + [ 8.36801237e-01, 3.29104836e-01, 4.30905052e-01], + [ 8.40155276e-01, 3.33580106e-01, 4.27454836e-01], + [ 8.43484103e-01, 3.38062109e-01, 4.24013059e-01], + [ 8.46787726e-01, 3.42551272e-01, 4.20579333e-01], + [ 8.50066132e-01, 3.47048028e-01, 4.17153264e-01], + [ 8.53319279e-01, 3.51552815e-01, 4.13734445e-01], + [ 8.56547103e-01, 3.56066072e-01, 4.10322469e-01], + [ 8.59749520e-01, 3.60588229e-01, 4.06916975e-01], + [ 8.62926559e-01, 3.65119408e-01, 4.03518809e-01], + [ 8.66077920e-01, 3.69660446e-01, 4.00126027e-01], + [ 8.69203436e-01, 3.74211795e-01, 3.96738211e-01], + [ 8.72302917e-01, 3.78773910e-01, 3.93354947e-01], + [ 8.75376149e-01, 3.83347243e-01, 3.89975832e-01], + [ 8.78422895e-01, 3.87932249e-01, 3.86600468e-01], + [ 8.81442916e-01, 3.92529339e-01, 3.83228622e-01], + [ 8.84435982e-01, 3.97138877e-01, 3.79860246e-01], + [ 8.87401682e-01, 4.01761511e-01, 3.76494232e-01], + [ 8.90339687e-01, 4.06397694e-01, 3.73130228e-01], + [ 8.93249647e-01, 4.11047871e-01, 3.69767893e-01], + [ 8.96131191e-01, 4.15712489e-01, 3.66406907e-01], + [ 8.98983931e-01, 4.20391986e-01, 3.63046965e-01], + [ 9.01807455e-01, 4.25086807e-01, 3.59687758e-01], + [ 9.04601295e-01, 4.29797442e-01, 3.56328796e-01], + [ 9.07364995e-01, 4.34524335e-01, 3.52969777e-01], + [ 9.10098088e-01, 4.39267908e-01, 3.49610469e-01], + [ 9.12800095e-01, 4.44028574e-01, 3.46250656e-01], + [ 9.15470518e-01, 4.48806744e-01, 3.42890148e-01], + [ 9.18108848e-01, 4.53602818e-01, 3.39528771e-01], + [ 9.20714383e-01, 4.58417420e-01, 3.36165582e-01], + [ 9.23286660e-01, 4.63250828e-01, 3.32800827e-01], + [ 9.25825146e-01, 4.68103387e-01, 3.29434512e-01], + [ 9.28329275e-01, 4.72975465e-01, 3.26066550e-01], + [ 9.30798469e-01, 4.77867420e-01, 3.22696876e-01], + [ 9.33232140e-01, 4.82779603e-01, 3.19325444e-01], + [ 9.35629684e-01, 4.87712357e-01, 3.15952211e-01], + [ 9.37990034e-01, 4.92666544e-01, 3.12575440e-01], + [ 9.40312939e-01, 4.97642038e-01, 3.09196628e-01], + [ 9.42597771e-01, 5.02639147e-01, 3.05815824e-01], + [ 9.44843893e-01, 5.07658169e-01, 3.02433101e-01], + [ 9.47050662e-01, 5.12699390e-01, 2.99048555e-01], + [ 9.49217427e-01, 5.17763087e-01, 2.95662308e-01], + [ 9.51343530e-01, 5.22849522e-01, 2.92274506e-01], + [ 9.53427725e-01, 5.27959550e-01, 2.88883445e-01], + [ 9.55469640e-01, 5.33093083e-01, 2.85490391e-01], + [ 9.57468770e-01, 5.38250172e-01, 2.82096149e-01], + [ 9.59424430e-01, 5.43431038e-01, 2.78700990e-01], + [ 9.61335930e-01, 5.48635890e-01, 2.75305214e-01], + [ 9.63202573e-01, 5.53864931e-01, 2.71909159e-01], + [ 9.65023656e-01, 5.59118349e-01, 2.68513200e-01], + [ 9.66798470e-01, 5.64396327e-01, 2.65117752e-01], + [ 9.68525639e-01, 5.69699633e-01, 2.61721488e-01], + [ 9.70204593e-01, 5.75028270e-01, 2.58325424e-01], + [ 9.71835007e-01, 5.80382015e-01, 2.54931256e-01], + [ 9.73416145e-01, 5.85761012e-01, 2.51539615e-01], + [ 9.74947262e-01, 5.91165394e-01, 2.48151200e-01], + [ 9.76427606e-01, 5.96595287e-01, 2.44766775e-01], + [ 9.77856416e-01, 6.02050811e-01, 2.41387186e-01], + [ 9.79232922e-01, 6.07532077e-01, 2.38013359e-01], + [ 9.80556344e-01, 6.13039190e-01, 2.34646316e-01], + [ 9.81825890e-01, 6.18572250e-01, 2.31287178e-01], + [ 9.83040742e-01, 6.24131362e-01, 2.27937141e-01], + [ 9.84198924e-01, 6.29717516e-01, 2.24595006e-01], + [ 9.85300760e-01, 6.35329876e-01, 2.21264889e-01], + [ 9.86345421e-01, 6.40968508e-01, 2.17948456e-01], + [ 9.87332067e-01, 6.46633475e-01, 2.14647532e-01], + [ 9.88259846e-01, 6.52324832e-01, 2.11364122e-01], + [ 9.89127893e-01, 6.58042630e-01, 2.08100426e-01], + [ 9.89935328e-01, 6.63786914e-01, 2.04858855e-01], + [ 9.90681261e-01, 6.69557720e-01, 2.01642049e-01], + [ 9.91364787e-01, 6.75355082e-01, 1.98452900e-01], + [ 9.91984990e-01, 6.81179025e-01, 1.95294567e-01], + [ 9.92540939e-01, 6.87029567e-01, 1.92170500e-01], + [ 9.93031693e-01, 6.92906719e-01, 1.89084459e-01], + [ 9.93456302e-01, 6.98810484e-01, 1.86040537e-01], + [ 9.93813802e-01, 7.04740854e-01, 1.83043180e-01], + [ 9.94103226e-01, 7.10697814e-01, 1.80097207e-01], + [ 9.94323596e-01, 7.16681336e-01, 1.77207826e-01], + [ 9.94473934e-01, 7.22691379e-01, 1.74380656e-01], + [ 9.94553260e-01, 7.28727890e-01, 1.71621733e-01], + [ 9.94560594e-01, 7.34790799e-01, 1.68937522e-01], + [ 9.94494964e-01, 7.40880020e-01, 1.66334918e-01], + [ 9.94355411e-01, 7.46995448e-01, 1.63821243e-01], + [ 9.94140989e-01, 7.53136955e-01, 1.61404226e-01], + [ 9.93850778e-01, 7.59304390e-01, 1.59091984e-01], + [ 9.93482190e-01, 7.65498551e-01, 1.56890625e-01], + [ 9.93033251e-01, 7.71719833e-01, 1.54807583e-01], + [ 9.92505214e-01, 7.77966775e-01, 1.52854862e-01], + [ 9.91897270e-01, 7.84239120e-01, 1.51041581e-01], + [ 9.91208680e-01, 7.90536569e-01, 1.49376885e-01], + [ 9.90438793e-01, 7.96858775e-01, 1.47869810e-01], + [ 9.89587065e-01, 8.03205337e-01, 1.46529128e-01], + [ 9.88647741e-01, 8.09578605e-01, 1.45357284e-01], + [ 9.87620557e-01, 8.15977942e-01, 1.44362644e-01], + [ 9.86509366e-01, 8.22400620e-01, 1.43556679e-01], + [ 9.85314198e-01, 8.28845980e-01, 1.42945116e-01], + [ 9.84031139e-01, 8.35315360e-01, 1.42528388e-01], + [ 9.82652820e-01, 8.41811730e-01, 1.42302653e-01], + [ 9.81190389e-01, 8.48328902e-01, 1.42278607e-01], + [ 9.79643637e-01, 8.54866468e-01, 1.42453425e-01], + [ 9.77994918e-01, 8.61432314e-01, 1.42808191e-01], + [ 9.76264977e-01, 8.68015998e-01, 1.43350944e-01], + [ 9.74443038e-01, 8.74622194e-01, 1.44061156e-01], + [ 9.72530009e-01, 8.81250063e-01, 1.44922913e-01], + [ 9.70532932e-01, 8.87896125e-01, 1.45918663e-01], + [ 9.68443477e-01, 8.94563989e-01, 1.47014438e-01], + [ 9.66271225e-01, 9.01249365e-01, 1.48179639e-01], + [ 9.64021057e-01, 9.07950379e-01, 1.49370428e-01], + [ 9.61681481e-01, 9.14672479e-01, 1.50520343e-01], + [ 9.59275646e-01, 9.21406537e-01, 1.51566019e-01], + [ 9.56808068e-01, 9.28152065e-01, 1.52409489e-01], + [ 9.54286813e-01, 9.34907730e-01, 1.52921158e-01], + [ 9.51726083e-01, 9.41670605e-01, 1.52925363e-01], + [ 9.49150533e-01, 9.48434900e-01, 1.52177604e-01], + [ 9.46602270e-01, 9.55189860e-01, 1.50327944e-01], + [ 9.44151742e-01, 9.61916487e-01, 1.46860789e-01], + [ 9.41896120e-01, 9.68589814e-01, 1.40955606e-01], + [ 9.40015097e-01, 9.75158357e-01, 1.31325517e-01]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(153:end,1)=hsv(153:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/smallStuff/regressorBoxPlot.m b/downloaded/ridgeModel-master/smallStuff/regressorBoxPlot.m new file mode 100644 index 0000000..3774156 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/regressorBoxPlot.m @@ -0,0 +1,85 @@ +function [ax, allInd] = regressorBoxPlot(cData,recLabels,tickDist,ax,aColor,idx,bWidth,yWidth) + +if ~exist('tickDist', 'var') || isempty(tickDist) + tickDist = 10; +end + +if ~exist('ax', 'var') || isempty(ax) + ax = []; + figure; + ax = subplot(2,2,1:2); +end + +aLine = 3; + +if ~exist('aColor', 'var') || isempty(aColor) + aColor = 'k'; + aLine = 3; +else +end + +if ~exist('idx', 'var') + idx = []; +end + +if ~exist('bWidth', 'var') + bWidth = 1; +end + +if ~exist('yWidth', 'var') + yWidth = [0 0.5]; +end + +showRec = false; +cData = squeeze(cData); +dMean = nanmedian(cData,1); +dSem = nansem(cData,1); +if isempty(idx) + [~,idx] = sort(dMean,'ascend'); + allInd = []; +elseif iscell(idx) + allInd = idx; + idx = cat(2,allInd{:}); + showRec = true; +elseif ~islogical(idx) + mods = unique(idx(idx > 0)); + for x = 1:length(unique(idx(idx > 0))) + [~, mIdx{x}] = sort(dMean(idx == mods(x)),'ascend'); + allInd{x} = find(idx == mods(x)); + allInd{x} = allInd{x}(mIdx{x}); + end + idx = cat(2,allInd{:}); + showRec = true; +end +axisLabel = recLabels(idx); + +hold on +% % dPts = errorbar(dMean(idx),dSem(idx),'color','k','Marker','.','linestyle','none','lineWidth',aLine,'MarkerSize',10); +% dPts = errorbar(dMean(idx),dSem(idx),'k-','linestyle','none','lineWidth',aLine); +% bar(dMean(idx),'FaceColor',aColor,'EdgeColor','k','BarWidth',bWidth,'LineWidth',2); + +boxplot(cData(:,idx), 'Color',aColor) + +% if length(ax.Children) <= 2 + set(ax,'xTick',1:size(dMean,2)) + set(ax,'xTickLabel',axisLabel) + set(ax,'XTickLabelRotation',45) + ax.TickLength = [0 0];% +% [~,b] = histcounts(dMean(idx),tickDist); + % set(ax,'yTick',(unique([fliplr(dPts.YData(1):-mean(diff(b)):ax.YLim(1)) dPts.YData(1):mean(diff(b)):ax.YLim(2)]))); + set(ax,'XLim',[0 length(axisLabel)+1]) + grid on; +% end +ax.YLim(1) = yWidth(1); +ax.YLim(2) = yWidth(2); + +if showRec + rColor = colormap('lines'); + a = get(gca,'YLim'); + rCnt = 0; + for x = 1 : length(allInd) + y(x) = rectangle('Position',[rCnt+0.5, a(1), length(allInd{x}), diff(a)],'EdgeColor',rColor(x,:),'LineWidth',3); + rCnt = rCnt+length(allInd{x})+0.05; + end + uistack(y,'bottom'); +end diff --git a/downloaded/ridgeModel-master/smallStuff/selectBehaviorTrials.m b/downloaded/ridgeModel-master/smallStuff/selectBehaviorTrials.m new file mode 100644 index 0000000..91202e7 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/selectBehaviorTrials.m @@ -0,0 +1,62 @@ +function bhv = selectBehaviorTrials(bhv,trials) +% Function to select a subset of trials/settings from selected 'trials' in a +% larger array 'bhv' that has behavioral data. 'trials' should be a vector of +% trial numbers that can be used. +% Usage: bhv = selectBehaviorTrials(bhv,trials) + +%% get fieldnames +if isempty(bhv) + bFields = {}; +else + bFields = fieldnames(bhv); +end +bhv.nTrials = sum(bhv.nTrials); + +%% check if trials is logical index. If not create index that matches trials in bhv. +if ~islogical(trials) + temp = false(1,bhv.nTrials); + temp(trials) = true; + + if length(temp) ~= bhv.nTrials + warning('Trial index is larger as available trials in behavioral dataset') + trials = temp(1:bhv.nTrials); + else + trials = temp; + end +else + if length(trials) ~= bhv.nTrials + warning('Trial index has different length as available trials in behavioral dataset') + trials = trials(1:bhv.nTrials); + end +end +bhv.nTrials = sum(trials); + +%% cycle trough fields and carry over selected trials / sessions +for iFields = 1:size(bFields,1) + if ~any(ismember(size(bhv.(bFields{iFields})), length(trials))) %if field does not contain single trials, it should contain session data instead + if isstruct(bhv.(bFields{iFields})) %if field is a struct, check one layer deeper if it contains trial info + tFields = fieldnames(bhv.(bFields{iFields})); + if length(bhv.(bFields{iFields}).(tFields{1})) == length(trials) + bhv.(bFields{iFields}).(tFields{1}) = bhv.(bFields{iFields}).(tFields{1})(trials); + else + bhv.(bFields{iFields}) = bhv.(bFields{iFields}); %carry over complete field + end + else + bhv.(bFields{iFields}) = bhv.(bFields{iFields}); %carry over complete field + end + else + if isvector(bhv.(bFields{iFields})) + bhv.(bFields{iFields}) = bhv.(bFields{iFields})(trials); %carry over selected trials + else %some highD matrix, find trial dimension, cut trials and reshape to match original matrix + cIdx = find(ismember(size(bhv.(bFields{iFields})), length(trials))); %find trial dimension + cSize = size(bhv.(bFields{iFields})); + cSize(cIdx) = sum(trials); + temp = reshape(bhv.(bFields{iFields}), sum(cSize(1:cIdx-1)), cSize(cIdx), []); + if cIdx == 1 + bhv.(bFields{iFields}) = reshape(temp(trials,:),cSize); + else + bhv.(bFields{iFields}) = reshape(temp(:,trials,:),cSize); + end + end + end +end diff --git a/downloaded/ridgeModel-master/smallStuff/stdshade.m b/downloaded/ridgeModel-master/smallStuff/stdshade.m new file mode 100644 index 0000000..15a1514 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/stdshade.m @@ -0,0 +1,73 @@ +% function cLine = stdshade(amatrix,acolor,F,alpha,smth,varargin) +function stdshade(amatrix,alpha,acolor,F,smth,varargin) +% usage: stdshade(amatrix,acolor,F,alpha,smth) +% plot mean and sem/std coming from a matrix of data, at which each row is an +% observation. sem/std is shown as shading. +% - amatrix is a data matrix (observations,datalength) +% - acolor defines the used color (default is red) +% - F assignes the used x axis (default is steps of 1). +% - alpha defines transparency of the shading (default is no shading and black mean line) +% - smth defines the smoothing factor (default is no smooth) +% smusall 2010/4/23 +% +% Edit: Optionally added possibility to define amean and astd as additional +% input: stdshade(amatrix,acolor,F,alpha,smth,amean,astd) +% + +if exist('acolor','var')==0 || isempty(acolor) + acolor='r'; +end + +if exist('F','var')==0 || isempty(F) + F=1:size(amatrix,2); +end + +if exist('smth','var'); if isempty(smth); smth=1; end +else smth=1; +end + +if ne(size(F,1),1) + F=F'; +end + +if length(varargin)==2 + amean=smooth(varargin{1},smth)'; + astd=smooth(varargin{2},smth)'; +else + if size(amatrix,1) == 1 || size(amatrix,2) == 1 + amean(1,:) = amatrix; + astd = zeros(1,length(amean)); + F = 1 : length(amean); + else + amean=smooth(nanmean(amatrix,1),smth)'; + astd=nanstd(amatrix)/sqrt(size(amatrix,1)); % to get sem shading + astd(isnan(astd)) = 0; + end + % astd=nanstd(amatrix); % to get std shading +end + +lineMean = amean; +amean = fillmissing(amean, 'previous'); + +if exist('alpha','var')==0 || isempty(alpha) + fill([F fliplr(F)],[amean+astd fliplr(amean-astd)],acolor,'linestyle','none'); + acolor='k'; +else + fill([F fliplr(F)],[amean+astd fliplr(amean-astd)],acolor, 'FaceAlpha', alpha,'linestyle','none'); +end + +if ishold==0 + check=true; else check=false; +end + +hold on; +cLine = plot(F,lineMean,'color',acolor,'linewidth',1.5); %% change color or linewidth to adjust mean line + +if check + hold off; +end + +end + + + diff --git a/downloaded/ridgeModel-master/smallStuff/viridis.m b/downloaded/ridgeModel-master/smallStuff/viridis.m new file mode 100644 index 0000000..6b85a81 --- /dev/null +++ b/downloaded/ridgeModel-master/smallStuff/viridis.m @@ -0,0 +1,267 @@ +function cm_data=viridis(m) +cm = [[ 0.26700401, 0.00487433, 0.32941519], + [ 0.26851048, 0.00960483, 0.33542652], + [ 0.26994384, 0.01462494, 0.34137895], + [ 0.27130489, 0.01994186, 0.34726862], + [ 0.27259384, 0.02556309, 0.35309303], + [ 0.27380934, 0.03149748, 0.35885256], + [ 0.27495242, 0.03775181, 0.36454323], + [ 0.27602238, 0.04416723, 0.37016418], + [ 0.2770184 , 0.05034437, 0.37571452], + [ 0.27794143, 0.05632444, 0.38119074], + [ 0.27879067, 0.06214536, 0.38659204], + [ 0.2795655 , 0.06783587, 0.39191723], + [ 0.28026658, 0.07341724, 0.39716349], + [ 0.28089358, 0.07890703, 0.40232944], + [ 0.28144581, 0.0843197 , 0.40741404], + [ 0.28192358, 0.08966622, 0.41241521], + [ 0.28232739, 0.09495545, 0.41733086], + [ 0.28265633, 0.10019576, 0.42216032], + [ 0.28291049, 0.10539345, 0.42690202], + [ 0.28309095, 0.11055307, 0.43155375], + [ 0.28319704, 0.11567966, 0.43611482], + [ 0.28322882, 0.12077701, 0.44058404], + [ 0.28318684, 0.12584799, 0.44496 ], + [ 0.283072 , 0.13089477, 0.44924127], + [ 0.28288389, 0.13592005, 0.45342734], + [ 0.28262297, 0.14092556, 0.45751726], + [ 0.28229037, 0.14591233, 0.46150995], + [ 0.28188676, 0.15088147, 0.46540474], + [ 0.28141228, 0.15583425, 0.46920128], + [ 0.28086773, 0.16077132, 0.47289909], + [ 0.28025468, 0.16569272, 0.47649762], + [ 0.27957399, 0.17059884, 0.47999675], + [ 0.27882618, 0.1754902 , 0.48339654], + [ 0.27801236, 0.18036684, 0.48669702], + [ 0.27713437, 0.18522836, 0.48989831], + [ 0.27619376, 0.19007447, 0.49300074], + [ 0.27519116, 0.1949054 , 0.49600488], + [ 0.27412802, 0.19972086, 0.49891131], + [ 0.27300596, 0.20452049, 0.50172076], + [ 0.27182812, 0.20930306, 0.50443413], + [ 0.27059473, 0.21406899, 0.50705243], + [ 0.26930756, 0.21881782, 0.50957678], + [ 0.26796846, 0.22354911, 0.5120084 ], + [ 0.26657984, 0.2282621 , 0.5143487 ], + [ 0.2651445 , 0.23295593, 0.5165993 ], + [ 0.2636632 , 0.23763078, 0.51876163], + [ 0.26213801, 0.24228619, 0.52083736], + [ 0.26057103, 0.2469217 , 0.52282822], + [ 0.25896451, 0.25153685, 0.52473609], + [ 0.25732244, 0.2561304 , 0.52656332], + [ 0.25564519, 0.26070284, 0.52831152], + [ 0.25393498, 0.26525384, 0.52998273], + [ 0.25219404, 0.26978306, 0.53157905], + [ 0.25042462, 0.27429024, 0.53310261], + [ 0.24862899, 0.27877509, 0.53455561], + [ 0.2468114 , 0.28323662, 0.53594093], + [ 0.24497208, 0.28767547, 0.53726018], + [ 0.24311324, 0.29209154, 0.53851561], + [ 0.24123708, 0.29648471, 0.53970946], + [ 0.23934575, 0.30085494, 0.54084398], + [ 0.23744138, 0.30520222, 0.5419214 ], + [ 0.23552606, 0.30952657, 0.54294396], + [ 0.23360277, 0.31382773, 0.54391424], + [ 0.2316735 , 0.3181058 , 0.54483444], + [ 0.22973926, 0.32236127, 0.54570633], + [ 0.22780192, 0.32659432, 0.546532 ], + [ 0.2258633 , 0.33080515, 0.54731353], + [ 0.22392515, 0.334994 , 0.54805291], + [ 0.22198915, 0.33916114, 0.54875211], + [ 0.22005691, 0.34330688, 0.54941304], + [ 0.21812995, 0.34743154, 0.55003755], + [ 0.21620971, 0.35153548, 0.55062743], + [ 0.21429757, 0.35561907, 0.5511844 ], + [ 0.21239477, 0.35968273, 0.55171011], + [ 0.2105031 , 0.36372671, 0.55220646], + [ 0.20862342, 0.36775151, 0.55267486], + [ 0.20675628, 0.37175775, 0.55311653], + [ 0.20490257, 0.37574589, 0.55353282], + [ 0.20306309, 0.37971644, 0.55392505], + [ 0.20123854, 0.38366989, 0.55429441], + [ 0.1994295 , 0.38760678, 0.55464205], + [ 0.1976365 , 0.39152762, 0.55496905], + [ 0.19585993, 0.39543297, 0.55527637], + [ 0.19410009, 0.39932336, 0.55556494], + [ 0.19235719, 0.40319934, 0.55583559], + [ 0.19063135, 0.40706148, 0.55608907], + [ 0.18892259, 0.41091033, 0.55632606], + [ 0.18723083, 0.41474645, 0.55654717], + [ 0.18555593, 0.4185704 , 0.55675292], + [ 0.18389763, 0.42238275, 0.55694377], + [ 0.18225561, 0.42618405, 0.5571201 ], + [ 0.18062949, 0.42997486, 0.55728221], + [ 0.17901879, 0.43375572, 0.55743035], + [ 0.17742298, 0.4375272 , 0.55756466], + [ 0.17584148, 0.44128981, 0.55768526], + [ 0.17427363, 0.4450441 , 0.55779216], + [ 0.17271876, 0.4487906 , 0.55788532], + [ 0.17117615, 0.4525298 , 0.55796464], + [ 0.16964573, 0.45626209, 0.55803034], + [ 0.16812641, 0.45998802, 0.55808199], + [ 0.1666171 , 0.46370813, 0.55811913], + [ 0.16511703, 0.4674229 , 0.55814141], + [ 0.16362543, 0.47113278, 0.55814842], + [ 0.16214155, 0.47483821, 0.55813967], + [ 0.16066467, 0.47853961, 0.55811466], + [ 0.15919413, 0.4822374 , 0.5580728 ], + [ 0.15772933, 0.48593197, 0.55801347], + [ 0.15626973, 0.4896237 , 0.557936 ], + [ 0.15481488, 0.49331293, 0.55783967], + [ 0.15336445, 0.49700003, 0.55772371], + [ 0.1519182 , 0.50068529, 0.55758733], + [ 0.15047605, 0.50436904, 0.55742968], + [ 0.14903918, 0.50805136, 0.5572505 ], + [ 0.14760731, 0.51173263, 0.55704861], + [ 0.14618026, 0.51541316, 0.55682271], + [ 0.14475863, 0.51909319, 0.55657181], + [ 0.14334327, 0.52277292, 0.55629491], + [ 0.14193527, 0.52645254, 0.55599097], + [ 0.14053599, 0.53013219, 0.55565893], + [ 0.13914708, 0.53381201, 0.55529773], + [ 0.13777048, 0.53749213, 0.55490625], + [ 0.1364085 , 0.54117264, 0.55448339], + [ 0.13506561, 0.54485335, 0.55402906], + [ 0.13374299, 0.54853458, 0.55354108], + [ 0.13244401, 0.55221637, 0.55301828], + [ 0.13117249, 0.55589872, 0.55245948], + [ 0.1299327 , 0.55958162, 0.55186354], + [ 0.12872938, 0.56326503, 0.55122927], + [ 0.12756771, 0.56694891, 0.55055551], + [ 0.12645338, 0.57063316, 0.5498411 ], + [ 0.12539383, 0.57431754, 0.54908564], + [ 0.12439474, 0.57800205, 0.5482874 ], + [ 0.12346281, 0.58168661, 0.54744498], + [ 0.12260562, 0.58537105, 0.54655722], + [ 0.12183122, 0.58905521, 0.54562298], + [ 0.12114807, 0.59273889, 0.54464114], + [ 0.12056501, 0.59642187, 0.54361058], + [ 0.12009154, 0.60010387, 0.54253043], + [ 0.11973756, 0.60378459, 0.54139999], + [ 0.11951163, 0.60746388, 0.54021751], + [ 0.11942341, 0.61114146, 0.53898192], + [ 0.11948255, 0.61481702, 0.53769219], + [ 0.11969858, 0.61849025, 0.53634733], + [ 0.12008079, 0.62216081, 0.53494633], + [ 0.12063824, 0.62582833, 0.53348834], + [ 0.12137972, 0.62949242, 0.53197275], + [ 0.12231244, 0.63315277, 0.53039808], + [ 0.12344358, 0.63680899, 0.52876343], + [ 0.12477953, 0.64046069, 0.52706792], + [ 0.12632581, 0.64410744, 0.52531069], + [ 0.12808703, 0.64774881, 0.52349092], + [ 0.13006688, 0.65138436, 0.52160791], + [ 0.13226797, 0.65501363, 0.51966086], + [ 0.13469183, 0.65863619, 0.5176488 ], + [ 0.13733921, 0.66225157, 0.51557101], + [ 0.14020991, 0.66585927, 0.5134268 ], + [ 0.14330291, 0.66945881, 0.51121549], + [ 0.1466164 , 0.67304968, 0.50893644], + [ 0.15014782, 0.67663139, 0.5065889 ], + [ 0.15389405, 0.68020343, 0.50417217], + [ 0.15785146, 0.68376525, 0.50168574], + [ 0.16201598, 0.68731632, 0.49912906], + [ 0.1663832 , 0.69085611, 0.49650163], + [ 0.1709484 , 0.69438405, 0.49380294], + [ 0.17570671, 0.6978996 , 0.49103252], + [ 0.18065314, 0.70140222, 0.48818938], + [ 0.18578266, 0.70489133, 0.48527326], + [ 0.19109018, 0.70836635, 0.48228395], + [ 0.19657063, 0.71182668, 0.47922108], + [ 0.20221902, 0.71527175, 0.47608431], + [ 0.20803045, 0.71870095, 0.4728733 ], + [ 0.21400015, 0.72211371, 0.46958774], + [ 0.22012381, 0.72550945, 0.46622638], + [ 0.2263969 , 0.72888753, 0.46278934], + [ 0.23281498, 0.73224735, 0.45927675], + [ 0.2393739 , 0.73558828, 0.45568838], + [ 0.24606968, 0.73890972, 0.45202405], + [ 0.25289851, 0.74221104, 0.44828355], + [ 0.25985676, 0.74549162, 0.44446673], + [ 0.26694127, 0.74875084, 0.44057284], + [ 0.27414922, 0.75198807, 0.4366009 ], + [ 0.28147681, 0.75520266, 0.43255207], + [ 0.28892102, 0.75839399, 0.42842626], + [ 0.29647899, 0.76156142, 0.42422341], + [ 0.30414796, 0.76470433, 0.41994346], + [ 0.31192534, 0.76782207, 0.41558638], + [ 0.3198086 , 0.77091403, 0.41115215], + [ 0.3277958 , 0.77397953, 0.40664011], + [ 0.33588539, 0.7770179 , 0.40204917], + [ 0.34407411, 0.78002855, 0.39738103], + [ 0.35235985, 0.78301086, 0.39263579], + [ 0.36074053, 0.78596419, 0.38781353], + [ 0.3692142 , 0.78888793, 0.38291438], + [ 0.37777892, 0.79178146, 0.3779385 ], + [ 0.38643282, 0.79464415, 0.37288606], + [ 0.39517408, 0.79747541, 0.36775726], + [ 0.40400101, 0.80027461, 0.36255223], + [ 0.4129135 , 0.80304099, 0.35726893], + [ 0.42190813, 0.80577412, 0.35191009], + [ 0.43098317, 0.80847343, 0.34647607], + [ 0.44013691, 0.81113836, 0.3409673 ], + [ 0.44936763, 0.81376835, 0.33538426], + [ 0.45867362, 0.81636288, 0.32972749], + [ 0.46805314, 0.81892143, 0.32399761], + [ 0.47750446, 0.82144351, 0.31819529], + [ 0.4870258 , 0.82392862, 0.31232133], + [ 0.49661536, 0.82637633, 0.30637661], + [ 0.5062713 , 0.82878621, 0.30036211], + [ 0.51599182, 0.83115784, 0.29427888], + [ 0.52577622, 0.83349064, 0.2881265 ], + [ 0.5356211 , 0.83578452, 0.28190832], + [ 0.5455244 , 0.83803918, 0.27562602], + [ 0.55548397, 0.84025437, 0.26928147], + [ 0.5654976 , 0.8424299 , 0.26287683], + [ 0.57556297, 0.84456561, 0.25641457], + [ 0.58567772, 0.84666139, 0.24989748], + [ 0.59583934, 0.84871722, 0.24332878], + [ 0.60604528, 0.8507331 , 0.23671214], + [ 0.61629283, 0.85270912, 0.23005179], + [ 0.62657923, 0.85464543, 0.22335258], + [ 0.63690157, 0.85654226, 0.21662012], + [ 0.64725685, 0.85839991, 0.20986086], + [ 0.65764197, 0.86021878, 0.20308229], + [ 0.66805369, 0.86199932, 0.19629307], + [ 0.67848868, 0.86374211, 0.18950326], + [ 0.68894351, 0.86544779, 0.18272455], + [ 0.69941463, 0.86711711, 0.17597055], + [ 0.70989842, 0.86875092, 0.16925712], + [ 0.72039115, 0.87035015, 0.16260273], + [ 0.73088902, 0.87191584, 0.15602894], + [ 0.74138803, 0.87344918, 0.14956101], + [ 0.75188414, 0.87495143, 0.14322828], + [ 0.76237342, 0.87642392, 0.13706449], + [ 0.77285183, 0.87786808, 0.13110864], + [ 0.78331535, 0.87928545, 0.12540538], + [ 0.79375994, 0.88067763, 0.12000532], + [ 0.80418159, 0.88204632, 0.11496505], + [ 0.81457634, 0.88339329, 0.11034678], + [ 0.82494028, 0.88472036, 0.10621724], + [ 0.83526959, 0.88602943, 0.1026459 ], + [ 0.84556056, 0.88732243, 0.09970219], + [ 0.8558096 , 0.88860134, 0.09745186], + [ 0.86601325, 0.88986815, 0.09595277], + [ 0.87616824, 0.89112487, 0.09525046], + [ 0.88627146, 0.89237353, 0.09537439], + [ 0.89632002, 0.89361614, 0.09633538], + [ 0.90631121, 0.89485467, 0.09812496], + [ 0.91624212, 0.89609127, 0.1007168 ], + [ 0.92610579, 0.89732977, 0.10407067], + [ 0.93590444, 0.8985704 , 0.10813094], + [ 0.94563626, 0.899815 , 0.11283773], + [ 0.95529972, 0.90106534, 0.11812832], + [ 0.96489353, 0.90232311, 0.12394051], + [ 0.97441665, 0.90358991, 0.13021494], + [ 0.98386829, 0.90486726, 0.13689671], + [ 0.99324789, 0.90615657, 0.1439362 ]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data=hsv2rgb(cm_data); + +end +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/tutorial_linearModel.m b/downloaded/ridgeModel-master/tutorial_linearModel.m new file mode 100644 index 0000000..d443dcc --- /dev/null +++ b/downloaded/ridgeModel-master/tutorial_linearModel.m @@ -0,0 +1,181 @@ + + +%https://github.com/churchlandlab/ridgeModel +% Demo code for how to use the linear encoding model used in the study +% ‘Single-trial neural dynamics are dominated by richly varied movements’ +% by Musall, Kaufman et al., 2019. +% +% This code shows how to build a design matrix based on task and movement +% events, runs the linear model, shows how to analyze the fitted beta weight +% and quantify cross-validated explained variance +% +% To run, add the repo to your matlab path and download our widefield dataset +% from the CSHL repository, under http://repository.cshl.edu/38599/. +% Download the data folder 'Widefield' and navigate to its location in Matlab. + +%% get some data from example recording +animal = 'mSM43'; %example animal +rec = '23-Nov-2017'; %example recording +fPath = [pwd filesep 'Widefield' filesep animal filesep rec filesep]; %path to demo recording + +load([fPath 'opts2.mat'], 'opts'); % load some options +load('allenDorsalMapSM.mat', 'dorsalMaps'); % load allen atlas info +load([fPath 'Vc.mat'], 'U'); %load spatial components +load([fPath 'interpVc.mat'], 'Vc', 'frames'); %load adjusted temporal components +mask = squeeze(isnan(U(:,:,1))); +allenMask = dorsalMaps.allenMask; +% for i=1:size(U,3) %%ARSENY +% pause(0.5) +% imagesc(squeeze(U(:,:,i))) +% +% end +%load behavioral data +bhvFile = dir([fPath '*SpatialDisc*.mat']); +load([fPath bhvFile.name]); + +%% asign some basic options for the model +% There are three event types when building the design matrix. +% Event type 1 will span the rest of the current trial. Type 2 will span +% frames according to sPostTime. Type 3 will span frames before the event +% according to mPreTime and frames after the event according to mPostTime. + +opts.sPostTime = ceil(6 * opts.frameRate); % follow stim events for sPostStim in frames (used for eventType 2) +opts.mPreTime = ceil(0.5 * opts.frameRate); % precede motor events to capture preparatory activity in frames (used for eventType 3) +opts.mPostTime = ceil(2 * opts.frameRate); % follow motor events for mPostStim in frames (used for eventType 3) +opts.framesPerTrial = frames; % nr. of frames per trial +opts.folds = 10; %nr of folds for cross-validation + +%% get some events +load([fPath 'orgRegData.mat'], 'fullR', 'recLabels', 'recIdx', 'idx'); %load design matrix to isolate example events and video data (refer to the code 'delayDec_RegressModel' to see how this was generated in the paper) +recIdx(idx) = []; %reject non-used regressors +vidR = fullR(:,end-399:end); %last 400 PCs are video components + +% task events +taskLabels = {'time' 'lVisStim' 'rVisStim' 'Choice' 'prevReward'}; %some task variables +taskEventType = [1 2 2 1 1]; %different type of events. +taskEvents(:,1) = fullR(:,find(recIdx == find(ismember(recLabels, taskLabels(1))),1)); %find time regressor. This happens every first frame in every trial. +taskEvents(:,2) = fullR(:,find(recIdx == find(ismember(recLabels,taskLabels(2))),1)); %find event regressor for left visual stimulus +taskEvents(:,3) = fullR(:,find(recIdx == find(ismember(recLabels,taskLabels(3))),1)); %find event regressor for right visual stimulus +taskEvents(:,4) = fullR(:,find(recIdx == find(ismember(recLabels,taskLabels(4))),1)); %find choice reressor. This is true when the animal responded on the left. +taskEvents(:,5) = fullR(:,find(recIdx == find(ismember(recLabels,taskLabels(5))),1)); %find previous reward regressor. This is true when previous trial was rewarded. + +% movement events +moveLabels = {'lGrab' 'rGrab' 'lLick' 'rLick' 'nose' 'whisk'}; %some movement variables +moveEventType = [3 3 3 3 3 3]; %different type of events. these are all peri-event variables. +for x = 1 : length(moveLabels) + moveEvents(:,x) = fullR(:,find(recIdx == find(ismember(recLabels, moveLabels(x))),1)+15); %find movement regressor. +end +clear fullR %clear old design matrix + +% make design matrix +[taskR, taskIdx] = makeDesignMatrix(taskEvents, taskEventType, opts); %make design matrix for task variables +[moveR, moveIdx] = makeDesignMatrix(moveEvents, moveEventType, opts); %make design matrix for movement variables + +fullR = [taskR, moveR, vidR]; %make new, single design matrix +moveLabels = [moveLabels, {'video'}]; +regIdx = [taskIdx; moveIdx + max(taskIdx); repmat(max(moveIdx)+max(taskIdx)+1, size(vidR,2), 1)]; %regressor index +regLabels = [taskLabels, moveLabels]; + +%% run QR and check for rank-defficiency. This will show whether a given regressor is highly collinear with other regressors in the design matrix. +% The resulting plot ranges from 0 to 1 for each regressor, with 1 being +% fully orthogonal to all preceeding regressors in the matrix and 0 being +% fully redundant. Having fully redundant regressors in the matrix will +% break the model, so in this example those regressors are removed. In +% practice, you should understand where the redundancy is coming from and +% change your model design to avoid it in the first place! + +rejIdx = false(1,size(fullR,2)); +[~, fullQRR] = qr(bsxfun(@rdivide,fullR,sqrt(sum(fullR.^2))),0); %orthogonalize normalized design matrix +figure; plot(abs(diag(fullQRR)),'linewidth',2); ylim([0 1.1]); title('Regressor orthogonality'); drawnow; %this shows how orthogonal individual regressors are to the rest of the matrix +axis square; ylabel('Norm. vector angle'); xlabel('Regressors'); +if sum(abs(diag(fullQRR)) > max(size(fullR)) * eps(fullQRR(1))) < size(fullR,2) %check if design matrix is full rank + temp = ~(abs(diag(fullQRR)) > max(size(fullR)) * eps(fullQRR(1))); + fprintf('Design matrix is rank-defficient. Removing %d/%d additional regressors.\n', sum(temp), sum(~rejIdx)); + rejIdx(~rejIdx) = temp; %reject regressors that cause rank-defficint matrix +end +% save([fPath filesep 'regData.mat'], 'fullR', 'regIdx', 'regLabels','fullQRR','-v7.3'); %save some model variables + +%% fit model to imaging data +[ridgeVals, dimBeta] = ridgeMML(Vc', fullR, true); %get ridge penalties and beta weights. +% save([fPath 'dimBeta.mat'], 'dimBeta', 'ridgeVals'); %save beta kernels + +%reconstruct imaging data and compute R^2 +Vm = (fullR * dimBeta)'; +corrMat = modelCorr(Vc,Vm,U) .^2; %compute explained variance +corrMat = arrayShrink(corrMat,mask,'split'); %recreate full frame +corrMat = alignAllenTransIm(corrMat,opts.transParams); %align to allen atlas +corrMat = corrMat(:, 1:size(allenMask,2)); + +%% check beta kernels +% select variable of interest. Must be included in 'regLabels'. +% cVar = 'rVisStim'; +cVar = 'rGrab'; +% cVar = 'whisk'; +% cVar = 'rLick'; +% cVar = 'prevReward'; +% find beta weights for current variable +cIdx = regIdx == find(ismember(regLabels,cVar)); +U = reshape(U, [], size(Vc,1)); +cBeta = U * dimBeta(cIdx, :)'; +cBeta = reshape(cBeta, size(mask,1), size(mask,2), []); +U = reshape(U, size(mask,1), size(mask,2), size(Vc,1)); +compareMovie(cBeta) + +%% run cross-validation +%full model - this will take a moment +[Vfull, fullBeta, ~, fullIdx, fullRidge, fullLabels] = crossValModel(fullR, Vc, regLabels, regIdx, regLabels, opts.folds); +save([fPath 'cvFull.mat'], 'Vfull', 'fullBeta', 'fullR', 'fullIdx', 'fullRidge', 'fullLabels'); %save some results + +fullMat = modelCorr(Vc,Vfull,U) .^2; %compute explained variance +fullMat = arrayShrink(fullMat,mask,'split'); %recreate full frame +fullMat = alignAllenTransIm(fullMat,opts.transParams); %align to allen atlas +fullMat = fullMat(:, 1:size(allenMask,2)); + +%task model alone - this will take a moment +[Vtask, taskBeta, taskR, taskIdx, taskRidge, taskLabels] = crossValModel(fullR, Vc, taskLabels, regIdx, regLabels, opts.folds); +save([fPath 'cvTask.mat'], 'Vtask', 'taskBeta', 'taskR', 'taskIdx', 'taskRidge', 'taskLabels'); %save some results + +taskMat = modelCorr(Vc,Vtask,U) .^2; %compute explained variance +taskMat = arrayShrink(taskMat,mask,'split'); %recreate task frame +taskMat = alignAllenTransIm(taskMat,opts.transParams); %align to allen atlas +taskMat = taskMat(:, 1:size(allenMask,2)); + +%movement model alone - this will take a moment +[Vmove, moveBeta, moveR, moveIdx, moveRidge, moveLabels] = crossValModel(fullR, Vc, moveLabels, regIdx, regLabels, opts.folds); +save([fPath 'cvMove.mat'], 'Vmove', 'moveBeta', 'moveR', 'moveIdx', 'moveRidge', 'moveLabels'); %save some results + +moveMat = modelCorr(Vc,Vmove,U) .^2; %compute explained variance +moveMat = arrayShrink(moveMat,mask,'split'); %recreate move frame +moveMat = alignAllenTransIm(moveMat,opts.transParams); %align to allen atlas +moveMat = moveMat(:, 1:size(allenMask,2)); + +%% show R^2 results +%cross-validated R^2 +figure; +subplot(1,3,1); +mapImg = imshow(fullMat,[0 0.75]); +colormap(mapImg.Parent,'inferno'); axis image; title('cVR^2 - Full model'); +set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + +subplot(1,3,2); +mapImg = imshow(taskMat,[0 0.75]); +colormap(mapImg.Parent,'inferno'); axis image; title('cVR^2 - Task model'); +set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + +subplot(1,3,3); +mapImg = imshow(moveMat,[0 0.75]); +colormap(mapImg.Parent,'inferno'); axis image; title('cVR^2 - Movement model'); +set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + +%unique R^2 +figure; +subplot(1,2,1); +mapImg = imshow(fullMat - moveMat,[0 0.4]); +colormap(mapImg.Parent,'inferno'); axis image; title('deltaR^2 - Task model'); +set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + +subplot(1,2,2); +mapImg = imshow(fullMat - taskMat,[0 0.4]); +colormap(mapImg.Parent,'inferno'); axis image; title('deltaR^2 - Movement model'); +set(mapImg,'AlphaData',~isnan(mapImg.CData)); %make NaNs transparent. + diff --git a/downloaded/ridgeModel-master/widefield/Widefield_SplitVideo.m b/downloaded/ridgeModel-master/widefield/Widefield_SplitVideo.m new file mode 100644 index 0000000..68cff7f --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/Widefield_SplitVideo.m @@ -0,0 +1,273 @@ +function [blueData,blueTimes,hemoData,hemoTimes,stimOn,falseAlign,sRate] = Widefield_SplitVideo(opts,trialNr,fileExt) +% Code to separate blue and violet channel from widefield data. This needs +% analog data that contains a stimulus onset from which a pre and +% poststimulus dataset can be returned. Also requires trigger channels for +% blue/violet LEDs and some dark frames at the end. +% This code is the newer version of Widefield_CheckChannels. + +falseAlign = false; +if ~isfield(opts,'verbosity') + opts.verbosity = true; %give warnings by default +end + +if ~exist('fileExt','var') + fileExt = 'mj2'; %type of video file. Default is mj2 +end + +%% load data and check channel identity +cFile = [opts.fPath filesep 'Analog_' num2str(trialNr) '.dat']; %current file to be read +[~,Analog] = Widefield_LoadData(cFile,'Analog'); %load analog data +Analog = double(Analog); + +cFile = [opts.fPath filesep opts.fName '_' num2str(trialNr) '.' fileExt]; %current file to be read +data = importdata(cFile); +data = squeeze(data(:,:,1,:)); + + %crop edges for mp4 files +if strcmpi(fileExt, 'mp4') + data = data(1:end-8,1:end-8,:); +end + +cFile = strrep(cFile,fileExt,'mat'); +load(strrep(cFile,'Frames','frameTimes')); +frameTimes = frameTimes * (86400*1e3); %extract frame times from header and convert to millisecond timestamps + +%reshape data to compute mean frame intensities +dSize = size(data); +data = reshape(data,[],dSize(end)); +temp = zscore(median(single(data))); +data = squeeze(reshape(data,dSize)); + +bFrame = find(temp < min(temp)*.75); %index for black frames +if bFrame(1) == 1 %if first frame is dark, remove initial frames from data until LEDs are on + %remove initial dark frames + cIdx = find(diff(bFrame) > 1, 1); + data(:,:,1:cIdx) = []; + dSize = size(data); + temp(1:cIdx) = []; + frameTimes(1:cIdx) = []; +end + +%determine imaging rate - either given as input or determined from data +if isfield(opts,'frameRate') + sRate = opts.frameRate; +else + sRate = 1000/(median(diff(frameTimes))*2); +end +% change pre and poststim from seconds to frames, based on imaging rate +if isfield(opts, 'preStim') && isfield(opts, 'postStim') && ~isempty(opts.preStim) && ~isempty(opts.postStim) %check if pre- and poststim are defined. Otherwise return all data in each channel. + opts.preStim = ceil(opts.preStim * sRate); + opts.postStim = ceil(opts.postStim * sRate); +else + opts.preStim = Inf; opts.postStim = Inf; +end + +if ~(any(isnan(opts.trigLine)) || any(opts.trigLine > size(Analog,1))) + + trace = Analog(opts.trigLine,:); %blue and violet light trigger channels + trace = zscore(trace(1,end:-1:1) - trace(2,end:-1:1)); %invert and subtract to check color of last frame + trace(round(diff(trace)) ~= 0) = 0; %don't use triggers that are only 1ms long + lastBlue = find(trace > 1, 1); + lastHemo = find(trace < -1,1); + + blueLast = lastBlue < lastHemo; + if isempty(lastBlue) || isempty(lastHemo) + if opts.verbosity + warning(['Failed to find trigger signals. lastBlue: ' num2str(lastBlue) '; lastHemo: ' num2str(lastHemo) '; trialNr: ' num2str(trialNr)]) + end + end + + % find all triggers in stim line and choose the one that is on the longest as the true stimulus trigger + % apparently this line can be contaminated by noise + stimOn = find(diff(double(Analog(opts.stimLine,:)) > 1500) == 1); + ind = find((find(diff(double(Analog(opts.stimLine,:)) > 1500) == -1) - stimOn) > 2,1); %only use triggers that are more than 2ms long + stimOn = stimOn(ind) + 1; + +% bFrame = find(temp < temp(end) + 6); %index for first black frame (assuming the last frame is really a dark frame) + bFrame = find(temp < min(temp)*.75); %index for first black frame (assuming the last frame is really a dark frame) + bFrame(bFrame < round(size(temp,2) / 2)) = []; %make sure black frame is in the second half of recording. + bFrame = bFrame(1); + blueInd = false(1,length(temp)); + + if blueLast %last frame before black is blue + if rem(bFrame,2) == 0 %blue frames (bFrame - 1) have uneven numbers + blueInd(1:2:dSize(end)) = true; + else + blueInd(2:2:dSize(end)) = true; + end + lastFrame = size(Analog,2) - lastBlue; %index for end of last frame + else %last frame before black is violet + if rem(bFrame,2) == 0 %blue frames (bFrame - 2) have even numbers + blueInd(2:2:dSize(end)) = true; + else + blueInd(1:2:dSize(end)) = true; + end + lastFrame = size(Analog,2) - lastHemo; %index for end of last frame + end + + frameTimes = (frameTimes - frameTimes(bFrame - 1)) + lastFrame; %realign frameTime based on time of last non-dark frame + + blueInd = blueInd(frameTimes < size(Analog,2)); + blueInd(bFrame - 1:end) = []; %exclude black and last non-black frame + + blueTimes = frameTimes(blueInd); + hemoTimes = frameTimes(~blueInd); + + blueData = data(:,:,blueInd); + hemoData = data(:,:,~blueInd); + + if isempty(stimOn) || isempty(find((blueTimes - stimOn) > 0, 1)) + error('No stimulus trigger found.') + else + blueStim = find((blueTimes - stimOn) > 0, 1); %first blue frame after stimOn + if isinf(opts.preStim) + opts.preStim = blueStim - 1; + end + if blueStim <= opts.preStim + 1 %if stim occured earlier as defined by preStim + blueStim = opts.preStim + 1 ; %use earliest possible frame for stimulus onset + if (find(hemoTimes - blueTimes(opts.preStim + 1) > 0, 1) - 1) <= opts.preStim %make sure there are enough frames for hemo channel + blueStim = blueStim + 1 ; %use earliest possible frame for stimulus onset + end + if opts.verbosity + fprintf('Warning: StimOn is too early. Starting at %d instead of %d to provide enough baseline frames.\n',blueStim, find((blueTimes - stimOn) > 0, 1)) + end + falseAlign = true; + end + end + + if length(blueTimes) < (blueStim + opts.postStim - 1) + lastBlueIdx = length(blueTimes); + else + lastBlueIdx = blueStim + opts.postStim - 1; + end + + hemoStim = find(hemoTimes - blueTimes(blueStim) > 0, 1) - 1; %first hemo frame before blueFrame after stimOn :) + if length(hemoTimes) < (hemoStim + opts.postStim - 1) + lastHemoIdx = length(hemoTimes); + else + lastHemoIdx = hemoStim + opts.postStim - 1; + end + + %make sure both channels have equal length + chanDiff = length(blueStim - opts.preStim : lastBlueIdx) - length(hemoStim - opts.preStim : lastHemoIdx); + if chanDiff < 0 %less blue frames, cut hemo frame + lastHemoIdx = lastHemoIdx + chanDiff; + elseif chanDiff > 0 %less hemo frames, cut blue frame + lastBlueIdx = lastBlueIdx - chanDiff; + end + + %check if enough data is remaining after stimulus onset + if lastBlueIdx - blueStim + 1 < opts.postStim + if opts.verbosity + fprintf('Warning: StimOn is too late. Using %d instead of %d frames for poststim data.\n',lastBlueIdx - blueStim, opts.postStim) + end + falseAlign = true; + end + + blueTimes = blueTimes(blueStim - opts.preStim : lastBlueIdx); %get blue frame times before and after stimOn + blueData = blueData(:, :, blueStim - opts.preStim : lastBlueIdx); %get blue frame data before and after stim on + + hemoTimes = hemoTimes(hemoStim - opts.preStim : lastHemoIdx); %get hemo frame times before and after stimOn + hemoData = hemoData(:,:,hemoStim - opts.preStim : lastHemoIdx); %get hemo frame data before and after stim on + + %make sure each frame has a corresponding trigger signal + frameDiff = floor(median(diff(frameTimes))); + frameJitter = sum(diff(frameTimes) > (frameDiff + 1)); + frameDiff = frameDiff - (1 - rem(frameDiff,2)); %make sure, inter-frame interval is uneven number + blueInd = bsxfun(@minus, repmat(round(blueTimes),1,frameDiff),-floor(frameDiff/2):floor(frameDiff/2))'; %get index for each frameTime and get half the IFI before and after frame was acquired to check trigger signal. + hemoInd = bsxfun(@minus, repmat(round(hemoTimes),1,frameDiff),-floor(frameDiff/2):floor(frameDiff/2))'; %get index for each frameTime and get half the IFI before and after frame was acquired to check trigger signal. + + blueTrig = zscore(Analog(opts.trigLine(1), blueInd(:))); %blue light trigger channel + blueTrig = reshape(blueTrig, [], length(blueTimes)); + blueTrig = any(zscore(blueTrig) > 0.5); + + hemoTrig = zscore(Analog(opts.trigLine(2), hemoInd(:))); %blue light trigger channel + hemoTrig = reshape(hemoTrig, [], length(hemoTimes)); + hemoTrig = any(zscore(hemoTrig) > 0.5); + + if sum(blueTrig) ~= length(blueTimes) || sum(hemoTrig) ~= length(hemoTimes) + disp(['Potential frame time violations: ' num2str(frameJitter)]) + disp(['Confirmed blue trigs: ' num2str(sum(blueTrig)) '; blue frame times: ' num2str(length(blueTimes))]) + disp(['Confirmed hemo trigs: ' num2str(sum(hemoTrig)) '; hemo frame times: ' num2str(length(hemoTimes))]) + + if frameJitter < (length(blueTimes) - sum(blueTrig)) || frameJitter < (length(hemoTimes) - sum(hemoTrig)) %more unaccounted triggers as might be explained by frame time jitter + falseAlign = true; %potential for misaligned channel separation. Don't use trial. + disp('Flagged file for rejection.') + end + disp(['Current file: ' cFile]) + end +else + blueData = data(:,:,1 : opts.preStim + opts.postStim); + blueTimes = frameTimes(1: opts.preStim + opts.postStim); + hemoData = NaN; + hemoTimes = NaN; + falseAlign = true; + stimOn = []; + sRate = 1000/(median(diff(frameTimes))); +end + +%% plot result if requested +if opts.plotChans + figure(50) %show result + subplot(1,2,1); colormap gray + imagesc(mean(blueData,3)); axis image + title(['Blue frame average - Trial ' num2str(trialNr)]) + subplot(1,2,2); + imagesc(mean(hemoData,3)); axis image + title(['Hemo frame average - Trial ' num2str(trialNr)]) + drawnow; +end +end + +function [header,data] = Widefield_LoadData(cPath,Condition,dataType,pInd) +% short routine to load data from WidefieldImager code. +% cPath is the path of the file that should be opened. Condition is the +% type of data file which will determine the way the data file is read. +% Optional input 'pInd' defines a single pixel from which a data vector should +% be extracted. pInd is a two-value vector for x-y pixel coordinates. This +% means X and Y for image coordinates NOT matlab coordinates (which are +% usually inverse). + +if ~exist('dataType','var') || isempty(dataType) + dataType = 'uint16'; +end + +if ~exist('pInd','var') || isnan(pInd) + pInd = []; +else + if length(pInd) ~= 2 || ~isnumeric(pInd) + error('Invalid input for index of selected pixel') + end +end + +fID = fopen(cPath); +switch lower(Condition) + case 'analog' + hSize = fread(fID,1,'double'); %header size + header = fread(fID,hSize,'double'); %Metadata. Default is: 1 = Time of Acquisition onset, 2 = Number of channels, 3 = number of values per channel + data = fread(fID,[header(end-1),header(end)],[dataType '=>' dataType]); %get data. Last 2 header values should contain the size of the data array. + case 'frames' + hSize = fread(fID,1,'double'); %header size + header = fread(fID,hSize,'double'); %Metadata. Default is: 1:x = Absolute timestamps for each frame, Last 4 values: Size of each dimensions in the matrix + + if ~isempty(pInd) %if extracting single pixel information + imSize = (header(find(diff(header) < -1e3) + 1)*header(find(diff(header) < -1e3) + 2))-1; %number of datapoints to make a single image minus one. skip that many datapoints to stick to the same pixel when using fread. + imStart = ((pInd(1)-1)*header(find(diff(header) < -1e3) + 1))+pInd(2)-1; %first value for selected pixel + fseek(fID,imStart*2,'cof'); %shift file pointer to the right pixel to start data extraction from file + data = fread(fID,header(find(diff(header) < -1e3) + 4),[dataType '=>' dataType],imSize*2); %get data. + if length(data) ~= header(end) + error('Could not extract all data values from pixel') + end + else + data = fread(fID,[prod(header(find(diff(header) < -1e3) + 1 : end)),1],[dataType '=>' dataType]); %get data. Last 4 header values should contain the size of the data array. + if length(data) ~= prod(header(find(diff(header) < -1e3) + 1 : end)) %if insufficient data is found in .dat file. Sometimes fread does not get all values from file when reading from server. + fclose(fID);fID = fopen(cPath); %try loading data again + hSize = fread(fID,1,'double'); %header size + header = fread(fID,hSize,'double'); %Metadata. Defautlt is: 1:x = Absolute timestamps for each frame, Last 4 values: Size of each dimensions in the matrix + data = fread(fID,[prod(header(find(diff(header) < -1e3) + 1 : end)),1],[dataType '=>' dataType]); %get data. Last 4 header values should contain the size of the data array. + end + data = reshape(data,header(find(diff(header) < -1e3) + 1 : end)'); %reshape data into matrix + end +end +fclose(fID); +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/widefield/Widefield_SvdHemoCorrect.m b/downloaded/ridgeModel-master/widefield/Widefield_SvdHemoCorrect.m new file mode 100644 index 0000000..14b850e --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/Widefield_SvdHemoCorrect.m @@ -0,0 +1,89 @@ +function [Vout, regC, T, hemoVar] = Widefield_SvdHemoCorrect(U, blueV, hemoV, sRate, smoothBlue) +% function [Vout, regC, T] = HemoCorrectLocal(U, V, Vaux, sRate, FreqRange, pixSpace) +% +% Does local hemodynamic correction for widefield imaging, in SVD space. +% +% U and V is an SVD representation of is the neural signal you are trying to correct +% +% hemoV is the other non-neural signals that you are using to measure hemodynmaics +% It should be compressed by the same U. +% +% sRate is sampling frequency. +% +% Outputs: Vout is corrected signal +% T is transformation matrix that predicts V from hemoV + +if ~exist('smoothBlue', 'var') || isempty(smoothBlue) + smoothBlue = false; +end + +%% pre-process V and U and apply mask to U +[A,B,C] = size(blueV); +blueV = reshape(blueV,A,[])'; +hemoV = reshape(hemoV,A,[])'; + +% subtract means +blueV = bsxfun(@minus, blueV, nanmean(blueV)); +hemoV = bsxfun(@minus, hemoV, nanmean(hemoV)); + +% high-pass blueV and hemoV above 0.1Hz +[b, a] = butter(2,0.1/(sRate), 'high'); +blueV(~isnan(blueV(:,1)),:) = single(filtfilt(b,a,double(blueV(~isnan(blueV(:,1)),:)))); +hemoV(~isnan(blueV(:,1)),:) = single(filtfilt(b,a,double(hemoV(~isnan(blueV(:,1)),:)))); + +% get core pixels from U +mask = isnan(U(:,:,1)); +U = arrayShrink(U,mask,'merge'); %only use selected pixels from mask + +%% smooth hemo V +[b, a] = butter(2,0.5, 'low'); +blueV = reshape(blueV',A,B,C); +hemoV = reshape(hemoV',A,B,C); + +for iTrials = 1:C + cIdx = ~isnan(hemoV(1,:,iTrials)); %make sure to only use non-NaN frames + if smoothBlue + temp = blueV(:,cIdx,iTrials)'; + temp = [repmat(temp(1,:),10,1); temp; repmat(temp(end,:),10,1)]; + temp = single(filtfilt(b,a,double(temp)))'; + blueV(:,cIdx,iTrials) = temp(:, 11:end-10); + end + + temp = hemoV(:,cIdx,iTrials)'; + temp = [repmat(temp(1,:),10,1); temp; repmat(temp(end,:),10,1)]; + temp = single(filtfilt(b,a,double(temp)))'; + hemoV(:,cIdx,iTrials) = temp(:, 11:end-10); +end +blueV = reshape(blueV,A,[])'; +hemoV = reshape(hemoV,A,[])'; + +%% compute single pixel time traces and regression coefficients. Always 500 at a time to prevent memory issues. +regC = zeros(1,size(U,1),'single'); +ind = 0:500:size(U,1); +for x = 1:length(ind) + if x == length(ind) + a = (U(ind(x)+1:end,:) * blueV'); + b = (U(ind(x)+1:end,:) * hemoV'); + regC(ind(x)+1:end) = nansum(a.*b, 2) ./ nansum(b.*b, 2); + else + a = (U(ind(x)+1:ind(x+1),:) * blueV'); + b = (U(ind(x)+1:ind(x+1),:) * hemoV'); + regC(ind(x)+1:ind(x+1)) = nansum(a.*b,2) ./ nansum(b.*b,2); + end +end +clear a b + +%% compute the corresponding V-space transformation matrix +T = pinv(U) * bsxfun(@times, regC(:), U); + +% make the prediction +Vout = blueV - hemoV*T'; + +%% compute variance explained +f1Pow = nansum(blueV(:).^2); +f1Powcor = nansum(Vout(:).^2); +hemoVar = 100*(f1Pow-f1Powcor)/f1Pow; +fprintf('%f percent variance explained by hemo signal\n', hemoVar); + +% Transpose to return conventional nSVs x nTimes output +Vout = reshape(Vout', A, B, C); \ No newline at end of file diff --git a/downloaded/ridgeModel-master/widefield/Widefield_dftregistration.m b/downloaded/ridgeModel-master/widefield/Widefield_dftregistration.m new file mode 100644 index 0000000..ae4be9b --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/Widefield_dftregistration.m @@ -0,0 +1,210 @@ +function [output, Greg] = Widefield_dftregistration(buf1ft,buf2ft,usfac) +% function [output Greg] = dftregistration(buf1ft,buf2ft,usfac); +% Efficient subpixel image registration by crosscorrelation. This code +% gives the same precision as the FFT upsampled cross correlation in a +% small fraction of the computation time and with reduced memory +% requirements. It obtains an initial estimate of the crosscorrelation peak +% by an FFT and then refines the shift estimation by upsampling the DFT +% only in a small neighborhood of that estimate by means of a +% matrix-multiply DFT. With this procedure all the image points are used to +% compute the upsampled crosscorrelation. +% Manuel Guizar - Dec 13, 2007 + +% Portions of this code were taken from code written by Ann M. Kowalczyk +% and James R. Fienup. +% J.R. Fienup and A.M. Kowalczyk, "Phase retrieval for a complex-valued +% object by using a low-resolution image," J. Opt. Soc. Am. A 7, 450-458 +% (1990). + +% Citation for this algorithm: +% Manuel Guizar-Sicairos, Samuel T. Thurman, and James R. Fienup, +% "Efficient subpixel image registration algorithms," Opt. Lett. 33, +% 156-158 (2008). + +% Inputs +% buf1ft Fourier transform of reference image, +% DC in (1,1) [DO NOT FFTSHIFT] +% buf2ft Fourier transform of image to register, +% DC in (1,1) [DO NOT FFTSHIFT] +% usfac Upsampling factor (integer). Images will be registered to +% within 1/usfac of a pixel. For example usfac = 20 means the +% images will be registered within 1/20 of a pixel. (default = 1) + +% Outputs +% output = [error,diffphase,net_row_shift,net_col_shift] +% error Translation invariant normalized RMS error between f and g +% diffphase Global phase difference between the two images (should be +% zero if images are non-negative). +% net_row_shift net_col_shift Pixel shifts between images +% Greg (Optional) Fourier transform of registered version of buf2ft, +% the global phase difference is compensated for. + +% Default usfac to 1 +if exist('usfac')~=1, usfac=1; end + +% Compute error for no pixel shift +if usfac == 0, + CCmax = sum(sum(buf1ft.*conj(buf2ft))); + rfzero = sum(abs(buf1ft(:)).^2); + rgzero = sum(abs(buf2ft(:)).^2); + error = 1.0 - CCmax.*conj(CCmax)/(rgzero*rfzero); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + output=[error,diffphase]; + +% Whole-pixel shift - Compute crosscorrelation by an IFFT and locate the +% peak +elseif usfac == 1, + [m,n]=size(buf1ft); + CC = ifft2(buf1ft.*conj(buf2ft)); + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc=loc1(loc2); + cloc=loc2; + CCmax=CC(rloc,cloc); + rfzero = sum(abs(buf1ft(:)).^2)/(m*n); + rgzero = sum(abs(buf2ft(:)).^2)/(m*n); + error = 1.0 - CCmax.*conj(CCmax)/(rgzero(1,1)*rfzero(1,1)); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + md2 = fix(m/2); + nd2 = fix(n/2); + if rloc > md2 + row_shift = rloc - m - 1; + else + row_shift = rloc - 1; + end + + if cloc > nd2 + col_shift = cloc - n - 1; + else + col_shift = cloc - 1; + end + output=[error,diffphase,row_shift,col_shift]; + +% Partial-pixel shift +else + + % First upsample by a factor of 2 to obtain initial estimate + % Embed Fourier data in a 2x larger array + [m,n]=size(buf1ft); + mlarge=m*2; + nlarge=n*2; + + CC=zeros(mlarge,nlarge); + CC(m+1-fix(m/2):m+1+fix((m-1)/2),n+1-fix(n/2):n+1+fix((n-1)/2)) = ... + fftshift(buf1ft).*conj(fftshift(buf2ft)); + + % Compute crosscorrelation and locate the peak + CC = ifft2(ifftshift(CC)); % Calculate cross-correlation + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc=loc1(loc2);cloc=loc2; + CCmax=CC(rloc,cloc); + + % Obtain shift in original pixel grid from the position of the + % crosscorrelation peak + [m,n] = size(CC); md2 = fix(m/2); nd2 = fix(n/2); + if rloc > md2 + row_shift = rloc - m - 1; + else + row_shift = rloc - 1; + end + if cloc > nd2 + col_shift = cloc - n - 1; + else + col_shift = cloc - 1; + end + row_shift=row_shift/2; + col_shift=col_shift/2; + + % If upsampling > 2, then refine estimate with matrix multiply DFT + if usfac > 2, + %%% DFT computation %%% + % Initial shift estimate in upsampled grid + row_shift = round(row_shift*usfac)/usfac; + col_shift = round(col_shift*usfac)/usfac; + dftshift = fix(ceil(usfac*1.5)/2); %% Center of output array at dftshift+1 + % Matrix multiply DFT around the current shift estimate + CC = conj(dftups(buf2ft.*conj(buf1ft),ceil(usfac*1.5),ceil(usfac*1.5),usfac,... + dftshift-row_shift*usfac,dftshift-col_shift*usfac))/(md2*nd2*usfac^2); + % Locate maximum and map back to original pixel grid + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc = loc1(loc2); cloc = loc2; + CCmax = CC(rloc,cloc); + rg00 = dftups(buf1ft.*conj(buf1ft),1,1,usfac)/(md2*nd2*usfac^2); + rf00 = dftups(buf2ft.*conj(buf2ft),1,1,usfac)/(md2*nd2*usfac^2); + rloc = rloc - dftshift - 1; + cloc = cloc - dftshift - 1; + row_shift = row_shift + rloc/usfac; + col_shift = col_shift + cloc/usfac; + + % If upsampling = 2, no additional pixel shift refinement + else + rg00 = sum(sum( buf1ft.*conj(buf1ft) ))/m/n; + rf00 = sum(sum( buf2ft.*conj(buf2ft) ))/m/n; + end + error = 1.0 - CCmax.*conj(CCmax)/(rg00*rf00); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + % If its only one row or column the shift along that dimension has no + % effect. We set to zero. + if md2 == 1, + row_shift = 0; + end + if nd2 == 1, + col_shift = 0; + end + output=[error,diffphase,row_shift,col_shift]; +end + +% Compute registered version of buf2ft +if (nargout > 1)&&(usfac > 0), + [nr,nc]=size(buf2ft); + Nr = ifftshift([-fix(nr/2):ceil(nr/2)-1]); + Nc = ifftshift([-fix(nc/2):ceil(nc/2)-1]); + [Nc,Nr] = meshgrid(Nc,Nr); + Greg = buf2ft.*exp(i*2*pi*(-row_shift*Nr/nr-col_shift*Nc/nc)); + Greg = Greg*exp(i*diffphase); +elseif (nargout > 1)&&(usfac == 0) + Greg = buf2ft*exp(i*diffphase); +end +return + +function out=dftups(in,nor,noc,usfac,roff,coff) +% function out=dftups(in,nor,noc,usfac,roff,coff); +% Upsampled DFT by matrix multiplies, can compute an upsampled DFT in just +% a small region. +% usfac Upsampling factor (default usfac = 1) +% [nor,noc] Number of pixels in the output upsampled DFT, in +% units of upsampled pixels (default = size(in)) +% roff, coff Row and column offsets, allow to shift the output array to +% a region of interest on the DFT (default = 0) +% Recieves DC in upper left corner, image center must be in (1,1) +% Manuel Guizar - Dec 13, 2007 +% Modified from dftus, by J.R. Fienup 7/31/06 + +% This code is intended to provide the same result as if the following +% operations were performed +% - Embed the array "in" in an array that is usfac times larger in each +% dimension. ifftshift to bring the center of the image to (1,1). +% - Take the FFT of the larger array +% - Extract an [nor, noc] region of the result. Starting with the +% [roff+1 coff+1] element. + +% It achieves this result by computing the DFT in the output array without +% the need to zeropad. Much faster and memory efficient than the +% zero-padded FFT approach if [nor noc] are much smaller than [nr*usfac nc*usfac] +[nr,nc]=size(in); +% Set defaults +if exist('roff','var')~=1, roff=0; end +if exist('coff','var')~=1, coff=0; end +if exist('usfac','var')~=1, usfac=1; end +if exist('noc','var')~=1, noc=nc; end +if exist('nor','var')~=1, nor=nr; end +% Compute kernels and obtain DFT by matrix products +kernc=exp((-1i*2*pi/(nc*usfac))*( ifftshift([0:nc-1]).' - floor(nc/2) )*( [0:noc-1] - coff )); +kernr=exp((-1i*2*pi/(nr*usfac))*( [0:nor-1].' - roff )*( ifftshift([0:nr-1]) - floor(nr/2) )); +out=kernr*in*kernc; +return diff --git a/downloaded/ridgeModel-master/widefield/alignAllenTransIm.m b/downloaded/ridgeModel-master/widefield/alignAllenTransIm.m new file mode 100644 index 0000000..a529f17 --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/alignAllenTransIm.m @@ -0,0 +1,48 @@ +function im = alignAllenTransIm(im, transParams) +% im = alignAllenTransIm(im, transParams) +% +% Take a brain image and rotate, scale, and translate it according to the +% parameters in transParams (produced by alignBrainToAllen GUI). im may be +% an image stack. Note that due to the behavior of imrotate, NaNs may not +% propagate identically if an image stack is used vs. calling this function +% on individual images. +% +% Pixels where the value is not defined (due to rotation) are set to NaN. +% This behavior is different from imrotate. + +offset = 5E3; + +[h, w, d] = size(im); + +% Set pixels off from zero +theMin = min(im(:)); +im = im - theMin + offset; + +% Rotate +im = imrotate(im, transParams.angleD, 'bilinear'); + +% Scale +if transParams.scaleConst ~= 1 + im = imresize(im, transParams.scaleConst); +end + +% Set NaNs to 0, because imtranslate can't handle them +nans = isnan(im); +if any(nans(:)) + im(nans) = 0; +end + +% Translate +im = imtranslate(im, transParams.tC'); + +% Detect missing pixels due to rotation, set to NaN +im(im <= 0.9999 * offset) = NaN; + +% Restore offset +im = im + theMin - offset; + +% Trim result (rotate expands it) +[rH, rW, rD] = size(im); +trimH = floor((rH - h) / 2); +trimW = floor((rW - w) / 2); +im = im(trimH + (1:h), trimW + (1:w), :); diff --git a/downloaded/ridgeModel-master/widefield/allenDorsalMapSM.mat b/downloaded/ridgeModel-master/widefield/allenDorsalMapSM.mat new file mode 100644 index 0000000..9ccf7b4 Binary files /dev/null and b/downloaded/ridgeModel-master/widefield/allenDorsalMapSM.mat differ diff --git a/downloaded/ridgeModel-master/widefield/arrayShrink.m b/downloaded/ridgeModel-master/widefield/arrayShrink.m new file mode 100644 index 0000000..51a3dd4 --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/arrayShrink.m @@ -0,0 +1,92 @@ +function DataOut = arrayShrink(DataIn,mask,mode) +% Code to merge the first two dimensions of matrix 'DataIn' into one and remove +% values based on the 2D index 'mask'. The idea here is that DataIn is a stack +% of images with resolution X*Y and pixels in 'mask' should be removed to +% reduce datasize and computional load of subsequent analysis. The first +% dimension of 'DataOut' will be the product of the X*Y of 'DataIn' minus +% pixels in 'mask'. +% Usage: DataOut = arrayShrink(DataIn,mask,'merge') +% +% To re-assemble the stack after computations have been done, the code +% can be called with the additional argument 'mode' set to 'split'. This +% will reconstruct the original data structure removed pixels will be +% replaced by NaNs. +% Usage: DataOut = arrayShrink(DataIn,mask,'split') +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The following example illustrates how to use the code when having a 3D +% image stack of size X*Y*N. X and Y are pixels and N the amount of available frames. +% Thresholding identifies the area of interest (Fig.1) and each image is compressed +% into a single vector for analzsis (Fig.2). Afterwards the original matrix +% is restored (Fig.3). +% +% Copy the example into a seperate file to test it out but do NOT uncomment +% in arrayShrink itself to ensure it's working correctly. +% +% a = imread('coins.png'); %single image +% mask = a < mean(a(:)); %create logical index +% b = repmat(a,1,1,10); %create image stack +% b(:,:,2:2:10) = 0; %include some empty frames +% c = arrayShrink(b,mask); %merge first two dimensions +% d = arrayShrink(c,mask,'split'); %re-create original matrix b with NaNs for excluded values +% +% figure +% subplot(1,3,1) +% imagesc(a);axis square; hold on +% contour(mask,'w','linewidth',2); +% title('Area of interest from first two dimensions') +% +% subplot(1,3,2) +% imagesc(c'); axis square; +% set(gca,'yTick',1:2:10);set(gca,'yTickLabel',1:5); +% ylabel('Frames');xlabel('Pixels') +% title('1D vector per frame for analysis'); +% +% subplot(1,3,3) +% imagesc(d(:,:,1));axis square; +% title('Restore original matrix. Excluded data set to NaNs.') +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +if ~exist('mode','var') + mode = 'merge'; %merge dimensions by default +end + +dSize = size(DataIn); %size of input matrix +if dSize(1) == 1 + DataIn = squeeze(DataIn); %remove singleton dimensions + dSize = size(DataIn); +end + +if length(dSize) == 2 + if dSize(1) == 1 + DataIn = DataIn'; + dSize = size(DataIn); %size of input matrix + end + dSize = [dSize 1]; +end + +if strcmpi(mode,'merge') %merge x and y dimension into one + + DataIn = reshape(DataIn,[numel(mask),prod(dSize(ndims(mask)+1:end))]); %merge x and y dimension based on mask size and remaining dimensions. + mask = mask(:); %reshape mask to vector + DataIn(mask,:) = []; + DataIn = reshape(DataIn,[size(DataIn,1),dSize(ndims(mask)+1:end)]); + DataOut = DataIn; + +elseif strcmpi(mode,'split') %split first dimension into x- and y- dimension based on mask size + + %check if datatype is single. If not will use double as a default. + if isa(DataIn,'single') + dType = 'single'; + else + dType = 'double'; + end + + mSize = size(mask); + mask = mask(:); %reshape mask to vector + DataOut = NaN([numel(mask) dSize(2:end)],dType); %pre-allocate new matrix + DataOut(~mask,:) = reshape(DataIn,sum(~mask),[]); + DataOut = reshape(DataOut,[mSize dSize(2:end)]); + +end \ No newline at end of file diff --git a/downloaded/ridgeModel-master/widefield/blockSVD.m b/downloaded/ridgeModel-master/widefield/blockSVD.m new file mode 100644 index 0000000..65c6182 --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/blockSVD.m @@ -0,0 +1,220 @@ +function blockSVD(opts) +% example code to get raw data from a given imaging experiment and perform +% blockwise dimensionality reduction. +% Data channels are either blue (1) or violet (2) which contains intrinsic +% signals. +% opts.fPath denotes the path to the example data folder, containing raw video +% data as .mj2 files and according timestamps for each frame. +% nrBlocks is the total number of blocks used for the svd. Sqrt of blocks +% has to be an even number - nrBlocks is rounded down if needed. +% overlap determines the number of pixels with which individual blocks are +% overlapping to avoid edge effects. + +if ~strcmpi(opts.fPath(end),filesep) + opts.fPath = [opts.fPath filesep]; +end + +% these should be provided as inputs +nrBlocks = opts.nrBlocks; +overlap = opts.overlap; + +%construct path to data folder and give some basic info +opts.fName = 'Frames'; %name of imaging data files. +opts.plotChans = false; %plot results for blue and violet channel when loading raw data. Will make the code break on the HPC. +opts.loadRaw = true; %flag to use raw data instead of .mj2 files. +opts.verbosity = false; %flag to supress warnings from 'splitChannel / splitVideo' code. +opts.sRate = 30; %single-channel sampling rate in Hz + +% analog data lines +opts.stimLine = 6; %analog line that contains stimulus trigger. +opts.trigLine = [8 9]; %analog lines for blue and violet light triggers. + +if nrBlocks ~= floor(sqrt(nrBlocks))^2 + fprintf('Chosen nrBlocks (%d) cannot be squared. Using %d instead.\n', nrBlocks, floor(sqrt(nrBlocks))^2) + nrBlocks = floor(sqrt(nrBlocks))^2; +end + +disp('==============='); tic; +disp(opts.fPath); +fprintf('Dual-channel recording - Using %d blocks for SVD\n', nrBlocks); +disp(datestr(now)); + +%% check if .dat or .mj2 files are present. Use slower splitvideo code for latter case. +rawCheck = dir([opts.fPath filesep opts.fName '*dat']); +vidCheck = dir([opts.fPath filesep opts.fName '*mj2']); +analogCheck = dir([opts.fPath filesep 'Analog_*.dat']); + +if size(rawCheck,1) == size(analogCheck,1) + fileCnt = size(rawCheck,1); + for iFiles = 1 : fileCnt %go through files and check for trialNr. this is used for transformation to .mat files later. + temp = textscan(rawCheck(iFiles).name,'%s%f%s','Delimiter','_'); + trials(iFiles) = temp{2}; + end +elseif size(vidCheck,1) == size(analogCheck,1) + fileCnt = size(vidCheck,1); + for iFiles = 1 : fileCnt %go through files and check for trialNr. this is used for transformation to .mat files later. + temp = textscan(vidCheck(iFiles).name,'%s%f%s','Delimiter','_'); + trials(iFiles) = temp{2}; + end + opts.loadRaw = false; + disp(['Using ' num2str(length(trials)) ' .mj2 files.']); +else + error('Unequal number of imaging and analog data files. Aborted') +end +trials = sort(trials); + +%% get reference images for motion correction +if opts.loadRaw + [blueData,~,hemoData] = Widefield_SplitChannels(opts,trials(1)); +else + [blueData,~,hemoData] = Widefield_SplitVideo(opts,trials(1)); +end +blueData = single(squeeze(blueData)); +blueRef = fft2(median(blueData,3)); %blue reference for alignment +save([opts.fPath 'blueRef.mat'],'blueRef'); +hemoData = single(squeeze(hemoData)); +hemoRef = fft2(median(hemoData,3)); %violet reference for alignment +save([opts.fPath 'hemoRef.mat'],'hemoRef'); + +%% get index for individual blocks +indImg = reshape(1:numel(blueRef),size(blueRef)); %this is an 'image' with the corresponding indices +blockSize = ceil((size(blueRef) + repmat(sqrt(nrBlocks) * overlap, 1, 2))/sqrt(nrBlocks)); %size of each block +blockInd = cell(1, nrBlocks); + +Cnt = 0; +colSteps = (0 : blockSize(1) - overlap : size(blueRef,1)) + 1; %steps for columns +rowSteps = (0 : blockSize(2) - overlap : size(blueRef,2)) + 1; %steps for rows +for iRows = 1 : sqrt(nrBlocks) + for iCols = 1 : sqrt(nrBlocks) + + Cnt = Cnt + 1; + % get current block and save index as vector + colInd = colSteps(iCols) : colSteps(iCols) + blockSize(1) - 1; + rowInd = rowSteps(iRows) : rowSteps(iRows) + blockSize(2) - 1; + + colInd(colInd > size(blueRef,1)) = []; + rowInd(rowInd > size(blueRef,2)) = []; + + cBlock = indImg(colInd, rowInd); + blockInd{Cnt} = cBlock(:); + + end +end +save([opts.fPath 'blockInd.mat'],'blockInd'); + +%% perform image alignement for separate channels and collect data in mov matrix +blueAvg = zeros([size(blueData,1), size(blueData,2), fileCnt],'uint16'); %average for mean correction. Collect single session averages to verify correct channel separation. +hemoAvg = zeros([size(blueData,1), size(blueData,2), fileCnt],'uint16'); +blueFrameTimes = cell(1, fileCnt); +hemoFrameTimes = cell(1, fileCnt); +if ~exist([opts.fPath 'blockData'], 'dir') + mkdir([opts.fPath 'blockData']); +end + +try + blueRef = gpuArray(blueRef); + hemoRef = gpuArray(hemoRef); +end + +for iTrials = 1:fileCnt + if opts.loadRaw + [blueData,blueTimes,hemoData,hemoTimes] = Widefield_SplitChannels(opts,trials(iTrials)); + else + [blueData,blueTimes,hemoData,hemoTimes] = Widefield_SplitVideo(opts,trials(iTrials)); + end + + if size(blueData,3) ~= size(hemoData,3) + error(['Trial ' int2str(trials(iTrials)) ': Blue and hemo channels have uneven framecount']) + end + + try + blueData = gpuArray(blueData); + hemoData = gpuArray(hemoData); + end + + %perform image alignment for both channels + for iFrames = 1:size(blueData,3) + [~, temp] = Widefield_dftregistration(blueRef, fft2(blueData(:, :, iFrames)), 10); + blueData(:, :, iFrames) = abs(ifft2(temp)); + + [~, temp] = Widefield_dftregistration(hemoRef, fft2(hemoData(:, :, iFrames)), 10); + hemoData(:, :, iFrames) = abs(ifft2(temp)); + end + blueData = gather(blueData); + hemoData = gather(hemoData); + + % keep avg for each trial to check if channels were separated correctly + blueAvg(:,:,iTrials) = mean(blueData,3); + hemoAvg(:,:,iTrials) = mean(blueData,3); + + %keep timestamps for all frames + blueFrameTimes{iTrials} = blueTimes; + hemoFrameTimes{iTrials} = hemoTimes; + + if rem(iTrials,10) == 0 + fprintf(1, 'Loading session %d out of %d\n', iTrials,length(trials)); + end + + blueData = reshape(blueData, [], size(blueData,3)); + hemoData = reshape(hemoData, [], size(hemoData,3)); + + % save data in individual blocks. single file for each trial/block. Will delete those later. + for iBlocks = 1:nrBlocks + bBlock = blueData(blockInd{iBlocks}, :); + hBlock = hemoData(blockInd{iBlocks}, :); + save([opts.fPath 'blockData' filesep 'blueBlock' num2str(iBlocks) '_Trial' num2str(iTrials)], 'bBlock', '-v6'); + save([opts.fPath 'blockData' filesep 'hemoBlock' num2str(iBlocks) '_Trial' num2str(iTrials)], 'hBlock', '-v6'); + end +end +clear blueData hemoData blueTimes hemoTiems blueRef hemoRef +save([opts.fPath 'trials.mat'],'trials'); %save trials so order of analysis is consistent + +%save frametimes for blue/hemo trials +save([opts.fPath 'blueFrameTimes.mat'],'blueFrameTimes', 'trials'); +save([opts.fPath 'hemoFrameTimes.mat'],'hemoFrameTimes', 'trials'); + +%save averages in case you need them later +save([opts.fPath 'blueAvg.mat'],'blueAvg'); +save([opts.fPath 'hemoAvg.mat'],'hemoAvg'); + +%take average over all trials for subsequent mean correction +blueAvg = mean(single(blueAvg),3); +hemoAvg = mean(single(hemoAvg),3); + +%% subtract and divide each block by and compress with SVD +bU = cell(nrBlocks,1); bV = cell(nrBlocks,1); +for iBlocks = 1 : nrBlocks + + % rebuild current block from all trials + Cnt = 0; + allBlock = NaN(size(blockInd{iBlocks},1), size(cat(1,blueFrameTimes{:}),1), 2, 'single'); + for iTrials = 1:fileCnt + load([opts.fPath 'blockData' filesep 'blueBlock' num2str(iBlocks) '_Trial' num2str(iTrials)], 'bBlock'); + load([opts.fPath 'blockData' filesep 'hemoBlock' num2str(iBlocks) '_Trial' num2str(iTrials)], 'hBlock'); + + allBlock(:, Cnt + (1:size(bBlock,2)), 1) = single(bBlock); + allBlock(:, Cnt + (1:size(bBlock,2)), 2) = single(hBlock); + Cnt = Cnt + size(bBlock,2); + end + + % compute dF/F + allBlock(:,:,1) = bsxfun(@minus, allBlock(:,:,1), blueAvg(blockInd{iBlocks})); + allBlock(:,:,1) = bsxfun(@rdivide, allBlock(:,:,1), blueAvg(blockInd{iBlocks})); + allBlock(:,:,2) = bsxfun(@minus, allBlock(:,:,2), hemoAvg(blockInd{iBlocks})); + allBlock(:,:,2) = bsxfun(@rdivide, allBlock(:,:,2), hemoAvg(blockInd{iBlocks})); + + % run SVD on current block + [bU{iBlocks}, s, bV{iBlocks}] = svd(reshape(allBlock,size(allBlock,1),[]), 'econ'); + bV{iBlocks} = s * bV{iBlocks}'; %multiply S into V, so only U and V from here on + bU{iBlocks} = bU{iBlocks}(:, 1:opts.blockDims); %reduce number of components + bV{iBlocks} = bV{iBlocks}(1:opts.blockDims, :); %reduce number of components + + if rem(iBlocks, round(nrBlocks / 5)) == 0 + fprintf(1, 'Loading block %d out of %d\n', iBlocks, nrBlocks); + end +end + +% save blockwise SVD data from both channels +save([opts.fPath 'bV.mat'], 'bU', 'bV', 'blockInd', 'opts', '-v7.3'); +toc; + diff --git a/downloaded/ridgeModel-master/widefield/compareMovie.fig b/downloaded/ridgeModel-master/widefield/compareMovie.fig new file mode 100644 index 0000000..e8645fc Binary files /dev/null and b/downloaded/ridgeModel-master/widefield/compareMovie.fig differ diff --git a/downloaded/ridgeModel-master/widefield/compareMovie.m b/downloaded/ridgeModel-master/widefield/compareMovie.m new file mode 100644 index 0000000..acd644a --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/compareMovie.m @@ -0,0 +1,1818 @@ +function varargout = compareMovie(varargin) +% Function to visualize a 3D data stack. +% Usage: compareMovie(matrix); +% Input: A 3-D matrix of arrangement X,Y,Frames to scroll through. +% If input is a 4-D matrix, the top-left dropdown allows to select +% an individual movie stack or the average over all. To compare +% stacks just switch back and forth at any frame. +% +% GUI inputs: +% Colorrange is given by min and max color. +% The slider at the figure bottom is used to scroll through frames in the stack. +% Filter length determines the size of a filter that can be applied +% to the image. The filter type is either a gaussian or a box filter +% and can be chosen with the drop-out menu at the bottom left. +% If chosen filter is gaussian, the sigma of the kernel is determined +% by 'Filter sigma'. +% Smoothed frames can be saved to base workspace using the 'Save +% data' button on the right. Depending on filter +% length, the smoothed frame will be slightly smaller as the original +% frame because the code only uses the 'valid' part of the frame +% without zero-padded edges. +% + +% If you experience unexpected behavior of the code or have suggestions for improvment, +% leave a comment on FEX +% +% compareMovie was created, using GUIDE in Matlab2014b. +% sm 5/8/2016 + +%% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @compareMovie_OpeningFcn, ... + 'gui_OutputFcn', @compareMovie_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before compareMovie is made visible. +function compareMovie_OpeningFcn(hObject, eventdata, handles, varargin) +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to compareMovie (see VARARGIN) + +% Choose default command line output for compareMovie +handles.output = hObject; + +if isempty(varargin) + error('No input. Data should be a 3- or 4-D frame stacks') +end + +Cnt = 0; +handles.UserData.Close = false; +handles.UserData.Frames = {}; +handles.movieSelect.String = {}; +varargin{1} = squeeze(varargin{1}); %remove singletons + +if length(size(varargin{1})) < 4 + handles.UserData.Frames{1} = varargin{1}; %3D / 2D array. Should be X,Y,Frames/Trials + handles.movieSelect.String{1} = 'Movie 1'; + Cnt = 1; +else + for iData = 1:size(varargin{1},4) + Cnt = Cnt +1; + handles.UserData.Frames{Cnt} = varargin{1}(:,:,:,iData); %3D / 2D array. Should be X,Y,Frames/Trials + handles.movieSelect.String{Cnt} = ['Movie ' int2str(Cnt)]; + if iData == 1 + dataAvg = varargin{1}(:,:,:,iData); + else + a = dataAvg.*Cnt; + b = varargin{1}(:,:,:,iData); + dataAvg = a + b; + dataAvg(isnan(dataAvg)) = a(isnan(dataAvg)); + dataAvg(isnan(dataAvg)) = b(isnan(dataAvg)); + dataAvg = dataAvg./ (Cnt+1); + end + end +end + +idx = cellfun(@(x) any(strcmp(x,'labels')),varargin); %check if labels are provided +if any(idx) + for iLabels = 1:length(varargin{find(idx)+1}) %uses as many as are given + if iLabels <= Cnt %don't use if more labels as movies are given + handles.movieSelect.String{iLabels} = varargin{find(idx)+1}{iLabels}; + end + end +end + +idx = cellfun(@(x) any(strcmp(x,'outline')),varargin); %check if outline are provided +if any(idx) + for iLines = 1:length(varargin{find(idx)+1}) %keep all outlines + handles.UserData.outlines{iLines} = varargin{find(idx)+1}{iLines}; + end +end + +if isempty(handles.UserData.Frames) + error('No input. Data should be a 3- or 4-D frame stacks') +elseif length(size(varargin{1})) == 4 + handles.UserData.Frames{end+1} = dataAvg; +% handles.UserData.Frames{end+1} = nanmean(varargin{1},4); + handles.movieSelect.String{end+1} = 'Average'; + handles.movieSelect.Value = Cnt + 1; +end + +%initialize frame image +fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. +data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,1)),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %get first frame to display +rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. +if ~isinf(rotAngle) % Rotate image + data = imrotate(data,rotAngle,'crop'); + mask = ~imrotate(true(size(data)),rotAngle,'crop'); + data(mask) = NaN; +end +cImg = imshow(data,[str2double(get(handles.MinColor,'String')) str2double(get(handles.MaxColor,'String'))],'parent',handles.FrameImage); %create image object for preview +set(cImg,'AlphaData',~isnan(data)); %make NaNs transparent. +axis(handles.FrameImage,'image'); +set(handles.CurrentFrame,'string',['Showing Frame 1 / ' num2str(size(handles.UserData.Frames{handles.movieSelect.Value},3))]) + +if handles.UseThreshold.Value + ind = thresholdImage(data,str2double(handles.ImgThresh.String)); + set(cImg,'AlphaData',ind); %make values below transparent. Since there is no image below, pixels should appear white. +end +handles.FrameImage.Tag = 'FrameImage'; %add tag so axes can be identified later + +if handles.UseThreshold.Value + ind = thresholdImage(data,str2double(handles.ImgThresh.String)); + set(cImg,'AlphaData',ind); %make values below transparent. Since there is no image below, pixels should appear white. +end + +set(handles.FrameSlider,'Min',1); +set(handles.FrameSlider,'Max',size(handles.UserData.Frames{handles.movieSelect.Value},3)); +set(handles.FrameSlider,'Value',1); + +if size(handles.UserData.Frames{handles.movieSelect.Value},3) == 1 + set(handles.FrameSlider,'SliderStep',[0 0]) +else + set(handles.FrameSlider,'SliderStep',[1/(size(handles.UserData.Frames{handles.movieSelect.Value},3)-1) 1/(size(handles.UserData.Frames{handles.movieSelect.Value},3)-1)]); +end + + +cRange = [min(data(:)) max(data(:))]; +if ~isnan(cRange) + caxis(handles.FrameImage,cRange); + handles.MinColor.String = num2str(round(double(cRange(1)),4)); + handles.MaxColor.String = num2str(round(double(max(cRange(2))),4)); +end + +colormap(handles.FrameImage,strtrim(handles.pickColormap.String{handles.pickColormap.Value})); +handles.areaProp.String = fieldnames(regionprops(1,'all')); %get area properties +handles.areaProp.Value = 1; %set 1 as default (should be 'area') + +cla(handles.FrameBuffer); +handles.UserData.frameInd = plot([1 1],handles.FrameBuffer.YLim, '--k','parent', handles.FrameBuffer, 'Visible', 'off'); +% handles.UserData.indVals = NaN; +handles.UserData.singleTraces = {}; +handles.UserData.meanTrace = {}; + +% Update handles structure +guidata(hObject, handles); + +% UIWAIT makes compareMovie wait for user response (see UIRESUME) +uiwait(hObject); + + +% --- Outputs from this function are returned to the command line. +function varargout = compareMovie_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +[varargout{1},varargout{2},varargout{3},varargout{4},varargout{5}] = SaveFrame_Callback([],[],handles); + +if handles.UserData.Close + delete(handles.ShowStack) +else + handles.UserData.Close = true; %allow close request function to close figure + guidata(hObject, handles); +end + +% --- Executes on slider movement. +function FrameSlider_Callback(hObject, eventdata, handles) +% hObject handle to FrameSlider (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'Value') returns position of slider +% get(hObject,'Min') and get(hObject,'Max') to determine range of slider + +slideVal = round(get(hObject,'Value')); +set(hObject,'Value',slideVal); +set(handles.CurrentFrame,'string',['Showing Frame ' num2str(slideVal) ' / ' num2str(size(handles.UserData.Frames{handles.movieSelect.Value},3))]) +drawImage(handles,handles.FrameImage,handles.FrameSlider); +if ishandle(handles.UserData.frameInd) +handles.UserData.frameInd.XData = [slideVal slideVal]; +end + +% --- Executes during object creation, after setting all properties. +function FrameSlider_CreateFcn(hObject, eventdata, handles) +% hObject handle to FrameSlider (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: slider controls usually have a light gray background. +if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor',[.9 .9 .9]); +end + + +function MaxColor_Callback(hObject, eventdata, handles) +% hObject handle to MaxColor (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of MaxColor as text +% str2double(get(hObject,'String')) returns contents of MaxColor as a double + +minColor = str2double(handles.MinColor.String); +maxColor = str2double(handles.MaxColor.String); + +if isnan(maxColor) || minColor > maxColor + handles.MaxColor.String = num2str(minColor + 1); + maxColor = minColor + 1; +end + +fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. +data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(handles.FrameSlider,'Value'))),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame +drawImage(handles,handles.FrameImage,handles.FrameSlider); + + +% --- Executes during object creation, after setting all properties. +function MaxColor_CreateFcn(hObject, eventdata, handles) +% hObject handle to MaxColor (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +function MinColor_Callback(hObject, eventdata, handles) +% hObject handle to MinColor (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of MinColor as text +% str2double(get(hObject,'String')) returns contents of MinColor as a double + +minColor = str2double(handles.MinColor.String); +maxColor = str2double(handles.MaxColor.String); + +if isnan(minColor) || minColor > maxColor + handles.MinColor.String = num2str(maxColor - 1); + minColor = maxColor -1; +end + +fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. +data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(handles.FrameSlider,'Value'))),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame +drawImage(handles,handles.FrameImage,handles.FrameSlider); + + +% --- Executes during object creation, after setting all properties. +function MinColor_CreateFcn(hObject, eventdata, handles) +% hObject handle to MinColor (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +function FrameSmth_Callback(hObject, eventdata, handles) +% hObject handle to FrameSmth (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of FrameSmth as text +% str2double(get(hObject,'String')) returns contents of FrameSmth as a double + +if ~isnan(str2double(get(hObject,'string'))) + FilterType_Callback([],[],handles); +else + set(hObject,'string','0') +end + +% --- Executes during object creation, after setting all properties. +function FrameSmth_CreateFcn(hObject, eventdata, handles) +% hObject handle to FrameSmth (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + +% --- Executes on selection change in FilterType. +function FilterType_Callback(hObject, eventdata, handles) +% hObject handle to FilterType (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = cellstr(get(hObject,'String')) returns FilterType contents as cell array +% contents{get(hObject,'Value')} returns selected item from FilterType + +drawImage(handles,handles.FrameImage,handles.FrameSlider); + + +% --- Executes during object creation, after setting all properties. +function FilterType_CreateFcn(hObject, eventdata, handles) +% hObject handle to FilterType (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +function FrameSigma_Callback(hObject, eventdata, handles) +% hObject handle to FrameSigma (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of FrameSigma as text +% str2double(get(hObject,'String')) returns contents of FrameSigma as a double + +if isnan(str2double(get(hObject,'string'))) + set(hObject,'string','1.76'); + disp([get(hObject,'string') ' is not a valid input for sigma. Set back to default (1.76)']) +else + FilterType_Callback([],[],handles); +end + +% --- Executes during object creation, after setting all properties. +function FrameSigma_CreateFcn(hObject, eventdata, handles) +% hObject handle to FrameSigma (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + +% --- Executes on button press in SaveFrame. +function [ImageOut,areaBounds,areaMask,traceData,tracePosition] = SaveFrame_Callback(hObject, eventdata, handles) +% hObject handle to SaveFrame (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +cFrame = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(handles.FrameSlider,'Value'))),round(str2double(get(handles.FrameSmth,'string'))),str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame +rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. +if ~isinf(rotAngle) % Rotate image + cFrame = imrotate(cFrame,rotAngle,'crop'); + mask = ~imrotate(true(size(cFrame)),rotAngle,'crop'); + cFrame(mask) = NaN; +end +ImageOut = cFrame; +assignin('base','ImageOut',ImageOut); %send current image of both axes in cell array. Cell 1 is leftaxis , cell 2 is right axis. + +lines = findall(handles.FrameImage.Children,'Type','line'); %send area outlines to base workspace +areaBounds = {}; areaMask = []; +for x = 1:length(lines) + areaBounds{x}(1,:) = lines(x).XData; + areaBounds{x}(2,:) = lines(x).YData; + areaMask{x} = poly2mask(areaBounds{x}(1,:),areaBounds{x}(2,:),size(cFrame,1),size(cFrame,2)); +end +if ~isempty(areaBounds) + assignin('base','areaBounds',areaBounds); + assignin('base','areaMask',areaMask); +end + +traceOutlines = findall(handles.FrameImage.Children,'Type','rectangle'); %send area outline to base workspace +tracePosition = [];traceData = []; + +if ishandle(99) %check if figure with frame traces is open. + traces = findall(99,'Type','line'); +else + traces = []; +end + +for x = 1:length(traceOutlines) + tracePosition(x,:) = traceOutlines(x).Position; %position of rectangle that was used to create trace + if length(traces) >= x + traceData(x,:) = traces(x).YData; %trace data. changes in signal strenght across frames. + end +end +if ~isempty(traceData) + assignin('base','traceData',traceData); +end +if ~isempty(tracePosition) + assignin('base','tracePosition',tracePosition); +end + +% --- Executes on button press in SaveFrameBuffer. +function SaveFrameBuffer_Callback(hObject, eventdata, handles) +% hObject handle to SaveFrameBuffer (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +function pointerSize_Callback(hObject, eventdata, handles) +% hObject handle to pointerSize (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of pointerSize as text +% str2double(get(hObject,'String')) returns contents of pointerSize as a double + + +% --- Executes during object creation, after setting all properties. +function pointerSize_CreateFcn(hObject, eventdata, handles) +% hObject handle to pointerSize (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in getTrace. +function getTrace_Callback(hObject, eventdata, handles) +% hObject handle to getTrace (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +if size(handles.UserData.Frames{handles.movieSelect.Value},3) > 1 + datacursormode on + cursorMode = datacursormode(handles.ShowStack); + currentCursor = getCursorInfo(cursorMode); + while isempty(currentCursor) + drawnow; + currentCursor = getCursorInfo(cursorMode); + pause(0.01); + end + + if strcmp(currentCursor.Target.Parent.Tag,'FrameImage') + cPos = currentCursor.Position; + pointerSize = str2double(handles.pointerSize.String); + + colorOrder = get(gca,'ColorOrder'); + currentColor = colorOrder(rem(length(findall(gca,'Type','rectangle')),size(colorOrder,1))+1,:); + + Frame = [cPos(1)-pointerSize cPos(2)-pointerSize pointerSize*2 pointerSize*2]; + hold(handles.FrameImage,'on'); + rectangle('Position',Frame,'linewidth',2,'edgecolor',currentColor,'Curvature',1,'parent',handles.FrameImage); + hold(handles.FrameImage,'off'); + datacursormode off + hObject.Value = false; + + % get data from frame stack + dSize = size(handles.UserData.Frames{1}); + [xx,yy] = meshgrid(1:dSize(2),1:dSize(1)); %isolate index for selected area + + for iData = 1:max([1 length(handles.UserData.Frames)-1]) + + data = handles.UserData.Frames{iData}; + rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. + if isinf(rotAngle); rotAngle = 0; end + + data = imrotate(data,rotAngle,'crop'); + mask = imrotate(false(dSize(1:2)),rotAngle,'crop'); + mask = mask | hypot(xx - cPos(1), yy - cPos(2)) <= pointerSize; + + data = reshape(data,prod(dSize(1:2)),[]); %merge x and y dimension based on mask size and remaining dimensions. + mask = reshape(mask,numel(mask),1); %reshape mask to vector + selData(iData,:) = nanmean(data(mask,:)); %merge selected pixels + + end + + if handles.showTraces.Value + handles.UserData.singleTraces{end+1} = plot(selData','linewidth',1,'color',ones(1,3)*0.7, 'parent', handles.FrameBuffer); + else + handles.UserData.singleTraces{end+1} = plot(selData','linewidth',1,'color',ones(1,3)*0.7, 'parent', handles.FrameBuffer, 'visible', 'off'); + end + hold(handles.FrameBuffer,'on'); + + amean = nanmean(selData,1); + handles.UserData.meanTrace{end+1} = plot(amean,'linewidth',3,'color',currentColor, 'parent', handles.FrameBuffer); + + amean(isnan(amean)) = 0; + asem = nanstd(double(selData),[],1)/sqrt(iData); + asem(isnan(asem)) = 0; + + if handles.showError.Value + fill([1:length(amean) length(amean):-1:1],[amean+asem fliplr(amean-asem)], currentColor, 'FaceAlpha', 0.5,'linestyle','none', 'parent', handles.FrameBuffer); + handles.UserData.meanTrace{end}.Visible = 'on'; + else + fill([1:length(amean) length(amean):-1:1],[amean+asem fliplr(amean-asem)], currentColor, 'FaceAlpha', 0,'linestyle','none', 'parent', handles.FrameBuffer); + handles.UserData.meanTrace{end}.Visible = 'off'; + end + + axis(handles.FrameBuffer,'square'); + + delete(handles.UserData.frameInd); drawnow; + handles.UserData.frameInd = plot(repmat(handles.FrameSlider.Value,1,2),handles.FrameBuffer.YLim, '--k', 'parent', handles.FrameBuffer); + drawnow; handles.UserData.frameInd.YData = handles.FrameBuffer.YLim; + guidata(hObject, handles); + + xRange = []; + for iTraces = 1 : length(handles.UserData.singleTraces) + for iLines = 1 : length(handles.UserData.singleTraces{iTraces}) + if iLines == handles.movieSelect.Value + handles.UserData.singleTraces{iTraces}(iLines).LineWidth = 3; + if ~handles.showError.Value + handles.UserData.singleTraces{iTraces}(iLines).Color = handles.UserData.meanTrace{iTraces}.Color; + else + handles.UserData.singleTraces{iTraces}(iLines).Color = [0.7 0.7 0.7]; + end + else + handles.UserData.singleTraces{iTraces}(iLines).LineWidth = 1; + end + temp = [min(handles.UserData.singleTraces{iTraces}(iLines).XData) max(handles.UserData.singleTraces{iTraces}(iLines).XData)]; + if isempty(xRange); xRange = temp; end + if temp(1) < min(xRange); xRange(1) = temp(1);end + if temp(2) > max(xRange); xRange(2) = temp(2);end + end + end + handles.FrameBuffer.XLim = [xRange(1)-1 xRange(2)+1]; + + else + disp('Invalid pointer target. Click on the image to plot corresponding traces.') + end + pause(0.5); + delete(findall(handles.FrameImage,'Type','hggroup','HandleVisibility','off')); + delete(findall(handles.FrameBuffer,'Type','hggroup','HandleVisibility','off')); + + %check for indicators + handles = showVerInds_Callback(handles.showVerInds, [], handles); + handles = showHorInds_Callback(handles.showHorInds, [], handles); + guidata(hObject, handles); + +else + disp('Traces can only be plotted if more than one frame is provided.') +end + +% --- Executes on button press in CurrentFrameBuffer. +function CurrentFrameBuffer_Callback(hObject, eventdata, handles) +% hObject handle to CurrentFrameBuffer (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes on button press in clearTrace. +function clearTrace_Callback(hObject, eventdata, handles) +% hObject handle to clearTrace (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +delete(findall(handles.FrameImage.Children,'Type','rectangle')); +cla(handles.FrameBuffer); +handles.UserData.singleTraces = {}; +handles.UserData.meanTrace = {}; +showVerInds.Value = false; +showHorInds.Value = false; + +guidata(hObject, handles); + + +% --- Executes on mouse press over figure background. +function ShowStack_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to comparemovie (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + + +% --- Executes when user attempts to close comparemovie. +function ShowStack_CloseRequestFcn(hObject, eventdata, handles) +% hObject handle to comparemovie (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: delete(hObject) closes the figure +if handles.UserData.Close + delete(handles.ShowStack) +else + handles.UserData.Close = true; %leave figure but give a flag to output function to close after output has been provided + guidata(hObject, handles); + uiresume(hObject); +end + + +% --- Executes on selection change in pickColormap. +function pickColormap_Callback(hObject, eventdata, handles) +% hObject handle to pickColormap (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = cellstr(get(hObject,'String')) returns pickColormap contents as cell array +% contents{get(hObject,'Value')} returns selected item from pickColormap + +cMap = str2func(strtrim(handles.pickColormap.String{handles.pickColormap.Value})); +C = cMap(256); +colormap(handles.FrameImage,C); + + +% --- Executes during object creation, after setting all properties. +function pickColormap_CreateFcn(hObject, eventdata, handles) +% hObject handle to pickColormap (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in ScaleColor. +function ScaleColor_Callback(hObject, eventdata, handles) +% hObject handle to ScaleColor (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +if hObject.Value + fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. + data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(handles.FrameSlider,'Value'))),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame + + caxis(handles.FrameImage,[min(data(:)) max(data(:))]); + handles.MinColor.String = num2str(round(double(min(data(:))),4)); + handles.MaxColor.String = num2str(round(double(max(data(:))),4)); +end + +% --- Executes on button press in SaveMovie. +function SaveMovie_Callback(hObject, eventdata, handles) +% hObject handle to SaveMovie (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +[fName,fPath] = uiputfile('*.avi', 'Enter filename'); + +try +cMap = str2func(strtrim(handles.pickColormap.String{handles.pickColormap.Value})); +C = cMap(256); +Range = [str2double(handles.MinColor.String) str2double(handles.MaxColor.String)]; +imgScale = 2; %scale video if requried + +% v = VideoWriter([fPath fName],'indexed avi'); +% v.Colormap = C; +v = VideoWriter([fPath fName]); +% v = VideoWriter([fPath fName], 'MPEG-4'); +v.FrameRate = str2double(inputdlg({'Enter the framerate for movie file'},'',1)); +open(v); + +for iFrames = 1:size(handles.UserData.Frames{handles.movieSelect.Value},3) + + pic = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,iFrames)), ... %smooth current frame + round(str2double(get(handles.FrameSmth,'string'))), ... + str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); + + rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. + if ~isinf(rotAngle) % Rotate image + pic = imrotate(pic,rotAngle,'crop'); + end + pic(isnan(pic)) = 0; + + if handles.UseThreshold.Value + thresh = str2double(handles.ImgThresh.String); + if thresh >= 0 + ind = uint8(imfill(pic > nanstd(pic(:))*thresh, 'holes')); %threshold input matrix and make sure there are no holes in separate areas + elseif thresh < 0 + ind = uint8(imfill(pic < nanstd(pic(:))*thresh, 'holes')); %threshold input matrix and make sure there are no holes in separate areas + end + pic = bsxfun(@times, double(pic), double(ind)); %set values below thresh to 0. Will come out as black. + end + + if imgScale > 1 + pic = imresize(pic,imgScale); + end + pic = mat2gray(pic,Range); + pic = gray2ind(pic,256); + pic(pic == 255) = 254; %make sure, no value hits the max. in the colormap (reserved for outline color) + + if isfield(handles.UserData,'oLines') && any(ishandle(handles.UserData.oLines)) %check for outlines + + if any(C(end,:) ~= handles.UserData.oLines(1).Color) + C(end,:) = handles.UserData.oLines(1).Color; %conserve outline color + end + + %add outlines to picture + for x = 1 : length(handles.UserData.outlines) + if imgScale > 1 + a = interp(handles.UserData.outlines{x}(:,1)*imgScale,imgScale*2); + b = interp(handles.UserData.outlines{x}(:,2)*imgScale,imgScale*2); + end + a = round(a); b = round(b); + idx = a < size(pic,1) | b < size(pic,2); + a = a(idx); + b = b(idx); + idx = sub2ind(size(pic), a, b); + pic(idx) = 255; + end + + end + pic = ind2rgb(pic, C); + writeVideo(v,pic) + +end +end +if exist('v','var') + close(v); +end + +% --- Executes on button press in UseThreshold. +function UseThreshold_Callback(hObject, eventdata, handles) +% hObject handle to UseThreshold (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +drawImage(handles,handles.FrameImage,handles.FrameSlider); + + +function ImgThresh_Callback(hObject, eventdata, handles) +% hObject handle to ImgThresh (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of ImgThresh as text +% str2double(get(hObject,'String')) returns contents of ImgThresh as a double + +cVal = str2double(hObject.String); +if isnan(cVal) + hObject.String = 0; + disp([get(hObject,'string') ' is not a valid input for threshold. Set back to 0.']) +else + UseThreshold_Callback([], [], handles); %re-draw images. +end + +% --- Executes during object creation, after setting all properties. +function ImgThresh_CreateFcn(hObject, eventdata, handles) +% hObject handle to ImgThresh (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in releaseFigure. +function releaseFigure_Callback(hObject, eventdata, handles) +% hObject handle to releaseFigure (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +uiresume(gcbf); %return control to matlab + +% --- Executes on button press in selectArea. +function selectArea_Callback(hObject, eventdata, handles) +% hObject handle to selectArea (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +threshold = str2double(handles.ImgThresh.String); %threshold in standard deviation units. This needs to be at least + +if threshold ~= 0 + datacursormode on + cursorMode = datacursormode(handles.ShowStack); + currentCursor = getCursorInfo(cursorMode); + while isempty(currentCursor) + drawnow; + currentCursor = getCursorInfo(cursorMode); + pause(0.01); + end + + cPos = currentCursor.Position; + colorOrder = repmat(reshape([0:1/4:1;1:-1/4:0],10,1),1,3); %color order is going from white to black + currentColor = colorOrder(rem(length(findall(gca,'Type','line')),size(colorOrder,1))+1,:); + axLabel = currentCursor.Target.Parent.Tag; %get label of selected axis + + % get frame data, based on which axis was selected + fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. + data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(handles.FrameSlider,'Value'))),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame + + rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. + if ~isinf(rotAngle) % Rotate image + data = imrotate(data,rotAngle,'crop'); + mask = ~imrotate(true(size(data)),rotAngle,'crop'); + data(mask) = NaN; + end + + if threshold >= 0 +% ind = imfill(data > nanstd(data(:))*threshold, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + ind = imfill(data > threshold, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + elseif threshold < 0 +% ind = imfill(data < nanstd(data(:))*threshold, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + ind = imfill(data < threshold, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + end + + if ~isempty(ind) + foundAreas = bwlabel(ind, 8); %find independent areas + cArea = foundAreas(cPos(2),cPos(1)); %get selected area + areaOutline = bwboundaries(foundAreas == cArea); %outline of selected area + + % plot to both axis + hold(handles.FrameImage,'on'); + plot(handles.FrameImage,areaOutline{1}(:,2),areaOutline{1}(:,1),'linewidth',4,'color',currentColor) + hold(handles.FrameImage,'off'); + end + datacursormode off + + pause(0.5); + delete(findall(handles.FrameImage,'Type','hggroup','HandleVisibility','off')); +end + + +% --- Executes on selection change in areaProp. +function areaProp_Callback(hObject, eventdata, handles) +% hObject handle to areaProp (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = cellstr(get(hObject,'String')) returns areaProp contents as cell array +% contents{get(hObject,'Value')} returns selected item from areaProp + + +% --- Executes during object creation, after setting all properties. +function areaProp_CreateFcn(hObject, eventdata, handles) +% hObject handle to areaProp (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in clearAreas. +function clearAreas_Callback(hObject, eventdata, handles) +% hObject handle to clearAreas (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +delete(findall(handles.FrameImage.Children,'Type','line')); %delete all lines from images - this should take care of area outlines + + +% --- Executes on button press in closeFigure. +function closeFigure_Callback(hObject, eventdata, handles) +% hObject handle to closeFigure (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +ShowStack_CloseRequestFcn(handles.ShowStack, [], handles); %close figure + + +function rotAngel_Callback(hObject, eventdata, handles) +% hObject handle to rotAngel (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of rotAngel as text +% str2double(get(hObject,'String')) returns contents of rotAngel as a double + +if isnan(str2double(get(hObject,'string'))) + set(hObject,'string','0'); + disp([get(hObject,'string') ' is not a valid input for rotation angle. Set back to 0.']) +else + FilterType_Callback([],[],handles); +end + +% --- Executes during object creation, after setting all properties. +function rotAngel_CreateFcn(hObject, eventdata, handles) +% hObject handle to rotAngel (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + + +%% Additional functions +function DataOut = ApplyFilter2(DataIn,fLength,sigma,type,useAbs) +% Apply either gaussian or box filter. +% Usage: DataOut = ApplyGauss(DataIn,fLength,sigma,type) +% Input: DataIn = 2D matrix on which the filter should be applied +% fLength = filter length. +% sigma = sigma of the gaussian kernel. Standard is 1.76 for a single standard deviation. +% type: type of filter. 1 for gaussian, 2 for box filter +% Output: DataOut = filtered version of DataIn. + +if fLength > 1 + if type == 1 + Kernel = ones(fLength,fLength); % Create box filter based on flength + Kernel = Kernel ./ fLength^2; + elseif type == 2 + [x,y]=meshgrid(-fLength:fLength,-fLength:fLength); % create gaussian filter based on flength and sigma + Kernel= exp(-(x.^2+y.^2)/(2*sigma*sigma))/(2*pi*sigma*sigma); + end + + if useAbs + DataOut = conv2(abs(double(DataIn)), Kernel, 'same'); %convolve original matrix with filter + else + DataOut = conv2(double(DataIn), Kernel, 'same'); %convolve original matrix with filter + end +else + if useAbs + DataOut = abs(DataIn); %don't apply filter if fLength is equal or lower then 1 + else + DataOut = DataIn; %don't apply filter if fLength is equal or lower then 1 + end +end +DataOut = padarray(double(DataOut),[1 1],NaN,'both'); %add NaNs to image to see its edge against zero-padded background when rotating. + + +function drawImage(handles,currAxis,cSlider) +% Short function to draw image to selected axis. +% handles are figure handles. currAxis is the current axis (frameImage or +% frame buffer) and cSlider is the according frame slider. + +fLength = str2double(get(handles.FrameSmth,'String')); +data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,get(cSlider,'Value'))),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame + +hold(currAxis,'on') +delete(findall(currAxis.Children,'Type','image')); +rotAngle = str2double(handles.rotAngel.String); %angle of rotation in degrees. +if ~isinf(rotAngle) % Rotate image + data = imrotate(data,rotAngle,'crop'); + mask = ~imrotate(true(size(data)),rotAngle,'crop'); + data(mask) = NaN; +end +cImg = imshow(data,[str2double(get(handles.MinColor,'String')) str2double(get(handles.MaxColor,'String'))],'parent',currAxis); %create image object for preview +set(cImg,'AlphaData',~isnan(data)); %make NaNs transparent. +colormap(currAxis,strtrim(handles.pickColormap.String{handles.pickColormap.Value})); +uistack(cImg,'bottom'); %make this bottom of the stack so squares remain visible +hold(currAxis,'off') + +if handles.ScaleColor.Value %adjust color range if set to auto scale + if strcmp(currAxis.Tag,'FrameImage') + if min(data(:)) ~= max(data(:)) && ~isnan(min(data(:))) + caxis(currAxis,[min(data(:)) max(data(:))]); + handles.MinColor.String = num2str(round(double(min(data(:))),4)); + handles.MaxColor.String = num2str(round(double(max(data(:))),4)); + end + end +end + +if handles.UseThreshold.Value + ind = thresholdImage(data,str2double(handles.ImgThresh.String)); + set(cImg,'AlphaData',ind); %make values below transparent. Since there is no image below, pixels should appear white. +end + + +function ind = thresholdImage(data,thresh) +% quick function to do the thresholding + +if thresh >= 0 +% ind = imfill(data > nanstd(data(:))*thresh, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + ind = imfill(data > thresh, 'holes'); %threshold input matrix and make sure there are no holes in separate areas +elseif thresh < 0 +% ind = imfill(data < nanstd(data(:))*thresh, 'holes'); %threshold input matrix and make sure there are no holes in separate areas + ind = imfill(data < thresh, 'holes'); %threshold input matrix and make sure there are no holes in separate areas +end + + +%additional colormap +function map = colormap_blueblackred(m) +if nargin < 1 + m = size(get(gcf,'colormap'),1); +end + +map=[1 1 0; 1 0.96 0; 1 0.92 0; 1 0.88 0; 1 0.84 0; 1 0.80 0; 1 0.76 0; 1 0.72 0; 1 0.68 0; 1 0.64 0; 1 0.60 0; 1 0.56 0; 1 0.52 0; 1 0.48 0; 1 0.44 0; 1 0.40 0; ... + 1 0.36 0; 1 0.32 0; 1 0.28 0; 1 0.24 0; 1 0.20 0; 1 0.16 0; 1 0.12 0; 1 0.08 0; 1 0.04 0; + 1 0 0; 0.96 0 0; 0.92 0 0; 0.88 0 0; 0.84 0 0; 0.80 0 0; 0.76 0 0; 0.72 0 0; 0.68 0 0; 0.64 0 0; 0.60 0 0; 0.56 0 0; 0.52 0 0; 0.48 0 0; 0.44 0 0; 0.40 0 0; ... + 0.36 0 0; 0.32 0 0; 0.28 0 0; 0.24 0 0; 0.20 0 0; 0.16 0 0; 0.12 0 0; 0.08 0 0; 0.04 0 0; 0 0 0; ... + 0 0 0.04; 0 0 0.08; 0 0 0.12; 0 0 0.16; 0 0 0.20; 0 0 0.24; 0 0 0.28; 0 0 0.32; 0 0 0.36; 0 0 0.40; 0 0 0.44; 0 0 0.48; 0 0 0.52; ... + 0 0 0.56; 0 0 0.60; 0 0 0.64; 0 0 0.68; 0 0 0.72; 0 0 0.76; 0 0 0.80; 0 0 0.84; 0 0 0.88; 0 0 0.92; 0 0 0.96; 0 0 1; ... + 0 0.04 1; 0 0.08 1; 0 0.12 1; 0 0.16 1; 0 0.20 1; 0 0.24 1; 0 0.28 1; 0 0.32 1; 0 0.36 1; 0 0.40 1; 0 0.44 1; 0 0.48 1; 0 0.52 1; ... + 0 0.56 1; 0 0.60 1; 0 0.64 1; 0 0.68 1; 0 0.72 1; 0 0.76 1; 0 0.80 1; 0 0.84 1; 0 0.88 1; 0 0.92 1; 0 0.96 1; 0 1 1]; + +map = imresize(map,[m,3]); +map = map - min(map(:));map = map ./ max(map(:)); +map = map(end:-1:1,:); + +function [cm_data]=inferno(m) + +cm = [[ 1.46159096e-03, 4.66127766e-04, 1.38655200e-02], + [ 2.26726368e-03, 1.26992553e-03, 1.85703520e-02], + [ 3.29899092e-03, 2.24934863e-03, 2.42390508e-02], + [ 4.54690615e-03, 3.39180156e-03, 3.09092475e-02], + [ 6.00552565e-03, 4.69194561e-03, 3.85578980e-02], + [ 7.67578856e-03, 6.13611626e-03, 4.68360336e-02], + [ 9.56051094e-03, 7.71344131e-03, 5.51430756e-02], + [ 1.16634769e-02, 9.41675403e-03, 6.34598080e-02], + [ 1.39950388e-02, 1.12247138e-02, 7.18616890e-02], + [ 1.65605595e-02, 1.31362262e-02, 8.02817951e-02], + [ 1.93732295e-02, 1.51325789e-02, 8.87668094e-02], + [ 2.24468865e-02, 1.71991484e-02, 9.73274383e-02], + [ 2.57927373e-02, 1.93306298e-02, 1.05929835e-01], + [ 2.94324251e-02, 2.15030771e-02, 1.14621328e-01], + [ 3.33852235e-02, 2.37024271e-02, 1.23397286e-01], + [ 3.76684211e-02, 2.59207864e-02, 1.32232108e-01], + [ 4.22525554e-02, 2.81385015e-02, 1.41140519e-01], + [ 4.69146287e-02, 3.03236129e-02, 1.50163867e-01], + [ 5.16437624e-02, 3.24736172e-02, 1.59254277e-01], + [ 5.64491009e-02, 3.45691867e-02, 1.68413539e-01], + [ 6.13397200e-02, 3.65900213e-02, 1.77642172e-01], + [ 6.63312620e-02, 3.85036268e-02, 1.86961588e-01], + [ 7.14289181e-02, 4.02939095e-02, 1.96353558e-01], + [ 7.66367560e-02, 4.19053329e-02, 2.05798788e-01], + [ 8.19620773e-02, 4.33278666e-02, 2.15289113e-01], + [ 8.74113897e-02, 4.45561662e-02, 2.24813479e-01], + [ 9.29901526e-02, 4.55829503e-02, 2.34357604e-01], + [ 9.87024972e-02, 4.64018731e-02, 2.43903700e-01], + [ 1.04550936e-01, 4.70080541e-02, 2.53430300e-01], + [ 1.10536084e-01, 4.73986708e-02, 2.62912235e-01], + [ 1.16656423e-01, 4.75735920e-02, 2.72320803e-01], + [ 1.22908126e-01, 4.75360183e-02, 2.81624170e-01], + [ 1.29284984e-01, 4.72930838e-02, 2.90788012e-01], + [ 1.35778450e-01, 4.68563678e-02, 2.99776404e-01], + [ 1.42377819e-01, 4.62422566e-02, 3.08552910e-01], + [ 1.49072957e-01, 4.54676444e-02, 3.17085139e-01], + [ 1.55849711e-01, 4.45588056e-02, 3.25338414e-01], + [ 1.62688939e-01, 4.35542881e-02, 3.33276678e-01], + [ 1.69575148e-01, 4.24893149e-02, 3.40874188e-01], + [ 1.76493202e-01, 4.14017089e-02, 3.48110606e-01], + [ 1.83428775e-01, 4.03288858e-02, 3.54971391e-01], + [ 1.90367453e-01, 3.93088888e-02, 3.61446945e-01], + [ 1.97297425e-01, 3.84001825e-02, 3.67534629e-01], + [ 2.04209298e-01, 3.76322609e-02, 3.73237557e-01], + [ 2.11095463e-01, 3.70296488e-02, 3.78563264e-01], + [ 2.17948648e-01, 3.66146049e-02, 3.83522415e-01], + [ 2.24762908e-01, 3.64049901e-02, 3.88128944e-01], + [ 2.31538148e-01, 3.64052511e-02, 3.92400150e-01], + [ 2.38272961e-01, 3.66209949e-02, 3.96353388e-01], + [ 2.44966911e-01, 3.70545017e-02, 4.00006615e-01], + [ 2.51620354e-01, 3.77052832e-02, 4.03377897e-01], + [ 2.58234265e-01, 3.85706153e-02, 4.06485031e-01], + [ 2.64809649e-01, 3.96468666e-02, 4.09345373e-01], + [ 2.71346664e-01, 4.09215821e-02, 4.11976086e-01], + [ 2.77849829e-01, 4.23528741e-02, 4.14392106e-01], + [ 2.84321318e-01, 4.39325787e-02, 4.16607861e-01], + [ 2.90763373e-01, 4.56437598e-02, 4.18636756e-01], + [ 2.97178251e-01, 4.74700293e-02, 4.20491164e-01], + [ 3.03568182e-01, 4.93958927e-02, 4.22182449e-01], + [ 3.09935342e-01, 5.14069729e-02, 4.23720999e-01], + [ 3.16281835e-01, 5.34901321e-02, 4.25116277e-01], + [ 3.22609671e-01, 5.56335178e-02, 4.26376869e-01], + [ 3.28920763e-01, 5.78265505e-02, 4.27510546e-01], + [ 3.35216916e-01, 6.00598734e-02, 4.28524320e-01], + [ 3.41499828e-01, 6.23252772e-02, 4.29424503e-01], + [ 3.47771086e-01, 6.46156100e-02, 4.30216765e-01], + [ 3.54032169e-01, 6.69246832e-02, 4.30906186e-01], + [ 3.60284449e-01, 6.92471753e-02, 4.31497309e-01], + [ 3.66529195e-01, 7.15785403e-02, 4.31994185e-01], + [ 3.72767575e-01, 7.39149211e-02, 4.32400419e-01], + [ 3.79000659e-01, 7.62530701e-02, 4.32719214e-01], + [ 3.85228383e-01, 7.85914864e-02, 4.32954973e-01], + [ 3.91452659e-01, 8.09267058e-02, 4.33108763e-01], + [ 3.97674379e-01, 8.32568129e-02, 4.33182647e-01], + [ 4.03894278e-01, 8.55803445e-02, 4.33178526e-01], + [ 4.10113015e-01, 8.78961593e-02, 4.33098056e-01], + [ 4.16331169e-01, 9.02033992e-02, 4.32942678e-01], + [ 4.22549249e-01, 9.25014543e-02, 4.32713635e-01], + [ 4.28767696e-01, 9.47899342e-02, 4.32411996e-01], + [ 4.34986885e-01, 9.70686417e-02, 4.32038673e-01], + [ 4.41207124e-01, 9.93375510e-02, 4.31594438e-01], + [ 4.47428382e-01, 1.01597079e-01, 4.31080497e-01], + [ 4.53650614e-01, 1.03847716e-01, 4.30497898e-01], + [ 4.59874623e-01, 1.06089165e-01, 4.29845789e-01], + [ 4.66100494e-01, 1.08321923e-01, 4.29124507e-01], + [ 4.72328255e-01, 1.10546584e-01, 4.28334320e-01], + [ 4.78557889e-01, 1.12763831e-01, 4.27475431e-01], + [ 4.84789325e-01, 1.14974430e-01, 4.26547991e-01], + [ 4.91022448e-01, 1.17179219e-01, 4.25552106e-01], + [ 4.97257069e-01, 1.19379132e-01, 4.24487908e-01], + [ 5.03492698e-01, 1.21575414e-01, 4.23356110e-01], + [ 5.09729541e-01, 1.23768654e-01, 4.22155676e-01], + [ 5.15967304e-01, 1.25959947e-01, 4.20886594e-01], + [ 5.22205646e-01, 1.28150439e-01, 4.19548848e-01], + [ 5.28444192e-01, 1.30341324e-01, 4.18142411e-01], + [ 5.34682523e-01, 1.32533845e-01, 4.16667258e-01], + [ 5.40920186e-01, 1.34729286e-01, 4.15123366e-01], + [ 5.47156706e-01, 1.36928959e-01, 4.13510662e-01], + [ 5.53391649e-01, 1.39134147e-01, 4.11828882e-01], + [ 5.59624442e-01, 1.41346265e-01, 4.10078028e-01], + [ 5.65854477e-01, 1.43566769e-01, 4.08258132e-01], + [ 5.72081108e-01, 1.45797150e-01, 4.06369246e-01], + [ 5.78303656e-01, 1.48038934e-01, 4.04411444e-01], + [ 5.84521407e-01, 1.50293679e-01, 4.02384829e-01], + [ 5.90733615e-01, 1.52562977e-01, 4.00289528e-01], + [ 5.96939751e-01, 1.54848232e-01, 3.98124897e-01], + [ 6.03138930e-01, 1.57151161e-01, 3.95891308e-01], + [ 6.09330184e-01, 1.59473549e-01, 3.93589349e-01], + [ 6.15512627e-01, 1.61817111e-01, 3.91219295e-01], + [ 6.21685340e-01, 1.64183582e-01, 3.88781456e-01], + [ 6.27847374e-01, 1.66574724e-01, 3.86276180e-01], + [ 6.33997746e-01, 1.68992314e-01, 3.83703854e-01], + [ 6.40135447e-01, 1.71438150e-01, 3.81064906e-01], + [ 6.46259648e-01, 1.73913876e-01, 3.78358969e-01], + [ 6.52369348e-01, 1.76421271e-01, 3.75586209e-01], + [ 6.58463166e-01, 1.78962399e-01, 3.72748214e-01], + [ 6.64539964e-01, 1.81539111e-01, 3.69845599e-01], + [ 6.70598572e-01, 1.84153268e-01, 3.66879025e-01], + [ 6.76637795e-01, 1.86806728e-01, 3.63849195e-01], + [ 6.82656407e-01, 1.89501352e-01, 3.60756856e-01], + [ 6.88653158e-01, 1.92238994e-01, 3.57602797e-01], + [ 6.94626769e-01, 1.95021500e-01, 3.54387853e-01], + [ 7.00575937e-01, 1.97850703e-01, 3.51112900e-01], + [ 7.06499709e-01, 2.00728196e-01, 3.47776863e-01], + [ 7.12396345e-01, 2.03656029e-01, 3.44382594e-01], + [ 7.18264447e-01, 2.06635993e-01, 3.40931208e-01], + [ 7.24102613e-01, 2.09669834e-01, 3.37423766e-01], + [ 7.29909422e-01, 2.12759270e-01, 3.33861367e-01], + [ 7.35683432e-01, 2.15905976e-01, 3.30245147e-01], + [ 7.41423185e-01, 2.19111589e-01, 3.26576275e-01], + [ 7.47127207e-01, 2.22377697e-01, 3.22855952e-01], + [ 7.52794009e-01, 2.25705837e-01, 3.19085410e-01], + [ 7.58422090e-01, 2.29097492e-01, 3.15265910e-01], + [ 7.64009940e-01, 2.32554083e-01, 3.11398734e-01], + [ 7.69556038e-01, 2.36076967e-01, 3.07485188e-01], + [ 7.75058888e-01, 2.39667435e-01, 3.03526312e-01], + [ 7.80517023e-01, 2.43326720e-01, 2.99522665e-01], + [ 7.85928794e-01, 2.47055968e-01, 2.95476756e-01], + [ 7.91292674e-01, 2.50856232e-01, 2.91389943e-01], + [ 7.96607144e-01, 2.54728485e-01, 2.87263585e-01], + [ 8.01870689e-01, 2.58673610e-01, 2.83099033e-01], + [ 8.07081807e-01, 2.62692401e-01, 2.78897629e-01], + [ 8.12239008e-01, 2.66785558e-01, 2.74660698e-01], + [ 8.17340818e-01, 2.70953688e-01, 2.70389545e-01], + [ 8.22385784e-01, 2.75197300e-01, 2.66085445e-01], + [ 8.27372474e-01, 2.79516805e-01, 2.61749643e-01], + [ 8.32299481e-01, 2.83912516e-01, 2.57383341e-01], + [ 8.37165425e-01, 2.88384647e-01, 2.52987700e-01], + [ 8.41968959e-01, 2.92933312e-01, 2.48563825e-01], + [ 8.46708768e-01, 2.97558528e-01, 2.44112767e-01], + [ 8.51383572e-01, 3.02260213e-01, 2.39635512e-01], + [ 8.55992130e-01, 3.07038188e-01, 2.35132978e-01], + [ 8.60533241e-01, 3.11892183e-01, 2.30606009e-01], + [ 8.65005747e-01, 3.16821833e-01, 2.26055368e-01], + [ 8.69408534e-01, 3.21826685e-01, 2.21481734e-01], + [ 8.73740530e-01, 3.26906201e-01, 2.16885699e-01], + [ 8.78000715e-01, 3.32059760e-01, 2.12267762e-01], + [ 8.82188112e-01, 3.37286663e-01, 2.07628326e-01], + [ 8.86301795e-01, 3.42586137e-01, 2.02967696e-01], + [ 8.90340885e-01, 3.47957340e-01, 1.98286080e-01], + [ 8.94304553e-01, 3.53399363e-01, 1.93583583e-01], + [ 8.98192017e-01, 3.58911240e-01, 1.88860212e-01], + [ 9.02002544e-01, 3.64491949e-01, 1.84115876e-01], + [ 9.05735448e-01, 3.70140419e-01, 1.79350388e-01], + [ 9.09390090e-01, 3.75855533e-01, 1.74563472e-01], + [ 9.12965874e-01, 3.81636138e-01, 1.69754764e-01], + [ 9.16462251e-01, 3.87481044e-01, 1.64923826e-01], + [ 9.19878710e-01, 3.93389034e-01, 1.60070152e-01], + [ 9.23214783e-01, 3.99358867e-01, 1.55193185e-01], + [ 9.26470039e-01, 4.05389282e-01, 1.50292329e-01], + [ 9.29644083e-01, 4.11479007e-01, 1.45366973e-01], + [ 9.32736555e-01, 4.17626756e-01, 1.40416519e-01], + [ 9.35747126e-01, 4.23831237e-01, 1.35440416e-01], + [ 9.38675494e-01, 4.30091162e-01, 1.30438175e-01], + [ 9.41521384e-01, 4.36405243e-01, 1.25409440e-01], + [ 9.44284543e-01, 4.42772199e-01, 1.20354038e-01], + [ 9.46964741e-01, 4.49190757e-01, 1.15272059e-01], + [ 9.49561766e-01, 4.55659658e-01, 1.10163947e-01], + [ 9.52075421e-01, 4.62177656e-01, 1.05030614e-01], + [ 9.54505523e-01, 4.68743522e-01, 9.98735931e-02], + [ 9.56851903e-01, 4.75356048e-01, 9.46952268e-02], + [ 9.59114397e-01, 4.82014044e-01, 8.94989073e-02], + [ 9.61292850e-01, 4.88716345e-01, 8.42893891e-02], + [ 9.63387110e-01, 4.95461806e-01, 7.90731907e-02], + [ 9.65397031e-01, 5.02249309e-01, 7.38591143e-02], + [ 9.67322465e-01, 5.09077761e-01, 6.86589199e-02], + [ 9.69163264e-01, 5.15946092e-01, 6.34881971e-02], + [ 9.70919277e-01, 5.22853259e-01, 5.83674890e-02], + [ 9.72590351e-01, 5.29798246e-01, 5.33237243e-02], + [ 9.74176327e-01, 5.36780059e-01, 4.83920090e-02], + [ 9.75677038e-01, 5.43797733e-01, 4.36177922e-02], + [ 9.77092313e-01, 5.50850323e-01, 3.90500131e-02], + [ 9.78421971e-01, 5.57936911e-01, 3.49306227e-02], + [ 9.79665824e-01, 5.65056600e-01, 3.14091591e-02], + [ 9.80823673e-01, 5.72208516e-01, 2.85075931e-02], + [ 9.81895311e-01, 5.79391803e-01, 2.62497353e-02], + [ 9.82880522e-01, 5.86605627e-01, 2.46613416e-02], + [ 9.83779081e-01, 5.93849168e-01, 2.37702263e-02], + [ 9.84590755e-01, 6.01121626e-01, 2.36063833e-02], + [ 9.85315301e-01, 6.08422211e-01, 2.42021174e-02], + [ 9.85952471e-01, 6.15750147e-01, 2.55921853e-02], + [ 9.86502013e-01, 6.23104667e-01, 2.78139496e-02], + [ 9.86963670e-01, 6.30485011e-01, 3.09075459e-02], + [ 9.87337182e-01, 6.37890424e-01, 3.49160639e-02], + [ 9.87622296e-01, 6.45320152e-01, 3.98857472e-02], + [ 9.87818759e-01, 6.52773439e-01, 4.55808037e-02], + [ 9.87926330e-01, 6.60249526e-01, 5.17503867e-02], + [ 9.87944783e-01, 6.67747641e-01, 5.83286889e-02], + [ 9.87873910e-01, 6.75267000e-01, 6.52570167e-02], + [ 9.87713535e-01, 6.82806802e-01, 7.24892330e-02], + [ 9.87463516e-01, 6.90366218e-01, 7.99897176e-02], + [ 9.87123759e-01, 6.97944391e-01, 8.77314215e-02], + [ 9.86694229e-01, 7.05540424e-01, 9.56941797e-02], + [ 9.86174970e-01, 7.13153375e-01, 1.03863324e-01], + [ 9.85565739e-01, 7.20782460e-01, 1.12228756e-01], + [ 9.84865203e-01, 7.28427497e-01, 1.20784651e-01], + [ 9.84075129e-01, 7.36086521e-01, 1.29526579e-01], + [ 9.83195992e-01, 7.43758326e-01, 1.38453063e-01], + [ 9.82228463e-01, 7.51441596e-01, 1.47564573e-01], + [ 9.81173457e-01, 7.59134892e-01, 1.56863224e-01], + [ 9.80032178e-01, 7.66836624e-01, 1.66352544e-01], + [ 9.78806183e-01, 7.74545028e-01, 1.76037298e-01], + [ 9.77497453e-01, 7.82258138e-01, 1.85923357e-01], + [ 9.76108474e-01, 7.89973753e-01, 1.96017589e-01], + [ 9.74637842e-01, 7.97691563e-01, 2.06331925e-01], + [ 9.73087939e-01, 8.05409333e-01, 2.16876839e-01], + [ 9.71467822e-01, 8.13121725e-01, 2.27658046e-01], + [ 9.69783146e-01, 8.20825143e-01, 2.38685942e-01], + [ 9.68040817e-01, 8.28515491e-01, 2.49971582e-01], + [ 9.66242589e-01, 8.36190976e-01, 2.61533898e-01], + [ 9.64393924e-01, 8.43848069e-01, 2.73391112e-01], + [ 9.62516656e-01, 8.51476340e-01, 2.85545675e-01], + [ 9.60625545e-01, 8.59068716e-01, 2.98010219e-01], + [ 9.58720088e-01, 8.66624355e-01, 3.10820466e-01], + [ 9.56834075e-01, 8.74128569e-01, 3.23973947e-01], + [ 9.54997177e-01, 8.81568926e-01, 3.37475479e-01], + [ 9.53215092e-01, 8.88942277e-01, 3.51368713e-01], + [ 9.51546225e-01, 8.96225909e-01, 3.65627005e-01], + [ 9.50018481e-01, 9.03409063e-01, 3.80271225e-01], + [ 9.48683391e-01, 9.10472964e-01, 3.95289169e-01], + [ 9.47594362e-01, 9.17399053e-01, 4.10665194e-01], + [ 9.46809163e-01, 9.24168246e-01, 4.26373236e-01], + [ 9.46391536e-01, 9.30760752e-01, 4.42367495e-01], + [ 9.46402951e-01, 9.37158971e-01, 4.58591507e-01], + [ 9.46902568e-01, 9.43347775e-01, 4.74969778e-01], + [ 9.47936825e-01, 9.49317522e-01, 4.91426053e-01], + [ 9.49544830e-01, 9.55062900e-01, 5.07859649e-01], + [ 9.51740304e-01, 9.60586693e-01, 5.24203026e-01], + [ 9.54529281e-01, 9.65895868e-01, 5.40360752e-01], + [ 9.57896053e-01, 9.71003330e-01, 5.56275090e-01], + [ 9.61812020e-01, 9.75924241e-01, 5.71925382e-01], + [ 9.66248822e-01, 9.80678193e-01, 5.87205773e-01], + [ 9.71161622e-01, 9.85282161e-01, 6.02154330e-01], + [ 9.76510983e-01, 9.89753437e-01, 6.16760413e-01], + [ 9.82257307e-01, 9.94108844e-01, 6.31017009e-01], + [ 9.88362068e-01, 9.98364143e-01, 6.44924005e-01]]; +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + hsv(144:end,1)=hsv(144:end,1)+1; % hardcoded + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data(cm_data(:,1)>1,1)=cm_data(cm_data(:,1)>1,1)-1; + cm_data=hsv2rgb(cm_data); + +end + + +function cm_data=viridis(m) +cm = [[ 0.26700401, 0.00487433, 0.32941519], + [ 0.26851048, 0.00960483, 0.33542652], + [ 0.26994384, 0.01462494, 0.34137895], + [ 0.27130489, 0.01994186, 0.34726862], + [ 0.27259384, 0.02556309, 0.35309303], + [ 0.27380934, 0.03149748, 0.35885256], + [ 0.27495242, 0.03775181, 0.36454323], + [ 0.27602238, 0.04416723, 0.37016418], + [ 0.2770184 , 0.05034437, 0.37571452], + [ 0.27794143, 0.05632444, 0.38119074], + [ 0.27879067, 0.06214536, 0.38659204], + [ 0.2795655 , 0.06783587, 0.39191723], + [ 0.28026658, 0.07341724, 0.39716349], + [ 0.28089358, 0.07890703, 0.40232944], + [ 0.28144581, 0.0843197 , 0.40741404], + [ 0.28192358, 0.08966622, 0.41241521], + [ 0.28232739, 0.09495545, 0.41733086], + [ 0.28265633, 0.10019576, 0.42216032], + [ 0.28291049, 0.10539345, 0.42690202], + [ 0.28309095, 0.11055307, 0.43155375], + [ 0.28319704, 0.11567966, 0.43611482], + [ 0.28322882, 0.12077701, 0.44058404], + [ 0.28318684, 0.12584799, 0.44496 ], + [ 0.283072 , 0.13089477, 0.44924127], + [ 0.28288389, 0.13592005, 0.45342734], + [ 0.28262297, 0.14092556, 0.45751726], + [ 0.28229037, 0.14591233, 0.46150995], + [ 0.28188676, 0.15088147, 0.46540474], + [ 0.28141228, 0.15583425, 0.46920128], + [ 0.28086773, 0.16077132, 0.47289909], + [ 0.28025468, 0.16569272, 0.47649762], + [ 0.27957399, 0.17059884, 0.47999675], + [ 0.27882618, 0.1754902 , 0.48339654], + [ 0.27801236, 0.18036684, 0.48669702], + [ 0.27713437, 0.18522836, 0.48989831], + [ 0.27619376, 0.19007447, 0.49300074], + [ 0.27519116, 0.1949054 , 0.49600488], + [ 0.27412802, 0.19972086, 0.49891131], + [ 0.27300596, 0.20452049, 0.50172076], + [ 0.27182812, 0.20930306, 0.50443413], + [ 0.27059473, 0.21406899, 0.50705243], + [ 0.26930756, 0.21881782, 0.50957678], + [ 0.26796846, 0.22354911, 0.5120084 ], + [ 0.26657984, 0.2282621 , 0.5143487 ], + [ 0.2651445 , 0.23295593, 0.5165993 ], + [ 0.2636632 , 0.23763078, 0.51876163], + [ 0.26213801, 0.24228619, 0.52083736], + [ 0.26057103, 0.2469217 , 0.52282822], + [ 0.25896451, 0.25153685, 0.52473609], + [ 0.25732244, 0.2561304 , 0.52656332], + [ 0.25564519, 0.26070284, 0.52831152], + [ 0.25393498, 0.26525384, 0.52998273], + [ 0.25219404, 0.26978306, 0.53157905], + [ 0.25042462, 0.27429024, 0.53310261], + [ 0.24862899, 0.27877509, 0.53455561], + [ 0.2468114 , 0.28323662, 0.53594093], + [ 0.24497208, 0.28767547, 0.53726018], + [ 0.24311324, 0.29209154, 0.53851561], + [ 0.24123708, 0.29648471, 0.53970946], + [ 0.23934575, 0.30085494, 0.54084398], + [ 0.23744138, 0.30520222, 0.5419214 ], + [ 0.23552606, 0.30952657, 0.54294396], + [ 0.23360277, 0.31382773, 0.54391424], + [ 0.2316735 , 0.3181058 , 0.54483444], + [ 0.22973926, 0.32236127, 0.54570633], + [ 0.22780192, 0.32659432, 0.546532 ], + [ 0.2258633 , 0.33080515, 0.54731353], + [ 0.22392515, 0.334994 , 0.54805291], + [ 0.22198915, 0.33916114, 0.54875211], + [ 0.22005691, 0.34330688, 0.54941304], + [ 0.21812995, 0.34743154, 0.55003755], + [ 0.21620971, 0.35153548, 0.55062743], + [ 0.21429757, 0.35561907, 0.5511844 ], + [ 0.21239477, 0.35968273, 0.55171011], + [ 0.2105031 , 0.36372671, 0.55220646], + [ 0.20862342, 0.36775151, 0.55267486], + [ 0.20675628, 0.37175775, 0.55311653], + [ 0.20490257, 0.37574589, 0.55353282], + [ 0.20306309, 0.37971644, 0.55392505], + [ 0.20123854, 0.38366989, 0.55429441], + [ 0.1994295 , 0.38760678, 0.55464205], + [ 0.1976365 , 0.39152762, 0.55496905], + [ 0.19585993, 0.39543297, 0.55527637], + [ 0.19410009, 0.39932336, 0.55556494], + [ 0.19235719, 0.40319934, 0.55583559], + [ 0.19063135, 0.40706148, 0.55608907], + [ 0.18892259, 0.41091033, 0.55632606], + [ 0.18723083, 0.41474645, 0.55654717], + [ 0.18555593, 0.4185704 , 0.55675292], + [ 0.18389763, 0.42238275, 0.55694377], + [ 0.18225561, 0.42618405, 0.5571201 ], + [ 0.18062949, 0.42997486, 0.55728221], + [ 0.17901879, 0.43375572, 0.55743035], + [ 0.17742298, 0.4375272 , 0.55756466], + [ 0.17584148, 0.44128981, 0.55768526], + [ 0.17427363, 0.4450441 , 0.55779216], + [ 0.17271876, 0.4487906 , 0.55788532], + [ 0.17117615, 0.4525298 , 0.55796464], + [ 0.16964573, 0.45626209, 0.55803034], + [ 0.16812641, 0.45998802, 0.55808199], + [ 0.1666171 , 0.46370813, 0.55811913], + [ 0.16511703, 0.4674229 , 0.55814141], + [ 0.16362543, 0.47113278, 0.55814842], + [ 0.16214155, 0.47483821, 0.55813967], + [ 0.16066467, 0.47853961, 0.55811466], + [ 0.15919413, 0.4822374 , 0.5580728 ], + [ 0.15772933, 0.48593197, 0.55801347], + [ 0.15626973, 0.4896237 , 0.557936 ], + [ 0.15481488, 0.49331293, 0.55783967], + [ 0.15336445, 0.49700003, 0.55772371], + [ 0.1519182 , 0.50068529, 0.55758733], + [ 0.15047605, 0.50436904, 0.55742968], + [ 0.14903918, 0.50805136, 0.5572505 ], + [ 0.14760731, 0.51173263, 0.55704861], + [ 0.14618026, 0.51541316, 0.55682271], + [ 0.14475863, 0.51909319, 0.55657181], + [ 0.14334327, 0.52277292, 0.55629491], + [ 0.14193527, 0.52645254, 0.55599097], + [ 0.14053599, 0.53013219, 0.55565893], + [ 0.13914708, 0.53381201, 0.55529773], + [ 0.13777048, 0.53749213, 0.55490625], + [ 0.1364085 , 0.54117264, 0.55448339], + [ 0.13506561, 0.54485335, 0.55402906], + [ 0.13374299, 0.54853458, 0.55354108], + [ 0.13244401, 0.55221637, 0.55301828], + [ 0.13117249, 0.55589872, 0.55245948], + [ 0.1299327 , 0.55958162, 0.55186354], + [ 0.12872938, 0.56326503, 0.55122927], + [ 0.12756771, 0.56694891, 0.55055551], + [ 0.12645338, 0.57063316, 0.5498411 ], + [ 0.12539383, 0.57431754, 0.54908564], + [ 0.12439474, 0.57800205, 0.5482874 ], + [ 0.12346281, 0.58168661, 0.54744498], + [ 0.12260562, 0.58537105, 0.54655722], + [ 0.12183122, 0.58905521, 0.54562298], + [ 0.12114807, 0.59273889, 0.54464114], + [ 0.12056501, 0.59642187, 0.54361058], + [ 0.12009154, 0.60010387, 0.54253043], + [ 0.11973756, 0.60378459, 0.54139999], + [ 0.11951163, 0.60746388, 0.54021751], + [ 0.11942341, 0.61114146, 0.53898192], + [ 0.11948255, 0.61481702, 0.53769219], + [ 0.11969858, 0.61849025, 0.53634733], + [ 0.12008079, 0.62216081, 0.53494633], + [ 0.12063824, 0.62582833, 0.53348834], + [ 0.12137972, 0.62949242, 0.53197275], + [ 0.12231244, 0.63315277, 0.53039808], + [ 0.12344358, 0.63680899, 0.52876343], + [ 0.12477953, 0.64046069, 0.52706792], + [ 0.12632581, 0.64410744, 0.52531069], + [ 0.12808703, 0.64774881, 0.52349092], + [ 0.13006688, 0.65138436, 0.52160791], + [ 0.13226797, 0.65501363, 0.51966086], + [ 0.13469183, 0.65863619, 0.5176488 ], + [ 0.13733921, 0.66225157, 0.51557101], + [ 0.14020991, 0.66585927, 0.5134268 ], + [ 0.14330291, 0.66945881, 0.51121549], + [ 0.1466164 , 0.67304968, 0.50893644], + [ 0.15014782, 0.67663139, 0.5065889 ], + [ 0.15389405, 0.68020343, 0.50417217], + [ 0.15785146, 0.68376525, 0.50168574], + [ 0.16201598, 0.68731632, 0.49912906], + [ 0.1663832 , 0.69085611, 0.49650163], + [ 0.1709484 , 0.69438405, 0.49380294], + [ 0.17570671, 0.6978996 , 0.49103252], + [ 0.18065314, 0.70140222, 0.48818938], + [ 0.18578266, 0.70489133, 0.48527326], + [ 0.19109018, 0.70836635, 0.48228395], + [ 0.19657063, 0.71182668, 0.47922108], + [ 0.20221902, 0.71527175, 0.47608431], + [ 0.20803045, 0.71870095, 0.4728733 ], + [ 0.21400015, 0.72211371, 0.46958774], + [ 0.22012381, 0.72550945, 0.46622638], + [ 0.2263969 , 0.72888753, 0.46278934], + [ 0.23281498, 0.73224735, 0.45927675], + [ 0.2393739 , 0.73558828, 0.45568838], + [ 0.24606968, 0.73890972, 0.45202405], + [ 0.25289851, 0.74221104, 0.44828355], + [ 0.25985676, 0.74549162, 0.44446673], + [ 0.26694127, 0.74875084, 0.44057284], + [ 0.27414922, 0.75198807, 0.4366009 ], + [ 0.28147681, 0.75520266, 0.43255207], + [ 0.28892102, 0.75839399, 0.42842626], + [ 0.29647899, 0.76156142, 0.42422341], + [ 0.30414796, 0.76470433, 0.41994346], + [ 0.31192534, 0.76782207, 0.41558638], + [ 0.3198086 , 0.77091403, 0.41115215], + [ 0.3277958 , 0.77397953, 0.40664011], + [ 0.33588539, 0.7770179 , 0.40204917], + [ 0.34407411, 0.78002855, 0.39738103], + [ 0.35235985, 0.78301086, 0.39263579], + [ 0.36074053, 0.78596419, 0.38781353], + [ 0.3692142 , 0.78888793, 0.38291438], + [ 0.37777892, 0.79178146, 0.3779385 ], + [ 0.38643282, 0.79464415, 0.37288606], + [ 0.39517408, 0.79747541, 0.36775726], + [ 0.40400101, 0.80027461, 0.36255223], + [ 0.4129135 , 0.80304099, 0.35726893], + [ 0.42190813, 0.80577412, 0.35191009], + [ 0.43098317, 0.80847343, 0.34647607], + [ 0.44013691, 0.81113836, 0.3409673 ], + [ 0.44936763, 0.81376835, 0.33538426], + [ 0.45867362, 0.81636288, 0.32972749], + [ 0.46805314, 0.81892143, 0.32399761], + [ 0.47750446, 0.82144351, 0.31819529], + [ 0.4870258 , 0.82392862, 0.31232133], + [ 0.49661536, 0.82637633, 0.30637661], + [ 0.5062713 , 0.82878621, 0.30036211], + [ 0.51599182, 0.83115784, 0.29427888], + [ 0.52577622, 0.83349064, 0.2881265 ], + [ 0.5356211 , 0.83578452, 0.28190832], + [ 0.5455244 , 0.83803918, 0.27562602], + [ 0.55548397, 0.84025437, 0.26928147], + [ 0.5654976 , 0.8424299 , 0.26287683], + [ 0.57556297, 0.84456561, 0.25641457], + [ 0.58567772, 0.84666139, 0.24989748], + [ 0.59583934, 0.84871722, 0.24332878], + [ 0.60604528, 0.8507331 , 0.23671214], + [ 0.61629283, 0.85270912, 0.23005179], + [ 0.62657923, 0.85464543, 0.22335258], + [ 0.63690157, 0.85654226, 0.21662012], + [ 0.64725685, 0.85839991, 0.20986086], + [ 0.65764197, 0.86021878, 0.20308229], + [ 0.66805369, 0.86199932, 0.19629307], + [ 0.67848868, 0.86374211, 0.18950326], + [ 0.68894351, 0.86544779, 0.18272455], + [ 0.69941463, 0.86711711, 0.17597055], + [ 0.70989842, 0.86875092, 0.16925712], + [ 0.72039115, 0.87035015, 0.16260273], + [ 0.73088902, 0.87191584, 0.15602894], + [ 0.74138803, 0.87344918, 0.14956101], + [ 0.75188414, 0.87495143, 0.14322828], + [ 0.76237342, 0.87642392, 0.13706449], + [ 0.77285183, 0.87786808, 0.13110864], + [ 0.78331535, 0.87928545, 0.12540538], + [ 0.79375994, 0.88067763, 0.12000532], + [ 0.80418159, 0.88204632, 0.11496505], + [ 0.81457634, 0.88339329, 0.11034678], + [ 0.82494028, 0.88472036, 0.10621724], + [ 0.83526959, 0.88602943, 0.1026459 ], + [ 0.84556056, 0.88732243, 0.09970219], + [ 0.8558096 , 0.88860134, 0.09745186], + [ 0.86601325, 0.88986815, 0.09595277], + [ 0.87616824, 0.89112487, 0.09525046], + [ 0.88627146, 0.89237353, 0.09537439], + [ 0.89632002, 0.89361614, 0.09633538], + [ 0.90631121, 0.89485467, 0.09812496], + [ 0.91624212, 0.89609127, 0.1007168 ], + [ 0.92610579, 0.89732977, 0.10407067], + [ 0.93590444, 0.8985704 , 0.10813094], + [ 0.94563626, 0.899815 , 0.11283773], + [ 0.95529972, 0.90106534, 0.11812832], + [ 0.96489353, 0.90232311, 0.12394051], + [ 0.97441665, 0.90358991, 0.13021494], + [ 0.98386829, 0.90486726, 0.13689671], + [ 0.99324789, 0.90615657, 0.1439362 ]]; + +if nargin < 1 + cm_data = cm; +else + hsv=rgb2hsv(cm); + cm_data=interp1(linspace(0,1,size(cm,1)),hsv,linspace(0,1,m)); + cm_data=hsv2rgb(cm_data); + +end + +% --- Executes on button press in showError. +function showError_Callback(hObject, eventdata, handles) +% hObject handle to showError (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of showError + +patches = findall(handles.FrameBuffer.Children,'Type','Patch'); +for iPatch = 1 : size(patches,1) + if handles.showError.Value + patches(iPatch).FaceAlpha = 0.5; + else + patches(iPatch).FaceAlpha = 0; + end +end +for iLines = 1:length(handles.UserData.meanTrace) + if handles.showError.Value + handles.UserData.meanTrace{iLines}.Visible = 'on'; + else + handles.UserData.meanTrace{iLines}.Visible = 'off'; + end +end + +% --- Executes on button press in showOutline. +function showOutline_Callback(hObject, eventdata, handles) +% hObject handle to showOutline (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of showOutline + + + +% --- Executes on button press in loadFrame. +function loadFrame_Callback(hObject, eventdata, handles) +% hObject handle to loadFrame (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +[fName, fPath] = uigetfile(pwd,'Select single frame'); + +data = load([fPath fName]); +cField = fieldnames(data); + +if length(size(data.(cField{1}))) == 2 + hold(handles.FrameBuffer,'off'); + delete(findall(handles.FrameImage.Children,'Type','rectangle')); + cla(handles.FrameBuffer); + imagesc(data.(cField{1}),'parent',handles.FrameBuffer); + axis(handles.FrameBuffer,'image'); + colormap(handles.FrameBuffer,'gray'); + view(0,90); + handles.FrameBuffer.XTick = []; + handles.FrameBuffer.YTick = []; +else + disp('Selected file must contain a single 2D matrix to plot'); +end + + +% --- Executes on button press in toggleOutline. +function toggleOutline_Callback(hObject, eventdata, handles) +% hObject handle to toggleOutline (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +if isfield(handles.UserData,'oLines') && any(ishandle(handles.UserData.oLines)) + delete(handles.UserData.oLines); +else + hold(handles.FrameImage,'on'); + for x = 1 : length(handles.UserData.outlines) + handles.UserData.oLines(x) = plot(handles.UserData.outlines{x}(:,2), handles.UserData.outlines{x}(:,1), 'w', 'LineWidth', 0.1, 'parent', handles.FrameImage); + end + hold(handles.FrameImage,'off'); +end +guidata(hObject, handles); + + +% --- Executes on selection change in movieSelect. +function movieSelect_Callback(hObject, eventdata, handles) +% hObject handle to movieSelect (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = cellstr(get(hObject,'String')) returns movieSelect contents as cell array +% contents{get(hObject,'Value')} returns selected item from movieSelect + +fLength = round(str2double(get(handles.FrameSmth,'string'))); %determines degree of smoothing. +data = ApplyFilter2(squeeze(handles.UserData.Frames{handles.movieSelect.Value}(:,:,handles.FrameSlider.Value)),fLength,str2double(handles.FrameSigma.String),get(handles.FilterType,'value'),handles.useAbs.Value); %smooth current frame +drawImage(handles,handles.FrameImage,handles.FrameSlider); + +for iTraces = 1 : length(handles.UserData.singleTraces) + for iLines = 1 : length(handles.UserData.singleTraces{iTraces}) + handles.UserData.singleTraces{iTraces}(iLines).Color = [0.7 0.7 0.7]; + handles.UserData.singleTraces{iTraces}(iLines).LineWidth = 1; + if iLines == handles.movieSelect.Value + handles.UserData.singleTraces{iTraces}(iLines).LineWidth = 3; + if ~handles.showError.Value + handles.UserData.singleTraces{iTraces}(iLines).Color = handles.UserData.meanTrace{iTraces}.Color; + end + end + end +end + + +% --- Executes during object creation, after setting all properties. +function movieSelect_CreateFcn(hObject, eventdata, handles) +% hObject handle to movieSelect (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on button press in showTraces. +function showTraces_Callback(hObject, eventdata, handles) +% hObject handle to showTraces (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hint: get(hObject,'Value') returns toggle state of showTraces + +% lines = findall(handles.FrameBuffer.Children,'Type','line'); +lines = cat(1,handles.UserData.singleTraces{:}); +for iLines = 1 : size(lines,1) + if handles.showTraces.Value && strcmpi(lines(iLines).Visible,'off') + lines(iLines).Visible = 'on'; + else + lines(iLines).Visible = 'off'; + end +end +showError_Callback(hObject, eventdata, handles); drawnow; %re-call error to check if mean-line should be shown + + +% --- Executes on button press in showVerInds. +function handles = showVerInds_Callback(hObject, eventdata, handles) +% hObject handle to showVerInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +if isfield(handles.UserData,'vLines') + delete(handles.UserData.vLines); +end + +if hObject.Value + indVals = handles.verInds.String; + indVals = str2num(indVals); + if ~isempty(indVals) + for iVals = 1:length(indVals) + handles.UserData.vLines(iVals) = plot(repmat(indVals(iVals),1,2),handles.FrameBuffer.YLim, 'r--', 'parent', handles.FrameBuffer); + end + end +end +guidata(hObject, handles); + +% --- Executes on button press in showHorInds. +function handles = showHorInds_Callback(hObject, eventdata, handles) +% hObject handle to showHorInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +if isfield(handles.UserData,'hLines') + delete(handles.UserData.hLines); +end + +if hObject.Value + indVals = handles.horInds.String; + indVals = str2num(indVals); + + if ~isempty(indVals) + for iVals = 1:length(indVals) + handles.UserData.hLines(iVals) = plot(handles.FrameBuffer.XLim, repmat(indVals(iVals),1,2), 'r--', 'parent', handles.FrameBuffer); + end + end +end +guidata(hObject, handles); + + +% --- Executes on button press in useAbs. +function useAbs_Callback(hObject, eventdata, handles) +% hObject handle to useAbs (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +drawImage(handles,handles.FrameImage,handles.FrameSlider); + + +% --- Executes on button press in makeFigure. +function makeFigure_Callback(hObject, eventdata, handles) +% hObject handle to makeFigure (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +figure; +%copy image and boxes +ax = subplot(1,2,1); +drawImage(handles,ax,handles.FrameSlider); + +items = findobj(handles.FrameImage,'type','rectangle'); +copyobj(items,ax); +lines = findall(handles.FrameImage.Children,'Type','line'); %send area outlines to base workspace +copyobj(lines,ax); + +% copy traces +items = findobj(handles.FrameBuffer,'type','line'); +if ~isempty(items) + ax = subplot(1,2,2); + xRange = []; + for iLines = 1:length(items) + + temp = [min(items(iLines).XData) max(items(iLines).XData)]; + if isempty(xRange); xRange = temp; end + if temp(1) < min(xRange); xRange(1) = temp(1);end + if temp(2) > max(xRange); xRange(2) = temp(2);end + end + ax.XLim = [xRange(1)-1 xRange(2)+1]; + axis(ax,'square'); + + copyobj(items,ax); + items = findobj(handles.FrameBuffer,'type','Patch'); + copyobj(items,ax); +end + + +function verInds_Callback(hObject, eventdata, handles) +% hObject handle to verInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of verInds as text +% str2double(get(hObject,'String')) returns contents of verInds as a double + + +% --- Executes during object creation, after setting all properties. +function verInds_CreateFcn(hObject, eventdata, handles) +% hObject handle to verInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +function horInds_Callback(hObject, eventdata, handles) +% hObject handle to horInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of horInds as text +% str2double(get(hObject,'String')) returns contents of horInds as a double + + +% --- Executes during object creation, after setting all properties. +function horInds_CreateFcn(hObject, eventdata, handles) +% hObject handle to horInds (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end diff --git a/downloaded/ridgeModel-master/widefield/findInterictalSpikes.m b/downloaded/ridgeModel-master/widefield/findInterictalSpikes.m new file mode 100644 index 0000000..2f5cd63 --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/findInterictalSpikes.m @@ -0,0 +1,129 @@ +function iiSpikeFrames = findInterictalSpikes(U, V, padFrames, makePlot, iiMinProm, iiMinFrames, iiMaxFrames) +% iiSpikeFrames = findInterictalSpikes(U, V [, padFrames] [, makePlot] [, iiMinProm] [, iiMinFrames] [, iiMaxFrames]) +% +% Find interictal events. We do so by taking the mean over the whole brain, +% and looking for peaks of large prominence (height relative to flanking +% points) and specific width. By default, prominence must be >0.03 dF/F, +% and the width must be 2-7 frames. +% +% As inputs, requires U and V. V may be dims x times x trials, or dims x +% times*trials. +% +% The output is a vector of logicals of size 1 x times*trials. It is 1 for +% the duration of each peak that corresponds to an interictal event, +% including the minimum points on both sides and padFrames extra points on +% either side. Default padFrames = 2. +% +% If makePlot = 1 (default), a plot is produced of peak prominence vs. +% width. A rectangle shows the interictal event identification window, with +% identified interictal events shown in red. + + +%% Optional arguments + +if ~exist('padFrames', 'var') + padFrames = 2; +end + +if ~exist('makePlot', 'var') + makePlot = 1; +end + +if ~exist('iiMinProm', 'var') + iiMinProm = 0.03; +end + +if ~exist('iiMinFrames', 'var') + iiMinFrames = 2; +end + +if ~exist('iiMaxFrames', 'var') + iiMaxFrames = 7; +end + + +%% Error checking + +if ismatrix(V) && size(V, 1) > 2000 && size(V, 2) <= 2000 + warning('V is probably not the right shape! Expecting dims x times x trials, or dims x times*trials'); +end + + +%% Compute the trace + +if ndims(V) == 3 + Vr = reshape(V, size(V, 1), []); +else + Vr = V; +end + +mask = isnan(U(:, :, 1)); +Ur = arrayShrink(U, mask, 'merge'); +meanTrace = mean(Ur, 1) * Vr; + + +%% Find the interictal events + +[~, peakLocs, widths, prominences] = findpeaks(meanTrace); + +iiEvents = (prominences >= iiMinProm & widths >= iiMinFrames & widths <= iiMaxFrames); + + +%% If requested, make the figure + +if makePlot + figure; + hold on; + + plot(widths(~iiEvents), prominences(~iiEvents), 'b.'); + plot(widths(iiEvents), prominences(iiEvents), 'r.'); + + iiMinProm = min([iiMinProm max(prominences)]); + rectangle('Position', [iiMinFrames, iiMinProm, iiMaxFrames-iiMinFrames, max(prominences)-iiMinProm]); + xlabel('Peak width (frames)'); + ylabel('Peak prominence (dF/F)'); + title('Whole-brain mean'); +end + + +%% Produce the output +% a logical trace of the interictal events, padded + +iiSpikeFrames = false(1, size(Vr, 2)); + +if any(iiEvents) % if any event was detected + iiPeakLocs = peakLocs(iiEvents); + + % The edges of peaks are where the trace goes from having a negative + % derivative to a positive one. + d = sign(diff(meanTrace)); + if any(d == 0) + warning('Algorithm problem: some flat spots. Fixable, but not implemented'); + end + d2 = diff(d); + edges = find(d2 > 0) + 1; + edges(end + 1) = length(meanTrace); + + % Loop through each peak edge, and look at the peak following that edge. If + % it's one of the interictal spikes, mark it. + p = 1; + for e = 1:length(edges) - 1 + % Find the interictal event following this edge + while iiPeakLocs(p) < edges(e) + p = p + 1; + % When we run out of interictal events, bail out + if p > length(iiPeakLocs) + break; + end + end + if p > length(iiPeakLocs) + break; + end + + % If this peak is an interictal event, mark it and the padFrames frames + % on either side + if iiPeakLocs(p) >= edges(e) && iiPeakLocs(p) <= edges(e + 1) + iiSpikeFrames(max(edges(e) - padFrames, 1) : min(edges(e+1) + padFrames, length(meanTrace))) = 1; + end + end +end diff --git a/downloaded/ridgeModel-master/widefield/interpOverInterictal.m b/downloaded/ridgeModel-master/widefield/interpOverInterictal.m new file mode 100644 index 0000000..8f53fdf --- /dev/null +++ b/downloaded/ridgeModel-master/widefield/interpOverInterictal.m @@ -0,0 +1,31 @@ +function V = interpOverInterictal(V, iiSpikeFrames) +% V = interpOverInterictal(V, iiSpikeFrames) +% +% For use with widefield data that contains interictal spikes. This +% function excises the times around interictal events, and patches over +% them using the Matlab built-in fillgaps. +% +% Interictal events should be found using findInterictalSpikes and the +% result supplied as iiSpikeFrames. +% +% A bit slow, ~75s on Matt's laptop. + + +% How many frames (around each interictal event) to use in order to patch +% over the hole in the data. Supplied as an argument to fillgaps. +fillWin = 20; + + +siz = size(V); +V = reshape(V, siz(1), []); + +V(:, iiSpikeFrames) = NaN; +V = double(reshape(V, siz)); + +for d = 1:size(V, 1) + for tr = 1:size(V, 3) + V(d, :, tr) = fillgaps(V(d, :, tr), fillWin); + end +end + +V = single(V); diff --git a/downloaded/saveastiff_4.4/TIFF Tag Viewer.url b/downloaded/saveastiff_4.4/TIFF Tag Viewer.url new file mode 100644 index 0000000..6b82f93 --- /dev/null +++ b/downloaded/saveastiff_4.4/TIFF Tag Viewer.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=http://www.awaresystems.be/imaging/tiff/astifftagviewer.html diff --git a/downloaded/saveastiff_4.4/license.txt b/downloaded/saveastiff_4.4/license.txt new file mode 100644 index 0000000..287bc5e --- /dev/null +++ b/downloaded/saveastiff_4.4/license.txt @@ -0,0 +1,24 @@ +Copyright (c) 2017, YoonOh Tak +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/saveastiff_4.4/loadtiff.m b/downloaded/saveastiff_4.4/loadtiff.m new file mode 100644 index 0000000..91ba2fc --- /dev/null +++ b/downloaded/saveastiff_4.4/loadtiff.m @@ -0,0 +1,130 @@ +function oimg = loadtiff(path) +% Copyright (c) 2012, YoonOh Tak +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% * Neither the name of the Gwangju Institute of Science and Technology (GIST), Republic of Korea nor the names +% of its contributors may be used to endorse or promote products derived +% from this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +tStart = tic; +warn_old = warning('off', 'all'); % To ignore unknown TIFF tag. + +%% Check directory and file existence +path_parent = pwd; +[pathstr, ~, ~] = fileparts(path); +if ~isempty(pathstr) && ~exist(pathstr, 'dir') + error 'Directory is not exist.'; +end +if ~exist(path, 'file') + error 'File is not exist.'; +end + +%% Open file +file_opening_error_count = 0; +while ~exist('tiff', 'var') + try + tiff = Tiff(path, 'r'); + catch + file_opening_error_count = file_opening_error_count + 1; + pause(0.1); + if file_opening_error_count > 5 % automatically retry to open for 5 times. + reply = input('Failed to open the file. Do you wish to retry? Y/n: ', 's'); + if isempty(reply) || any(upper(reply) == 'Y') + file_opening_error_count = 0; + else + error(['Failed to open the file ''' path '''.']); + end + end + end +end + +%% Load image information +tfl = 0; % Total frame length +tcl = 1; % Total cell length +while true + tfl = tfl + 1; % Increase frame count + iinfo(tfl).w = tiff.getTag('ImageWidth'); + iinfo(tfl).h = tiff.getTag('ImageLength'); + iinfo(tfl).spp = tiff.getTag('SamplesPerPixel'); + iinfo(tfl).color = iinfo(tfl).spp > 2; % Grayscale: 1(real number) or 2(complex number), Color: 3(rgb), 4(rgba), 6(rgb, complex number), or 8(rgba, complex number) + iinfo(tfl).complex = any(iinfo(tfl).spp == [2 6 8]); + + if tfl > 1 + % If tag information is changed, make a new cell + if iinfo(tfl-1).w ~= iinfo(tfl).w || ... + iinfo(tfl-1).h ~= iinfo(tfl).h || ... + iinfo(tfl-1).spp ~= iinfo(tfl).spp || ... + iinfo(tfl-1).color ~= iinfo(tfl).color || ... + iinfo(tfl-1).complex ~= iinfo(tfl).complex + tcl = tcl + 1; % Increase cell count + iinfo(tfl).fid = 1; % First frame of this cell + else + iinfo(tfl).fid = iinfo(tfl-1).fid + 1; + end + else + iinfo(tfl).fid = 1; % Very first frame of this file + end + iinfo(tfl).cid = tcl; % Cell number of this frame + + if tiff.lastDirectory(), break; end; + tiff.nextDirectory(); +end + +%% Load image data +if tcl == 1 % simple image (no cell) + for tfl = 1:tfl + tiff.setDirectory(tfl); + temp = tiff.read(); + if iinfo(tfl).complex + temp = temp(:,:,1:2:end-1,:) + temp(:,:,2:2:end,:)*1i; + end + if ~iinfo(tfl).color + oimg(:,:,iinfo(tfl).fid) = temp; % Grayscale image + else + oimg(:,:,:,iinfo(tfl).fid) = temp; % Color image + end + end +else % multiple image (multiple cell) + oimg = cell(tcl, 1); + for tfl = 1:tfl + tiff.setDirectory(tfl); + temp = tiff.read(); + if iinfo(tfl).complex + temp = temp(:,:,1:2:end-1,:) + temp(:,:,2:2:end,:)*1i; + end + if ~iinfo(tfl).color + oimg{iinfo(tfl).cid}(:,:,iinfo(tfl).fid) = temp; % Grayscale image + else + oimg{iinfo(tfl).cid}(:,:,:,iinfo(tfl).fid) = temp; % Color image + end + end +end + +%% Close file +tiff.close(); +cd(path_parent); +warning(warn_old); + +display(sprintf('The file was loaded successfully. Elapsed time : %.3f s.', toc(tStart))); +end diff --git a/downloaded/saveastiff_4.4/saveastiff.m b/downloaded/saveastiff_4.4/saveastiff.m new file mode 100644 index 0000000..7d2702d --- /dev/null +++ b/downloaded/saveastiff_4.4/saveastiff.m @@ -0,0 +1,303 @@ +function res = saveastiff(data, path, options) +% options.color +% : true or FALSE +% : If this is true, third dimension should be 3 and the data is saved as a color image. +% options.compress +% : 'no', 'lzw', 'jpeg' or 'adobe'. +% Compression type. +% 'no' : Uncompressed(Default) +% 'lzw' : lossless LZW +% 'jpeg' : lossy JPEG (When using JPEG compression, ImageWidth, +% ImageLength, and RowsPerStrip must be multiples of 16.) +% 'adobe' : lossless Adobe-style +% options.message +% : TRUE or false. +% If this is false, all messages are skipped. +% options.append +% : true or FALSE +% If path is exist, the data is appended to an existing file. +% If path is not exist, this options is ignored. +% options.overwrite +% : true or FALSE +% Overwrite to an existing file. +% options.big +% : true or FALSE, +% Use 64 bit addressing and allows for files > 4GB +% +% Defalut value of 'options' is +% options.color = false; +% options.compress = 'no'; +% options.message = true; +% options.append = false; +% options.overwrite = false; +% options.big = false; +% +% res : Return value. It is 0 when the function is finished with no error. +% If an error is occured in the function, it will have a positive +% number (error code). +% +% Copyright (c) 2012, YoonOh Tak +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% * Neither the name of the Gwangju Institute of Science and Technology (GIST), Republic of Korea nor the names +% of its contributors may be used to endorse or promote products derived +% from this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +tStart = tic; +errcode = 0; +try +%% Init options parameter +if nargin < 3 % Use default options + options.color = false; + options.compress = 'no'; + options.message = true; + options.append = false; + options.overwrite = false; +end +if ~isfield(options, 'message'), options.message = true; end +if ~isfield(options, 'append'), options.append = false; end +if ~isfield(options, 'compress'), options.compress = 'no'; end +if ~isfield(options, 'color'), options.color = false; end +if ~isfield(options, 'overwrite'), options.overwrite = false; end +if isfield(options, 'big') == 0, options.big = false; end + +if isempty(data), errcode = 1; assert(false); end +if (options.color == false && ndims(data) > 3) || ... + (options.color == true && ndims(data) > 4) + % Maximum dimension of a grayscale image is 3 of [height, width, frame] + % Maximum dimension of a color image is 4 of [height, width, color, frame] + errcode = 2; assert(false); +end + +%% Get image informations +% http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html +if ~options.color + if ndims(data) >= 4, errcode = 2; assert(false); end; + [height, width, depth] = size(data); + tagstruct.Photometric = Tiff.Photometric.MinIsBlack; +% tagstruct.Photometric = Tiff.Photometric.MinIsWhite; +% tagstruct.Photometric = Tiff.Photometric.Mask; +% tagstruct.Photometric = Tiff.Photometric.Separated; +else + if ndims(data) >= 5, errcode = 2; assert(false); end; + [height, width, cc, depth] = size(data); % cc: color channels. 3: rgb, 4: rgb with alpha channel + if cc ~= 3 && cc ~= 4, errcode = 3; assert(false); end; + tagstruct.Photometric = Tiff.Photometric.RGB; +% tagstruct.Photometric = Tiff.Photometric.CIELab; +% tagstruct.Photometric = Tiff.Photometric.ICCLab; +% tagstruct.Photometric = Tiff.Photometric.ITULab; +% (Unsupported)tagstruct.Photometric = Tiff.Photometric.Palette; +% (Unsupported)tagstruct.Photometric = Tiff.Photometric.YCbCr; +end +tagstruct.ImageLength = height; +tagstruct.ImageWidth = width; +tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky; % (RGB RGB,RGB RGB,RGB RGB), http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html +% (Unsupported)tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Separate; % (RRR RRR, GGG GGG, BBB BBB), % http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html + +%% Complex number +% http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html +if ~options.color && isreal(data) % Grayscale image with real numbers + tagstruct.SamplesPerPixel = 1; + data = reshape(data, height, width, 1, depth); +elseif ~options.color && ~isreal(data) % Grayscale image with complex numbers + tagstruct.SamplesPerPixel = 2; + data = reshape([real(data) imag(data)], height, width, 2, depth); +elseif options.color && isreal(data) % Color image with real numbers + tagstruct.SamplesPerPixel = cc; + if cc == 4 + tagstruct.ExtraSamples = Tiff.ExtraSamples.AssociatedAlpha; % The forth channel is alpha channel + end + data = reshape(data, height, width, cc, depth); +elseif options.color && ~isreal(data) % Color image with complex numbers + tagstruct.SamplesPerPixel = cc * 2; + if cc == 3 + tagstruct.ExtraSamples = repmat(Tiff.ExtraSamples.Unspecified, 1, 3); % 3(real)+3(imag) = 6 = 3(rgb) + 3(Extra) + else + tagstruct.ExtraSamples = repmat(Tiff.ExtraSamples.Unspecified, 1, 5); % 4(real)+4(imag) = 8 = 3(rgb) + 5(Extra) + end + data = reshape([real(data) imag(data)], height, width, cc*2, depth); +end + +%% Image compression +% http://www.awaresystems.be/imaging/tiff/tifftags/compression.html +switch lower(options.compress) + case 'no' + tagstruct.Compression = Tiff.Compression.None; + case 'lzw' + tagstruct.Compression = Tiff.Compression.LZW; + case 'jpeg' + tagstruct.Compression = Tiff.Compression.JPEG; + case 'adobe' + tagstruct.Compression = Tiff.Compression.AdobeDeflate; + otherwise + % Use tag nubmer in http://www.awaresystems.be/imaging/tiff/tifftags/compression.html + tagstruct.Compression = options.compress; +end + +%% Sample format +% http://www.awaresystems.be/imaging/tiff/tifftags/sampleformat.html +switch class(data) + % Unsupported Matlab data type: char, logical, cell, struct, function_handle, class. + case {'uint8', 'uint16', 'uint32'} + tagstruct.SampleFormat = Tiff.SampleFormat.UInt; + case {'int8', 'int16', 'int32'} + tagstruct.SampleFormat = Tiff.SampleFormat.Int; + if options.color + errcode = 4; assert(false); + end + case {'single', 'double', 'uint64', 'int64'} + tagstruct.SampleFormat = Tiff.SampleFormat.IEEEFP; + otherwise + % (Unsupported)Void, ComplexInt, ComplexIEEEFP + errcode = 5; assert(false); +end + +%% Bits per sample +% http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html +switch class(data) + case {'uint8', 'int8'} + tagstruct.BitsPerSample = 8; + case {'uint16', 'int16'} + tagstruct.BitsPerSample = 16; + case {'uint32', 'int32'} + tagstruct.BitsPerSample = 32; + case {'single'} + tagstruct.BitsPerSample = 32; + case {'double', 'uint64', 'int64'} + tagstruct.BitsPerSample = 64; + otherwise + errcode = 5; assert(false); +end + +%% Rows per strip +maxstripsize = 8*1024; +tagstruct.RowsPerStrip = ceil(maxstripsize/(width*(tagstruct.BitsPerSample/8)*size(data,3))); % http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html +if tagstruct.Compression == Tiff.Compression.JPEG + tagstruct.RowsPerStrip = max(16,round(tagstruct.RowsPerStrip/16)*16); +end + +%% Overwrite check +if exist(path, 'file') && ~options.append + if ~options.overwrite + errcode = 6; assert(false); + end +end + +%% Save path configuration +path_parent = pwd; +[pathstr, fname, fext] = fileparts(path); +if ~isempty(pathstr) + if ~exist(pathstr, 'dir') + mkdir(pathstr); + end + cd(pathstr); +end + +%% Write image data to a file +file_opening_error_count = 0; +while ~exist('tfile', 'var') + try + if ~options.append % Make a new file + s=whos('data'); + if s.bytes > 2^32-1 || options.big + tfile = Tiff([fname, fext], 'w8'); % Big Tiff file + else + tfile = Tiff([fname, fext], 'w'); + end + else + if ~exist([fname, fext], 'file') % Make a new file + s=whos('data'); + if s.bytes > 2^32-1 || options.big + tfile = Tiff([fname, fext], 'w8'); % Big Tiff file + else + tfile = Tiff([fname, fext], 'w'); + end + else % Append to an existing file + tfile = Tiff([fname, fext], 'r+'); + while ~tfile.lastDirectory(); % Append a new image to the last directory of an exiting file + tfile.nextDirectory(); + end + tfile.writeDirectory(); + end + end + catch + file_opening_error_count = file_opening_error_count + 1; + pause(0.1); + if file_opening_error_count > 5 % automatically retry to open for 5 times. + reply = input('Failed to open the file. Do you wish to retry? Y/n: ', 's'); + if isempty(reply) || any(upper(reply) == 'Y') + file_opening_error_count = 0; + else + errcode = 7; + assert(false); + end + end + end +end + +for d = 1:depth + tfile.setTag(tagstruct); + tfile.write(data(:, :, :, d)); + if d ~= depth + tfile.writeDirectory(); + end +end + +tfile.close(); +if exist('path_parent', 'var'), cd(path_parent); end + +tElapsed = toc(tStart); +if options.message + display(sprintf('The file was saved successfully. Elapsed time : %.3f s.', tElapsed)); +end + +catch exception +%% Exception management + if exist('tfile', 'var'), tfile.close(); end + switch errcode + case 1 + if options.message, error '''data'' is empty.'; end; + case 2 + if options.message, error 'Data dimension is too large.'; end; + case 3 + if options.message, error 'Third dimesion (color depth) should be 3 or 4.'; end; + case 4 + if options.message, error 'Color image cannot have int8, int16 or int32 format.'; end; + case 5 + if options.message, error 'Unsupported Matlab data type. (char, logical, cell, struct, function_handle, class)'; end; + case 6 + if options.message, error 'File already exists.'; end; + case 7 + if options.message, error(['Failed to open the file ''' path '''.']); end; + otherwise + if exist('fname', 'var') && exist('fext', 'var') + delete([fname fext]); + end + if exist('path_parent', 'var'), cd(path_parent); end + rethrow(exception); + end + if exist('path_parent', 'var'), cd(path_parent); end +end +res = errcode; +end \ No newline at end of file diff --git a/downloaded/saveastiff_4.4/saveastiff_demo.m b/downloaded/saveastiff_4.4/saveastiff_demo.m new file mode 100644 index 0000000..bd7f590 --- /dev/null +++ b/downloaded/saveastiff_4.4/saveastiff_demo.m @@ -0,0 +1,117 @@ +%% This file shows how to use 'saveastiff' function. + +clearvars; +[~,~,Z] = peaks(100); +Z = single(Z); +Z_index = uint8((Z - min(Z(:))) * (255 / (max(Z(:)) - min(Z(:))))); +Z_color = uint8(ind2rgb(Z_index, hsv(256)*256)); +Z_alpha = Z_color; Z_alpha(:,:,4) = repmat(0:1/100:1-1/100, 100, 1)*255; +Z_color_multiframe = reshape([Z_color(:)*0.2 Z_color(:)*0.6 Z_color(:)], 100, 100, 3, 3); + +disp('8-bit, grayscale image'); +clear options; +saveastiff(uint8(Z_index), 'Z_uint8.tif'); + +disp('Lossless LZW compression'); +clear options; +options.comp = 'adobe'; +saveastiff(uint8(Z_index), 'Z_uint8_compress.tif', options); + +disp('Overwrite to an existing file'); +clear options; +options.overwrite = true; +options.compress = 'adobe'; +saveastiff(uint8(Z_index), 'Z_uint8_compress.tif', options); + +disp('Disable message printing.'); +clear options; +options.message = false; +saveastiff(uint8(Z_index), 'Z_uint8_Message.tif', options); + +disp('16 bit, grayscale image'); +clear options; +saveastiff(uint16(single(Z_index)/255*(2^16-1)), 'Z_uint16.tif'); + +disp('32 bit, grayscale image'); +clear options; +saveastiff(uint32(single(Z_index)/255*(2^32-1)), 'Z_uint32.tif'); + +disp('32 bit single, grayscale image'); +clear options; +saveastiff(Z, 'Z_single.tif'); + +disp('Color image'); +clear options; +options.color = true; +saveastiff(Z_color, 'Z_rgb.tif', options); + +disp('Color image with alpha channel'); +clear options; +options.color = true; +saveastiff(Z_alpha, 'Z_alpha.tif', options); + +disp('Save each R, G and B chanels of the color image, separately.'); +clear options; +saveastiff(Z_color, 'Z_rgb_channel.tif'); + +disp('Save the multi-frame RGB color image'); +clear options; +options.color = true; +saveastiff(Z_color_multiframe, 'Z_rgb_multiframe.tif', options); + +disp('32 bit single, 50x50x50 volume data'); +clear options; +saveastiff(single(rand(50, 50, 50)), 'volume_50x50x50.tif'); + +disp('Append option is ignored if path dose not exist.'); +clear options; +options.append = true; +saveastiff(Z_index, 'Z_uint8_append.tif', options); + +disp('You can append any type of image to an existing tiff file.'); +clear options; +options.append = true; +saveastiff(single(rand(10, 10, 3)), 'Z_uint8_append.tif', options); +options.color = true; +saveastiff(Z_color_multiframe, 'Z_uint8_append.tif', options); + +disp('Save image to a sub directory'); +clear options; +saveastiff(uint8(Z_index), 'sub1/sub2/Z_uint8.tif'); +options.append = true; +saveastiff(uint8(Z_index), 'sub1/sub2/Z_uint8.tif', options); + +disp('Save complex number images'); +saveastiff(fft2(Z_index), 'Z_fft2_gray.tif'); +saveastiff(fft2(Z_color), 'Z_fft2_color.tif', options); +clear options; +options.color = true; +options.append = true; +saveastiff(fft2(Z_index), 'Z_fft2_append.tif'); +saveastiff(fft2(Z_color), 'Z_fft2_append.tif', options); +saveastiff(fft2(Z_color), 'Z_fft2_append.tif', options); +saveastiff(fft2(Z_alpha), 'Z_fft2_append.tif', options); + +disp('Load multiframe tiff'); +multiframe = loadtiff('volume_50x50x50.tif'); +complexframe = loadtiff('Z_uint8_append.tif'); +subdir = loadtiff('sub1/sub2/Z_uint8.tif'); +fftgray = loadtiff('Z_fft2_gray.tif'); +fftcolor = loadtiff('Z_fft2_color.tif'); +fftappend = loadtiff('Z_fft2_append.tif'); + +% Big Tiff File (64 bit) +[~,maxArraySize]=computer; +is64bitMatlab = maxArraySize> 2^31; +if is64bitMatlab + % Use 'big' option to save larget than 4GB files . + disp('24000 by 24000, 32 bit single, 2GB image'); + clear options; + options.big = true; % Use BigTIFF format + saveastiff(single(zeros(24000, 24000)), 'BigTiff(2GB+2GB).btf', options); + + disp('Append 2GB image to the existing file.'); + options.append = true; + saveastiff(single(zeros(24000, 24000)), 'BigTiff(2GB+2GB).btf', options); % 4GB Big TIFF file + bigtiff = loadtiff('BigTiff(2GB+2GB).btf'); +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/.gitattributes b/downloaded/scottclowe-matlab-schemer-2156bb9/.gitattributes new file mode 100644 index 0000000..07ef0d9 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/.gitattributes @@ -0,0 +1,46 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# +# The above will handle all files NOT found below +# + +##--------------------------------------------------- +# Common .gitattributes +##--------------------------------------------------- + +# Documents +# ============ +*.txt text +*.md text + +# Graphics +# ============ +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +*.svg text +*.eps binary + + +##--------------------------------------------------- +# Basic .gitattributes for a MATLAB repo +##--------------------------------------------------- + +# Source files +# ============ +*.m text +*.prf text + +# Binary files +# ============ +*.p binary +*.mex* binary +*.fig binary +*.mat binary +*.mdl binary +*.slx binary diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/.gitignore b/downloaded/scottclowe-matlab-schemer-2156bb9/.gitignore new file mode 100644 index 0000000..f7bb9d7 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/.gitignore @@ -0,0 +1,5 @@ +# Editor autosave files +*~ +*.asv +# Compiled MEX binaries (all platforms) +*.mex* diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/CONTRIBUTING.md b/downloaded/scottclowe-matlab-schemer-2156bb9/CONTRIBUTING.md new file mode 100644 index 0000000..2429e1c --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/CONTRIBUTING.md @@ -0,0 +1,47 @@ +Contributing +============ + +Adding a new colour scheme +-------------------------- + +If you have created a new colour scheme, please add it to the [matlab-schemes] +repository and *not* here. Instructions for this are available +[here](https://github.com/scottclowe/matlab-schemes/blob/master/CONTRIBUTING.md). + +If you have already added a new colour scheme to [matlab-schemes] via an +accepted pull request and want to mirror the change in [matlab-schemer], you +will need to use [git-subtree]. + +Some general handy instructions for `git subtree` are available +[here](https://medium.com/@v/git-subtrees-a-tutorial-6ff568381844#.lwmv2uwwk), +[here](https://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/), +and [here](https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/). +Specifically for use with this repository, the instructions are as follows. + +You will first need to set up subtree so there is a remote tracking the +[matlab-schemes] repository in addition to the usual origin remote tracking +your fork of [matlab-schemer]. +```bash +# One-time setup +git remote add matlab-schemes https://github.com/scottclowe/matlab-schemes.git +``` + +Having done this setup, you can now merge commits from matlab-schemes into +matlab-schemer as follows: +```bash +git pull +git subtree pull --prefix schemes matlab-schemes master +git push +``` + +Improving MATLAB Schemer +------------------------ + +If you have made enhancements or bug fixes to MATLAB Schemer, itself please add +them with a regular [pull request] to this repository. + + + [matlab-schemer]: https://github.com/scottclowe/matlab-schemer + [matlab-schemes]: https://github.com/scottclowe/matlab-schemes + [git-subtree]: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt + [pull request]: https://help.github.com/articles/using-pull-requests/ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/LICENSE b/downloaded/scottclowe-matlab-schemer-2156bb9/LICENSE new file mode 100644 index 0000000..c3bcef6 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2013-2016, Scott C. Lowe +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/README.md b/downloaded/scottclowe-matlab-schemer-2156bb9/README.md new file mode 100644 index 0000000..1c1bba6 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/README.md @@ -0,0 +1,208 @@ +[![MATLAB FileExchange](https://img.shields.io/badge/MATLAB-FileExchange-orange.svg)][fex] +[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)][flattr] +[![Bountysource](https://img.shields.io/bountysource/team/matlab-schemer/activity.svg)][bountysource] + + +MATLAB Schemer +============== + +This MATLAB package makes it easy to change the color scheme (a.k.a. theme) of +the MATLAB display and GUI. + +You can use Schemer to import a predefined color scheme, transfer your color +settings between installations, or create your own color scheme. + +A collection of color schemes is available in the schemes folder. +Samples of these can be seen in [schemes/README.md](schemes/README.md), +and browsed in the folder [schemes/screenshots](schemes/screenshots). +This is a static subtree copy of the contents of the repository +[matlab-schemes]. + +![MATLAB Schemer logo](logo.png) + + +Importing a color scheme +------------------------ + +Color schemes can be easily imported by running `schemer_import` at the MATLAB +command prompt, without needing any inputs. This will open a GUI to select the +file to import the color scheme from. + +When importing a color scheme, most of the settings will change immediately. +However, some settings will require MATLAB to be restarted: +- Variable highlighting colours +- Wavy underlines for errors +- Wavy underlines for warnings + +For more details, see the documentation on the function `schemer_import`, +available with `help schemer_import`. + + +Transferring a color scheme between MATLAB installations +-------------------------------------------------------- + +If you are using a personalised color scheme in MATLAB, you may wish to save +it for yourself so you can re-implement it easily if you reintall MATLAB. +Or you may wish to transfer your personalised color scheme from one machine +to another. This section describes the steps relevant in either scenario. + +On the source machine, run `schemer_export` to save a temporary color scheme +file, and then transfer this file to the destination machine. + +When importing the new color scheme, instead of running `schemer_import` without +any inputs, you should run `schemer_import(true)`. This passes a flag to tell +the function to not only import the colour preferences, but to also import your +boolean settings (such as whether to highlight the current cell/line, etc) +from the file you exported from the source installation. + + +Reverting to the MATLAB default color scheme +-------------------------------------------- + +Should you wish to revert to the set of colours which MATLAB ships with, you +should run `schemer_import('schemes/default.prf')`. + +This will import the MATLAB default theme from the stylesheet `default.prf` +which comes as part of Schemer. + +To restore the out-of-the-box state for boolean settings (such as whether to +highlight the current line) in addition to the colours, run +`schemer_import('schemes/default.prf', true)`. + +You may be tempted to instead revert the colours by clicking the +`Restore Default Colors` buttons in the `Color` pane of the MATLAB preferences. +However, this will be less effective than importing the default colours through +Schemer because these buttons will not reset all the MATLAB colour preferences. +(There is no reset button for the Editor display preferences pane, nor for the +other language syntax supported by MATLAB, which is available in the Editor +Languages panel.) + + +Creating a color scheme for others to use +----------------------------------------- + +When creating a color scheme to share with the rest of the world, it is +recommended to ensure colours are chosen appropriately for all possible +settings, even if they are not enabled. + +For example, if you are creating a dark colour scheme, you may have cell +highlighting disabled but it would still be ill-advised to leave the background +highlight colour for cell displays as the default pale beige because other users +may have this setting enabled. + + +### Exporting through the GUI + +If you have made a custom color scheme using the MATLAB GUI to pick the colours, +you can export the new color scheme with `schemer_export`. + +Please note, this requires you to have visited all relevant panes of the +Preferences window at least once since MATLAB was installed, even if the +settings have not been changed from the default. +See the help for `schemer_export` for more details. + + +### Porting a theme from a different editor + +If you are converting a color scheme designed for another editor into a MATLAB +stylesheet, you may find it easier to start with a duplicate of the template +stylesheet [develop/template_scheme.prf](develop/template_scheme.prf) and copy +the colours into this. + +To understand which colour settings the parameter names correspond to, you can +refer to the annotated screenshot, +[develop/annotated_default.png](develop/annotated_default.png). + +![Annotated screenshot](develop/annotated_default.png) + +The values for each colour in the .prf stylesheet must be recorded as single +RGB integers, with each colour channel in 8-bit (0-255), R as big endian, +and a opaque alpha channel. Because the format for RGB colours in Java allows +for an alpha channel and the integers are signed, all the colours you record +in your .prf file should be negative, spanning the range +`-16777216` (black, `[0,0,0]`) to `-1` (white, `[255,255,255]`). + +The text file for your pre-existing theme will typically specify its colous in +hexadecimal format, or in terms of R, G, B values. You will need +to convert the colours from this format into the format which MATLAB preference +files use to specify colours instead. +The Schemer package comes with a utility function +[develop/color2javaRGBint.m](develop/color2javaRGBint.m) +to help make this easier. See the `color2javaRGBint` documentation for more +details. + + +### Setting colours for additional languages + +MATLAB supports syntax highlighting for several languanges in addition to its own. +Currently these languages are +MuPAD, TLC, VRML, C/C++, Java, VHDL, Verilog, and XML/HTML. +The colours used for the syntax highlighting of all these languages can be set +in the Languages subpanel of the Editor/Debugger pane in the Preferences window. + +Typically, one will want to make a color scheme which has colours in these +languages which match the colours of the analogous MATLAB syntax. +By default, this is the behaviour which Schemer will perform. + +Without specifying any inputs to `schemer_export`, an exported color scheme file +will contain only the colours used for MATLAB syntax highlighting and no other +languages, since it is expected that users will typically not set the colours +for any of these languages. When this is loaded with `schemer_import`, the missing +colours for additional languages are automatically completed based on the MATLAB +syntax. + +If you do customise the colours for the additional language syntax highlighting, +you can export this by setting an appropriate flag, such as `schemer_export(3)`. +For more details, see the `schemer_export` documentation. + +If you are designing a color scheme and are very detail-oriented, you may like to +do the following. + +1. Configure the colours for the MATLAB syntax first in the Preferences > Colors + panel and Programming Tools subpanel, along with Editor/Debugger > Display + preference pane for the Current line highlighting and Right-hand text limit. +2. Export the colorscheme with `schemer_export('tmp.prf',1)`, excluding additional + language syntax from the export. +3. Load the colorscheme with `schemer_import('tmp.prf')`, which overwrites the + syntax for the additional languages with automatically inferred colours. +4. Open up the panel Preferences > Editor/Debugger > Languages and inspect the + quality of the colorscheme in the addition languages. +5. Fix or improve any perceived issues with the colorscheme in the Languages panel. +6. Export the colorscheme again, but this time with `schemer_export(3)` to include + the customised colours for the additional languages. + + +### Adding your scheme to this package + +If you are particularly proud of your new color scheme (and why wouldn't you be) +and would like to to share it with the world as part of the `matlab-schemer` +package, this is possible! + +Please head over to our daughter repository, [matlab-schemes][], which holds the +master copy of the color schemes issued here as part of Schemer in the schemes +directory. + +If you fork [matlab-schemes][], add your `.prf` file and issue a pull request, +the new scheme will be reviewed and added to the repository. +This content is then mirrored here using `git subtree`. For more details, see +our [CONTRIBUTING.md](CONTRIBUTING.md). + + +Addendum +-------- + +### Requirements + +Please note that Schemer requires MATLAB to be run with Java support enabled. + + +### Further information + +For details on how the method was implemented, see +[this Undocumented Matlab article](http://undocumentedmatlab.com/blog/changing-system-preferences-programmatically). + + + [matlab-schemes]: https://github.com/scottclowe/matlab-schemes + [fex]: http://mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer + [flattr]: https://flattr.com/submit/auto?user_id=scottclowe&url=https://github.com/scottclowe/matlab-schemer&title=MATLAB-schemer&tags=github&category=software + [bountysource]: https://www.bountysource.com/teams/matlab-schemer diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/Thumbs.db b/downloaded/scottclowe-matlab-schemer-2156bb9/Thumbs.db new file mode 100644 index 0000000..48f121a Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/Thumbs.db differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/RGBint2hex.m b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/RGBint2hex.m new file mode 100644 index 0000000..862a82e --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/RGBint2hex.m @@ -0,0 +1,42 @@ +%RGBINT2HEX Convert RGB integer into hexadecimal colour +% HEX = RGBINT2HEX(INT) given an RGB integer, convert it into a +% hexadecimal string. +% +% This is a helper function which you can use when manually creating your +% own MATLAB colour schemes. It is the inverse of COLOR2JAVARGBINT. +% +% See also COLOR2JAVARGBINT. + +% Copyright (c) 2015-2016, Scott C. Lowe +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +function hex = RGBint2hex(int) + +% Make a Java colour object +jc = java.awt.Color(int); +% Convert R,G,B into hexadecimal +hex = sprintf('%02s', ... + dec2hex(jc.getRed), dec2hex(jc.getGreen), dec2hex(jc.getBlue)); + +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/annotated_default.png b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/annotated_default.png new file mode 100644 index 0000000..e41e9c5 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/annotated_default.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/color2javaRGBint.m b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/color2javaRGBint.m new file mode 100644 index 0000000..8444bd9 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/color2javaRGBint.m @@ -0,0 +1,131 @@ +%COLOR2JAVARGBINT Converts a 256-bit color into a corresponding Java int +% INT = COLOR2JAVARGBINT(HEX) converts the hexadecimal string HEX into a +% negative integer INT which is used by Java as an RGB value equivalent +% to the hexadecimal HEX. HEX should be a triple of 256-bit values, +% possibly prepended by a hash ('#'). Alternatively, HEX can be a triple +% of 16-bit values to provide a 16-bit colour instead. +% +% INT = COLOR2JAVARGBINT(RGB) converts the 3-element RGB colour into INT. +% +% INT = COLOR2JAVARGBINT(R, G, B) converts the triple [R G B] into INT. +% +% This is a helper function which you can use when manually creating your +% own MATLAB colour schemes. +% If you have a set of hexadecimal colours which you want to use, +% you can copy the template colour scheme file, then convert each colour +% using COLOR2JAVARGBINT. The output will be a negative integer, which +% should be placed after the appropriate '...=C-' (with a only a single +% minus sign present). +% +% See also SCHEME_EXPORT, RGBINT2HEX. + +% Copyright (c) 2013-2016, Scott C. Lowe +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +function int = color2javaRGBint(X, varargin) + +% Input handling +if nargin==3 + if ~isnumeric(X) || ~isnumeric(varargin{1}) || ~isnumeric(varargin{2}) + error('With three inputs given, all should be scalars'); + end + % Concatenate R,G,B together + X = [X(:); varargin{1}(:); varargin{2}(:)]; +elseif nargin~=1 + error('Incorrect number of inputs. Should be 1 or 3.'); +end + +if ischar(X) + % Handle Hex string conversion + int = hex2javaRGBint(X); +elseif isnumeric(X) + % Handle RGB conversion + int = RGB2javaRGBint(X); +else + error('Input was neither string nor numeric'); +end + +end + + +function int = hex2javaRGBint(hex) + +% Input handling +if length(hex)==7 && strcmp(hex(1),'#') + hex = hex(2:end); +end +if length(hex)==3 + % Assume a 16-bit colour (fff, 333, 840, etc) + % This should be replicated to make ffffff, 333333, 884400, etc. + % This is sometimes used on the web as shorthand for the 256-bit + % colours, particularly for the grey shades. + hex = reshape(repmat(hex, 2, 1), 1, 6); +elseif length(hex)~=6 + % Length should be 6 for a three channel 256-bit hexadecimal + error('Input string was not a hexadecimal number'); +end + +% Make a Java color object +jc = java.awt.Color(hex2dec(hex)); +% Check what the RGB int is equal to +int = jc.getRGB(); +% This is equivalent to +% int = hex2dec(hex) - (256^2*255 + 256*255 + 256); + +end + + + +function int = RGB2javaRGBint(X) + +% Input handling +if numel(X)==1 + % Assume input is greyscale + X = repmat(X, 3, 1); +end +if numel(X)~=3 + error('Input did not contain three colour channels'); +end +if any(X<0) + error('R,G,B cannot be negative'); +end +if any(X>255) + error('R,G,B should be not exceed 255'); +end +if all(X<1) + % Rescale from 0-1 to 0-255 + X = round(X*255); +end + +% Convert R, G, and B into a single integer +dec = 256^2 * X(1) + 256 * X(2) + X(3); + +% Make a Java color object +jc = java.awt.Color(dec); +% Check what the RGB int is equal to +int = jc.getRGB(); +% This is equivalent to +% int = dec - (256^2*255 + 256*255 + 256); + +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.cpp b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.cpp new file mode 100644 index 0000000..f83e711 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.cpp @@ -0,0 +1,22 @@ +/* Here's a simple Hello World program in C++, which won't + * do much, but does show syntax highlighting. + */ +#include + +void some_complex_work(); + +int main() +{ + if (2+2==5) + { + // This happens very often indeed + std::cout << "Hello World!"; + } + else + { + @ // bad character makes an error + character = 'a'; + len = strlen("foobar"); + return len; + } +} diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.html b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.html new file mode 100644 index 0000000..03bf097 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.html @@ -0,0 +1,39 @@ + + + + Latin Lipsum - Hello, World! + + + + + + + + + +

Hello, World!

+ +

+ Lorem ipsum dolor sit amet, appetere disputationi te eam, eu + cum eius nulla everti. Id eam sale nostrud menandri! Pri an + duis probo, splendide consequuntur ne vis. +

+ + + + + + + +
+ + + Dicta iudico eos ne, at iisque persecuti his. +
+

+ Tale iriure + laboramus te sea, nec iusto veritus cu, id purto patrioque + sea? Mei at dicit propriae. +

+ + diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.java b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.java new file mode 100644 index 0000000..953cb6e --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.java @@ -0,0 +1,23 @@ +/* HelloWorld.java + * Demonstrates syntax highlighting for Java. + */ +package fibsandlies; +import java.util.HashMap; + +class HelloWorld { + /* + * Documentation for the method appears here. + * Prints the string "Hello, world!" to the console. + */ + public static void main(String[] args) { + // Make a character + char c = 'A'; + // Assemble the output string + string s = "Hello," + " world" + "!"; + int len = s.length(); + // Print to screen + System.out.println(s); + // Generate an error + ## + } +} diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.m b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.m new file mode 100644 index 0000000..b2b1e38 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.m @@ -0,0 +1,21 @@ +function sample() +% Create an output file with sys command +!touch test_file.txt +fid = fopen('test_file.txt', 'w'); +for i=1:20 + fprintf(fid, '%d unterminated\n, i); +end +fclose(fid); +end + +function unusedFunc(passedInput) +persistent global_value; +global_value = global_value + 1; +%% Title of cell +printed_var = subFunc(global_value) +unused_var = printed_var; + function out = subFunc(scaleFactor) + fprintf('Scale %.4f\n', scaleFactor); + out = passedInput * scaleFactor; + end +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.tlc b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.tlc new file mode 100644 index 0000000..0cc6f02 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.tlc @@ -0,0 +1,27 @@ +%implements Sample "C" + +%% Function: SampleFunction =============================================== +%% Abstract: +%% Doesn't do anything, but does contain some TLC code +%% with syntax highlighting. +%% +%function SampleFunction(inputVal, indexVal) void + %% Need this library to use FILE + %")> + + sprintf("index: %i", indexVal) + + %openfile testFile +Some text to verbosely go into the file. + %closefile testFile + + %assign myVar = STRING(ParamSettings.Input) + char fileName[%] = "%"; + + %if flagTrue + void *tp = %; + %else + %return "" + %endif + +%% [EOF] sample.tlc diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.v b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.v new file mode 100644 index 0000000..c050dc4 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.v @@ -0,0 +1,21 @@ +/* Sample Verilog code, which doesn't really do anything + * but it does show syntax highlighting + */ +module main(inputVar, flip); + input inputVar; + input flip; + + reg flop; + + // Comment about dummy code which doesn't work + always @(posedge flip or posedge inputVar) + if (reset) + begin + flop <= (0 & ~inputVar); + end + else + begin + $display("Hello world!"); + $finish; + end +endmodule diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.vhdl b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.vhdl new file mode 100644 index 0000000..12646c6 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.vhdl @@ -0,0 +1,19 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.NUMERIC_STD.ALL; + +-- Comment about the Driver here +entity Driver is +port( x : in std_logic; + F : out std_logic +); +end Driver; + +architecture gate_level of Driver is +begin + if newx(x downto (x-3))="0000" then + F <= '1'; + else + F <= not(x(2) xor x(2)); --XNOR gate with 2 inputs + end if; +end gate_level; diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3d b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3d new file mode 100644 index 0000000..c72ff91 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3d @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3dv b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3dv new file mode 100644 index 0000000..bb75b2b --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.x3dv @@ -0,0 +1,53 @@ +#X3D V3.0 utf8 +PROFILE Interchange +META "filename" "sample.x3dv" + +# Define scripts +DEF Script1 Script { + inputOnly SFTime touchTime + outputOnly SFBool toScript2 + outputOnly SFString string + url [ "ecmascript: + function touchTime() { + toScript2 = TRUE; + } + function eventsProcessed() { + string = 'Script1.eventsProcessed'; + toScript3 = TRUE; + } + " ] +} + +# Draw a blue ball +Transform { + children [ + NavigationInfo { + headlight FALSE + avatarSize [ 0.25 1.6 0.75 ] + type [ "EXAMINE" ] + } + DirectionalLight { + } + Transform { + translation 2.0 0.0 1.0 + children [ + Shape { + geometry Sphere { radius 2.3 + } + appearance Appearance { + material Material { diffuseColor 0.0 0.0 1.0 + } + } + } + ] + } + ] +} + +# Set the viewpoint +Viewpoint { position 7 -1 18 } + +# Set up the scripts +ROUTE TS.touchTime TO Script1.touchTime +ROUTE Script1.string TO Collector.fromString +ROUTE Collector.string TO Result.string diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.xml b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.xml new file mode 100644 index 0000000..e0b44e3 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/sample.xml @@ -0,0 +1,17 @@ + + + + + + Lorem ipsum dolor sit amet. + + Missing value error in bar tag + + Cibo malorum deseruisse nec at. Fabulas quaestio sit eu, nam + viderer percipit deserunt at. + & ". + ]]> + + diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/short_sample.m b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/short_sample.m new file mode 100644 index 0000000..f1f56d2 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/short_sample.m @@ -0,0 +1,15 @@ +function short_sample() +% Short syntax highlighting sample +global gbl_value; +gbl_value = 20 +hghlghtvar = 'a_string_example_here'; + +%% Title of cell +badstring = 'unterminated_string; +unusedvar = hghlghtvar; +!echo "Example `!` system command" +for iterval = 1:2:gbl_value + % This is a very informative comment + fprintf('%s:%d\n',hghlghtvar,iterval); +end +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/develop/template_scheme.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/template_scheme.prf new file mode 100644 index 0000000..3320c20 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/develop/template_scheme.prf @@ -0,0 +1,34 @@ +# - MATLAB color scheme +# Created by +# +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 # Width of bar for right-hand text limit +ColorsText=C- # Main text colour +ColorsBackground=C- # Main background colour +Colors_M_Keywords=C- # Text for keywords (function, for, end, etc) +Colors_M_Comments=C- # Text for comments +Colors_M_Strings=C- # Text for strings +Colors_M_UnterminatedStrings=C- # Text for unterminated strings +Colors_M_SystemCommands=C- # Text for shell commands +Colors_M_Errors=C- #*Editor error messages and underlines, go-to bars +Colors_HTML_HTMLLinks=C- # Text for URLs +Color_CmdWinWarnings=C- #^Command window Warning text +Color_CmdWinErrors=C- #^Command window Error text +Colors_M_Warnings=C- #*Editor Warning underlines and go-to-warning bars +ColorsMLintAutoFixBackground=C- # Background for autofixable +Editor.VariableHighlighting.Color=C- #*Background for occurances of current variable +Editor.NonlocalVariableHighlighting.TextColor=C- # Text for global variables +Editorhighlight-lines=C- # Background of current cell +Editorhighlight-caret-row-boolean-color=C- # Background of current line +EditorRightTextLimitLineColor=C- # Colour of bar for right-hand text limit + +#Legend +# * = Preference does not update until after restarting MATLAB +# ^ = Preference not present on all versions of MATLAB diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/logo.png b/downloaded/scottclowe-matlab-schemer-2156bb9/logo.png new file mode 100644 index 0000000..b00c848 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/logo.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_export.m b/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_export.m new file mode 100644 index 0000000..e74107c --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_export.m @@ -0,0 +1,677 @@ +%SCHEMER_EXPORT Export current MATLAB color scheme to text file +% If this is your first time using SCHEMER_EXPORT, please ensure you +% read the IMPORTANT NOTE at the bottom of the help section before using +% this function. +% +% SCHEMER_EXPORT() with no input will prompt the user to locate a +% destination file via the GUI, and will save the current color scheme +% to this location. Please read the IMORTANT NOTE below +% before running this script or it may not work correctly. +% The MATLAB preference options which are exported are: +% - All settings in the Color pane of Preferences +% - All settings in the Color > Programming Tools pane +% - From Editor/Debugger > Display pane, the following: +% - Highlight current line (whether to highlight, and the colour) +% - Right-hand text limit (colour and thickness, whether on/off) +% The output format is the same as used in MATLAB's preferences file, +% which is found at FULLFILE(PREFDIR,'matlab.prf'). +% +% SCHEMER_EXPORT(FILENAME) exports the relevant MATLAB preferences +% to the file FILENAME. +% +% SCHEMER_EXPORT(FILENAME, FLAG_MODE) controls which settings are output +% into the preference file FILENAME. Along with the colour settings for +% MATLAB syntax highlighting, one can also export the boolean preferences +% (such as whether cells and non-local variables, etc, should be coloured +% differently to the regular backgound and text); and one can also export +% the colour settings for syntax highlighting in other languages +% supported by MATLAB. +% +% The FLAG_MODE settings available are: +% 0 - neither booleans, nor additional languages are exported +% 1 - boolean settings are exported, but not additional languages +% 2 - additional language colours are exported, but not boolean settings +% 3 - both booleans and additional languages are exported +% +% By default FLAG_MODE is set to 1, so boolean settings will be +% exported, but the settings for syntax highlighting in additional +% languages will not be. +% +% The colour settings for all MATLAB syntax highlighting will always be +% exported, even for syntax options which are currently disabled, and +% regardless of whether the boolean settings are being exported. This is +% because users loading your exported color scheme may want syntax +% options highlighted which you are not currently using. Consequently, +% when designing a color scheme, it is advisable to set colours for all +% possisble MATLAB colour settings, even if you don't usually use them. +% By default, SCHEMER_IMPORT will not import boolean settings, so users +% will keep their syntax options enabled or disabled as they prefer even +% after importing your color scheme. +% +% Colours for highlighting syntax in other languages supported by MATLAB +% (MuPAD, TLC, VRML, C++, Java, VHDL, Verilog, XML) can be set in the +% preferences panel Editor/Debugger > Language. If you have not set any +% of these colours yourself, you should not export them. If SCHEMER_IMPORT +% loads a color scheme without additional language syntax included, the +% MATLAB colours are extended to highlight syntax in the other languages +% consistent with the MATLAB scheme. +% +% SCHEMER_EXPORT(FLAG_MODE, FILENAME), with a numeric input followed by a +% string, will also work as above because the input order is reversible. +% +% SCHEMER_EXPORT(FLAG_MODE) with a single numeric input will open the GUI +% to pick the filename and will save the output according to FLAG_MODE. +% +% RET = SCHEMER_EXPORT(...) returns 1 on success, 0 on user +% cancellation at the output file selection screen, -1 on fopen error, +% and -2 on any other error. +% +% [RET, NAMES, PREFS] = SCHEMER_EXPORT(...) also returns two cell +% arrays listing the names and preferences which were saved to file. +% +% For more details on how to get and set MATLAB preferences with +% commands, see the following URL. +% http://undocumentedmatlab.com/blog/changing-system-preferences-programmatically +% +% IMPORTANT NOTE: +% You must have, at any point since installing MATLAB, visited the +% Color, Color>Programming Tools and Editor/Debugger>Display panes of +% the Preferences diaglogue within MATLAB and then clicked OK in order +% for all the settings to be exported correctly. You will obviously have +% done this for any settings you have changed but, for example, you may +% have left the Editor/Debugger>Display settings unchanged. If this +% preference pane has not been set its entries will not have been +% defined, and when trying to export these they will be incorrectly saved +% as off (for booleans) or black (for colours). +% +% Example 1: User is not sure if they have OK'd all the relevent +% Preferences panes (or sure they haven't). +% - Open File>Preferences +% - On the left-hand side +% - Click Colors +% - Click Programming Tools (underneath "Colors" as a subsection) +% - Click Editor/Debugger (a different panel to Colors) +% - Click Display (underneath "Editor/Debugger" as a subsection) +% - Click OK +% (Yes, that is literally all you need to do to make sure you can +% export correctly. There is no need to click anywhere which was +% not mentioned. You just have to have each pane appear, and then +% click OK at the end.) +% - Go to your command window and execute SCHEMER_EXPORT +% - The GUI appears, and you pick where to save the file. +% +% Example 2: User is sure they have OK'd all the relevent Preferences +% panes already. +% schemer_export +% +% Example 3: User is sure they have OK'd all the relevent Preferences +% panes already, knows the path they wish to save to, and doesn't want +% to export their boolean settings. +% schemer_export('some/path/schemeName.prf', 0) +% +% Example 4: User has set some colour preferences for C/C++ syntax +% highlighting in addition to MATLAB syntax highlighting, and wants to +% output this along with their boolean settings +% schemer_export(3) +% +% See also SCHEMER_IMPORT, PREFDIR, COLOR2JAVARGBINT. + +% Copyright (c) 2013-2016, Scott C. Lowe +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +function varargout = schemer_export(fname, flag_mode) + +% ------------------------ Parameters ------------------------------------- +SCHEMER_VERSION = 'v1.4.0'; +SCHEMER_URLGIT = 'https://github.com/scottclowe/matlab-schemer'; +SCHEMER_URLFEX = 'https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer'; +DEFOUTNAME = 'ColorSchemeForMATLAB.prf'; + +% ------------------------ Input handling --------------------------------- +% Default inputs +if nargin<2 + % Default is on. Recipient can pick themselves whether to import. + flag_mode = 1; +end +if nargin<1 + fname = []; +end +% Input switching +if nargin>=1 && ~ischar(fname) && ~isempty(fname) + if ~isnumeric(fname) + error('Invalid input argument 1'); + end + if nargin==1 + % First input omitted + flag_mode = fname; + fname = []; + elseif ischar(flag_mode) + % Inputs switched + tmp = fname; + fname = flag_mode; + flag_mode = tmp; + clear tmp; + else + error('Invalid combination of inputs'); + end +end +% Mode handling +if ~isnumeric(flag_mode) + error('Export mode flag must be numeric.'); +elseif flag_mode < 0 || flag_mode > 3 + error('Bad mode specified: %s', num2str(flag_mode)); +end +inc_bools = mod(flag_mode, 2); +inc_otherlangs = flag_mode >= 2; +% 0: no bools, no other languages +% 1: yes bools, no other languages +% 2: no bools, yes other languages +% 3: yes bools, yes other languages + +% ------------------------ Settings --------------------------------------- +% Names of boolean preferences which should always be output +names_boolean = { ... + 'ColorsUseSystem' ; ... % Color: Desktop: Use system colors +}; +% Names of boolean preferences which the user can choose whether to output +names_boolextra = { ... + 'ColorsUseMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix highlight + 'Editor.VariableHighlighting.Automatic' ; ... % Color>PT: Var&fn: auto highlight + 'Editor.NonlocalVariableHighlighting' ; ... % Color>PT: Var&fn: with shared scope + 'EditorCodepadHighVisible' ; ... % Color>PT: CellDisp: highlight cells + 'EditorCodeBlockDividers' ; ... % Color>PT: CellDisp: show lines between cells + 'Editorhighlight-caret-row-boolean' ; ... % Editor>Display: Highlight current line + 'EditorRightTextLineVisible' ; ... % Editor>Display: Show Right-hand text limit +}; +% Names of preferences for which the values are integers +names_integer = { ... + 'EditorRightTextLimitLineWidth' ; ... % Editor>Display: Right-hand text limit Width +}; +% The names of the main colour panels, so we can let the user know by name +% if there is an issue with any of them +panels_main = { ... + 'Color' ; ... + 'Color > Programming Tools' ; ... + 'Editor/Debugger > Display' ; ... +}; +% Names of colour preferences which are in the main panels and used in +% MATLAB syntax highlighting +names_color_main = { ... + { ... % Color panel + 'ColorsText' ; ... % Color: Desktop: main text colour + 'ColorsBackground' ; ... % Color: Desktop: main background + 'Colors_M_Keywords' ; ... % Color: Syntax: keywords + 'Colors_M_Comments' ; ... % Color: Syntax: comments + 'Colors_M_Strings' ; ... % Color: Syntax: strings + 'Colors_M_UnterminatedStrings' ; ... % Color: Syntax: unterminated strings + 'Colors_M_SystemCommands' ; ... % Color: Syntax: system commands + 'Colors_M_Errors' ; ... % Color: Syntax: errors + 'Colors_HTML_HTMLLinks' ; ... % Color: Other: hyperlinks + } ... + { ... % Color > Programming Tools + 'Colors_M_Warnings' ; ... % Color>PT: Analyser: warnings + 'ColorsMLintAutoFixBackground' ; ... % Color>PT: Analyser: autofix + 'Editor.VariableHighlighting.Color' ; ... % Color>PT: Var&fn: highlight + 'Editor.NonlocalVariableHighlighting.TextColor' ; ... % Color>PT: Var&fn: with shared scope + 'Editorhighlight-lines' ; ... % Color>PT: CellDisp: highlight + } ... + { ... % Editor/Debugger > Display + 'Editorhighlight-caret-row-boolean-color' ; ... % Editor>Display: Highlight current line Color + 'EditorRightTextLimitLineColor' ; ... % Editor>Display: Right-hand text limit line Color + } +}; +% Names of colour preferences which are known to have been added since the +% year 2011, and so their presence in the preferences is not guaranteed +% column 1: name of setting +% column 2: first version in which preference might have been implemented +% column 3: first version in which preference has been observed to exist +names_color_versioned = { ... + 'Color_CmdWinWarnings' , ... % Color: Command Window Warning messages + '7.13' , ... % Known to NOT be in 2011a (7.12) + '8.2' ; ... % Known to be in 2013b + 'Color_CmdWinErrors' , ... % Color: Command Window Error messages + '8.3' , ... % Known to NOT be in 2013b (8.2) + '8.4' ; ... % Known to be in 2014b +}; +% Names of colour preferences for syntax highlighting in languages other +% than MATLAB +names_color_otherlangs = { ... + { ... % MuPAD + 'Editor.Language.MuPAD.Color.keyword' ; ... + 'Editor.Language.MuPAD.Color.operator' ; ... + 'Editor.Language.MuPAD.Color.block-comment' ; ... + 'Editor.Language.MuPAD.Color.option' ; ... + 'Editor.Language.MuPAD.Color.string' ; ... + 'Editor.Language.MuPAD.Color.function' ; ... + 'Editor.Language.MuPAD.Color.constant' ; ... + } ... + { ... % TLC + 'Editor.Language.TLC.Color.Colors_M_SystemCommands' ; ... + 'Editor.Language.TLC.Color.Colors_M_Keywords' ; ... + 'Editor.Language.TLC.Color.Colors_M_Comments' ; ... + 'Editor.Language.TLC.Color.string-literal' ; ... + } ... + { ... % C/C++ + 'Editor.Language.C.Color.keywords' ; ... + 'Editor.Language.C.Color.line-comment' ; ... + 'Editor.Language.C.Color.string-literal' ; ... + 'Editor.Language.C.Color.preprocessor' ; ... + 'Editor.Language.C.Color.char-literal' ; ... + 'Editor.Language.C.Color.errors' ; ... + } ... + { ... % Java + 'Editor.Language.Java.Color.keywords' ; ... + 'Editor.Language.Java.Color.line-comment' ; ... + 'Editor.Language.Java.Color.string-literal' ; ... + 'Editor.Language.Java.Color.char-literal' ; ... + } ... + { ... % VHDL + 'Editor.Language.VHDL.Color.Colors_M_Keywords' ; ... + 'Editor.Language.VHDL.Color.operator' ; ... + 'Editor.Language.VHDL.Color.Colors_M_Comments' ; ... + 'Editor.Language.VHDL.Color.string-literal' ; ... + } ... + { ... % Verilog + 'Editor.Language.Verilog.Color.Colors_M_Comments' ; ... + 'Editor.Language.Verilog.Color.operator' ; ... + 'Editor.Language.Verilog.Color.Colors_M_Keywords' ; ... + 'Editor.Language.Verilog.Color.string-literal' ; ... + } ... + { ... % XML + 'Editor.Language.XML.Color.error' ; ... + 'Editor.Language.XML.Color.tag' ; ... + 'Editor.Language.XML.Color.attribute' ; ... + 'Editor.Language.XML.Color.operator' ; ... + 'Editor.Language.XML.Color.value' ; ... + 'Editor.Language.XML.Color.comment' ; ... + 'Editor.Language.XML.Color.doctype' ; ... + 'Editor.Language.XML.Color.ref' ; ... + 'Editor.Language.XML.Color.pi-content' ; ... + 'Editor.Language.XML.Color.cdata-section' ; ... + } +}; + +% Names of colour preferences for syntax highlighting in languages other +% than MATLAB +names_color_vrml = { ... + % VRML + 'Editor.Language.VRML.Color.keyword' ; ... + 'Editor.Language.VRML.Color.node-keyword' ; ... + 'Editor.Language.VRML.Color.field-keyword' ; ... + 'Editor.Language.VRML.Color.data-type-keyword' ; ... + 'Editor.Language.VRML.Color.terminal-symbol' ; ... + 'Editor.Language.VRML.Color.comment' ; ... + 'Editor.Language.VRML.Color.string' ; ... +}; +% First version of matlab which uses VRMLX3DV instead of VRML +version_vrmlx3dv = '9.0'; + +% Names of preferences for other language syntax and where setting value +% is a string +% column 1: name of preference +% column 2: a regex which the string must match if it is to be exported +% use '.' or '.+' to allow any non-empty string to be output +% use '' or '.*' for anything, including empty strings +% use '\S' for anything except empty or whitespace-only strings +% use '^str1|str2|str3$' to allow only a finite set of strings +names_string_otherlang = { ... + 'Editor.Language.Java.method' , ... % Java: Show methods + '^(none|bold|italic)$' ; ... +}; + + +% ------------------------ Setup ------------------------------------------ +% Initialise output +if nargout==0 + % Empty if no output requested + varargout = {}; +else + % -2 to signify unknown error otherwise + varargout = {-2}; +end +% If we are outputting all the bools, add them to the list to do +if inc_bools + names_boolean = [names_boolean; names_boolextra]; +end + +% ------------------------ Check ------------------------------------- +% Check the user is not exporting without having visited any of the +% preference panels, or has otherwise set text and background to match +if isequal(com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB, ... + com.mathworks.services.Prefs.getColorPref('ColorsBackground').getRGB) + + % Define the base error message. We will add to it depending on the + % exact set up. + msg = 'Colour for text and background appear to be the same.'; + + % The values match, so give an error + if com.mathworks.services.Prefs.getColorPref('ColorsText').getRGB ... + == -16777216 + % Since the colour is black, it seems the user hasn't visited the + % colour preference panes at all + msg = [msg, 10, ... + 'Are you sure you have visited all the preference panels,'... + ' as per the instructions in the function description?']; + + elseif com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem') + % The colour is something else, but both text and background match. + % The user is managing to use the colours by overriding them with + % the system colours. + msg = [msg, 10, ... + 'Although you have enabled system colors, the underlying ', ... + 'colour settings match. This is not permitted because the ', ... + 'text would be illegible if system colours were disabled.']; + + else + % The colour is something else, but both text and background match. + % Presumably the text is currently illegible to the user right now. + msg = [msg, 10, ... + 'This is not permitted because the text is illegible.']; + end + + % Raise the error with the completed message + error(msg); +end + +% Go through all the main color preference panels, checking their settings +% are available to us +% Initialise outer level of holding variables +cprefs_main = cell(size(names_color_main)); +colors_main = cell(size(names_color_main)); +% Loop over every one of the main colour preference panels +for iPanel = 1:numel(names_color_main) + % Fetch the colours for this panel + [cprefs_main{iPanel}, colors_main{iPanel}] = ... + fetch_colors(names_color_main{iPanel}); + % Only give the error on the Color and Programming Tools pages, because + % there are only two colours set in the Editor > Display and they could + % plausibly both be black. We instead check this panel seperately below. + if iPanel <= 2 && all(colors_main{iPanel} == -16777216) + % This panel appears to all be black, so we make an error + error(... + ['Colours for all of %1$s panel appear to be black. ' 10 ... + 'This will be because you have never set the preferences ' ... + 'in this panel. You can do so by visiting the %1$s ' ... + 'Preferences page and clicking OK, as detailed in the ' ... + 'description of this function.'], panels_main{iPanel}); + end +end +% Check the Editor > Display panel has been initialised. +% If it hasn't, the line width will appear to be 0, which is not a possible +% setting. +if com.mathworks.services.Prefs.getIntegerPref(... + 'EditorRightTextLimitLineWidth') == 0 + % It hasn't been set, so we generate an error + error(... + ['Properties from the %1$s preference panel could not be loaded. ' ... + 10 ... + 'This will be because you have never set the preferences in '... + 'this panel. You can do so by visiting the %1$s ' ... + 'Preferences page and clicking OK, as detailed in the ' ... + 'description of this function.'], panels_main{3}); +end + +% Let the user know they are doing a stupid thing if they export when using +% the default settings +if com.mathworks.services.Prefs.getBooleanPref('ColorsUseSystem') + warning(... + ['You are exporting with system colors for main text and background.'... + 10, 'The exported theme will look different on different systems.']); +end + +% ------------------------ File stuff ------------------------------------- +if isempty(fname) + % Get user's name + username = java.lang.System.getProperty('user.name'); + % Prepend username to default filename + outFileName = [char(username) DEFOUTNAME]; + % Dialog asking for savename, with smart default output filename + [filename, pathname] = uiputfile(outFileName, ... + 'Select file to write MATLAB color scheme'); + % End if user cancels + if isequal(filename, 0); + if nargout>0; varargout{1} = 0; end; + return; + end + fname = fullfile(pathname, filename); +end + +% Open for write access of text file, create if necessary +fid = fopen(fname, 'w+t', 'n'); +if isequal(fid, -1); + if nargout>0; varargout{1} = -1; end; + return; +end +% Add a cleanup object incase of failure +finishup = onCleanup(@() fclose(fid)); + +% Find the name of the color scheme based on the filename +[~, schemename] = fileparts(fname); + +% Write a few comments to the start of the file +fprintf(fid, '# %s - MATLAB color scheme\n', schemename); +fprintf(fid, '# Generated with schemer_export %s, on MATLAB %s\n', ... + SCHEMER_VERSION, version); +fprintf(fid, '# %s\n', char(java.util.Date)); +fprintf(fid, '# To enable this color scheme in MATLAB use schemer_import, available at:\n'); +fprintf(fid, '# %s\n', SCHEMER_URLGIT); +fprintf(fid, '# %s\n', SCHEMER_URLFEX); + + +% ------------------------ Read and Write --------------------------------- +% Loop through the boolean type settings +prefs_boolean = cell(size(names_boolean)); +for i=1:length(names_boolean) + % Check the name of this preference + nm = names_boolean{i}; + % Get the value of this boolean preference + prefs_boolean{i} = com.mathworks.services.Prefs.getBooleanPref(nm); + % Construct the string to output + outstr = [nm '=B']; + if prefs_boolean{i} + outstr = [outstr 'true']; + else + outstr = [outstr 'false']; + end + outstr = [outstr '\n']; + % Write this boolean value to the output file + fprintf(fid, outstr); +end + +% Loop through the integer type settings +prefs_integer = cell(size(names_integer)); +for i=1:length(names_integer) + % Check the name of this preference + nm = names_integer{i}; + % Get the integer value for this preference + prefs_integer{i} = com.mathworks.services.Prefs.getIntegerPref(nm); + % Write this integer value to the output file + fprintf(fid, '%s=I%d\n', nm, prefs_integer{i}); +end + +% Loop through the colour type settings for MATLAB syntax highlighting +for iPanel=1:numel(names_color_main) + for iPref=1:numel(names_color_main{iPanel}) + % Check the name of this preference + nm = names_color_main{iPanel}{iPref}; + % Write its colour value to the output file + fprintf(fid, '%s=C%d\n', nm, colors_main{iPanel}(iPref)); + end +end + +% Loop over colours which may or may not be available +% Initialise cell arrays for successful fields +onames_versioned = {}; +cprefs_versioned = {}; +% Loop over the colours +for iPref=1:size(names_color_versioned, 1) + % Check the name of this preference + nm = names_color_versioned{iPref, 1}; + % Try to get the colour for this preference + prf = com.mathworks.services.Prefs.getColorPref(nm); + % If the current MATLAB version is less the first version where it is + % not known whether it has implemented this preference feature + % Or if the MATLAB version is less than the first version known to have + % implemented the feature and the colour appears to be black + % Then we skip this preference + if verLessThan('matlab', names_color_versioned{iPref, 2}) ... + || ( ... + verLessThan('matlab', names_color_versioned{iPref, 3}) ... + && prf.getRGB==-16777216 ... + ) + % It appears that this version of MATLAB does not include this + % preference. So we skip it. + continue; + end + % Otherwise, we write its colour value to the output file + fprintf(fid, '%s=C%d\n', nm, prf.getRGB); + % And we add the values to the list to output + onames_versioned{end+1} = nm; + cprefs_versioned{end+1} = prf; +end + + +% Initialise a cell array to output for other language syntax +onames_langs = {}; +cprefs_langs = {}; +% Loop through the colour type settings for other language syntax, only if +% it is requested +if inc_otherlangs + % Go through all the language color syntax preference panels, checking + % their settings are available to us + % Loop over every one of the main colour preference panels + for iPanel = 1:numel(names_color_otherlangs) + [panel_prefs, panel_colors] = fetch_colors(... + names_color_otherlangs{iPanel}); + if all(panel_colors==-16777216) + % All the colours in this panel are black, so we assume the + % color settings have not loaded because they have not been set + continue; + end + % Not all the colours are black, so we assume we have loaded the + % values for this language panel. + + % Loop again over every colour setting in the panel + for iPref = 1:numel(names_color_otherlangs{iPanel}) + % Get the name for the color setting we are interested in + nm = names_color_otherlangs{iPanel}{iPref}; + % Write its colour value to the output file + fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref)); + end + % Remember the prefences so we can return them + onames_langs = [onames_langs; names_color_otherlangs{iPanel}]; + cprefs_langs = [cprefs_langs; panel_prefs]; + end +end + +% We have to do special handling for VRML because in R2016a, MathWorks +% changed the encoding name from VRML to VRMLX3DV. Aside from this, nothing +% else was changed. The rest of the preference name is the same, and the +% default values are unchanged. +if inc_otherlangs + % Deal with VRML and VRMLX3DV possibilities + if verLessThan('matlab', version_vrmlx3dv) + names_color_vrml_usable = names_color_vrml; + else + names_color_vrml_usable = strrep(names_color_vrml, ... + '.VRML.', '.VRMLX3DV.'); + end + % Get the colours from the appropriate preference names + [panel_prefs, panel_colors] = fetch_colors(names_color_vrml_usable); + % If all the colours in this panel are black, we assume the color + % settings have not loaded because they have not been set. + if ~all(panel_colors==-16777216) + for iPref = 1:numel(names_color_vrml) + % Get the name for the color setting we are interested in + nm = names_color_vrml{iPref}; + % Write its colour value to the output file + fprintf(fid, '%s=C%d\n', nm, panel_colors(iPref)); + end + % Remember the prefences so we can return them + onames_langs = [onames_langs; names_color_otherlangs{iPanel}]; + cprefs_langs = [cprefs_langs; panel_prefs]; + end +end + +% Do strings for other languages +if inc_otherlangs + for iPref=1:size(names_string_otherlang, 1) + % Get the name for the string preference we are interested in + nm = names_string_otherlang{iPref, 1}; + % Read the string + str = com.mathworks.services.Prefs.getStringPref(nm); + % Turn it from a java.lang.String object to a regular char object + str = char(str); + % Check it is okay + if isempty(regexp(str, names_string_otherlang{iPref, 2}, ... + 'start', 'emptymatch')) + % It did not have any matches for the regex, so we will not use + % this setting. We will assume its value is not available. + continue; + end + % It matched the regex for acceptable values, so we will export it + fprintf(fid, '%s=S%s\n', nm, str); + % Remember the prefence so we can return it + onames_langs = [onames_langs; nm]; + cprefs_langs = [cprefs_langs; str]; + end +end + +% ------------------------ Tidy up ---------------------------------------- +% fclose(fid); % Don't need to close as it will autoclose +if nargout>0; varargout{1} = 1; end; + +fprintf('Exported color scheme to %s\n', fname); + +if nargout>1; + varargout{2} = cat(1, ... + names_boolean , ... + names_integer , ... + names_color_main{:} , ... + onames_versioned , ... + onames_langs ); + varargout{3} = cat(1, ... + prefs_boolean , ... + prefs_integer , ... + cprefs_main{:} , ... + cprefs_versioned , ... + cprefs_langs ); +end + +end + + +function [prefs, colors] = fetch_colors(names) + % Initialise holding variable for settings in this panel + prefs = cell(size(names)); + colors = nan(size(names)); + % Loop over every colour setting in the panel + for iName = 1:numel(names) + % Read the preference for this colour and get a Java color object + prefs{iName} = com.mathworks.services.Prefs.getColorPref(... + names{iName}); + % Turn this into an integer colour value + colors(iName) = prefs{iName}.getRGB; + end +end \ No newline at end of file diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_import.m b/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_import.m new file mode 100644 index 0000000..9749ee6 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemer_import.m @@ -0,0 +1,712 @@ +%SCHEMER_IMPORT Import a MATLAB color scheme +% SCHEMER_IMPORT() with no input will prompt the user to locate the +% color theme source file via the GUI. +% +% SCHEMER_IMPORT(FILENAME) imports the color scheme options given in +% the file FILENAME. +% +% SCHEMER_IMPORT(FILENAME, INCLUDEBOOLS) can control whether boolean +% preferences are included in import (default: FALSE). If INCLUDEBOOLS +% is set to true, boolean preference options such as whether to +% highlight autofixable errors, or to show variables with shared scope in +% a different colour will also be overridden, should they be set in the +% input file. +% +% SCHEMER_IMPORT(INCLUDEBOOLS, FILENAME), with a boolean or numeric input +% followed by a string input, will also work as above because the input +% order is reversible. +% +% SCHEMER_IMPORT(INCLUDEBOOLS) with a single boolean input will open the +% GUI to pick the file, and will load boolean preferences in accordance +% with INCLUDEBOOLS. +% +% RET = SCHEMER_IMPORT(...) returns 1 on success, 0 on user +% cancellation at input file selection screen, -1 on fopen error, and -2 +% on any other error. +% +% NOTE: +% The file to import can either be a color scheme file as generated by +% SCHEMER_EXPORT, or an entire MATLAB preferences file such as the file +% you will find located at FULLFILE(PREFDIR,'matlab.prf'). This could be +% a MATLAB preferences file taken from a different computer or previous +% MATLAB installation. However, if you are importing from a matlab.prf +% file instead of a color scheme .prf file you should be aware that any +% colour preferences which have been left as the defaults on preference +% panels which the user has not visited on the origin system of the +% matlab.prf file will not be present in the file, and hence not updated +% on import. +% +% The MATLAB preference options which will be overwritten by +% SCHEMER_IMPORT are: +% - All settings in the Color pane of Preferencs +% - All colour settings in the Color > Programming Tools pane, but no +% checkboxes +% - From Editor/Debugger > Display pane, the following: +% - Highlight current line (colour, but not whether to) +% - Right-hand text limit (colour and thickness, but not on/off) +% - From Editor/Debugger > Language, the syntax highlighting colours for +% each language. +% +% Once the current colour preferences are overridden they cannot be +% undone, so it is recommended that you export your current preferences +% with SCHEMER_EXPORT before importing a new theme if you think you +% may wish to revert. +% +% This is not necessary if you are using the default MATLAB color scheme +% which ships with the installation, as SCHEMER comes with a copy of the +% MATLAB default color scheme (default.prf). +% +% If you wish to revert to the default MATLAB color scheme, it is +% recommended you import the file default.prf included in this +% package. This will reset Editor/Debugger>Display colours, colours for +% syntax highlighting in additional languages, as well as the colours set +% in the Colors pane. You can also revert the colors by clicking +% "Restore Default Colors" in the MATLAB preference panel interface, but +% this will be less effective because there are several panels which set +% syntax colours and not all of them have a restore button. +% +% For more details on how to get and set MATLAB preferences with +% commands, see the following URL. +% http://undocumentedmatlab.com/blog/changing-system-preferences-programmatically/ +% +% See also SCHEMER_EXPORT, PREFDIR. + +% Copyright (c) 2013-2016, Scott C. Lowe +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions are +% met: +% * Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% * Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in +% the documentation and/or other materials provided with the distribution +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. + +% Known issues: +% +% 1. Text colour of automatically highlighted variables does not change +% colour immediately. This is an issue with matlab; if you change the main +% text colour in the preferences pane, highlighted variables will still +% have the old text colour until matlab is restarted. +% +% 2. Java exception is thrown when first trying to update the setting +% Editor.VariableHighlighting.Color. This only happens the first +% time SCHEMER_IMPORT is run, so the current fix is to catch the error +% and then try again. However, it might be possible for other Java +% exceptions get thrown under other mysterious circumstances, which could +% cause the function to fail. + +function varargout = schemer_import(fname, inc_bools) + +% ------------------------ Parameters ------------------------------------- +SCHEMER_VERSION = 'v1.4.0'; + +% ------------------------ Input handling --------------------------------- +% ------------------------ Default inputs --------------------------------- +if nargin<2 + inc_bools = false; % Default off, so only override extra options if intended +end +if nargin<1 + fname = []; % Ask user to select file +end +% Input switching +if nargin>=1 && ~ischar(fname) && ~isempty(fname) + if ~islogical(fname) && ~isnumeric(fname) + error('Invalid input argument 1'); + end + if nargin==1 + % First input omitted + inc_bools = fname; + fname = []; + elseif ischar(inc_bools) + % Inputs switched + tmp = fname; + fname = inc_bools; + inc_bools = tmp; + clear tmp; + else + error('Invalid combination of inputs'); + end +end + +% ------------------------ Check for file --------------------------------- +filefilt = ... + {'*.prf' , 'MATLAB preference files (*.prf)' ; ... + '*.prf;*.txt', 'Text and pref files (*.prf, *.txt)'; ... + '*' , 'All Files' }; + +if ~isempty(fname) + if ~exist(fname, 'file') + error('Specified file does not exist'); + end +else + % Dialog asking for input filename + % Need to make this dialogue include .txt by default, at least + [filename, pathname] = uigetfile(filefilt); + % End if user cancels + if isequal(filename, 0); + if nargout>0; varargout{1} = 0; end; + return; + end + fname = fullfile(pathname, filename); +end + +% ------------------------ Catch block ------------------------------------ +% Somewhat inexplicably, a Java exception is thrown the first time we try +% to set 'Editor.VariableHighlighting.Color'. +% But if we try again immediately, it can be set without any problems. +% The issue is very consistent. +% The solution is to try to set this colour along with all the others, +% catch the exception when it occurs, and then attempt to set all the +% preferences again. +try + [varargout{1:nargout}] = main(fname, inc_bools); +catch ME + if ~strcmp(ME.identifier, 'MATLAB:Java:GenericException'); + rethrow(ME); + end + % disp('Threw and ignored a Java exception. Retrying.'); + [varargout{1:nargout}] = main(fname, inc_bools); +end + +end + +% ======================== Main code ====================================== +function varargout = main(fname, inc_bools) + +% ------------------------ Parameters ------------------------------------- +% Names of boolean preferences which should always be imported +names_boolean = { ... + 'ColorsUseSystem' ... % Color: Desktop: Use system colors +}; +% Names of boolean preferences which the user can choose whether to import +names_boolextra = { ... + 'ColorsUseMLintAutoFixBackground' ... % Color>PT: Analyser: autofix highlight + 'Editor.VariableHighlighting.Automatic' ... % Color>PT: Var&fn: auto highlight + 'Editor.NonlocalVariableHighlighting' ... % Color>PT: Var&fn: with shared scope + 'EditorCodepadHighVisible' ... % Color>PT: CellDisp: highlight cells + 'EditorCodeBlockDividers' ... % Color>PT: CellDisp: show lines between cells + 'Editorhighlight-caret-row-boolean' ... % Editor>Display: Highlight current line + 'EditorRightTextLineVisible' ... % Editor>Display: Show Right-hand text limit +}; +% Names of preferences for which the values are integers +names_integer = { ... + 'EditorRightTextLimitLineWidth' ... % Editor>Display: Right-hand text limit Width +}; +% Names of preferences for which the values are strings +% column 1: name of preference +% column 2: a regex which the string must match if it is to be exported +% use '.' or '.+' to allow any non-empty string to be output +% use '' or '.*' for anything, including empty strings +% use '\S' for anything except empty or whitespace-only strings +% use '^str1|str2|str3$' to allow only a finite set of strings +names_string = { ... + 'Editor.Language.Java.method' , ... % Java: Show methods + '^(none|bold|italic)$' ; ... +}; +% Names of colour preferences, and their default value if not present in +% the .prf file +% column 1: name of preference +% column 2: default value. +% - Empty if no default, +% - Integer if specific colour, +% - String if inherited from another colour setting (which +% should appear higher up in the list) +% - Cell array of strings to take the average colour from +% column 3: whether a restart is required if this value changes +names_color = { ... + 'ColorsText' , ... % Color: Desktop: main text colour + '' , ... + false ; ... + 'ColorsBackground' , ... % Color: Desktop: main background + '' , ... + true ; ... + 'Colors_M_Errors' , ... % Color: Syntax: errors + -65536 , ... + true ; ... + 'Colors_M_Warnings' , ... % Color>PT: Analyser: warnings + -27648 , ... + true ; ... + 'Colors_M_Keywords' , ... % Color: Syntax: keywords + 'ColorsText' , ... + false ; ... + 'Colors_M_Comments' , ... % Color: Syntax: comments + {'ColorsText','ColorsBackground'} , ... + false ; ... + 'Colors_M_Strings' , ... % Color: Syntax: strings + 'ColorsText' , ... + false ; ... + 'Colors_M_UnterminatedStrings' , ... % Color: Syntax: unterminated strings + 'Colors_M_Errors' , ... + false ; ... + 'Colors_M_SystemCommands' , ... % Color: Syntax: system commands + 'Colors_M_Keywords' , ... + false ; ... + 'Colors_HTML_HTMLLinks' , ... % Color: Other: hyperlinks + 'ColorsText' , ... + false ; ... + 'Color_CmdWinWarnings' , ... % Color: Other: Warning messages + 'Colors_M_Warnings' , ... + false ; ... + 'Color_CmdWinErrors' , ... % Color: Other: Error messages + 'Colors_M_Errors' , ... + false ; ... + 'ColorsMLintAutoFixBackground' , ... % Color>PT: Analyser: autofix + 'ColorsBackground' , ... + false ; ... + 'Editor.VariableHighlighting.Color' , ... % Color>PT: Var&fn: highlight + 'ColorsBackground' , ... + true ; ... + 'Editor.NonlocalVariableHighlighting.TextColor' , ... % Color>PT: Var&fn: with shared scope + 'ColorsText' , ... + false ; ... + 'Editorhighlight-lines' , ... % Color>PT: CellDisp: highlight + 'ColorsBackground' , ... + false ; ... + 'Editorhighlight-caret-row-boolean-color' , ... % Editor>Display: Highlight current line Color + 'Editorhighlight-lines' , ... + false ; ... + 'EditorRightTextLimitLineColor' , ... % Editor>Display: Right-hand text limit line Color + -5723992 , ... + false ; ... + + 'Editor.Language.MuPAD.Color.keyword' , ... % MuPAD: Keywords + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.MuPAD.Color.operator' , ... % MuPAD: Operators + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.MuPAD.Color.block-comment' , ... % MuPAD: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.MuPAD.Color.option' , ... % MuPAD: Options + 'Colors_M_UnterminatedStrings' , ... + false ; ... + 'Editor.Language.MuPAD.Color.string' , ... % MuPAD: Strings + 'Colors_M_Strings' , ... + false ; ... + 'Editor.Language.MuPAD.Color.function' , ... % MuPAD: System Functions + {'Colors_M_Keywords','ColorsBackground'} , ... + false ; ... + 'Editor.Language.MuPAD.Color.constant' , ... % MuPAD: Constants + 'Editor.NonlocalVariableHighlighting.TextColor' , ... + false ; ... + + 'Editor.Language.TLC.Color.Colors_M_SystemCommands' , ... % TLC: Commands + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.TLC.Color.Colors_M_Keywords' , ... % TLC: Macros + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.TLC.Color.Colors_M_Comments' , ... % TLC: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.TLC.Color.string-literal' , ... % TLC: C Strings + 'Colors_M_Strings' , ... + false ; ... + + 'Editor.Language.C.Color.keywords' , ... % C/C++: Keywords + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.C.Color.line-comment' , ... % C/C++: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.C.Color.string-literal' , ... % C/C++: Strings + 'Colors_M_Strings' , ... + false ; ... + 'Editor.Language.C.Color.preprocessor' , ... % C/C++: Preprocessor + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.C.Color.char-literal' , ... % C/C++: Characters + 'Colors_M_UnterminatedStrings' , ... + false ; ... + 'Editor.Language.C.Color.errors' , ... % C/C++: Bad characters + 'Colors_M_Errors' , ... + false ; ... + + 'Editor.Language.Java.Color.keywords' , ... % Java: Keywords + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.Java.Color.line-comment' , ... % Java: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.Java.Color.string-literal' , ... % Java: Strings + 'Colors_M_Strings' , ... + false ; ... + 'Editor.Language.Java.Color.char-literal' , ... % Java: Characters + 'Colors_M_UnterminatedStrings' , ... + false ; ... + + 'Editor.Language.VHDL.Color.Colors_M_Keywords' , ... % VHDL: Keywords + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.VHDL.Color.operator' , ... % VHDL: Operators + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.VHDL.Color.Colors_M_Comments' , ... % VHDL: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.VHDL.Color.string-literal' , ... % VHDL: Strings + 'Colors_M_Strings' , ... + false ; ... + + 'Editor.Language.Verilog.Color.Colors_M_Keywords' , ... % Verilog: Keywords + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.Verilog.Color.operator' , ... % Verilog: Operators + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.Verilog.Color.Colors_M_Comments' , ... % Verilog: Comments + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.Verilog.Color.string-literal' , ... % Verilog: Strings + 'Colors_M_Strings' , ... + false ; ... + + 'Editor.Language.XML.Color.error' , ... % XML: Error + 'Colors_M_Errors' , ... + false ; ... + 'Editor.Language.XML.Color.tag' , ... % XML: Tag + 'Colors_M_Keywords' , ... + false ; ... + 'Editor.Language.XML.Color.attribute' , ... % XML: Attribute name + 'Colors_M_UnterminatedStrings' , ... + false ; ... + 'Editor.Language.XML.Color.operator' , ... % XML: Operator + 'Colors_M_SystemCommands' , ... + false ; ... + 'Editor.Language.XML.Color.value' , ... % XML: Attribute value + 'Colors_M_Strings' , ... + false ; ... + 'Editor.Language.XML.Color.comment' , ... % XML: Comment + 'Colors_M_Comments' , ... + false ; ... + 'Editor.Language.XML.Color.doctype' , ... % XML: DOCTYPE declaration + 'Colors_HTML_HTMLLinks' , ... + false ; ... + 'Editor.Language.XML.Color.ref' , ... % XML: Character + 'Colors_M_UnterminatedStrings' , ... + false ; ... + 'Editor.Language.XML.Color.pi-content' , ... % XML: Processing instruction + 'Colors_HTML_HTMLLinks' , ... + false ; ... + 'Editor.Language.XML.Color.cdata-section' , ... % XML: CDATA section + 'Editor.NonlocalVariableHighlighting.TextColor' , ... + false ; ... + + 'Editor.Language.VRML.Color.keyword' , ... % VRML: Keywords + 'Editor.Language.XML.Color.doctype' , ... + false ; ... + 'Editor.Language.VRML.Color.node-keyword' , ... % VRML: Node types + 'Editor.Language.XML.Color.tag' , ... + false ; ... + 'Editor.Language.VRML.Color.field-keyword' , ... % VRML: Fields + 'Editor.Language.XML.Color.attribute' , ... + false ; ... + 'Editor.Language.VRML.Color.data-type-keyword' , ... % VRML: Data types + 'Editor.Language.XML.Color.cdata-section' , ... + false ; ... + 'Editor.Language.VRML.Color.terminal-symbol' , ... % VRML: Terminal symbols + 'Editor.Language.XML.Color.operator' , ... + false ; ... + 'Editor.Language.VRML.Color.comment' , ... % VRML: Comments + 'Editor.Language.XML.Color.comment' , ... + false ; ... + 'Editor.Language.VRML.Color.string' , ... % VRML: Strings + 'Editor.Language.XML.Color.value' , ... + false ; ... + + 'Editor.Language.VRMLX3DV.Color.keyword' , ... % VRML/X3DV: Keywords + 'Editor.Language.VRML.Color.keyword' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.node-keyword' , ... % VRML/X3DV: Node types + 'Editor.Language.VRML.Color.node-keyword' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.field-keyword' , ... % VRML/X3DV: Fields + 'Editor.Language.VRML.Color.field-keyword' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.data-type-keyword' , ... % VRML/X3DV: Data types + 'Editor.Language.VRML.Color.data-type-keyword' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.terminal-symbol' , ... % VRML/X3DV: Terminal symbols + 'Editor.Language.VRML.Color.terminal-symbol' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.comment' , ... % VRML/X3DV: Comments + 'Editor.Language.VRML.Color.comment' , ... + false ; ... + 'Editor.Language.VRMLX3DV.Color.string' , ... % VRML/X3DV: Strings + 'Editor.Language.VRML.Color.string' , ... + false ; ... +}; + +verbose = 0; + +% ------------------------ Setup ------------------------------------------ +if nargout==0 + varargout = {}; +else + varargout = {-2}; +end +if inc_bools + names_boolean = [names_boolean names_boolextra]; +end +needs_restart = false; + +% ------------------------ Check file seems okay -------------------------- +% Read in the contents of the entire file +flestr = fileread(fname); +% Search for occurances of main text colour +txtprf = regexp(flestr, '\sColorsText=(?[^#\s]+)\s', 'names'); +if isempty(txtprf) + error('Text colour not present in colorscheme file:\n%s', fname); +elseif length(txtprf) > 1 + error('Text colour defined multiple times in colorscheme file:\n%s', fname); +end +% Search for occurances of main background colour +bkgprf = regexp(flestr, '\sColorsBackground=(?[^#\s]+)\s', 'names'); +if isempty(bkgprf) + error('Background colour not present in colorscheme file:\n%s', fname); +elseif length(bkgprf) > 1 + error('Background colour defined multiple times in colorscheme file:\n%s', fname); +end +% Make sure the main text and background colours are not exactly the same +if strcmp(txtprf.pref, bkgprf.pref) + error('Main text and background colours are the same in this file:\n%s', fname); +end + +% ------------------------ File stuff ------------------------------------- +% Open for read access only +fid = fopen(fname, 'r', 'n'); +if isequal(fid, -1); + if nargout>0; varargout{1} = -1; end; + return; +end +% Add a cleanup object incase of failure +finishup = onCleanup(@() fclose(fid)); + +% ------------------------ Read and Write --------------------------------- +% Initialise tracker for unset colours +isColorSet = false(size(names_color, 1), 1); +% Loop over prf file +while ~feof(fid) + % Get one line of preferences/theme file + l = fgetl(fid); + + % Ignore empty lines and lines which begin with # + if length(l)<1 || strcmp('#', l(1)) + if verbose; disp('Comment'); end; + continue; + end + + % Look for name pref pair, seperated by '=' + % Must be at begining of string (hence ^ anchor) + % Cannot contain comment marker (#) + n = regexp(l, '^(?[^=#]+)=(?[^#]+)', 'names'); + + % If no match, continue and scan next line + if isempty(n) + if verbose; disp('No match'); end; + continue; + end + + % Trim whitespace from pref + n.pref = strtrim(n.pref); + + if ismember(n.name, names_boolean) + % Deal with boolean type + switch lower(n.pref) + case 'btrue' + % Preference is true + com.mathworks.services.Prefs.setBooleanPref(n.name, 1); + if verbose; fprintf('Set bool true %s\n', n.name); end + case 'bfalse' + % Preference is false + com.mathworks.services.Prefs.setBooleanPref(n.name, 0); + if verbose; fprintf('Set bool false %s\n', n.name); end + otherwise + % Shouldn't be anything else + warning('Bad boolean for %s: %s', n.name, n.pref); + end + + elseif ismember(n.name, names_integer) + % Deal with integer type + if ~strcmpi('I', n.pref(1)) + warning('Bad integer pref for %s: %s', n.name, n.pref); + continue; + end + int = str2double(n.pref(2:end)); + com.mathworks.services.Prefs.setIntegerPref(n.name, int); + if verbose; fprintf('Set integer %d for %s\n', int, n.name); end + + elseif ismember(n.name,names_string(:, 1)) + % Deal with string type + if ~strcmpi('S', n.pref(1)) + warning('Bad string pref for %s: %s', n.name, n.pref); + continue; + end + str = n.pref(2:end); + % Look up which of the preference settings this is + [~, idx] = ismember(n.name, names_string(:, 1)); + % Check that the setting allowed by the regex it must satisfy + if isempty(regexp(str, names_string{idx, 2}, ... + 'start', 'emptymatch')) + % If not, we can't set the value to be this + warning('Invalid string for %s: %s', n.name, str); + continue; + end + com.mathworks.services.Prefs.setStringPref(n.name, str); + if verbose; fprintf('Set string %s for %s\n', str, n.name); end + + elseif ismember(n.name, names_color(:, 1)) + % Deal with colour type (final type to consider) + if ~strcmpi('C', n.pref(1)) + warning('Bad color for %s: %s', n.name, n.pref); + continue; + end + [~, idx] = ismember(n.name, names_color(:, 1)); + % Get the current setting for this parameter + previousVal = ... + com.mathworks.services.Prefs.getColorPref(names_color{idx, 1}); + % Set the colour to the target value + rgb = str2double(n.pref(2:end)); + jc = java.awt.Color(rgb); + com.mathworks.services.Prefs.setColorPref(n.name, jc); + com.mathworks.services.ColorPrefs.notifyColorListeners(n.name); + if verbose + fprintf('Set color (%3.f, %3.f, %3.f) for %s\n', ... + jc.getRed, jc.getGreen, jc.getBlue, n.name); + end + % Note that we have allocated this colour + isColorSet(idx) = true; + % Check if the colour has changed + if names_color{idx, 3} && ~isequal(previousVal, jc) + needs_restart = true; + end + + else + % Silently ignore irrelevant preferences + % (This means you can load a whole matlab.prf file and anything not + % listed above as relevant to the color scheme will be ignored.) + + end + +end + +% Check that at least one colour was actually set +if ~any(isColorSet) + error('Did not find any colour settings in file\n%s', fname); + if nargout>0; varargout{1} = -2; end; + return; +end + +% For colours which have not been set by the color scheme, we set them from +% a backup +% Get a row vector of indices of all unset colours +unsetColorIndices = find(~isColorSet)'; +% Loop over unset colours +for idx=unsetColorIndices + % Get the backup setting for this colour parameter + backupVal = names_color{idx, 2}; + % Get the current setting for this parameter + previousVal = ... + com.mathworks.services.Prefs.getColorPref(names_color{idx, 1}); + + clear jc; % Clear variable + + % Switch based on the type of backup + if isempty(backupVal) + % No backup is set + continue; + + elseif iscell(backupVal) + % Backup is one of several methods of which involve refactoring one + % or more other colours + % Get an RGB value for the colour through whichever method + if all(cellfun(@ischar, backupVal)) + % Backup is a list of other names to sample and average + % Initialise a holding matrix + RGB = nan(numel(backupVal), 3); + for i=1:numel(backupVal) + % Load each of the other colours + jc = com.mathworks.services.Prefs.getColorPref(backupVal{i}); + % Put the R, G, B values into the holding matrix + RGB(i, 1) = jc.getRed; + RGB(i, 2) = jc.getGreen; + RGB(i, 3) = jc.getBlue; + end + % Take the average of each RGB value from the other colours + RGB = mean(RGB); + + elseif length(backupVal)==2 + % Backup is a name of a colour and a scale factor to apply + jc = com.mathworks.services.Prefs.getColorPref(backupVal{1}); + % Get the R, G, B values + RGB = [jc.getRed, jc.getGreen, jc.getBlue]; + % Rescale them + RGB = RGB * backupVal{2}; + + else + error('Bad backup cell for %s', names_color{idx, 1}); + + end + % Turn the RGB value into a Java color object + % Ensure RGB is integer and does not exceed 255 + RGB = min(255, round(RGB)); + % Convert to a float + RGB = RGB/255; + % Make a Java color object for this colour + jc = java.awt.Color(RGB(1), RGB(2), RGB(3)); + + elseif ischar(backupVal) + % The backup colour is a reference to another colour + % Look up the colour from the backup reference + jc = com.mathworks.services.Prefs.getColorPref(backupVal); + + elseif isnumeric(backupVal) && numel(backupVal)==1 + % The backup colour is a specific colour + % Make a java color object for this specific colour + jc = java.awt.Color(backupVal); + + else + error('Bad backup value for %s', names_color{idx, 1}); + + end + % Assign the neglected colour to be this Java colour object from the + % backup + com.mathworks.services.Prefs.setColorPref(names_color{idx, 1}, jc); + com.mathworks.services.ColorPrefs.notifyColorListeners(names_color{idx, 1}); + + % Check if the colour has changed + if names_color{idx, 3} && ~isequal(previousVal, jc) + needs_restart = true; + end + +end + +% ------------------------ Tidy up ---------------------------------------- +% fclose(fid); % Don't need to close as it will autoclose +if nargout>0; varargout{1} = 1; end; + +if inc_bools + fprintf('Imported color scheme WITH boolean options from\n%s\n', fname); +else + fprintf('Imported color scheme WITHOUT boolean options from\n%s\n', fname); +end +if needs_restart + disp('Some changes require MATLAB to be restarted to be activated.'); +end + +end diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitattributes b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitattributes new file mode 100644 index 0000000..07ef0d9 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitattributes @@ -0,0 +1,46 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# +# The above will handle all files NOT found below +# + +##--------------------------------------------------- +# Common .gitattributes +##--------------------------------------------------- + +# Documents +# ============ +*.txt text +*.md text + +# Graphics +# ============ +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +*.svg text +*.eps binary + + +##--------------------------------------------------- +# Basic .gitattributes for a MATLAB repo +##--------------------------------------------------- + +# Source files +# ============ +*.m text +*.prf text + +# Binary files +# ============ +*.p binary +*.mex* binary +*.fig binary +*.mat binary +*.mdl binary +*.slx binary diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitignore b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitignore new file mode 100644 index 0000000..f7bb9d7 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/.gitignore @@ -0,0 +1,5 @@ +# Editor autosave files +*~ +*.asv +# Compiled MEX binaries (all platforms) +*.mex* diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/CONTRIBUTING.md b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/CONTRIBUTING.md new file mode 100644 index 0000000..ca40323 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/CONTRIBUTING.md @@ -0,0 +1,153 @@ +Contributing a colour scheme +============================ + +Glad to hear you've made a colour scheme to use with [MATLAB Schemer]! +Thanks for sharing this with us. + +Please only add one colour scheme per pull request. +If you have multiple colorschemes to add, make a pull request for each of them. + +The Schemer README includes some +[advice on creating a colour scheme][scheme creation advice], which you might +find useful. + +It is preferable to include a screenshot demonstrating an example of your new MATLAB theme. +To make your screenshot: + +- Load your color scheme `schemer_import('yourscheme.prf', 1)` +- Exit MATLAB `exit();` +- Reopen MATLAB +- Open the [matlab-schemer/develop/sample.m] file and take a screenshot with your favourite screenshot program. +- If not done at capture time, crop the screenshot down to the right size with your [favourite image editor]. +- Make sure the screenshot is saved in [matlab-schemes/screenshots] as `yourscheme.png`. + +If you are on Linux, you can follow the method below to create your screenshot, +which is mostly automated and produces the same output every time. + + +Reproducible screenshot workflow for Linux +------------------------------------------ + +Here is minimal-interaction workflow for Linux users, which will create the +same screenshots every time. +This has been tested on Ubuntu 15.10 with MATLAB 2016a, but should work on +any *nix OS and any MATLAB version since R2012b (which introduced the +toolstrip UI). + +The code blocks must be run from the system shell, not at the MATLAB command +prompt. + +1. **Setup** + + Define these variables appropriately. + + ```bash + # Set this variable appropriately, without extension + SCHEME_NAME='yourschemename' + # Set the path to your copy of MATLAB Schemer + PATH_TO_SCHEMER='../matlab-schemer/' + ``` + +2. **Load scheme** + + Run this code block to load the scheme, restart MATLAB, and edit + `sample.m`. + + ```bash + # Remove extension, if present + SCHEME_NAME=${SCHEME_NAME%.prf} + echo "Making screenshot for scheme $SCHEME_NAME"; + # Load the template and restart matlab + matlab -r "addpath(genpath('$PATH_TO_SCHEMER')); schemer_import('$SCHEME_NAME.prf',1); exit;"; + # Edit the sample.m file + matlab -r "edit(fullfile('$PATH_TO_SCHEMER','develop','sample.m'))" & + # What next + echo "Now undock sample.m, and highlight middle scaleFactor"; + ``` + +3. **Undock sample.m editor** + + Either + - in MATLAB GUI, undock `sample.m` only + + Or + - in MATLAB GUI, undock the Editor panel + - move tabs to bottom, if more than one file is being editted + + Also, make sure the MATLAB toolstrip is visible on the undocked panel. + If it is minimised, right-click on the toolstrip and restore it. + +4. **Highlight** + + Highlight the middle instance of `scaleFactor` (on line 18). + +5. **Resize window and take screenshot** + + Run this code block to resize the editor window and take a screenshot, + cropped with ImageMagick. + + The crop location is correct for MATLAB 2016a. + + ```bash + # Check for a window for the develop/sample.m file + if wmctrl -l | grep -q develop/sample.m + then + WINDOW_NAME='develop/sample.m'; + else + # If it's not there, use the Editor window + WINDOW_NAME='Editor'; + fi + if wmctrl -l | grep -qv "$WINDOW_NAME" + then + echo "Window $WINDOW_NAME is absent"; + else + # Resize the window + wmctrl -r "$WINDOW_NAME" -e 0,100,100,700,650; + # Try getting screenshot with Imagemagick, and cropping it down to the + # just the relevant section + wmctrl -a "$WINDOW_NAME"; sleep 0.1; import -window root -crop 700x379+100+249 +repage "${SCHEME_NAME}.png"; + # Inspect the result + xdg-open "${SCHEME_NAME}.png"; + # Is it cropped correctly? + echo "How does it look? If no good, try one of the other options to manually crop"; + fi + ``` + +6. If screenshot cropped incorrectly, **manually crop screenshot** + + If the ImageMagick crop is not aligned correctly, + - Either use gnome-screenshot for the whole window, and then crop in GIMP + ```bash + wmctrl -a "$WINDOW_NAME" \ + && gnome-screenshot -w -f "$SCHEME_NAME.png" \ + && gimp "$SCHEME_NAME.png"; + ``` + + - Or use gnome-screenshot to select the area to use (which is likely to + be less precise). + ```bash + wmctrl -a "$WINDOW_NAME" && gnome-screenshot -a -f "$SCHEME_NAME.png"; + ``` + +7. When you are happy, **move** the final copy into the screenshots folder + + ```bash + mv "$SCHEME_NAME.png" screenshots/"$SCHEME_NAME.png"; + ``` + + +Incorporating into MATLAB Schemer +--------------------------------- + +Once you've added the new scheme to this repository, it will be merged into +[MATLAB Schemer] using [git-subtree]. +If you are merging it into Schemer yourself, please consult this +[step-by-step guide](https://github.com/scottclowe/matlab-schemer/blob/master/CONTRIBUTING.md#adding-a-new-colour-scheme). + + + [MATLAB Schemer]: https://github.com/scottclowe/matlab-schemer + [matlab-schemes/screenshots]: https://github.com/scottclowe/matlab-schemes/tree/master/screenshots + [matlab-schemer/develop/sample.m]: https://github.com/scottclowe/matlab-schemer/blob/master/develop/sample.m + [scheme creation advice]: https://github.com/scottclowe/matlab-schemer#creating-a-color-scheme-for-others-to-use + [git-subtree]: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt + [favourite image editor]: https://www.gimp.org diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/LICENSE b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/LICENSE new file mode 100644 index 0000000..212fa8b --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2015, Scott Lowe +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/README.md b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/README.md new file mode 100644 index 0000000..a9fc66c --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/README.md @@ -0,0 +1,84 @@ +MATLAB Schemes +============== + +A collection of color schemes for MATLAB. + +These color schemes can be enabled using the [MATLAB Schemer package]. + + +Samples +------- + +### Cobalt +Based on the [GTK stylesheet], "Cobalt", by Will Farrington. + +![Cobalt sample](screenshots/cobalt.png) + +### Darkmate +Based on the [GTK stylesheet], "Darkmate", +by [Luigi Maselli](https://grigio.org/). + +![Darkmate sample](screenshots/darkmate.png) + +### Dark Steel +By [@scottclowe](https://github.com/scottclowe), inspired by the Darkmate and +Cobalt themes. + +![Dark Steel sample](screenshots/darksteel.png) + +### Matrix +By [@scottclowe](https://github.com/scottclowe), using only colors present in +the terminals shown in the movie, +[*The Matrix*](http://www.imdb.com/title/tt0133093/). + +![Matrix sample](screenshots/matrix.png) + +### Monokai +By [@dkearn](https://github.com/dkearn). Based on Sublime Text's Monokai theme. Change the font to Consolas to complete the look. + +![Monokai sample](screenshots/monokai.png) + +### Oblivion +Based on the [Gedit theme, "Oblivion"](https://github.com/mig/gedit-themes/blob/master/oblivion.xml), +by Paolo Borelli and GtkSourceView. + +![Oblivion sample](screenshots/oblivion.png) + +### Solarised Dark +Based on the [Solarized][Solarized] (1.0.0beta2) palette, in dark mode, +by [Ethan Schoonover]. + +![Solarized Dark sample](screenshots/solarized-dark.png) + +### Solarised Light +Based on the [Solarized][Solarized] (1.0.0beta2) palette, in light mode, +by [Ethan Schoonover]. + +![Solarized Light sample](screenshots/solarized-light.png) + +### Tango +Based on the colour palette for the [Tango Desktop Project]. + +![Tango sample](screenshots/tango.png) + +### Vibrant +Based on the [GTK stylesheet], "Vibrant", by Lateef Alabi-Oki. + +![Vibrant sample](screenshots/vibrant.png) + + +Default +------- + +And of course, you can always return to the original MATLAB color scheme +provided by [MathWorks](https://www.mathworks.com/) using the `default.prf` +color preferences file. + +![Default](screenshots/default.png) + + + [MATLAB Schemer package]: https://github.com/scottclowe/matlab-schemer + [GTK stylesheet]: https://wiki.gnome.org/Projects/GtkSourceView/StyleSchemes + [Solarized]: http://ethanschoonover.com/solarized + [Ethan Schoonover]: http://ethanschoonover.com/ + [Tango Desktop Project]: http://tango-project.org/ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/cobalt.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/cobalt.prf new file mode 100644 index 0000000..a0101d1 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/cobalt.prf @@ -0,0 +1,45 @@ +# Cobalt - MATLAB color scheme +# Created by Scott Lowe, 2015-07-05 +# Based on the GTK stylesheet "Cobalt", by Will Farrington. +# https://wiki.gnome.org/Projects/GtkSourceView/StyleSchemes +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-1 # white +ColorsBackground=C-16770253 # dark_blue +Colors_M_Keywords=C-25344 # bright_orange +Colors_M_Comments=C-16742145 # sky_blue +Colors_M_Strings=C-12920576 # spring_green +Colors_M_UnterminatedStrings=C-4480 # faded_yellow +Colors_M_SystemCommands=C-3355444 # light grey +Colors_M_Errors=C-65468 # nail_polish_pink +Colors_HTML_HTMLLinks=C-16751169 # light_blue +Colors_M_Warnings=C-20396 # +ColorsMLintAutoFixBackground=C-12303292 # +Editor.VariableHighlighting.Color=C-16728180 # eye-drop +Editor.NonlocalVariableHighlighting.TextColor=C-8323141 # teal_blue +Editorhighlight-lines=C-15981252 # eye-drop +Editorhighlight-caret-row-boolean-color=C-16762000 # medium_blue +EditorRightTextLimitLineColor=C-14665909 # eye-drop +# C/C++ +Editor.Language.C.Color.preprocessor=C-8323141 # teal_blue +# Java +Editor.Language.Java.Color.keywords=C-8323141 # teal_blue +# VHDL +Editor.Language.VHDL.Color.operator=C-65468 # nail_polish_pink +# Verilog +Editor.Language.Verilog.Color.operator=C-65468 # nail_polish_pink +# XML/HTML +Editor.Language.XML.Color.tag=C-8323141 # teal_blue +Editor.Language.XML.Color.doctype=C-3355444 # light grey +Editor.Language.XML.Color.pi-content=C-3355444 # light grey +Editor.Language.XML.Color.cdata-section=C-3355444 # light grey diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darkmate.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darkmate.prf new file mode 100644 index 0000000..b253f63 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darkmate.prf @@ -0,0 +1,34 @@ +# Darkmate - MATLAB color scheme +# Created by Scott Lowe, 2015-07-05 +# Based on the GTK stylesheet "Darkmate", by Luigi Maselli. +# https://wiki.gnome.org/Projects/GtkSourceView/StyleSchemes +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I4 # slightly wider +ColorsText=C-1118482 # white +ColorsBackground=C-14474461 # carbon +Colors_M_Keywords=C-26368 # ambra +Colors_M_Comments=C-10920873 # asfalto +Colors_M_Strings=C-6881536 # lime +Colors_M_UnterminatedStrings=C-202417 # yellow +Colors_M_SystemCommands=C-16725605 # alga +Colors_M_Errors=C-53398 # red +Colors_HTML_HTMLLinks=C-6385153 # violet +Colors_M_Warnings=C-26368 # ambra +ColorsMLintAutoFixBackground=C-11184811 # +Editor.VariableHighlighting.Color=C-4495617 # purple +Editor.NonlocalVariableHighlighting.TextColor=C-16725760 # green +Editorhighlight-lines=C-15132391 # +Editorhighlight-caret-row-boolean-color=C-16777216 # black +EditorRightTextLimitLineColor=C-13948117 # +# XML/HTML +Editor.Language.XML.Color.pi-content=C-6425200 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darksteel.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darksteel.prf new file mode 100644 index 0000000..77627f2 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/darksteel.prf @@ -0,0 +1,44 @@ +# Dark Steel - MATLAB color scheme +# Created by Scott Lowe +# Generated with colortheme_export v1.0.0 +# Fri Aug 09 18:39:37 BST 2013 +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-1 +ColorsBackground=C-15066598 +Colors_M_Keywords=C-1208813 +Colors_M_Comments=C-14114579 +Colors_M_Strings=C-16724992 +Colors_M_UnterminatedStrings=C-4210944 +Colors_M_SystemCommands=C-7123493 +Colors_M_Errors=C-45747 +Colors_HTML_HTMLLinks=C-10592257 +Colors_M_Warnings=C-27648 +ColorsMLintAutoFixBackground=C-9223357 +Editor.VariableHighlighting.Color=C-11184786 +Editor.NonlocalVariableHighlighting.TextColor=C-16735351 +Editorhighlight-lines=C-14408662 +Editorhighlight-caret-row-boolean-color=C-12632257 +EditorRightTextLimitLineColor=C-5723992 +# TLC +Editor.Language.TLC.Color.Colors_M_Keywords=C-16735351 +# C/C++ +Editor.Language.C.Color.preprocessor=C-16735351 +# VHDL +Editor.Language.VHDL.Color.operator=C-16735351 +# Verilog +Editor.Language.Verilog.Color.operator=C-16735351 +# XML +Editor.Language.XML.Color.operator=C-1710454 +Editor.Language.XML.Color.doctype=C-6578958 +Editor.Language.XML.Color.pi-content=C-9868801 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/default.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/default.prf new file mode 100644 index 0000000..b444487 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/default.prf @@ -0,0 +1,95 @@ +# Default MATLAB color scheme +# This color scheme file restores the color scheme which ships with MATLAB. +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Btrue +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Bfalse +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-16777216 +ColorsBackground=C-1 +Colors_M_Keywords=C-16776961 +Colors_M_Comments=C-14513374 +Colors_M_Strings=C-6283024 +Colors_M_UnterminatedStrings=C-5111808 +Colors_M_SystemCommands=C-5075968 +Colors_M_Errors=C-65536 +Colors_HTML_HTMLLinks=C-16776961 +Color_CmdWinWarnings=C-39936 +Color_CmdWinErrors=C-1703936 +Colors_M_Warnings=C-27648 +ColorsMLintAutoFixBackground=C-1121868 +Editor.VariableHighlighting.Color=C-3479320 +Editor.NonlocalVariableHighlighting.TextColor=C-16735325 +Editorhighlight-lines=C-197412 +Editorhighlight-caret-row-boolean-color=C-2167080 +EditorRightTextLimitLineColor=C-3355444 +# MuPAD +Editor.Language.MuPAD.Color.string=C-6283024 +Editor.Language.MuPAD.Color.constant=C-14638864 +Editor.Language.MuPAD.Color.keyword=C-16776961 +Editor.Language.MuPAD.Color.function=C-8355662 +Editor.Language.MuPAD.Color.block-comment=C-14513374 +Editor.Language.MuPAD.Color.option=C-5075968 +Editor.Language.MuPAD.Color.operator=C-5103616 +# TLC +Editor.Language.TLC.Color.Colors_M_SystemCommands=C-16776961 +Editor.Language.TLC.Color.Colors_M_Keywords=C-5075968 +Editor.Language.TLC.Color.Colors_M_Comments=C-14513374 +Editor.Language.TLC.Color.string-literal=C-6283024 +# VRML +Editor.Language.VRML.Color.comment=C-14513374 +Editor.Language.VRML.Color.node-keyword=C-16022329 +Editor.Language.VRML.Color.field-keyword=C-9145228 +Editor.Language.VRML.Color.terminal-symbol=C-2196224 +Editor.Language.VRML.Color.keyword=C-16776961 +Editor.Language.VRML.Color.data-type-keyword=C-6737152 +Editor.Language.VRML.Color.string=C-6283024 +# VRML/X3DV +Editor.Language.VRMLX3DV.Color.keyword=C-16776961 +Editor.Language.VRMLX3DV.Color.node-keyword=C-16022329 +Editor.Language.VRMLX3DV.Color.field-keyword=C-9145228 +Editor.Language.VRMLX3DV.Color.data-type-keyword=C-6737152 +Editor.Language.VRMLX3DV.Color.terminal-symbol=C-2196224 +Editor.Language.VRMLX3DV.Color.comment=C-14513374 +Editor.Language.VRMLX3DV.Color.string=C-6283024 +# C/C++ +Editor.Language.C.Color.keywords=C-16776961 +Editor.Language.C.Color.line-comment=C-14513374 +Editor.Language.C.Color.string-literal=C-6283024 +Editor.Language.C.Color.preprocessor=C-5075968 +Editor.Language.C.Color.char-literal=C-48897 +Editor.Language.C.Color.errors=C-65536 +# Java +Editor.Language.Java.method=Sbold +Editor.Language.Java.Color.keywords=C-16776961 +Editor.Language.Java.Color.line-comment=C-14513374 +Editor.Language.Java.Color.string-literal=C-6283024 +Editor.Language.Java.Color.char-literal=C-48897 +# VHDL +Editor.Language.VHDL.Color.Colors_M_Keywords=C-16776961 +Editor.Language.VHDL.Color.operator=C-5075968 +Editor.Language.VHDL.Color.Colors_M_Comments=C-14513374 +Editor.Language.VHDL.Color.string-literal=C-6283024 +# Verilog +Editor.Language.Verilog.Color.Colors_M_Comments=C-14513374 +Editor.Language.Verilog.Color.operator=C-5075968 +Editor.Language.Verilog.Color.Colors_M_Keywords=C-16776961 +Editor.Language.Verilog.Color.string-literal=C-6283024 +# XML +Editor.Language.XML.Color.error=C-65536 +Editor.Language.XML.Color.tag=C-16776961 +Editor.Language.XML.Color.attribute=C-5111808 +Editor.Language.XML.Color.operator=C-5075968 +Editor.Language.XML.Color.value=C-6283024 +Editor.Language.XML.Color.comment=C-14513374 +Editor.Language.XML.Color.doctype=C-16777092 +Editor.Language.XML.Color.ref=C-5111808 +Editor.Language.XML.Color.pi-content=C-16777092 +Editor.Language.XML.Color.cdata-section=C-8625664 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/matrix.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/matrix.prf new file mode 100644 index 0000000..f7b6e25 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/matrix.prf @@ -0,0 +1,31 @@ +# Matrix - MATLAB color scheme +# Created by Scott Lowe, 2015-07-05. Modified 2015-04-08. +# Based on the movie of the same name. +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue # with cell bg +EditorCodeBlockDividers=Bfalse # without cell lines +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-15810737 +ColorsBackground=C-16448762 +Colors_M_Keywords=C-8524550 +Colors_M_Comments=C-14199226 +Colors_M_Strings=C-15236555 +Colors_M_UnterminatedStrings=C-13769101 +Colors_M_SystemCommands=C-15122561 +Colors_M_Errors=C-2678475 +Colors_HTML_HTMLLinks=C-14525287 +Colors_M_Warnings=C-10475466 +ColorsMLintAutoFixBackground=C-6544075 +Editor.VariableHighlighting.Color=C-14855081 +Editor.NonlocalVariableHighlighting.TextColor=C-16354525 +Editorhighlight-lines=C-16117996 +Editorhighlight-caret-row-boolean-color=C-15919586 +EditorRightTextLimitLineColor=C-5723992 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/monokai.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/monokai.prf new file mode 100644 index 0000000..99dee85 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/monokai.prf @@ -0,0 +1,32 @@ +# monokai - MATLAB color scheme +# Generated with schemer_export v1.3.5, on MATLAB 8.1.0.604 (R2013a) +# Mon Apr 25 15:03:32 BST 2016 +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Bfalse +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-460560 +ColorsBackground=C-14211038 +Colors_M_Keywords=C-448910 +Colors_M_Comments=C-9080482 +Colors_M_Strings=C-1647756 +Colors_M_UnterminatedStrings=C-65536 +Colors_M_SystemCommands=C-16711936 +Colors_M_Errors=C-65536 +Colors_HTML_HTMLLinks=C-16711681 +Colors_M_Warnings=C-27648 +ColorsMLintAutoFixBackground=C-11974594 +Editor.VariableHighlighting.Color=C-10066330 +Editor.NonlocalVariableHighlighting.TextColor=C-16729641 +Editorhighlight-lines=C-13421773 +Editorhighlight-caret-row-boolean-color=C-10066330 +EditorRightTextLimitLineColor=C-3355444 +Color_CmdWinWarnings=C-26368 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/oblivion.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/oblivion.prf new file mode 100644 index 0000000..371647d --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/oblivion.prf @@ -0,0 +1,52 @@ +# Oblivion - MATLAB color scheme +# Created by Scott Lowe, 2015-07-05 +# Based on the Gedit theme "Oblivion", by Paolo Borelli. +# https://github.com/mig/gedit-themes +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-2893873 # aluminium2 +ColorsBackground=C-13749194 # aluminium6 +Colors_M_Keywords=C-1 # white +Colors_M_Comments=C-7828859 # aluminium4 +Colors_M_Strings=C-1190912 # butter2 +Colors_M_UnterminatedStrings=C-3891200 # butter3 +Colors_M_SystemCommands=C-7675340 # chameleon1 +Colors_M_Errors=C-1103575 # scarlet1 +Colors_HTML_HTMLLinks=C-9265201 # skyblue1 +Colors_M_Warnings=C-217282 # orange1 +ColorsMLintAutoFixBackground=C-6029312 # scarlet3 +Editor.VariableHighlighting.Color=C-11625978 # chameleon3 +Editor.NonlocalVariableHighlighting.TextColor=C-9265201 # skyblue1 +Editorhighlight-lines=C-13288387 # +Editorhighlight-caret-row-boolean-color=C-11184301 # aluminium5 +EditorRightTextLimitLineColor=C-11775661 # +# C/C++ +Editor.Language.C.Color.keywords=C-7675340 # chameleon1 +Editor.Language.C.Color.preprocessor=C-5406808 # plum1 +Editor.Language.C.Color.char-literal=C-9265201 # skyblue1 +# Java +Editor.Language.Java.Color.keywords=C-7675340 # chameleon1 +Editor.Language.Java.Color.char-literal=C-9265201 # skyblue1 +# VHDL +Editor.Language.VHDL.Color.Colors_M_Keywords=C-7675340 # chameleon1 +Editor.Language.VHDL.Color.operator=C-1 # white +# Verilog +Editor.Language.Verilog.Color.operator=C-1 # white +Editor.Language.Verilog.Color.Colors_M_Keywords=C-7675340 # chameleon1 +# XML/HTML +Editor.Language.XML.Color.tag=C-9265201 # skyblue1 +Editor.Language.XML.Color.attribute=C-7675340 # chameleon1 +Editor.Language.XML.Color.operator=C-1967753 # +Editor.Language.XML.Color.doctype=C-5406808 # plum1 +Editor.Language.XML.Color.pi-content=C-5406808 # plum1 +Editor.Language.XML.Color.cdata-section=C-5406808 # plum1 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/cobalt.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/cobalt.png new file mode 100644 index 0000000..89cec1a Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/cobalt.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darkmate.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darkmate.png new file mode 100644 index 0000000..8bd4152 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darkmate.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darksteel.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darksteel.png new file mode 100644 index 0000000..41b26a6 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/darksteel.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/default.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/default.png new file mode 100644 index 0000000..982d948 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/default.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/matrix.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/matrix.png new file mode 100644 index 0000000..de9c7f8 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/matrix.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/monokai.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/monokai.png new file mode 100644 index 0000000..ffaf06f Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/monokai.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/oblivion.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/oblivion.png new file mode 100644 index 0000000..c74db45 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/oblivion.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-dark.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-dark.png new file mode 100644 index 0000000..fef6c37 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-dark.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-light.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-light.png new file mode 100644 index 0000000..6724273 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/solarized-light.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/tango.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/tango.png new file mode 100644 index 0000000..80f4f50 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/tango.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/vibrant.png b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/vibrant.png new file mode 100644 index 0000000..69c0b62 Binary files /dev/null and b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/screenshots/vibrant.png differ diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-dark.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-dark.prf new file mode 100644 index 0000000..874b5b8 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-dark.prf @@ -0,0 +1,55 @@ +# Solarized Dark - MATLAB color scheme +# Manually created on 2015-07-04 by Scott Lowe, based on the style guide of +# http://ethanschoonover.com/solarized +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Bfalse # no cell highlighting +EditorCodeBlockDividers=Btrue # mark cells with line +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-8153962 # base 0 +ColorsBackground=C-16766154 # base 03 +Colors_M_Keywords=C-3454186 # orange +Colors_M_Comments=C-10981771 # base 01 +Colors_M_Strings=C-14251054 # blue +Colors_M_UnterminatedStrings=C-13983336 # cyan +Colors_M_SystemCommands=C-2935166 # magenta +Colors_M_Errors=C-2346449 # red +Colors_HTML_HTMLLinks=C-9670204 # violet +Colors_M_Warnings=C-4880128 # yellow +ColorsMLintAutoFixBackground=C-16304574 # base 02 +Editor.VariableHighlighting.Color=C-16304574 # base 02 +Editor.NonlocalVariableHighlighting.TextColor=C-8021760 # green +Editorhighlight-lines=C-16766154 # base 03 +Editorhighlight-caret-row-boolean-color=C-16304574 # base 02 +EditorRightTextLimitLineColor=C-5723992 # matlab cell lines +# MuPAD +Editor.Language.MuPAD.Color.operator=C-8021760 # green +Editor.Language.MuPAD.Color.function=C-4880128 # yellow +Editor.Language.MuPAD.Color.constant=C-2935166 # magenta +# TLC +Editor.Language.TLC.Color.Colors_M_Keywords=C-8021760 # green +# C/C++ +Editor.Language.C.Color.preprocessor=C-8021760 # green +Editor.Language.C.Color.char-literal=C-9670204 # violet +# Java +Editor.Language.Java.Color.char-literal=C-9670204 # violet +# VHDL +Editor.Language.VHDL.Color.operator=C-8021760 # green +# Verilog +Editor.Language.Verilog.Color.operator=C-8021760 # green +# XML +Editor.Language.XML.Color.tag=C-14251054 # blue +Editor.Language.XML.Color.attribute=C-4880128 # yellow +Editor.Language.XML.Color.operator=C-8021760 # green +Editor.Language.XML.Color.value=C-13983336 # cyan +Editor.Language.XML.Color.doctype=C-3454186 # orange +Editor.Language.XML.Color.ref=C-9670204 # violet +Editor.Language.XML.Color.pi-content=C-9670204 # violet +Editor.Language.XML.Color.cdata-section=C-2935166 # magenta diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-light.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-light.prf new file mode 100644 index 0000000..57e81b0 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/solarized-light.prf @@ -0,0 +1,55 @@ +# Solarized Light - MATLAB color scheme +# Manually created on 2015-07-04 by Scott Lowe, based on the style guide of +# http://ethanschoonover.com/solarized +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Bfalse # no cell highlighting +EditorCodeBlockDividers=Btrue # mark cells with line +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-10126461 # base 00 +ColorsBackground=C-133405 # base 3 +Colors_M_Keywords=C-3454186 # orange +Colors_M_Comments=C-7102047 # base 1 +Colors_M_Strings=C-14251054 # blue +Colors_M_UnterminatedStrings=C-13983336 # cyan +Colors_M_SystemCommands=C-2935166 # magenta +Colors_M_Errors=C-2346449 # red +Colors_HTML_HTMLLinks=C-9670204 # violet +Colors_M_Warnings=C-4880128 # yellow +ColorsMLintAutoFixBackground=C-1120043 # base 2 +Editor.VariableHighlighting.Color=C-1120043 # base 2 +Editor.NonlocalVariableHighlighting.TextColor=C-8021760 # green +Editorhighlight-lines=C-133405 # base 00 +Editorhighlight-caret-row-boolean-color=C-1120043 # base 2 +EditorRightTextLimitLineColor=C-5723992 # matlab cell lines +# MuPAD +Editor.Language.MuPAD.Color.operator=C-8021760 # green +Editor.Language.MuPAD.Color.function=C-4880128 # yellow +Editor.Language.MuPAD.Color.constant=C-2935166 # magenta +# TLC +Editor.Language.TLC.Color.Colors_M_Keywords=C-8021760 # green +# C/C++ +Editor.Language.C.Color.preprocessor=C-8021760 # green +Editor.Language.C.Color.char-literal=C-9670204 # violet +# Java +Editor.Language.Java.Color.char-literal=C-9670204 # violet +# VHDL +Editor.Language.VHDL.Color.operator=C-8021760 # green +# Verilog +Editor.Language.Verilog.Color.operator=C-8021760 # green +# XML +Editor.Language.XML.Color.tag=C-14251054 # blue +Editor.Language.XML.Color.attribute=C-4880128 # yellow +Editor.Language.XML.Color.operator=C-8021760 # green +Editor.Language.XML.Color.value=C-13983336 # cyan +Editor.Language.XML.Color.doctype=C-3454186 # orange +Editor.Language.XML.Color.ref=C-9670204 # violet +Editor.Language.XML.Color.pi-content=C-9670204 # violet +Editor.Language.XML.Color.cdata-section=C-2935166 # magenta diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/tango.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/tango.prf new file mode 100644 index 0000000..ae280e2 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/tango.prf @@ -0,0 +1,66 @@ +# Tango - MATLAB color scheme +# Created by Scott Lowe, 2015-07-05, Modified 2016-04-08 +# Based on the colours specified for use in the Tango Project. +# http://tango-project.org/ +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +# +# Palette, taken from +# https://en.wikipedia.org/wiki/Tango_Desktop_Project#Palette +# | Light Medium Dark +# --------------+------------------------------------ +# Butter | -202417 -1190912 -3891200 +# Orange | -217282 -689920 -3253248 +# Chocolate | -1459858 -4096751 -7382782 +# Chameleon | -7675340 -9186794 -11625978 +# Sky Blue | -9265201 -13343324 -14660985 +# Plum | -5406808 -9088901 -10734234 +# Scarlet Red | -1103575 -3407872 -6029312 +# Aluminium (l) | -1118484 -2893873 -4538954 +# Aluminium (d) | -7828859 -11184301 -13749194 +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-11184301 # aluminium-dark +ColorsBackground=C-1 # white +Colors_M_Keywords=C-6029312 # scarletred-dark +Colors_M_Comments=C-9265201 # skyblue-light +Colors_M_Strings=C-5406808 # plum-light +Colors_M_UnterminatedStrings=C-13343324 # skyblue +Colors_M_SystemCommands=C-4096751 # chocolate +Colors_M_Errors=C-1103575 # scarletred-light +Colors_HTML_HTMLLinks=C-13343324 # skyblue +Colors_M_Warnings=C-217282 # orange-light +ColorsMLintAutoFixBackground=C-4538954 # aluminium-light +Editor.VariableHighlighting.Color=C-202417 # butter-light +Editor.NonlocalVariableHighlighting.TextColor=C-11625978 # chameleon-dark +Editorhighlight-lines=C-1118484 # aluminium-white +Editorhighlight-caret-row-boolean-color=C-2893873 # aluminium-vlight +EditorRightTextLimitLineColor=C-7828859 # aluminium +# C/C++ +Editor.Language.C.Color.keywords=C-11625978 +Editor.Language.C.Color.char-literal=C-3891200 +# Java +Editor.Language.Java.Color.keywords=C-11625978 +Editor.Language.Java.Color.char-literal=C-3891200 +# VHDL +Editor.Language.VHDL.Color.operator=C-11625978 +# Verilog +Editor.Language.Verilog.Color.operator=C-11625978 +# XML/HTML +Editor.Language.XML.Color.error=C-1103575 +Editor.Language.XML.Color.tag=C-6029312 +Editor.Language.XML.Color.attribute=C-11625978 +Editor.Language.XML.Color.operator=C-1190912 +Editor.Language.XML.Color.value=C-4096751 +Editor.Language.XML.Color.doctype=C-689920 +Editor.Language.XML.Color.ref=C-3891200 +Editor.Language.XML.Color.pi-content=C-13343324 +Editor.Language.XML.Color.cdata-section=C-5406808 diff --git a/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/vibrant.prf b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/vibrant.prf new file mode 100644 index 0000000..88e9f51 --- /dev/null +++ b/downloaded/scottclowe-matlab-schemer-2156bb9/schemes/vibrant.prf @@ -0,0 +1,32 @@ +# Vibrant - MATLAB color scheme +# Created by Scott Lowe, 2015-07-12 +# Based on the GTK stylesheet "Vibrant", by Lateef Alabi-Oki. +# https://wiki.gnome.org/Projects/GtkSourceView/StyleSchemes +# To enable this color scheme in MATLAB use schemer_import, available at: +# https://github.com/scottclowe/matlab-schemer +# https://www.mathworks.com/matlabcentral/fileexchange/53862-matlab-schemer +ColorsUseSystem=Bfalse +ColorsUseMLintAutoFixBackground=Btrue +Editor.VariableHighlighting.Automatic=Btrue +Editor.NonlocalVariableHighlighting=Btrue +EditorCodepadHighVisible=Btrue +EditorCodeBlockDividers=Btrue +Editorhighlight-caret-row-boolean=Btrue +EditorRightTextLineVisible=Btrue +EditorRightTextLimitLineWidth=I1 +ColorsText=C-11711155 # text_fg +ColorsBackground=C-1 # white +Colors_M_Keywords=C-6815487 # accent_deep_red +Colors_M_Comments=C-183551 # accent_red +Colors_M_Strings=C-16684599 # accent_blue_base +Colors_M_UnterminatedStrings=C-16698473 # accent_blue_shadow +Colors_M_SystemCommands=C-10092340 # accent_dark_violet +Colors_M_Errors=C-2883584 # accent_red_base +Colors_HTML_HTMLLinks=C-16766147 # ubuntu_toner +Colors_M_Warnings=C-292096 # orange_base +ColorsMLintAutoFixBackground=C-140901 # human_highlight +Editor.VariableHighlighting.Color=C-256 # yellow +Editor.NonlocalVariableHighlighting.TextColor=C-13395712 # accent_green_base +Editorhighlight-lines=C-66341 # custom +Editorhighlight-caret-row-boolean-color=C-131175 # accent_yellow_highlight +EditorRightTextLimitLineColor=C-140901 # human_highlight diff --git a/downloaded/shadedErrorBar.m b/downloaded/shadedErrorBar.m new file mode 100644 index 0000000..079fa5f --- /dev/null +++ b/downloaded/shadedErrorBar.m @@ -0,0 +1,195 @@ +function varargout=shadedErrorBar(x,y,errBar,varargin) +% generate continuous error bar area around a line plot +% +% function H=shadedErrorBar(x,y,errBar, ...) +% +% Purpose +% Makes a 2-d line plot with a pretty shaded error bar made +% using patch. Error bar color is chosen automatically. +% +% +% Inputs (required) +% x - vector of x values [optional, can be left empty] +% y - vector of y values or a matrix of n observations by m cases +% where m has length(x); +% errBar - if a vector we draw symmetric errorbars. If it has a size +% of [2,length(x)] then we draw asymmetric error bars with +% row 1 being the upper bar and row 2 being the lower bar +% (with respect to y). ** alternatively ** errBar can be a +% cellArray of two function handles. The first defines which +% statistic the line should be and the second defines the +% error bar. +% +% Inputs (optional, param/value pairs) +% 'lineProps' - ['-k' by default] defines the properties of +% the data line. e.g.: +% 'or-', or {'-or','markerfacecolor',[1,0.2,0.2]} +% 'transparent' - [true by default] if true, the shaded error +% bar is made transparent. However, for a transparent +% vector image you will need to save as PDF, not EPS, +% and set the figure renderer to "painters". An EPS +% will only be transparent if you set the renderer +% to OpenGL, however this makes a raster image. +% 'patchSaturation'- [0.2 by default] The saturation of the patch color. +% +% +% +% Outputs +% H - a structure of handles to the generated plot objects. +% +% +% Examples: +% y=randn(30,80); +% x=1:size(y,2); +% +% 1) +% shadedErrorBar(x,mean(y,1),std(y),'lineprops','g'); +% +% 2) +% shadedErrorBar(x,y,{@median,@std},'lineprops',{'r-o','markerfacecolor','r'}); +% +% 3) +% shadedErrorBar([],y,{@median,@(x) std(x)*1.96},'lineprops',{'r-o','markerfacecolor','k'}); +% +% 4) +% Overlay two transparent lines: +% clf +% y=randn(30,80)*10; +% x=(1:size(y,2))-40; +% shadedErrorBar(x,y,{@mean,@std},'lineprops','-r','transparent',1); +% hold on +% y=ones(30,1)*x; y=y+0.06*y.^2+randn(size(y))*10; +% shadedErrorBar(x,y,{@mean,@std},'lineprops','-b','transparent',1); +% hold off +% +% +% Rob Campbell - November 2009 + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Parse input arguments +narginchk(3,inf) + +params = inputParser; +params.CaseSensitive = false; +params.addParameter('lineProps', '-k', @(x) ischar(x) | iscell(x)); +params.addParameter('transparent', true, @(x) islogical(x) || x==0 || x==1); +params.addParameter('patchSaturation', 0.2, @(x) isnumeric(x) && x>=0 && x<=1); + +params.parse(varargin{:}); + +%Extract values from the inputParser +lineProps = params.Results.lineProps; +transparent = params.Results.transparent; +patchSaturation = params.Results.patchSaturation; + +if ~iscell(lineProps), lineProps={lineProps}; end + + +%Process y using function handles if needed to make the error bar dynamically +if iscell(errBar) + fun1=errBar{1}; + fun2=errBar{2}; + errBar=fun2(y); + y=fun1(y); +else + y=y(:).'; +end + +if isempty(x) + x=1:length(y); +else + x=x(:).'; +end + + +%Make upper and lower error bars if only one was specified +if length(errBar)==length(errBar(:)) + errBar=repmat(errBar(:)',2,1); +else + s=size(errBar); + f=find(s==2); + if isempty(f), error('errBar has the wrong size'), end + if f==2, errBar=errBar'; end +end + +if length(x) ~= length(errBar) + error('length(x) must equal length(errBar)') +end + + +%Log the hold status so we don't change +initialHoldStatus=ishold; +if ~initialHoldStatus, hold on, end + +H = makePlot(x,y,errBar,lineProps,transparent,patchSaturation); + +if ~initialHoldStatus, hold off, end + +if nargout==1 + varargout{1}=H; +end + + + +function H = makePlot(x,y,errBar,lineProps,transparent,patchSaturation) + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % Plot to get the parameters of the line + H.mainLine=plot(x,y,lineProps{:}); + + + % Work out the color of the shaded region and associated lines. + % Here we have the option of choosing alpha or a de-saturated + % solid colour for the patch surface. + mainLineColor=get(H.mainLine,'color'); + edgeColor=mainLineColor+(1-mainLineColor)*0.55; + + if transparent + faceAlpha=patchSaturation; + patchColor=mainLineColor; + else + faceAlpha=1; + patchColor=mainLineColor+(1-mainLineColor)*(1-patchSaturation); + end + + + %Calculate the error bars + uE=y-errBar(1,:); + lE=y+errBar(2,:); + + + %Add the patch error bar + + + + %Make the patch + yP=[lE,fliplr(uE)]; + xP=[x,fliplr(x)]; + + %remove nans otherwise patch won't work + xP(isnan(yP))=[]; + yP(isnan(yP))=[]; + + + if(isdatetime(x)) + H.patch=patch(datenum(xP),yP,1); + else + H.patch=patch(xP,yP,1); + end + + set(H.patch,'facecolor',patchColor, ... + 'edgecolor','none', ... + 'facealpha',faceAlpha) + + + %Make pretty edges around the patch. + H.edge(1)=plot(x,lE,'-','color',edgeColor); + H.edge(2)=plot(x,uE,'-','color',edgeColor); + + + + uistack(H.mainLine,'top') % Bring the main line to the top + + diff --git a/downloaded/smooth2a.m b/downloaded/smooth2a.m new file mode 100644 index 0000000..31e053f --- /dev/null +++ b/downloaded/smooth2a.m @@ -0,0 +1,88 @@ +function matrixOut = smooth2a(matrixIn,Nr,Nc) +% Smooths 2D array data. Ignores NaN's. +% +%function matrixOut = smooth2a(matrixIn,Nr,Nc) +% +% This function smooths the data in matrixIn using a mean filter over a +% rectangle of size (2*Nr+1)-by-(2*Nc+1). Basically, you end up replacing +% element "i" by the mean of the rectange centered on "i". Any NaN +% elements are ignored in the averaging. If element "i" is a NaN, then it +% will be preserved as NaN in the output. At the edges of the matrix, +% where you cannot build a full rectangle, as much of the rectangle that +% fits on your matrix is used (similar to the default on Matlab's builtin +% function "smooth"). +% +% "matrixIn": original matrix +% "Nr": number of points used to smooth rows +% "Nc": number of points to smooth columns. If not specified, Nc = Nr. +% +% "matrixOut": smoothed version of original matrix +% +% +% Written by Greg Reeves, March 2009. +% Division of Biology +% Caltech +% +% Inspired by "smooth2", written by Kelly Hilands, October 2004 +% Applied Research Laboratory +% Penn State University +% +% Developed from code written by Olof Liungman, 1997 +% Dept. of Oceanography, Earth Sciences Centre +% G�teborg University, Sweden +% E-mail: olof.liungman@oce.gu.se + +% +% Initial error statements and definitions +% +if nargin < 2, error('Not enough input arguments!'), end + +N(1) = Nr; +if nargin < 3, N(2) = N(1); else N(2) = Nc; end + +if length(N(1)) ~= 1, error('Nr must be a scalar!'), end +if length(N(2)) ~= 1, error('Nc must be a scalar!'), end + +% +% Building matrices that will compute running sums. The left-matrix, eL, +% smooths along the rows. The right-matrix, eR, smooths along the +% columns. You end up replacing element "i" by the mean of a (2*Nr+1)-by- +% (2*Nc+1) rectangle centered on element "i". +% +[row,col] = size(matrixIn); +eL = spdiags(ones(row,2*N(1)+1),(-N(1):N(1)),row,row); +eR = spdiags(ones(col,2*N(2)+1),(-N(2):N(2)),col,col); + +% +% Setting all "NaN" elements of "matrixIn" to zero so that these will not +% affect the summation. (If this isn't done, any sum that includes a NaN +% will also become NaN.) +% +A = isnan(matrixIn); +matrixIn(A) = 0; + +% +% For each element, we have to count how many non-NaN elements went into +% the sums. This is so we can divide by that number to get a mean. We use +% the same matrices to do this (ie, "eL" and "eR"). +% +nrmlize = eL*(~A)*eR; +nrmlize(A) = NaN; + +% +% Actually taking the mean. +% +matrixOut = eL*matrixIn*eR; +matrixOut = matrixOut./nrmlize; + + + + + + + + + + + + diff --git a/downloaded/text2im.m b/downloaded/text2im.m new file mode 100644 index 0000000..0a775a7 --- /dev/null +++ b/downloaded/text2im.m @@ -0,0 +1,5393 @@ +function imtext=text2im(text) + +% text2im - generates an image, containing the input text + +text=text+0; % converting string into Ascii-number array + +laenge=length(text); +imtext=zeros(20,18*laenge); % Preparing the resulting image + +for i=1:laenge + + code=text(i); % Ascii code of i.th letter + + if code==0 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % I Complete + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % I List of all + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % \ I / 256 ASCII + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % \I/ Letters + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % V + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; % . + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==1 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==2 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==3 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==4 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==5 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==6 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==7 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==8 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==9 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==10 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==11 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==12 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==13 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==14 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==15 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==16 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==17 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==18 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==19 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==20 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==21 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==22 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==23 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==24 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==25 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==26 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==27 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==28 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==29 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==30 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==31 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==32 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==33 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==34 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==35 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==36 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==37 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==38 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==39 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==40 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==41 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==42 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==43 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==44 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1]; + elseif code==45 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==46 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==47 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==48 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==49 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==50 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==51 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==52 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==53 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==54 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==55 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==56 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==57 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==58 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==59 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1]; + elseif code==60 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==61 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==62 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==63 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==64 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,1,1; + 0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==65 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==66 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==67 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==68 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==69 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==70 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==71 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==72 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==73 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==74 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==75 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==76 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==77 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==78 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==79 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==80 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==81 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1]; + elseif code==82 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==83 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==84 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==85 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==86 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==87 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==88 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==89 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==90 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==91 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==92 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==93 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==94 + TxtIm=[1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==95 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1]; + elseif code==96 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==97 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==98 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==99 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==100 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==101 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==102 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==103 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1]; + elseif code==104 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==105 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==106 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]; + elseif code==107 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==108 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==109 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==110 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==111 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==112 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==113 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1]; + elseif code==114 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==115 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==116 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==117 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==118 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==119 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==120 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==121 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==122 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==123 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1]; + elseif code==124 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==125 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]; + elseif code==126 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==127 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==128 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1]; + elseif code==129 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==130 + TxtIm=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==131 + TxtIm=[1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==132 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==133 + TxtIm=[1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==134 + TxtIm=[1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==135 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1]; + elseif code==136 + TxtIm=[1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==137 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==138 + TxtIm=[1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==139 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==140 + TxtIm=[1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==141 + TxtIm=[1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==142 + TxtIm=[0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==143 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==144 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==145 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==146 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==147 + TxtIm=[1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==148 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==149 + TxtIm=[1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==150 + TxtIm=[1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==151 + TxtIm=[1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==152 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==153 + TxtIm=[1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==154 + TxtIm=[1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==155 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1]; + elseif code==156 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==157 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==158 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==159 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==160 + TxtIm=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==161 + TxtIm=[1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==162 + TxtIm=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==163 + TxtIm=[1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==164 + TxtIm=[1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==165 + TxtIm=[1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==166 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==167 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==168 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==169 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==170 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==171 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==172 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==173 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==174 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==175 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==248 + TxtIm=[1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1; + 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1]; + elseif code==177 + TxtIm=[1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1; + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1]; + elseif code==178 + TxtIm=[0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1]; + elseif code==179 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==180 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==181 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==182 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==183 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==184 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==185 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==186 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==187 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==188 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==189 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==190 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==191 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==192 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==193 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==194 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==195 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==196 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==197 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==198 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==199 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==200 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==201 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==202 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==203 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==204 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==205 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==206 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==207 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==208 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==209 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==210 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==211 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==212 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==213 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==214 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==215 + TxtIm=[1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1]; + elseif code==216 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==217 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==218 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==219 + TxtIm=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + elseif code==220 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + elseif code==221 + TxtIm=[0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]; + elseif code==222 + TxtIm=[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0]; + elseif code==223 + TxtIm=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==224 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==225 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==226 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==227 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==228 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==229 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==230 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==231 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==232 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==233 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==234 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==235 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==236 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==237 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==238 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==239 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==240 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==241 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==242 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==243 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==244 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1]; + elseif code==245 + TxtIm=[1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==246 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==247 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==176 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==249 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==250 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==251 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 0,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==252 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==253 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==254 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; + elseif code==255 + TxtIm=[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1; + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];; + end + + imtext(1:20,((i-1)*18+1):i*18)=TxtIm; +end \ No newline at end of file diff --git a/fn_find_frames_and_files_to_read.m b/fn_find_frames_and_files_to_read.m new file mode 100644 index 0000000..b583e6b --- /dev/null +++ b/fn_find_frames_and_files_to_read.m @@ -0,0 +1,22 @@ +function [frames_to_read, file_idx ] = fn_find_frames_and_files_to_read( frame_start_session,number_frames, num_frames_avg ) + +temp_file_idx=ceil(frame_start_session/number_frames); +if mod(frame_start_session,number_frames)==0 + temp_file_idx=temp_file_idx-1; + frame_start=number_frames; %in that file +else +frame_start=mod(frame_start_session,number_frames); %in that file +end +frame_end=mod(frame_start+(num_frames_avg-1),number_frames); +frames_to_read=frame_start:frame_end; +if ~isempty(frames_to_read) + file_idx(1:num_frames_avg)=temp_file_idx; + +else + nnn=numel(frame_start:1:number_frames); + file_idx(1:nnn)=temp_file_idx; + file_idx(nnn+1:num_frames_avg)=temp_file_idx + 1; + frames_to_read(1:nnn)=frame_start:1:number_frames; + frames_to_read(nnn+1:num_frames_avg)=1:1:(frame_end); +end + diff --git a/fn_generic_tuning/My_Von_Mises_Fit.m b/fn_generic_tuning/My_Von_Mises_Fit.m new file mode 100644 index 0000000..435c706 --- /dev/null +++ b/fn_generic_tuning/My_Von_Mises_Fit.m @@ -0,0 +1,25 @@ +function SSE=My_Von_Mises_Fit(params,Input,Actual_Output) +% see also circ_vmpdf; - for probability density function + +peak_FR=params(1); +mu=params(2); +k=params(3); +% baseline=params(4); + +% Fitted_Curve=abs(peak_FR)*exp(k.*cos(Input-mu) -1); +% Fitted_Curve=abs(peak_FR)*exp(k.*cos(Input-mu)) + abs(baseline); +Fitted_Curve=abs(peak_FR)*exp(k.*cos(Input-mu)) ; + + +% The fit doesn't constrain k to be positive, so in principle this fit +% can return a negative kappa. In this case we want to use its absolute +% value and correct the resulting fit by shifting the preferred direction "mu" by pi. +% The script below should be added to the parent function that calls to My_Von_Mises_Fit_no_baseline + +% if k<0 +% k=abs(k); +% mu=mod(mu+pi,2*pi); +% end + +Error_Vector=Fitted_Curve - Actual_Output; +SSE=sum(Error_Vector.^2); \ No newline at end of file diff --git a/fn_generic_tuning/My_Von_Mises_Fit_no_baseline.m b/fn_generic_tuning/My_Von_Mises_Fit_no_baseline.m new file mode 100644 index 0000000..643b05f --- /dev/null +++ b/fn_generic_tuning/My_Von_Mises_Fit_no_baseline.m @@ -0,0 +1,14 @@ +function SSE=My_Von_Mises_Fit_no_baseline(params,Input,Actual_Output) +% see also circ_vmpdf; - for probability density function + +peak_FR=params(1); +mu=params(2); +k=params(3); + +Fitted_Curve=abs(peak_FR)*exp((k).*cos(Input-mu) -1); +% Fitted_Curve=abs(peak_FR)*exp(abs(k).*cos(Input-mu) -1); + +% Fitted_Curve=abs(peak_FR)*(exp(k.*cos(Input-mu))./(2*pi*besseli(0,k)))+abs(baseline); + +Error_Vector=Fitted_Curve - Actual_Output; +SSE=sum(Error_Vector.^2); \ No newline at end of file diff --git a/fn_generic_tuning/fn_compute_deviation_error.m b/fn_generic_tuning/fn_compute_deviation_error.m new file mode 100644 index 0000000..0780564 --- /dev/null +++ b/fn_generic_tuning/fn_compute_deviation_error.m @@ -0,0 +1,60 @@ +function est_err = fn_compute_deviation_error (observed, predicted) + +%% Normalization +% ========================================================================= + +% A) Both curves are normalized to percentage from observed peak +% -------------------------------------------------------------------------- +% observed_normalized = 100* observed / nanmax (observed); +% predicted_normalized = 100* predicted / nanmax (observed); +% observed = observed_normalized; +% predicted = predicted_normalized; + +% B) Both curves are normalized to percentage from each own peak +% -------------------------------------------------------------------------- +observed_normalized = 100* observed / nanmax (observed); +predicted_normalized = 100* predicted / nanmax (predicted); +observed = observed_normalized; +predicted = predicted_normalized; + + + +% 1) Root-mean-square +% ========================================================================= + +% A) WORKS WELL Root-mean-square deviation +% est_err = sqrt(nanmean((observed-predicted).^2)); + +% B) WORKS WELL Normalized root-mean-square deviation +% est_err = sqrt(nanmean((observed-predicted).^2))/(max(observed)-min(observed)); + +% % C) DOESN'T WORK WELL The coefficient of variation of the RMSD, CV(RMSD), or more commonly CV(RMSE) +% est_err = sqrt(nanmean((observed-predicted).^2))/nanmean(predicted); + + +% 2) Mean-square - all works well +% ========================================================================= + +% A) Mean-square deviation +% est_err = nanmean((observed-predicted).^2); + +% B) Normalized mean-square deviation +est_err = nanmean((observed-predicted).^2)/(max(observed)-min(observed)); + +% % C) The coefficient of variation of the mean-square deviation, +% est_err = nanmean((observed-predicted).^2)/nanmean(predicted); + + + + +% 3) Mean absolute error +% ========================================================================= +% est_err = nanmean(abs(observed-predicted)); + + + +% figure; +% plot(observed,'-b'); +% hold on; +% plot(predicted,'-r'); +% title(num2str(est_err)) \ No newline at end of file diff --git a/fn_generic_tuning/fn_compute_generic_1D_tuning.m b/fn_generic_tuning/fn_compute_generic_1D_tuning.m new file mode 100644 index 0000000..e5a5a2c --- /dev/null +++ b/fn_generic_tuning/fn_compute_generic_1D_tuning.m @@ -0,0 +1,54 @@ +function [X_timespent_binned, X_at_spikes_binned, X_firing_rate, X_firing_rate_smoothed, prefered_X,Rayleigh_length] ... + = fn_compute_generic_1D_tuning ... + (X_video, X_spikes, X_bins_vector_of_centers, time_spent_minimum_for_1D_bins, frames_per_second, smoothing_window_1D,perform_circular_smoothing,compute_Rayleigh_length) + + +% Computing a 1D-tuning curve +%-------------------------------------------------------------------------- +X_timespent_binned=hist(X_video, X_bins_vector_of_centers)/frames_per_second; +X_at_spikes_binned=hist(X_spikes, X_bins_vector_of_centers); + +X_firing_rate = (X_at_spikes_binned./X_timespent_binned); +% puts NaN in low occupancy bins +X_firing_rate (X_timespent_binned<(time_spent_minimum_for_1D_bins))=NaN; +X_timespent_binned=hist(X_video, X_bins_vector_of_centers)/frames_per_second; +X_at_spikes_binned=hist(X_spikes, X_bins_vector_of_centers); + +X_firing_rate = (X_at_spikes_binned./X_timespent_binned); +% puts NaN in low occupancy bins +X_firing_rate (X_timespent_binned<(time_spent_minimum_for_1D_bins))=NaN; + + +% Smoothing +%-------------------------------------------------------------------------- +if perform_circular_smoothing == 1 %perform circular smoothing (assumin X is a cyclical variable) + X_firing_rate_smoothed = smooth ([X_firing_rate,X_firing_rate,X_firing_rate],smoothing_window_1D); + X_firing_rate_smoothed = X_firing_rate_smoothed (length(X_bins_vector_of_centers)+1: 2*length(X_bins_vector_of_centers)); +else %perform regular smoothing + X_firing_rate_smoothed = smooth (X_firing_rate,smoothing_window_1D); +end +%puts NaN in low occupancy bins that were filled during smoothing +X_firing_rate_smoothed = X_firing_rate_smoothed'+(X_firing_rate.*0); + + +% Prefered X +%-------------------------------------------------------------------------- +[temp prefered_X_idx]=nanmax(X_firing_rate_smoothed); +prefered_X=X_bins_vector_of_centers(prefered_X_idx); + + +% Rayleigh Vector length +%-------------------------------------------------------------------------- +if compute_Rayleigh_length==1 +X_firing_rate(isnan(X_firing_rate))=0; %replaces NaN with 0 +%circular smoothing +X_firing_rate_nan_replaced_smoothed = smooth([X_firing_rate X_firing_rate X_firing_rate],smoothing_window_1D); +X_firing_rate_nan_replaced_smoothed = X_firing_rate_nan_replaced_smoothed(1+length(X_bins_vector_of_centers):(2*(length(X_bins_vector_of_centers)))); +X_firing_rate_nan_replaced_smoothed=X_firing_rate_nan_replaced_smoothed+eps; +Rayleigh_length=((pi/length(X_bins_vector_of_centers))/sin(pi/length(X_bins_vector_of_centers))... + *abs(sum(X_firing_rate_nan_replaced_smoothed'.*exp(1i*(pi/180)*... + [360/length(X_bins_vector_of_centers):360/length(X_bins_vector_of_centers):360]))))... + ./sum(X_firing_rate_nan_replaced_smoothed'); +else + Rayleigh_length=[]; +end diff --git a/fn_generic_tuning/fn_compute_generic_1D_tuning2.m b/fn_generic_tuning/fn_compute_generic_1D_tuning2.m new file mode 100644 index 0000000..3841d0b --- /dev/null +++ b/fn_generic_tuning/fn_compute_generic_1D_tuning2.m @@ -0,0 +1,47 @@ +function [ X_firing_rate, X_firing_rate_smoothed, prefered_X,Rayleigh_length] ... + = fn_compute_generic_1D_tuning2 ... + (X_timespent_binned, X_spikes_binned, X_bins_vector_of_centers, time_spent_minimum_for_1D_bins, smoothing_window_1D,perform_circular_smoothing,compute_Rayleigh_length) + + +% Computing a 1D-tuning curve +%-------------------------------------------------------------------------- +X_firing_rate = (X_spikes_binned./X_timespent_binned); +% puts NaN in low occupancy bins +X_firing_rate (X_timespent_binned<(time_spent_minimum_for_1D_bins))=NaN; + + +% Smoothing +%-------------------------------------------------------------------------- +if perform_circular_smoothing == 1 %perform circular smoothing (assumin X is a cyclical variable) + X_firing_rate_smoothed = smooth ([X_firing_rate,X_firing_rate,X_firing_rate],smoothing_window_1D); + X_firing_rate_smoothed = X_firing_rate_smoothed (length(X_bins_vector_of_centers)+1: 2*length(X_bins_vector_of_centers)); +else %perform regular smoothing + X_firing_rate_smoothed = smooth (X_firing_rate,smoothing_window_1D); +end +%puts NaN in low occupancy bins that were filled during smoothing +X_firing_rate_smoothed = X_firing_rate_smoothed'+(X_firing_rate.*0); + + +% Prefered X +%-------------------------------------------------------------------------- +[temp prefered_X_idx]=nanmax(X_firing_rate_smoothed); +prefered_X=X_bins_vector_of_centers(prefered_X_idx); + + +% Rayleigh Vector length +%-------------------------------------------------------------------------- +if compute_Rayleigh_length==1 +X_firing_rate(isnan(X_firing_rate))=0; %replaces NaN with 0 +%circular smoothing +X_firing_rate_nan_replaced_smoothed = smooth([X_firing_rate X_firing_rate X_firing_rate],smoothing_window_1D); +X_firing_rate_nan_replaced_smoothed = X_firing_rate_nan_replaced_smoothed(1+length(X_bins_vector_of_centers):(2*(length(X_bins_vector_of_centers)))); +X_firing_rate_nan_replaced_smoothed=X_firing_rate_nan_replaced_smoothed+eps; +Rayleigh_length=((pi/length(X_bins_vector_of_centers))/sin(pi/length(X_bins_vector_of_centers))... + *abs(sum(X_firing_rate_nan_replaced_smoothed'.*exp(1i*(pi/180)*... + [360/length(X_bins_vector_of_centers):360/length(X_bins_vector_of_centers):360]))))... + ./sum(X_firing_rate_nan_replaced_smoothed'); +else + Rayleigh_length=[]; +end + + diff --git a/fn_generic_tuning/fn_compute_generic_2D_field.m b/fn_generic_tuning/fn_compute_generic_2D_field.m new file mode 100644 index 0000000..b064481 --- /dev/null +++ b/fn_generic_tuning/fn_compute_generic_2D_field.m @@ -0,0 +1,92 @@ +function [field_density_XY, field_density_XY_with_NaN, field_density_smoothed_XY_with_NaN, information_per_spike_XY, information_per_spike_XY_smoothed, count_XY_video, count_XY_video_with_NaN, count_XY_spikes, video_bins_idx_mat, spikes_bins_idx_mat] ... + = fn_compute_generic_2D_field ... + (X_position_bins_vector, Y_position_bins_vector, X_video, Y_video, X_spikes, Y_spikes, time_spent_minimum_for_2D_bins, frames_per_second, sigma, hsize, legalize_by_neighbor_bins_flag) + + +%% Computing a 2D-field for any 2D variables(X,Y), for example Place-field X-Y +%========================================================================== +if ~isempty(X_video) + [count_XY_video temp temp video_bins_idx_mat] = histcn([Y_video,X_video], Y_position_bins_vector, X_position_bins_vector); +else + count_XY_video=zeros(length(Y_position_bins_vector)-1,length(X_position_bins_vector)-1); + video_bins_idx_mat=[]; +end; + +if ~isempty(X_spikes) + [count_XY_spikes temp temp spikes_bins_idx_mat] = histcn([Y_spikes,X_spikes], Y_position_bins_vector, X_position_bins_vector); +else + count_XY_spikes=zeros(length(Y_position_bins_vector)-1,length(X_position_bins_vector)-1); + spikes_bins_idx_mat=[]; +end; + +count_XY_video=count_XY_video/frames_per_second; + +%adds NaNs to any unvisited bin +count_XY_video_with_NaN=count_XY_video; +count_XY_video_with_NaN ( find(count_XY_video_with_NaN 0 ), % If the animal visited any of this bin's 8 neighbors (3x3 region) + idx_timespent_density(ii_Y_bin,ii_X_bin) = 1; % Put 1 in the central bin + else % If the animal did NOT visit any of this bin's 8 neighbors (3x3 region) + idx_timespent_density(ii_Y_bin,ii_X_bin) = 0; % Put 0 in the central bin (later we will divide by this 0 and will get NaN for the firing-rate map) + end + end + end + idx_timespent_density=idx_timespent_density(2:end-1,2:end-1); + warning on all + + % XY Field = Spike Density smoothed / Time-Spent Density smoothed with legalized bins: + warning off MATLAB:divideByZero ; + count_XY_video_smoothed_with_NaN=(count_XY_video_smoothed .* idx_timespent_density)./idx_timespent_density; + field_density_smoothed_XY_with_NaN = count_XY_spikes_smoothed ./ count_XY_video_smoothed_with_NaN ; + warning on MATLAB:divideByZero ; + +else %if we don't want to legalize bins by its neighbors occupancy + count_XY_video_smoothed_with_NaN=count_XY_video_smoothed +count_XY_video_with_NaN.*0; %adds NaNs to unvisited locations + field_density_smoothed_XY_with_NaN = (count_XY_spikes_smoothed ./ count_XY_video_smoothed_with_NaN); +end; + +%% Spatial Information +%========================================================================== +% On unsmoothed field: +[information_per_spike_XY] = fn_compute_spatial_info (count_XY_video_with_NaN, field_density_XY); + +% On smoothed field: +[information_per_spike_XY_smoothed] = fn_compute_spatial_info (count_XY_video_smoothed_with_NaN, field_density_smoothed_XY_with_NaN); diff --git a/fn_generic_tuning/fn_compute_generic_2D_field2.m b/fn_generic_tuning/fn_compute_generic_2D_field2.m new file mode 100644 index 0000000..0a3ffb8 --- /dev/null +++ b/fn_generic_tuning/fn_compute_generic_2D_field2.m @@ -0,0 +1,74 @@ +function [field_density_XY, field_density_XY_with_NaN, field_density_smoothed_XY_with_NaN, information_per_spike_XY, information_per_spike_XY_smoothed, count_XY_video, count_XY_video_with_NaN, count_XY_spikes] ... + = fn_compute_generic_2D_field2 ... + (X_position_bins_vector, Y_position_bins_vector, count_XY_video, count_XY_spikes, time_spent_minimum_for_2D_bins, sigma, hsize, legalize_by_neighbor_bins_flag) + +%% Computing a 2D-field for any 2D variables(X,Y), for example Place-field X-Y +%adds NaNs to any unvisited bin +count_XY_video_with_NaN=count_XY_video; +count_XY_video_with_NaN ( find(count_XY_video_with_NaN 0 ), % If the animal visited any of this bin's 8 neighbors (3x3 region) + idx_timespent_density(ii_Y_bin,ii_X_bin) = 1; % Put 1 in the central bin + else % If the animal did NOT visit any of this bin's 8 neighbors (3x3 region) + idx_timespent_density(ii_Y_bin,ii_X_bin) = 0; % Put 0 in the central bin (later we will divide by this 0 and will get NaN for the firing-rate map) + end + end + end + idx_timespent_density=idx_timespent_density(2:end-1,2:end-1); + warning on all + + % XY Field = Spike Density smoothed / Time-Spent Density smoothed with legalized bins: + warning off MATLAB:divideByZero ; + count_XY_video_smoothed_with_NaN=(count_XY_video_smoothed .* idx_timespent_density)./idx_timespent_density; + field_density_smoothed_XY_with_NaN = count_XY_spikes_smoothed ./ count_XY_video_smoothed_with_NaN ; + warning on MATLAB:divideByZero ; + +else %if we don't want to legalize bins by its neighbors occupancy + count_XY_video_smoothed_with_NaN=count_XY_video_smoothed +count_XY_video_with_NaN.*0; %adds NaNs to unvisited locations + field_density_smoothed_XY_with_NaN = (count_XY_spikes_smoothed ./ count_XY_video_smoothed_with_NaN); +end; + +%% Spatial Information +%========================================================================== +% On unsmoothed field: +[information_per_spike_XY] = fn_compute_spatial_info (count_XY_video_with_NaN, field_density_XY); + +% On smoothed field: +[information_per_spike_XY_smoothed] = fn_compute_spatial_info (count_XY_video_smoothed_with_NaN, field_density_smoothed_XY_with_NaN); diff --git a/fn_generic_tuning/fn_compute_spatial_info.m b/fn_generic_tuning/fn_compute_spatial_info.m new file mode 100644 index 0000000..fb2004e --- /dev/null +++ b/fn_generic_tuning/fn_compute_spatial_info.m @@ -0,0 +1,20 @@ + +function [information_per_spike] = fn_compute_spatial_info (timespent_binned,firing_rate_binned) + + +% INFORMATION PER SPIKE (typically computed for the SMOOTHED field): +%====================================================================== +% +% Information_per_spike = sum( p_i * ( r_i / r ) * log2( r_i / r ) ) +% Where: +% r_i = firing rate in bin i ; +% p_i = occupancy probability of bin i = time-spent by bat in bin i / total time spent in all bins ; +% r = mean( r_i ) = overall mean firing rate (mean over all the pixels) +% See: Skaggs WE, McNaughton BL, Wilson MA, Barnes CA, Hippocampus 6(2), 149-172 (1996). + +idx_notNaN= ~isnan(timespent_binned); +r_i= firing_rate_binned( idx_notNaN ); +p_i = timespent_binned( idx_notNaN ) ./ sum( timespent_binned( idx_notNaN ) ) ; +r_i = r_i(:) ; p_i = p_i(:) ; % Turn r_i and p_i into Column vectors +r_mean = sum( r_i .* p_i ); +information_per_spike = sum( p_i .* ( r_i / r_mean ) .* log2( ( r_i + eps ) / r_mean ) ) ; % I added a tiny number to avoid log(0) diff --git a/fn_generic_tuning/fn_compute_von_mises.m b/fn_generic_tuning/fn_compute_von_mises.m new file mode 100644 index 0000000..7692b2f --- /dev/null +++ b/fn_generic_tuning/fn_compute_von_mises.m @@ -0,0 +1,54 @@ +function [k, mu, X_firing_rate_vMises_fit, r2_von_mises_fit] ... + = fn_compute_von_mises (X_firing_rate,X_bins_vector_of_centers) + +if sum(~isnan(X_firing_rate))<1 + k=NaN; + mu=NaN; + X_firing_rate_vMises_fit=NaN; + r2_von_mises_fit=NaN; + return; +end; + +%fits a Von Mises (circular normal distribution) +x = deg2rad(X_bins_vector_of_centers); +if X_bins_vector_of_centers(1)<0 + x = deg2rad(X_bins_vector_of_centers)+pi; +end + +y = X_firing_rate; +x(isnan(X_firing_rate))=[]; +y(isnan(X_firing_rate))=[]; + +y=double(y); + +Starting=[max(y) x(find(y==max(y), 1, 'first')), 0, 3.5]; +% Starting=[max(y) x(find(y==max(y), 1, 'first')), 3.5, min(y)]; +options=optimset('Display','iter', 'TolX', 1e-6, 'TolFun', 1e-6, 'MaxIter', 1000, 'MaxFunEvals', 1200,'Display','off'); +Est=fminsearch(@My_Von_Mises_Fit,Starting,options,x,y); %scale mean deviation basal_firing_rate + +vector_1_deg=deg2rad(0:1:359); +peak_FR_fit=Est(1); +mu=Est(2); %preferred angle +mu=mod(mu,2*pi); +k=Est(3); %tuning width +% baseline=abs(Est(4)); %baseline + + +% The fit doesn't constrain k to be positive, so in principle this fit +% can return a negative kappa. In this case we want to use its absolute +% value and correct the resulting fit by shifting the preferred direction "mu" by pi. + +if k<0 + k=abs(k); + mu=mod(mu+pi,2*pi); +end + +% X_firing_rate_vMises_fit=abs(peak_FR_fit)* exp(k.*cos(vector_1_deg-mu)) + baseline; +X_firing_rate_vMises_fit=abs(peak_FR_fit)* exp(k.*cos(vector_1_deg-mu)); + + +%% Goodness of fit +[temp fit_x_ix]=intersect(round(rad2deg(vector_1_deg)),round(X_bins_vector_of_centers)); +[r2_von_mises_fit rmse]=rsquare(X_firing_rate,X_firing_rate_vMises_fit(fit_x_ix)); + +mu=rad2deg(mu); \ No newline at end of file diff --git a/fn_generic_tuning/fn_plot_2D_field.m b/fn_generic_tuning/fn_plot_2D_field.m new file mode 100644 index 0000000..ac76c1c --- /dev/null +++ b/fn_generic_tuning/fn_plot_2D_field.m @@ -0,0 +1,17 @@ +function [xlimits, ylimits] = plot2D_field (field_density_mat_X_Y, X_bins_vector, X_bins_vector_of_centers,Y_bins_vector, Y_bins_vector_of_centers) + +xlimits=[X_bins_vector(1) X_bins_vector(end)]; +ylimits=[Y_bins_vector(1) Y_bins_vector(end)]; + +hhh=imagesc(X_bins_vector_of_centers, Y_bins_vector_of_centers,field_density_mat_X_Y); +colormap_map=jet; +colormap_map(64,:) = [1 1 1] ; % Set the highest-value pixel to White = [1 1 1] : I will use White as the Color of NaN pixels +cdata_mat = field_density_mat_X_Y / max(field_density_mat_X_Y(:)) * ... + ( size(colormap_map,1) - 1 ) ; % Scale the colors in 'cdata' to ( 1 : length(colormap) - 1 ), so that the highest value will be reserved to NaN's +idx_isNaN_Field_X_Y = find( isnan( field_density_mat_X_Y ) ); % Find the indexes of NaN bins +cdata_mat( idx_isNaN_Field_X_Y ) = size(colormap_map,1) ; % Replace NaN values with the highest values (they will be colored white) +colormap( colormap_map ); +caxis([0 65]); % Scale the lowest value (deep blue) to 0 +set(hhh, 'cdatamapping', 'direct', 'cdata', cdata_mat ); +set(gca,'xlim',xlimits,'ylim',ylimits, 'FontSize', 8); +hold on; \ No newline at end of file diff --git a/fn_generic_tuning/rsquare.m b/fn_generic_tuning/rsquare.m new file mode 100644 index 0000000..7a82f29 --- /dev/null +++ b/fn_generic_tuning/rsquare.m @@ -0,0 +1,74 @@ +function [r2 rmse] = rsquare(y,f,varargin) +% Compute coefficient of determination of data fit model and RMSE +% +% [r2 rmse] = rsquare(y,f) +% [r2 rmse] = rsquare(y,f,c) +% +% RSQUARE computes the coefficient of determination (R-square) value from +% actual data Y and model data F. The code uses a general version of +% R-square, based on comparing the variability of the estimation errors +% with the variability of the original values. RSQUARE also outputs the +% root mean squared error (RMSE) for the user's convenience. +% +% Note: RSQUARE ignores comparisons involving NaN values. +% +% INPUTS +% Y : Actual data +% F : Model fit +% +% OPTION +% C : Constant term in model +% R-square may be a questionable measure of fit when no +% constant term is included in the model. +% [DEFAULT] TRUE : Use traditional R-square computation +% FALSE : Uses alternate R-square computation for model +% without constant term [R2 = 1 - NORM(Y-F)/NORM(Y)] +% +% OUTPUT +% R2 : Coefficient of determination +% RMSE : Root mean squared error +% +% EXAMPLE +% x = 0:0.1:10; +% y = 2.*x + 1 + randn(size(x)); +% p = polyfit(x,y,1); +% f = polyval(p,x); +% [r2 rmse] = rsquare(y,f); +% figure; plot(x,y,'b-'); +% hold on; plot(x,f,'r-'); +% title(strcat(['R2 = ' num2str(r2) '; RMSE = ' num2str(rmse)])) +% +% Jered R Wells +% 11/17/11 +% jered [dot] wells [at] duke [dot] edu +% +% v1.2 (02/14/2012) +% +% Thanks to John D'Errico for useful comments and insight which has helped +% to improve this code. His code POLYFITN was consulted in the inclusion of +% the C-option (REF. File ID: #34765). + +if isempty(varargin); c = true; +elseif length(varargin)>1; error 'Too many input arguments'; +elseif ~islogical(varargin{1}); error 'C must be logical (TRUE||FALSE)' +else c = varargin{1}; +end + +% Compare inputs +if ~all(size(y)==size(f)); error 'Y and F must be the same size'; end + +% Check for NaN +tmp = ~or(isnan(y),isnan(f)); +y = y(tmp); +f = f(tmp); + +if c; r2 = max(0,1 - sum((y(:)-f(:)).^2)/sum((y(:)-mean(y(:))).^2)); +else r2 = 1 - sum((y(:)-f(:)).^2)/sum((y(:)).^2); + if r2<0 + % http://web.maths.unsw.edu.au/~adelle/Garvan/Assays/GoodnessOfFit.html + warning('Consider adding a constant term to your model') %#ok + r2 = 0; + end +end + +rmse = sqrt(mean((y(:) - f(:)).^2)); \ No newline at end of file diff --git a/fn_read_frames.m b/fn_read_frames.m new file mode 100644 index 0000000..873a41a --- /dev/null +++ b/fn_read_frames.m @@ -0,0 +1,12 @@ +function [img] = fn_read_frames( file_list,file_idx, frames_to_read,nImage,mImage, dir_data) + +FileTif=file_list(file_idx); +NumberImages=length(frames_to_read); +Tstack=zeros(nImage,mImage,NumberImages,'uint16'); +parfor i =1:1:NumberImages + % I don't know why using the temp variable is faster, but it is + temp = imread([dir_data FileTif{i}], frames_to_read(i)); + Tstack(:,:,i) = temp; +end + +img=mean(Tstack,3); \ No newline at end of file diff --git a/other/KDimread.m b/other/KDimread.m new file mode 100644 index 0000000..d448e54 --- /dev/null +++ b/other/KDimread.m @@ -0,0 +1,21 @@ +function im = KDimread(file,dim,num,strt,skp); + +im = zeros(dim(1),dim(2),round(num)); +hTif = Tiff(file); +idx = strt;jdx = 1; +good = 1; +while good == 1 +% jdx + if jdx == num + good = 0; + end + try + hTif.setDirectory(idx); + im(:,:,jdx) = hTif.read(); + idx = idx + skp; + jdx = jdx + 1; + catch + good = 0; + end +end + diff --git a/other/add_ROIs_Arseny.m b/other/add_ROIs_Arseny.m new file mode 100644 index 0000000..d182fbd --- /dev/null +++ b/other/add_ROIs_Arseny.m @@ -0,0 +1,9 @@ +auto_ROI_fluor(1,dat.IM,0,1,5) +figure +imagesc(dat.IM) +hold on +for i_c=1:1:numel(dat.roi) + x=dat.roi(i_c).centroid(1); + y=dat.roi(i_c).centroid(2); + plot(x,y,'*m') +end \ No newline at end of file diff --git a/other/fn_plot_photostim_map.m b/other/fn_plot_photostim_map.m new file mode 100644 index 0000000..3806828 --- /dev/null +++ b/other/fn_plot_photostim_map.m @@ -0,0 +1,38 @@ +function cmp = fn_plot_photostim_map(map) +% map=map*(-1); +% map(~pixel_idx,~pixel_idx)=0; +% maxv=prctile(map(:),99.999); +% minv=prctile(map(:),0.001); + +maxv=prctile(map(:),99.9); +minv=prctile(map(:),0.0005); + +% maxv=prctile(map(:),99); +% minv=prctile(map(:),0.0005); + +%rescaling +map(map>maxv)=maxv; +map(map 0 + load(name); + vargout{1} = im; + end + end + [fi/length(siFiles) toc] +end + + + diff --git a/other/select_photostim_targets.m b/other/select_photostim_targets.m new file mode 100644 index 0000000..b20f6db --- /dev/null +++ b/other/select_photostim_targets.m @@ -0,0 +1,51 @@ +function [group_targets] = select_photostim_targets() + hold on + +n_target=10; +n_group=2; + + +key.trial_epoch_name = 'all'; +key.session =8; + + +label='R-L selectivity'; +map=fetch1(IMG.FOVMapSelectivity & key, 'map_selectivity_f'); +map=smooth2a(map,1,1); +map=map*(-1); +colorbar_label = 'Selectivity (R-L), Fluorescence'; +[cmp] = fn_plot_map4 (map, label, key, colorbar_label); +colormap(cmp); + +ROI=fetch(IMG.ROI & key,'*'); +for i_roi=1:1:numel(ROI) +% x_pix = double(ROI(i_roi).roi_x_pix); +% y_pix = double(ROI(i_roi).roi_y_pix); +% b = boundary(x_pix', y_pix'); +% plot(x_pix(b),y_pix(b),'-k'); + x_centroid (i_roi) = ROI(i_roi).roi_centroid_x_y(2); + y_centroid (i_roi) = ROI(i_roi).roi_centroid_x_y(1); + +end + +% group_targets = fn_select_photostim_targets (n_target, n_group); +color_g = {[0 0 1], [1 0 0]}; +for i_g = 1:1: n_group + for i_t = 1:1:n_target + [x_targ,y_targ] = ginput(1); + group_targets{i_g}.x(i_t) = x_targ; + group_targets{i_g}.y(i_t) = y_targ; + + dx = x_centroid- x_targ; + dy = y_centroid- y_targ; + + [~ , idx] = min(sqrt(dx.^2 + dy.^2)); + x_pix = double(ROI(idx).roi_x_pix); + y_pix = double(ROI(idx).roi_y_pix); + b = boundary(x_pix', y_pix'); + plot(x_pix(b),y_pix(b),'-', 'Color', color_g{i_g}); + +% plot (x_centroid(idx),y_centroid(idx),'*r') + end + +end diff --git a/photostim_Kayvon/addROI.m b/photostim_Kayvon/addROI.m new file mode 100644 index 0000000..e87cc75 --- /dev/null +++ b/photostim_Kayvon/addROI.m @@ -0,0 +1,45 @@ +function addROI(pos,fluor,pixelList,plane); +global dat +topLeft = dat.rect; +dim = dat.dim; +pixPerUnits = dim./range(topLeft); +POS = pos; +% POS(2) = 512 - POS(2); +if ~exist('plane') + plane = 1; +end +centerXY = (topLeft(1,:) + POS./pixPerUnits); +if ~isfield(dat,'roi'); + dat.roi(1).centroid = pos; + dat.roi(1).centerXY = centerXY; + dat.roi(1).plane = plane; + if exist('pixelList') + dat.roi(1).pixelList = pixelList; + [row col] = ind2sub(dat.dim,pixelList); + dat.roi(1).scalingXY = [range(row) range(col)]./dat.dim.*range(dat.rect); + end + if ~isempty(fluor); + dat.roi(1).intensityR = cellfun(@(x) x',fluor{1},'uniformoutput',0); + dat.roi(1).intensityL = cellfun(@(x) x',fluor{2},'uniformoutput',0); + end +else + if isfield(dat,'deletedCell') + num = dat.deletedCell-1; + dat = rmfield(dat,'deletedCell'); + set(gcf,'Pointer','arrow'); + else + num = length(dat.roi); + end + dat.roi(num + 1).centroid = pos; + dat.roi(num + 1).centerXY = centerXY; + dat.roi(num + 1).plane = plane; + if exist('pixelList') + dat.roi(num + 1).pixelList = pixelList; + [row col] = ind2sub(dat.dim,pixelList); + dat.roi(num + 1).scalingXY = [range(row) range(col)]./dat.dim.*range(dat.rect); + end + if ~isempty(fluor); + dat.roi(num + 1).intensityR = cellfun(@(x) x',fluor{1},'uniformoutput',0); + dat.roi(num + 1).intensityL = cellfun(@(x) x',fluor{2},'uniformoutput',0); + end +end \ No newline at end of file diff --git a/photostim_Kayvon/disk_roi.m b/photostim_Kayvon/disk_roi.m new file mode 100644 index 0000000..d661e0e --- /dev/null +++ b/photostim_Kayvon/disk_roi.m @@ -0,0 +1,177 @@ +function [pixel_list,boundary,boundary_list]=disk_roi(map,center,cell_radius,expand_factor,plot_flag) + +%% DONUT_ROI.m Select donut shaped ROI around a selected point +% +%% Input Arguments +% 'map': NxM reference image, can be intensity average or maximum projection +% 'center': 1x2 vector [row, col] containing the coordinate of the ROI center +% 'cell_radius': rough estimate of the expected radius of the cell (in pixel) +% 'expand_factor': 1x2 vector [frow,fcol], a factor that corrects for unequal +% physical pixel size of the image. +% example: If the physical pixel size in the row dimension is 2x the +% physical pixel size in the col dimension, use [2,1] +% for expand_factor. If the physical pixel size is equal +% in both dimension use [1,1] or [] +% +% 'plot_flag': set plot_flag=1 to generate a panel of detail figures +% +%% Output Arguments +% 'pixel_list': [Nx1] vector containing the index of cytoplasm pixels +% 'nuc_list': [Nx1] vector containing the index of nucleus pixels +% +% +% Created 01/20/2011, by Tsai-Wen Chen, +% Last modified 01/21/2011, by Tsai-Wen Chen +% +full_radius=round(1.3*cell_radius); + +ntheta=90; +nsample=50; +t=(1:ntheta)/ntheta*2*pi; + +if ~exist('expand_factor') || isempty(expand_factor) + expand_factor=[1,1]; +end + +if ~exist('plot_flag') + plot_flag=1; +end + +map_org=map; +ss_org=size(map); + +ss=ss_org.*expand_factor; +map=imresize(map,ss); +map=double(map); + + +x=round(center(2))*expand_factor(2); +y=round(center(1))*expand_factor(1); + + +lprofile=zeros(nsample,ntheta); +lprofile_mod=zeros(nsample,ntheta); + +r_first_min=zeros(1,ntheta); +r_threshold_cross=zeros(1,ntheta); +for i=1:ntheta + f=improfile(map,[x,x+full_radius*cos(t(i))],[y,y+full_radius*sin(t(i))],nsample,'bilinear')'; + lprofile(:,i)=f;%-[zeros(1,nsample/3),(1:(nsample*2/3))/nsample*max(f)/2]; + + r_threshold_cross(i)=find_first_cross(f,0.5); + lprofile_mod(:,i)=-1*abs((1:nsample)-r_threshold_cross(i))+nsample; +end + +path=find_path(lprofile_mod); +rin=round(path); +%% determine pixels + +roimap=zeros(ss); +for xx=-full_radius:full_radius + for yy=-full_radius:full_radius + + theta=angle(xx+yy*sqrt(-1)); + if theta<=0; + theta=theta+2*pi; + end + rr=sqrt(xx^2+yy^2)/full_radius*nsample; + tind=ceil(theta/(2*pi)*ntheta); + rin_int=rin(tind); + + + indx=xx+x; + indy=yy+y; + if (indx>0) && (indy>0) && indx<=(ss(2)) && indy<=(ss(1)) + if rr0) && (indy>0) && indx<=(ss(2)) && indy<=(ss(1)) + if rr=rin_int) && (rrf(1:end-2))&(f(2:end-1)>f(3:end))&(f(2:end-1)>threshold); + ind=find(localmax)+1; + + + rpeak=min(ind); + if isempty(ind) + rpeak=globalind; + end + ind=find(f(1:rpeak)>threshold); + rin=min(ind); + + if isempty(rin) + rin=ceil(rpeak/2); + end + +end + +function path=find_path(lprofile) + pointer=zeros(size(lprofile)); + value=zeros(size(lprofile)); + value(:,1)=lprofile(:,1); + for i=2:size(lprofile,2) + for j=3:(size(lprofile,1)-2) + [M,ind]=max(value((j-1):(j+1),i-1)); + value(j,i)=M+lprofile(j,i); + pointer(j,i)=j+ind-2; + end + end + + %%second traverse to minimize boundary effect + pointer=zeros(size(lprofile)); + value(:,1)=value(:,end); + for i=2:size(lprofile,2) + for j=3:(size(lprofile,1)-2) + [M,ind]=max(value((j-1):(j+1),i-1)); + value(j,i)=M+lprofile(j,i); + pointer(j,i)=j+ind-2; + end + end + + path=zeros(1,size(lprofile,2)); + [M,ind]=max(value(:,end)); + path(end)=ind; + + for j=(size(lprofile,2)):-1:2 + path(j-1)=pointer(path(j),j); + end +end + diff --git a/photostim_Kayvon/fixed_disc_roi.m b/photostim_Kayvon/fixed_disc_roi.m new file mode 100644 index 0000000..5ce4709 --- /dev/null +++ b/photostim_Kayvon/fixed_disc_roi.m @@ -0,0 +1,24 @@ +function pixel_list=fixed_disc_roi(ss,center_pos,cell_radius,expand_ratio) +ss_org=ss; +ss=ss.*expand_ratio; +center_pos=center_pos.*expand_ratio; +full_radius=round(cell_radius*1.2); + +rout=cell_radius; + +roimap=zeros(ss); + +for II=-full_radius:full_radius + for JJ=-full_radius:full_radius + indi=II+center_pos(1); + indj=JJ+center_pos(2); + rr=sqrt(II^2+JJ^2); + if (indi>0) && (indj>0) && indi<=(ss(1)) && indj<=(ss(2)) + if (rr10') & key,'roi_number','ORDER BY roi_number'); +roi_number_good=fetchn(IMG.ROIGood & key,'roi_number','ORDER BY roi_number'); + +% plot all good ROIs from suitep +mean_img = fetch1(IMG.Plane & key,'mean_img_enhanced'); +hold on +imagesc(mean_img); +colormap(gray); +plot(XY(roi_number_good,1)',XY(roi_number_good,2)','og') +set(gca,'YDir','reverse') + +roi_chosen=[]; +if flag_auto_select_roi==1 + % first inlcude roi that showed largest responses to photostimulation from previous days + roi_num_responsive=unique(fetchn(STIM.ROIResponseMost & key & sprintf('most_response_distance_pixels <%.2f', most_response_distance_pixels) & 'most_response_max>0.2' ,'roi_number')); + + % remove responsoves ROIs that were too close + [IDX_remove]=fn_remove_neighbors_2D(XY(roi_num_responsive,:), minimal_distance_pixels); + + roi_chosen=roi_num_responsive; + roi_chosen(IDX_remove)=[]; + + if numel(roi_chosen)>num_roi_automatic + roi_chosen(num_roi_automatic+1:end)=[]; + end + + % add additional rois automatically + for i=1:1:(num_roi_automatic-numel(roi_chosen)) + available_roi_pool = setdiff(roi_number_good,roi_chosen); + for j=1:1:numel(available_roi_pool) + temp_roi = available_roi_pool(j); + dx = XY(roi_chosen,1) - XY(temp_roi,1); + dy = XY(roi_chosen,2) - XY(temp_roi,2); + dist = (sqrt(dx.^2 + dy.^2)); + if sum(find(dist<=minimal_distance_pixels))==0 + roi_chosen=[roi_chosen;temp_roi]; + break + end + end + end + + XY_chosen = XY(roi_chosen,:); + + % plot all ROIs chosen so far + plot(XY(roi_chosen,1)',XY(roi_chosen,2)','or'); +end + +% add additional rois manually (typically to add non-neural targets) +for i_t = 1:1:num_roi_manual + [x_manual,y_manual] = ginput(1); + XY_chosen(end+1,:) = [x_manual,y_manual]; + plot(x_manual,y_manual','*r') + title(sprintf('Selected %d / %d',i_t,num_roi_manual)); +end + +s=fetch(EXP2.Session & key,'*'); +title(sprintf('Session %d epoch %d \n anm %d %s',s.session, key.session_epoch_number,key.subject_id, s.session_date )); + +%% Creating and saving a new dat file with photostimulation targets + +dir_data = fetchn(EXP2.SessionEpochDirectory & key,'local_path_session_registered'); +dir_data = dir_data{1}; +global dat; +rel2=IMG.PhotostimDATfile & key; +% if ~isempty (IMG.PhotostimDATfile & key) +if rel2.count>0 + dat=fetch1(IMG.PhotostimDATfile & key,'dat_file'); +else + dat = (load([dir_data 'dat.mat'])); dat=dat.dat; + close all; +end + +centroid_reference_session = cell2mat({dat.roi.centroid}'); +plot(centroid_reference_session(:,1),centroid_reference_session(:,2),'*k'); + +dat.roi=[]; + +dat.IM=mean_img; +dat.dim = size(mean_img); + +m=size(mean_img,1); +n=size(mean_img,2); +[I,J] = ndgrid(1:m,1:n); +plane=1; + +for i=1:size(XY_chosen,1) + + x=round( XY_chosen(i,1) ); + y=round( XY_chosen(i,2) ); + M = double((I-y).^2+(J-x).^2<=roi_radius^2); % <-- M should be your desired array + pixel_list = find(M); + addROI([x,y],[],pixel_list,plane); +end + + +save([dir_save_file filename_save],'dat'); + +dir_save_figure = [dir_current_fig 'anm' num2str(s.subject_id) '\']; +if isempty(dir(dir_save_figure)) + mkdir (dir_save_figure) +end +figure_name_out = [dir_save_figure 's' num2str(s.session ) '_' s.session_date '_epoch' num2str(key.session_epoch_number)]; +eval(['print ', figure_name_out, ' -dtiff -r200']); + +end + + + + + + diff --git a/populate_pipeline/RUN_IMAGING_PIPELINE.m b/populate_pipeline/RUN_IMAGING_PIPELINE.m new file mode 100644 index 0000000..7842fed --- /dev/null +++ b/populate_pipeline/RUN_IMAGING_PIPELINE.m @@ -0,0 +1,261 @@ +function RUN_IMAGING_PIPELINE() + +% % % EXAMPLE how to delete directly from SQL: +% % %conn = dj.conn; +% % %conn.query('DROP TABLE `arseny_analysis_pop`.`__r_o_i_s_v_d`')' + +% DJconnect; +rig='imaging1'; +user_name ='ars'; + +dir_base_behavior ='G:\Arseny\2p\BPOD_behavior\'; + +% dir_behavioral_data = [dir_base_behavior 'anm447991_AF13\']; +% dir_behavioral_data = [dir_base_behavior 'anm445873_ST68\]' +% dir_behavioral_data = [dir_base_behavior 'anm445980_ST66\']; +% dir_behavioral_data = [dir_base_behavior 'anm447990_AF14\']; +% dir_behavioral_data = [dir_base_behavior 'anm462458_AF17\']; +% dir_behavioral_data = [dir_base_behavior 'anm462455_AF23\']; +% dir_behavioral_data = [dir_base_behavior 'anm463190_AF26\']; +% dir_behavioral_data = [dir_base_behavior 'anm463189_AF27\']; +dir_behavioral_data = [dir_base_behavior 'anm464724_AF28\']; +% dir_behavioral_data = [dir_base_behavior 'anm464725_AF29\']; +% dir_behavioral_data = [dir_base_behavior 'anm463192_AF25\']; +% dir_behavioral_data = [dir_base_behavior 'anm464728_AF32\']; + + +% populate_somatotopy; %populate EXP2.SessionEpochSomatotopy, in case somatopic mapping was done + +behavioral_protocol_name='af_2D'; +% behavioral_protocol_name='waterCue'; + +IMG.Parameters; %configure the path to your data folder here + +flag_multi_session_registration = 0; + + +%% STEP 0 - populate LAB (for each new person/rig/animal) +% populate_LAB_new_Rig_Person_Animal() % + +% Definition tables - make sure they are not empty by running them +% EXP2.ActionEventType; +% EXP2.TrialEventType; +% EXP2.TrainingType; +% EXP2.Task; +% EXP2.TrialNameType; +% EXP2.EarlyLick; +% EXP2.Outcome; +% EXP2.TrialInstruction; +% EXP2.TaskProtocol; +% EXP2.EpochName; +% EXP2.EpochName2; +% EXP2.SessionEpochType +% IMG.Zoom2Microns +%% STEP 1 - could be run independelty of suite2p +populate_Session_without_behavior (user_name, rig); % populate session without behavior +% populate_behavior_WaterCue (dir_behavioral_data, behavioral_protocol_name); +populate_behavior_Lick2D(dir_behavioral_data, behavioral_protocol_name); + +populate_Session_and_behavior (dir_behavioral_data, user_name, rig); % populate session with behavior + +% should run after populate_behavior_Lick2D +populate(EXP2.SessionEpoch); % reads info about FOV and trial duration from SI files. Also populates EXP2.SessionEpochDirectory, IMG.SessionEpochFrame, IMG.FrameTime, IMG.FrameStartFile + +% flag_do_registration=1; +% flag_find_bad_frames_only=0; +% ReplaceAndRegisterFrames(flag_do_registration, flag_find_bad_frames_only); +% + +%% STEP 2 - run suite2p (outside this script) +populate(IMG.FOV); % also populates IMG.Plane, IMG.PlaneCoordinates, IMG.PlaneDirectory, IMG.PlaneSuite2p +populate(IMG.FOVEpoch); +populate(IMG.SessionEpochFramePlane); %deals with missing frames at the end of the session epoch in some planes, due to volumetric imaging + +populate(IMG.FOV); % also populates IMG.Plane, IMG.PlaneCoordinates, IMG.PlaneDirectory, IMG.PlaneSuite2p +populate(IMG.Volumetric); + +populate(IMG.ROI); %also populates IMG.ROIdepth +populate(IMG.ROIGood); +populate(IMG.ROITrace); +% populate(IMG.ROISpikes); + +populate(IMG.ROIdeltaF); % IMG.ROIdeltaFMean IMG.ROIFMean +% populate(ANLI.IncludeROI4); +populate(IMG.ROIdeltaFPeak); +populate(IMG.ROIdeltaFStats); +populate(IMG.ROIBadSessionEpoch); +populate(IMG.ROIBad); + + +populate(IMG.ROITraceNeuropil); +populate(IMG.ROIdeltaFNeuropil); % IMG.ROIdeltaFMeanNeuropil +populate(IMG.ROIdeltaFNeuropilSubtr); +populate(IMG.ROIdeltaFStatsNeuropil); + +% populate(IMG.ROIBadNeuropil); + +%% PHOTOSTIM +% ANALYSIS_PHOTOSTIM; % this script summarizes all the scripts below: + +populate(IMG.PhotostimGroup); % also IMG.PhotostimProtocol +populate(IMG.PhotostimGroupROI); % also populates IMG.PhotostimDATfile; + +populate(STIM.ROIInfluence5); % also populates STIM.ROIInfluenceTrace +populate(STIM.ROIResponseDirect); + +populate(STIMANAL.NeuronOrControl5); +populate(STIMANAL.InfluenceDistance55); + +%%% old +% % % populate(STIM.ROIResponse); % also populates STIM.ROIResponseVector +% % % populate(STIM.ROIResponse2); % control with the stim window (for detection) is shifted forward +% % +% % % populate(STIM.ROIResponseDirect); +% % % +% % % populate(STIM.ROIResponseMost); +% % +% % % populate(STIM.ROIGraph2); +% % % populate(STIM.ROIGraphAll); +% % % populate(ANLI.ROICorr1); +% % % populate(ANLI.ROICorr3); +% % % populate(ANLI.ROICorr5); +% % % populate(ANLI.ROICorr10); + + +%% +populate(POP.DistancePairwiseLateral); %also populates POP.DistancePairwise3D + +%% Lick 2D +% ANALYSIS_LICK2D; % this script summarizes all the scripts below: +%based on dff +%-------------------------------- +populate(LICK2D.ROILick2Dangle); +populate(LICK2D.ROILick2DangleNeuropil); +populate(LICK2D.ROILick2DPSTH); %LICK2D.ROILick2DPSTHStats LICK2D.ROILick2DRewardStats LICK2D.ROILick2DBlockStats +populate(LICK2D.ROILick2Dmap); %also populates LICK2D.ROILick2DSelectivity LICK2D.ROILick2DSelectivityStats +populate(LICK2D.ROILick2DQuadrants); + + +populate(LICK2D.ROILick2DLickRate); +populate(LICK2D.ROILick2DangleEvents); +% populate(LICK2D.ROIRidge); +populate(LICK2D.ROIBodypartCorr); + +% populate(PLOTS.Cells2DTuning); +populate(PLOTS.Maps2Dtheta); +populate(PLOTS.Maps2DPSTH); +populate(PLOTS.Maps2DReward); +populate(PLOTS.Maps2DBlock); + +populate(PLOTS.Maps2DLickRate); +populate(PLOTS.MapsBodypartCorr); + +% populate(PLOTS.Maps2DPSTHpreferred); + + +%based on spikes +%-------------------------------- +populate(LICK2D.ROILick2DangleSpikes); +populate(LICK2D.ROILick2DQuadrantsSpikes); +populate(LICK2D.ROILick2DPSTHSpikes); %LICK2D.ROILick2DPSTHStatsSpikes LICK2D.ROILick2DRewardStatsSpikes LICK2D.ROILick2DBlockStatsSpikes +populate(LICK2D.ROILick2DmapSpikes); %also populates LICK2D.ROILick2DSelectivitySpikes LICK2D.ROILick2DSelectivityStatsSpikes + +populate(PLOTS.Cells2DTuningSpikes); + +populate(PLOTS.Maps2DthetaSpikes); +% populate(PLOTS.Maps2DPSTHSpikes); + +% populate(ANLI.ROILick2DangleShuffle); +% populate(ANLI.ROILick2DmapShuffle); + + +% % populate(ANLI.ROILick2DmapReward); +% populate(ANLI.ROILick2DPSTHReward); +% populate(ANLI.ROILick2DPSTHBlock); + + +%% MAPS Sponts vs Behavior +% populate(PLOTS.MapsSpontVsBeharDeltaMeanDFF); + +% populate(PLOTS.MapsSpontVsBeharDeltaMeanDFF); + + +%% SOMATOSENSORY MAPS +populate(PLOTS.SomatotopyDeltaFiringRate); +populate(PLOTS.SomatotopyDeltaMean); +populate(PLOTS.SomatotopyDeltaMeanNeuropil); +% populate(PLOTS.SomatotopyDeltaMeanFlourescence); + + +%% SVD +populate(POP.ROISVD); %also populates POP.SVDTemporalComponents POP.SVDSingularValues +populate(POP.ROISVDSpikes); %also populates POP.SVDTemporalComponentsSpikes POP.SVDSingularValuesSpikes +populate(POP.ROISVDNeuropil); %also populates POP.SVDTemporalComponentsNeuropil POP.SVDSingularValuesNeuropil +populate(POP.ROISVDNeuropilSubtr); %also populates POP.SVDTemporalComponentsNeuropilSubtract POP.SVDSingularValuesNeuropilSubtract + +populate(POP.ROISVDDistanceScale); +populate(POP.ROISVDDistanceScaleSpikes); +populate(POP.ROISVDDistanceScaleNeuropil); + + +populate(PLOTS.Dimensionality); +populate(PLOTS.DimensionalityNeuropil); + +populate(PLOTS.MapsSVD); + + +%% Clustering and Correlatios +% populate(ANLI.ROIHierarCluster); +% populate(ANLI.ROIHierarClusterSelectivity); +% populate(ANLI.ROIHierarClusterShapeAndSelectivity); + + +% populate(POP.ROIClusterCorr2); %smoothed +% populate(POP.ROISubClusterCorr); +% populate(POP.ROICorrLocal); + +populate(POP.ROIClusterCorr); +populate(POP.ROIClusterCorrNeuropil); +populate(POP.ROIClusterCorrThresholded); +% populate(POP.ROIClusterCorrNeuropilSubtr) + +populate(POP.ROIClusterCorrSVD); + +populate(PLOTS.MapsClusterCorr); +populate(PLOTS.MapsClusterCorrNeuropil); +populate(PLOTS.MapsClusterCorrThresholded); +populate(PLOTS.MapsClusterCorrSVD); + + + +%% Activity movies +populate(PLOTS.MoviesActivity); +populate(PLOTS.MoviesSVD); + + +%% video tracking +populate(TRACKING.TrackingTrial); +populate(TRACKING.TrackingTrialBad); +populate(TRACKING.VideoFiducialsTrial); +populate(TRACKING.VideoFiducialsSessionAvg); +populate(TRACKING.VideoTongueTrial); %also populates TRACKING.VideoLickportTrial TRACKING.VideoGroomingTrial TRACKING.VideoBodypartTrajectTrial TRACKING.VideoLickportPositionTrial +populate(TRACKING.VideoNthLickTrial); +populate(LICK2D.PLOTCameras); +populate(LICK2D.PLOTCameras); + +populate(PLOTS.MapsBodypartCorr); + +%% Ridge regression behavior +populate(RIDGE.Predictors); %RIDGE.PredictorType RIDGE.PredictorTypeUse +populate(RIDGE.ROIRidge); %also populates RIDGE.ROIRidgeVarExplained +populate(RIDGE.ROIRidgeNeuropil); %also populates RIDGE.ROIRidgeVarExplainedNeuropil +populate(PLOTS.MapsRidge); +populate(PLOTS.MapsRidgeNeuropil); +populate(PLOTS.MapsRidgeVarianceExplained) +populate(PLOTS.MapsRidgeVarianceExplainedNeuropil) + + +%% Water cue task +% populate(WC.FPSTHaverage); + + diff --git a/populate_pipeline/RUN_IMAGING_PIPELINE_old.m b/populate_pipeline/RUN_IMAGING_PIPELINE_old.m new file mode 100644 index 0000000..73ae035 --- /dev/null +++ b/populate_pipeline/RUN_IMAGING_PIPELINE_old.m @@ -0,0 +1,183 @@ +function RUN_IMAGING_PIPELINE() +% DJconnect; +rig='imaging1'; +user_name ='ars'; + +dir_base_behavior ='G:\Arseny\2p\BPOD_behavior\'; + +% dir_behavioral_data = [dir_base_behavior 'anm447991_AF13\']; +% dir_behavioral_data = [dir_base_behavior 'anm445873_ST68\]' +% dir_behavioral_data = [dir_base_behavior 'anm445980_ST66\']; +% dir_behavioral_data = [dir_base_behavior 'anm447990_AF14\']; +% dir_behavioral_data = [dir_base_behavior 'anm462458_AF17\']; +% dir_behavioral_data = [dir_base_behavior 'anm462455_AF23\']; +dir_behavioral_data = [dir_base_behavior 'anm463190_AF26\']; +% dir_behavioral_data = [dir_base_behavior 'anm463189_AF27\']; +% dir_behavioral_data = [dir_base_behavior 'anm464724_AF28\']; +% dir_behavioral_data = [dir_base_behavior 'anm464725_AF29\']; +% dir_behavioral_data = [dir_base_behavior 'anm463192_AF25\']; +% dir_behavioral_data = [dir_base_behavior 'anm464728_AF32\']; + + +% populate_somatotopy; %populate EXP2.SessionEpochSomatotopy, in case somatopic mapping was done + +behavioral_protocol_name='af_2D'; +% behavioral_protocol_name='waterCue'; + +IMG.Parameters; %configure the path to your data folder here + +flag_multi_session_registration = 0; + + +%% STEP 0 - populate LAB (for each new person/rig/animal) +% populate_LAB_new_Rig_Person_Animal() % + +% Definition tables - make sure they are not empty by running them +% EXP2.ActionEventType; +% EXP2.TrialEventType; +% EXP2.TrainingType; +% EXP2.Task; +% EXP2.TrialNameType; +% EXP2.EarlyLick; +% EXP2.Outcome; +% EXP2.TrialInstruction; +% EXP2.TaskProtocol; +% EXP2.EpochName; +% EXP2.EpochName2; +% EXP2.SessionEpochType +% IMG.Zoom2Microns +%% STEP 1 - could be run independelty of suite2p +populate_Session_without_behavior (user_name, rig); % populate session without behavior +% populate_behavior_WaterCue (dir_behavioral_data, behavioral_protocol_name); +populate_behavior_Lick2D(dir_behavioral_data, behavioral_protocol_name); +populate_Session_and_behavior (dir_behavioral_data, user_name, rig); % populate session with behavior + +% should run after populate_behavior_Lick2D +populate(EXP2.SessionEpoch); % reads info about FOV and trial duration from SI files. Also populates EXP2.SessionEpochDirectory, IMG.SessionEpochFrame, IMG.FrameTime, IMG.FrameStartFile + +% flag_do_registration=1; +% flag_find_bad_frames_only=0; +% ReplaceAndRegisterFrames(flag_do_registration, flag_find_bad_frames_only); +% + +%% STEP 2 - run suite2p (outside this script) +populate(IMG.FOV); % also populates IMG.Plane, IMG.PlaneCoordinates, IMG.PlaneDirectory, IMG.PlaneSuite2p +populate(IMG.FOVEpoch); +populate(IMG.SessionEpochFramePlane); %deals with missing frames at the end of the session epoch in some planes, due to volumetric imaging + +populate(IMG.ROI); +populate(IMG.ROIGood); +populate(IMG.ROITrace); +populate(IMG.ROISpikes); + +populate(IMG.ROIdeltaF); % IMG.ROIdeltaFMean IMG.ROIdeltaFMean +% populate(ANLI.IncludeROI4); +populate(IMG.ROIdeltaFPeak); + +populate(IMG.ROITraceNeuropil); +populate(IMG.ROIdeltaFNeuropil); % IMG.ROIdeltaFMean IMG.ROIdeltaFMean + +% populate(IMG.ROIdeltaFNeuropilSubtr); + +populate(IMG.PhotostimGroup); % also IMG.PhotostimProtocol +populate(IMG.PhotostimGroupROI); % also populates IMG.PhotostimDATfile; +populate(STIM.ROIResponse); % also populates STIM.ROIResponseVector +% populate(STIM.ROIResponse2); % control with the stim window (for detection) is shifted forward + +populate(STIM.ROIResponseDirect); + +populate(STIM.ROIResponseMost); + +% populate(STIM.ROIGraph2); +% populate(STIM.ROIGraphAll); +% populate(ANLI.ROICorr1); +% populate(ANLI.ROICorr3); +% populate(ANLI.ROICorr5); +% populate(ANLI.ROICorr10); + + + + +%% Lick 2D +%based on dff +%-------------------------------- +populate(LICK2D.ROILick2Dangle); +populate(LICK2D.ROILick2DangleNeuropil); +populate(LICK2D.ROILick2DPSTH); %LICK2D.ROILick2DPSTHStats +populate(LICK2D.ROILick2Dmap); %also populates LICK2D.ROILick2DSelectivity LICK2D.ROILick2DSelectivityStats + +% populate(PLOTS.Cells2DTuning); +% populate(PLOTS.Maps2Dtheta); +% populate(PLOTS.Maps2DPSTH); + +% populate(PLOTS.Maps2DPSTHpreferred); + +% %based on spikes +% %-------------------------------- +% populate(LICK2D.ROILick2DangleSpikes); +% populate(LICK2D.ROILick2DPSTHSpikes); %LICK2D.ROILick2DPSTHStatsSpikes +% populate(LICK2D.ROILick2DmapSpikes); %also populates LICK2D.ROILick2DSelectivitySpikes LICK2D.ROILick2DSelectivityStatsSpikes +% +% populate(PLOTS.Cells2DTuningSpikes); +% populate(PLOTS.Maps2DthetaSpikes); +% populate(PLOTS.Maps2DPSTHSpikes); + +% populate(ANLI.ROILick2DangleShuffle); +% populate(ANLI.ROILick2DmapShuffle); + +% lick2D_analysis; % this script summarizes them all + +% % populate(ANLI.ROILick2DmapReward); +% populate(ANLI.ROILick2DPSTHReward); +% populate(ANLI.ROILick2DPSTHBlock); + + +%% Clustering +% populate(ANLI.ROIHierarCluster); +% populate(ANLI.ROIHierarClusterSelectivity); +% populate(ANLI.ROIHierarClusterShapeAndSelectivity); + + +% populate(POP.ROIClusterCorr2); %smoothed +% populate(POP.ROISubClusterCorr); +% populate(POP.ROICorrLocal); +% populate(POP.ROIClusterCorrThresholded); + +% populate(POP.ROIClusterCorr); +% populate(POP.ROIClusterCorrNeuropil); +% populate(POP.ROIClusterCorrNeuropilSubtr) + + +% populate(WC.FPSTHaverage); +% populate(STIM.ROIResponseDistance) +% populate(STIM.ROIResponseTrace); + +% %% STEP 3 - should run *AFTER* suite2p had finished. Can run in paralel with STEP 4 +% populate_imaging_roi_across_days; %Specify within the script the directory for single/multi session registration +% populate(IMG.FOVmultiSessionsFirstFrame); +% populate(ANLI.FPSTHaverage); +% +% %% STEP 4 - should run *AFTER* suite2p had finished. Can run in paralel with STEP 3 +% populate(IMG.FOVRegisteredMovie); % requires manual updating of dir at this point +% populate(IMG.FOVMapBaselineF); +% populate(IMG.FOVMapActivity); +% populate(IMG.FOVMapSelectivity); + + +%% MAPS +populate(PLOTS.MapsClusterCorr); +populate(PLOTS.MapsClusterCorrNeuropil); + +% populate(PLOTS.MapsClusterCorrThresholded); +% populate(PLOTS.MapsSpontVsBeharDeltaMeanDFF); + +%% SOMATOSENSORY MAPS +% populate(PLOTS.SomatotopyDeltaFiringRate); +% populate(PLOTS.SomatotopyDeltaMeanFiringRate); +% populate(PLOTS.SomatotopyDeltaMeanFlourescence); + +%% MAPS LICK 2D +% populate(PLOTS.Maps2Dtheta); + +% populate(PLOTS.MapsClusterCorrThresholded); +% populate(PLOTS.MapsSpontVsBeharDeltaMeanDFF); diff --git a/populate_pipeline/check_if_there_are_missing_frames_across_planes.m b/populate_pipeline/check_if_there_are_missing_frames_across_planes.m new file mode 100644 index 0000000..c699124 --- /dev/null +++ b/populate_pipeline/check_if_there_are_missing_frames_across_planes.m @@ -0,0 +1,17 @@ +function check_if_there_are_missing_frames_across_planes() + +% key.subject_id = 463189; +% key.session = 5; +% EXP2.Session & key +% IMG.Plane & key +%% +clc +data_dir = 'F:\Arseny\2p\data\anm463190_AF26\20200212_registered\suite2p'; + +num_planes = 6; +frames_per_folder=[]; +for p = 0:1:num_planes + S2P=load([data_dir '\plane' num2str(p) '\Fall.mat'],'ops'); + frames_per_folder(p+1,:) = S2P.ops.frames_per_folder; +end +frames_per_folder diff --git a/populate_pipeline/find_fov_size_at_different_zoom.m b/populate_pipeline/find_fov_size_at_different_zoom.m new file mode 100644 index 0000000..bc6a77d --- /dev/null +++ b/populate_pipeline/find_fov_size_at_different_zoom.m @@ -0,0 +1,3 @@ +load('Z:\users\Arseny\Projects\Learning\imaging2p\code\populate_pipeline\fov_size_at_different_zoom.mat') +zoom=1.6 +xy=[interp1(imageSize(:,1),imageSize(:,2),zoom), interp1(imageSize(:,1),imageSize(:,3), zoom)] \ No newline at end of file diff --git a/populate_pipeline/fn/ReplaceAndRegisterFrames.m b/populate_pipeline/fn/ReplaceAndRegisterFrames.m new file mode 100644 index 0000000..069a9ea --- /dev/null +++ b/populate_pipeline/fn/ReplaceAndRegisterFrames.m @@ -0,0 +1,11 @@ +function ReplaceAndRegisterFrames(flag_do_registration, flag_find_bad_frames_only) + +rel = (EXP2.SessionEpoch*EXP2.SessionEpochDirectory*EXP2.Session - IMG.FOV); % only do this step for sessions that have not been processed by suite2p yet +% rel = (EXP2.SessionEpoch*EXP2.SessionEpochDirectory *EXP2.Session & 'session=2' & 'session_epoch_number=2'); % only do this step for sessions that have not been processed by suite2p yet + +if rel.count>0 + session_info= fetch(rel,'*'); + for i_s=1:1:numel(session_info) + fn_ReplaceAndRegisterFrames(session_info(i_s), flag_do_registration, flag_find_bad_frames_only) + end +end \ No newline at end of file diff --git a/populate_pipeline/fn/dftregistration.m b/populate_pipeline/fn/dftregistration.m new file mode 100644 index 0000000..7b77ff0 --- /dev/null +++ b/populate_pipeline/fn/dftregistration.m @@ -0,0 +1,210 @@ +function [output Greg] = dftregistration(buf1ft,buf2ft,usfac) +% function [output Greg] = dftregistration(buf1ft,buf2ft,usfac); +% Efficient subpixel image registration by crosscorrelation. This code +% gives the same precision as the FFT upsampled cross correlation in a +% small fraction of the computation time and with reduced memory +% requirements. It obtains an initial estimate of the crosscorrelation peak +% by an FFT and then refines the shift estimation by upsampling the DFT +% only in a small neighborhood of that estimate by means of a +% matrix-multiply DFT. With this procedure all the image points are used to +% compute the upsampled crosscorrelation. +% Manuel Guizar - Dec 13, 2007 + +% Portions of this code were taken from code written by Ann M. Kowalczyk +% and James R. Fienup. +% J.R. Fienup and A.M. Kowalczyk, "Phase retrieval for a complex-valued +% object by using a low-resolution image," J. Opt. Soc. Am. A 7, 450-458 +% (1990). + +% Citation for this algorithm: +% Manuel Guizar-Sicairos, Samuel T. Thurman, and James R. Fienup, +% "Efficient subpixel image registration algorithms," Opt. Lett. 33, +% 156-158 (2008). + +% Inputs +% buf1ft Fourier transform of reference image, +% DC in (1,1) [DO NOT FFTSHIFT] +% buf2ft Fourier transform of image to register, +% DC in (1,1) [DO NOT FFTSHIFT] +% usfac Upsampling factor (integer). Images will be registered to +% within 1/usfac of a pixel. For example usfac = 20 means the +% images will be registered within 1/20 of a pixel. (default = 1) + +% Outputs +% output = [error,diffphase,net_row_shift,net_col_shift] +% error Translation invariant normalized RMS error between f and g +% diffphase Global phase difference between the two images (should be +% zero if images are non-negative). +% net_row_shift net_col_shift Pixel shifts between images +% Greg (Optional) Fourier transform of registered version of buf2ft, +% the global phase difference is compensated for. + +% Default usfac to 1 +if exist('usfac')~=1, usfac=1; end + +% Compute error for no pixel shift +if usfac == 0, + CCmax = sum(sum(buf1ft.*conj(buf2ft))); + rfzero = sum(abs(buf1ft(:)).^2); + rgzero = sum(abs(buf2ft(:)).^2); + error = 1.0 - CCmax.*conj(CCmax)/(rgzero*rfzero); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + output=[error,diffphase]; + +% Whole-pixel shift - Compute crosscorrelation by an IFFT and locate the +% peak +elseif usfac == 1, + [m,n]=size(buf1ft); + CC = ifft2(buf1ft.*conj(buf2ft)); + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc=loc1(loc2); + cloc=loc2; + CCmax=CC(rloc,cloc); + rfzero = sum(abs(buf1ft(:)).^2)/(m*n); + rgzero = sum(abs(buf2ft(:)).^2)/(m*n); + error = 1.0 - CCmax.*conj(CCmax)/(rgzero(1,1)*rfzero(1,1)); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + md2 = fix(m/2); + nd2 = fix(n/2); + if rloc > md2 + row_shift = rloc - m - 1; + else + row_shift = rloc - 1; + end + + if cloc > nd2 + col_shift = cloc - n - 1; + else + col_shift = cloc - 1; + end + output=[error,diffphase,row_shift,col_shift]; + +% Partial-pixel shift +else + + % First upsample by a factor of 2 to obtain initial estimate + % Embed Fourier data in a 2x larger array + [m,n]=size(buf1ft); + mlarge=m*2; + nlarge=n*2; + CC=zeros(mlarge,nlarge); + CC(m+1-fix(m/2):m+1+fix((m-1)/2),n+1-fix(n/2):n+1+fix((n-1)/2)) = ... + fftshift(buf1ft).*conj(fftshift(buf2ft)); + + % Compute crosscorrelation and locate the peak + CC = ifft2(ifftshift(CC)); % Calculate cross-correlation + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc=loc1(loc2);cloc=loc2; + CCmax=CC(rloc,cloc); + + % Obtain shift in original pixel grid from the position of the + % crosscorrelation peak + [m,n] = size(CC); md2 = fix(m/2); nd2 = fix(n/2); + if rloc > md2 + row_shift = rloc - m - 1; + else + row_shift = rloc - 1; + end + if cloc > nd2 + col_shift = cloc - n - 1; + else + col_shift = cloc - 1; + end + row_shift=row_shift/2; + col_shift=col_shift/2; + + % If upsampling > 2, then refine estimate with matrix multiply DFT + if usfac > 2, + %%% DFT computation %%% + % Initial shift estimate in upsampled grid + row_shift = round(row_shift*usfac)/usfac; + col_shift = round(col_shift*usfac)/usfac; + dftshift = fix(ceil(usfac*1.5)/2); %% Center of output array at dftshift+1 + % Matrix multiply DFT around the current shift estimate + CC = conj(dftups(buf2ft.*conj(buf1ft),ceil(usfac*1.5),ceil(usfac*1.5),usfac,... + dftshift-row_shift*usfac,dftshift-col_shift*usfac))/(md2*nd2*usfac^2); + % Locate maximum and map back to original pixel grid + [max1,loc1] = max(CC); + [max2,loc2] = max(max1); + rloc = loc1(loc2); cloc = loc2; + CCmax = CC(rloc,cloc); + rg00 = dftups(buf1ft.*conj(buf1ft),1,1,usfac)/(md2*nd2*usfac^2); + rf00 = dftups(buf2ft.*conj(buf2ft),1,1,usfac)/(md2*nd2*usfac^2); + rloc = rloc - dftshift - 1; + cloc = cloc - dftshift - 1; + row_shift = row_shift + rloc/usfac; + col_shift = col_shift + cloc/usfac; + + % If upsampling = 2, no additional pixel shift refinement + else + rg00 = sum(sum( buf1ft.*conj(buf1ft) ))/m/n; + rf00 = sum(sum( buf2ft.*conj(buf2ft) ))/m/n; + end + error = 1.0 - CCmax.*conj(CCmax)/(rg00*rf00); + error = sqrt(abs(error)); + diffphase=atan2(imag(CCmax),real(CCmax)); + % If its only one row or column the shift along that dimension has no + % effect. We set to zero. + if md2 == 1, + row_shift = 0; + end + if nd2 == 1, + col_shift = 0; + end + output=[error,diffphase,row_shift,col_shift]; +end + +% Compute registered version of buf2ft +if (nargout > 1)&&(usfac > 0), + [nr,nc]=size(buf2ft); + Nr = ifftshift([-fix(nr/2):ceil(nr/2)-1]); + Nc = ifftshift([-fix(nc/2):ceil(nc/2)-1]); + [Nc,Nr] = meshgrid(Nc,Nr); + Greg = buf2ft.*exp(i*2*pi*(-row_shift*Nr/nr-col_shift*Nc/nc)); + Greg = Greg*exp(i*diffphase); +elseif (nargout > 1)&&(usfac == 0) + Greg = buf2ft*exp(i*diffphase); +end +return + +function out=dftups(in,nor,noc,usfac,roff,coff) +% function out=dftups(in,nor,noc,usfac,roff,coff); +% Upsampled DFT by matrix multiplies, can compute an upsampled DFT in just +% a small region. +% usfac Upsampling factor (default usfac = 1) +% [nor,noc] Number of pixels in the output upsampled DFT, in +% units of upsampled pixels (default = size(in)) +% roff, coff Row and column offsets, allow to shift the output array to +% a region of interest on the DFT (default = 0) +% Recieves DC in upper left corner, image center must be in (1,1) +% Manuel Guizar - Dec 13, 2007 +% Modified from dftus, by J.R. Fienup 7/31/06 + +% This code is intended to provide the same result as if the following +% operations were performed +% - Embed the array "in" in an array that is usfac times larger in each +% dimension. ifftshift to bring the center of the image to (1,1). +% - Take the FFT of the larger array +% - Extract an [nor, noc] region of the result. Starting with the +% [roff+1 coff+1] element. + +% It achieves this result by computing the DFT in the output array without +% the need to zeropad. Much faster and memory efficient than the +% zero-padded FFT approach if [nor noc] are much smaller than [nr*usfac nc*usfac] + +[nr,nc]=size(in); +% Set defaults +if exist('roff')~=1, roff=0; end +if exist('coff')~=1, coff=0; end +if exist('usfac')~=1, usfac=1; end +if exist('noc')~=1, noc=nc; end +if exist('nor')~=1, nor=nr; end +% Compute kernels and obtain DFT by matrix products +kernc=exp((-i*2*pi/(nc*usfac))*( ifftshift([0:nc-1]).' - floor(nc/2) )*( [0:noc-1] - coff )); +kernr=exp((-i*2*pi/(nr*usfac))*( [0:nor-1].' - roff )*( ifftshift([0:nr-1]) - floor(nr/2) )); +out=kernr*in*kernc; +return diff --git a/populate_pipeline/fn/fn_EmptyStruct.m b/populate_pipeline/fn/fn_EmptyStruct.m new file mode 100644 index 0000000..99b1cd0 --- /dev/null +++ b/populate_pipeline/fn/fn_EmptyStruct.m @@ -0,0 +1,6 @@ +function [empty_struct] = fn_EmptyStruct (table_name) + +t = eval(table_name); +k = t.header.names; +k{2,1} = {}; +empty_struct = struct(k{:}); diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask.m new file mode 100644 index 0000000..eff7396 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask.m @@ -0,0 +1,16 @@ +function [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask (obj, key, iTrials,obj_trial, data_ActionEvent) + + +action_event_type = []; +action_event_time =[]; +if isfield(obj.RawEvents.Trial{obj_trial}.Events,'Port1In') + lick_times = obj.RawEvents.Trial{obj_trial}.Events.Port1In'; + action_event_time = [action_event_time; lick_times]; + [action_event_type{1:numel(lick_times),1}] = deal( 'lick'); +end + +for iActionEvent=1:1:numel(action_event_time) + data_ActionEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'action_event_type',action_event_type(iActionEvent), 'action_event_time',action_event_time(iActionEvent) ); +end + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_SoundTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_SoundTask.m new file mode 100644 index 0000000..95f9fe9 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_SoundTask.m @@ -0,0 +1,20 @@ +function [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_SoundTask (obj, key, iTrials,obj_trial, data_ActionEvent) + +action_event_type = []; +action_event_time =[]; +if isfield(obj.RawEvents.Trial{obj_trial}.Events,'Port1In') + left_lick_times = obj.RawEvents.Trial{obj_trial}.Events.Port1In'; + action_event_time = [action_event_time; left_lick_times]; + [action_event_type{1:numel(left_lick_times),1}] = deal( 'left lick'); +end +if isfield(obj.RawEvents.Trial{obj_trial}.Events,'Port2In') + right_lick_times = obj.RawEvents.Trial{obj_trial}.Events.Port2In'; + action_event_time = [action_event_time; right_lick_times]; + [action_event_type{end+1:end+numel(right_lick_times),1}] = deal( 'right lick'); +end + +for iActionEvent=1:1:numel(action_event_time) + data_ActionEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'action_event_type',action_event_type(iActionEvent), 'action_event_time',action_event_time(iActionEvent) ); +end + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask.m new file mode 100644 index 0000000..c4d9f77 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask.m @@ -0,0 +1,20 @@ +function [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask (obj, key, iTrials,obj_trial, data_ActionEvent) + + +action_event_type = []; +action_event_time =[]; +if isfield(obj.RawEvents.Trial{obj_trial}.Events,'Port1In') + left_lick_times = obj.RawEvents.Trial{obj_trial}.Events.Port1In'; + action_event_time = [action_event_time; left_lick_times]; + [action_event_type{1:numel(left_lick_times),1}] = deal( 'left lick'); +end +if isfield(obj.RawEvents.Trial{obj_trial}.Events,'Port2In') + right_lick_times = obj.RawEvents.Trial{obj_trial}.Events.Port2In'; + action_event_time = [action_event_time; right_lick_times]; + [action_event_type{end+1:end+numel(right_lick_times),1}] = deal( 'right lick'); +end + +for iActionEvent=1:1:numel(action_event_time) + data_ActionEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'action_event_type',action_event_type(iActionEvent), 'action_event_time',action_event_time(iActionEvent) ); +end diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask.m new file mode 100644 index 0000000..94a2a3b --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask.m @@ -0,0 +1,87 @@ +function [data_BehaviorTrial, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock] = fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time, outcome_types, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock) + +task = 'lick2D'; +task_protocol = obj.task; + +trial_instruction = 'go'; +lickport_pos_number = obj.TrialTypes(obj_trial); +lickport_pos_x=obj.X_positions_mat{obj_trial}(lickport_pos_number); %This is setup specific. On Kayvon's rig x positve means Right side (from mouse perspective) +lickport_pos_y=NaN; +lickport_pos_z=obj.Z_positions_mat{obj_trial}(lickport_pos_number); +lickport_pos_x_bins=obj.X_positions_mat{obj_trial}(1,:); +lickport_pos_y_bins=NaN; +lickport_pos_z_bins=obj.Z_positions_mat{obj_trial}(:,1); + +for iOutcome = 1:1:length(outcome_types) % loop through outcomes (e.g. Hit, Ignore, Miss) + if sum(action_event_time>go_t)>0 + if ~isnan(obj.RawEvents.Trial{obj_trial}.States.Reward(1)) + outcome = 'hit'; + else + outcome = 'miss'; + end + else + outcome = 'ignore'; + end +end + +data_BehaviorTrial (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'task',task, 'task_protocol',task_protocol, 'trial_instruction',trial_instruction, 'early_lick',early_lick, 'outcome',outcome); +data_TrialLickPort (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'lickport_pos_number',lickport_pos_number,... + 'lickport_pos_x',lickport_pos_x,'lickport_pos_y',lickport_pos_y,'lickport_pos_z',lickport_pos_z,... + 'lickport_pos_x_bins',lickport_pos_x_bins,'lickport_pos_y_bins',lickport_pos_y_bins,'lickport_pos_z_bins',lickport_pos_z_bins); + +reward_flag = obj.TrialRewardFlag(obj_trial); + +if reward_flag==0 + reward_size_type = 'omission'; +elseif reward_flag == 1 + reward_size_type = 'regular'; +elseif reward_flag ==2 + reward_size_type = 'large'; +end + +reward_size_valve_time= obj.TrialRewardSize(obj_trial); +data_TrialRewardSize (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'reward_size_valve_time',reward_size_valve_time, 'reward_size_type',reward_size_type); + + + + + +num_trials_in_block = obj.TrialSettings(obj_trial).GUI.MaxSame; + + +first_trial_in_block = find([1,(diff(obj.TrialTypes)~=0)]); +counter =1; +for it=1:1:numel(obj.TrialTypes) + if sum(first_trial_in_block==it)>0 + trial_num_in_block(it) = 1; + counter=1; + else + trial_num_in_block(it) = counter; + end + counter = counter+ 1; +end + +num_licks_for_reward = obj.TrialSettings(obj_trial).GUI.NumLicksForReward; +roll_deg = obj.TrialSettings(obj_trial).GUI.RollDeg; +flag_auto_water_settings = obj.TrialSettings(obj_trial).GUI.Autowater; +if flag_auto_water_settings~=1 + flag_auto_water_settings=0; +end + +flag_auto_water_first_trial_in_block_settings = obj.TrialSettings(obj_trial).GUI.AutowaterFirstTrialInBlock; +if flag_auto_water_first_trial_in_block_settings~=1 + flag_auto_water_first_trial_in_block_settings=0; +end + +if isfield(obj.RawEvents.Trial{obj_trial}.States,'GiveDrop') + flag_auto_water_curret_trial = 1; +else + flag_auto_water_curret_trial=0; +end + +data_TrialLickBlock (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'num_trials_in_block',num_trials_in_block, 'current_trial_num_in_block',trial_num_in_block(obj_trial), 'num_licks_for_reward',num_licks_for_reward, 'roll_deg',roll_deg, 'flag_auto_water_curret_trial',flag_auto_water_curret_trial,'flag_auto_water_settings',flag_auto_water_settings,'flag_auto_water_first_trial_in_block_settings',flag_auto_water_first_trial_in_block_settings); + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_SoundTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_SoundTask.m new file mode 100644 index 0000000..4b4f5da --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_SoundTask.m @@ -0,0 +1,33 @@ +function [data_BehaviorTrial, data_TrialName] = fn_Ingest_bpod_EXP_BehaviorTrial_SoundTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time, outcome_types, data_TrialName) + +task = 'sound'; +task_protocol = obj.task; + + +if sum(obj.TrialTypes(obj_trial) == 1)>0 + trial_instruction = 'left'; + trial_type_name='l'; +else sum(obj.TrialTypes(obj_trial) == 0)>0; + trial_instruction = 'right'; + trial_type_name='r'; +end + + +for iOutcome = 1:1:length(outcome_types) % loop through outcomes (e.g. Hit, Ignore, Miss) + if sum(action_event_time>go_t)>0 + if ~isnan(obj.RawEvents.Trial{obj_trial}.States.Reward(1)) + outcome = 'hit'; + else + outcome = 'miss'; + end + else + outcome = 'ignore'; + end +end + +data_BehaviorTrial (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'task',task, 'task_protocol',task_protocol, 'trial_instruction',trial_instruction, 'early_lick',early_lick, 'outcome',outcome); +data_TrialName (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'task',task, 'trial_type_name',trial_type_name); + + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_WaterCueTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_WaterCueTask.m new file mode 100644 index 0000000..163a199 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_BehaviorTrial_WaterCueTask.m @@ -0,0 +1,33 @@ +function [data_BehaviorTrial, data_TrialName] = fn_Ingest_bpod_EXP_BehaviorTrial_WaterCueTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time, outcome_types, data_TrialName) + +task = 'waterCue'; +task_protocol = obj.task; + + +if sum(obj.TrialTypes(obj_trial) == 1)>0 + trial_instruction = 'left'; + trial_type_name='l'; +else sum(obj.TrialTypes(obj_trial) == 0)>0; + trial_instruction = 'right'; + trial_type_name='r'; +end + + +for iOutcome = 1:1:length(outcome_types) % loop through outcomes (e.g. Hit, Ignore, Miss) + if sum(action_event_time>go_t)>0 + if ~isnan(obj.RawEvents.Trial{obj_trial}.States.Reward(1)) + outcome = 'hit'; + else + outcome = 'miss'; + end + else + outcome = 'ignore'; + end +end + +data_BehaviorTrial (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'task',task, 'task_protocol',task_protocol, 'trial_instruction',trial_instruction, 'early_lick',early_lick, 'outcome',outcome); +data_TrialName (iTrials) = struct(... + 'subject_id',key.subject_id, 'session',key.session, 'trial',iTrials, 'task',task, 'trial_type_name',trial_type_name); + + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask.m new file mode 100644 index 0000000..5b95b06 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask.m @@ -0,0 +1,51 @@ +function [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask (obj, key, iTrials, obj_trial, data_TrialEvent, action_event_time, currentFileName) + +trigger_imaging_t = obj.RawEvents.Trial{obj_trial}.States.TrigTrialStart(1); +% go_t = obj.RawEvents.Trial{obj_trial}.States.AnswerPeriod(1)+ 0.150; % we add the presumable travel time of the zabor motors +try + go_t = obj.RawEvents.Trial{obj_trial}.States.AnswerPeriodFirstLick(1); +catch + go_t = obj.RawEvents.Trial{obj_trial}.States.AnswerPeriodAutoWater(1); +end + +bitcodestart_t=obj.RawEvents.Trial{obj_trial}.States.StartBitcodeTrialNumber(1); +trial_end_t = obj.RawEvents.Trial{obj_trial}.States.TrialEnd(1); +trial_event_type ={'trigger imaging'; 'go';'bitcodestart';'trialend'}; +trial_event_time = [trigger_imaging_t; go_t; bitcodestart_t;trial_end_t]; + + +if isfield(obj.RawEvents.Trial{obj_trial}.States,'LickIn1') + if ~isnan((obj.RawEvents.Trial{obj_trial}.States.LickIn1(1))) + LickIn1_t = obj.RawEvents.Trial{obj_trial}.States.LickIn1(1); + trial_event_type {end+1} = 'firstlick'; + trial_event_time(end+1) = LickIn1_t; +end +end +if isfield(obj.RawEvents.Trial{obj_trial}.States,'RewardConsumption') + if ~isnan((obj.RawEvents.Trial{obj_trial}.States.RewardConsumption(1))) + reward = obj.RawEvents.Trial{obj_trial}.States.RewardConsumption(1); + trial_event_type {end+1} = 'reward'; + trial_event_time(end+1) = reward; + end +end + + + +for iTrialEvent=1:1:numel(trial_event_time) + data_TrialEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_event_type',trial_event_type(iTrialEvent), 'trial_event_time',trial_event_time(iTrialEvent), 'duration',0 ); +end + + +% Detecting early lick +%--------------------------------------------------------------------------- +% early lick +if sum(action_event_time <= go_t) >0 + early_lick ='early'; +else + early_lick ='no early'; +end + +trial_note_type=[]; + + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_SoundTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_SoundTask.m new file mode 100644 index 0000000..3b133ea --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_SoundTask.m @@ -0,0 +1,33 @@ +function [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_SoundTask (obj, key, iTrials, obj_trial, data_TrialEvent, action_event_time, currentFileName) + + +trigger_imaging_t = obj.RawEvents.Trial{obj_trial}.States.TrigTrialStart(1); +delay_t = obj.RawEvents.Trial{obj_trial}.States.DelayPeriod(1); +go_t = obj.RawEvents.Trial{obj_trial}.States.ResponseCue(1)+ 0.150; % we add the presumable travel time of the zabor motors +sound_sample_start = obj.RawEvents.Trial{obj_trial}.States.SampleOn1(1); +sound_sample_end = obj.RawEvents.Trial{obj_trial}.States.SampleOn5(2); + +delay_dur = go_t - delay_t; + +trial_event_type ={'trigger imaging'; 'sound sample start'; 'sound sample end'; 'delay'; 'go'}; +trial_event_time = [trigger_imaging_t; sound_sample_start; sound_sample_end; delay_t; go_t]; +duration = [0; 0; 0; 0; 0]; + + +for iTrialEvent=1:1:numel(trial_event_time) + data_TrialEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_event_type',trial_event_type(iTrialEvent), 'trial_event_time',trial_event_time(iTrialEvent), 'duration',duration(iTrialEvent) ); +end + + +% Detecting early lick +%--------------------------------------------------------------------------- +% early lick +if sum(action_event_time <= go_t) >0 + early_lick ='early'; +else + early_lick ='no early'; +end + +trial_note_type=[]; + diff --git a/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask.m b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask.m new file mode 100644 index 0000000..322f782 --- /dev/null +++ b/populate_pipeline/fn/fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask.m @@ -0,0 +1,34 @@ +function [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask (obj, key, iTrials, obj_trial, data_TrialEvent, action_event_time, currentFileName) + + +trigger_imaging_t = obj.RawEvents.Trial{obj_trial}.States.TrigTrialStart(1); +sample_start = obj.RawEvents.Trial{obj_trial}.States.Sample1(1); +sample_end = obj.RawEvents.Trial{obj_trial}.States.Delay1(2); +delay_start = obj.RawEvents.Trial{obj_trial}.States.Delay2(1); +go_t = obj.RawEvents.Trial{obj_trial}.States.ResponseCue(1); + +sample_dur = sample_end - sample_start; +delay_dur = go_t - delay_start; + +trial_event_type ={'trigger imaging'; 'sample'; 'delay'; 'go'}; +trial_event_time = [trigger_imaging_t; sample_start; delay_start; go_t]; +duration = [0; sample_dur; delay_dur; 0]; + + +for iTrialEvent=1:1:numel(trial_event_time) + data_TrialEvent (end+1) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_event_type',trial_event_type(iTrialEvent), 'trial_event_time',trial_event_time(iTrialEvent), 'duration',duration(iTrialEvent) ); +end + + +% Detecting early lick +%--------------------------------------------------------------------------- +% early lick +if sum(action_event_time <= go_t) >0 + early_lick ='early'; +else + early_lick ='no early'; +end + +trial_note_type=[]; + diff --git a/populate_pipeline/fn/fn_ReplaceAndRegisterFrames.m b/populate_pipeline/fn/fn_ReplaceAndRegisterFrames.m new file mode 100644 index 0000000..b9ed833 --- /dev/null +++ b/populate_pipeline/fn/fn_ReplaceAndRegisterFrames.m @@ -0,0 +1,282 @@ +function fn_ReplaceAndRegisterFrames(session_info, flag_do_registration, flag_find_bad_frames_only) + +dir_data =session_info.local_path_session_epoch; +dir_data_registered =session_info.local_path_session_epoch_registered; + +dir_save_fig = [dir_data_registered 'photostim_timings\']; +dir_save_data = [dir_data_registered ]; + +is_dir = dir(dir_save_data); +if ~isempty(is_dir) % skips if if registration already exists + return +end + +num_sub_file=1; %number of small files to split ad save the original large .tif file + + +flag_replace_frames =session_info.flag_photostim_epoch; % replace frames only for photostim epochs +flag_use_existing_template=0; % 1 use template from a different day for registration; +if flag_use_existing_template==1 + dir_existing_template = [dir_base 'anm445105_AF11\20190413\Bphoto_registered\']; + template=load([dir_existing_template 'img_mean.mat']); + template=template.img_mean; +end + + + +if flag_replace_frames ==1 || flag_do_registration==1 + %get files in that dir + allFiles = dir(dir_data); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + file_list =allFileNames(contains(allFileNames,'.tif'))'; + + % reading sequence filenames and ordering them + filename_prefix = file_list{1}(1:strfind(file_list{1},'_')-1); + sequence_filenames =allFileNames(contains(allFileNames,'Sequence'))'; + for i_ss=1:1:numel(sequence_filenames) + s_name=sequence_filenames{i_ss}; + str_start=strfind(s_name,filename_prefix)+length(filename_prefix); + str_end=strfind(s_name,'.mat')-1; + sequence_filenames_number_start(i_ss)=str2num(s_name(str_start:str_end)); + end + [sequence_filenames_number_start, temp_order]=sort(sequence_filenames_number_start); + sequence_filenames_number_end= [sequence_filenames_number_start(2:end)-1, numel(file_list)]; + sequence_filenames=sequence_filenames(temp_order); + seq_bout_counter=1; + seq_bout_first_frame=1; + + % % resaving important files in the new (registered) directory + % SI_sequence_filename =allFileNames(contains(allFileNames,'Sequence'))'; % assuming there is only one sequence file per folder + % Sequence=load([dir_data SI_sequence_filename{1}]); + % filename = [dir_save_data '\' 'Sequence.mat']; + % save(filename,'-struct','Sequence'); + + + ws_sequence_filename =allFileNames(contains(allFileNames,'.h5'))'; % wavesurfer file name + + for i_ws = 1:1:numel(ws_sequence_filename) % this deals with cases in which SI crashes but WS continues to record additional sweeps + temp_ws_start(i_ws,:) = str2num(ws_sequence_filename{i_ws}(end-11:1:end-8)); + temp_ws_end(i_ws,:) = str2num(ws_sequence_filename{i_ws}(end-6:1:end-3)); + + ws_number_sweeps_good(i_ws,:) = temp_ws_end(i_ws,:) - (temp_ws_start(i_ws,:)-1); + if i_ws>1 + ws_number_sweeps_good(i_ws-1,:) = ws_number_sweeps_good(i_ws-1,:) - (temp_ws_end(i_ws-1,:) - temp_ws_start(i_ws,:)) -1; + end + end + + ws_counter=1; + for i_ws = 1:1:numel(ws_sequence_filename) + ws_struct = ws.loadDataFile([dir_data ws_sequence_filename{i_ws}]); + fields = fieldnames(ws_struct); + for i_field=2:1:(ws_number_sweeps_good(i_ws)+1) + temp=eval(['ws_struct.' fields{i_field}]); + if i_field==2 + typical_length=size(temp.analogScans,1); + end + current_length=size(temp.analogScans,1); + % if current_length~=typical_length %checking for abberant WS files (truncated prematurely) + if current_length/typical_length<0.95 %checking for abberant WS files (truncated prematurely) + continue; + end + w_sweeps{ws_counter}=temp; + ws_counter=ws_counter+1; + end + end + + + if isempty(ws_sequence_filename) + return + end + WS_SampleRate=ws_struct.header.AcquisitionSampleRate; %Hz + + stim_frame_session_epoch =[]; + stim_sequence_session_epoch =[]; + stim_frame_session_epoch_python=[]; + + file_suffix_counter=1; + img_mean = 0;%zeros(nImage,mImage); + + for i_fl=1:1:numel(file_list) + tic + i_fl + current_file_name= [file_list{i_fl}]; + + if flag_find_bad_frames_only==0 + [h, Tstack]=scanimage.util.opentif( [dir_data current_file_name] ); + Tstack=(squeeze(Tstack)); + else + [h]=scanimage.util.opentif( [dir_data current_file_name] ); + end + number_frames=length(h.frameNumbers); + + + %% Replace photostim frames + if flag_replace_frames ==1 + if flag_find_bad_frames_only==0 + F_t=squeeze(mean(Tstack,1)); + F_t=squeeze(mean(F_t,1)); + end + + % % Find photostimulation timing based on pockel cell responses (using WaveSurfer aquired data) + % fields = fieldnames(s); + % if numel(fields) <(i_fl+1) + % return + % end + % w=eval(['s.' fields{i_fl+1}]); + w=w_sweeps{i_fl}.analogScans(:,2); + % w=[zeros(100,1);w]; + w(w>max(w)*0.7)=max(w); + [~,WS_stim_time_idx]=findpeaks(w,'MinPeakDistance',40,'MinPeakProminence',[max(w)*0.5]); + + time_WS=(0:1:typical_length-1)./WS_SampleRate; + + subplot(3,3,1:3); + hold on; + try + plot(time_WS,w,'b'); + plot(time_WS(WS_stim_time_idx),w(WS_stim_time_idx),'.g'); + title(sprintf('%d peak WS ', numel(WS_stim_time_idx))); + catch + end + axis tight; + xlabel('Time(s)'); + ylabel('Pockel Cell (V)'); + xlim([time_WS(1) time_WS(end)]); + + + % Fing the contaminated frames in ScanImage using based on pockel cell timing and peaks in mean flourescence in each frame + % stim_large_neighborhood = 1; % plus minus 2 frames + WS_stim_time_sec = WS_stim_time_idx/WS_SampleRate; + neighborhood = 1; % plus minus 2 frames + frameTimestamps = h.frameTimestamps_sec - h.frameTimestamps_sec(1); + SI_stim_frame_idx=[]; + for i_s=1:1:numel(WS_stim_time_idx) + [~,idx_fr] =min(abs(frameTimestamps - WS_stim_time_sec(i_s))); + fr_start = max([1,idx_fr-neighborhood]); + fr_end = min([idx_fr+neighborhood, number_frames]); + idx_replace=[fr_start,fr_end]; + if flag_find_bad_frames_only==0 + Tstack(:,:,idx_fr) = squeeze(mean(Tstack(:,:,idx_replace),3)); + end + SI_stim_frame_idx(i_s) = idx_fr; + end + stim_frame_session_epoch = [stim_frame_session_epoch, SI_stim_frame_idx+(i_fl-1)*number_frames]; + stim_frame_session_epoch_python = [stim_frame_session_epoch, SI_stim_frame_idx+(i_fl-1)*number_frames -1]; % we do it in python convention so that 1 is 0 + + time_SI = frameTimestamps; + if flag_find_bad_frames_only==0 + subplot(3,3,4:6); + hold on; + plot(time_SI,F_t,'-b'); + plot(time_SI(SI_stim_frame_idx) ,F_t(SI_stim_frame_idx),'.r'); + title(sprintf('%d peak SI ', numel(SI_stim_frame_idx))); + axis tight; + xlim([time_WS(1) time_WS(end)]); + xlabel('Time(s)'); + ylabel('Mean Flourescence'); + end + + subplot(3,3,7:9); + hold on; + plot(diff(SI_stim_frame_idx),'-m'); + xlabel('Distance between frames with photostimulations') + axis tight; + + %% Finding what group was photostimulated on every stimulation + if i_fl>=sequence_filenames_number_end(seq_bout_counter) + sequence=load([dir_data sequence_filenames{seq_bout_counter}]); sequence=sequence.sequence; + num_frames_in_seq_bout = numel(stim_frame_session_epoch(seq_bout_first_frame:end)); + sequence= repmat(sequence,1,ceil(num_frames_in_seq_bout/numel(sequence))); + sequence=sequence(1:num_frames_in_seq_bout); + + stim_sequence_session_epoch = [stim_sequence_session_epoch, sequence]; + seq_bout_counter=seq_bout_counter+1; + seq_bout_first_frame=numel(stim_frame_session_epoch)+1; + end + + + + photostim_session_epoch.stim_sequence = stim_sequence_session_epoch; + photostim_session_epoch.stim_frame = stim_frame_session_epoch; + + %% Saving + if isempty(dir(dir_save_fig)) + mkdir (dir_save_fig) + end + + + if isempty(dir(dir_save_data)) + mkdir (dir_save_data) + end + filename = [dir_save_data '\' 'photostim_session_epoch.mat']; + save(filename,'photostim_session_epoch'); + + filename2 = [dir_save_data '\' 'bad_frames.npy']; + writeNPY(stim_frame_session_epoch_python, filename2) + + filename=['file_' num2str(i_fl)]; + figure_name_out=[ dir_save_fig filename]; + eval(['print ', figure_name_out, ' -dtiff -r400']); + % eval(['print ', figure_name_out, ' -dpdf -r200']); + savefig(figure_name_out) + + clf + end + + + %% Registration + if flag_do_registration==1 + if flag_use_existing_template~=1 + if ~exist('template') + template = mean(Tstack,3); + else + template = img_mean; + end + end + + decimationFactor=1; + phase=0; + Tstack = fn_register(Tstack, template, phase, decimationFactor); + + img_mean = img_mean + mean(Tstack,3)/numel(file_list); + + + % Save ammended Tiff + save_file_name = [dir_save_data current_file_name]; + % options.overwrite=true; + % saveastiff(Tstack, [dir_save_data amended_file_name],options); + + Tstack=int16(Tstack); + T = cell(num_sub_file,1); + counter=1; + TnameSuffix = cell(num_sub_file,1); + base_suffix = '00000'; + for i_sub_file=1:1:num_sub_file + ix_start = counter; + ix_end = (ix_start-1) + number_frames/num_sub_file; + counter = ix_end +1; + T{i_sub_file}=Tstack(:,:,ix_start:ix_end); + ss1=base_suffix; + ss2=num2str(file_suffix_counter); + ss1(end-(numel(ss2)-1):end)=ss2; + TnameSuffix{i_sub_file} = ss1; + file_suffix_counter=file_suffix_counter + 1; + end + % toc + % tic + parfor i_sub_file=1:1:num_sub_file + + saveastiff( T{i_sub_file} , [save_file_name(1:end-9) TnameSuffix{i_sub_file} '.tif']); + end + % toc + clear Tstack T; + + if isempty(dir(dir_save_data)) + mkdir (dir_save_data) + end + filename = [dir_save_data '\' 'img_mean.mat']; + save(filename,'img_mean'); + end + toc + end +end \ No newline at end of file diff --git a/populate_pipeline/fn/fn_populate_ROI_across_days.m b/populate_pipeline/fn/fn_populate_ROI_across_days.m new file mode 100644 index 0000000..d46b634 --- /dev/null +++ b/populate_pipeline/fn/fn_populate_ROI_across_days.m @@ -0,0 +1,90 @@ +function fn_populate_ROI_across_days(k, dates, dir_data_combined) + +%loading suite2p output for sessions registered together +dir_data=[dir_data_combined '\suite2p\plane0\']; +S2P=load([dir_data 'Fall.mat']); +numberROI = numel(S2P.stat); + + +% getting uid for multiple sessions +multiple_sessions_uid_list = fetchn(IMG.FOVmultiSessions,'multiple_sessions_uid'); +if isempty(multiple_sessions_uid_list) + multiple_sessions_uid=1; +else + multiple_sessions_uid = max(multiple_sessions_uid_list) +1; +end + +% getting uid for ROIs recorded for multiple sessions +roi_number_uid_list = fetchn(IMG.ROI,'roi_number_uid'); +if isempty(roi_number_uid_list) + roi_number_uid_list = 1:numberROI; +else + max_uid= max(roi_number_uid_list); + roi_number_uid_list = (max_uid + 1) : (max_uid + numberROI); +end + +%intializing +% first_frame_in_session (1) = 1; +total_frame_in_session (1) = 0; + +for i_s = 1:1:numel(dates) + dates{i_s} + k.session_date=dates{i_s}; + + key=fetch(EXP.Session & k); + + FOV=fetch(IMG.FOV & key,'*'); + first_frame_in_session (i_s) = sum(total_frame_in_session)+1; + total_frame_in_session (i_s) = numel(FOV.frames_timestamps); + + key.fov_number=FOV.fov_number; + + key_coregistered=key; + key_coregistered.multiple_sessions_uid=multiple_sessions_uid; + + + numberTrials = numel(FOV.frames_start_trial); + for iROI=1:1:numberROI + key.roi_number = iROI; + + key_ROI=key; + key_ROI.roi_number_uid = roi_number_uid_list(iROI); + key_ROI.roi_centroid_x = S2P.stat{iROI}.med (2); %note the unintuitive order in suite2p outpyt + key_ROI.roi_centroid_y = S2P.stat{iROI}.med(1); %note the unintuitive order in suite2p output + key_ROI.roi_x_pix = S2P.stat{iROI}.xpix; + key_ROI.roi_y_pix = S2P.stat{iROI}.ypix; + key_ROI.roi_pixel_weight = S2P.stat{iROI}.lam; %pixel mask (fluorescence = sum(pixel_weight * frames[ypix,xpix,:])) + key_ROI.roi_radius = S2P.stat{iROI}.radius; + + key_ROI.neuropil_pixels = S2P.stat{iROI}.ipix_neuropil; + + key_ROITrial = key; + key_ROITrial = repmat(key_ROITrial,1,numberTrials); + + for iTrial=1:1:numberTrials + start_trial=FOV.frames_start_trial(iTrial); + end_trial=FOV.frames_start_trial(iTrial)+FOV.number_of_frames_in_trial(iTrial)-1; + start_trial_S2P = start_trial + first_frame_in_session(i_s)-1; + end_trial_S2P = end_trial + first_frame_in_session(i_s)-1; + + f_trace = S2P.F(iROI,start_trial_S2P:end_trial_S2P); + + key_ROITrial(iTrial).trial = iTrial; + key_ROITrial(iTrial).f_trace = f_trace; + key_ROITrial(iTrial).f_trace_timestamps = FOV.frames_timestamps(start_trial:end_trial) - FOV.frames_timestamps(start_trial) ; + key_ROITrial(iTrial).frames_per_trial = numel(start_trial:end_trial); + baseline_fl_trials (iTrial)= mean(f_trace(1:ceil(FOV.imaging_frame_rate))); %taking the first second as baseline + end + key_ROI.baseline_fl_trials=baseline_fl_trials; + key_ROI.baseline_fl_median=median(baseline_fl_trials); + key_ROI.baseline_fl_stem=std(baseline_fl_trials)/sqrt(numberTrials); + + insert(IMG.ROI,key_ROI); + insert(IMG.ROITrial,key_ROITrial); + + end + insert(IMG.FOVmultiSessions,key_coregistered); + +end + +end \ No newline at end of file diff --git a/populate_pipeline/fn/fn_register.m b/populate_pipeline/fn/fn_register.m new file mode 100644 index 0000000..fb6e206 --- /dev/null +++ b/populate_pipeline/fn/fn_register.m @@ -0,0 +1,9 @@ +function [im] = fn_register(im ,template,phase,decimationFactor) + dim = size(template);%[header.SI.hRoiManager.linesPerFrame header.SI.hRoiManager.pixelsPerLine]; +% im = (phase_shift(im,phase)); +% im = im(:,1+phase:phase+dim(2),:); + % im = squeeze(im(:,:,1,:)); + im = shiftIm(im,template,decimationFactor); +end + + diff --git a/populate_pipeline/fn/fn_remove_neighbors_2D.m b/populate_pipeline/fn/fn_remove_neighbors_2D.m new file mode 100644 index 0000000..2723aa6 --- /dev/null +++ b/populate_pipeline/fn/fn_remove_neighbors_2D.m @@ -0,0 +1,33 @@ +function [IDX_remove] = fn_remove_neighbors_2D(XY_all, minimal_distance) + + +List_all=[1:1:size(XY_all,1)]'; + +% initializing +IDX_remove=[]; +XY_updated=XY_all; +List_updated = List_all; + +for j=1:1:numel(List_all) + + for i =1:1:numel(List_updated) + dx = XY_updated(:,1) - XY_updated(i,1); + dy = XY_updated(:,2) - XY_updated(i,2); + dist = (sqrt(dx.^2 + dy.^2)); + + idx_remove_temp = find(dist<=minimal_distance); + idx_remove_temp(idx_remove_temp==i)=[]; %removes self + if ~isempty(idx_remove_temp) + IDX_remove = [IDX_remove;List_updated(idx_remove_temp)]; + XY_updated(idx_remove_temp,:)=[]; + List_updated(idx_remove_temp,:)=[]; + break; + end + end + if i ==numel(List_updated) + break + end +end + + + diff --git a/populate_pipeline/fn/phase_shift.m b/populate_pipeline/fn/phase_shift.m new file mode 100644 index 0000000..5c67354 --- /dev/null +++ b/populate_pipeline/fn/phase_shift.m @@ -0,0 +1,20 @@ +function im = phase_shift(im,pix); +rows = size(im,1); +cols = size(im,2); +if pix ~=0 + ind = 1:2:rows; + if pix > 0 + im = [zeros(rows,pix,size(im,3)) im zeros(rows,pix,size(im,3))]; + il = 1:size(im,2)-pix; + ir = 1+pix:size(im,2); + elseif pix < 0 + pix = abs(pix); + im = [zeros(rows,pix,size(im,3)) im zeros(rows,pix,size(im,3))]; + ir = 1:size(im,2)-pix; + il = 1+pix:size(im,2); + end + im(ind,il,:) = im(ind,ir,:); +else + im = im; +end + diff --git a/populate_pipeline/fn/populate_LAB_new_Rig_Person_Animal.m b/populate_pipeline/fn/populate_LAB_new_Rig_Person_Animal.m new file mode 100644 index 0000000..90a9248 --- /dev/null +++ b/populate_pipeline/fn/populate_LAB_new_Rig_Person_Animal.m @@ -0,0 +1,34 @@ +function populate_LAB_new_Rig_Person_Animal() +%% Should be inserted only in case this info isn't already in the database +%----------------------------------- +% +% insert(LAB.ModifiedGene, {'CamK2a-tTA', 'When these Camk2a-tTA transgenic mice are mated to strain carrying a gene of interest under the regulatory control of a tetracycline-responsive promoter element (TRE; tetO), expression of the target gene can be blocked by administration of the tetracycline analog, doxycycline'} ); +% insert(LAB.ModifiedGene, {'slc17a7 IRES Cre 1D12', 'Cre recombinase expression directed to Vglut1-expressing cells'} ); +% insert(LAB.ModifiedGene, {'Ai94', 'TITL-GCaMP6s Cre/Tet-dependent, fluorescent calcium indicator GCaMP6s inserted into the Igs7 locus (TIGRE)'} ); + +% insert(LAB.Person, {'ars','ArsenyFinkelstein'} ); +% insert(LAB.Rig, {'imaging1','2C.384','Two-photon imaging and photostimulation rig'} ); + + +%% Should be inserted for each new animal +%----------------------------------- + +subject_id=464728; +cage_num=178576; +dob='2019-09-13'; +sex='M'; +surgery_date='2020-02-26'; + +insert(LAB.Subject, {subject_id, 'ars',cage_num ,dob,sex,'Other'} ); + +insert(LAB.Surgery, {subject_id, 1, 'ars',[surgery_date ' 00:00:00'],[surgery_date ' 00:00:00'],'Cranial Window ALM Left'} ); +% insert(LAB.Surgery, {subject_id, 1, 'ars',[surgery_date ' 00:00:00'],[surgery_date ' 00:00:00'],'Cranial D-Window for mesoscope, Left'} ); +insert(LAB.SurgeryProcedure, {subject_id, 1, 1, 'Bregma',-1500,2000,0,'Cranial Window 2.5/2.5/3'} ); +insert(LAB.SurgeryLocation, {subject_id, 1, 1, 'left','ALM'} ); +% insert(LAB.SurgeryLocation, {subject_id, 1, 1, 'left','all'} ); %for mesoscope + +insert(LAB.SubjectGeneModification, {subject_id, 'CamK2a-tTA','Unknown','Unknown'} ); +insert(LAB.SubjectGeneModification, {subject_id, 'slc17a7 IRES Cre 1D12','Unknown','Unknown'} ); +insert(LAB.SubjectGeneModification, {subject_id, 'Ai94','Unknown','Unknown'} ); + +% populate(LAB.CompleteGenotype) diff --git a/populate_pipeline/fn/populate_Session_and_behavior.m b/populate_pipeline/fn/populate_Session_and_behavior.m new file mode 100644 index 0000000..8c5b102 --- /dev/null +++ b/populate_pipeline/fn/populate_Session_and_behavior.m @@ -0,0 +1,123 @@ +function populate_Session_and_behavior (dir_behavioral_data, user_name, rig) +close all; +% DJconnect; %connect to the database using stored user credentials + + +%% Insert/Populate Sessions and dependent tables +allFiles = dir(dir_behavioral_data); %gets the names of all files and nested directories in this folder +allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + + +% % for DEBUG +% del_key=fetch(EXP2.SessionID,'ORDER BY session_uid'); +% if ~isempty(del_key) +% del_key=del_key(end); +% del(EXP2.Session & del_key) +% end + + +for iFile = 1:1:numel (allFileNames) + tic + % Get the current session name/date + currentFileName = allFileNames{iFile}; + currentSubject_id = str2num(currentFileName(6:11)); + currentSessionDate_bpod_format = currentFileName(16:23); + currentSessionDate = char(datetime(currentSessionDate_bpod_format,'Format','yyyy-MM-dd','InputFormat','yyyyMMdd')); + + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + exisitingSession = fetchn(EXP2.Session,'session'); + exisitingSessionDate = fetchn(EXP2.Session,'session_date'); + + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + + key_test.subject_id = currentSubject_id; key_test.session_date = currentSessionDate; + % Insert a session (and all the dependent tables) only if the animalXsession combination doesn't exist + if isempty( fetch(EXP2.Session & key_test)) + + + if sum(currentSubject_id == exisitingSubject_id)>0 % test if to restart the session numbering + temp_key.subject_id = key.subject_id; + s_n = fetchn(EXP2.Session & temp_key,'session'); + currentSession = s_n(end) + 1; + else + currentSession =1; + end + + key.session = currentSession; + + + %% Insert Session + insert(EXP2.Session, {currentSubject_id, currentSession, currentSessionDate, user_name ,rig} ); + populate(EXP2.SessionID); + + key_task.subject_id = key.subject_id; + key_task.session = key.session; + key_task.task = 'sound'; + key_task.task_protocol = 1; + insert(EXP2.SessionTask, key_task); + + key_training.subject_id = key.subject_id; + key_training.session = key.session; + key_training.training_type = 'regular sound'; + insert(EXP2.SessionTraining, key_training); + + %initializing + [data_SessionTrial] = fn_EmptyStruct ('EXP2.SessionTrial'); + [data_ActionEvent] = fn_EmptyStruct ('EXP2.ActionEvent'); + [data_TrialEvent] = fn_EmptyStruct ('EXP2.BehaviorTrialEvent'); + [data_BehaviorTrial] = fn_EmptyStruct ('EXP2.BehaviorTrial'); + [data_TrialName] = fn_EmptyStruct ('EXP2.TrialName'); + + outcome_types = fetchn(EXP2.Outcome,'outcome'); + + total_trials_in_database = numel(fetchn(EXP2.SessionTrial,'trial_uid')); + + + total_trials_today=0; + todayFileName=allFileNames(contains(allFileNames,currentSessionDate_bpod_format)); + for i_bpod_files= 1:1:numel(todayFileName) %in c ase the behavioral session is broken into multiple files in bpod + currentFileName=todayFileName{i_bpod_files}; + %load session + temp = load([dir_behavioral_data currentFileName]); + obj=temp.SessionData; + if i_bpod_files==1 % this is done to append the time of multiple bpod sessions + session_time_offset=0; + else + session_time_offset=data_SessionTrial(iTrials).start_time; + end + + obj.task = key_task.task_protocol'; + + %% Insert Trial-based data + for iTrials = (total_trials_today+1):1: (obj.nTrials + total_trials_today) + obj_trial=iTrials-total_trials_today; + + % EXP2.SessionTrial + data_SessionTrial (iTrials) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_uid', total_trials_in_database + iTrials, 'start_time', (obj.TrialStartTimestamp(obj_trial) - obj.TrialStartTimestamp(1)) +session_time_offset ); + + % EXP2.ActionEvent + [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask (obj, key, iTrials,obj_trial, data_ActionEvent); + + % EXP2.TrialEvent + [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask (obj, key, iTrials,obj_trial, data_TrialEvent, action_event_time, currentFileName); + + % EXP2.BehaviorTrial + [data_BehaviorTrial, data_TrialName] = fn_Ingest_bpod_EXP_BehaviorTrial_SoundTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time,outcome_types, data_TrialName); + + + + + end + total_trials_today=iTrials; + end + + insert(EXP2.SessionTrial, data_SessionTrial); + insert(EXP2.BehaviorTrial, data_BehaviorTrial); + insert(EXP2.TrialName, data_TrialName); + insert(EXP2.ActionEvent, data_ActionEvent); + insert(EXP2.BehaviorTrialEvent, data_TrialEvent); + toc + end +end diff --git a/populate_pipeline/fn/populate_Session_without_behavior.m b/populate_pipeline/fn/populate_Session_without_behavior.m new file mode 100644 index 0000000..63a327b --- /dev/null +++ b/populate_pipeline/fn/populate_Session_without_behavior.m @@ -0,0 +1,63 @@ +function populate_Session_without_behavior (user_name, rig) +close all; + +dir_data = fetch1(IMG.Parameters & 'parameter_name="dir_raw_data_scan_image"','parameter_value'); + +%% Insert/Populate Sessions and dependent tables +temp = dir(dir_data); %gets the names of all files and nested directories in this folder +DirNames = {temp([temp.isdir]).name}; %gets only the names of all files +DirNames =DirNames(contains(DirNames,'anm')); %gets only the names of all files + + +for iDir = 1:1:numel (DirNames) + iDir; + dir_data2=[dir_data DirNames{iDir} '\']; + temp = dir(dir_data2); %gets the names of all files and nested directories in this folder + DirNames2 = {temp([temp.isdir]).name}; %gets only the names of all files + DirNames2(1:2) =[]; %gets only the names of all files + DirNames2(contains(DirNames2,'registered'))=[]; + currentSubject_id = str2num(dir_data2(strfind(dir_data2,'anm')+3:strfind(dir_data2,'anm')+8)); + for jDir = 1:1:numel (DirNames2) + % Get the current session name/date + date_filename=DirNames2{jDir}; + + date_filename_no_suffix=date_filename(1:8); + date_filename_suffix=date_filename(9:end); + try + currentSessionDate = char(datetime(date_filename_no_suffix,'Format','yyyyMMdd','InputFormat','yyyyMMdd')); + catch + return + end + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + + key=[]; + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + + % Insert a session (and all the dependent tables) only if the animalXsession combination doesn't exist + if isempty( fetch(EXP2.Session & key)) || ~isempty(date_filename_suffix) + sessions=fetchn(EXP2.Session & key,'session'); + if numel(sessions)>=str2num(date_filename_suffix) + continue + end + if sum(currentSubject_id == exisitingSubject_id)>0 % test if to restart the session numbering + temp_key.subject_id = key.subject_id; + s_n = fetchn(EXP2.Session & temp_key,'session'); + currentSession = s_n(end) + 1; + else + currentSession =1; + end + + %% Insert Session + insert(EXP2.Session, {currentSubject_id, currentSession, currentSessionDate, user_name ,rig} ); + populate(EXP2.SessionID); + + k1.subject_id = currentSubject_id; + k1.session=currentSession; + k1.local_path_orignal_session = [dir_data2 date_filename]; + %% Insert Session + insert(EXP2.SessionDirectory, k1 ); + + end + end +end diff --git a/populate_pipeline/fn/populate_behavior_Lick2D.m b/populate_pipeline/fn/populate_behavior_Lick2D.m new file mode 100644 index 0000000..6aaabd7 --- /dev/null +++ b/populate_pipeline/fn/populate_behavior_Lick2D.m @@ -0,0 +1,128 @@ +function populate_behavior_Lick2D (dir_behavioral_data, behavioral_protocol_name) +close all; +% DJconnect; %connect to the database using stored user credentials + + +%% Insert/Populate Sessions and dependent tables +dir_behavioral_dat_full = [dir_behavioral_data '\' behavioral_protocol_name '\']; +allFiles = dir(dir_behavioral_dat_full); %gets the names of all files and nested directories in this folder +allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + + +% % for DEBUG +% del_key=fetch(EXP2.SessionID,'ORDER BY session_uid'); +% if ~isempty(del_key) +% del_key=del_key(end); +% del(EXP2.Session & del_key) +% end + + +for iFile = 1:1:numel (allFileNames) + tic + % Get the current session name/date + currentFileName = allFileNames{iFile}; + currentSubject_id = str2num(dir_behavioral_data(end-11:end-6)); + currentSessionDate_bpod_format = currentFileName(end-18:end-11); + currentSessionDate = char(datetime(currentSessionDate_bpod_format,'Format','yyyy-MM-dd','InputFormat','yyyyMMdd')); + date_filename_suffix=currentFileName(end-19); + + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + exisitingSession = fetchn(EXP2.Session,'session'); + exisitingSessionDate = fetchn(EXP2.Session,'session_date'); + key=[]; + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + key.session = fetchn(EXP2.Session & key,'session'); + key.session=key.session(1); % assuming that if there are multiple sessions on the same date, the one with behavior is the first + % Insert a session (and all the dependent tables) only if the animalX Behaviora; session combination doesn't exist + if isempty( fetch(EXP2.BehaviorTrial & key)) || ~(date_filename_suffix=='_') + + sessions=numel(unique(fetchn(EXP2.BehaviorTrial & key,'session'))); + if numel(sessions)>=str2num(date_filename_suffix) + continue + end + if sum(currentSubject_id == exisitingSubject_id)>0 % test if to restart the session numbering + temp_key.subject_id = key.subject_id; + s_n = numel(unique(fetchn(EXP2.BehaviorTrial & temp_key,'session'))); + currentSession = s_n(end) + 1; + key.session = currentSession; + else + currentSession =1; + end + + + key_task.subject_id = key.subject_id; + key_task.session = key.session; + key_task.task = 'lick2D'; + key_task.task_protocol = 2; + + key_training.subject_id = key.subject_id; + key_training.session = key.session; + key_training.training_type = 'no training'; + + %initializing + [data_SessionTrial] = fn_EmptyStruct ('EXP2.SessionTrial'); + [data_ActionEvent] = fn_EmptyStruct ('EXP2.ActionEvent'); + [data_TrialEvent] = fn_EmptyStruct ('EXP2.BehaviorTrialEvent'); + [data_BehaviorTrial] = fn_EmptyStruct ('EXP2.BehaviorTrial'); + [data_TrialLickPort] = fn_EmptyStruct ('EXP2.TrialLickPort'); + [data_TrialRewardSize] = fn_EmptyStruct ('EXP2.TrialRewardSize'); + [data_TrialLickBlock] = fn_EmptyStruct ('EXP2.TrialLickBlock'); + outcome_types = fetchn(EXP2.Outcome,'outcome'); + + total_trials_in_database = numel(fetchn(EXP2.SessionTrial,'trial_uid')); + + + total_trials_today=0; + todayFileName=allFileNames(contains(allFileNames,currentSessionDate_bpod_format)); + for i_bpod_files= 1:1:numel(todayFileName) %in c ase the behavioral session is broken into multiple files in bpod + currentFileName=todayFileName{i_bpod_files}; + %load session + temp = load([dir_behavioral_dat_full currentFileName]); + obj=temp.SessionData; + if i_bpod_files==1 % this is done to append the time of multiple bpod sessions + session_time_offset=0; + else + session_time_offset=data_SessionTrial(iTrials).start_time; + end + + obj.task = key_task.task_protocol'; + + %% Insert Trial-based data + for iTrials = (total_trials_today+1):1: (obj.nTrials + total_trials_today) + + obj_trial=iTrials-total_trials_today; + + % EXP2.SessionTrial + start_time = ((obj.TrialStartTimestamp(obj_trial) - obj.TrialStartTimestamp(1)) +session_time_offset); + data_SessionTrial (iTrials) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_uid', total_trials_in_database + iTrials, 'start_time',start_time); + + % EXP2.ActionEvent + [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask (obj, key, iTrials,obj_trial, data_ActionEvent); + + % EXP2.TrialEvent + [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask (obj, key, iTrials,obj_trial, data_TrialEvent, action_event_time, currentFileName); + + % EXP2.BehaviorTrial + [data_BehaviorTrial, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock] = fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time,outcome_types, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock); + + end + total_trials_today=iTrials; + end + + insert(EXP2.SessionTrial, data_SessionTrial); + + insert(EXP2.SessionTask, key_task); + insert(EXP2.SessionTraining, key_training); + + insert(EXP2.BehaviorTrial, data_BehaviorTrial); + insert(EXP2.TrialLickPort, data_TrialLickPort); + insert(EXP2.ActionEvent, data_ActionEvent); + insert(EXP2.BehaviorTrialEvent, data_TrialEvent); + insert(EXP2.TrialRewardSize, data_TrialRewardSize); + insert(EXP2.TrialLickBlock, data_TrialLickBlock); + + toc + end +end diff --git a/populate_pipeline/fn/populate_behavior_Lick2D_old.m b/populate_pipeline/fn/populate_behavior_Lick2D_old.m new file mode 100644 index 0000000..05b6aa7 --- /dev/null +++ b/populate_pipeline/fn/populate_behavior_Lick2D_old.m @@ -0,0 +1,113 @@ +function populate_behavior_Lick2D_old (dir_behavioral_data, behavioral_protocol_name) +close all; +% DJconnect; %connect to the database using stored user credentials + + +%% Insert/Populate Sessions and dependent tables +dir_behavioral_dat_full = [dir_behavioral_data '\' behavioral_protocol_name '\']; +allFiles = dir(dir_behavioral_dat_full); %gets the names of all files and nested directories in this folder +allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + + +% % for DEBUG +% del_key=fetch(EXP2.SessionID,'ORDER BY session_uid'); +% if ~isempty(del_key) +% del_key=del_key(end); +% del(EXP2.Session & del_key) +% end + + +for iFile = 1:1:numel (allFileNames) + tic + % Get the current session name/date + currentFileName = allFileNames{iFile}; + currentSubject_id = str2num(dir_behavioral_data(end-11:end-6)); + currentSessionDate_bpod_format = currentFileName(end-18:end-11); + currentSessionDate = char(datetime(currentSessionDate_bpod_format,'Format','yyyy-MM-dd','InputFormat','yyyyMMdd')); + + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + exisitingSession = fetchn(EXP2.Session,'session'); + exisitingSessionDate = fetchn(EXP2.Session,'session_date'); + key=[]; + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + key.session = fetchn(EXP2.Session & key,'session'); + key.session=key.session(1); % assuming that if there are multiple sessions on the same date, the one with behavior is the first + % Insert a session (and all the dependent tables) only if the animalX Behaviora; session combination doesn't exist + if isempty( fetch(EXP2.BehaviorTrial & key)) + + key_task.subject_id = key.subject_id; + key_task.session = key.session; + key_task.task = 'lick2D'; + key_task.task_protocol = 2; + + key_training.subject_id = key.subject_id; + key_training.session = key.session; + key_training.training_type = 'no training'; + + %initializing + [data_SessionTrial] = fn_EmptyStruct ('EXP2.SessionTrial'); + [data_ActionEvent] = fn_EmptyStruct ('EXP2.ActionEvent'); + [data_TrialEvent] = fn_EmptyStruct ('EXP2.BehaviorTrialEvent'); + [data_BehaviorTrial] = fn_EmptyStruct ('EXP2.BehaviorTrial'); + [data_TrialLickPort] = fn_EmptyStruct ('EXP2.TrialLickPort'); + [data_TrialRewardSize] = fn_EmptyStruct ('EXP2.TrialRewardSize'); + [data_TrialLickBlock] = fn_EmptyStruct ('EXP2.TrialLickBlock'); + outcome_types = fetchn(EXP2.Outcome,'outcome'); + + total_trials_in_database = numel(fetchn(EXP2.SessionTrial,'trial_uid')); + + + total_trials_today=0; + todayFileName=allFileNames(contains(allFileNames,currentSessionDate_bpod_format)); + for i_bpod_files= 1:1:numel(todayFileName) %in c ase the behavioral session is broken into multiple files in bpod + currentFileName=todayFileName{i_bpod_files}; + %load session + temp = load([dir_behavioral_dat_full currentFileName]); + obj=temp.SessionData; + if i_bpod_files==1 % this is done to append the time of multiple bpod sessions + session_time_offset=0; + else + session_time_offset=data_SessionTrial(iTrials).start_time; + end + + obj.task = key_task.task_protocol'; + + %% Insert Trial-based data + for iTrials = (total_trials_today+1):1: (obj.nTrials + total_trials_today) + + obj_trial=iTrials-total_trials_today; + + % EXP2.SessionTrial + start_time = ((obj.TrialStartTimestamp(obj_trial) - obj.TrialStartTimestamp(1)) +session_time_offset); + data_SessionTrial (iTrials) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_uid', total_trials_in_database + iTrials, 'start_time',start_time); + + % EXP2.ActionEvent + [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_Lick2DTask (obj, key, iTrials,obj_trial, data_ActionEvent); + + % EXP2.TrialEvent + [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_Lick2DTask (obj, key, iTrials,obj_trial, data_TrialEvent, action_event_time, currentFileName); + + % EXP2.BehaviorTrial + [data_BehaviorTrial, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock] = fn_Ingest_bpod_EXP_BehaviorTrial_Lick2DTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time,outcome_types, data_TrialLickPort, data_TrialRewardSize, data_TrialLickBlock); + + end + total_trials_today=iTrials; + end + + insert(EXP2.SessionTrial, data_SessionTrial); + + insert(EXP2.SessionTask, key_task); + insert(EXP2.SessionTraining, key_training); + + insert(EXP2.BehaviorTrial, data_BehaviorTrial); + insert(EXP2.TrialLickPort, data_TrialLickPort); + insert(EXP2.ActionEvent, data_ActionEvent); + insert(EXP2.BehaviorTrialEvent, data_TrialEvent); + insert(EXP2.TrialRewardSize, data_TrialRewardSize); + insert(EXP2.TrialLickBlock, data_TrialLickBlock); + + toc + end +end diff --git a/populate_pipeline/fn/populate_behavior_WaterCue.m b/populate_pipeline/fn/populate_behavior_WaterCue.m new file mode 100644 index 0000000..1454afa --- /dev/null +++ b/populate_pipeline/fn/populate_behavior_WaterCue.m @@ -0,0 +1,110 @@ +function populate_behavior_WaterCue (dir_behavioral_data, behavioral_protocol_name) +close all; +% DJconnect; %connect to the database using stored user credentials + + +%% Insert/Populate Sessions and dependent tables +dir_behavioral_dat_full = [dir_behavioral_data '\' behavioral_protocol_name '\']; +allFiles = dir(dir_behavioral_dat_full); %gets the names of all files and nested directories in this folder +allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + + +% % for DEBUG +% del_key=fetch(EXP2.SessionID,'ORDER BY session_uid'); +% if ~isempty(del_key) +% del_key=del_key(end); +% del(EXP2.Session & del_key) +% end + + +for iFile = 1:1:numel (allFileNames) + tic + % Get the current session name/date + currentFileName = allFileNames{iFile}; + currentSubject_id = str2num(dir_behavioral_data(end-11:end-6)); + currentSessionDate_bpod_format = currentFileName(end-18:end-11); + currentSessionDate = char(datetime(currentSessionDate_bpod_format,'Format','yyyy-MM-dd','InputFormat','yyyyMMdd')); + + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + exisitingSession = fetchn(EXP2.Session,'session'); + exisitingSessionDate = fetchn(EXP2.Session,'session_date'); + key=[]; + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + key.session = fetchn(EXP2.Session & key,'session'); + + % Insert a session (and all the dependent tables) only if the animalX Behavior; session combination doesn't exist + if isempty( fetch(EXP2.BehaviorTrial & key)) + + key_task.subject_id = key.subject_id; + key_task.session = key.session; + key_task.task = 'waterCue'; + key_task.task_protocol = 3; + + key_training.subject_id = key.subject_id; + key_training.session = key.session; + key_training.training_type = 'no training'; + + %initializing + [data_SessionTrial] = fn_EmptyStruct ('EXP2.SessionTrial'); + [data_ActionEvent] = fn_EmptyStruct ('EXP2.ActionEvent'); + [data_TrialEvent] = fn_EmptyStruct ('EXP2.BehaviorTrialEvent'); + [data_BehaviorTrial] = fn_EmptyStruct ('EXP2.BehaviorTrial'); + [data_TrialName] = fn_EmptyStruct ('EXP2.TrialName'); + + outcome_types = fetchn(EXP2.Outcome,'outcome'); + + total_trials_in_database = numel(fetchn(EXP2.SessionTrial,'trial_uid')); + + + total_trials_today=0; + todayFileName=allFileNames(contains(allFileNames,currentSessionDate_bpod_format)); + for i_bpod_files= 1:1:numel(todayFileName) %in c ase the behavioral session is broken into multiple files in bpod + currentFileName=todayFileName{i_bpod_files}; + %load session + temp = load([dir_behavioral_dat_full currentFileName]); + obj=temp.SessionData; + if i_bpod_files==1 % this is done to append the time of multiple bpod sessions + session_time_offset=0; + else + session_time_offset=data_SessionTrial(iTrials).start_time; + end + + obj.task = key_task.task_protocol'; + + %% Insert Trial-based data + for iTrials = (total_trials_today+1):1: (obj.nTrials + total_trials_today) + obj_trial=iTrials-total_trials_today; + + % EXP2.SessionTrial + data_SessionTrial (iTrials) = struct(... + 'subject_id', key.subject_id, 'session', key.session, 'trial', iTrials, 'trial_uid', total_trials_in_database + iTrials, 'start_time', (obj.TrialStartTimestamp(obj_trial) - obj.TrialStartTimestamp(1)) +session_time_offset ); + + % EXP2.ActionEvent + [data_ActionEvent, action_event_time] = fn_Ingest_bpod_EXP_ActionEvent_WaterCueTask (obj, key, iTrials,obj_trial, data_ActionEvent); + + % EXP2.TrialEvent + [data_TrialEvent, early_lick, trial_note_type, go_t] = fn_Ingest_bpod_EXP_TrialEvent_WaterCueTask (obj, key, iTrials,obj_trial, data_TrialEvent, action_event_time, currentFileName); + + % EXP2.BehaviorTrial + [data_BehaviorTrial, data_TrialName] = fn_Ingest_bpod_EXP_BehaviorTrial_WaterCueTask (obj, key, iTrials,obj_trial, data_BehaviorTrial, early_lick, go_t, action_event_time,outcome_types, data_TrialName); + + + + + end + total_trials_today=iTrials; + end + insert(EXP2.SessionTask, key_task); + + insert(EXP2.SessionTraining, key_training); + + + insert(EXP2.SessionTrial, data_SessionTrial); + insert(EXP2.BehaviorTrial, data_BehaviorTrial); + insert(EXP2.TrialName, data_TrialName); + insert(EXP2.ActionEvent, data_ActionEvent); + insert(EXP2.BehaviorTrialEvent, data_TrialEvent); + toc + end +end diff --git a/populate_pipeline/fn/populate_imaging_roi_across_days.m b/populate_pipeline/fn/populate_imaging_roi_across_days.m new file mode 100644 index 0000000..098ad32 --- /dev/null +++ b/populate_pipeline/fn/populate_imaging_roi_across_days.m @@ -0,0 +1,28 @@ +function populate_imaging_roi_across_days() + +anm=437545; + +dir_data_combined = 'Z:\users\Arseny\Projects\Learning\imaging2p\Registered\AF09_anm437545\suite2p\2019_01_18_24\'; +dates{1}='2019_01_18'; +dates{end+1}='2019_01_19'; +dates{end+1}='2019_01_20'; +dates{end+1}='2019_01_21'; +dates{end+1}='2019_01_22'; +dates{end+1}='2019_01_23'; +dates{end+1}='2019_01_24'; + +% dir_data_combined = 'Z:\users\Arseny\Projects\Learning\imaging2p\Registered\AF09_anm437545\suite2p\2019_02_04_08\'; +% dates{1}='2019_02_04'; +% dates{end+1}='2019_02_05'; +% dates{end+1}='2019_02_06'; +% dates{end+1}='2019_02_07'; +% dates{end+1}='2019_02_08'; + + +key.subject_id=anm; +fn_populate_ROI_across_days(key, dates, dir_data_combined) + + + +% populate_imaging_psth_across_days(); + diff --git a/populate_pipeline/fn/populate_somatotopy.m b/populate_pipeline/fn/populate_somatotopy.m new file mode 100644 index 0000000..f8c36a3 --- /dev/null +++ b/populate_pipeline/fn/populate_somatotopy.m @@ -0,0 +1,270 @@ +function populate_somatotopy() + +%% AF26 463190 +%-------------------------------------------------------------------------- +key.subject_id = 463190; +key.session = 10; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=7; +key.sensory_stimulation_area = 'PawFrontLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=8; +key.sensory_stimulation_area = 'Jaw'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=9; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + + +%% AF27 463189 +%-------------------------------------------------------------------------- +key.subject_id = 463189; +key.session = 12; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=1; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=2; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'PawFrontLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'Jaw'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=7; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + + + +%% AF28 464724 +%-------------------------------------------------------------------------- +key.subject_id = 464724; +key.session = 4; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + +%% +key.subject_id = 464724; +key.session = 5; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +%% +key.subject_id = 464724; +key.session = 6; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'Jaw'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=7; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + + +%% +key.subject_id = 464724; +key.session = 8; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=2; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'PawFrontLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=7; +key.sensory_stimulation_area = 'Jaw'; +insert(EXP2.SessionEpochSomatotopy, key); + +% key.session_epoch_number=8; +% key.sensory_stimulation_area = 'Grooming'; +% insert(EXP2.SessionEpochSomatotopy, key); +% +% key.session_epoch_number=9; +% key.sensory_stimulation_area = 'control'; +% insert(EXP2.SessionEpochSomatotopy, key); + + +%% AF28 464725 +%-------------------------------------------------------------------------- +key.subject_id = 464725; +key.session = 5; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +%% +key.subject_id = 464725; +key.session = 6; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +%% +key.subject_id = 464725; +key.session = 7; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + + +%% +key.subject_id = 464725; +key.session = 11; +key.session_epoch_type='spont_only'; + +key.session_epoch_number=2; +key.sensory_stimulation_area = 'PawFrontRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=3; +key.sensory_stimulation_area = 'CheekRight'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=4; +key.sensory_stimulation_area = 'CheekLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=5; +key.sensory_stimulation_area = 'Nose'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=6; +key.sensory_stimulation_area = 'PawFrontLeft'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=7; +key.sensory_stimulation_area = 'Jaw'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=8; +key.sensory_stimulation_area = 'Grooming'; +insert(EXP2.SessionEpochSomatotopy, key); + +key.session_epoch_number=9; +key.sensory_stimulation_area = 'control'; +insert(EXP2.SessionEpochSomatotopy, key); + diff --git a/populate_pipeline/fn/shiftIm.m b/populate_pipeline/fn/shiftIm.m new file mode 100644 index 0000000..4953d8a --- /dev/null +++ b/populate_pipeline/fn/shiftIm.m @@ -0,0 +1,32 @@ +function [im output] = shiftIm(im,ref,decimationFactor) +if nargin == 1 + ref = mean(squeeze(im),3); +end +if nargin < 3 + decimationFactor = 1; +end +sz = size(im,1); +ind1 = round(sz/decimationFactor); +ind1 = 1+round((sz-ind1)/2):sz-round((sz-ind1)/2); +sz = size(im,2); +ind2 = round(sz/decimationFactor); +ind2 = 1+round((sz-ind2)/2):sz-round((sz-ind2)/2); +% x = 0*im; + +ref=ref(ind1,ind2); +im = im(ind1,ind2,:); +parfor frame = 1:size(im,3) +% [num2str(frame), '/',num2str(size(im,3))] +% tic + [~, G] = dftregistration(fft2(ref),fft2(double(im(:,:,frame))),1); + im(:,:,frame)=(abs(ifft2(G))); + + +% if decimationFactor == 1 +% x(:,:,frame)=(abs(ifft2(G))); +% else +% % x(:,:,frame) = imtranslate(im(:,:,frame),output([4 3])); +% x(:,:,frame) = KDtranslate(im(:,:,frame),output([3 4])); +% end +% toc +end \ No newline at end of file diff --git a/populate_pipeline/fov_size_at_different_zoom.mat b/populate_pipeline/fov_size_at_different_zoom.mat new file mode 100644 index 0000000..57f7d6c Binary files /dev/null and b/populate_pipeline/fov_size_at_different_zoom.mat differ diff --git a/populate_pipeline/populate_Session.asv b/populate_pipeline/populate_Session.asv new file mode 100644 index 0000000..8ef9af2 --- /dev/null +++ b/populate_pipeline/populate_Session.asv @@ -0,0 +1,116 @@ +function populate_Session (user_name, rig) +close all; + +dir_data = fetch1(IMG.Parameters & 'parameter_name="dir_raw_data_scan_image"','parameter_value'); + +%% Insert/Populate Sessions and dependent tables +temp = dir(dir_data); %gets the names of all files and nested directories in this folder +DirNames = {temp([temp.isdir]).name}; %gets only the names of all files +DirNames = DirNames(3:end); + +for iDir = 1:1:numel (DirNames) + + % Get the current session name/date + currentSubject_id = str2num(dir_data(strfind(dir_data,'anm')+3:strfind(dir_data,'anm')+8)); + currentSessionDate = char(datetime(DirNames{iDir},'Format','yyyyMMdd','InputFormat','yyyyMMdd')); + + % Get the name/date of sessions that are already in the DJ database + exisitingSubject_id = fetchn(EXP2.Session,'subject_id'); + + key=[]; + key.subject_id = currentSubject_id; key.session_date = currentSessionDate; + + % Insert a session (and all the dependent tables) only if the animalXsession combination doesn't exist + if isempty( fetch(EXP2.Session & key)) + + if sum(currentSubject_id == exisitingSubject_id)>0 % test if to restart the session numbering + temp_key.subject_id = key.subject_id; + s_n = fetchn(EXP2.Session & temp_key,'session'); + currentSession = s_n(end) + 1; + else + currentSession =1; + end + key.session = currentSession; + + %% Insert Session + insert(EXP2.Session, {currentSubject_id, currentSession, currentSessionDate, user_name ,rig} ); + populate(EXP2.SessionID); + + dir_data2 = [dir_data '\' DirNames{iDir}]; + temp = dir(dir_data2); %gets the names of all files and nested directories in this folder + subDirNames = {temp([temp.isdir]).name}; %gets only the names of all files + subDirNames = subDirNames(3:end); + subDirNames = subDirNames(contains(subDirNames,'data')); + + key=rmfield(key,'session_date'); + k=key; + + session_start_time = 0; + session_start_frame = 0; + session_frames_timestamps =[]; + for jDir = 1:1:numel (subDirNames) + dir_data3 = [dir_data2 '\' subDirNames{jDir} '\']; + if contains(subDirNames{jDir},'spont') + k.session_epoch_type = 'spontaneous only'; + elseif contains(subDirNames{jDir},'photo') + k.session_epoch_type = 'spontaneous photostim'; + elseif contains(subDirNames{jDir},'behav') + k.session_epoch_type = 'behavior only'; + end + k.session_epoch_number = jDir; + k2=k; + k3=k; + + allFiles = dir(dir_data3); %gets the names of all files and nested directories in this folder + allFileNames = {allFiles(~[allFiles.isdir]).name}; %gets only the names of all files + allFileNames =allFileNames(contains(allFileNames,'.tif'))'; + + + %initialzing + frames_timestamps=cell(numel(allFileNames),1); + parfor ifile=1:1:numel(allFileNames) + [header]=scanimage.util.opentif([dir_data3,allFileNames{ifile}]); + frames_timestamps{ifile} = header.frameTimestamps_sec; + end + + frames_timestamps=cell2mat(frames_timestamps') + session_start_time; + session_frames_timestamps = [session_frames_timestamps, frames_timestamps]; + + k2.session_epoch_start_time = frames_timestamps(1) ; + k3.session_epoch_start_frame = 1 + session_start_frame; + + k2.session_epoch_end_time = frames_timestamps(end); + k3.session_epoch_end_frame = numel(frames_timestamps) + session_start_frame; + + insert(EXP2.SessionEpoch, k2 ); + session_start_time = k2.session_epoch_end_time + 100; + + insert(IMG.SessionEpochFrame, k3 ); + session_start_frame = k3.session_epoch_end_frame; + + end + k4=key; + k4.frame_timestamps = session_frames_timestamps; + insert(IMG.FrameTime, k4); + + + [header]=scanimage.util.opentif([dir_data3,allFileNames{1}]); + k5=key; + k5.fov_num=1; + k5.fov_name='fov'; + k5.fov_x_size = header.SI.hRoiManager.pixelsPerLine; + k5.fov_y_size = header.SI.hRoiManager.pixelsPerLine; + k5.imaging_frame_rate = header.SI.hRoiManager.scanFrameRate ; + insert(IMG.FOV, k5); + + k6=key; + k6.fov_num=1; + k6.plane_num=1; + k6.channel_num=1; + + insert(IMG.Plane, k6); + + + end + +end diff --git a/populate_pipeline/populate_tables.m b/populate_pipeline/populate_tables.m new file mode 100644 index 0000000..95c0d75 --- /dev/null +++ b/populate_pipeline/populate_tables.m @@ -0,0 +1,83 @@ +function populate_tables() +rig='imaging1'; +user_name ='ars'; +dir_behavioral_data = 'Z:\users\Arseny\Projects\Learning\imaging2p\RawData\BPOD_behavior\anm442411_AF12\'; +behavioral_protocol_name='af_2D'; +IMG.Parameters; %configure the path to your data folder here + +flag_multi_session_registration = 1; + + +%% STEP 0 - populate LAB (for each new person/rig/animal) +% populate_LAB_new_Rig_Person_Animal % + +% Definition tables - make sure they are not empty by running them +% EXP2.ActionEventType; +% EXP2.TrialEventType; +% EXP2.TrainingType; +% EXP2.Task; +% EXP2.TrialNameType; +% EXP2.EarlyLick; +% EXP2.Outcome; +% EXP2.TrialInstruction; +% EXP2.TaskProtocol; +% EXP2.EpochName; +% EXP2.EpochName2; +% EXP2.SessionEpochType + +%% STEP 1 - could be run independelty of suite2p +populate_Session_without_behavior (user_name, rig); % populate session without behavior +% populate_behavior_Lick2D(dir_behavioral_data, behavioral_protocol_name); +% populate_Session_and_behavior (dir_behavioral_data, user_name, rig); % populate session with behavior + +populate(EXP2.SessionEpoch); % reads info about FOV and trial duration from SI files. Also populates EXP2.SessionEpochDirectory, EXP2.SessionEpochFrame, IMG.FrameTime, IMG.FrameStartFile + +flag_do_registration=1; +flag_find_bad_frames_only=0; +ReplaceAndRegisterFrames(flag_do_registration, flag_find_bad_frames_only); + + +%% STEP 2 - run suite2p (outside this script) +populate(IMG.FOV); % also populates IMG.Plane + +populate(IMG.ROI); +populate(IMG.ROIGood); +populate(IMG.ROITrace); +populate(IMG.ROISpikes); + +populate(IMG.PhotostimGroup); +populate(IMG.PhotostimGroupROI); % also populates IMG.PhotostimDATfile; + +populate(STIM.ROIResponse50); +populate(STIM.ROIResponseDirect); + +populate(STIM.ROIResponseMost); + +populate(STIM.ROIGraph2); + +populate(ANLI.ROICorr); +% +populate(ANLI.ROILick2Dmap); +populate(ANLI.ROILick2Dangle); +populate(ANLI.ROILick2DangleShuffle); +populate(ANLI.ROILick2DmapShuffle); + +% populate(STIM.ROIResponseDistance) +% populate(STIM.ROIResponseTrace); + +% %% STEP 3 - should run *AFTER* suite2p had finished. Can run in paralel with STEP 4 +% populate_imaging_roi_across_days; %Specify within the script the directory for single/multi session registration +% populate(IMG.FOVmultiSessionsFirstFrame); +% populate(ANLI.FPSTHaverage); +% +% %% STEP 4 - should run *AFTER* suite2p had finished. Can run in paralel with STEP 3 +% populate(IMG.FOVRegisteredMovie); % requires manual updating of dir at this point +% populate(IMG.FOVMapBaselineF); +% populate(IMG.FOVMapActivity); +% populate(IMG.FOVMapSelectivity); + + + + + + diff --git a/temp_test_pca.m b/temp_test_pca.m new file mode 100644 index 0000000..ea0d8eb --- /dev/null +++ b/temp_test_pca.m @@ -0,0 +1,59 @@ +M=[]; +M(:,1) = rand(1,100); +M(:,2) = rand(1,100); +M(:,3) = 0.3*M(:,1) + 0.7*M(:,2) + rand(1,100)'/10; +M(:,4) = 0.7*M(:,1) + 0.3*M(:,3)+ rand(1,100)'; +M(:,5) = rand(1,100); + +M=M-mean(M); +[loadings,components,~, ~, explained] = pca(M); +Mreconstructed=components*loadings'; + +% function test() +% +% rng(0) +% data(:,1) = randn(30,1); +% data(:,2) = 3.4 + 1.2 * data(:,1); +% data(:,2) = data(:,2) + 0.2*randn(size(data(:,1))); +% data = sortrows(data,1); +% +% figure +% axes('LineWidth',0.6,... +% 'FontName','Helvetica',... +% 'FontSize',8,... +% 'XAxisLocation','Origin',... +% 'YAxisLocation','Origin'); +% line(data(:,1),data(:,2),... +% 'LineStyle','None',... +% 'Marker','o'); +% axis equal +% +% data(:,1) = data(:,1)-mean(data(:,1)); +% data(:,2) = data(:,2)-mean(data(:,2)); +% +% C = cov(data) +% [V,D] = eig(C) +% var(newdata) +% var(newdata)/sum(var(newdata)) +% +% figure +% axes('LineWidth',0.6,... +% 'FontName','Helvetica',... +% 'FontSize',8,... +% 'XAxisLocation','Origin',... +% 'YAxisLocation','Origin'); +% line(data(:,1),data(:,2),... +% 'LineStyle','None',... +% 'Marker','o'); +% line([0 V(1,1)],[0 V(2,1)],... +% 'Color',[0.8 0.5 0.3],... +% 'LineWidth',0.75); +% line([0 V(1,2)],[0 V(2,2)],... +% 'Color',[0.8 0.5 0.3],... +% 'LineWidth',0.75); +% axis equal +% +% +% newdata = V * data'; +% newdata = newdata'; +% newdata = fliplr(newdata) diff --git a/tifflib.mexw64 b/tifflib.mexw64 new file mode 100644 index 0000000..81c43b5 Binary files /dev/null and b/tifflib.mexw64 differ diff --git a/visualizing_neur_traces.m b/visualizing_neur_traces.m new file mode 100644 index 0000000..4a5aceb --- /dev/null +++ b/visualizing_neur_traces.m @@ -0,0 +1,53 @@ +function visualizing_neur_traces() + +dir_base =fetch1(IMG.Parameters & 'parameter_name="dir_root_save"', 'parameter_value'); +dir_save_figure = [dir_base '\example_traces\']; + + +key.subject_id = 464724; +key.session = 2; +key.session_epoch_number = 2; + +rel_roi = (IMG.ROI-IMG.ROIBad) & key; +rel_data = IMG.ROIdeltaF; +roi_list=fetchn(rel_roi,'roi_number','ORDER BY roi_number'); +chunk_size=500; +for i_chunk=1:chunk_size:numel(roi_list) + roi_interval = [i_chunk, i_chunk+chunk_size]; + if roi_interval(end)>numel(roi_list) + roi_interval(end) = numel(roi_list)+1; + end + try + temp_Fall=cell2mat(fetchn(rel_data & rel_roi & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'dff_trace','ORDER BY roi_number')); + catch + temp_Fall=cell2mat(fetchn(rel_data & rel_roi & key & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'spikes_trace','ORDER BY roi_number')); + end + temp_roi_num=fetchn(rel_roi & sprintf('roi_number>=%d',roi_interval(1)) & sprintf('roi_number<%d',roi_interval(2)),'roi_number','ORDER BY roi_number'); + Fall(temp_roi_num,:)=temp_Fall; +end + +imaging_frame_rate = fetch1(IMG.FOVEpoch & key,'imaging_frame_rate'); + +close all +time_limit = [1400,2400]; %seconds +start_cell = 11; +num_cell_2plot=20 +hold on +time=(1:1:size(Fall,2))/imaging_frame_rate; +for i=start_cell:1:(num_cell_2plot+start_cell-1) + a=Fall(i,:); + a=rescale(a); + plot(time,a+(i+0.5),'-k','LineWidth',0.5) + box off +end +xlim(time_limit) +set(gca,'XtickLabel',[],'Ytick',[],'YtickLabel',[]); + +dir_current_figure = [dir_save_figure]; +if isempty(dir(dir_current_figure)) + mkdir (dir_current_figure) +end +figure_name_out =[ dir_current_figure 'example_trace']; +eval(['print ', figure_name_out, ' -dtiff -r500']); +eval(['print ', figure_name_out, ' -painters -dpdf -cmyk -r500']); +