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