001    /**
002     * Created by IntelliJ IDEA.
003     * User: Wei Wang
004     * Date: Dec 1, 2002
005     * Time: 2:09:10 AM
006     */
007    
008    package EVolve.util.Painters;
009    
010    import EVolve.visualization.AutoImage;
011    import EVolve.visualization.Predictor;
012    
013    public class MissRatePainter extends PredictionPainter{
014        private int predictCounter, hitCounter, lastX;
015        private float maxMiss = 0;
016    
017        public MissRatePainter(Predictor[] predictor) {
018            super(predictor);
019            predictCounter = 0;
020            hitCounter = 0;
021            lastX = 0;
022            maxMiss = 0;
023        }
024    
025        public void paint(AutoImage image, int x, int y, int z) {
026            predictor[y].newTarget2(z);
027    
028            if (x>=miss.length) {
029                int [] newmetrics = new int[miss.length+200];
030                for (int i =0; i< newmetrics.length; i++)
031                    if (i<miss.length)
032                        newmetrics[i] = miss[i];
033                    else newmetrics[i] = 0;
034                miss = newmetrics;
035            }
036    
037            if (x != lastX) {
038                if (predictCounter != 0)
039                    miss[lastX] = 300*(predictCounter - hitCounter)/predictCounter;
040                if (maxMiss < (float)miss[lastX]/300) {
041                    maxMiss = (float)miss[lastX]/300;
042                }
043                for (int i=lastX; i<x; i++)
044                {
045                    miss[i] = miss[lastX];
046                    if (miss[lastX] != 0)
047                        image.setColor(i,miss[lastX],colorRed);
048                }
049                lastX = x;
050            }
051            predictCounter++;
052    
053            if (predictor[y].isCorrect()) {
054                hitCounter ++;
055            }
056        }
057    
058        public float getMaxMiss() {
059            return maxMiss;
060        }
061    
062        public float getMissrate(int X) {
063            return ((float)miss[X])/10;
064        }
065    }