diff --git a/leversc/src/MATLAB/@leversc/show.m b/leversc/src/MATLAB/@leversc/show.m index 2ad1d3bec242fb393e668cc2f3708f2d0a6cd036..5745c1839fe03bcf72e67d1e787262c9c929e7fc 100644 --- a/leversc/src/MATLAB/@leversc/show.m +++ b/leversc/src/MATLAB/@leversc/show.m @@ -128,8 +128,8 @@ end if exist('strDB','var') && ~isempty(strDB) elec_cmd = [elec_cmd ' --leverFile=' strDB ' ']; end -cmd = [elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &'] -system(cmd,'PATH',px); +cmd = ['export PATH=' px ' ; ' elec_cmd ' --port=' num2str(port) ' --title="figure ' num2str(fignum) '"' ' &'] +system(cmd); end function launch_electron_windows(port,fignum,workdir, leverpath, strDB) diff --git a/matlab/+SSF/draw_ssf_kymo.m b/matlab/+SSF/draw_ssf_kymo.m index 865b8dcf8704fb05b5564a6b414d1e459a7aaf8f..55e5f5633498207d30177978757f84e541b4323c 100644 --- a/matlab/+SSF/draw_ssf_kymo.m +++ b/matlab/+SSF/draw_ssf_kymo.m @@ -1,22 +1,21 @@ -function imq = draw_ssf_kymo(strKymoFile) +function imq = draw_ssf_kymo(strKymoFile, targetChannels, clipLimits,nKeep) -targetChannels = 1; imKymo = SSF.loadImage(strKymoFile,targetChannels); +if nKeep>0 + imKymo(imKymo<0) = 0; +end +if nKeep<0 + imKymo(imKymo>0) = 0; + imKymo = abs(imKymo); +end -imp = imKymo; -imp(imp<0)=0; -imp = max(imp,[],1); -imp = SSF.quantize8(imp); - -imn = imKymo; -imn(imn>0)=0; -imn=abs(imn); -imn = max(imn,[],1); -imn = SSF.quantize8(imn); - -imq(:,:,1) = squeeze(imp); -imq(:,:,2) = squeeze(imn); -imq(:,:,3) = 0*imp; +[~,imp,imn] = LoG.separateLoG(imKymo); +imp = squeeze(max(imp,[],1)); +imn = squeeze(max(imn,[],1)); +imProject = max(imp,imn); +imProject(imn>imp) = imProject(imn>imp) .* -1; +imq = SSF.quantize8(imProject,clipLimits); +return diff --git a/matlab/+SSF/draw_ssf_ncd.m b/matlab/+SSF/draw_ssf_ncd.m index 4c4acb5b8ef8caf077c51efbc45355a800b9dbcc..b4d49c1834c0cb95b1e9468064fa690e719ea440 100644 --- a/matlab/+SSF/draw_ssf_ncd.m +++ b/matlab/+SSF/draw_ssf_ncd.m @@ -1,12 +1,13 @@ % load('agne_72_8bpp.mat') +ROOT = '/g/leverjs/Olivier/Agne/march_2023_20x'; flist = dir(fullfile(ROOT,'*.LEVER')); -% className = {}; -% for ff=1:length(flist) -% cn = regexp(flist(ff).name,'(\d+-\d+-\d+)_.*(\d\d)_ori*','tokens'); -% cn = [cn{1}{1} '_' cn{1}{2}]; -% className{ff} = classMap(cn); -% end +className = {}; +for ff=1:length(flist) + cn = regexp(flist(ff).name,'(\d+-\d+-\d+)_.*(\d\d)_ori*','tokens'); + cn = [cn{1}{1} '_' cn{1}{2}]; + className{ff} = classMap(cn); +end % targetClass = {'AKT1_E17K','WT','PIK3CA_E545K'} % idx = find(cellfun(@(x) ~isempty(find(strcmp(targetClass,x))),className)); % A=d(idx,idx); diff --git a/matlab/+SSF/getClipLimits.m b/matlab/+SSF/getClipLimits.m new file mode 100644 index 0000000000000000000000000000000000000000..dbdc3bde544c0ccacf4d7743ceab35981e2070fa --- /dev/null +++ b/matlab/+SSF/getClipLimits.m @@ -0,0 +1,39 @@ +% map [-1,1] kymographs to color space [0,255] +% +function clipLimits = getClipLimits(flist,targetChannelNumbers,clipRange,nKeep) + +if ~exist('clipRange','var') + clipRange= [2.5,97.5]; +end + +p = ljsStartParallel(); +kymoPixels = {}; +parfor ff=1:length(flist) + kp = {}; + for c = 1:length(targetChannelNumbers) + strDB_ff = fullfile(flist(ff).folder,flist(ff).name); + im_ff = SSF.loadImage(strDB_ff,targetChannelNumbers(c)); + if nKeep>0 + im_ff(im_ff<0)=0; + end + if nKeep<0 + im_ff(im_ff>0)=0; + im_ff = abs(im_ff); + end + kp{c} = im_ff(find(im_ff)); + kymoPixels{ff} = kp; + end +end +kymoPixels = vertcat(kymoPixels{:}); + +clipLimits = []; +for c = 1:size(kymoPixels,2) + % anything other than [0,1] gets set to the corresponding percentile + idx = find(clipRange); + if ~isempty(idx) + px = kymoPixels{:,c}; + clipLimits(c,idx) = [prctile(px,clipRange(idx))]; + end + clipLimits(c,find(clipRange==0)) = 0; +end +4; \ No newline at end of file diff --git a/matlab/+SSF/go_ssf_ncd.m b/matlab/+SSF/go_ssf_ncd.m index f6dd59cc9741d5c09589aa4788ff92b16d8d9784..b81b80177574a705eb463867d42667361402312b 100644 --- a/matlab/+SSF/go_ssf_ncd.m +++ b/matlab/+SSF/go_ssf_ncd.m @@ -4,7 +4,7 @@ % AKT_CHANNEL = 2; % H2B_CHANNEL = 3; % targetChannels = [ERK_CHANNEL,AKT_CHANNEL]; -function d=go_ssf_ncd(kROOT,targetChannels) +function d=go_ssf_ncd(kROOT,targetChannels,clipRange, nKeep) tStart = tic(); @@ -14,16 +14,7 @@ kymoPixels = {}; p = ljsStartParallel(); % -parfor ff=1:length(flist) - strDB_ff = fullfile(flist(ff).folder,flist(ff).name); - im_ff = SSF.loadImage(strDB_ff,targetChannels); - kp = im_ff(find(im_ff)); - kymoPixels{ff} = kp; -end -kymoPixels = vertcat(kymoPixels{:}); -% erkClipLimits = [prctile(kymoPixels,2.5),prctile(kymoPixels,97.5)] -erkClipLimits = [0,prctile(kymoPixels,99)]; -% erkClipLimits = [-1,1]; +clipLimits = SSF.getClipLimits(flist,targetChannels,clipRange,nKeep); % cmdList = NCD.dParallelCommandList(ones(length(flist)),p.NumWorkers); @@ -41,10 +32,10 @@ parfor i=1:H if 0 == ff || 0 == gg continue end - strDB_ff = fullfile(flist(ff).folder,flist(ff).name); + strDB_ff = fullfile(flist(ff).folder, flist(ff).name); if ~strcmp(strDB_ff,str_ff_prev) - im_ff = SSF.loadImage(strDB_ff,targetChannels); - im_ff = SSF.quantize8(im_ff,erkClipLimits); + im_ff = SSF.loadImage(strDB_ff, targetChannels, clipRange, nKeep); + im_ff = SSF.quantize8(im_ff,clipLimits); str_ff_prev = strDB_ff; end @@ -53,8 +44,8 @@ parfor i=1:H dxx(i,j) = d1; else strDB_gg = fullfile(flist(gg).folder,flist(gg).name); - im_gg = SSF.loadImage(strDB_gg,targetChannels); - im_gg = SSF.quantize8(im_gg,erkClipLimits); + im_gg = SSF.loadImage(strDB_gg,targetChannels, clipRange, nKeep); + im_gg = SSF.quantize8(im_gg,clipLimits); d1 = SSF.ncd_ssf_volume(im_ff,im_gg); d2 = SSF.ncd_ssf_volume(im_gg,im_ff); diff --git a/matlab/+SSF/loadImage.m b/matlab/+SSF/loadImage.m index 9e149c8d140985dc9473b36273bbf4483b2c4841..77ac02a6e39cee70fd1ff3e4a24d18fd16c66e14 100644 --- a/matlab/+SSF/loadImage.m +++ b/matlab/+SSF/loadImage.m @@ -1,5 +1,5 @@ -function im = loadImage(strDB,channelList) +function im = loadImage(strDB, channelList, clipRange, nKeep) if ~exist('bDouble','var') bDouble = false; @@ -9,3 +9,16 @@ time = 1; % kymo is single time point for c=1:length(channelList) im(:,:,:,c) = leversc.loadImage(strDB,time,channelList(c)); end +% HACK ACK HACK +im = im(:,:,:,:); + +if ~exist('clipRange','var') + return; +end +if nKeep > 0 + im(im<0) = 0; +end +if nKeep < 0 + im(im>0) = 0; + im = abs(im); +end diff --git a/matlab/+SSF/ssf_channel.m b/matlab/+SSF/ssf_channel.m index 70e0970e191a7a460837eb3a8e2865a4bf566767..80157795eb1745924f551e87a6a4b0a0b987bc67 100644 --- a/matlab/+SSF/ssf_channel.m +++ b/matlab/+SSF/ssf_channel.m @@ -24,7 +24,9 @@ end imSSF = zeros(szim(1),szim(2)); for i=1:length(cellList) if is3D(CONSTANTS) - cx = centroidMap(cellList(i).cellID); +% cx = centroidMap(cellList(i).cellID); + cx = round(cellList(i).centroid); + cx = [cx(2),cx(1)]; % [y,x] else cx = round(cellList(i).centroid); cx = [cx(2),cx(1)]; % [y,x] @@ -46,7 +48,9 @@ for i=1:length(cellList) ratio = min(ratio,1); ratio = max(ratio,-1); - imSSF(cx(1),cx(2)) = ratio; + if abs(imSSF(cx(1),cx(2))) < abs(ratio) + imSSF(cx(1),cx(2)) = ratio; + end end diff --git a/matlab/+SSF/velocity_kymo.m b/matlab/+SSF/velocity_kymo.m index cf5dd267069bfd9269829ea0a00a3d9045580442..2f138351f8528dd332329aadc7418e0c8937bbe2 100644 --- a/matlab/+SSF/velocity_kymo.m +++ b/matlab/+SSF/velocity_kymo.m @@ -6,7 +6,7 @@ szIm = Helpers.volumeSize(CONSTANTS); if bDownscale szIm(1:2) = round(szIm(1:2) ./ 2); end -im_v_kymo = zeros([szIm(2),szIm(1),szIm(5)]); +im_v_kymo = zeros([szIm(1),szIm(2),szIm(5)]); for time = 1:CONSTANTS.imageData.NumberOfFrames cmd = ['select srcCell.centroid as src_centroid,srcCell.time src_time, srcCell.maxRadius as src_maxRadius, '...