package org.signalml.plugin.newstager.logic.artifact; import org.signalml.plugin.exception.PluginThreadRuntimeException; import org.signalml.plugin.newstager.data.NewStagerStatWorkerData; import org.signalml.plugin.newstager.data.logic.INewStagerWorkerCompletion; import org.signalml.plugin.newstager.data.logic.NewStagerStatAlgorithmResult; import org.signalml.plugin.newstager.data.logic.NewStagerStatData; import org.signalml.plugin.newstager.exception.NewStagerPluginException; import org.signalml.plugin.newstager.io.INewStagerStatsSynchronizer; public class NewStagerStatWorker implements Runnable { private final NewStagerStatWorkerData data; public NewStagerStatWorker(NewStagerStatWorkerData data) { this.data = data; } @Override public void run() { INewStagerStatsSynchronizer synchronizer = this.data.synchronizer; INewStagerWorkerCompletion<NewStagerStatAlgorithmResult> completion = this.data.completion; try { NewStagerStatData data = new NewStagerStatData(this.data.constants, this.data.parameters, this.data.channelMap); NewStagerStatAlgorithm stagerStat = new NewStagerStatAlgorithm(data); int count = 0; int loopCount = this.data.constants.segmentCount; while (true) { double buffer[][] = synchronizer.getReadyBuffer(); if (buffer == null) { break; } if (count < loopCount) { stagerStat.compute(buffer); ++count; } synchronizer.markBufferAsProcessed(buffer); completion.signalProgress(1); } completion.completeWork(stagerStat.getResult()); } catch (InterruptedException e) { completion.completeWork(null); return; } catch (NewStagerPluginException e) { this.data.completion.completeWork(null); throw new PluginThreadRuntimeException(e); } } }