diff --git a/workflow/templates/easy/NCfitImCFparforFailGbl2.m b/workflow/templates/easy/NCfitImCFparforFailGbl2.m index d5aaa3d5..ee2ee97e 100755 --- a/workflow/templates/easy/NCfitImCFparforFailGbl2.m +++ b/workflow/templates/easy/NCfitImCFparforFailGbl2.m @@ -1,38 +1,32 @@ %% CALLED BY par4GblFnc8c.m %% function [par4scanselIntensStd,par4scanselTimesStd,par4scanTimesELr,par4scanIntensELr,par4scanCFparameters,par4scanCFdate,outC,outCstd]= ... - NCfitImCFparforFailGbl2(parMat,times, values, timeOffsets, fileSuffix, AUCfinalTime, ~, spotAreas, outputDirectory, ~,~, sols, ~) %,scan) + 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); -%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 + % Spot(cultures) loop + for ii=1:384 %startSpot:numCultures ii; %%%db print out the culture number - - timepts= []; + timepts=[]; currValues=[]; currSpotAreas=[]; currSpotArea=[]; - dataMatrix=[]; selTimesStd=[]; %191024 parfor selIntensStd=[]; %191024 parfor @@ -40,236 +34,201 @@ for ii= 1:384 %startSpot:numCultures NormIntensELr=[]; %191024 parfor % add offset...1 offset PER PLATE - timepts = times + timeOffsets; %(floor((ii-1)/arrayFormat) + 1); - currValues = values(ii,:); %change values(spotNum,:); + timepts=times + timeOffsets; % (floor((ii-1)/arrayFormat) + 1); + currValues=values(ii,:); % change values(spotNum,:); % get spot areas for this culture - currSpotArea = spotAreas(:,ii); + 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)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)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 + % 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.m + % Preallocate incase something bails in NCscurImCFparfor + resMatStd=zeros(1,27); + resMat=zeros(1,27); + hold off; + 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; -selTimes=selTimes'; -selIntens=selIntens'; -%??????????????????????????????????????????????????? -%**********End Basic filter****************** + dataMatrix=[]; % arfor move clear from NCfitImCF...m + loIntensThres=parMat(4); + stdLoIntLim=parMat(5); + + % Basic filtering + % [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); -%****************************************************** - - 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 + % 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)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)6 + flg1=1 + end % detect S curve rise->stop stdLoInt detection + end + end - outC(ii,:)= resMat; %{ii, par4resMat}; - outCstd(ii,:)= resMatStd; %{ii, par4resMatStd}; + % TODO repetitive code + 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 -end %Multispot parfor ii loop end PARFOR LOOP 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 -%outC + resMat(18)=bl; + resMatStd(18)=bl; + resMatStd(20)=minTime; + resMat(20)=minTime; -%*********************************19_1001*********************************** -%To accomodate parfor copy par4scan thru global p4 functions inside of -%parfor loop --then outside to par4Gbl_Main8b.m + % 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 -%************************************************************************** -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); + % TODO 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); %s elIntens(nn)=dataMatrix(4,n); + + end + end + selTimes=selTimes'; + selIntens=selIntens'; + 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 -end %function end + [resMatStd, resMat, selTimesStd, selIntensStd, FiltTimesELr, NormIntensELr] =... + NCscurImCF_3parfor(dataMatrix0, AUCfinalTime, currSpotArea, sols, bl, minTime); -%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -%########################################################################## + end + 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 + + outC(ii,:)=resMat; %{ii, par4resMat}; + outCstd(ii,:)=resMatStd; %{ii, par4resMatStd}; + end + + %*********************************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