Files
hartman-server/workflow/templates/easy/NCfitImCFparforFailGbl2.m
2024-07-23 10:54:58 -04:00

276 lines
9.2 KiB
Matlab
Executable File

%% CALLED BY par4GblFnc8c.m %%
function [par4scanselIntensStd,par4scanselTimesStd,par4scanTimesELr,par4scanIntensELr,par4scanCFparameters,par4scanCFdate,outC,outCstd]= ...
NCfitImCFparforFailGbl2(parMat,times, values, timeOffsets, fileSuffix, AUCfinalTime, ~, spotAreas, outputDirectory, ~,~, sols, ~) %,scan)
%Preallocation for parfor loop**********************************
st(1,1:size(times,2))= 1111;
resMat(1,1:27)= 0;
resMatStd= resMat;
outC= zeros(384,27);
outCstd= zeros(384,27);
for m=1:384
pa{m}= st;
par4scanCFparameters{m}= parMat;
par4scanCFdate{m}= datestr((now),31);
end
par4scanselTimesStd= pa;
par4scanselIntensStd= pa;
par4scanTimesELr= pa;
par4scanIntensELr= pa;
par4resMat= zeros(384,27);
par4resMatStd= zeros(384,27);
%****************************************************************
%*****************Begin the Spot(cultures) loop****************************
for ii= 1:384 %startSpot:numCultures
%parfor ii= 1:384 %startSpot:numCultures
ii; %%%db print out the culture number
timepts= [];
currValues=[];
currSpotAreas=[];
currSpotArea=[];
dataMatrix=[];
selTimesStd=[]; %191024 parfor
selIntensStd=[]; %191024 parfor
FiltTimesELr=[]; %191024 parfor
NormIntensELr=[]; %191024 parfor
% add offset...1 offset PER PLATE
timepts = times + timeOffsets; %(floor((ii-1)/arrayFormat) + 1);
currValues = values(ii,:); %change values(spotNum,:);
% get spot areas for this culture
currSpotArea = spotAreas(:,ii);
% just use the area at the last time point
%currSpotArea = currSpotAreas(1);
%--------------------------------------------------------------
%Preallocate to accomodate parfor loop **************************
resMatStd= zeros(1,27);
resMat= zeros(1,27);
currNormIntens = currValues/currSpotArea;
tmpx=find(currNormIntens>5); %15jh % 2.3);
validSpot=true;
if(isempty(tmpx) || (length(tmpx)<3))
validSpot= false;
normIntens= currNormIntens;
filterTimes= timepts; %filterTimes; %currTimes;
selTimesStd= timepts;
selIntensStd= currNormIntens;
FiltTimesELr= timepts;
NormIntensELr= currNormIntens;
else
%*******************************************************
%NCfilImCF
%NCfilImCF.m called from NCfitImCF.m line 119*******************
%Preallocate incase something bails in NCscurImCFparfor
resMatStd= zeros(1,27);
resMat= zeros(1,27);
hold off %09_0704
dataMatrix=[];
K=0;r=0;l=0;Klow=0;Kup=0;rlow=0;rup=0;llow=0;lup=0;AUC=0;MSR=0; rsquare=0;
bl=0;
Tpt1=0; numFitTpts =0;thresGT2=0;minTime=0;fitbl=0; %diagnostic outputs only
timepts= timepts; %timepts= currTimes; parfor
normIntens= currNormIntens;
dataMatrix= []; %parfor move clear from NCfitImCF...m
loIntensThres=parMat(4);
stdLoIntLim=parMat(5);
%******Begin basic filter**********
%[loInten Thres,stdbased Trim before Scurve start, and dropout detection]
if(max(normIntens) > 2.29)
threshold = loIntensThres; %1.9; %Increase this value to reduce low data point (flag=2)
else
threshold = 0;
end
dropThreshold= -0.0001* max(normIntens);
%Initialize dataMatrix**********************************
dataMatrix(1,:)=timepts;
dataMatrix(2,:)=normIntens;
dataMatrix(3,:)= ones;
dataMatrix(4,:)=normIntens;
%Determine a mean Intensity Index point and assoc'd TimePt
a= min(normIntens(normIntens>=0)); %(find(normIntens>=0)));
b= max(normIntens(normIntens>=0)); %(find(normIntens>=0)));
c= 0.5*(b-a);
d= b-c;
meanIntIndPt= find(normIntens>d,1);
meanInt= normIntens(meanIntIndPt);
meanTime= times(meanIntIndPt);
%**********************************************************
%**************************************************************************
% NCLoIntstdTrim
%NCLoSstdTrim.m called by NCfilImCF and NCfil.m
flg1=0;
loScurvLim=stdLoIntLim; %
loStimeN=1;
last2n=1;
stdDev= [];
nrmIntens0= normIntens;
for n=1:meanIntIndPt
if nrmIntens0(n)<=0
nrmIntens0(n)=0;
end
if(nrmIntens0(n)<threshold)
if (loStimeN-2)>0,dataMatrix(3,1:(n-2))= 2; %add to lowIntensity cull flags, the pre S cull data
else dataMatrix(3,1:n)= 2;end
dataMatrix(3,1:(n-2))= 2;
last2n=n;
end
if n<(length(nrmIntens0)-3)
x=nrmIntens0(n:(n+3));
stdDev(n)=std(x);
if (stdDev(n)<loScurvLim && flg1~=1)
loStime=timepts(n);
loStimeN=n;
end
if stdDev(n)>6 ,flg1=1;end %detect S curve rise->stop stdLoInt detection
end
end %end for
if (loStimeN-2)>0,dataMatrix(3,1:(loStimeN-2))= 2; %add to lowIntensity cull flags, the pre S cull data
else dataMatrix(3,1:(loStimeN-2))= 2;end
qcutoff=2;
qind=find(normIntens>2); %,:,'first');
if ~isempty(qind(3)), qcutoff=qind(3);end
[minInt,I]= min(normIntens(2:qcutoff));
bl=minInt;
minTime=dataMatrix(1,I); %diagnostic output only
if (length(qind)>5)&&I>1,dataMatrix(3,1:(I-1))=5; end
tGT2Flg=0;
for n=1:length(normIntens)
dataMatrix(4,n)=normIntens(n)-bl;
if n>I && dataMatrix(4,n)>=2 && tGT2Flg==0
thresGT2=n;thresGT2Tm=dataMatrix(1,n);tGT2Flg=1;
end %diagnostic output only
end
resMat(18)= bl;
resMatStd(18)= bl;
resMatStd(20)= minTime;
resMat(20)= minTime;
%&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&
%*********************************************************
%DropOut cull section(single drop points)*******************
DropOutStartPt=length(normIntens);
for n=1:length(normIntens)
if(n>1)
if(((normIntens(n)- normIntens(n-1))< dropThreshold))&& ...
(n > max(meanIntIndPt,thresGT2) )
dataMatrix(3,n)= 6;
end
end
end
%??????should/could this be removed as recreated in%NCscurImCF_3parfor.m????????????????????
%Post Stdtest cull for low intensities inclusion of additional low value points
%selTimes= [--,--] %don't know size before as it is a filtered output
tmpIndx= 0;
for n=1:length(normIntens)
if (dataMatrix(3,n)==1)
tmpIndx= tmpIndx+1;
selTimes(tmpIndx)= dataMatrix(1,n); %selTimes(nn)= dataMatrix(1,n);
selIntens(tmpIndx)= dataMatrix(4,n); %selIntens(nn)= dataMatrix(4,n);
end
end
selTimes=selTimes';
selIntens=selIntens';
%???????????????????????????????????????????????????
%**********End Basic filter******************
%******************************************************
filtNormIntens=normIntens;
dataMatrix0= dataMatrix;
filterTimes= timepts; %parfor
%_____________________________________________________________
%*******************************************
%NCscurImCF
%NCscurImCF_1
%NCscurImCF_2
%NCscurImCF_3
%NCscurImCF_3parfor
%NCscurImCF_3parfor(dataMatrix, AUCfinalTime)
%dataMatrix %debugging parfor gbl ok 85.7145; 126.4579,6, 124.5264 37tPt
%adsfj %debugging parfor gbl
[resMatStd, resMat, selTimesStd, selIntensStd, FiltTimesELr, NormIntensELr] =...
NCscurImCF_3parfor(dataMatrix0, AUCfinalTime, currSpotArea, sols, bl, minTime);
end % end JUMP OVER associated with if(find(intensities>1000)<5)
%resMatStd
%asdf
%To accommodate parfor can't use global 'scan' variable 191002================
% {
par4scanselTimesStd{ii}= selTimesStd; %timepts'; %filterTimes';
par4scanselIntensStd{ii}= selIntensStd; %normIntens';
par4scanTimesELr{ii}= FiltTimesELr; %19_1021 preserve for CurveDisplay and EZview
par4scanIntensELr{ii}= NormIntensELr; %19_1021 preserve for CurveDisplay and EZview
%}
%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
%************* striped down OutCell code was put back into NCfitImCF
outC(ii,:)= resMat; %{ii, par4resMat};
outCstd(ii,:)= resMatStd; %{ii, par4resMatStd};
end %Multispot parfor ii loop end PARFOR LOOP END##############################################################################
%###############################################################################################################################
%###############################################################################################################################
%outC
%*********************************19_1001***********************************
%To accomodate parfor copy par4scan thru global p4 functions inside of
%parfor loop --then outside to par4Gbl_Main8b.m
%**************************************************************************
fileExt = '.txt';
filePrefix = 'FitResultsComplete_';
fileNamePlate = [filePrefix fileSuffix fileExt];
fileName= fullfile(outputDirectory, fileNamePlate); %[outputDirectory fileNamePlate];
fid = fopen(fileName,'w');
fprintf(fid, 'Fit Results Complete\n');
%fprintf(fid, 'Num.\tAUC\tMSR\tK\tr\tl\tR-squared\tK-lower\tK-upper\tr-lower\tr-upper\tl-upper\tl-lower\tArea\tLastInten\tSpineMaxRateTimePt\tLastFitTimePt\n');
fclose(fid);
end %function end
%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
%##########################################################################