Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
jries committed Dec 2, 2020
2 parents 0c156ff + 88b6b9e commit 8b94bc9
Show file tree
Hide file tree
Showing 58 changed files with 7,380 additions and 458 deletions.
42 changes: 32 additions & 10 deletions +gui/GuiChannel.m
Expand Up @@ -97,8 +97,8 @@ function initGui(obj)
fn=fieldnames(guimodules.Analyze.render);
h.externalrender.String=[{'Select'},fn];

cfields={ 'colorfield','String', 'locprecnm','znm','PSFxnm','locprecznm','frame','shiftxy'};
obj.synchronizedFields={ 'colorfield', 'locprecnm','znm','PSFxnm','locprecznm','frame','shiftxy'};
cfields={ 'colorfield','String', 'locprecnm','znm','PSFxnm','locprecznm','frame','shiftxy','LLrel'};
obj.synchronizedFields={ 'colorfield', 'locprecnm','znm','PSFxnm','locprecznm','frame','shiftxy','LLrel'};
for k=1:length(cfields)
h.([cfields{k} 'b']).Callback={@obj.updatefields_callback,cfields{k}};
h.([cfields{k} '_min']).Callback={@obj.updatefields_callback,cfields{k}};
Expand Down Expand Up @@ -129,6 +129,9 @@ function initGui(obj)
obj.addSynchronization([obj.layerprefix 'shiftxy_max'],h.shiftxy_max,'String',{@callobj.updatefields_callback,'shiftxy'})
obj.addSynchronization(['frame_min'],[],[],{@callobj.updateframes_callback})
obj.addSynchronization(['frame_max'],[],[],{@callobj.updateframes_callback})

obj.addSynchronization([obj.layerprefix 'renderfield'],h.renderfield,'String')
obj.addSynchronization([obj.layerprefix 'lut'],h.lut,'String')
% obj.addSynchronization([obj.layerprefix 'scalex'],h.scalex,'String')
% obj.addSynchronization([obj.layerprefix 'scaley'],h.scaley,'String')
obj.guihandles=h;
Expand Down Expand Up @@ -256,7 +259,7 @@ function selectedField_callback(obj)
obj.updateLayerField([field '_min'],sfield{2})
obj.updateLayerField([field '_max'],sfield{3})

allfields={'PSFxnm','znm','locprecznm','locprecnm','frame'};
allfields={'PSFxnm','znm','locprecznm','locprecnm','frame','LLrel'};
if any(strcmp(allfields,field))
if ~isempty(sfield{4})
if sfield{4}(1)
Expand Down Expand Up @@ -560,6 +563,10 @@ function renderfield_callback(object, handle,obj)
obj.locData.loc.colorfield=single(obj.locData.loc.(field));
obj.locData.grouploc.colorfield=single(obj.locData.grouploc.(field));
q=myquantilefast(v,[0.02,0.98]);
if q(2)-q(1)==0
q(2)=max(v);
q(1)=min(v);
end
dx=10^floor(log10(abs(q(2))/100));
minv=round(q(1)/dx)*dx;
maxv=round(q(2)/dx)*dx;
Expand Down Expand Up @@ -1047,25 +1054,40 @@ function parchanged_callback(object,event,obj,field)
pard.frame_max.Width=.5;
% pard.frame_max.Optional=true;

pard.LLrelb.object=struct('Style','pushbutton','String','LLrel');
pard.LLrelb.position=[7,3.4];
pard.LLrelb.Width=.6;
% pard.frameb.Optional=true;

pard.LLrel_min.object=struct('Style','edit','String','-1','BackgroundColor',[1 1 1]*.7);
pard.LLrel_min.position=[7,4];
pard.LLrel_min.Width=.5;
% pard.frame_min.Optional=true;

pard.LLrel_max.object=struct('Style','edit','String','0');
pard.LLrel_max.position=[7,4.5];
pard.LLrel_max.Width=.5;


pard.shiftxyb.object=struct('Style','pushbutton','String','shift xyz');
pard.shiftxyb.position=[7,3.4];
pard.shiftxyb.position=[8,3.4];
pard.shiftxyb.Width=.6;
pard.shiftxyb.TooltipString='Shift reconstructed image by this value (nm). Useful to correct for chromatic aberrations.';
pard.shiftxyb.Optional=true;

pard.shiftxy_min.object=struct('Style','edit','String','0');
pard.shiftxy_min.position=[7,4];
pard.shiftxy_min.position=[8,4];
pard.shiftxy_min.Width=1/3;
pard.shiftxy_min.TooltipString=pard.shiftxyb.TooltipString;
pard.shiftxy_min.Optional=true;
pard.shiftxy_max.object=struct('Style','edit','String','0');
pard.shiftxy_max.position=[7,4+1/3];
pard.shiftxy_max.position=[8,4+1/3];
pard.shiftxy_max.Width=1/3;
pard.shiftxy_max.TooltipString=pard.shiftxyb.TooltipString;
pard.shiftxy_max.Optional=true;

pard.shiftxy_z.object=struct('Style','edit','String','0');
pard.shiftxy_z.position=[7,5-1/3];
pard.shiftxy_z.position=[8,5-1/3];
pard.shiftxy_z.Width=1/3;
pard.shiftxy_z.TooltipString=pard.shiftxyb.TooltipString;
pard.shiftxy_z.Optional=true;
Expand Down Expand Up @@ -1097,17 +1119,17 @@ function parchanged_callback(object,event,obj,field)
% pard.scaley.Optional=true;

pard.copyalllayers_button.object=struct('Style','pushbutton','String','-> all L');
pard.copyalllayers_button.position=[9,3.4];
pard.copyalllayers_button.position=[9.3,3.4];
pard.copyalllayers_button.Width=.6;
pard.copyalllayers_button.TooltipString='Copy these parameters to all layers';
pard.copyalllayers_button.Optional=true;
pard.default_button.object=struct('Style','pushbutton','String','Default');
pard.default_button.position=[9,4];
pard.default_button.position=[9.3,4];
pard.default_button.Width=.6;
pard.default_button.TooltipString='Reset to default. ';
pard.default_button.Optional=true;
pard.defaultsave_button.object=struct('Style','pushbutton','String','Save');
pard.defaultsave_button.position=[9,4.6];
pard.defaultsave_button.position=[9.3,4.6];
pard.defaultsave_button.Width=.4;
pard.defaultsave_button.TooltipString='Save default. ';
pard.defaultsave_button.Optional=true;
Expand Down
3 changes: 3 additions & 0 deletions +gui/GuiFormat.m
Expand Up @@ -554,6 +554,9 @@ function redrawov_callback(callobj,event,obj)
files=obj.locData.files.file;
for k=1:length(files)
roi=files(k).info.roi;
if length(roi)<4
continue
end
xexth=[roi(1) roi(1)+roi(3)]* pixrec(1);
yexth=[roi(2) roi(2)+roi(4)]* pixrec(end);
xext(1)=min(xext(1),xexth(1));xext(2)=max(xext(2),xexth(2));
Expand Down
17 changes: 10 additions & 7 deletions +gui/GuiMainSMAP.m
Expand Up @@ -171,13 +171,16 @@ function makeGui(obj)

%add java path to bioformats
bfpath=obj.getGlobalSetting('bioformatspath');
if exist(bfpath,'dir') && ~isdeployed
addpath(bfpath)
try
bfCheckJavaPath;
catch
disp('bioformats not found')
end
bffile=[bfpath filesep 'bioformats_package.jar'];

if exist(bffile,'file') %&& ~isdeployed
javaaddpath(bffile);
% addpath(bfpath)
% try
% bfCheckJavaPath;
% catch
% disp('bioformats not found')
% end
else
disp('bioformats package not found. Please select path to bioformats_package.jar in the Preferences.')
disp('you can download the Matalb toolbox for bioformats at https://www.openmicroscopy.org/bio-formats/downloads/')
Expand Down
4 changes: 2 additions & 2 deletions +gui/GuiRender.m
Expand Up @@ -17,7 +17,7 @@ function makeGui(obj)
h.tab_layer1=uitab(h.layertab,'Title',['Layer' num2str(1)],'Tag','Layer1');

h.tab_addlayer=uitab(h.layertab,'Title','+');
h.reconstruct=uicontrol(obj.handle,'Units','pixels','Position',[15 17,150,35],'String','Render','Tag','reconstructbutton','FontSize',obj.guiPar.fontsize*1.5,...
h.reconstruct=uicontrol(obj.handle,'Units','pixels','Position',[7, 6,150,35],'String','Render','Tag','reconstructbutton','FontSize',obj.guiPar.fontsize*1.5,...
'Callback',@obj.render_callback);

%formatGui
Expand Down Expand Up @@ -221,7 +221,7 @@ function render_notify(obj,object,eventdata)
switch pk.intensitycoding.selection
case {'blinks','√blinks'}
fields{end+1}='numberInGroup';
case {'photons','hotons'}
case {'photons','photons'}
fields{end+1}='phot';
end
% {'xnm','ynm','znm','locprecnm','PSFxnm','phot',pk.renderfield.selection}
Expand Down
11 changes: 8 additions & 3 deletions +gui/SEExploreGui.m
Expand Up @@ -418,9 +418,14 @@ function siteaxclick(data,action,obj)
end

function addcell(data,action,obj)
obj.SE.currentcell.ID=obj.SE.addCell(obj.SE.currentcell);
plotfile(obj,obj.SE.currentfile.ID);
redraw_celllist(obj);
allcellIDs=[obj.SE.cells(:).ID];
if any(obj.SE.currentcell.ID==allcellIDs)
warndlg('cell already exists')
else
obj.SE.currentcell.ID=obj.SE.addCell(obj.SE.currentcell);
plotfile(obj,obj.SE.currentfile.ID);
redraw_celllist(obj);
end
end

function addsite(data,action,obj)
Expand Down
18 changes: 9 additions & 9 deletions +gui/SEGUISettings.m
Expand Up @@ -29,15 +29,15 @@ function make_siteexplorer(data,b,obj)
end
end
end

SEpreview=obj.SE.processors.preview;
SEpreview=obj.SEpreview;
if isempty(SEpreview)||~isvalid(SEpreview.handle)
obj.SE.processors.SEMainGui.make_siteexplorer;
SEpreview=obj.SE.processors.preview;
end
set(SEpreview.handle,'Visible','on')
figure(SEpreview.handle)
showROImanager(obj)
% SEpreview=obj.SE.processors.preview;
% SEpreview=obj.SEpreview;
% if isempty(SEpreview)||~isvalid(SEpreview.handle)
% obj.SE.processors.SEMainGui.make_siteexplorer;
% SEpreview=obj.SE.processors.preview;
% end
% set(SEpreview.handle,'Visible','on')
% figure(SEpreview.handle)
end

function redrawall_callback(a,b,obj)
Expand Down
2 changes: 1 addition & 1 deletion +gui/SEMainGui.m
Expand Up @@ -66,7 +66,7 @@ function makeGui(obj)
obj.children.eval=eval;

%Explorer GUI
obj.make_siteexplorer;
% obj.make_siteexplorer;

se.processors.SEMainGui=obj;
obj.tabgroup=h.sitetabs;
Expand Down
6 changes: 6 additions & 0 deletions +gui/private/makePluginMenu.m
Expand Up @@ -15,6 +15,8 @@
h.hsimplegui=uimenu(hsmap,'Label','Hide advanced controls','Callback',{@simplegui_callback,obj});
% obj.addSynchronization('globalGuiState',[],'String',{@changeglobalGuiState,obj});
h.openfiji=uimenu(hsmap,'Label','Open current image in Fiji','Separator','on','Callback',{@openfiji_callback,obj});
h.ROIManager=uimenu(hsmap,'Label','ROI manager','Callback',{@openroimanager_callback,obj});


h.hexit=uimenu(hsmap,'Label','Quit SMAP','Separator','on','Callback',{@exit_callback,obj});

Expand Down Expand Up @@ -240,6 +242,10 @@ function openfiji_callback(a,b,obj)

end

function openroimanager_callback(a,b,obj)
showROImanager(obj);
end

function helpsmap_callback(a,b,obj,whichone)
switch whichone
case {1,2,3,4,6}
Expand Down
2 changes: 1 addition & 1 deletion +interfaces/LocalizationData.m
Expand Up @@ -370,7 +370,7 @@ function filter(obj,fields,layers,filtermode,minmax)
else
obj.layer(layerh).filter.(fields{f})=anyfilter(obj.loc.(fields{f}),filtermode,minmax);
end
if ~isempty(obj.grouploc)
if ~isempty(obj.grouploc)&&isfield(obj.grouploc,fields{f})
if invert
obj.layer(layerh).groupfilter.(fields{f})=~anyfilter(obj.grouploc.(fields{f}),filtermode,minmax);
else
Expand Down
2 changes: 1 addition & 1 deletion +interfaces/SiteExplorer.m
Expand Up @@ -485,7 +485,7 @@ function plotfile(obj,fileID,hax) %same as cell: store image, temp. check

posh=[pr.sr_pos(1) pr.sr_pos(2) pr.sr_size(1)*2 pr.sr_size(2)*2];
locz=obj.locData.getloc({'xnm','ynm','znm','locprecnm','locprecznm','PSFxnm','intensity_render','phot','numberInGroup',pr.renderfield.selection},'layer',k,'position',posh);
if strcmpi('tiff', pr.rendermode.selection)
if strcmpi('tiff', pr.rendermode.selection)||strcmpi('raw', pr.rendermode.selection)
rawimage=renderSMAP(obj.locData,pr,k);
else
rawimage=renderSMAP(locz,pr,k);
Expand Down
7 changes: 7 additions & 0 deletions Documentation/help/Analyze.sr3D.sendDataToVR.txt
@@ -0,0 +1,7 @@
Genuage

gui:Parameters:
gui:colorfield
gui:intensitycoding
gui:text
gui:tlt
5 changes: 5 additions & 0 deletions Documentation/help/SMAP.Gui.GuiChannel.txt
Expand Up @@ -90,3 +90,8 @@ gui:tiftxt Select which image to display
gui:znm_max z range to display
gui:znm_min=znm_max
gui:znmb=znm_max

gui:LLrelb Filter on normalized (relative) Log Likelihood. The Log Likelihood is a measure for the goodness of fit. You can use
this filter to remove poorly localizied localizations, for instance due to nearby activation of another fluorophore.
gui:LLrel_min=LLrelb
gui:LLrel_max=LLrelb
26 changes: 16 additions & 10 deletions plugins/+Analyze/+calibrate/DECODE_training_estimates.m
Expand Up @@ -238,10 +238,12 @@ function usecurrent_callback(a,b,obj)


js.Simulation.lifetime_avg=stat.lifetime.mu-1;
js.Simulation.intensity_mu_sig= [1;0.2]*stat.photons.meanphot/js.Simulation.lifetime_avg; %30% variation
bgminmax=quantile(locsu.bg,[0.05; 0.95]);
js.Simulation.intensity_mu_sig= [1,0.2]*stat.photons.meanphot/js.Simulation.lifetime_avg; %30% variation
bgminmax=quantile(locsu.bg,[0.05, 0.95]);
dbg=bgminmax(2)-bgminmax(1);
js.Simulation.bg_uniform=bgminmax+ [-1; 1]*dbg*0.2; %set a bit lower to allow for varying background
bgrange=bgminmax+ [-1, 1]*dbg*0.2;
bgrange(1)=max(bgrange(1), quantile(locsu.bg,0.005));
js.Simulation.bg_uniform=bgrange; %set a bit lower to allow for varying background


fi=obj.locData.files.file(1).info;
Expand All @@ -261,9 +263,9 @@ function usecurrent_callback(a,b,obj)
cnm=obj.getPar('cam_pixelsize_nm');
areapix=area/cnm(1)/cnm(end);
density=length(locs.frame)/areapix/(max(locs.frame)-min(locs.frame)); %in locs per pix^2 per frame
emitters=density*64*64;
disp(['emitters in 64x64 per frame: ' num2str(emitters)]);
js.Simulation.density=density;
emitters=density*40*40;
disp(['emitters in 40x40 per frame: ' num2str(emitters)]);
js.SMAP.density=density;
[expdir,js.SMAP.name]=fileparts(obj.locData.files.file(1).name);

if isempty(js.InOut.calibration_file)
Expand Down Expand Up @@ -331,17 +333,21 @@ function finalizejson(obj)

function setz(obj)
[locs,~,hroi]=obj.locData.getloc('znm','layer',find(obj.getPar('sr_layerson')),'position','roi','grouping','grouped');
% obj.yamlpar.SMAP.zrange_nm=[-750, 750];
if isempty(locs.znm)
return
zminmax=[-750, 750];

else
z=quantile(locs.znm,[0.05,0.95]);
dz=z(2)-z(1);
zminmax=z+dz*0.25;
end
z=quantile(locs.znm,[0.1 0.9]);
zminmax=z*1.5;
calf=obj.yamlpar.InOut.calibration_file;
if ~isempty(calf)
l=load(calf);
zr=(l.parameters.fminmax(2)-l.parameters.fminmax(1))*l.parameters.dz/2;
zminmax(1)=max(zminmax(1),-zr);
zminmax(2)=max(zminmax(2),zr);
zminmax(2)=min(zminmax(2),zr);
obj.yamlpar.SMAP.zrange_nm=zminmax;
end
end
Expand Down

0 comments on commit 8b94bc9

Please sign in to comment.