001 package calhoun.analysis.crf.io;
002
003 import java.io.BufferedReader;
004 import java.io.IOException;
005
006 public class Interval21HiddenSequenceTranslator extends IntInput {
007 private static final long serialVersionUID = 4413724139445660883L;
008
009 @Override
010 public int[] readSequence(BufferedReader r) throws IOException {
011 int[] states = super.readSequence(r);
012 // Weird boundary conditions here
013 int swap;
014 int ctr = 0;
015 // HEY!
016 for(int i=0; i<states.length-1; i++) {
017 swap = 0;
018 // ig-e
019 if (states[i]==0 && states[i+1]>=1 && states[i+1]<=3) {
020 swap = 13;
021 // e-i
022 } else if (states[i]>=1 && states[i]<=3 && states[i+1]>=4 && states[i+1]<=6) {
023 swap = 14;
024 // i-e
025 } else if (states[i]>=4 && states[i]<=6 && states[i+1]>=1 && states[i+1]<=3) {
026 swap = 15;
027 // e-ig
028 } else if (states[i]>=1 && states[i]<=3 && states[i+1]==0) {
029 swap = 16;
030 // ig-em
031 } else if (states[i]==0 && states[i+1]>=7 && states[i+1]<=9) {
032 swap = 17;
033 // em-im
034 } else if (states[i]>=7 && states[i]<=9 && states[i+1]>=10 && states[i+1]<=12) {
035 swap = 18;
036 // im-em
037 } else if (states[i]>=10 && states[i]<=12 && states[i+1]>=7 && states[i+1]<=9) {
038 swap = 19;
039 // em-ig
040 } else if (states[i]>=7 && states[i]<=9 && states[i+1]==0) {
041 swap = 20;
042 }
043 if (swap != 0) {
044 if (i != states.length-1 && states[i+2] == states[i+1]) {
045 states[i+1] = swap;
046 states[i+2] = swap;
047 } else if (i == states.length-1) {
048 states[i+1] = swap;
049 }
050
051 ctr++;
052 }
053 }
054 //System.out.println("made " + ctr + " changes, where length is " + states.length);
055 return states;
056 }
057
058 }