From 47f69f64e5fc23fc09b87a428c0edfc0aa2076dc Mon Sep 17 00:00:00 2001
From: ac <andrew.r.cohen@drexel.edu>
Date: Mon, 13 Nov 2023 08:22:51 -0500
Subject: [PATCH] SSF channelDistance

---
 .../setPixelPhysicalSizeFolderRecursive.m     |  2 +-
 matlab/+SSF/channel_distances.m               | 48 +++++++++++++++++++
 matlab/+SSF/getClipLimits.m                   | 20 +++++---
 matlab/+SSF/getClipQuantiles.m                | 20 ++++----
 matlab/+SSF/quantize8.m                       |  8 ----
 5 files changed, 73 insertions(+), 25 deletions(-)
 create mode 100644 matlab/+SSF/channel_distances.m

diff --git a/matlab/+Import/setPixelPhysicalSizeFolderRecursive.m b/matlab/+Import/setPixelPhysicalSizeFolderRecursive.m
index 0d8e4890..c9ed197b 100644
--- a/matlab/+Import/setPixelPhysicalSizeFolderRecursive.m
+++ b/matlab/+Import/setPixelPhysicalSizeFolderRecursive.m
@@ -6,7 +6,7 @@ if ~all(size(physicalSize)==[1,3])
     return
 end
 
-flist=dir(fullfile(folder,'**\*.LEVER'));
+flist=dir(fullfile(folder,'**/*.LEVER'));
 for ff=1:length(flist)
     strDB=fullfile(flist(ff).folder,flist(ff).name);
     conn = database(strDB, '','', 'org.sqlite.JDBC', 'jdbc:sqlite:');
diff --git a/matlab/+SSF/channel_distances.m b/matlab/+SSF/channel_distances.m
new file mode 100644
index 00000000..557fc9d3
--- /dev/null
+++ b/matlab/+SSF/channel_distances.m
@@ -0,0 +1,48 @@
+% kymograph channels -- check CONSTANTS numbers may vary
+% ERK_CHANNEL = 1;
+% AKT_CHANNEL = 2;
+% VELOCITY_CHANNEL = 4; 
+function res = channel_distances(flist,classList,channel1,channel2,clipLimits)
+res=table();
+
+if ~exist('clipLimits','var') || isempty(clipLimits)
+    clipLimits = SSF.getClipLimits(flist,[channel1,channel2]);
+end
+
+parfor ff = 1:length(flist)    
+    class = classList{ff};
+    
+    nr = table();
+    
+    strDB = fullfile(flist(ff).folder,flist(ff).name);
+    im1 = leversc.loadImage(strDB,1,channel1);  
+    im2= leversc.loadImage(strDB,1,channel2);   
+    
+    im1 = SSF.quantize8(im1,clipLimits{ff,1});
+    im2 = SSF.quantize8(im2,clipLimits{ff,2});
+    
+    d1 = SSF.ncd_ssf_volume(im1,im2);
+    d2 = SSF.ncd_ssf_volume(im2,im1);
+    d = min(d1,d2);
+    
+    nr.idx = ff;
+    nr.class = {class};
+    nr.d = d;
+    res(ff,:) = nr;
+end
+res.Properties.VariableNames = {'idx','class','d'};
+res.class=cellfun(@upper,res.class,'UniformOutput',false);
+boxplot(res.d,res.class,'notch','on');
+ylabel('NCD( Akt_{SSF}, Velocity_{SSF} )','FontSize',12)
+xlabel('experimental condition','FontSize',12)
+set(gcf,'color','w')
+4;
+
+% 
+% classes = unique(res.class);
+% mu=[];stderr=[];
+% for i = 1:length(classes)
+%     idx = find(strcmp(res.class,classes(i)));
+%     mu(i) = mean(res.d(idx));
+%     stderr(i) = std(res.d(idx))/sqrt(length(idx));
+% end
\ No newline at end of file
diff --git a/matlab/+SSF/getClipLimits.m b/matlab/+SSF/getClipLimits.m
index 5eb239d7..65359c1f 100644
--- a/matlab/+SSF/getClipLimits.m
+++ b/matlab/+SSF/getClipLimits.m
@@ -24,14 +24,22 @@ parfor ff=1:length(flist)
             im_ff = abs(im_ff);
         end
         px = im_ff(find(im_ff));
-        kymoPixels{ff} = px;
+        kymoPixels{ff}{c} = px;
     end    
 end 
 
 kymoPixels = vertcat(kymoPixels{:});
-
-clip_neg = SSF.getClipQuantiles(kymoPixels(kymoPixels<0),127);
-clip_pos = SSF.getClipQuantiles(kymoPixels(kymoPixels>0),127);
-clipLimits = [clip_neg,clip_pos];
-clipLimits = repmat({clipLimits},length(flist),1);
+for c = 1:size(kymoPixels,2)
+    kp = kymoPixels(:,c);
+    kp = kp{:};
+    if all(kp>0) || all(kp<0)
+        cx = SSF.getClipQuantiles(kp,254);
+    else
+        clip_neg = SSF.getClipQuantiles(kp(kp<0),127);
+        clip_pos = SSF.getClipQuantiles(kp(kp>0),127);
+        cx = [clip_neg,clip_pos];
+    end  
+    clipLimits{c} = cx;
+end
+clipLimits = repmat(clipLimits,length(flist),1);
 4;
diff --git a/matlab/+SSF/getClipQuantiles.m b/matlab/+SSF/getClipQuantiles.m
index b6cf656d..37795657 100644
--- a/matlab/+SSF/getClipQuantiles.m
+++ b/matlab/+SSF/getClipQuantiles.m
@@ -1,12 +1,12 @@
 function clipLimits = getClipQuantiles(voxels,nQuant)
-% 
-% mx = mean(voxels);
-% sx = std(voxels);
-% cl = [mx-sx, mx+sx];
-% q1 = length(find(voxels<cl(1)))./length(voxels);
-% q2 = 1 - length(find(voxels>cl(2)))./length(voxels);
-% pxTarget = linspace(q1,q2,nQuant);
-% clipLimits = quantile(voxels,pxTarget);
 
-pxTarget = linspace(2.5,97.5,nQuant);
-clipLimits = prctile(voxels,pxTarget);
+mx = mean(voxels);
+sx = std(voxels);
+cl = [mx-sx, mx+sx];
+q1 = length(find(voxels<cl(1)))./length(voxels);
+q2 = 1 - length(find(voxels>cl(2)))./length(voxels);
+pxTarget = linspace(q1,q2,nQuant);
+clipLimits = quantile(voxels,pxTarget);
+
+% pxTarget = linspace(2.5,97.5,nQuant);
+% clipLimits = prctile(voxels,pxTarget);
diff --git a/matlab/+SSF/quantize8.m b/matlab/+SSF/quantize8.m
index 1dbd08aa..b74a16a4 100644
--- a/matlab/+SSF/quantize8.m
+++ b/matlab/+SSF/quantize8.m
@@ -7,13 +7,5 @@ if isa(im,'uint8')
 end
 
 im = uint8(imquantize(im,clipLimits));
-% 
-% for c = 1:size(im,4)
-%     im(:,:,:,c) = max(im(:,:,:,c),clipLimits(c,1));
-%     im(:,:,:,c) = min(im(:,:,:,c),clipLimits(c,2));
-%     im(:,:,:,c) = (im(:,:,:,c) - clipLimits(c,1)) ./ (clipLimits(c,2) - clipLimits(c,1));
-% end
-% im = im2uint8(im);
-
 im = max(im,1);
 im(0 == im_in) = 0;
\ No newline at end of file
-- 
GitLab