001 package calhoun.analysis.crf.scoring;
002
003 import calhoun.analysis.crf.LocalPathSimilarityScore;
004 import calhoun.analysis.crf.io.TrainingSequence;
005
006 public class SimScoreMinExonBoundaryMiscallsSV13 implements LocalPathSimilarityScore {
007
008 public double evaluate(int yprev, int y, TrainingSequence<?> seq, int pos) {
009 if (pos == 0) { return 0.0; }
010 int realy = seq.getY(pos);
011 int realyprev = seq.getY(pos-1);
012
013 if (isPStart(yprev,y) ^ isPStart(realyprev,realy)) { return -1.0; }
014 if (isPDon(yprev,y) ^ isPDon(realyprev,realy)) { return -1.0; }
015 if (isPAcc(yprev,y) ^ isPAcc(realyprev,realy)) { return -1.0; }
016 if (isPStop(yprev,y) ^ isPStop(realyprev,realy)) { return -1.0; }
017
018 if (isMStart(yprev,y) ^ isMStart(realyprev,realy)) { return -1.0; }
019 if (isMDon(yprev,y) ^ isMDon(realyprev,realy)) { return -1.0; }
020 if (isMAcc(yprev,y) ^ isMAcc(realyprev,realy)) { return -1.0; }
021 if (isMStop(yprev,y) ^ isMStop(realyprev,realy)) { return -1.0; }
022
023 return 0.0;
024 }
025
026 private boolean isPStart(int yprev, int y) {
027 if ( (yprev==0) && (y==1)) { return true; }
028 return false;
029 }
030
031 private boolean isPDon(int yprev, int y) {
032 if ( (yprev==1) && (y==4)) { return true; }
033 if ( (yprev==2) && (y==5)) { return true; }
034 if ( (yprev==3) && (y==6)) { return true; }
035 return false;
036 }
037
038 private boolean isPAcc(int yprev, int y) {
039 if ( (yprev==4) && (y==2)) { return true; }
040 if ( (yprev==5) && (y==3)) { return true; }
041 if ( (yprev==6) && (y==1)) { return true; }
042 return false;
043 }
044
045 private boolean isPStop(int yprev, int y) {
046 if ( (yprev==3) && (y==0)) { return true; }
047 return false;
048 }
049
050 private boolean isMStart(int yprev, int y) {
051 if ( (yprev==7) && (y==0)) { return true; }
052 return false;
053 }
054
055 private boolean isMDon(int yprev, int y) {
056 if ( (yprev==11) && (y==8)) { return true; }
057 if ( (yprev==10) && (y==7)) { return true; }
058 if ( (yprev==12) && (y==9)) { return true; }
059 return false;
060 }
061
062 private boolean isMAcc(int yprev, int y) {
063 if ( (yprev==9) && (y==11)) { return true; }
064 if ( (yprev==8) && (y==10)) { return true; }
065 if ( (yprev==7) && (y==12)) { return true; }
066 return false;
067 }
068
069 private boolean isMStop(int yprev, int y) {
070 if ( (yprev==0) && (y==9)) { return true; }
071 return false;
072 }
073 }