®
QSight
210MD Screening System
Dossiers et algorithmes
loop (i from 0 to Y.Length-1)
if (Math.Abs(Topology[i]) < 0.001) then Topology[i] ← 0;
endif end
/* Check for Topology[i] of zero between a positive Topology[i - 1]
and a negative Topology[i+1]indicating neighbo(u)ring points with identical
intensities at the apex. The loop below causes the leftmost point of the two
to be chosen. */
loop (i from 0 to Y.Length-1)
if (Topology[i] = 0 AND Topology[i - 1] > 0 AND Topology[i + 1] < 0) then
Topology[i] = Topology[i + 1]; endif
end
/* Loop to Analyze the Topology for valleys
Regions between valleys are either peaks or are flat regions between peaks */
loop
/* Find index L, a valley where Topology[p] first becomes positive and left
ascension begins */
while (p < Topology.Length) do if (Topology[p] <= 0)
p++;
else if
(Y[p + 1] == Y[p])
/* If series tied, choose right-most of the two points */
p++;
else
break; // L candidate found here-when endif
end
L = p;
/* L found, index of Left valley is p */
ExonRight = L; // used later for connecting up baseline line left of peak
/* Find R, at which point: Topology[p] becomes l.t.e. zero marking the end of
Y[i] increase (up left side of peak) Apex = p at end of loop (1);
Topology[p] then-after becomes non-negative marking the end of Y[i] decrease
(down right side of peak) at end of loop (2) */
while (p <= Y.Length - 1) do /* Loop (1) */ if (Topology[p] > 0) then
p++; /* ascending left side of peak */ else
break; // beginning of descent endif
end
A = p; /* Apex */
while (p <= Y.Length - 1) do // Loop (2) if (Y[p] <= 0) then
break;
/* This causes prevention of tails */ endif;
if (Topology[p] < 0) p++;
/* processing is now descending right side of
peak*/
else
break;
/* ascension of next peak or otherwise end of current peak */
endif; end
R = p; // found first positive after string of negatives
// Add peak to peak list if(R not found) then
break; endif
(L', A, R') ← FindBaselineUnderPeak(L,A,R);
PeakList += New Peak (L', A, R'); // left apex right end /* loop */
end /* FindValleyPoints() */
/* Connects the valley points together underneath the peak
*/
FUNCTION FindBaselineUnderPeak (L, A, R) => (L', A, R') L' ← L;
R' ← R;
do
Create line joining L and R under candidate peak adjust L' towards A if
candidate baseline segment crosses the sides of the peak adjust R' towards
A if candidate baseline segment crosses the sides of the peak until no
crossovers exist
return L', A, R'
end /* FindBaselineUnderPeak() */
Sortie :
160