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 17, 2020
2 parents 8b94bc9 + c33fad2 commit 91e08dd
Show file tree
Hide file tree
Showing 7 changed files with 295 additions and 90 deletions.
56 changes: 56 additions & 0 deletions other/BP_Gauss_analysis.m
@@ -0,0 +1,56 @@

% pixs=100;
dz=10;
zoff=750;

%% BEADS: calibrate sx
pixs=g.locData.files.file(1).info.cam_pixelsize_um(1)*1000;
loc=g.locData.getloc({'PSFxnm','PSFynm','frame'},'layer',1,'position','roi');
indg=loc.PSFxnm>0.1&loc.PSFynm>0.1;
sx=loc.PSFxnm(indg)/pixs;
sy=loc.PSFynm(indg)/pixs;


frame=loc.frame(indg);
z=frame*dz-zoff;
figure(88);
plot(frame,sx,'+',frame,sy,'.')

ds=sx.^2-sy.^2;
figure(89)
plot(frame,ds,'.')

range=[44,100];

inr=frame>range(1)&frame<range(2);

figure(89)
hold off
plot(ds(inr),z(inr),'.')

calbead=fit(ds(inr),z(inr),'smoothingspline','SmoothingParam',.1);
hold on
nds=min(ds(inr)):0.1:max(ds(inr));
plot(nds,calbead(nds))

maxrangeds=[min(ds(inr)) max(ds(inr))];
%%
pfad=[fileparts(g.locData.files.file(1).name) filesep 'beadcal_Gauss_smoothingspline'];
save(pfad,'calbead','maxrangeds')

%% data: calculate z
pixs=g.locData.files.file(1).info.cam_pixelsize_um(1)*1000;
outz=1000;
sx=g.locData.loc.PSFxnm/pixs;
sy=g.locData.loc.PSFynm/pixs;
ds=sx.^2-sy.^2;
z=calbead(ds);
g.locData.loc.znm=z;

outofrange=ds<maxrangeds(1) | ds>maxrangeds(2) | sx==0 | sy==0;
g.locData.loc.znm(outofrange)=outz;
g.locData.regroup;


%% data: average x,y
%use combine channels plugin
93 changes: 93 additions & 0 deletions plugins/+Analyze/+cluster/ClusterStatistics.m
@@ -0,0 +1,93 @@
classdef ClusterStatistics<interfaces.DialogProcessor
% pair correlation functions calculated according to:
% Sengupta, Prabuddha, Tijana Jovanovic-Talisman, Dunja Skoko, Malte Renz,
% Sarah L Veatch, and Jennifer Lippincott-Schwartz. “Probing Protein Heterogeneity
% in the Plasma Membrane Using PALM and Pair Correlation Analysis.”
% Nature Methods 8 (September 18, 2011): 969.
properties
resultstable
end
methods
function obj=ClusterStatistics(varargin)
obj@interfaces.DialogProcessor(varargin{:}) ;
obj.inputParameters={'sr_pixrec','numberOfLayers','sr_pos','sr_size','layers','sr_layerson'};
% obj.history=true;
obj.showresults=true;
end

function out=run(obj,p)
out=[];
layers=find(obj.getPar('sr_layerson'));
locs=obj.locData.getloc({'xnm','ynm','znm','clusterindex'},'layer',layers,'Position','roi');
clusterinds=unique(locs.clusterindex(locs.clusterindex>0));
cind=1;
ax=obj.initaxis('boundaries');
hold(ax,'off')
plot(ax,locs.xnm,locs.ynm,'b.');
for k=1:length(clusterinds)
inc=locs.clusterindex==clusterinds(k);
if sum(inc)<p.minloc
continue
end
xh=double(locs.xnm(inc));yh=double(locs.ynm(inc));zh=double(locs.znm(inc));
numlocs(cind,1)=sum(inc);
xpos(cind,1)=mean(xh);
ypos(cind,1)=mean(yh);
zpos(cind,1)=mean(zh);
[kc3,volumeCHull(cind,1)]=convhull(xh,yh,zh);
[kc2,areaCHull(cind,1)]=convhull(xh,yh);
[kb3,volumeB(cind,1)]=boundary(xh,yh,zh);
[kb2,areaB(cind,1)]=boundary(xh,yh);
cID(cind,1)=clusterinds(k);
cind=cind+1;
hold(ax,'on')
plot(ax,xh,yh,'+')

plot(ax,xh(kc2),yh(kc2),'r')
plot(ax,xh(kb2),yh(kb2),'m')
end
obj.resultstable=table(cID,numlocs,areaCHull,volumeCHull,areaB,volumeB,xpos,ypos,zpos);

end
function pard=guidef(obj)
pard=guidef(obj);
end
function exportbutton(obj,a,b)
tableo=obj.resultstable;
fn=obj.getPar('lastSMLFile');
if ~isempty(fn)
fno=strrep(fn,'_sml.mat','_cluster.csv');
else
fno='*.csv';
end
[f,p]=uiputfile(fno);
if f
writetable(tableo,[p f])
end

end

end
end




function pard=guidef(obj)
pard.minloct.object=struct('String','min number of locs per cluster','Style','text');
pard.minloct.position=[1,1];
pard.minloct.Width=2;
pard.minloc.object=struct('String','10','Style','edit');
pard.minloc.position=[1,3];
pard.minloc.Width=0.5;

pard.export.object=struct('String','export','Style','pushbutton','Callback',@obj.exportbutton);
pard.export.position=[2,1];
pard.export.Width=1;


pard.plugininfo.name='Cluster Statistics';
pard.plugininfo.description= 'Calculates spatial statistics based on pair correlation and Ripleys K function. pair correlation functions calculated according to: Sengupta, Prabuddha, Tijana Jovanovic-Talisman, Dunja Skoko, Malte Renz, Sarah L Veatch, and Jennifer Lippincott-Schwartz. “Probing Protein Heterogeneity Nature Methods 8 (September 18, 2011): 969.';
pard.plugininfo.type='ProcessorPlugin';

end
61 changes: 48 additions & 13 deletions plugins/+Analyze/+sr3D/Biplane_getPSFxy.m
Expand Up @@ -17,9 +17,20 @@
out.error='selected transformation file does not have a valid transformation';
return
end
file=obj.locData.files.file(p.dataselect.Value);

p.datapart.selection='all';
loc=get2ClocPSF(obj.locData.loc,tload.transformation,file,p);
if p.allfiles
loc=obj.locData.loc;
keepold=true;
for k=1:length(obj.locData.files.file)
k
loc=get2ClocPSF(loc,tload.transformation,obj.locData.files.file(k),p,keepold);
end
else
file=obj.locData.files.file(p.dataselect.Value);
keepold=false;
loc=get2ClocPSF(obj.locData.loc,tload.transformation,file,p,keepold);
end
obj.locData.loc=copyfields(obj.locData.loc,loc);
obj.locData.regroup;
obj.setPar('locFields',fieldnames(obj.locData.loc))
Expand Down Expand Up @@ -53,21 +64,43 @@ function loadbutton(obj,a,b)
end


function loco=get2ClocPSF(loc,transform,file,p)
function loco=get2ClocPSF(loc,transform,file,p,keepold)

p.datapart.selection='all (T->R)';
loct=apply_transform_locs(loc,transform,file,p);
p.datapart.selection='all (T->R)';
% p.datapart.selection='target';
infi=file.number==loc.filenumber;

inref=transform.getRef(loc.xnm,loc.ynm);
locref=copystructReduce(loc,infi&inref);
locth=copystructReduce(loc,infi&~inref);
loct=apply_transform_locs(locth,transform,file,p);

% only valid parts?
[iA,iB,uiA,uiB]=matchlocsall(renamefields(loc),renamefields(loct),0,0,1000);
[iA,iB,uiA,uiB]=matchlocsall(renamefields(locref),renamefields(loct),0,0,1000);
length(iA)/(length(uiA)+length(uiB))
loco.PSFxnm_old=loc.PSFxnm;
loco.PSFxnm=zeros(size(loc.xnm),'single');
loco.PSFynm=zeros(size(loc.xnm),'single');
loco.PSFxnm(iA)=loc.PSFxnm(iA);
loco.PSFynm(iA)=loc.PSFxnm(iB);
loco.PSFxnm(iB)=loc.PSFxnm(iA);
loco.PSFynm(iB)=loc.PSFxnm(iB);
inffr=find(infi&inref);
infft=find(infi&~inref);


if ~keepold
loco.PSFxnm_old=loc.PSFxnm;
loco.PSFxnm=zeros(size(loc.xnm),'single');
loco.PSFynm=zeros(size(loc.xnm),'single');
else
loco=loc;
if ~isfield(loco,'PSFxnm')
loco.PSFxnm=zeros(size(loc.xnm),'single');
end
if ~isfield(loco,'PSFynm')
loco.PSFynm=zeros(size(loc.xnm),'single');
end
end


loco.PSFxnm(inffr(iA))=loc.PSFxnm(inffr(iA));
loco.PSFynm(inffr(iA))=loc.PSFxnm(infft(iB));
loco.PSFxnm(infft(iB))=loc.PSFxnm(inffr(iA));
loco.PSFynm(infft(iB))=loc.PSFxnm(infft(iB));
end

function loco=renamefields(loci)
Expand All @@ -84,6 +117,8 @@ function loadbutton(obj,a,b)
pard.dataselect.object=struct('Style','popupmenu','String','File');
pard.dataselect.position=[2,1];

pard.allfiles.object=struct('Style','checkbox','String','all files');
pard.allfiles.position=[2,2];
% pard.datapart.object=struct('Style','popupmenu','String','all|left|right|top|bottom');
% pard.datapart.position=[3,1];

Expand Down
8 changes: 4 additions & 4 deletions plugins/+Process/+Register/CombineChannels.m
Expand Up @@ -45,13 +45,13 @@
unmatchedB=copystructReduce(loctt,uiB);
fn=fieldnames(loc);
if isfield(matchedA,'locprecnm')
wA=1./matchedA.locprecnm;
wB=1./matchedB.locprecnm;
wA=1./matchedA.locprecnm.^2;
wB=1./matchedB.locprecnm.^2;
else
photA=matchedA.phot;
photB=matchedB.phot;
wA=sqrt(photA);
wB=sqrt(photB);
wA=(photA);
wB=(photB);
end
for k=1:length(fn)
switch fn{k}
Expand Down
4 changes: 2 additions & 2 deletions plugins/+WorkflowModules/+Fitters/MLE_global_spline.m
Expand Up @@ -253,8 +253,8 @@ function loadscmos_callback(a,b,obj)
switch fitpar.mainchannel
case 1
locs.([names{k} 'err'])=1./sqrt(1./ve(:,1).^2+1./ve(:,2).^2)*sqrt(2);
ve(:,1)=ve(:,1)/errfactor(1);
ve(:,2)=ve(:,2)/errfactor(2);
ve(:,1)=(ve(:,1)/errfactor(1)).^2; %use as weights the correct 1/sigma^2
ve(:,2)=(ve(:,2)/errfactor(2)).^2;
locs.(names{k})=sum(v./ve,2)./sum(1./ve,2); %average based on CRLB before weighting
case 2
locs.(names{k})=v(:,1);
Expand Down

0 comments on commit 91e08dd

Please sign in to comment.