/* ExampleMethodIterationConsumer.java created 2007-12-06
*/
package org.signalml.app.method.example;
import java.util.Random;
import org.signalml.app.method.MethodIterationResultConsumer;
import org.signalml.app.view.signal.roc.RocDialog;
import org.signalml.domain.roc.RocData;
import org.signalml.domain.roc.RocDataPoint;
import org.signalml.method.iterator.IterableMethod;
import org.signalml.method.iterator.MethodIteratorData;
import org.signalml.method.iterator.MethodIteratorResult;
/** ExampleMethodIterationConsumer
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class ExampleMethodIterationConsumer implements MethodIterationResultConsumer {
private RocDialog rocDialog;
private int[][] getSyntheticRocData() {
int[][] points = new int[30][];
Random random = new Random();
double[] A = new double[1000];
double[] B = new double[1000];
int i;
for (i=0; i<A.length; i++) {
A[i] = random.nextGaussian();
A[i] = 2*A[i] + 10;
}
for (i=0; i<B.length; i++) {
B[i] = random.nextGaussian();
B[i] = 3*B[i] + 15;
}
int truePositiveCount;
int trueNegativeCount;
int falsePositiveCount;
int falseNegativeCount;
for (int k=0; k<points.length; k++) {
truePositiveCount = 0;
trueNegativeCount = 0;
falsePositiveCount = 0;
falseNegativeCount = 0;
for (i=0; i<A.length; i++) {
if (A[i] > k) {
falsePositiveCount++;
} else {
trueNegativeCount++;
}
}
for (i=0; i<B.length; i++) {
if (B[i] > k) {
truePositiveCount++;
} else {
falseNegativeCount++;
}
}
points[k] = new int[] { truePositiveCount, trueNegativeCount, falsePositiveCount, falseNegativeCount };
}
return points;
}
@Override
public void consumeIterationResult(IterableMethod method, MethodIteratorData data, MethodIteratorResult result) {
RocData rocData = RocData.createForMethodIteratorData(data);
// simulate roc result
int size = result.size();
int[][] syntheticRocData = getSyntheticRocData();
double step = ((double) syntheticRocData.length-1) / (size-1);
for (int i=0; i<size; i++) {
int sample = (int) Math.round(step * (size-(1+i)));
RocDataPoint point = new RocDataPoint(result.getParameterValuesAt(i), syntheticRocData[sample][0], syntheticRocData[sample][1], syntheticRocData[sample][2], syntheticRocData[sample][3]);
rocData.add(point);
}
rocDialog.showDialog(rocData, true);
}
public RocDialog getRocDialog() {
return rocDialog;
}
public void setRocDialog(RocDialog rocDialog) {
this.rocDialog = rocDialog;
}
}