getWidth method
Implementation
List<int> getWidth(List<double> diffSeg, int startInd) {
midVal = diffSeg.length / 2;
final intDiff = <double>[];
var y = <double>[];
for (final sample in diffSeg) {
if (sample > 0) {
intDiff.add(1);
} else {
intDiff.add(0);
}
}
for (var i = 0; i < intDiff.length - 1; i++) {
y.add(intDiff[i + 1] - intDiff[i]);
}
final yMin = <int>[];
final int yLength = y.length;
for (var i = 0; i < yLength; i++) {
if (y[i] > 0) {
yMin.add(i + 1);
}
}
final qCands = <int>[];
final int yMinLength = yMin.length;
for (var i = 0; i < yMinLength; i++) {
if (yMin[i] < midVal) {
qCands.add(i);
}
}
if (qCands.isEmpty) {
qCand = (midVal - midVal / 2).toInt();
} else {
qCand = yMin[qCands.reduce(max)];
}
var sCands = <int>[];
for (var i = 0; i < yMinLength; i++) {
if (yMin[i] > midVal) {
sCands.add(i);
}
}
if (sCands.isEmpty) {
sCand = (midVal + midVal / 2).toInt();
} else {
sCand = yMin[sCands.reduce(min)];
}
qCand = qCand + startInd;
sCand = sCand + startInd;
return [qCand, sCand];
}