package org.signalml.plugin.newartifact.logic.tag.creators; import java.util.LinkedList; import java.util.List; import org.signalml.plugin.newartifact.data.NewArtifactType; import org.signalml.plugin.newartifact.data.tag.NewArtifactTagData; import org.signalml.plugin.newartifact.data.tag.NewArtifactTagResult; import org.signalml.plugin.newartifact.logic.tag.NewArtifactVerticalMaxHelper; public class EyeBlinksTagCreator extends AbstractNewArtifactTagCreator implements INewArtifactTagCreator { private static final NewArtifactType CREATOR_TYPE = NewArtifactType.EYEBLINKS; private static final double FACTOR_A = 0.0; private static final double FACTOR_B = -0.2; private static final double TRESHOLD_A = 0.99; private static final double TRESHOLD_B = 0.75; @Override protected String getTagName() { return "B"; } @Override protected String getTagDescription() { return "Mruganie"; } @Override protected int getTagStretch() { return 1; } @Override public NewArtifactTagResult tag(NewArtifactTagData data) { final double sensitivity = data.parameters .getSensitivity(EyeBlinksTagCreator.CREATOR_TYPE) / 100.0; final double factor = EyeBlinksTagCreator.FACTOR_A + sensitivity * (EyeBlinksTagCreator.FACTOR_B - EyeBlinksTagCreator.FACTOR_A); final double treshold = EyeBlinksTagCreator.TRESHOLD_A + sensitivity * (EyeBlinksTagCreator.TRESHOLD_B - EyeBlinksTagCreator.TRESHOLD_A); final double absTreshold = treshold + factor; int blockCount = data.source[0].length; double channelMax[] = new double[blockCount]; List<Integer> tags = new LinkedList<Integer>(); for (int i = 0; i < blockCount; ++i) { channelMax[i] = NewArtifactVerticalMaxHelper.GetVMax(data.source, i); } for (int i = 0; i < blockCount; ++i) { if (channelMax[i] > treshold) { tags.add(i); if (factor < 0) { if (i > 0 && channelMax[i - 1] > absTreshold) { tags.add(i - 1); } if (i < blockCount - 1 && channelMax[i + 1] > absTreshold) { tags.add(i + 1); } } } } return this.constructResult(tags); } }