getWidth method

List<int> getWidth(
  1. List<double> diffSeg,
  2. int startInd
)

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];
}