package org.signalml.plugin.newartifact.logic.algorithm; import org.signalml.plugin.newartifact.data.NewArtifactConstants; public class UnknownArtifactAlgorithm extends NewArtifactAlgorithmBase { private final static double EPSILON = Double.MIN_NORMAL; public UnknownArtifactAlgorithm(NewArtifactConstants constants) { super(constants); this.resultBuffer = new double[1][constants.channelCount]; } @Override public double[][] computeHead(NewArtifactAlgorithmData data) { return this.zeros(1, this.constants.channelCount); } @Override public double[][] computeTail(NewArtifactAlgorithmData data) { return this.zeros(1, this.constants.channelCount); } @Override public double[][] compute(NewArtifactAlgorithmData data) { NewArtifactConstants constants = data.constants; int tailLength = constants.getPaddingLength(); int blockLength = constants.getBlockLength(); double buffer[] = this.resultBuffer[0]; for (int i = 0; i < data.constants.channelCount; ++i) { double channelData[] = data.signal[i]; double diff; int prevIdx = -2; int prevShiftIdx = -1; int maxIdxDiff = Integer.MIN_VALUE; int maxIdxShiftDiff = Integer.MIN_VALUE; for (int j = tailLength; j < blockLength + tailLength - 1; ++j) { diff = channelData[j + 1] - channelData[j]; if (diff > EPSILON) { maxIdxDiff = Math.max(maxIdxDiff, j - tailLength - prevIdx); prevIdx = j - tailLength; } else { maxIdxShiftDiff = Math.max(maxIdxShiftDiff, j - tailLength - prevShiftIdx); prevShiftIdx = j - tailLength; } } maxIdxDiff = Math.max(maxIdxDiff, blockLength - 1 - prevIdx); maxIdxShiftDiff = Math.max(maxIdxShiftDiff, blockLength - prevShiftIdx); buffer[i] = Math.max(maxIdxDiff, maxIdxShiftDiff); } return this.resultBuffer; } }