package org.signalml.app.worker.signal; import java.awt.Color; import java.util.ArrayList; import java.util.List; import org.signalml.app.model.tag.SlopeType; import org.signalml.app.model.tag.SynchronizeTagsWithTriggerParameters; import org.signalml.domain.signal.samplesource.DoubleArraySampleSource; import org.signalml.domain.signal.samplesource.MultichannelSampleSource; import org.signalml.domain.tag.StyledTagSet; import org.signalml.math.ArrayOperations; import org.signalml.plugin.export.signal.SignalSelectionType; import org.signalml.plugin.export.signal.Tag; import org.signalml.plugin.export.signal.TagStyle; public abstract class AbstractSynchronizationTest { protected SynchronizeTagsWithTriggerParameters parameters; private final int sampleCount = 3000; protected List<TriggerPush> triggerPushes = new ArrayList<TriggerPush>(); public AbstractSynchronizationTest() { triggerPushes.add(new TriggerPush(10, 15)); triggerPushes.add(new TriggerPush(1024, 1400)); triggerPushes.add(new TriggerPush(1500, 1600)); triggerPushes.add(new TriggerPush(2523, 2524)); triggerPushes.add(new TriggerPush(2550, 2551)); triggerPushes.add(new TriggerPush(2599, 2700)); triggerPushes.add(new TriggerPush(2800, 2900)); triggerPushes.add(new TriggerPush(2901, 2950)); parameters = new SynchronizeTagsWithTriggerParameters(); parameters.setSampleSource(createSampleSource()); parameters.setTagSet(createTagSet()); parameters.setThresholdValue(1.0); parameters.setTriggerChannel(0); } protected MultichannelSampleSource createSampleSource() { double[][] samples = new double[2][sampleCount]; for (int i = 0; i < triggerPushes.size(); i++) { TriggerPush triggerPush = triggerPushes.get(i); ArrayOperations.fillArrayWithValue(samples[0], 1.0, triggerPush.getStartSample(), triggerPush.getEndSample()); } for (int i = 0; i < samples[1].length; i++) { samples[1][i] = Math.random(); } DoubleArraySampleSource sampleSource = new DoubleArraySampleSource(samples); sampleSource.setSamplingFrequency(128.0F); return sampleSource; } protected StyledTagSet createTagSet() { StyledTagSet tagSet = new StyledTagSet(); TagStyle tagStyle = new TagStyle(SignalSelectionType.CHANNEL, "style", "", Color.black, Color.blue, 1.0F); tagSet.addStyle(tagStyle); tagSet.addTag(new Tag(tagStyle, 1.0, 0.1)); tagSet.addTag(new Tag(tagStyle, 2.0, 0.1)); tagSet.addTag(new Tag(tagStyle, 4.0, 0.1)); tagSet.addTag(new Tag(tagStyle, 5.0, 0.1)); tagSet.addTag(new Tag(tagStyle, 6.0, 0.1)); return tagSet; } public Integer[] getSlopePositions(SlopeType slopeType, int threshold) { List<Integer> slopes = new ArrayList<Integer>(); for (TriggerPush triggerPush: triggerPushes) { if (triggerPush.getLength() < threshold) continue; switch (slopeType) { case ASCENDING: slopes.add(triggerPush.getStartSample()); break; case BOTH: slopes.add(triggerPush.getStartSample()); slopes.add(triggerPush.getEndSample()); break; case DESCENDING: slopes.add(triggerPush.getEndSample()); break; } } return slopes.toArray(new Integer[0]); } }