package ac.ooechs.oil.pipeclassification;

import ac.essex.gp.multiclass.PCM;
import ac.essex.gp.multiclass.ProgramClassificationMap;
import ac.essex.gp.multiclass.BetterDRS;
import ac.essex.ooechs.imaging.commons.window.classifiers.WindowClassifier;

/**
 * Looks at an image of a pipeline and sees which parts are good and which are bad.
 *
 * @author Olly Oechsle, University of Essex, Date: 25-Mar-2008
 * @version 1.0
 */
public class PipelineClassifier extends WindowClassifier {

    public static final int BACKGROUND = 0;
    public static final int PIPE = 1;

 /*   PCM pcm = new ProgramClassificationMap(new int[]{0,1}, new double[]{128.89089965820312,-110.66665649414062});

    public double classify(double[] feature) {
        double node1 = feature[48] - feature[26];
        return pcm.getClassFromOutput(node1 + feature[4]);
    }
*/

/*PCM pcm = new ProgramClassificationMap(new int[]{0,1}, new double[]{5.6386003494262695,4.290506839752197});
public double classify(double[] feature) {
    boolean node4 = ((feature[21] > 0.15985218266327642) && (feature[21] < feature[26]));
    boolean node9 = ((feature[35] > 2.0) && (feature[35] < feature[26]));
    double node8 = node9? 0.819573192266842 : feature[26];
    double node3 = node4? node8 : feature[16];
    double node1 = feature[9] + node3;
    return pcm.getClassFromOutput(Math.log(node1));
}*/

/*PCM pcm = new BetterDRS(9.802258343915446,255.0,new int[]{1,1,1,1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,-1,-1,-1,1,-1,0,0,0,1,1,0,1,1,1,1,1,0});;
public double classify(double[] feature) {
    double node3 = 1.8041860582349092;
    double node2 = node3 * feature[1];
    boolean node1 = ((node2 > feature[28]) && (node2 < feature[0]));
    double node12 = feature[43] / 3.3869746744175218;
    return pcm.getClassFromOutput(node1? node12 : feature[25]);

}*/

/*PCM pcm = new BetterDRS(-173.20000457763672,226.60000610351562,new int[]{0,-1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,-1,-1,-1,0,0,0,-1,-1,-1,0,-1,1,1,1,1,1,1,1,1,1,1,1,1,1});;
public double classify(double[] feature) {
    return pcm.getClassFromOutput(feature[26] - feature[0]);
}*/

/*PCM pcm = new BetterDRS(-0.8188347948119145,1.9835681461663097,new int[]{1,1,1,1,1,-1,0,-1,0,-1,0,0,0,0,0,0,0,-1,0,-1,-1,0,0,-1,0,0,-1,-1,0,-1,-1,-1,0,0,0,-1,0,0,-1,0,-1,-1,-1,-1,-1,-1,0,-1,0,0,0});;
public double classify(double[] feature) {
   return pcm.getClassFromOutput((feature[3] - feature[26]) / feature[26]);
}*/

PCM pcm = new BetterDRS(-166.83317947387695,4.9E-324,new int[]{0,-1,-1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1});;
public double classify(double[] feature) {
    return pcm.getClassFromOutput(feature[23] - feature[20]);
}

}
