001    package calhoun.analysis.crf.features.interval29;
002    
003    import java.util.Arrays;
004    import java.util.List;
005    
006    import calhoun.analysis.crf.BeanModel;
007    
008    
009    public class Interval29Model extends BeanModel {
010            private static final long serialVersionUID = 3959312826759045449L;
011    
012            private static boolean narrowBoundaries = false;
013            
014            public void setNarrowBoundaries(boolean narrowBoundaries) {
015                    Interval29Model.narrowBoundaries = narrowBoundaries;
016            }
017            
018            public static int getPadExon5prime() {
019                    if (narrowBoundaries) {
020                            return 4;
021                    } else {
022                            return 6;
023                    }
024            }
025    
026            public static int getPadExon3prime() {
027                    if (narrowBoundaries) {
028                            return 1;
029                    } else {
030                            return 3;
031                    }
032            }
033            
034            public static int getPadIntron5prime() {
035                    return 6;
036            }       
037            
038            public static int getPadIntron3prime() {
039                    return 9;
040            }       
041            
042            public static int getPadIntergenic() {
043                    return 9;
044            }                       
045            
046            
047            static Node[] nodeArray = new Node[] {
048                    new Node(0, "intergenic"),
049                    new Node(1, "exon0"),
050                    new Node(2, "exon1"),
051                    new Node(3, "exon2"),
052                    new Node(4, "intron0"),
053                    new Node(5, "intron1"),
054                    new Node(6, "intron2"),
055                    new Node(7, "exon0m"),
056                    new Node(8, "exon1m"),
057                    new Node(9, "exon2m"),
058                    new Node(10, "intron0m"),
059                    new Node(11, "intron1m"),
060                    new Node(12, "intron2m"),
061                    new Node(13, "ig-e"),
062                    new Node(14, "e-ig"),
063                    new Node(15, "e-i0"),
064                    new Node(16, "e-i1"),
065                    new Node(17, "e-i2"),
066                    new Node(18, "i-e0"),
067                    new Node(19, "i-e1"),
068                    new Node(20, "i-e2"),
069                    new Node(21, "ig-em"),
070                    new Node(22, "em-ig"),
071                    new Node(23, "em-i0m"),
072                    new Node(24, "em-i1m"),
073                    new Node(25, "em-i2m"),
074                    new Node(26, "im-e0m"),
075                    new Node(27, "im-e1m"),
076                    new Node(28, "im-e2m")
077            };
078            
079            static Edge[] edgeArray = new Edge[] {
080                    // To self
081                    new Edge(nodeArray[0], nodeArray[0]),
082                    new Edge(nodeArray[1], nodeArray[1]),
083                    new Edge(nodeArray[2], nodeArray[2]),
084                    new Edge(nodeArray[3], nodeArray[3]),
085                    new Edge(nodeArray[4], nodeArray[4]),
086                    new Edge(nodeArray[5], nodeArray[5]),
087                    new Edge(nodeArray[6], nodeArray[6]),
088                    new Edge(nodeArray[7], nodeArray[7]),
089                    new Edge(nodeArray[8], nodeArray[8]),
090                    new Edge(nodeArray[9], nodeArray[9]),
091                    new Edge(nodeArray[10], nodeArray[10]),
092                    new Edge(nodeArray[11], nodeArray[11]),
093                    new Edge(nodeArray[12], nodeArray[12]),
094                    new Edge(nodeArray[13], nodeArray[13]),
095                    new Edge(nodeArray[14], nodeArray[14]),
096                    new Edge(nodeArray[15], nodeArray[15]),
097                    new Edge(nodeArray[16], nodeArray[16]),
098                    new Edge(nodeArray[17], nodeArray[17]),
099                    new Edge(nodeArray[18], nodeArray[18]),
100                    new Edge(nodeArray[19], nodeArray[19]),
101                    new Edge(nodeArray[20], nodeArray[20]),
102                    new Edge(nodeArray[21], nodeArray[21]),
103                    new Edge(nodeArray[22], nodeArray[22]),
104                    new Edge(nodeArray[23], nodeArray[23]),
105                    new Edge(nodeArray[24], nodeArray[24]),
106                    new Edge(nodeArray[25], nodeArray[25]),
107                    new Edge(nodeArray[26], nodeArray[26]),
108                    new Edge(nodeArray[27], nodeArray[27]),
109                    new Edge(nodeArray[28], nodeArray[28]),
110                    
111                    // Intergenic to intergenic-exon_i boundary
112                    new Edge(nodeArray[0], nodeArray[13]),
113                    // Intergenic-exon_i boundary to exon_i
114                    new Edge(nodeArray[13], nodeArray[1]),
115                    new Edge(nodeArray[13], nodeArray[2]),
116                    new Edge(nodeArray[13], nodeArray[3]),
117                    // Intergenic to intergenic-exon_im boundary
118                    new Edge(nodeArray[0], nodeArray[21]),
119                    // Intergenic-exonm boundary to exonm
120                    new Edge(nodeArray[21], nodeArray[7]),
121                    new Edge(nodeArray[21], nodeArray[8]),
122                    new Edge(nodeArray[21], nodeArray[9]),
123                    
124                    // Exon_i to exon-intergenic boundary
125                    new Edge(nodeArray[1], nodeArray[14]),
126                    new Edge(nodeArray[2], nodeArray[14]),
127                    new Edge(nodeArray[3], nodeArray[14]),
128                    // Exon-intergenic boundary to intergenic
129                    new Edge(nodeArray[14], nodeArray[0]),
130                    // Exon_im to exonm-intergenic boundary
131                    new Edge(nodeArray[7], nodeArray[22]),
132                    new Edge(nodeArray[8], nodeArray[22]),
133                    new Edge(nodeArray[9], nodeArray[22]),
134                    // Exonm-intergenic boundary to intergenic
135                    new Edge(nodeArray[22], nodeArray[0]),
136                    
137                    // Exon_i to exon-intron_j boundary
138                    new Edge(nodeArray[1], nodeArray[15]),
139                    new Edge(nodeArray[2], nodeArray[15]),
140                    new Edge(nodeArray[3], nodeArray[15]),
141                    new Edge(nodeArray[1], nodeArray[16]),
142                    new Edge(nodeArray[2], nodeArray[16]),
143                    new Edge(nodeArray[3], nodeArray[16]),
144                    new Edge(nodeArray[1], nodeArray[17]),
145                    new Edge(nodeArray[2], nodeArray[17]),
146                    new Edge(nodeArray[3], nodeArray[17]),
147                    // Exon-intron_i boundary to intron_i
148                    new Edge(nodeArray[15], nodeArray[4]),
149                    new Edge(nodeArray[16], nodeArray[5]),
150                    new Edge(nodeArray[17], nodeArray[6]),
151                    
152                    // Intron_i to intron-exon_j boundary
153                    new Edge(nodeArray[4], nodeArray[18]),
154                    new Edge(nodeArray[5], nodeArray[18]),
155                    new Edge(nodeArray[6], nodeArray[18]),
156                    new Edge(nodeArray[4], nodeArray[19]),
157                    new Edge(nodeArray[5], nodeArray[19]),
158                    new Edge(nodeArray[6], nodeArray[19]),
159                    new Edge(nodeArray[4], nodeArray[20]),
160                    new Edge(nodeArray[5], nodeArray[20]),
161                    new Edge(nodeArray[6], nodeArray[20]),  
162                    // Intron-exon_i boundary to exon_i
163                    new Edge(nodeArray[18], nodeArray[1]),
164                    new Edge(nodeArray[19], nodeArray[2]),
165                    new Edge(nodeArray[20], nodeArray[3]),
166    
167                    // Exon_im to exonm-intron_jm boundary
168                    new Edge(nodeArray[7], nodeArray[23]),
169                    new Edge(nodeArray[8], nodeArray[23]),
170                    new Edge(nodeArray[9], nodeArray[23]),
171                    new Edge(nodeArray[7], nodeArray[24]),
172                    new Edge(nodeArray[8], nodeArray[24]),
173                    new Edge(nodeArray[9], nodeArray[24]),
174                    new Edge(nodeArray[7], nodeArray[25]),
175                    new Edge(nodeArray[8], nodeArray[25]),
176                    new Edge(nodeArray[9], nodeArray[25]),
177                    // Exonm-intron_im boundary to intron_im
178                    new Edge(nodeArray[23], nodeArray[10]),
179                    new Edge(nodeArray[24], nodeArray[11]),
180                    new Edge(nodeArray[25], nodeArray[12]),
181    
182                    // Intron_im to intronm-exon_jm boundary
183                    new Edge(nodeArray[10], nodeArray[26]),
184                    new Edge(nodeArray[11], nodeArray[26]),
185                    new Edge(nodeArray[12], nodeArray[26]),
186                    new Edge(nodeArray[10], nodeArray[27]),
187                    new Edge(nodeArray[11], nodeArray[27]),
188                    new Edge(nodeArray[12], nodeArray[27]),
189                    new Edge(nodeArray[10], nodeArray[28]),
190                    new Edge(nodeArray[11], nodeArray[28]),
191                    new Edge(nodeArray[12], nodeArray[28]),
192                    // Intronm-exonm boundary to exonm
193                    new Edge(nodeArray[26], nodeArray[7]),
194                    new Edge(nodeArray[27], nodeArray[8]),
195                    new Edge(nodeArray[28], nodeArray[9])  // done
196            };
197            
198            public List checkValidTransitions(List data) {
199                    return Interval29Tools.checkValidTransitions(data);
200            }
201            
202            public Interval29Model() {
203                    nodes = Arrays.asList(nodeArray);
204                    edges = Arrays.asList(edgeArray);
205            }
206    }