diff --git a/engine/processor/+computeRLS/core.m b/engine/processor/+computeRLS/core.m index 865c36d..1838503 100644 --- a/engine/processor/+computeRLS/core.m +++ b/engine/processor/+computeRLS/core.m @@ -497,6 +497,7 @@ % to do : compute fluo, sync trajectories %% =========================================DIVTIMES================================================= +end function [divTimes]=computeDivtime(id,proba,classes,param,frames) frameIdx = localNormalizeRLSFrames(frames, numel(id)); @@ -737,6 +738,7 @@ % divTimes.duration=diff(divFrames); % division times ! % end +end function frameIdx=localNormalizeRLSFrames(frames,nFrames) if nargin<2 || isempty(nFrames) || ~isfinite(nFrames) || nFrames<1 frameIdx=[]; @@ -824,6 +826,7 @@ info.changedFrames=sum(idOut(:)'~=argmaxId(:)'); +end function idOut=localModeFilterLabels(idIn,window) idOut=idIn(:)'; window=max(1,round(double(window))); @@ -849,6 +852,7 @@ end +end function idOut=localViterbiDecode(proba,classes,param) [nStates,nFrames]=size(proba); if nFrames==0 @@ -887,6 +891,7 @@ idOut=path; +end function out=localDecodeClassNames(classes,nStates) out=cellstr(string(classes(:)')); if numel(out)>=nStates @@ -898,6 +903,7 @@ end +end function trans=localViterbiTransitionMatrix(classes,param) n=numel(classes); unexpected=localNumericParam(param,'ViterbiUnexpectedTransitionPenalty',1.0); @@ -947,6 +953,7 @@ end +end function [divFramesOut,rejectedDivFrames,minInterval]=localApplyDivisionIntervalRule(divFrames,param) divFramesOut=divFrames; rejectedDivFrames=[]; @@ -982,6 +989,7 @@ end +end function minInterval=localActiveMinDivisionInterval(param) minInterval=localNumericParam(param,'MinDivisionInterval',NaN); if isnan(minInterval) || minInterval<=0 @@ -998,6 +1006,7 @@ end +end function threshold=localActiveArrestThreshold(param) expected=localNumericParam(param,'ExpectedDivisionPeriod',NaN); arrestThreshold=localNumericParam(param,'ArrestThreshold',3); @@ -1012,6 +1021,7 @@ threshold=max(1,round(threshold)); +end function out=localChoiceString(param,field,defaultValue) out=defaultValue; if ~isfield(param,field) || isempty(param.(field)) @@ -1026,6 +1036,7 @@ end +end function out=localNumericParam(param,field,defaultValue) out=defaultValue; if ~isfield(param,field) || isempty(param.(field)) @@ -1045,6 +1056,7 @@ end +end function param=localEnsureQCDefaults(param) defaults=struct(); defaults.ArrestThreshold=3; @@ -1072,6 +1084,7 @@ end +end function out=localBoolParam(param,field,defaultValue) out=defaultValue; if ~isfield(param,field) || isempty(param.(field)) @@ -1094,6 +1107,7 @@ end +end function out=localTextParam(param,field,defaultValue) out=defaultValue; if ~isfield(param,field) || isempty(param.(field)) @@ -1113,6 +1127,7 @@ end +end function names=localMetricDataSelection(param) names={}; if ~isfield(param,'metrics_data') || isempty(param.metrics_data) @@ -1141,6 +1156,7 @@ names=unique(names,'stable'); +end function [fluo_data,mask_data]=localSelectMetricDataSeries(dataSeries,selection) fluo_data=[]; mask_data=[]; @@ -1192,8 +1208,8 @@ if ~isempty(maskIdx) mask_data=dataSeries(maskIdx); end - - + +end function tf=localUseAutoMetrics(selection) tf=isempty(selection); if tf @@ -1201,7 +1217,7 @@ end tokens=lower(strtrim(string(selection(:)))); tf=any(tokens=="" | tokens=="auto" | tokens=="all" | tokens==""); - +end function tf=localCanQuantifyIntervals(totaltime) tf=false; @@ -1216,7 +1232,7 @@ return end tf=true; - +end function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok n=height(t); @@ -1256,7 +1272,7 @@ function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok ds.addData(qcScore,{'qc_score'},'plot',false,'groups','qc'); ds.addData(qcIntervalUsable,{'qc_interval_usable'},'plot',false,'groups','qc'); - +end function status=localRLSStatus(divTimes) endType=lower(string(divTimes.endType)); if endType=="neverborn" @@ -1275,12 +1291,12 @@ function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok status="stillAlive"; end - +end function tf=localStructuralUsable(status) bad=["neverBorn","clog","emptied"]; tf=~any(status==bad); - +end function reason=localStatusReason(status,structuralUsable,roiQCOk,divTimes) %#ok if ~structuralUsable switch status @@ -1305,7 +1321,7 @@ function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok reason="ok"; end - +end function [meanConf,minConf,meanMargin,lowFraction,qcScore,intervalUsable]=localIntervalQC(totaltime,proba,param) n=numel(totaltime); meanConf=nan(n,1); @@ -1369,7 +1385,7 @@ function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok lowFraction(r)<=param.QCMaxLowConfidenceFraction; end - +end function tf=localNeedsDataLoad(roiobj) tf=true; try @@ -1400,5 +1416,4 @@ function localAddRLSQCData(ds,t,divTimes,id,proba,classes,param) %#ok catch tf=true; end - - +end \ No newline at end of file