From a0ebdde48d55c6a7d441c296050dd822466fd568 Mon Sep 17 00:00:00 2001
From: ac <andrew.r.cohen@drexel.edu>
Date: Fri, 26 Jul 2024 14:12:39 -0400
Subject: [PATCH] L vs. R src/MATLAB

---
 src/{ => MATLAB}/+RSF/checkMetaTiming.m      |  0
 src/{ => MATLAB}/+RSF/chooseImageSamples.m   |  0
 src/{ => MATLAB}/+RSF/clipRSF.m              |  0
 src/{ => MATLAB}/+RSF/cohortOCT.m            |  0
 src/{ => MATLAB}/+RSF/corrOCT.m              |  0
 src/{ => MATLAB}/+RSF/draw1RSF.m             |  0
 src/{ => MATLAB}/+RSF/drawOCT.m              |  0
 src/{ => MATLAB}/+RSF/drawPatients.m         |  0
 src/{ => MATLAB}/+RSF/drawProgressionStats.m |  0
 src/{ => MATLAB}/+RSF/drawRSF.m              |  0
 src/{ => MATLAB}/+RSF/drawRSF_lever.m        |  0
 src/{ => MATLAB}/+RSF/getDeltaTstats.m       |  0
 src/{ => MATLAB}/+RSF/getImRSF.m             |  0
 src/{ => MATLAB}/+RSF/getImf.m               |  9 ++-
 src/{ => MATLAB}/+RSF/getMetadata.m          |  0
 src/{ => MATLAB}/+RSF/getPatientMetadata.m   |  0
 src/{ => MATLAB}/+RSF/imPreProcess.m         | 27 ++-------
 src/{ => MATLAB}/+RSF/optimizeDeltaTstats.m  |  0
 src/{ => MATLAB}/+RSF/pickMinVelocityStack.m |  0
 src/{ => MATLAB}/+RSF/pickRSFradius.m        |  0
 src/{ => MATLAB}/+RSF/platemetric.m          |  0
 src/{ => MATLAB}/+RSF/progressionStats.m     |  0
 src/{ => MATLAB}/+RSF/thresholdRetinalOCT.m  |  0
 src/MATLAB/metadata/getMetaOCT.m             | 31 ++++++++++
 src/MATLAB/metadata/goLR.m                   | 61 ++++++++++++++++++++
 25 files changed, 104 insertions(+), 24 deletions(-)
 rename src/{ => MATLAB}/+RSF/checkMetaTiming.m (100%)
 rename src/{ => MATLAB}/+RSF/chooseImageSamples.m (100%)
 rename src/{ => MATLAB}/+RSF/clipRSF.m (100%)
 rename src/{ => MATLAB}/+RSF/cohortOCT.m (100%)
 rename src/{ => MATLAB}/+RSF/corrOCT.m (100%)
 rename src/{ => MATLAB}/+RSF/draw1RSF.m (100%)
 rename src/{ => MATLAB}/+RSF/drawOCT.m (100%)
 rename src/{ => MATLAB}/+RSF/drawPatients.m (100%)
 rename src/{ => MATLAB}/+RSF/drawProgressionStats.m (100%)
 rename src/{ => MATLAB}/+RSF/drawRSF.m (100%)
 rename src/{ => MATLAB}/+RSF/drawRSF_lever.m (100%)
 rename src/{ => MATLAB}/+RSF/getDeltaTstats.m (100%)
 rename src/{ => MATLAB}/+RSF/getImRSF.m (100%)
 rename src/{ => MATLAB}/+RSF/getImf.m (74%)
 rename src/{ => MATLAB}/+RSF/getMetadata.m (100%)
 rename src/{ => MATLAB}/+RSF/getPatientMetadata.m (100%)
 rename src/{ => MATLAB}/+RSF/imPreProcess.m (51%)
 rename src/{ => MATLAB}/+RSF/optimizeDeltaTstats.m (100%)
 rename src/{ => MATLAB}/+RSF/pickMinVelocityStack.m (100%)
 rename src/{ => MATLAB}/+RSF/pickRSFradius.m (100%)
 rename src/{ => MATLAB}/+RSF/platemetric.m (100%)
 rename src/{ => MATLAB}/+RSF/progressionStats.m (100%)
 rename src/{ => MATLAB}/+RSF/thresholdRetinalOCT.m (100%)
 create mode 100644 src/MATLAB/metadata/getMetaOCT.m
 create mode 100644 src/MATLAB/metadata/goLR.m

diff --git a/src/+RSF/checkMetaTiming.m b/src/MATLAB/+RSF/checkMetaTiming.m
similarity index 100%
rename from src/+RSF/checkMetaTiming.m
rename to src/MATLAB/+RSF/checkMetaTiming.m
diff --git a/src/+RSF/chooseImageSamples.m b/src/MATLAB/+RSF/chooseImageSamples.m
similarity index 100%
rename from src/+RSF/chooseImageSamples.m
rename to src/MATLAB/+RSF/chooseImageSamples.m
diff --git a/src/+RSF/clipRSF.m b/src/MATLAB/+RSF/clipRSF.m
similarity index 100%
rename from src/+RSF/clipRSF.m
rename to src/MATLAB/+RSF/clipRSF.m
diff --git a/src/+RSF/cohortOCT.m b/src/MATLAB/+RSF/cohortOCT.m
similarity index 100%
rename from src/+RSF/cohortOCT.m
rename to src/MATLAB/+RSF/cohortOCT.m
diff --git a/src/+RSF/corrOCT.m b/src/MATLAB/+RSF/corrOCT.m
similarity index 100%
rename from src/+RSF/corrOCT.m
rename to src/MATLAB/+RSF/corrOCT.m
diff --git a/src/+RSF/draw1RSF.m b/src/MATLAB/+RSF/draw1RSF.m
similarity index 100%
rename from src/+RSF/draw1RSF.m
rename to src/MATLAB/+RSF/draw1RSF.m
diff --git a/src/+RSF/drawOCT.m b/src/MATLAB/+RSF/drawOCT.m
similarity index 100%
rename from src/+RSF/drawOCT.m
rename to src/MATLAB/+RSF/drawOCT.m
diff --git a/src/+RSF/drawPatients.m b/src/MATLAB/+RSF/drawPatients.m
similarity index 100%
rename from src/+RSF/drawPatients.m
rename to src/MATLAB/+RSF/drawPatients.m
diff --git a/src/+RSF/drawProgressionStats.m b/src/MATLAB/+RSF/drawProgressionStats.m
similarity index 100%
rename from src/+RSF/drawProgressionStats.m
rename to src/MATLAB/+RSF/drawProgressionStats.m
diff --git a/src/+RSF/drawRSF.m b/src/MATLAB/+RSF/drawRSF.m
similarity index 100%
rename from src/+RSF/drawRSF.m
rename to src/MATLAB/+RSF/drawRSF.m
diff --git a/src/+RSF/drawRSF_lever.m b/src/MATLAB/+RSF/drawRSF_lever.m
similarity index 100%
rename from src/+RSF/drawRSF_lever.m
rename to src/MATLAB/+RSF/drawRSF_lever.m
diff --git a/src/+RSF/getDeltaTstats.m b/src/MATLAB/+RSF/getDeltaTstats.m
similarity index 100%
rename from src/+RSF/getDeltaTstats.m
rename to src/MATLAB/+RSF/getDeltaTstats.m
diff --git a/src/+RSF/getImRSF.m b/src/MATLAB/+RSF/getImRSF.m
similarity index 100%
rename from src/+RSF/getImRSF.m
rename to src/MATLAB/+RSF/getImRSF.m
diff --git a/src/+RSF/getImf.m b/src/MATLAB/+RSF/getImf.m
similarity index 74%
rename from src/+RSF/getImf.m
rename to src/MATLAB/+RSF/getImf.m
index d2d7887..b77b44e 100644
--- a/src/+RSF/getImf.m
+++ b/src/MATLAB/+RSF/getImf.m
@@ -17,8 +17,13 @@ end
 px = px{:};
 px_pos = px(px>0);
 px_neg = abs(px(px<0));
-clip_pos = [mean(px_pos)-std(px_pos), mean(px_pos)+std(px_pos)];
-clip_neg = [mean(px_neg)-std(px_neg), mean(px_neg)+std(px_neg)];
+
+% clip_pos = [mean(px_pos)-std(px_pos), mean(px_pos)+std(px_pos)];
+% clip_neg = [mean(px_neg)-std(px_neg), mean(px_neg)+std(px_neg)];
+% clip_pos = [min(px_pos),max(px_pos)];
+% clip_neg = [min(px_neg),max(px_neg)];
+clip_pos = prctile(px_pos,[0.5,99.5]);
+clip_neg = prctile(px_neg,[0.5,99.5]);
 
 for i = 1:length(imf)
     imp = imf{i};
diff --git a/src/+RSF/getMetadata.m b/src/MATLAB/+RSF/getMetadata.m
similarity index 100%
rename from src/+RSF/getMetadata.m
rename to src/MATLAB/+RSF/getMetadata.m
diff --git a/src/+RSF/getPatientMetadata.m b/src/MATLAB/+RSF/getPatientMetadata.m
similarity index 100%
rename from src/+RSF/getPatientMetadata.m
rename to src/MATLAB/+RSF/getPatientMetadata.m
diff --git a/src/+RSF/imPreProcess.m b/src/MATLAB/+RSF/imPreProcess.m
similarity index 51%
rename from src/+RSF/imPreProcess.m
rename to src/MATLAB/+RSF/imPreProcess.m
index 0fbc9cd..62b3528 100644
--- a/src/+RSF/imPreProcess.m
+++ b/src/MATLAB/+RSF/imPreProcess.m
@@ -1,28 +1,11 @@
 function [imf,bwMask] = imPreProcess(im,radii)
 
-% AX = 1/sqrt(3) .* [15.38,1,1] ;
-% AX = 1/sqrt(3) .* [5,1,1] ;
-AX = 1/sqrt(3);
-% dx = 15.38;
-dx = 20;
-AX = 1/sqrt(3);
-% fun fact :: mat2gray here causes r2 decline
 im = uint8(im); % values are already uint8, just wrapped in a double
-
-imp = double(0*im);
-imn = imp;
-for rr = 1:length(radii)
-    sx = radii(rr);
-    if 1 == length(sx)
-        sx = [0.45,sx,sx];
-    end
-    sx = AX .* sx;
-    cudaTarget = getCudaTarget;
-    imf = HIP.LoG(im,sx,cudaTarget);
-    [~,imp1,imn1] = LoG.separateLoG(imf);
-    imp = max(imp,imp1);
-    imn = max(imn,imn1);
-end
+AX = 1/sqrt(3);
+sx = AX .* radii;
+cudaTarget = getCudaTarget;
+imf = HIP.LoG(im,sx,cudaTarget);
+[~,imp,imn] = LoG.separateLoG(imf);
 
 % threshold mask
 bw = imbinarize(im);
diff --git a/src/+RSF/optimizeDeltaTstats.m b/src/MATLAB/+RSF/optimizeDeltaTstats.m
similarity index 100%
rename from src/+RSF/optimizeDeltaTstats.m
rename to src/MATLAB/+RSF/optimizeDeltaTstats.m
diff --git a/src/+RSF/pickMinVelocityStack.m b/src/MATLAB/+RSF/pickMinVelocityStack.m
similarity index 100%
rename from src/+RSF/pickMinVelocityStack.m
rename to src/MATLAB/+RSF/pickMinVelocityStack.m
diff --git a/src/+RSF/pickRSFradius.m b/src/MATLAB/+RSF/pickRSFradius.m
similarity index 100%
rename from src/+RSF/pickRSFradius.m
rename to src/MATLAB/+RSF/pickRSFradius.m
diff --git a/src/+RSF/platemetric.m b/src/MATLAB/+RSF/platemetric.m
similarity index 100%
rename from src/+RSF/platemetric.m
rename to src/MATLAB/+RSF/platemetric.m
diff --git a/src/+RSF/progressionStats.m b/src/MATLAB/+RSF/progressionStats.m
similarity index 100%
rename from src/+RSF/progressionStats.m
rename to src/MATLAB/+RSF/progressionStats.m
diff --git a/src/+RSF/thresholdRetinalOCT.m b/src/MATLAB/+RSF/thresholdRetinalOCT.m
similarity index 100%
rename from src/+RSF/thresholdRetinalOCT.m
rename to src/MATLAB/+RSF/thresholdRetinalOCT.m
diff --git a/src/MATLAB/metadata/getMetaOCT.m b/src/MATLAB/metadata/getMetaOCT.m
new file mode 100644
index 0000000..acf9fc5
--- /dev/null
+++ b/src/MATLAB/metadata/getMetaOCT.m
@@ -0,0 +1,31 @@
+function tblMeta = getMetaOCT(ROOT,eye,scanType)
+
+tblMeta = table();
+flist = dir(fullfile(ROOT,'**/*.LEVER'));
+mx = regexp({flist.name},'P(\d+)_(.+?)_(\d+-\d+-\d+)_(\d+-\d+-\d+)_(\w\w)_(.+?)_.*.LEVER','tokens');
+tblSkip = table();
+for ff = 1:length(flist)
+    nt = table();
+
+    nt.filename = {flist(ff).name};
+    nt.folder = {flist(ff).folder};
+    if isempty(mx{ff})
+        tblSkip = [tblSkip;nt];
+        continue;
+    end
+    nt.subjectID = str2double(mx{ff}{1}{1});
+    nt.scanType = mx{ff}{1}{2};
+    nt.dx = datetime(mx{ff}{1}{3},'InputFormat','MM-dd-yyyy');
+    nt.time = {mx{ff}{1}{4}};
+    nt.eye = mx{ff}{1}{5};
+    nt.scanID =  {mx{ff}{1}{6}};
+    
+    
+    if ~strcmp(nt.eye,eye) || ~contains(lower(scanType),lower(nt.scanType))
+        continue;
+    end
+    
+    tblMeta = [tblMeta;nt];
+end
+
+tblMeta = sortrows(tblMeta,{'subjectID','filename','dx'});
\ No newline at end of file
diff --git a/src/MATLAB/metadata/goLR.m b/src/MATLAB/metadata/goLR.m
new file mode 100644
index 0000000..3879125
--- /dev/null
+++ b/src/MATLAB/metadata/goLR.m
@@ -0,0 +1,61 @@
+tic
+ROOT = '/g/leverjs/Schuman_OCT/OCT/03-22-2024';
+
+% flist = dir(fullfile(ROOT,'**/*.LEVER'));
+% id = regexp({flist.name},'P(\d)+','tokens');
+% id = cellfun(@(x) str2double(x{1}),id);
+% [uid,ia,ic] = unique(id);
+% 
+% hx = [];
+% for i = 1:length(uid)
+%     hx(i) = length(find(id==uid(i)));
+% end
+
+PID = 'P10010';
+flist = dir(fullfile(ROOT,['**/' PID '*.LEVER']));
+mx = regexp({flist.name},'P(?<PID>\d+)_(?<scanType>.+)_(?<date>\d+-\d+-\d+)_(?<time>\d+-\d+-\d+)_(?<eye>\w\w)_(?<scanID>.+?)_.*.LEVER','names');
+tblMeta = struct2table(vertcat(mx{:}));
+tblMeta.PID = str2double(tblMeta.PID);
+tblMeta.folder = {flist.folder}';
+tblMeta.filename = {flist.name}';
+
+tblMeta = tblMeta(contains(tblMeta.scanType,'Optic'),:);
+% tblMeta = tblMeta(contains(tblMeta.eye,'OD'),:);
+imf = RSF.getImf(tblMeta,[0.5,8,8],'');
+imf2 = RSF.getImf(tblMeta,[5,5,5],'');
+for i = 1:length(imf)    
+    imf{i}(:,:,:,2) = imf2{i};
+    imf{i}(:,:,:,3) = 0 .* imf2{i};
+end
+p = ljsStartParallel(64);
+d = [];
+parfor i = 1:length(imf)
+    dj = [];
+    for j = 1:length(imf)
+        dj(j) = SSF.ncd_ssf_volume(imf{i},imf{j});
+    end
+    d(i,:) = dj;
+end
+
+A = Cluster.Regularize(d);
+[~,Y] = Cluster.SpectralCluster(A,3);
+
+tblMeta.Y = Y;
+
+tS = tblMeta(strcmp(tblMeta.eye,'OD'),:);
+tD = tblMeta(strcmp(tblMeta.eye,'OS'),:);
+t1 = tS;
+t2 = tD;
+
+tO = tblMeta(contains(tblMeta.scanType,'Optic'),:);
+tM = tblMeta(contains(tblMeta.scanType,'Macular'),:);
+t3 = tO;
+t4 = tM;
+
+clf;hold on
+plot3(t1.Y(:,1),t1.Y(:,2),t1.Y(:,3),'r*')
+plot3(t2.Y(:,1),t2.Y(:,2),t2.Y(:,3),'og')
+plot3(t3.Y(:,1),t3.Y(:,2),t3.Y(:,3),'mx')
+plot3(t4.Y(:,1),t4.Y(:,2),t4.Y(:,3),'cs')
+
+toc
\ No newline at end of file
-- 
GitLab