1 #ifdef _cplusplus
2 extern "C" {
3 #endif
4 #include "genestretch6.h"
5
6
7 # line 6 "genestretch6.c"
8
9
10 /***************** C functions ****************/
11 /* Written using dynamite */
12 /* Sat Sep 8 09:05:32 2007 */
13 /* email birney@sanger.ac.uk */
14 /* http://www.sanger.ac.uk/Users/birney/dynamite */
15 /*************************************************/
16
17
18 /* Please report any problems or bugs to */
19 /* Ewan Birney, birney@sanger.ac.uk */
20
21
22 /* basic set of macros to map states to numbers */
23 #define MATCH 0
24 #define INSERT 1
25 #define DELETE 2
26 #define INTRON_0 3
27 #define INTRON_1 4
28 #define INTRON_2 5
29
30
31 #define START 0
32 #define END 1
33 #define BEFORE_MATCH_CODING 2
34 #define AFTER_MATCH_CODING 3
35
36
37 #define GeneStretch6_EXPL_MATRIX(this_matrix,i,j,STATE) this_matrix->basematrix->matrix[((j+10)*6)+STATE][i+1]
38 #define GeneStretch6_EXPL_SPECIAL(matrix,i,j,STATE) matrix->basematrix->specmatrix[STATE][j+10]
39 #define GeneStretch6_READ_OFF_ERROR -12
40
41
42
43 #define GeneStretch6_VSMALL_MATRIX(mat,i,j,STATE) mat->basematrix->matrix[(j+11)%11][((i+1)*6)+STATE]
44 #define GeneStretch6_VSMALL_SPECIAL(mat,i,j,STATE) mat->basematrix->specmatrix[(j+11)%11][STATE]
45
46
47
48
49 #define GeneStretch6_SHATTER_SPECIAL(matrix,i,j,STATE) matrix->shatter->special[STATE][j]
50 #define GeneStretch6_SHATTER_MATRIX(matrix,i,j,STATE) fetch_cell_value_ShatterMatrix(mat->shatter,i,j,STATE)
51
52
53 /* Function: PackAln_read_Shatter_GeneStretch6(mat)
54 *
55 * Descrip: Reads off PackAln from shatter matrix structure
56 *
57 *
58 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
59 *
60 * Return [UNKN ] Undocumented return value [PackAln *]
61 *
62 */
PackAln_read_Shatter_GeneStretch6(GeneStretch6 * mat)63 PackAln * PackAln_read_Shatter_GeneStretch6(GeneStretch6 * mat)
64 {
65 GeneStretch6_access_func_holder holder;
66
67
68 holder.access_main = GeneStretch6_shatter_access_main;
69 holder.access_special = GeneStretch6_shatter_access_special;
70 assert(mat);
71 assert(mat->shatter);
72 return PackAln_read_generic_GeneStretch6(mat,holder);
73 }
74
75
76 /* Function: GeneStretch6_shatter_access_main(mat,i,j,state)
77 *
78 * Descrip: No Description
79 *
80 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
81 * Arg: i [UNKN ] Undocumented argument [int]
82 * Arg: j [UNKN ] Undocumented argument [int]
83 * Arg: state [UNKN ] Undocumented argument [int]
84 *
85 * Return [UNKN ] Undocumented return value [int]
86 *
87 */
GeneStretch6_shatter_access_main(GeneStretch6 * mat,int i,int j,int state)88 int GeneStretch6_shatter_access_main(GeneStretch6 * mat,int i,int j,int state)
89 {
90 return GeneStretch6_SHATTER_MATRIX(mat,i,j,state);
91 }
92
93
94 /* Function: GeneStretch6_shatter_access_special(mat,i,j,state)
95 *
96 * Descrip: No Description
97 *
98 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
99 * Arg: i [UNKN ] Undocumented argument [int]
100 * Arg: j [UNKN ] Undocumented argument [int]
101 * Arg: state [UNKN ] Undocumented argument [int]
102 *
103 * Return [UNKN ] Undocumented return value [int]
104 *
105 */
GeneStretch6_shatter_access_special(GeneStretch6 * mat,int i,int j,int state)106 int GeneStretch6_shatter_access_special(GeneStretch6 * mat,int i,int j,int state)
107 {
108 return GeneStretch6_SHATTER_SPECIAL(mat,i,j,state);
109 }
110
111
112 /* Function: calculate_shatter_GeneStretch6(mat,dpenv)
113 *
114 * Descrip: This function calculates the GeneStretch6 matrix when in shatter mode
115 *
116 *
117 * Arg: mat [UNKN ] (null) [GeneStretch6 *]
118 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
119 *
120 * Return [UNKN ] Undocumented return value [boolean]
121 *
122 */
calculate_shatter_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)123 boolean calculate_shatter_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)
124 {
125 int i;
126 int j;
127 int k;
128 int should_calc;
129 int leni;
130 int lenj;
131 int tot;
132 int num;
133 int starti;
134 int startj;
135 int endi;
136 int endj;
137
138
139 int * SIG_0_0;
140 int * SIG_1_3;
141 int * SIG_1_6;
142 int * SIG_1_5;
143 int * SIG_1_4;
144 int * SIG_1_2;
145 int * SIG_1_1;
146 int * SIG_0_3;
147 int * SIG_0_6;
148 int * SIG_0_5;
149 int * SIG_0_4;
150 int * SIG_0_2;
151 int * SIG_0_1;
152 int * SIG_1_0;
153 int * SIG_0_8;
154 int * SIG_0_9;
155 int * SIG_0_10;
156
157
158 leni = mat->leni;
159 lenj = mat->lenj;
160
161
162 mat->shatter = new_ShatterMatrix(dpenv,6,lenj,4);
163 prepare_DPEnvelope(dpenv);
164 starti = dpenv->starti;
165 if( starti < 0 )
166 starti = 0;
167 startj = dpenv->startj;
168 if( startj < 0 )
169 startj = 0;
170 endi = dpenv->endi;
171 if( endi > mat->leni )
172 endi = mat->leni;
173 endj = dpenv->endj;
174 if( endj > mat->lenj )
175 endj = mat->lenj;
176 tot = (endi-starti) * (endj-startj);
177 num = 0;
178
179
180 start_reporting("GeneStretch6 Matrix calculation: ");
181 for(j=startj;j<endj;j++) {
182 auto int score;
183 auto int temp;
184 for(i=starti;i<endi;i++) {
185 /* Check if is in envelope - code identical to is_in_DPEnvelope, but aggressively inlined here for speed */
186 should_calc = 0;
187 for(k=0;k<dpenv->len;k++) {
188 auto DPUnit * u;
189 u = dpenv->dpu[k];
190 switch(u->type) {
191 case DPENV_RECT :
192 if( i >= u->starti && j >= u->startj && i < (u->starti+u->height) && j < (u->startj+u->length))
193 should_calc = 1;
194 break;
195 case DPENV_DIAG :
196 if( abs( (i-j) - (u->starti-u->startj)) <= u->height && i+j >= u->starti+u->startj && i+j+u->length >= u->starti+u->startj)
197 should_calc = 1;
198 break;
199 }
200 if( should_calc == 1 )
201 break;
202 }
203 if( should_calc == 0)
204 continue;
205
206
207 SIG_0_0 = fetch_cell_from_ShatterMatrix(mat->shatter,i,j);
208 SIG_1_3 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-3);
209 SIG_1_6 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-6);
210 SIG_1_5 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-5);
211 SIG_1_4 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-4);
212 SIG_1_2 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-2);
213 SIG_1_1 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-1);
214 SIG_0_3 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-3);
215 SIG_0_6 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-6);
216 SIG_0_5 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-5);
217 SIG_0_4 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-4);
218 SIG_0_2 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-2);
219 SIG_0_1 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-1);
220 SIG_1_0 = fetch_cell_from_ShatterMatrix(mat->shatter,i-1,j-0);
221 SIG_0_8 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-8);
222 SIG_0_9 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-9);
223 SIG_0_10 = fetch_cell_from_ShatterMatrix(mat->shatter,i-0,j-10);
224
225
226
227
228 /* For state MATCH */
229 /* setting first movement to score */
230 score = SIG_1_3[MATCH] + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
231 /* From state INSERT to state MATCH */
232 temp = SIG_1_3[INSERT] + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
233 if( temp > score ) {
234 score = temp;
235 }
236 /* From state DELETE to state MATCH */
237 temp = SIG_1_3[DELETE] + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
238 if( temp > score ) {
239 score = temp;
240 }
241 /* From state START to state MATCH */
242 temp = GeneStretch6_SHATTER_SPECIAL(mat,i-1,j-3,START) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
243 if( temp > score ) {
244 score = temp;
245 }
246 /* From state BEFORE_MATCH_CODING to state MATCH */
247 temp = GeneStretch6_SHATTER_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
248 if( temp > score ) {
249 score = temp;
250 }
251 /* From state INTRON_0 to state MATCH */
252 temp = SIG_1_6[INTRON_0] + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
253 if( temp > score ) {
254 score = temp;
255 }
256 /* From state INTRON_1 to state MATCH */
257 temp = SIG_1_5[INTRON_1] + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
258 if( temp > score ) {
259 score = temp;
260 }
261 /* From state INTRON_2 to state MATCH */
262 temp = SIG_1_4[INTRON_2] + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
263 if( temp > score ) {
264 score = temp;
265 }
266 /* From state MATCH to state MATCH */
267 temp = SIG_1_2[MATCH] + mat->gp->transition[GP4_DELETE_1_BASE];
268 if( temp > score ) {
269 score = temp;
270 }
271 /* From state MATCH to state MATCH */
272 temp = SIG_1_1[MATCH] + mat->gp->transition[GP4_DELETE_2_BASE];
273 if( temp > score ) {
274 score = temp;
275 }
276 /* From state MATCH to state MATCH */
277 temp = SIG_1_4[MATCH] + mat->gp->transition[GP4_INSERT_1_BASE];
278 if( temp > score ) {
279 score = temp;
280 }
281 /* From state MATCH to state MATCH */
282 temp = SIG_1_5[MATCH] + mat->gp->transition[GP4_INSERT_2_BASE];
283 if( temp > score ) {
284 score = temp;
285 }
286
287
288 /* Ok - finished max calculation for MATCH */
289 /* Add any movement independant score and put away */
290 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
291 SIG_0_0[MATCH] = score;
292
293
294 /* state MATCH is a source for special END */
295 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
296 if( temp > GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) ) {
297 GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) = temp;
298 }
299
300
301
302
303 /* state MATCH is a source for special AFTER_MATCH_CODING */
304 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
305 if( temp > GeneStretch6_SHATTER_SPECIAL(mat,i,j,AFTER_MATCH_CODING) ) {
306 GeneStretch6_SHATTER_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = temp;
307 }
308
309
310
311
312 /* Finished calculating state MATCH */
313
314
315 /* For state INSERT */
316 /* setting first movement to score */
317 score = SIG_0_3[MATCH] + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
318 /* From state INSERT to state INSERT */
319 temp = SIG_0_3[INSERT] + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
320 if( temp > score ) {
321 score = temp;
322 }
323 /* From state DELETE to state INSERT */
324 temp = SIG_0_3[DELETE] + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
325 if( temp > score ) {
326 score = temp;
327 }
328 /* From state START to state INSERT */
329 temp = GeneStretch6_SHATTER_SPECIAL(mat,i-0,j-3,START) + (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
330 if( temp > score ) {
331 score = temp;
332 }
333 /* From state INTRON_0 to state INSERT */
334 temp = SIG_0_6[INTRON_0] + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
335 if( temp > score ) {
336 score = temp;
337 }
338 /* From state INTRON_1 to state INSERT */
339 temp = SIG_0_5[INTRON_1] + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
340 if( temp > score ) {
341 score = temp;
342 }
343 /* From state INTRON_2 to state INSERT */
344 temp = SIG_0_4[INTRON_2] + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
345 if( temp > score ) {
346 score = temp;
347 }
348 /* From state INSERT to state INSERT */
349 temp = SIG_0_2[INSERT] + mat->gp->transition[GP4_DELETE_1_BASE];
350 if( temp > score ) {
351 score = temp;
352 }
353 /* From state INSERT to state INSERT */
354 temp = SIG_0_1[INSERT] + mat->gp->transition[GP4_DELETE_2_BASE];
355 if( temp > score ) {
356 score = temp;
357 }
358
359
360 /* Ok - finished max calculation for INSERT */
361 /* Add any movement independant score and put away */
362 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
363 SIG_0_0[INSERT] = score;
364
365
366 /* state INSERT is a source for special END */
367 temp = score + (mat->query->seg[i]->transition[GW_INSERT2END]) + (0) ;
368 if( temp > GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) ) {
369 GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) = temp;
370 }
371
372
373
374
375 /* Finished calculating state INSERT */
376
377
378 /* For state DELETE */
379 /* setting first movement to score */
380 score = SIG_1_0[MATCH] + mat->query->seg[i]->transition[GW_MATCH2DELETE];
381 /* From state INSERT to state DELETE */
382 temp = SIG_1_0[INSERT] + mat->query->seg[i]->transition[GW_INSERT2DELETE];
383 if( temp > score ) {
384 score = temp;
385 }
386 /* From state DELETE to state DELETE */
387 temp = SIG_1_0[DELETE] + mat->query->seg[i]->transition[GW_DELETE2DELETE];
388 if( temp > score ) {
389 score = temp;
390 }
391 /* From state START to state DELETE */
392 temp = GeneStretch6_SHATTER_SPECIAL(mat,i-1,j-0,START) + mat->query->seg[i]->transition[GW_START2DELETE];
393 if( temp > score ) {
394 score = temp;
395 }
396
397
398 /* Ok - finished max calculation for DELETE */
399 /* Add any movement independant score and put away */
400 SIG_0_0[DELETE] = score;
401
402
403 /* state DELETE is a source for special END */
404 temp = score + (mat->query->seg[i]->transition[GW_DELETE2END]) + (0) ;
405 if( temp > GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) ) {
406 GeneStretch6_SHATTER_SPECIAL(mat,i,j,END) = temp;
407 }
408
409
410
411
412 /* Finished calculating state DELETE */
413
414
415 /* For state INTRON_0 */
416 /* setting first movement to score */
417 score = SIG_0_8[MATCH] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
418 /* From state INSERT to state INTRON_0 */
419 temp = SIG_0_8[INSERT] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
420 if( temp > score ) {
421 score = temp;
422 }
423 /* From state INTRON_0 to state INTRON_0 */
424 temp = SIG_0_1[INTRON_0] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
425 if( temp > score ) {
426 score = temp;
427 }
428
429
430 /* Ok - finished max calculation for INTRON_0 */
431 /* Add any movement independant score and put away */
432 SIG_0_0[INTRON_0] = score;
433
434
435 /* Finished calculating state INTRON_0 */
436
437
438 /* For state INTRON_1 */
439 /* setting first movement to score */
440 score = SIG_0_9[MATCH] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
441 /* From state INSERT to state INTRON_1 */
442 temp = SIG_0_9[INSERT] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
443 if( temp > score ) {
444 score = temp;
445 }
446 /* From state INTRON_1 to state INTRON_1 */
447 temp = SIG_0_1[INTRON_1] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
448 if( temp > score ) {
449 score = temp;
450 }
451
452
453 /* Ok - finished max calculation for INTRON_1 */
454 /* Add any movement independant score and put away */
455 SIG_0_0[INTRON_1] = score;
456
457
458 /* Finished calculating state INTRON_1 */
459
460
461 /* For state INTRON_2 */
462 /* setting first movement to score */
463 score = SIG_0_10[MATCH] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
464 /* From state INSERT to state INTRON_2 */
465 temp = SIG_0_10[INSERT] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
466 if( temp > score ) {
467 score = temp;
468 }
469 /* From state INTRON_2 to state INTRON_2 */
470 temp = SIG_0_1[INTRON_2] + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
471 if( temp > score ) {
472 score = temp;
473 }
474
475
476 /* Ok - finished max calculation for INTRON_2 */
477 /* Add any movement independant score and put away */
478 SIG_0_0[INTRON_2] = score;
479
480
481 /* Finished calculating state INTRON_2 */
482 }
483
484
485 /* Special state START has no special to special movements */
486
487
488 /* Special state END has special to speical */
489 /* Set score to current score (remember, state probably updated during main loop */
490 score = GeneStretch6_SHATTER_SPECIAL(mat,0,j,END);
491
492
493 /* Source MATCH for state END is not special... already calculated */
494 /* Source INSERT for state END is not special... already calculated */
495 /* Source DELETE for state END is not special... already calculated */
496 /* Source AFTER_MATCH_CODING is a special source for END */
497 temp = GeneStretch6_SHATTER_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
498 if( temp > score )
499 score = temp;
500
501
502 /* Put back score... (now updated!) */
503 GeneStretch6_SHATTER_SPECIAL(mat,0,j,END) = score;
504 /* Finished updating state END */
505
506
507
508
509 /* Special state BEFORE_MATCH_CODING has special to speical */
510 /* Set score to current score (remember, state probably updated during main loop */
511 score = GeneStretch6_SHATTER_SPECIAL(mat,0,j,BEFORE_MATCH_CODING);
512
513
514 /* Source START is a special source for BEFORE_MATCH_CODING */
515 temp = GeneStretch6_SHATTER_SPECIAL(mat,0,j - 3,START) + (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
516 if( temp > score )
517 score = temp;
518
519
520 /* Source BEFORE_MATCH_CODING is a special source for BEFORE_MATCH_CODING */
521 temp = GeneStretch6_SHATTER_SPECIAL(mat,0,j - 3,BEFORE_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
522 if( temp > score )
523 score = temp;
524
525
526 /* Put back score... (now updated!) */
527 GeneStretch6_SHATTER_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = score;
528 /* Finished updating state BEFORE_MATCH_CODING */
529
530
531
532
533 /* Special state AFTER_MATCH_CODING has special to speical */
534 /* Set score to current score (remember, state probably updated during main loop */
535 score = GeneStretch6_SHATTER_SPECIAL(mat,0,j,AFTER_MATCH_CODING);
536
537
538 /* Source MATCH for state AFTER_MATCH_CODING is not special... already calculated */
539 /* Source AFTER_MATCH_CODING is a special source for AFTER_MATCH_CODING */
540 temp = GeneStretch6_SHATTER_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
541 if( temp > score )
542 score = temp;
543
544
545 /* Put back score... (now updated!) */
546 GeneStretch6_SHATTER_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = score;
547 /* Finished updating state AFTER_MATCH_CODING */
548
549
550 }
551 stop_reporting();
552 return TRUE;
553 }
554
555
556 /* Function: search_GeneStretch6(dbsi,out,querydb,targetdb,gp,general_model)
557 *
558 * Descrip: This function makes a database search of GeneStretch6
559 * It uses the dbsi structure to choose which implementation
560 * to use of the database searching. This way at run time you
561 * can switch between single threaded/multi-threaded or hardware
562 *
563 *
564 * Arg: dbsi [UNKN ] Undocumented argument [DBSearchImpl *]
565 * Arg: out [UNKN ] Undocumented argument [Hscore *]
566 * Arg: querydb [UNKN ] Undocumented argument [GeneWiseDB*]
567 * Arg: targetdb [UNKN ] Undocumented argument [GenomicDB*]
568 * Arg: gp [UNKN ] Undocumented argument [GeneParser4Score *]
569 * Arg: general_model [UNKN ] Undocumented argument [GeneralGeneModelScore *]
570 *
571 * Return [UNKN ] Undocumented return value [Search_Return_Type]
572 *
573 */
search_GeneStretch6(DBSearchImpl * dbsi,Hscore * out,GeneWiseDB * querydb,GenomicDB * targetdb,GeneParser4Score * gp,GeneralGeneModelScore * general_model)574 Search_Return_Type search_GeneStretch6(DBSearchImpl * dbsi,Hscore * out,GeneWiseDB* querydb,GenomicDB* targetdb ,GeneParser4Score * gp,GeneralGeneModelScore * general_model)
575 {
576 #ifdef PTHREAD
577 int i;
578 int thr_no;
579 pthread_attr_t pat;
580 struct thread_pool_holder_GeneStretch6 * holder;
581 #endif
582 if( out == NULL ) {
583 warn("Passed in a null Hscore object into search_GeneStretch6. Can't process results!");
584 return SEARCH_ERROR;
585 }
586 if( dbsi == NULL ) {
587 warn("Passed in a null DBSearchImpl object into search_GeneStretch6. Can't process results!");
588 return SEARCH_ERROR;
589 }
590 if( dbsi->trace_level > 5 )
591 warn("Asking for trace level of %d in database search for GeneStretch6, but it was compiled with a trace level of -2139062144. Not all trace statements can be shown",dbsi->trace_level);
592 switch(dbsi->type) { /*switch on implementation*/
593 case DBSearchImpl_Serial :
594 return serial_search_GeneStretch6(out,querydb, targetdb ,gp,general_model);
595 case DBSearchImpl_Pthreads :
596 #ifdef PTHREAD
597 holder = (struct thread_pool_holder_GeneStretch6 *) ckalloc(sizeof(struct thread_pool_holder_GeneStretch6));
598 if( holder == NULL ) {
599 warn("Unable to allocated thread pool datastructure...");
600 return SEARCH_ERROR;
601 }
602 holder->out = out;
603 holder->dbsi = dbsi;
604 holder->querydb = querydb;
605 holder->targetdb = targetdb;
606 holder->gp = gp;
607 holder->general_model = general_model;
608 if( pthread_mutex_init(&(holder->input_lock),NULL) != 0 )
609 fatal("Unable to iniated input mutex lock");
610 if( pthread_mutex_init(&(holder->output_lock),NULL) != 0 )
611 fatal("Unable to iniated output mutex lock");
612 /* Let us rock! */
613 thr_no = number_of_threads_DBSearchImpl(dbsi);
614 holder->pool = ckcalloc (thr_no,sizeof(pthread_t));
615 if( holder->pool == NULL ) {
616 warn("Unable to allocated thread pools");
617 return SEARCH_ERROR;
618 }
619 /* Build a thread attribute to make sure we get the most out of SMP boxes */
620 pthread_attr_init(&pat);
621 /* Give thread libraries a hint that threads should be kernel threads */
622 #ifndef __sgi /* SGI can't set system scope ... */
623 #ifdef HAS_PTHREAD_SETSCOPE
624 pthread_attr_setscope(&pat, PTHREAD_SCOPE_SYSTEM);
625 #endif /* set scope */
626 #endif /* sgi */
627 /* Give thread libraries a hint that there are num of threads to run */
628 #ifdef HAS_PTHREAD_SETCONCURRENCY
629 pthread_setconcurrency(thr_no+1);
630 #endif /* set concurrency */
631 for(i=0;i<thr_no;i++) {
632 if( pthread_create(holder->pool+i,&pat,thread_loop_GeneStretch6,(void *)holder) )
633 fatal("Unable to create a thread!");
634 }
635 /* Now - wait for all the threads to exit */
636 for(i=0;i<thr_no;i++) {
637 if( pthread_join(holder->pool[i],NULL) != 0 )
638 fatal("Unable to join a thread!");
639 }
640 /* Deallocate the thread structures */
641 ckfree(holder->pool);
642 ckfree(holder);
643 return SEARCH_OK;
644 #else /* not compiled with threads */
645 warn("You did not specifiy the PTHREAD compile when compiled the C code for GeneStretch6");
646 #endif /* finished threads */
647 default :
648 warn("database search implementation %s was not provided in the compiled dynamite file from GeneStretch6",impl_string_DBSearchImpl(dbsi));
649 return SEARCH_ERROR;
650 } /* end of switch on implementation */
651
652
653 }
654
655
656 /* Function: thread_loop_GeneStretch6(ptr)
657 *
658 * Descrip: Infinite loop code foreach thread for GeneStretch6
659 *
660 *
661 * Arg: ptr [UNKN ] Undocumented argument [void *]
662 *
663 * Return [UNKN ] Undocumented return value [void *]
664 *
665 */
666 #ifdef PTHREAD
thread_loop_GeneStretch6(void * ptr)667 void * thread_loop_GeneStretch6(void * ptr)
668 {
669 struct thread_pool_holder_GeneStretch6 * holder;
670 int db_status;
671 int score;
672 DataScore * ds;
673 GeneWiseScore* query;
674 ComplexSequence* target;
675
676
677 holder = (struct thread_pool_holder_GeneStretch6 *) ptr;
678 if ( holder->dbsi->trace_level >= 1 )
679 fprintf(holder->dbsi->trace_file,"Entering infinite loop for thread...\n");
680
681
682 while(1) { /*Infinite loop over all models*/
683 /* Get input lock */
684
685
686 if ( holder->dbsi->trace_level >= 2 )
687 fprintf(holder->dbsi->trace_file,"About to get input lock for main reload\n");
688 if( pthread_mutex_lock(&(holder->input_lock))!= 0 )
689 fatal("Error on getting input lock for GeneStretch6");
690 if ( holder->dbsi->trace_level >= 2 )
691 fprintf(holder->dbsi->trace_file,"Got input lock for main reload\n");
692
693
694 if( holder->search_has_ended == TRUE ) {
695 if ( holder->dbsi->trace_level >= 2 )
696 fprintf(holder->dbsi->trace_file,"Database search finished for me!...\n");
697 if( pthread_mutex_unlock(&(holder->input_lock))!= 0 )
698 fatal("Error in releasing input lock for GeneStretch6");
699 if ( holder->dbsi->trace_level >= 2 )
700 fprintf(holder->dbsi->trace_file,"Released lock and broken out of loop\n");
701 break;
702 }
703
704
705 /* Get storage space now, as we have to read in the info for the db now */
706 if ( holder->dbsi->trace_level >= 3 )
707 fprintf(holder->dbsi->trace_file,"Getting new DataScore from storage...\n");
708 ds = new_DataScore();
709
710
711 /* We need to get our query object */
712 if ( holder->dbsi->trace_level >= 3 )
713 fprintf(holder->dbsi->trace_file,"Starting query database...\n");
714
715
716 if( holder->query_init == FALSE) {
717 holder->query = init_GeneWiseDB(holder->querydb,&db_status);
718 holder->query_init = TRUE;
719 if( db_status == DB_RETURN_ERROR )
720 fatal("Unable to initalise query database in GeneStretch6 search");
721 }
722 query = hard_link_GeneWiseScore(holder->query);
723 /* get query information into datascore */
724 dataentry_add_GeneWiseDB(ds->query,query,holder->querydb);
725
726
727 if( holder->target_init == FALSE ) { /*if the db has not been init'd*/
728 if ( holder->dbsi->trace_level >= 3 )
729 fprintf(holder->dbsi->trace_file,"Starting target database...\n");
730 target = init_GenomicDB(holder->targetdb,&db_status);
731 holder->target_init = TRUE;
732 } /* end of if the db has not been init'd */
733 else { /*Normal reload*/
734 target = reload_GenomicDB(NULL,holder->targetdb,&db_status);
735 } /* end of Normal reload */
736
737
738 /* Check to see what the reload is like */
739
740
741 if( db_status == DB_RETURN_ERROR ) {
742 fatal("In searching GeneStretch6, Reload error on database target, in threads");
743 }
744
745
746 if( db_status == DB_RETURN_END) { /*End of target database*/
747 /* close target database and schedule it for initalisation by next thread */
748 close_GenomicDB(NULL,holder->targetdb);
749 holder->target_init = FALSE;
750 if ( holder->dbsi->trace_level >= 2 )
751 fprintf(holder->dbsi->trace_file,"Target Database to be reloaded...\n");
752
753
754 /* free'ing the query object */
755 free_GeneWiseScore(holder->query);
756 /* get the next query object for the next thread */
757 holder->query = reload_GeneWiseDB(NULL,holder->querydb,&db_status);
758 if( db_status == DB_RETURN_ERROR )
759 fatal("In searching GeneStretch6, reload error on database query, in threads");
760 if( db_status == DB_RETURN_END ) { /*last load!*/
761 /* End of target and query database - finished search! */
762 close_GeneWiseDB(NULL,holder->querydb);
763 holder->search_has_ended = TRUE;
764 } /* end of last load! */
765
766
767 /* release input mutex */
768 if ( holder->dbsi->trace_level >= 2 )
769 fprintf(holder->dbsi->trace_file,"Releasing input lock after end of target\n");
770 if( pthread_mutex_unlock(&(holder->input_lock))!= 0 )
771 fatal("Error in releasing input lock for GeneStretch6");
772 continue;
773 } /* end of End of target database */
774 else { /*Normal reload*/
775 if ( holder->dbsi->trace_level >= 2 )
776 fprintf(holder->dbsi->trace_file,"Releasing input lock for normal reload\n");
777 if( pthread_mutex_unlock(&(holder->input_lock))!= 0 )
778 fatal("Error in releasing input lock for GeneStretch6");
779 } /* end of Normal reload */
780 /* get target information into datascore */
781 dataentry_add_GenomicDB(ds->target,target,holder->targetdb);
782
783
784 /* Now there is a new query/target pair ready for comparison */
785 if ( holder->dbsi->trace_level >= 1 )
786 fprintf(holder->dbsi->trace_file,"A new pair to be compared...\n");
787 score = score_only_GeneStretch6(query, target ,holder->gp,holder->general_model);
788
789
790 if ( holder->dbsi->trace_level >= 2 )
791 fprintf(holder->dbsi->trace_file,"Getting output lock\n");
792 /* Getting lock on output */
793 if( pthread_mutex_lock(&(holder->output_lock))!= 0 )
794 fatal("Error on getting output lock for GeneStretch6");
795 /* If the score is less than cutoff, schedule the datascore for reuse */
796 if( should_store_Hscore(holder->out,score) != TRUE) {
797 free_DataScore(ds);
798 }
799 else { /*storing score*/
800 ds->score = score;
801 add_Hscore(holder->out,ds);
802 } /* end of storing score */
803 if( pthread_mutex_unlock(&(holder->output_lock))!= 0 )
804 fatal("Error on releasing output lock for GeneStretch6");
805 if ( holder->dbsi->trace_level >= 2 )
806 fprintf(holder->dbsi->trace_file,"Released output lock\n");
807
808
809 /* Now free database objects */
810 if ( holder->dbsi->trace_level >= 2 )
811 fprintf(holder->dbsi->trace_file,"About to get input lock for free func\n");
812 if( pthread_mutex_lock(&(holder->input_lock))!= 0 )
813 fatal("Error on getting input lock for GeneStretch6");
814 if ( holder->dbsi->trace_level >= 2 )
815 fprintf(holder->dbsi->trace_file,"Got input lock for free func\n");
816 free_GeneWiseScore(query);
817 free_ComplexSequence(target);
818 if ( holder->dbsi->trace_level >= 2 )
819 fprintf(holder->dbsi->trace_file,"Releasing input lock after free'ing\n");
820 if( pthread_mutex_unlock(&(holder->input_lock))!= 0 )
821 fatal("Error in releasing input lock for GeneStretch6");
822 } /* end of Infinite loop over all models */
823
824
825 if ( holder->dbsi->trace_level >= 1 )
826 fprintf(holder->dbsi->trace_file,"Exiting forever loop\n");
827 return NULL;
828 }
829
830
831 /* Function: serial_search_GeneStretch6(out,querydb,targetdb,gp,general_model)
832 *
833 * Descrip: This function makes a database search of GeneStretch6
834 * It is a single processor implementation
835 *
836 *
837 * Arg: out [UNKN ] Undocumented argument [Hscore *]
838 * Arg: querydb [UNKN ] Undocumented argument [GeneWiseDB*]
839 * Arg: targetdb [UNKN ] Undocumented argument [GenomicDB*]
840 * Arg: gp [UNKN ] Undocumented argument [GeneParser4Score *]
841 * Arg: general_model [UNKN ] Undocumented argument [GeneralGeneModelScore *]
842 *
843 * Return [UNKN ] Undocumented return value [Search_Return_Type]
844 *
845 */
846 #endif /* PTHREAD */
serial_search_GeneStretch6(Hscore * out,GeneWiseDB * querydb,GenomicDB * targetdb,GeneParser4Score * gp,GeneralGeneModelScore * general_model)847 Search_Return_Type serial_search_GeneStretch6(Hscore * out,GeneWiseDB* querydb,GenomicDB* targetdb ,GeneParser4Score * gp,GeneralGeneModelScore * general_model)
848 {
849 GeneWiseScore* query;
850 ComplexSequence* target;
851 int db_status;
852 int score;
853 int query_pos = 0;
854 int target_pos = 0;
855 DataScore * ds;
856
857
858 push_errormsg_stack("Before any actual search in db searching");
859 query = init_GeneWiseDB(querydb,&db_status);
860 if( db_status == DB_RETURN_ERROR ) {
861 warn("In searching GeneStretch6, got a database reload error on the query [query] database");
862 return SEARCH_ERROR;
863 }
864 for(;;) { /*For all query entries*/
865
866
867 target_pos = 0;
868
869
870 target = init_GenomicDB(targetdb,&db_status);
871 if( db_status == DB_RETURN_ERROR ) {
872 warn("In searching GeneStretch6, got a database init error on the target [target] database");
873 return SEARCH_ERROR;
874 }
875 for(;;) { /*For all target entries*/
876
877
878 /* No maximum length - allocated on-the-fly */
879 score = score_only_GeneStretch6(query, target , gp, general_model);
880 if( should_store_Hscore(out,score) == TRUE ) { /*if storing datascore*/
881 ds = new_DataScore_from_storage(out);
882 if( ds == NULL ) {
883 warn("GeneStretch6 search had a memory error in allocating a new_DataScore (?a leak somewhere - DataScore is a very small datastructure");
884 return SEARCH_ERROR;
885 }
886 /* Now: add query/target information to the entry */
887 dataentry_add_GeneWiseDB(ds->query,query,querydb);
888 dataentry_add_GenomicDB(ds->target,target,targetdb);
889 ds->score = score;
890 add_Hscore(out,ds);
891 } /* end of if storing datascore */
892 pop_errormsg_stack();
893 push_errormsg_stack("DB searching: just finished [Query Pos: %d] [Target Pos: %d]",query_pos,target_pos);
894
895
896 target = reload_GenomicDB(target,targetdb,&db_status);
897 if( db_status == DB_RETURN_ERROR ) {
898 warn("In searching GeneStretch6, Reload error on database target, position %d,%d",query_pos,target_pos);
899 return SEARCH_ERROR;
900 }
901 if( db_status == DB_RETURN_END )
902 break;/* Out of target loop */
903 target_pos++;
904 } /* end of For all target entries */
905 close_GenomicDB(target,targetdb);
906 query = reload_GeneWiseDB(query,querydb,&db_status);
907 if( db_status == DB_RETURN_ERROR) {
908 warn("In searching GeneStretch6, Reload error on database query, position %d,%d",query_pos,target_pos);
909 return SEARCH_ERROR;
910 }
911 if( db_status == DB_RETURN_END)
912 break; /* Out of query loop */
913 query_pos++;
914 } /* end of For all query entries */
915 close_GeneWiseDB(query,querydb);
916 pop_errormsg_stack();
917 return SEARCH_OK;
918 }
919
920
921 /* Function: score_only_GeneStretch6(query,target,gp,general_model)
922 *
923 * Descrip: This function just calculates the score for the matrix
924 * I am pretty sure we can do this better, but hey, for the moment...
925 * It calls /allocate_GeneStretch6_only
926 *
927 *
928 * Arg: query [UNKN ] query data structure [GeneWiseScore*]
929 * Arg: target [UNKN ] target data structure [ComplexSequence*]
930 * Arg: gp [UNKN ] Resource [GeneParser4Score *]
931 * Arg: general_model [UNKN ] Resource [GeneralGeneModelScore *]
932 *
933 * Return [UNKN ] Undocumented return value [int]
934 *
935 */
score_only_GeneStretch6(GeneWiseScore * query,ComplexSequence * target,GeneParser4Score * gp,GeneralGeneModelScore * general_model)936 int score_only_GeneStretch6(GeneWiseScore* query,ComplexSequence* target ,GeneParser4Score * gp,GeneralGeneModelScore * general_model)
937 {
938 int bestscore = NEGI;
939 int i;
940 int j;
941 int k;
942 GeneStretch6 * mat;
943
944
945 mat = allocate_GeneStretch6_only(query, target , gp, general_model);
946 if( mat == NULL ) {
947 warn("Memory allocation error in the db search - unable to communicate to calling function. this spells DIASTER!");
948 return NEGI;
949 }
950 if((mat->basematrix = BaseMatrix_alloc_matrix_and_specials(11,(mat->leni + 1) * 6,11,4)) == NULL) {
951 warn("Score only matrix for GeneStretch6 cannot be allocated, (asking for 10 by %d cells)",mat->leni*6);
952 mat = free_GeneStretch6(mat);
953 return 0;
954 }
955 mat->basematrix->type = BASEMATRIX_TYPE_VERYSMALL;
956
957
958 /* Now, initiate matrix */
959 for(j=0;j<12;j++) {
960 for(i=(-1);i<mat->leni;i++) {
961 for(k=0;k<6;k++)
962 GeneStretch6_VSMALL_MATRIX(mat,i,j,k) = NEGI;
963 }
964 GeneStretch6_VSMALL_SPECIAL(mat,i,j,START) = 0;
965 GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) = NEGI;
966 GeneStretch6_VSMALL_SPECIAL(mat,i,j,BEFORE_MATCH_CODING) = NEGI;
967 GeneStretch6_VSMALL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = NEGI;
968 }
969
970
971 /* Ok, lets do-o-o-o-o it */
972
973
974 for(j=0;j<mat->lenj;j++) { /*for all target positions*/
975 auto int score;
976 auto int temp;
977 for(i=0;i<mat->leni;i++) { /*for all query positions*/
978
979
980 /* For state MATCH */
981 /* setting first movement to score */
982 score = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
983 /* From state INSERT to state MATCH */
984 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
985 if( temp > score ) {
986 score = temp;
987 }
988 /* From state DELETE to state MATCH */
989 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
990 if( temp > score ) {
991 score = temp;
992 }
993 /* From state START to state MATCH */
994 temp = GeneStretch6_VSMALL_SPECIAL(mat,i-1,j-3,START) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
995 if( temp > score ) {
996 score = temp;
997 }
998 /* From state BEFORE_MATCH_CODING to state MATCH */
999 temp = GeneStretch6_VSMALL_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
1000 if( temp > score ) {
1001 score = temp;
1002 }
1003 /* From state INTRON_0 to state MATCH */
1004 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
1005 if( temp > score ) {
1006 score = temp;
1007 }
1008 /* From state INTRON_1 to state MATCH */
1009 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
1010 if( temp > score ) {
1011 score = temp;
1012 }
1013 /* From state INTRON_2 to state MATCH */
1014 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
1015 if( temp > score ) {
1016 score = temp;
1017 }
1018 /* From state MATCH to state MATCH */
1019 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
1020 if( temp > score ) {
1021 score = temp;
1022 }
1023 /* From state MATCH to state MATCH */
1024 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
1025 if( temp > score ) {
1026 score = temp;
1027 }
1028 /* From state MATCH to state MATCH */
1029 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
1030 if( temp > score ) {
1031 score = temp;
1032 }
1033 /* From state MATCH to state MATCH */
1034 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
1035 if( temp > score ) {
1036 score = temp;
1037 }
1038
1039
1040 /* Ok - finished max calculation for MATCH */
1041 /* Add any movement independant score and put away */
1042 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
1043 GeneStretch6_VSMALL_MATRIX(mat,i,j,MATCH) = score;
1044
1045
1046 /* state MATCH is a source for special END */
1047 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
1048 if( temp > GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) ) {
1049 GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) = temp;
1050 }
1051
1052
1053
1054
1055 /* state MATCH is a source for special AFTER_MATCH_CODING */
1056 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
1057 if( temp > GeneStretch6_VSMALL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) ) {
1058 GeneStretch6_VSMALL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = temp;
1059 }
1060
1061
1062
1063
1064 /* Finished calculating state MATCH */
1065
1066
1067 /* For state INSERT */
1068 /* setting first movement to score */
1069 score = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
1070 /* From state INSERT to state INSERT */
1071 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
1072 if( temp > score ) {
1073 score = temp;
1074 }
1075 /* From state DELETE to state INSERT */
1076 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
1077 if( temp > score ) {
1078 score = temp;
1079 }
1080 /* From state START to state INSERT */
1081 temp = GeneStretch6_VSMALL_SPECIAL(mat,i-0,j-3,START) + (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
1082 if( temp > score ) {
1083 score = temp;
1084 }
1085 /* From state INTRON_0 to state INSERT */
1086 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
1087 if( temp > score ) {
1088 score = temp;
1089 }
1090 /* From state INTRON_1 to state INSERT */
1091 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
1092 if( temp > score ) {
1093 score = temp;
1094 }
1095 /* From state INTRON_2 to state INSERT */
1096 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
1097 if( temp > score ) {
1098 score = temp;
1099 }
1100 /* From state INSERT to state INSERT */
1101 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
1102 if( temp > score ) {
1103 score = temp;
1104 }
1105 /* From state INSERT to state INSERT */
1106 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
1107 if( temp > score ) {
1108 score = temp;
1109 }
1110
1111
1112 /* Ok - finished max calculation for INSERT */
1113 /* Add any movement independant score and put away */
1114 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
1115 GeneStretch6_VSMALL_MATRIX(mat,i,j,INSERT) = score;
1116
1117
1118 /* state INSERT is a source for special END */
1119 temp = score + (mat->query->seg[i]->transition[GW_INSERT2END]) + (0) ;
1120 if( temp > GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) ) {
1121 GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) = temp;
1122 }
1123
1124
1125
1126
1127 /* Finished calculating state INSERT */
1128
1129
1130 /* For state DELETE */
1131 /* setting first movement to score */
1132 score = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
1133 /* From state INSERT to state DELETE */
1134 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
1135 if( temp > score ) {
1136 score = temp;
1137 }
1138 /* From state DELETE to state DELETE */
1139 temp = GeneStretch6_VSMALL_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
1140 if( temp > score ) {
1141 score = temp;
1142 }
1143 /* From state START to state DELETE */
1144 temp = GeneStretch6_VSMALL_SPECIAL(mat,i-1,j-0,START) + mat->query->seg[i]->transition[GW_START2DELETE];
1145 if( temp > score ) {
1146 score = temp;
1147 }
1148
1149
1150 /* Ok - finished max calculation for DELETE */
1151 /* Add any movement independant score and put away */
1152 GeneStretch6_VSMALL_MATRIX(mat,i,j,DELETE) = score;
1153
1154
1155 /* state DELETE is a source for special END */
1156 temp = score + (mat->query->seg[i]->transition[GW_DELETE2END]) + (0) ;
1157 if( temp > GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) ) {
1158 GeneStretch6_VSMALL_SPECIAL(mat,i,j,END) = temp;
1159 }
1160
1161
1162
1163
1164 /* Finished calculating state DELETE */
1165
1166
1167 /* For state INTRON_0 */
1168 /* setting first movement to score */
1169 score = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1170 /* From state INSERT to state INTRON_0 */
1171 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1172 if( temp > score ) {
1173 score = temp;
1174 }
1175 /* From state INTRON_0 to state INTRON_0 */
1176 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
1177 if( temp > score ) {
1178 score = temp;
1179 }
1180
1181
1182 /* Ok - finished max calculation for INTRON_0 */
1183 /* Add any movement independant score and put away */
1184 GeneStretch6_VSMALL_MATRIX(mat,i,j,INTRON_0) = score;
1185
1186
1187 /* Finished calculating state INTRON_0 */
1188
1189
1190 /* For state INTRON_1 */
1191 /* setting first movement to score */
1192 score = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1193 /* From state INSERT to state INTRON_1 */
1194 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1195 if( temp > score ) {
1196 score = temp;
1197 }
1198 /* From state INTRON_1 to state INTRON_1 */
1199 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
1200 if( temp > score ) {
1201 score = temp;
1202 }
1203
1204
1205 /* Ok - finished max calculation for INTRON_1 */
1206 /* Add any movement independant score and put away */
1207 GeneStretch6_VSMALL_MATRIX(mat,i,j,INTRON_1) = score;
1208
1209
1210 /* Finished calculating state INTRON_1 */
1211
1212
1213 /* For state INTRON_2 */
1214 /* setting first movement to score */
1215 score = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1216 /* From state INSERT to state INTRON_2 */
1217 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
1218 if( temp > score ) {
1219 score = temp;
1220 }
1221 /* From state INTRON_2 to state INTRON_2 */
1222 temp = GeneStretch6_VSMALL_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
1223 if( temp > score ) {
1224 score = temp;
1225 }
1226
1227
1228 /* Ok - finished max calculation for INTRON_2 */
1229 /* Add any movement independant score and put away */
1230 GeneStretch6_VSMALL_MATRIX(mat,i,j,INTRON_2) = score;
1231
1232
1233 /* Finished calculating state INTRON_2 */
1234 } /* end of for all query positions */
1235
1236
1237
1238
1239 /* Special state START has no special to special movements */
1240
1241
1242 /* Special state END has special to speical */
1243 /* Set score to current score (remember, state probably updated during main loop */
1244 score = GeneStretch6_VSMALL_SPECIAL(mat,0,j,END);
1245
1246
1247 /* Source MATCH for state END is not special... already calculated */
1248 /* Source INSERT for state END is not special... already calculated */
1249 /* Source DELETE for state END is not special... already calculated */
1250 /* Source AFTER_MATCH_CODING is a special source for END */
1251 temp = GeneStretch6_VSMALL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
1252 if( temp > score )
1253 score = temp;
1254
1255
1256 /* Put back score... (now updated!) */
1257 GeneStretch6_VSMALL_SPECIAL(mat,0,j,END) = score;
1258 /* Finished updating state END */
1259
1260
1261
1262
1263 /* Special state BEFORE_MATCH_CODING has special to speical */
1264 /* Set score to current score (remember, state probably updated during main loop */
1265 score = GeneStretch6_VSMALL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING);
1266
1267
1268 /* Source START is a special source for BEFORE_MATCH_CODING */
1269 temp = GeneStretch6_VSMALL_SPECIAL(mat,0,j - 3,START) + (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
1270 if( temp > score )
1271 score = temp;
1272
1273
1274 /* Source BEFORE_MATCH_CODING is a special source for BEFORE_MATCH_CODING */
1275 temp = GeneStretch6_VSMALL_SPECIAL(mat,0,j - 3,BEFORE_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
1276 if( temp > score )
1277 score = temp;
1278
1279
1280 /* Put back score... (now updated!) */
1281 GeneStretch6_VSMALL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = score;
1282 /* Finished updating state BEFORE_MATCH_CODING */
1283
1284
1285
1286
1287 /* Special state AFTER_MATCH_CODING has special to speical */
1288 /* Set score to current score (remember, state probably updated during main loop */
1289 score = GeneStretch6_VSMALL_SPECIAL(mat,0,j,AFTER_MATCH_CODING);
1290
1291
1292 /* Source MATCH for state AFTER_MATCH_CODING is not special... already calculated */
1293 /* Source AFTER_MATCH_CODING is a special source for AFTER_MATCH_CODING */
1294 temp = GeneStretch6_VSMALL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
1295 if( temp > score )
1296 score = temp;
1297
1298
1299 /* Put back score... (now updated!) */
1300 GeneStretch6_VSMALL_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = score;
1301 /* Finished updating state AFTER_MATCH_CODING */
1302
1303
1304 if( bestscore < GeneStretch6_VSMALL_SPECIAL(mat,0,j,END) )
1305 bestscore = GeneStretch6_VSMALL_SPECIAL(mat,0,j,END);
1306 } /* end of for all target positions */
1307
1308
1309 mat = free_GeneStretch6(mat);
1310 return bestscore;
1311 }
1312
1313
1314 /* Function: PackAln_bestmemory_GeneStretch6(query,target,gp,general_model,dpenv,dpri)
1315 *
1316 * Descrip: This function chooses the best memory set-up for the alignment
1317 * using calls to basematrix, and then implements either a large
1318 * or small memory model.
1319 *
1320 * It is the best function to use if you just want an alignment
1321 *
1322 * If you want a label alignment, you will need
1323 * /convert_PackAln_to_AlnBlock_GeneStretch6
1324 *
1325 *
1326 * Arg: query [UNKN ] query data structure [GeneWiseScore*]
1327 * Arg: target [UNKN ] target data structure [ComplexSequence*]
1328 * Arg: gp [UNKN ] Resource [GeneParser4Score *]
1329 * Arg: general_model [UNKN ] Resource [GeneralGeneModelScore *]
1330 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
1331 * Arg: dpri [UNKN ] Undocumented argument [DPRunImpl *]
1332 *
1333 * Return [UNKN ] Undocumented return value [PackAln *]
1334 *
1335 */
PackAln_bestmemory_GeneStretch6(GeneWiseScore * query,ComplexSequence * target,GeneParser4Score * gp,GeneralGeneModelScore * general_model,DPEnvelope * dpenv,DPRunImpl * dpri)1336 PackAln * PackAln_bestmemory_GeneStretch6(GeneWiseScore* query,ComplexSequence* target ,GeneParser4Score * gp,GeneralGeneModelScore * general_model,DPEnvelope * dpenv,DPRunImpl * dpri)
1337 {
1338 long long total;
1339 GeneStretch6 * mat;
1340 PackAln * out;
1341 DebugMatrix * de;
1342 DPRunImplMemory strategy;
1343 assert(dpri);
1344
1345
1346 total = query->len * target->seq->len;
1347 if( dpri->memory == DPIM_Default ) {
1348 if( (total * 6 * sizeof(int)) > 1000*dpri->kbyte_size) {
1349 strategy = DPIM_Linear;
1350 }
1351 else {
1352 strategy = DPIM_Explicit;
1353 }
1354 }
1355 else {
1356 strategy = dpri->memory;
1357 }
1358
1359
1360 if( dpenv != NULL ) {
1361 if( strategy == DPIM_Explicit) {
1362 if( (mat=allocate_Expl_GeneStretch6(query, target , gp, general_model,dpri)) == NULL ) {
1363 warn("Unable to allocate large GeneStretch6 version");
1364 return NULL;
1365 }
1366 calculate_dpenv_GeneStretch6(mat,dpenv);
1367 out = PackAln_read_Expl_GeneStretch6(mat);
1368 }
1369 else {
1370 mat = allocate_GeneStretch6_only(query, target , gp, general_model);
1371 calculate_shatter_GeneStretch6(mat,dpenv);
1372 out = PackAln_read_Shatter_GeneStretch6(mat);
1373 }
1374 }
1375 else {
1376 if( strategy == DPIM_Linear ) {
1377 /* use small implementation */
1378 if( (mat=allocate_Small_GeneStretch6(query, target , gp, general_model)) == NULL ) {
1379 warn("Unable to allocate small GeneStretch6 version");
1380 return NULL;
1381 }
1382 out = PackAln_calculate_Small_GeneStretch6(mat,dpenv);
1383 }
1384 else {
1385 /* use Large implementation */
1386 if( (mat=allocate_Expl_GeneStretch6(query, target , gp, general_model,dpri)) == NULL ) {
1387 warn("Unable to allocate large GeneStretch6 version");
1388 return NULL;
1389 }
1390 if( dpri->debug == TRUE) {
1391 fatal("Asked for dydebug, but dynamite file not compiled with -g. Need to recompile dynamite source");
1392 }
1393 else {
1394 calculate_GeneStretch6(mat);
1395 out = PackAln_read_Expl_GeneStretch6(mat);
1396 }
1397 }
1398 }
1399
1400
1401 mat = free_GeneStretch6(mat);
1402 return out;
1403 }
1404
1405
1406 /* Function: allocate_GeneStretch6_only(query,target,gp,general_model)
1407 *
1408 * Descrip: This function only allocates the GeneStretch6 structure
1409 * checks types where possible and determines leni and lenj
1410 * The basematrix area is delt with elsewhere
1411 *
1412 *
1413 * Arg: query [UNKN ] query data structure [GeneWiseScore*]
1414 * Arg: target [UNKN ] target data structure [ComplexSequence*]
1415 * Arg: gp [UNKN ] Resource [GeneParser4Score *]
1416 * Arg: general_model [UNKN ] Resource [GeneralGeneModelScore *]
1417 *
1418 * Return [UNKN ] Undocumented return value [GeneStretch6 *]
1419 *
1420 */
allocate_GeneStretch6_only(GeneWiseScore * query,ComplexSequence * target,GeneParser4Score * gp,GeneralGeneModelScore * general_model)1421 GeneStretch6 * allocate_GeneStretch6_only(GeneWiseScore* query,ComplexSequence* target ,GeneParser4Score * gp,GeneralGeneModelScore * general_model)
1422 {
1423 GeneStretch6 * out;
1424
1425
1426 if((out= GeneStretch6_alloc()) == NULL) {
1427 warn("Allocation of basic GeneStretch6 structure failed...");
1428 return NULL;
1429 }
1430
1431
1432 out->query = query;
1433 out->target = target;
1434 out->gp = gp;
1435 out->general_model = general_model;
1436 out->leni = query->len;
1437 out->lenj = target->seq->len;
1438 return out;
1439 }
1440
1441
1442 /* Function: allocate_Expl_GeneStretch6(query,target,gp,general_model,dpri)
1443 *
1444 * Descrip: This function allocates the GeneStretch6 structure
1445 * and the basematrix area for explicit memory implementations
1446 * It calls /allocate_GeneStretch6_only
1447 *
1448 *
1449 * Arg: query [UNKN ] query data structure [GeneWiseScore*]
1450 * Arg: target [UNKN ] target data structure [ComplexSequence*]
1451 * Arg: gp [UNKN ] Resource [GeneParser4Score *]
1452 * Arg: general_model [UNKN ] Resource [GeneralGeneModelScore *]
1453 * Arg: dpri [UNKN ] Undocumented argument [DPRunImpl *]
1454 *
1455 * Return [UNKN ] Undocumented return value [GeneStretch6 *]
1456 *
1457 */
allocate_Expl_GeneStretch6(GeneWiseScore * query,ComplexSequence * target,GeneParser4Score * gp,GeneralGeneModelScore * general_model,DPRunImpl * dpri)1458 GeneStretch6 * allocate_Expl_GeneStretch6(GeneWiseScore* query,ComplexSequence* target ,GeneParser4Score * gp,GeneralGeneModelScore * general_model,DPRunImpl * dpri)
1459 {
1460 GeneStretch6 * out;
1461
1462
1463 out = allocate_GeneStretch6_only(query, target , gp, general_model);
1464 if( out == NULL )
1465 return NULL;
1466 if( dpri->should_cache == TRUE ) {
1467 if( dpri->cache != NULL ) {
1468 if( dpri->cache->maxleni >= (out->lenj+10)*6 && dpri->cache->maxlenj >= (out->leni+1))
1469 out->basematrix = hard_link_BaseMatrix(dpri->cache);
1470 else
1471 dpri->cache = free_BaseMatrix(dpri->cache);
1472 }
1473 }
1474 if( out->basematrix == NULL ) {
1475 if( (out->basematrix = BaseMatrix_alloc_matrix_and_specials((out->lenj+10)*6,(out->leni+1),4,out->lenj+10)) == NULL) {
1476 warn("Explicit matrix GeneStretch6 cannot be allocated, (asking for %d by %d main cells)",out->leni,out->lenj);
1477 free_GeneStretch6(out);
1478 return NULL;
1479 }
1480 }
1481 if( dpri->should_cache == TRUE && dpri->cache == NULL)
1482 dpri->cache = hard_link_BaseMatrix(out->basematrix);
1483 out->basematrix->type = BASEMATRIX_TYPE_EXPLICIT;
1484 init_GeneStretch6(out);
1485 return out;
1486 }
1487
1488
1489 /* Function: init_GeneStretch6(mat)
1490 *
1491 * Descrip: This function initates GeneStretch6 matrix when in explicit mode
1492 * Called in /allocate_Expl_GeneStretch6
1493 *
1494 *
1495 * Arg: mat [UNKN ] GeneStretch6 which contains explicit basematrix memory [GeneStretch6 *]
1496 *
1497 */
init_GeneStretch6(GeneStretch6 * mat)1498 void init_GeneStretch6(GeneStretch6 * mat)
1499 {
1500 register int i;
1501 register int j;
1502 if( mat->basematrix->type != BASEMATRIX_TYPE_EXPLICIT) {
1503 warn("Cannot iniate matrix, is not an explicit memory type and you have assummed that");
1504 return;
1505 }
1506
1507
1508 for(i= (-1);i<mat->query->len;i++) {
1509 for(j= (-10);j<11;j++) {
1510 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = NEGI;
1511 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = NEGI;
1512 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = NEGI;
1513 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = NEGI;
1514 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = NEGI;
1515 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = NEGI;
1516 }
1517 }
1518 for(j= (-10);j<mat->target->seq->len;j++) {
1519 for(i= (-1);i<2;i++) {
1520 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = NEGI;
1521 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = NEGI;
1522 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = NEGI;
1523 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = NEGI;
1524 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = NEGI;
1525 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = NEGI;
1526 }
1527 GeneStretch6_EXPL_SPECIAL(mat,i,j,START) = 0;
1528 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = NEGI;
1529 GeneStretch6_EXPL_SPECIAL(mat,i,j,BEFORE_MATCH_CODING) = NEGI;
1530 GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = NEGI;
1531 }
1532 return;
1533 }
1534
1535
1536 /* Function: recalculate_PackAln_GeneStretch6(pal,mat)
1537 *
1538 * Descrip: This function recalculates the PackAln structure produced by GeneStretch6
1539 * For example, in linear space methods this is used to score them
1540 *
1541 *
1542 * Arg: pal [UNKN ] Undocumented argument [PackAln *]
1543 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
1544 *
1545 */
recalculate_PackAln_GeneStretch6(PackAln * pal,GeneStretch6 * mat)1546 void recalculate_PackAln_GeneStretch6(PackAln * pal,GeneStretch6 * mat)
1547 {
1548 int i,j,k,offi,offj;
1549 PackAlnUnit * prev;
1550 PackAlnUnit * pau;
1551
1552
1553 for(k=1,prev=pal->pau[0];k < pal->len;k++,prev=pau) {
1554 pau = pal->pau[k];
1555 i = pau->i;
1556 j = pau->j;
1557 offi = pau->i - prev->i;
1558 offj = pau->j - prev->j;
1559 switch(pau->state) {
1560 case MATCH :
1561 if( offi == 1 && offj == 3 && prev->state == MATCH ) {
1562 pau->score = (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1563 continue;
1564 }
1565 if( offi == 1 && offj == 3 && prev->state == INSERT ) {
1566 pau->score = (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1567 continue;
1568 }
1569 if( offi == 1 && offj == 3 && prev->state == DELETE ) {
1570 pau->score = (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1571 continue;
1572 }
1573 if( offj == 3 && prev->state == (START+6) ) {
1574 pau->score = (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1575 continue;
1576 }
1577 if( offj == 3 && prev->state == (BEFORE_MATCH_CODING+6) ) {
1578 pau->score = (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1579 continue;
1580 }
1581 if( offi == 1 && offj == 6 && prev->state == INTRON_0 ) {
1582 pau->score = (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1583 continue;
1584 }
1585 if( offi == 1 && offj == 5 && prev->state == INTRON_1 ) {
1586 pau->score = ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1587 continue;
1588 }
1589 if( offi == 1 && offj == 4 && prev->state == INTRON_2 ) {
1590 pau->score = ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1591 continue;
1592 }
1593 if( offi == 1 && offj == 2 && prev->state == MATCH ) {
1594 pau->score = mat->gp->transition[GP4_DELETE_1_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1595 continue;
1596 }
1597 if( offi == 1 && offj == 1 && prev->state == MATCH ) {
1598 pau->score = mat->gp->transition[GP4_DELETE_2_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1599 continue;
1600 }
1601 if( offi == 1 && offj == 4 && prev->state == MATCH ) {
1602 pau->score = mat->gp->transition[GP4_INSERT_1_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1603 continue;
1604 }
1605 if( offi == 1 && offj == 5 && prev->state == MATCH ) {
1606 pau->score = mat->gp->transition[GP4_INSERT_2_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1607 continue;
1608 }
1609 warn("In recaluclating PackAln with state MATCH, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1610 break;
1611 case INSERT :
1612 if( offi == 0 && offj == 3 && prev->state == MATCH ) {
1613 pau->score = (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1614 continue;
1615 }
1616 if( offi == 0 && offj == 3 && prev->state == INSERT ) {
1617 pau->score = (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1618 continue;
1619 }
1620 if( offi == 0 && offj == 3 && prev->state == DELETE ) {
1621 pau->score = (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1622 continue;
1623 }
1624 if( offj == 3 && prev->state == (START+6) ) {
1625 pau->score = (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1626 continue;
1627 }
1628 if( offi == 0 && offj == 6 && prev->state == INTRON_0 ) {
1629 pau->score = (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1630 continue;
1631 }
1632 if( offi == 0 && offj == 5 && prev->state == INTRON_1 ) {
1633 pau->score = ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1634 continue;
1635 }
1636 if( offi == 0 && offj == 4 && prev->state == INTRON_2 ) {
1637 pau->score = ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1))) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1638 continue;
1639 }
1640 if( offi == 0 && offj == 2 && prev->state == INSERT ) {
1641 pau->score = mat->gp->transition[GP4_DELETE_1_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1642 continue;
1643 }
1644 if( offi == 0 && offj == 1 && prev->state == INSERT ) {
1645 pau->score = mat->gp->transition[GP4_DELETE_2_BASE] + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
1646 continue;
1647 }
1648 warn("In recaluclating PackAln with state INSERT, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1649 break;
1650 case DELETE :
1651 if( offi == 1 && offj == 0 && prev->state == MATCH ) {
1652 pau->score = mat->query->seg[i]->transition[GW_MATCH2DELETE] + (0);
1653 continue;
1654 }
1655 if( offi == 1 && offj == 0 && prev->state == INSERT ) {
1656 pau->score = mat->query->seg[i]->transition[GW_INSERT2DELETE] + (0);
1657 continue;
1658 }
1659 if( offi == 1 && offj == 0 && prev->state == DELETE ) {
1660 pau->score = mat->query->seg[i]->transition[GW_DELETE2DELETE] + (0);
1661 continue;
1662 }
1663 if( offj == 0 && prev->state == (START+6) ) {
1664 pau->score = mat->query->seg[i]->transition[GW_START2DELETE] + (0);
1665 continue;
1666 }
1667 warn("In recaluclating PackAln with state DELETE, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1668 break;
1669 case INTRON_0 :
1670 if( offi == 0 && offj == 8 && prev->state == MATCH ) {
1671 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1672 continue;
1673 }
1674 if( offi == 0 && offj == 8 && prev->state == INSERT ) {
1675 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1676 continue;
1677 }
1678 if( offi == 0 && offj == 1 && prev->state == INTRON_0 ) {
1679 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) + (0);
1680 continue;
1681 }
1682 warn("In recaluclating PackAln with state INTRON_0, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1683 break;
1684 case INTRON_1 :
1685 if( offi == 0 && offj == 9 && prev->state == MATCH ) {
1686 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1687 continue;
1688 }
1689 if( offi == 0 && offj == 9 && prev->state == INSERT ) {
1690 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1691 continue;
1692 }
1693 if( offi == 0 && offj == 1 && prev->state == INTRON_1 ) {
1694 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) + (0);
1695 continue;
1696 }
1697 warn("In recaluclating PackAln with state INTRON_1, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1698 break;
1699 case INTRON_2 :
1700 if( offi == 0 && offj == 10 && prev->state == MATCH ) {
1701 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1702 continue;
1703 }
1704 if( offi == 0 && offj == 10 && prev->state == INSERT ) {
1705 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
1706 continue;
1707 }
1708 if( offi == 0 && offj == 1 && prev->state == INTRON_2 ) {
1709 pau->score = (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) + (0);
1710 continue;
1711 }
1712 warn("In recaluclating PackAln with state INTRON_2, from [%d,%d,%d], got a bad source state. Error!",offi,offj,prev->state);
1713 break;
1714 case (START+6) :
1715 warn("In recaluclating PackAln with state START, got a bad source state. Error!");
1716 break;
1717 case (END+6) :
1718 if( offj == 0 && prev->state == MATCH ) {
1719 /* i here comes from the previous state ;) - not the real one */
1720 i = prev->i;
1721 pau->score = mat->query->seg[i]->transition[GW_MATCH2END] + (0);
1722 continue;
1723 }
1724 if( offj == 0 && prev->state == INSERT ) {
1725 /* i here comes from the previous state ;) - not the real one */
1726 i = prev->i;
1727 pau->score = mat->query->seg[i]->transition[GW_INSERT2END] + (0);
1728 continue;
1729 }
1730 if( offj == 0 && prev->state == DELETE ) {
1731 /* i here comes from the previous state ;) - not the real one */
1732 i = prev->i;
1733 pau->score = mat->query->seg[i]->transition[GW_DELETE2END] + (0);
1734 continue;
1735 }
1736 if( offj == 3 && prev->state == (AFTER_MATCH_CODING+6) ) {
1737 pau->score = mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)] + (0);
1738 continue;
1739 }
1740 warn("In recaluclating PackAln with state END, got a bad source state. Error!");
1741 break;
1742 case (BEFORE_MATCH_CODING+6) :
1743 if( offj == 3 && prev->state == (START+6) ) {
1744 pau->score = mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)] + (0);
1745 continue;
1746 }
1747 if( offj == 3 && prev->state == (BEFORE_MATCH_CODING+6) ) {
1748 pau->score = mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)] + (0);
1749 continue;
1750 }
1751 warn("In recaluclating PackAln with state BEFORE_MATCH_CODING, got a bad source state. Error!");
1752 break;
1753 case (AFTER_MATCH_CODING+6) :
1754 if( offj == 0 && prev->state == MATCH ) {
1755 /* i here comes from the previous state ;) - not the real one */
1756 i = prev->i;
1757 pau->score = mat->query->seg[i]->transition[GW_MATCH2END] + (0);
1758 continue;
1759 }
1760 if( offj == 3 && prev->state == (AFTER_MATCH_CODING+6) ) {
1761 pau->score = mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)] + (0);
1762 continue;
1763 }
1764 warn("In recaluclating PackAln with state AFTER_MATCH_CODING, got a bad source state. Error!");
1765 break;
1766 default :
1767 warn("In recaluclating PackAln got a bad recipient state. Error!");
1768 }
1769 prev = pau;
1770 }
1771 return;
1772 }
1773 /* divide and conquor macros are next */
1774 #define GeneStretch6_HIDDEN_MATRIX(thismatrix,i,j,state) (thismatrix->basematrix->matrix[(j-hiddenj+10)][(i+1)*6+state])
1775 #define GeneStretch6_DC_SHADOW_MATRIX(thismatrix,i,j,state) (thismatrix->basematrix->matrix[((j+11)*8) % 88][(i+1)*6+state])
1776 #define GeneStretch6_HIDDEN_SPECIAL(thismatrix,i,j,state) (thismatrix->basematrix->specmatrix[state][(j+10)])
1777 #define GeneStretch6_DC_SHADOW_SPECIAL(thismatrix,i,j,state) (thismatrix->basematrix->specmatrix[state*8][(j+10)])
1778 #define GeneStretch6_DC_SHADOW_MATRIX_SP(thismatrix,i,j,state,shadow) (thismatrix->basematrix->matrix[((((j+11)*8)+(shadow+1)) % 88)][(i+1)*6 + state])
1779 #define GeneStretch6_DC_SHADOW_SPECIAL_SP(thismatrix,i,j,state,shadow) (thismatrix->basematrix->specmatrix[state*8 +shadow+1][(j+10)])
1780 #define GeneStretch6_DC_OPT_SHADOW_MATRIX(thismatrix,i,j,state) (score_pointers[(((j+10)% 10) * (leni+1) * 6) + ((i+1) * 6) + (state)])
1781 #define GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(thismatrix,i,j,state,shadow) (shadow_pointers[(((j+10)% 10) * (leni+1) * 48) + ((i+1) * 48) + (state * 8) + shadow+1])
1782 #define GeneStretch6_DC_OPT_SHADOW_SPECIAL(thismatrix,i,j,state) (thismatrix->basematrix->specmatrix[state*8][(j+10)])
1783 /* Function: allocate_Small_GeneStretch6(query,target,gp,general_model)
1784 *
1785 * Descrip: This function allocates the GeneStretch6 structure
1786 * and the basematrix area for a small memory implementations
1787 * It calls /allocate_GeneStretch6_only
1788 *
1789 *
1790 * Arg: query [UNKN ] query data structure [GeneWiseScore*]
1791 * Arg: target [UNKN ] target data structure [ComplexSequence*]
1792 * Arg: gp [UNKN ] Resource [GeneParser4Score *]
1793 * Arg: general_model [UNKN ] Resource [GeneralGeneModelScore *]
1794 *
1795 * Return [UNKN ] Undocumented return value [GeneStretch6 *]
1796 *
1797 */
1798 #define GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(thismatrix,i,j,state,shadow) (thismatrix->basematrix->specmatrix[state*8 +shadow+1][(j+10)])
allocate_Small_GeneStretch6(GeneWiseScore * query,ComplexSequence * target,GeneParser4Score * gp,GeneralGeneModelScore * general_model)1799 GeneStretch6 * allocate_Small_GeneStretch6(GeneWiseScore* query,ComplexSequence* target ,GeneParser4Score * gp,GeneralGeneModelScore * general_model)
1800 {
1801 GeneStretch6 * out;
1802
1803
1804 out = allocate_GeneStretch6_only(query, target , gp, general_model);
1805 if( out == NULL )
1806 return NULL;
1807 out->basematrix = BaseMatrix_alloc_matrix_and_specials(88,(out->leni + 1) * 6,32,out->lenj+10);
1808 if(out == NULL) {
1809 warn("Small shadow matrix GeneStretch6 cannot be allocated, (asking for 11 by %d main cells)",out->leni+2);
1810 free_GeneStretch6(out);
1811 return NULL;
1812 }
1813 out->basematrix->type = BASEMATRIX_TYPE_SHADOW;
1814 return out;
1815 }
1816
1817
1818 /* Function: PackAln_calculate_Small_GeneStretch6(mat,dpenv)
1819 *
1820 * Descrip: This function calculates an alignment for GeneStretch6 structure in linear space
1821 * If you want only the start/end points
1822 * use /AlnRangeSet_calculate_Small_GeneStretch6
1823 *
1824 * The function basically
1825 * finds start/end points
1826 * foreach start/end point
1827 * calls /full_dc_GeneStretch6
1828 *
1829 *
1830 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
1831 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
1832 *
1833 * Return [UNKN ] Undocumented return value [PackAln *]
1834 *
1835 */
PackAln_calculate_Small_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)1836 PackAln * PackAln_calculate_Small_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)
1837 {
1838 int endj;
1839 int score;
1840 PackAln * out;
1841 PackAlnUnit * pau;
1842 int starti;
1843 int startj;
1844 int startstate;
1845 int stopi;
1846 int stopj;
1847 int stopstate;
1848 int temp;
1849 int donej; /* This is for reporting, will be passed as a & arg in */
1850 int totalj; /* This also is for reporting, but as is not changed, can be passed by value */
1851
1852
1853 if( mat->basematrix->type != BASEMATRIX_TYPE_SHADOW ) {
1854 warn("Could not calculate packaln small for GeneStretch6 due to wrong type of matrix");
1855 return NULL;
1856 }
1857
1858
1859 out = PackAln_alloc_std();
1860
1861
1862 start_reporting("Find start end points: ");
1863 dc_optimised_start_end_calc_GeneStretch6(mat,dpenv);
1864 score = start_end_find_end_GeneStretch6(mat,&endj);
1865 out->score = score;
1866 stopstate = END;
1867
1868 /* Special to specials: have to eat up in strip and then drop back to full_dc for intervening bits */
1869 log_full_error(REPORT,0,"End at %d Score %d",endj,score);
1870 stop_reporting();
1871 for(;;) { /*while there are more special bits to recover*/
1872 start_reporting("Special cell aln end %d:",endj);
1873 if( read_special_strip_GeneStretch6(mat,0,endj,stopstate,&endj,&startstate,out) == FALSE ) {
1874 warn("Problem in reading off special state system... going to return partial alignment");
1875 break;
1876 }
1877 if( startstate == START || endj <= 0) {
1878 log_full_error(REPORT,0,"Recovered complete alignment");
1879 stop_reporting();
1880 break;
1881 }
1882
1883
1884 log_full_error(REPORT,0,"Finished to %d",endj);
1885 stop_reporting();
1886
1887
1888 /* Ok... have to eat up another piece of matrix <sigh> */
1889 temp = startstate;
1890 starti = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,0);
1891 startj = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,1);
1892 startstate = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,2);
1893 stopi = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,3);
1894 stopj = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,4);
1895 stopstate = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,5);
1896
1897
1898 /* Get out the score of this block. V. important! */
1899 temp = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,endj,temp,6);
1900 totalj = stopj - startj;
1901 donej = 0;
1902 start_reporting("Main matrix aln [%d,%d]:",startj,stopj);
1903 if(full_dc_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,out,&donej,totalj,dpenv) == FALSE) {
1904 warn("In the alignment GeneStretch6 [%d,%d][%d,%d], got a problem. Please report bug ... giving you back a partial alignment",starti,startj,stopi,stopj);
1905 return out;
1906 }
1907
1908
1909 /* now have to figure out which special we came from... yikes */
1910 max_matrix_to_special_GeneStretch6(mat,starti,startj,startstate,temp,&stopi,&stopj,&stopstate,&temp,NULL);
1911 if( stopi == GeneStretch6_READ_OFF_ERROR) {
1912 warn("In GeneStretch6 read off ending at %d ... got a bad matrix to special read off... returning partial alignment",startj);
1913 invert_PackAln(out);
1914 recalculate_PackAln_GeneStretch6(out,mat);
1915 return out;
1916 }
1917 /* if at start, break, otherwise, back to eat another strip */
1918 if( stopstate == START) {
1919 log_full_error(REPORT,0,"Recovered complete alignment ");
1920 stop_reporting();
1921 break;
1922 }
1923 log_full_error(REPORT,0,"Finished alignment to %d ",startj);
1924 stop_reporting();
1925 endj = stopj;
1926 /* stopstate is correct as it is */
1927 } /* end of while there are more special bits to recover */
1928 invert_PackAln(out);
1929 recalculate_PackAln_GeneStretch6(out,mat);
1930 return out;
1931
1932
1933 }
1934
1935
1936 /* Function: AlnRangeSet_calculate_Small_GeneStretch6(mat)
1937 *
1938 * Descrip: This function calculates an alignment for GeneStretch6 structure in linear space
1939 * If you want the full alignment, use /PackAln_calculate_Small_GeneStretch6
1940 * If you have already got the full alignment, but want the range set, use /AlnRangeSet_from_PackAln_GeneStretch6
1941 * If you have got the small matrix but not the alignment, use /AlnRangeSet_from_GeneStretch6
1942 *
1943 *
1944 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
1945 *
1946 * Return [UNKN ] Undocumented return value [AlnRangeSet *]
1947 *
1948 */
AlnRangeSet_calculate_Small_GeneStretch6(GeneStretch6 * mat)1949 AlnRangeSet * AlnRangeSet_calculate_Small_GeneStretch6(GeneStretch6 * mat)
1950 {
1951 AlnRangeSet * out;
1952
1953
1954 start_reporting("Find start end points: ");
1955 dc_optimised_start_end_calc_GeneStretch6(mat,NULL);
1956 log_full_error(REPORT,0,"Calculated");
1957
1958
1959 out = AlnRangeSet_from_GeneStretch6(mat);
1960 return out;
1961 }
1962
1963
1964 /* Function: AlnRangeSet_from_GeneStretch6(mat)
1965 *
1966 * Descrip: This function reads off a start/end structure
1967 * for GeneStretch6 structure in linear space
1968 * If you want the full alignment use
1969 * /PackAln_calculate_Small_GeneStretch6
1970 * If you have not calculated the matrix use
1971 * /AlnRange_calculate_Small_GeneStretch6
1972 *
1973 *
1974 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
1975 *
1976 * Return [UNKN ] Undocumented return value [AlnRangeSet *]
1977 *
1978 */
AlnRangeSet_from_GeneStretch6(GeneStretch6 * mat)1979 AlnRangeSet * AlnRangeSet_from_GeneStretch6(GeneStretch6 * mat)
1980 {
1981 AlnRangeSet * out;
1982 AlnRange * temp;
1983 int jpos;
1984 int state;
1985
1986
1987 if( mat->basematrix->type != BASEMATRIX_TYPE_SHADOW) {
1988 warn("Bad error! - non shadow matrix type in AlnRangeSet_from_GeneStretch6");
1989 return NULL;
1990 }
1991
1992
1993 out = AlnRangeSet_alloc_std();
1994 /* Find the end position */
1995 out->score = start_end_find_end_GeneStretch6(mat,&jpos);
1996 state = END;
1997
1998
1999 while( (temp = AlnRange_build_GeneStretch6(mat,jpos,state,&jpos,&state)) != NULL)
2000 add_AlnRangeSet(out,temp);
2001 return out;
2002 }
2003
2004
2005 /* Function: AlnRange_build_GeneStretch6(mat,stopj,stopspecstate,startj,startspecstate)
2006 *
2007 * Descrip: This function calculates a single start/end set in linear space
2008 * Really a sub-routine for /AlnRangeSet_from_PackAln_GeneStretch6
2009 *
2010 *
2011 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2012 * Arg: stopj [UNKN ] Undocumented argument [int]
2013 * Arg: stopspecstate [UNKN ] Undocumented argument [int]
2014 * Arg: startj [UNKN ] Undocumented argument [int *]
2015 * Arg: startspecstate [UNKN ] Undocumented argument [int *]
2016 *
2017 * Return [UNKN ] Undocumented return value [AlnRange *]
2018 *
2019 */
AlnRange_build_GeneStretch6(GeneStretch6 * mat,int stopj,int stopspecstate,int * startj,int * startspecstate)2020 AlnRange * AlnRange_build_GeneStretch6(GeneStretch6 * mat,int stopj,int stopspecstate,int * startj,int * startspecstate)
2021 {
2022 AlnRange * out;
2023 int jpos;
2024 int state;
2025
2026
2027 if( mat->basematrix->type != BASEMATRIX_TYPE_SHADOW) {
2028 warn("Bad error! - non shadow matrix type in AlnRangeSet_from_GeneStretch6");
2029 return NULL;
2030 }
2031
2032
2033 /* Assumme that we have specials (we should!). Read back along the specials till we have the finish point */
2034 if( read_special_strip_GeneStretch6(mat,0,stopj,stopspecstate,&jpos,&state,NULL) == FALSE) {
2035 warn("In AlnRanger_build_GeneStretch6 alignment ending at %d, unable to read back specials. Will (evenutally) return a partial range set... BEWARE!",stopj);
2036 return NULL;
2037 }
2038 if( state == START || jpos <= 0)
2039 return NULL;
2040
2041
2042 out = AlnRange_alloc();
2043
2044
2045 out->starti = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,0);
2046 out->startj = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,1);
2047 out->startstate = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,2);
2048 out->stopi = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,3);
2049 out->stopj = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,4);
2050 out->stopstate = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,5);
2051 out->startscore = GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,jpos,state,6);
2052 out->stopscore = GeneStretch6_DC_SHADOW_SPECIAL(mat,0,jpos,state);
2053
2054
2055 /* Now, we have to figure out where this state came from in the specials */
2056 max_matrix_to_special_GeneStretch6(mat,out->starti,out->startj,out->startstate,out->startscore,&jpos,startj,startspecstate,&state,NULL);
2057 if( jpos == GeneStretch6_READ_OFF_ERROR) {
2058 warn("In AlnRange_build_GeneStretch6 alignment ending at %d, with aln range between %d-%d in j, unable to find source special, returning this range, but this could get tricky!",stopj,out->startj,out->stopj);
2059 return out;
2060 }
2061
2062
2063 /* Put in the correct score for startstate, from the special */
2064 out->startscore = GeneStretch6_DC_SHADOW_SPECIAL(mat,0,*startj,*startspecstate);
2065 /* The correct j coords have been put into startj, startspecstate... so just return out */
2066 return out;
2067 }
2068
2069
2070 /* Function: read_hidden_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,out)
2071 *
2072 * Descrip: No Description
2073 *
2074 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2075 * Arg: starti [UNKN ] Undocumented argument [int]
2076 * Arg: startj [UNKN ] Undocumented argument [int]
2077 * Arg: startstate [UNKN ] Undocumented argument [int]
2078 * Arg: stopi [UNKN ] Undocumented argument [int]
2079 * Arg: stopj [UNKN ] Undocumented argument [int]
2080 * Arg: stopstate [UNKN ] Undocumented argument [int]
2081 * Arg: out [UNKN ] Undocumented argument [PackAln *]
2082 *
2083 * Return [UNKN ] Undocumented return value [boolean]
2084 *
2085 */
read_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,PackAln * out)2086 boolean read_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,PackAln * out)
2087 {
2088 int i;
2089 int j;
2090 int state;
2091 int cellscore;
2092 int isspecial;
2093 /* We don't need hiddenj here, 'cause matrix access handled by max funcs */
2094 PackAlnUnit * pau;
2095
2096
2097 /* stop position is on the path */
2098 i = stopi;
2099 j = stopj;
2100 state= stopstate;
2101 isspecial = FALSE;
2102
2103
2104 while( i >= starti && j >= startj) {
2105 /* Put away current i,j,state */
2106 pau = PackAlnUnit_alloc();/* Should deal with memory overflow */
2107 pau->i = i;
2108 pau->j = j;
2109 pau->state = state;
2110 add_PackAln(out,pau);
2111
2112
2113 max_hidden_GeneStretch6(mat,startj,i,j,state,isspecial,&i,&j,&state,&isspecial,&cellscore);
2114
2115
2116 if( i == GeneStretch6_READ_OFF_ERROR) {
2117 warn("In GeneStretch6 hidden read off, between %d:%d,%d:%d - at got bad read off. Problem!",starti,startj,stopi,stopj);
2118 return FALSE;
2119 }
2120
2121
2122 if( i == starti && j == startj && state == startstate) {
2123 /* Put away final state (start of this block) */
2124 pau = PackAlnUnit_alloc(); /* Should deal with memory overflow */
2125 pau->i = i;
2126 pau->j = j;
2127 pau->state = state;
2128 add_PackAln(out,pau);
2129 return TRUE;
2130 }
2131 if( i == starti && j == startj) {
2132 warn("In GeneStretch6 hidden read off, between %d:%d,%d:%d - hit start cell, but not in start state. Can't be good!.",starti,startj,stopi,stopj);
2133 return FALSE;
2134 }
2135 }
2136 warn("In GeneStretch6 hidden read off, between %d:%d,%d:%d - gone past start cell (now in %d,%d,%d), can't be good news!.",starti,startj,stopi,stopj,i,j,state);
2137 return FALSE;
2138 }
2139
2140
2141 /* Function: max_hidden_GeneStretch6(mat,hiddenj,i,j,state,isspecial,reti,retj,retstate,retspecial,cellscore)
2142 *
2143 * Descrip: No Description
2144 *
2145 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2146 * Arg: hiddenj [UNKN ] Undocumented argument [int]
2147 * Arg: i [UNKN ] Undocumented argument [int]
2148 * Arg: j [UNKN ] Undocumented argument [int]
2149 * Arg: state [UNKN ] Undocumented argument [int]
2150 * Arg: isspecial [UNKN ] Undocumented argument [boolean]
2151 * Arg: reti [UNKN ] Undocumented argument [int *]
2152 * Arg: retj [UNKN ] Undocumented argument [int *]
2153 * Arg: retstate [UNKN ] Undocumented argument [int *]
2154 * Arg: retspecial [UNKN ] Undocumented argument [boolean *]
2155 * Arg: cellscore [UNKN ] Undocumented argument [int *]
2156 *
2157 * Return [UNKN ] Undocumented return value [int]
2158 *
2159 */
max_hidden_GeneStretch6(GeneStretch6 * mat,int hiddenj,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)2160 int max_hidden_GeneStretch6(GeneStretch6 * mat,int hiddenj,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)
2161 {
2162 register int temp;
2163 register int cscore;
2164
2165
2166 *reti = (*retj) = (*retstate) = GeneStretch6_READ_OFF_ERROR;
2167
2168
2169 if( i < 0 || j < 0 || i > mat->query->len || j > mat->target->seq->len) {
2170 warn("In GeneStretch6 matrix special read off - out of bounds on matrix [i,j is %d,%d state %d in standard matrix]",i,j,state);
2171 return -1;
2172 }
2173
2174
2175 /* Then you have to select the correct switch statement to figure out the readoff */
2176 /* Somewhat odd - reverse the order of calculation and return as soon as it is correct */
2177 cscore = GeneStretch6_HIDDEN_MATRIX(mat,i,j,state);
2178 switch(state) { /*Switch state */
2179 case MATCH :
2180 temp = cscore - (mat->gp->transition[GP4_INSERT_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2181 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 5,MATCH) ) {
2182 *reti = i - 1;
2183 *retj = j - 5;
2184 *retstate = MATCH;
2185 *retspecial = FALSE;
2186 if( cellscore != NULL) {
2187 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-5,MATCH);
2188 }
2189 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 5,MATCH);
2190 }
2191 temp = cscore - (mat->gp->transition[GP4_INSERT_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2192 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 4,MATCH) ) {
2193 *reti = i - 1;
2194 *retj = j - 4;
2195 *retstate = MATCH;
2196 *retspecial = FALSE;
2197 if( cellscore != NULL) {
2198 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-4,MATCH);
2199 }
2200 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 4,MATCH);
2201 }
2202 temp = cscore - (mat->gp->transition[GP4_DELETE_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2203 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 1,MATCH) ) {
2204 *reti = i - 1;
2205 *retj = j - 1;
2206 *retstate = MATCH;
2207 *retspecial = FALSE;
2208 if( cellscore != NULL) {
2209 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-1,MATCH);
2210 }
2211 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 1,MATCH);
2212 }
2213 temp = cscore - (mat->gp->transition[GP4_DELETE_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2214 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 2,MATCH) ) {
2215 *reti = i - 1;
2216 *retj = j - 2;
2217 *retstate = MATCH;
2218 *retspecial = FALSE;
2219 if( cellscore != NULL) {
2220 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-2,MATCH);
2221 }
2222 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 2,MATCH);
2223 }
2224 temp = cscore - (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2225 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 4,INTRON_2) ) {
2226 *reti = i - 1;
2227 *retj = j - 4;
2228 *retstate = INTRON_2;
2229 *retspecial = FALSE;
2230 if( cellscore != NULL) {
2231 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-4,INTRON_2);
2232 }
2233 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 4,INTRON_2);
2234 }
2235 temp = cscore - (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2236 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 5,INTRON_1) ) {
2237 *reti = i - 1;
2238 *retj = j - 5;
2239 *retstate = INTRON_1;
2240 *retspecial = FALSE;
2241 if( cellscore != NULL) {
2242 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-5,INTRON_1);
2243 }
2244 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 5,INTRON_1);
2245 }
2246 temp = cscore - ((((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2247 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 6,INTRON_0) ) {
2248 *reti = i - 1;
2249 *retj = j - 6;
2250 *retstate = INTRON_0;
2251 *retspecial = FALSE;
2252 if( cellscore != NULL) {
2253 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-6,INTRON_0);
2254 }
2255 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 6,INTRON_0);
2256 }
2257 /* Not allowing special sources.. skipping BEFORE_MATCH_CODING */
2258 /* Not allowing special sources.. skipping START */
2259 temp = cscore - ((mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2260 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,DELETE) ) {
2261 *reti = i - 1;
2262 *retj = j - 3;
2263 *retstate = DELETE;
2264 *retspecial = FALSE;
2265 if( cellscore != NULL) {
2266 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,DELETE);
2267 }
2268 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,DELETE);
2269 }
2270 temp = cscore - ((mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2271 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,INSERT) ) {
2272 *reti = i - 1;
2273 *retj = j - 3;
2274 *retstate = INSERT;
2275 *retspecial = FALSE;
2276 if( cellscore != NULL) {
2277 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,INSERT);
2278 }
2279 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,INSERT);
2280 }
2281 temp = cscore - ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2282 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,MATCH) ) {
2283 *reti = i - 1;
2284 *retj = j - 3;
2285 *retstate = MATCH;
2286 *retspecial = FALSE;
2287 if( cellscore != NULL) {
2288 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,MATCH);
2289 }
2290 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 3,MATCH);
2291 }
2292 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2293 return (-1);
2294 case INSERT :
2295 temp = cscore - (mat->gp->transition[GP4_DELETE_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2296 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INSERT) ) {
2297 *reti = i - 0;
2298 *retj = j - 1;
2299 *retstate = INSERT;
2300 *retspecial = FALSE;
2301 if( cellscore != NULL) {
2302 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INSERT);
2303 }
2304 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INSERT);
2305 }
2306 temp = cscore - (mat->gp->transition[GP4_DELETE_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2307 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 2,INSERT) ) {
2308 *reti = i - 0;
2309 *retj = j - 2;
2310 *retstate = INSERT;
2311 *retspecial = FALSE;
2312 if( cellscore != NULL) {
2313 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-2,INSERT);
2314 }
2315 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 2,INSERT);
2316 }
2317 temp = cscore - (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2318 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 4,INTRON_2) ) {
2319 *reti = i - 0;
2320 *retj = j - 4;
2321 *retstate = INTRON_2;
2322 *retspecial = FALSE;
2323 if( cellscore != NULL) {
2324 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-4,INTRON_2);
2325 }
2326 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 4,INTRON_2);
2327 }
2328 temp = cscore - (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2329 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 5,INTRON_1) ) {
2330 *reti = i - 0;
2331 *retj = j - 5;
2332 *retstate = INTRON_1;
2333 *retspecial = FALSE;
2334 if( cellscore != NULL) {
2335 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-5,INTRON_1);
2336 }
2337 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 5,INTRON_1);
2338 }
2339 temp = cscore - ((((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2340 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 6,INTRON_0) ) {
2341 *reti = i - 0;
2342 *retj = j - 6;
2343 *retstate = INTRON_0;
2344 *retspecial = FALSE;
2345 if( cellscore != NULL) {
2346 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-6,INTRON_0);
2347 }
2348 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 6,INTRON_0);
2349 }
2350 /* Not allowing special sources.. skipping START */
2351 temp = cscore - ((mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2352 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,DELETE) ) {
2353 *reti = i - 0;
2354 *retj = j - 3;
2355 *retstate = DELETE;
2356 *retspecial = FALSE;
2357 if( cellscore != NULL) {
2358 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,DELETE);
2359 }
2360 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,DELETE);
2361 }
2362 temp = cscore - ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2363 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,INSERT) ) {
2364 *reti = i - 0;
2365 *retj = j - 3;
2366 *retstate = INSERT;
2367 *retspecial = FALSE;
2368 if( cellscore != NULL) {
2369 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,INSERT);
2370 }
2371 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,INSERT);
2372 }
2373 temp = cscore - ((mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2374 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,MATCH) ) {
2375 *reti = i - 0;
2376 *retj = j - 3;
2377 *retstate = MATCH;
2378 *retspecial = FALSE;
2379 if( cellscore != NULL) {
2380 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,MATCH);
2381 }
2382 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 3,MATCH);
2383 }
2384 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2385 return (-1);
2386 case DELETE :
2387 /* Not allowing special sources.. skipping START */
2388 temp = cscore - (mat->query->seg[i]->transition[GW_DELETE2DELETE]) - (0);
2389 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,DELETE) ) {
2390 *reti = i - 1;
2391 *retj = j - 0;
2392 *retstate = DELETE;
2393 *retspecial = FALSE;
2394 if( cellscore != NULL) {
2395 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,DELETE);
2396 }
2397 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,DELETE);
2398 }
2399 temp = cscore - (mat->query->seg[i]->transition[GW_INSERT2DELETE]) - (0);
2400 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,INSERT) ) {
2401 *reti = i - 1;
2402 *retj = j - 0;
2403 *retstate = INSERT;
2404 *retspecial = FALSE;
2405 if( cellscore != NULL) {
2406 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,INSERT);
2407 }
2408 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,INSERT);
2409 }
2410 temp = cscore - (mat->query->seg[i]->transition[GW_MATCH2DELETE]) - (0);
2411 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,MATCH) ) {
2412 *reti = i - 1;
2413 *retj = j - 0;
2414 *retstate = MATCH;
2415 *retspecial = FALSE;
2416 if( cellscore != NULL) {
2417 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,MATCH);
2418 }
2419 return GeneStretch6_HIDDEN_MATRIX(mat,i - 1,j - 0,MATCH);
2420 }
2421 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2422 return (-1);
2423 case INTRON_0 :
2424 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
2425 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_0) ) {
2426 *reti = i - 0;
2427 *retj = j - 1;
2428 *retstate = INTRON_0;
2429 *retspecial = FALSE;
2430 if( cellscore != NULL) {
2431 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_0);
2432 }
2433 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_0);
2434 }
2435 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2436 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 8,INSERT) ) {
2437 *reti = i - 0;
2438 *retj = j - 8;
2439 *retstate = INSERT;
2440 *retspecial = FALSE;
2441 if( cellscore != NULL) {
2442 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-8,INSERT);
2443 }
2444 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 8,INSERT);
2445 }
2446 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2447 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 8,MATCH) ) {
2448 *reti = i - 0;
2449 *retj = j - 8;
2450 *retstate = MATCH;
2451 *retspecial = FALSE;
2452 if( cellscore != NULL) {
2453 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-8,MATCH);
2454 }
2455 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 8,MATCH);
2456 }
2457 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2458 return (-1);
2459 case INTRON_1 :
2460 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
2461 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_1) ) {
2462 *reti = i - 0;
2463 *retj = j - 1;
2464 *retstate = INTRON_1;
2465 *retspecial = FALSE;
2466 if( cellscore != NULL) {
2467 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_1);
2468 }
2469 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_1);
2470 }
2471 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2472 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 9,INSERT) ) {
2473 *reti = i - 0;
2474 *retj = j - 9;
2475 *retstate = INSERT;
2476 *retspecial = FALSE;
2477 if( cellscore != NULL) {
2478 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-9,INSERT);
2479 }
2480 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 9,INSERT);
2481 }
2482 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2483 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 9,MATCH) ) {
2484 *reti = i - 0;
2485 *retj = j - 9;
2486 *retstate = MATCH;
2487 *retspecial = FALSE;
2488 if( cellscore != NULL) {
2489 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-9,MATCH);
2490 }
2491 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 9,MATCH);
2492 }
2493 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2494 return (-1);
2495 case INTRON_2 :
2496 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
2497 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_2) ) {
2498 *reti = i - 0;
2499 *retj = j - 1;
2500 *retstate = INTRON_2;
2501 *retspecial = FALSE;
2502 if( cellscore != NULL) {
2503 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_2);
2504 }
2505 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 1,INTRON_2);
2506 }
2507 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2508 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 10,INSERT) ) {
2509 *reti = i - 0;
2510 *retj = j - 10;
2511 *retstate = INSERT;
2512 *retspecial = FALSE;
2513 if( cellscore != NULL) {
2514 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-10,INSERT);
2515 }
2516 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 10,INSERT);
2517 }
2518 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
2519 if( temp == GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 10,MATCH) ) {
2520 *reti = i - 0;
2521 *retj = j - 10;
2522 *retstate = MATCH;
2523 *retspecial = FALSE;
2524 if( cellscore != NULL) {
2525 *cellscore = cscore - GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-10,MATCH);
2526 }
2527 return GeneStretch6_HIDDEN_MATRIX(mat,i - 0,j - 10,MATCH);
2528 }
2529 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2530 return (-1);
2531 default:
2532 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2533 return (-1);
2534 } /* end of Switch state */
2535 }
2536
2537
2538 /* Function: read_special_strip_GeneStretch6(mat,stopi,stopj,stopstate,startj,startstate,out)
2539 *
2540 * Descrip: No Description
2541 *
2542 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2543 * Arg: stopi [UNKN ] Undocumented argument [int]
2544 * Arg: stopj [UNKN ] Undocumented argument [int]
2545 * Arg: stopstate [UNKN ] Undocumented argument [int]
2546 * Arg: startj [UNKN ] Undocumented argument [int *]
2547 * Arg: startstate [UNKN ] Undocumented argument [int *]
2548 * Arg: out [UNKN ] Undocumented argument [PackAln *]
2549 *
2550 * Return [UNKN ] Undocumented return value [boolean]
2551 *
2552 */
read_special_strip_GeneStretch6(GeneStretch6 * mat,int stopi,int stopj,int stopstate,int * startj,int * startstate,PackAln * out)2553 boolean read_special_strip_GeneStretch6(GeneStretch6 * mat,int stopi,int stopj,int stopstate,int * startj,int * startstate,PackAln * out)
2554 {
2555 int i;
2556 int j;
2557 int state;
2558 int cellscore;
2559 int isspecial;
2560 PackAlnUnit * pau;
2561
2562
2563 /* stop position is on the path */
2564 i = stopi;
2565 j = stopj;
2566 state= stopstate;
2567 isspecial = TRUE;
2568
2569
2570 /* Loop until state has the same j as its stop in shadow pointers */
2571 /* This will be the state is came out from, OR it has hit !start */
2572 /* We may not want to get the alignment, in which case out will be NULL */
2573 while( j > GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,i,j,state,4) && state != START) { /*while more specials to eat up*/
2574 /* Put away current state, if we should */
2575 if(out != NULL) {
2576 pau = PackAlnUnit_alloc(); /* Should deal with memory overflow */
2577 pau->i = i;
2578 pau->j = j;
2579 pau->state = state + 6;
2580 add_PackAln(out,pau);
2581 }
2582
2583
2584 max_special_strip_GeneStretch6(mat,i,j,state,isspecial,&i,&j,&state,&isspecial,&cellscore);
2585 if( i == GeneStretch6_READ_OFF_ERROR) {
2586 warn("In special strip read GeneStretch6, got a bad read off error. Sorry!");
2587 return FALSE;
2588 }
2589 } /* end of while more specials to eat up */
2590
2591
2592 /* check to see we have not gone too far! */
2593 if( state != START && j < GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,i,j,state,4)) {
2594 warn("In special strip read GeneStretch6, at special [%d] state [%d] overshot!",j,state);
2595 return FALSE;
2596 }
2597 /* Put away last state */
2598 if(out != NULL) {
2599 pau = PackAlnUnit_alloc();/* Should deal with memory overflow */
2600 pau->i = i;
2601 pau->j = j;
2602 pau->state = state + 6;
2603 add_PackAln(out,pau);
2604 }
2605
2606
2607 /* Put away where we are in startj and startstate */
2608 *startj = j;
2609 *startstate = state;
2610 return TRUE;
2611 }
2612
2613
2614 /* Function: max_special_strip_GeneStretch6(mat,i,j,state,isspecial,reti,retj,retstate,retspecial,cellscore)
2615 *
2616 * Descrip: A pretty intense internal function. Deals with read-off only in specials
2617 *
2618 *
2619 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2620 * Arg: i [UNKN ] Undocumented argument [int]
2621 * Arg: j [UNKN ] Undocumented argument [int]
2622 * Arg: state [UNKN ] Undocumented argument [int]
2623 * Arg: isspecial [UNKN ] Undocumented argument [boolean]
2624 * Arg: reti [UNKN ] Undocumented argument [int *]
2625 * Arg: retj [UNKN ] Undocumented argument [int *]
2626 * Arg: retstate [UNKN ] Undocumented argument [int *]
2627 * Arg: retspecial [UNKN ] Undocumented argument [boolean *]
2628 * Arg: cellscore [UNKN ] Undocumented argument [int *]
2629 *
2630 * Return [UNKN ] Undocumented return value [int]
2631 *
2632 */
max_special_strip_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)2633 int max_special_strip_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)
2634 {
2635 int temp;
2636 int cscore;
2637
2638
2639 *reti = (*retj) = (*retstate) = GeneStretch6_READ_OFF_ERROR;
2640 if( isspecial == FALSE ) {
2641 warn("In special strip max function for GeneStretch6, got a non special start point. Problem! (bad!)");
2642 return (-1);
2643 }
2644
2645
2646 if( j < 0 || j > mat->target->seq->len) {
2647 warn("In GeneStretch6 matrix special read off - out of bounds on matrix [j is %d in special]",j);
2648 return -1;
2649 }
2650
2651
2652 cscore = GeneStretch6_DC_SHADOW_SPECIAL(mat,i,j,state);
2653 switch(state) { /*switch on special states*/
2654 case START :
2655 case END :
2656 /* source AFTER_MATCH_CODING is a special */
2657 temp = cscore - (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
2658 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 0,j - 3,AFTER_MATCH_CODING) ) {
2659 *reti = i - 0;
2660 *retj = j - 3;
2661 *retstate = AFTER_MATCH_CODING;
2662 *retspecial = TRUE;
2663 if( cellscore != NULL) {
2664 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-0,j-3,AFTER_MATCH_CODING);
2665 }
2666 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 0,j - 3,AFTER_MATCH_CODING) ;
2667 }
2668 /* Source DELETE is not a special */
2669 /* Source INSERT is not a special */
2670 /* Source MATCH is not a special */
2671 case BEFORE_MATCH_CODING :
2672 /* source BEFORE_MATCH_CODING is a special */
2673 temp = cscore - (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
2674 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 0,j - 3,BEFORE_MATCH_CODING) ) {
2675 *reti = i - 0;
2676 *retj = j - 3;
2677 *retstate = BEFORE_MATCH_CODING;
2678 *retspecial = TRUE;
2679 if( cellscore != NULL) {
2680 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-0,j-3,BEFORE_MATCH_CODING);
2681 }
2682 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 0,j - 3,BEFORE_MATCH_CODING) ;
2683 }
2684 /* source START is a special */
2685 temp = cscore - (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
2686 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 0,j - 3,START) ) {
2687 *reti = i - 0;
2688 *retj = j - 3;
2689 *retstate = START;
2690 *retspecial = TRUE;
2691 if( cellscore != NULL) {
2692 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-0,j-3,START);
2693 }
2694 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 0,j - 3,START) ;
2695 }
2696 case AFTER_MATCH_CODING :
2697 /* source AFTER_MATCH_CODING is a special */
2698 temp = cscore - (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
2699 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 0,j - 3,AFTER_MATCH_CODING) ) {
2700 *reti = i - 0;
2701 *retj = j - 3;
2702 *retstate = AFTER_MATCH_CODING;
2703 *retspecial = TRUE;
2704 if( cellscore != NULL) {
2705 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-0,j-3,AFTER_MATCH_CODING);
2706 }
2707 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 0,j - 3,AFTER_MATCH_CODING) ;
2708 }
2709 /* Source MATCH is not a special */
2710 default:
2711 warn("Major problem (!) - in GeneStretch6 special strip read off, position %d,%d state %d no source found dropped into default on source switch!",i,j,state);
2712 return (-1);
2713 } /* end of switch on special states */
2714 }
2715
2716
2717 /* Function: max_matrix_to_special_GeneStretch6(mat,i,j,state,cscore,reti,retj,retstate,retspecial,cellscore)
2718 *
2719 * Descrip: No Description
2720 *
2721 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2722 * Arg: i [UNKN ] Undocumented argument [int]
2723 * Arg: j [UNKN ] Undocumented argument [int]
2724 * Arg: state [UNKN ] Undocumented argument [int]
2725 * Arg: cscore [UNKN ] Undocumented argument [int]
2726 * Arg: reti [UNKN ] Undocumented argument [int *]
2727 * Arg: retj [UNKN ] Undocumented argument [int *]
2728 * Arg: retstate [UNKN ] Undocumented argument [int *]
2729 * Arg: retspecial [UNKN ] Undocumented argument [boolean *]
2730 * Arg: cellscore [UNKN ] Undocumented argument [int *]
2731 *
2732 * Return [UNKN ] Undocumented return value [int]
2733 *
2734 */
max_matrix_to_special_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,int cscore,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)2735 int max_matrix_to_special_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,int cscore,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore)
2736 {
2737 int temp;
2738 *reti = (*retj) = (*retstate) = GeneStretch6_READ_OFF_ERROR;
2739
2740
2741 if( j < 0 || j > mat->lenj) {
2742 warn("In GeneStretch6 matrix to special read off - out of bounds on matrix [j is %d in special]",j);
2743 return -1;
2744 }
2745
2746
2747 switch(state) { /*Switch state */
2748 case MATCH :
2749 /* Source MATCH is not a special, should not get here! */
2750 /* Source MATCH is not a special, should not get here! */
2751 /* Source MATCH is not a special, should not get here! */
2752 /* Source MATCH is not a special, should not get here! */
2753 /* Source INTRON_2 is not a special, should not get here! */
2754 /* Source INTRON_1 is not a special, should not get here! */
2755 /* Source INTRON_0 is not a special, should not get here! */
2756 temp = cscore - ((mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2757 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 1,j - 3,BEFORE_MATCH_CODING) ) {
2758 *reti = i - 1;
2759 *retj = j - 3;
2760 *retstate = BEFORE_MATCH_CODING;
2761 *retspecial = TRUE;
2762 if( cellscore != NULL) {
2763 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING);
2764 }
2765 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 1,j - 3,BEFORE_MATCH_CODING) ;
2766 }
2767 temp = cscore - ((mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2768 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 1,j - 3,START) ) {
2769 *reti = i - 1;
2770 *retj = j - 3;
2771 *retstate = START;
2772 *retspecial = TRUE;
2773 if( cellscore != NULL) {
2774 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-1,j-3,START);
2775 }
2776 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 1,j - 3,START) ;
2777 }
2778 /* Source DELETE is not a special, should not get here! */
2779 /* Source INSERT is not a special, should not get here! */
2780 /* Source MATCH is not a special, should not get here! */
2781 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2782 return (-1);
2783 case INSERT :
2784 /* Source INSERT is not a special, should not get here! */
2785 /* Source INSERT is not a special, should not get here! */
2786 /* Source INTRON_2 is not a special, should not get here! */
2787 /* Source INTRON_1 is not a special, should not get here! */
2788 /* Source INTRON_0 is not a special, should not get here! */
2789 temp = cscore - ((mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
2790 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 0,j - 3,START) ) {
2791 *reti = i - 0;
2792 *retj = j - 3;
2793 *retstate = START;
2794 *retspecial = TRUE;
2795 if( cellscore != NULL) {
2796 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-0,j-3,START);
2797 }
2798 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 0,j - 3,START) ;
2799 }
2800 /* Source DELETE is not a special, should not get here! */
2801 /* Source INSERT is not a special, should not get here! */
2802 /* Source MATCH is not a special, should not get here! */
2803 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2804 return (-1);
2805 case DELETE :
2806 temp = cscore - (mat->query->seg[i]->transition[GW_START2DELETE]) - (0);
2807 if( temp == GeneStretch6_DC_SHADOW_SPECIAL(mat,i - 1,j - 0,START) ) {
2808 *reti = i - 1;
2809 *retj = j - 0;
2810 *retstate = START;
2811 *retspecial = TRUE;
2812 if( cellscore != NULL) {
2813 *cellscore = cscore - GeneStretch6_DC_SHADOW_SPECIAL(mat,i-1,j-0,START);
2814 }
2815 return GeneStretch6_DC_SHADOW_MATRIX(mat,i - 1,j - 0,START) ;
2816 }
2817 /* Source DELETE is not a special, should not get here! */
2818 /* Source INSERT is not a special, should not get here! */
2819 /* Source MATCH is not a special, should not get here! */
2820 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2821 return (-1);
2822 case INTRON_0 :
2823 /* Source INTRON_0 is not a special, should not get here! */
2824 /* Source INSERT is not a special, should not get here! */
2825 /* Source MATCH is not a special, should not get here! */
2826 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2827 return (-1);
2828 case INTRON_1 :
2829 /* Source INTRON_1 is not a special, should not get here! */
2830 /* Source INSERT is not a special, should not get here! */
2831 /* Source MATCH is not a special, should not get here! */
2832 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2833 return (-1);
2834 case INTRON_2 :
2835 /* Source INTRON_2 is not a special, should not get here! */
2836 /* Source INSERT is not a special, should not get here! */
2837 /* Source MATCH is not a special, should not get here! */
2838 warn("Major problem (!) - in GeneStretch6 matrix to special read off, position %d,%d state %d no source found!",i,j,state);
2839 return (-1);
2840 default:
2841 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
2842 return (-1);
2843 } /* end of Switch state */
2844
2845
2846 }
2847
2848
2849 /* Function: calculate_hidden_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,dpenv)
2850 *
2851 * Descrip: No Description
2852 *
2853 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
2854 * Arg: starti [UNKN ] Undocumented argument [int]
2855 * Arg: startj [UNKN ] Undocumented argument [int]
2856 * Arg: startstate [UNKN ] Undocumented argument [int]
2857 * Arg: stopi [UNKN ] Undocumented argument [int]
2858 * Arg: stopj [UNKN ] Undocumented argument [int]
2859 * Arg: stopstate [UNKN ] Undocumented argument [int]
2860 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
2861 *
2862 */
calculate_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,DPEnvelope * dpenv)2863 void calculate_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,DPEnvelope * dpenv)
2864 {
2865 register int i;
2866 register int j;
2867 register int score;
2868 register int temp;
2869 register int hiddenj;
2870
2871
2872 hiddenj = startj;
2873
2874
2875 init_hidden_GeneStretch6(mat,starti,startj,stopi,stopj);
2876
2877
2878 GeneStretch6_HIDDEN_MATRIX(mat,starti,startj,startstate) = 0;
2879
2880
2881 for(j=startj;j<=stopj;j++) {
2882 for(i=starti;i<=stopi;i++) {
2883 /* Should *not* do very first cell as this is the one set to zero in one state! */
2884 if( i == starti && j == startj )
2885 continue;
2886 if( dpenv != NULL && is_in_DPEnvelope(dpenv,i,j) == FALSE ) { /*Is not in envelope*/
2887 GeneStretch6_HIDDEN_MATRIX(mat,i,j,MATCH) = NEGI;
2888 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INSERT) = NEGI;
2889 GeneStretch6_HIDDEN_MATRIX(mat,i,j,DELETE) = NEGI;
2890 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_0) = NEGI;
2891 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_1) = NEGI;
2892 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_2) = NEGI;
2893 continue;
2894 } /* end of Is not in envelope */
2895
2896
2897 /* For state MATCH */
2898 /* setting first movement to score */
2899 score = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
2900 /* From state INSERT to state MATCH */
2901 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
2902 if( temp > score ) {
2903 score = temp;
2904 }
2905 /* From state DELETE to state MATCH */
2906 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
2907 if( temp > score ) {
2908 score = temp;
2909 }
2910 /* From state INTRON_0 to state MATCH */
2911 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
2912 if( temp > score ) {
2913 score = temp;
2914 }
2915 /* From state INTRON_1 to state MATCH */
2916 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
2917 if( temp > score ) {
2918 score = temp;
2919 }
2920 /* From state INTRON_2 to state MATCH */
2921 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
2922 if( temp > score ) {
2923 score = temp;
2924 }
2925 /* From state MATCH to state MATCH */
2926 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
2927 if( temp > score ) {
2928 score = temp;
2929 }
2930 /* From state MATCH to state MATCH */
2931 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
2932 if( temp > score ) {
2933 score = temp;
2934 }
2935 /* From state MATCH to state MATCH */
2936 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
2937 if( temp > score ) {
2938 score = temp;
2939 }
2940 /* From state MATCH to state MATCH */
2941 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
2942 if( temp > score ) {
2943 score = temp;
2944 }
2945
2946
2947 /* Ok - finished max calculation for MATCH */
2948 /* Add any movement independant score and put away */
2949 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
2950 GeneStretch6_HIDDEN_MATRIX(mat,i,j,MATCH) = score;
2951 /* Finished calculating state MATCH */
2952
2953
2954 /* For state INSERT */
2955 /* setting first movement to score */
2956 score = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
2957 /* From state INSERT to state INSERT */
2958 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
2959 if( temp > score ) {
2960 score = temp;
2961 }
2962 /* From state DELETE to state INSERT */
2963 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
2964 if( temp > score ) {
2965 score = temp;
2966 }
2967 /* From state INTRON_0 to state INSERT */
2968 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
2969 if( temp > score ) {
2970 score = temp;
2971 }
2972 /* From state INTRON_1 to state INSERT */
2973 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
2974 if( temp > score ) {
2975 score = temp;
2976 }
2977 /* From state INTRON_2 to state INSERT */
2978 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
2979 if( temp > score ) {
2980 score = temp;
2981 }
2982 /* From state INSERT to state INSERT */
2983 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
2984 if( temp > score ) {
2985 score = temp;
2986 }
2987 /* From state INSERT to state INSERT */
2988 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
2989 if( temp > score ) {
2990 score = temp;
2991 }
2992
2993
2994 /* Ok - finished max calculation for INSERT */
2995 /* Add any movement independant score and put away */
2996 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
2997 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INSERT) = score;
2998 /* Finished calculating state INSERT */
2999
3000
3001 /* For state DELETE */
3002 /* setting first movement to score */
3003 score = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
3004 /* From state INSERT to state DELETE */
3005 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
3006 if( temp > score ) {
3007 score = temp;
3008 }
3009 /* From state DELETE to state DELETE */
3010 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
3011 if( temp > score ) {
3012 score = temp;
3013 }
3014
3015
3016 /* Ok - finished max calculation for DELETE */
3017 /* Add any movement independant score and put away */
3018 GeneStretch6_HIDDEN_MATRIX(mat,i,j,DELETE) = score;
3019 /* Finished calculating state DELETE */
3020
3021
3022 /* For state INTRON_0 */
3023 /* setting first movement to score */
3024 score = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3025 /* From state INSERT to state INTRON_0 */
3026 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3027 if( temp > score ) {
3028 score = temp;
3029 }
3030 /* From state INTRON_0 to state INTRON_0 */
3031 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3032 if( temp > score ) {
3033 score = temp;
3034 }
3035
3036
3037 /* Ok - finished max calculation for INTRON_0 */
3038 /* Add any movement independant score and put away */
3039 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_0) = score;
3040 /* Finished calculating state INTRON_0 */
3041
3042
3043 /* For state INTRON_1 */
3044 /* setting first movement to score */
3045 score = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3046 /* From state INSERT to state INTRON_1 */
3047 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3048 if( temp > score ) {
3049 score = temp;
3050 }
3051 /* From state INTRON_1 to state INTRON_1 */
3052 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3053 if( temp > score ) {
3054 score = temp;
3055 }
3056
3057
3058 /* Ok - finished max calculation for INTRON_1 */
3059 /* Add any movement independant score and put away */
3060 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_1) = score;
3061 /* Finished calculating state INTRON_1 */
3062
3063
3064 /* For state INTRON_2 */
3065 /* setting first movement to score */
3066 score = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3067 /* From state INSERT to state INTRON_2 */
3068 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3069 if( temp > score ) {
3070 score = temp;
3071 }
3072 /* From state INTRON_2 to state INTRON_2 */
3073 temp = GeneStretch6_HIDDEN_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3074 if( temp > score ) {
3075 score = temp;
3076 }
3077
3078
3079 /* Ok - finished max calculation for INTRON_2 */
3080 /* Add any movement independant score and put away */
3081 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_2) = score;
3082 /* Finished calculating state INTRON_2 */
3083 }
3084 }
3085
3086
3087 return;
3088 }
3089
3090
3091 /* Function: init_hidden_GeneStretch6(mat,starti,startj,stopi,stopj)
3092 *
3093 * Descrip: No Description
3094 *
3095 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
3096 * Arg: starti [UNKN ] Undocumented argument [int]
3097 * Arg: startj [UNKN ] Undocumented argument [int]
3098 * Arg: stopi [UNKN ] Undocumented argument [int]
3099 * Arg: stopj [UNKN ] Undocumented argument [int]
3100 *
3101 */
init_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int stopi,int stopj)3102 void init_hidden_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int stopi,int stopj)
3103 {
3104 register int i;
3105 register int j;
3106 register int hiddenj;
3107
3108
3109 hiddenj = startj;
3110 for(j=(startj-10);j<=stopj;j++) {
3111 for(i=(starti-1);i<=stopi;i++) {
3112 GeneStretch6_HIDDEN_MATRIX(mat,i,j,MATCH) = NEGI;
3113
3114 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INSERT) = NEGI;
3115
3116 GeneStretch6_HIDDEN_MATRIX(mat,i,j,DELETE) = NEGI;
3117
3118 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_0) = NEGI;
3119
3120 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_1) = NEGI;
3121
3122 GeneStretch6_HIDDEN_MATRIX(mat,i,j,INTRON_2) = NEGI;
3123
3124 }
3125 }
3126
3127
3128 return;
3129 }
3130
3131
3132 /* Function: full_dc_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,out,donej,totalj,dpenv)
3133 *
3134 * Descrip: The main divide-and-conquor routine. Basically, call /PackAln_calculate_small_GeneStretch6
3135 * Not this function, which is pretty hard core.
3136 * Function is given start/end points (in main matrix) for alignment
3137 * It does some checks, decides whether start/end in j is small enough for explicit calc
3138 * - if yes, calculates it, reads off into PackAln (out), adds the j distance to donej and returns TRUE
3139 * - if no, uses /do_dc_single_pass_GeneStretch6 to get mid-point
3140 * saves midpoint, and calls itself to do right portion then left portion
3141 * right then left ensures PackAln is added the 'right' way, ie, back-to-front
3142 * returns FALSE on any error, with a warning
3143 *
3144 *
3145 * Arg: mat [UNKN ] Matrix with small memory implementation [GeneStretch6 *]
3146 * Arg: starti [UNKN ] Start position in i [int]
3147 * Arg: startj [UNKN ] Start position in j [int]
3148 * Arg: startstate [UNKN ] Start position state number [int]
3149 * Arg: stopi [UNKN ] Stop position in i [int]
3150 * Arg: stopj [UNKN ] Stop position in j [int]
3151 * Arg: stopstate [UNKN ] Stop position state number [int]
3152 * Arg: out [UNKN ] PackAln structure to put alignment into [PackAln *]
3153 * Arg: donej [UNKN ] pointer to a number with the amount of alignment done [int *]
3154 * Arg: totalj [UNKN ] total amount of alignment to do (in j coordinates) [int]
3155 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
3156 *
3157 * Return [UNKN ] Undocumented return value [boolean]
3158 *
3159 */
full_dc_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,PackAln * out,int * donej,int totalj,DPEnvelope * dpenv)3160 boolean full_dc_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,PackAln * out,int * donej,int totalj,DPEnvelope * dpenv)
3161 {
3162 int lstarti;
3163 int lstartj;
3164 int lstate;
3165
3166
3167 if( mat->basematrix->type != BASEMATRIX_TYPE_SHADOW) {
3168 warn("*Very* bad error! - non shadow matrix type in full_dc_GeneStretch6");
3169 return FALSE;
3170 }
3171
3172
3173 if( starti == -1 || startj == -1 || startstate == -1 || stopi == -1 || stopstate == -1) {
3174 warn("In full dc program, passed bad indices, indices passed were %d:%d[%d] to %d:%d[%d]\n",starti,startj,startstate,stopi,stopj,stopstate);
3175 return FALSE;
3176 }
3177
3178
3179 if( stopj - startj < 50) {
3180 log_full_error(REPORT,0,"[%d,%d][%d,%d] Explicit read off",starti,startj,stopi,stopj);/* Build hidden explicit matrix */
3181 calculate_hidden_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,dpenv);
3182 *donej += (stopj - startj); /* Now read it off into out */
3183 if( read_hidden_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,out) == FALSE) {
3184 warn("In full dc, at %d:%d,%d:%d got a bad hidden explicit read off... ",starti,startj,stopi,stopj);
3185 return FALSE;
3186 }
3187 return TRUE;
3188 }
3189
3190
3191 /* In actual divide and conquor */
3192 if( do_dc_single_pass_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,dpenv,(int)(*donej*100)/totalj) == FALSE) {
3193 warn("In divide and conquor for GeneStretch6, at bound %d:%d to %d:%d, unable to calculate midpoint. Problem!",starti,startj,stopi,stopj);
3194 return FALSE;
3195 }
3196
3197
3198 /* Ok... now we have to call on each side of the matrix */
3199 /* We have to retrieve left hand side positions, as they will be vapped by the time we call LHS */
3200 lstarti= GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,0);
3201 lstartj= GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,1);
3202 lstate = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,2);
3203
3204
3205 /* Call on right hand side: this lets us do the correct read off */
3206 if( full_dc_GeneStretch6(mat,GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,3),GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,4),GeneStretch6_DC_SHADOW_MATRIX_SP(mat,stopi,stopj,stopstate,5),stopi,stopj,stopstate,out,donej,totalj,dpenv) == FALSE) {
3207 /* Warning already issued, simply chained back up to top */
3208 return FALSE;
3209 }
3210 /* Call on left hand side */
3211 if( full_dc_GeneStretch6(mat,starti,startj,startstate,lstarti,lstartj,lstate,out,donej,totalj,dpenv) == FALSE) {
3212 /* Warning already issued, simply chained back up to top */
3213 return FALSE;
3214 }
3215
3216
3217 return TRUE;
3218 }
3219
3220
3221 /* Function: do_dc_single_pass_GeneStretch6(mat,starti,startj,startstate,stopi,stopj,stopstate,dpenv,perc_done)
3222 *
3223 * Descrip: No Description
3224 *
3225 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
3226 * Arg: starti [UNKN ] Undocumented argument [int]
3227 * Arg: startj [UNKN ] Undocumented argument [int]
3228 * Arg: startstate [UNKN ] Undocumented argument [int]
3229 * Arg: stopi [UNKN ] Undocumented argument [int]
3230 * Arg: stopj [UNKN ] Undocumented argument [int]
3231 * Arg: stopstate [UNKN ] Undocumented argument [int]
3232 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
3233 * Arg: perc_done [UNKN ] Undocumented argument [int]
3234 *
3235 * Return [UNKN ] Undocumented return value [boolean]
3236 *
3237 */
do_dc_single_pass_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,DPEnvelope * dpenv,int perc_done)3238 boolean do_dc_single_pass_GeneStretch6(GeneStretch6 * mat,int starti,int startj,int startstate,int stopi,int stopj,int stopstate,DPEnvelope * dpenv,int perc_done)
3239 {
3240 int halfj;
3241 halfj = startj + ((stopj - startj)/2);
3242
3243
3244 init_dc_GeneStretch6(mat);
3245
3246
3247 GeneStretch6_DC_SHADOW_MATRIX(mat,starti,startj,startstate) = 0;
3248 run_up_dc_GeneStretch6(mat,starti,stopi,startj,halfj-1,dpenv,perc_done);
3249 push_dc_at_merge_GeneStretch6(mat,starti,stopi,halfj,&halfj,dpenv);
3250 follow_on_dc_GeneStretch6(mat,starti,stopi,halfj,stopj,dpenv,perc_done);
3251 return TRUE;
3252 }
3253
3254
3255 /* Function: push_dc_at_merge_GeneStretch6(mat,starti,stopi,startj,stopj,dpenv)
3256 *
3257 * Descrip: No Description
3258 *
3259 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
3260 * Arg: starti [UNKN ] Undocumented argument [int]
3261 * Arg: stopi [UNKN ] Undocumented argument [int]
3262 * Arg: startj [UNKN ] Undocumented argument [int]
3263 * Arg: stopj [UNKN ] Undocumented argument [int *]
3264 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
3265 *
3266 */
push_dc_at_merge_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int * stopj,DPEnvelope * dpenv)3267 void push_dc_at_merge_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int * stopj,DPEnvelope * dpenv)
3268 {
3269 register int i;
3270 register int j;
3271 register int k;
3272 register int count;
3273 register int mergej;/* Sources below this j will be stamped by triples */
3274 register int score;
3275 register int temp;
3276
3277
3278 mergej = startj -1;
3279 for(count=0,j=startj;count<10;count++,j++) {
3280 for(i=starti;i<=stopi;i++) {
3281 if( dpenv != NULL && is_in_DPEnvelope(dpenv,i,j) == FALSE ) { /*Is not in envelope*/
3282 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
3283 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = (-100);
3284 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = (-100);
3285 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
3286 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = (-100);
3287 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = (-100);
3288 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
3289 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,0) = (-100);
3290 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,1) = (-100);
3291 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
3292 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,0) = (-100);
3293 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,1) = (-100);
3294 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
3295 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,0) = (-100);
3296 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,1) = (-100);
3297 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
3298 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,0) = (-100);
3299 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,1) = (-100);
3300 continue;
3301 } /* end of Is not in envelope */
3302
3303
3304 /* For state MATCH, pushing when j - offj <= mergej */
3305 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3306 if( j - 3 <= mergej) {
3307 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3308 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-3;
3309 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = MATCH;
3310 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3311 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3312 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3313 }
3314 else {
3315 for(k=0;k<7;k++)
3316 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,MATCH,k);
3317 }
3318
3319
3320 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3321 if( temp > score) {
3322 score = temp;
3323
3324
3325 if( j - 3 <= mergej) {
3326 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3327 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-3;
3328 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = INSERT;
3329 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3330 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3331 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3332 }
3333 else {
3334 for(k=0;k<7;k++)
3335 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,INSERT,k);
3336 }
3337 }
3338
3339
3340 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3341 if( temp > score) {
3342 score = temp;
3343
3344
3345 if( j - 3 <= mergej) {
3346 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3347 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-3;
3348 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = DELETE;
3349 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3350 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3351 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3352 }
3353 else {
3354 for(k=0;k<7;k++)
3355 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,DELETE,k);
3356 }
3357 }
3358
3359
3360 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
3361 if( temp > score) {
3362 score = temp;
3363
3364
3365 if( j - 6 <= mergej) {
3366 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3367 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-6;
3368 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = INTRON_0;
3369 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3370 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3371 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3372 }
3373 else {
3374 for(k=0;k<7;k++)
3375 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 6,INTRON_0,k);
3376 }
3377 }
3378
3379
3380 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
3381 if( temp > score) {
3382 score = temp;
3383
3384
3385 if( j - 5 <= mergej) {
3386 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3387 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-5;
3388 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = INTRON_1;
3389 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3390 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3391 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3392 }
3393 else {
3394 for(k=0;k<7;k++)
3395 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 5,INTRON_1,k);
3396 }
3397 }
3398
3399
3400 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
3401 if( temp > score) {
3402 score = temp;
3403
3404
3405 if( j - 4 <= mergej) {
3406 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3407 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-4;
3408 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = INTRON_2;
3409 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3410 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3411 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3412 }
3413 else {
3414 for(k=0;k<7;k++)
3415 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 4,INTRON_2,k);
3416 }
3417 }
3418
3419
3420 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
3421 if( temp > score) {
3422 score = temp;
3423
3424
3425 if( j - 2 <= mergej) {
3426 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3427 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-2;
3428 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = MATCH;
3429 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3430 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3431 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3432 }
3433 else {
3434 for(k=0;k<7;k++)
3435 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 2,MATCH,k);
3436 }
3437 }
3438
3439
3440 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
3441 if( temp > score) {
3442 score = temp;
3443
3444
3445 if( j - 1 <= mergej) {
3446 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3447 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-1;
3448 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = MATCH;
3449 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3450 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3451 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3452 }
3453 else {
3454 for(k=0;k<7;k++)
3455 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 1,MATCH,k);
3456 }
3457 }
3458
3459
3460 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
3461 if( temp > score) {
3462 score = temp;
3463
3464
3465 if( j - 4 <= mergej) {
3466 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3467 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-4;
3468 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = MATCH;
3469 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3470 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3471 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3472 }
3473 else {
3474 for(k=0;k<7;k++)
3475 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 4,MATCH,k);
3476 }
3477 }
3478
3479
3480 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
3481 if( temp > score) {
3482 score = temp;
3483
3484
3485 if( j - 5 <= mergej) {
3486 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = i-1;
3487 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,1) = j-5;
3488 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,2) = MATCH;
3489 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,3) = i;
3490 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,4) = j;
3491 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,5) = MATCH;
3492 }
3493 else {
3494 for(k=0;k<7;k++)
3495 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 5,MATCH,k);
3496 }
3497 }
3498 /* Add any movement independant score */
3499 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
3500 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = score;
3501 /* Finished with state MATCH */
3502
3503
3504 /* For state INSERT, pushing when j - offj <= mergej */
3505 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
3506 if( j - 3 <= mergej) {
3507 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3508 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-3;
3509 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = MATCH;
3510 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3511 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3512 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3513 }
3514 else {
3515 for(k=0;k<7;k++)
3516 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,MATCH,k);
3517 }
3518
3519
3520 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
3521 if( temp > score) {
3522 score = temp;
3523
3524
3525 if( j - 3 <= mergej) {
3526 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3527 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-3;
3528 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INSERT;
3529 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3530 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3531 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3532 }
3533 else {
3534 for(k=0;k<7;k++)
3535 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,INSERT,k);
3536 }
3537 }
3538
3539
3540 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
3541 if( temp > score) {
3542 score = temp;
3543
3544
3545 if( j - 3 <= mergej) {
3546 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3547 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-3;
3548 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = DELETE;
3549 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3550 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3551 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3552 }
3553 else {
3554 for(k=0;k<7;k++)
3555 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,DELETE,k);
3556 }
3557 }
3558
3559
3560 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
3561 if( temp > score) {
3562 score = temp;
3563
3564
3565 if( j - 6 <= mergej) {
3566 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3567 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-6;
3568 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INTRON_0;
3569 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3570 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3571 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3572 }
3573 else {
3574 for(k=0;k<7;k++)
3575 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 6,INTRON_0,k);
3576 }
3577 }
3578
3579
3580 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
3581 if( temp > score) {
3582 score = temp;
3583
3584
3585 if( j - 5 <= mergej) {
3586 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3587 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-5;
3588 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INTRON_1;
3589 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3590 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3591 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3592 }
3593 else {
3594 for(k=0;k<7;k++)
3595 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 5,INTRON_1,k);
3596 }
3597 }
3598
3599
3600 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
3601 if( temp > score) {
3602 score = temp;
3603
3604
3605 if( j - 4 <= mergej) {
3606 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3607 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-4;
3608 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INTRON_2;
3609 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3610 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3611 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3612 }
3613 else {
3614 for(k=0;k<7;k++)
3615 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 4,INTRON_2,k);
3616 }
3617 }
3618
3619
3620 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
3621 if( temp > score) {
3622 score = temp;
3623
3624
3625 if( j - 2 <= mergej) {
3626 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3627 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-2;
3628 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INSERT;
3629 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3630 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3631 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3632 }
3633 else {
3634 for(k=0;k<7;k++)
3635 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 2,INSERT,k);
3636 }
3637 }
3638
3639
3640 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
3641 if( temp > score) {
3642 score = temp;
3643
3644
3645 if( j - 1 <= mergej) {
3646 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = i-0;
3647 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,1) = j-1;
3648 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,2) = INSERT;
3649 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,3) = i;
3650 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,4) = j;
3651 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,5) = INSERT;
3652 }
3653 else {
3654 for(k=0;k<7;k++)
3655 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INSERT,k);
3656 }
3657 }
3658 /* Add any movement independant score */
3659 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
3660 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = score;
3661 /* Finished with state INSERT */
3662
3663
3664 /* For state DELETE, pushing when j - offj <= mergej */
3665 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
3666 if( j - 0 <= mergej) {
3667 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,0) = i-1;
3668 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,1) = j-0;
3669 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,2) = MATCH;
3670 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,3) = i;
3671 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,4) = j;
3672 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,5) = DELETE;
3673 }
3674 else {
3675 for(k=0;k<7;k++)
3676 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,MATCH,k);
3677 }
3678
3679
3680 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
3681 if( temp > score) {
3682 score = temp;
3683
3684
3685 if( j - 0 <= mergej) {
3686 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,0) = i-1;
3687 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,1) = j-0;
3688 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,2) = INSERT;
3689 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,3) = i;
3690 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,4) = j;
3691 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,5) = DELETE;
3692 }
3693 else {
3694 for(k=0;k<7;k++)
3695 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,INSERT,k);
3696 }
3697 }
3698
3699
3700 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
3701 if( temp > score) {
3702 score = temp;
3703
3704
3705 if( j - 0 <= mergej) {
3706 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,0) = i-1;
3707 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,1) = j-0;
3708 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,2) = DELETE;
3709 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,3) = i;
3710 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,4) = j;
3711 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,5) = DELETE;
3712 }
3713 else {
3714 for(k=0;k<7;k++)
3715 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,DELETE,k);
3716 }
3717 }
3718 /* Add any movement independant score */
3719 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = score;
3720 /* Finished with state DELETE */
3721
3722
3723 /* For state INTRON_0, pushing when j - offj <= mergej */
3724 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3725 if( j - 8 <= mergej) {
3726 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,0) = i-0;
3727 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,1) = j-8;
3728 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,2) = MATCH;
3729 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,3) = i;
3730 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,4) = j;
3731 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,5) = INTRON_0;
3732 }
3733 else {
3734 for(k=0;k<7;k++)
3735 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 8,MATCH,k);
3736 }
3737
3738
3739 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3740 if( temp > score) {
3741 score = temp;
3742
3743
3744 if( j - 8 <= mergej) {
3745 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,0) = i-0;
3746 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,1) = j-8;
3747 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,2) = INSERT;
3748 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,3) = i;
3749 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,4) = j;
3750 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,5) = INTRON_0;
3751 }
3752 else {
3753 for(k=0;k<7;k++)
3754 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 8,INSERT,k);
3755 }
3756 }
3757
3758
3759 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3760 if( temp > score) {
3761 score = temp;
3762
3763
3764 if( j - 1 <= mergej) {
3765 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,0) = i-0;
3766 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,1) = j-1;
3767 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,2) = INTRON_0;
3768 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,3) = i;
3769 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,4) = j;
3770 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,5) = INTRON_0;
3771 }
3772 else {
3773 for(k=0;k<7;k++)
3774 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_0,k);
3775 }
3776 }
3777 /* Add any movement independant score */
3778 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = score;
3779 /* Finished with state INTRON_0 */
3780
3781
3782 /* For state INTRON_1, pushing when j - offj <= mergej */
3783 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3784 if( j - 9 <= mergej) {
3785 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,0) = i-0;
3786 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,1) = j-9;
3787 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,2) = MATCH;
3788 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,3) = i;
3789 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,4) = j;
3790 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,5) = INTRON_1;
3791 }
3792 else {
3793 for(k=0;k<7;k++)
3794 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 9,MATCH,k);
3795 }
3796
3797
3798 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3799 if( temp > score) {
3800 score = temp;
3801
3802
3803 if( j - 9 <= mergej) {
3804 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,0) = i-0;
3805 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,1) = j-9;
3806 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,2) = INSERT;
3807 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,3) = i;
3808 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,4) = j;
3809 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,5) = INTRON_1;
3810 }
3811 else {
3812 for(k=0;k<7;k++)
3813 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 9,INSERT,k);
3814 }
3815 }
3816
3817
3818 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3819 if( temp > score) {
3820 score = temp;
3821
3822
3823 if( j - 1 <= mergej) {
3824 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,0) = i-0;
3825 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,1) = j-1;
3826 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,2) = INTRON_1;
3827 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,3) = i;
3828 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,4) = j;
3829 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,5) = INTRON_1;
3830 }
3831 else {
3832 for(k=0;k<7;k++)
3833 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_1,k);
3834 }
3835 }
3836 /* Add any movement independant score */
3837 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = score;
3838 /* Finished with state INTRON_1 */
3839
3840
3841 /* For state INTRON_2, pushing when j - offj <= mergej */
3842 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3843 if( j - 10 <= mergej) {
3844 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,0) = i-0;
3845 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,1) = j-10;
3846 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,2) = MATCH;
3847 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,3) = i;
3848 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,4) = j;
3849 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,5) = INTRON_2;
3850 }
3851 else {
3852 for(k=0;k<7;k++)
3853 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 10,MATCH,k);
3854 }
3855
3856
3857 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
3858 if( temp > score) {
3859 score = temp;
3860
3861
3862 if( j - 10 <= mergej) {
3863 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,0) = i-0;
3864 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,1) = j-10;
3865 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,2) = INSERT;
3866 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,3) = i;
3867 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,4) = j;
3868 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,5) = INTRON_2;
3869 }
3870 else {
3871 for(k=0;k<7;k++)
3872 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 10,INSERT,k);
3873 }
3874 }
3875
3876
3877 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
3878 if( temp > score) {
3879 score = temp;
3880
3881
3882 if( j - 1 <= mergej) {
3883 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,0) = i-0;
3884 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,1) = j-1;
3885 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,2) = INTRON_2;
3886 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,3) = i;
3887 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,4) = j;
3888 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,5) = INTRON_2;
3889 }
3890 else {
3891 for(k=0;k<7;k++)
3892 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_2,k);
3893 }
3894 }
3895 /* Add any movement independant score */
3896 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = score;
3897 /* Finished with state INTRON_2 */
3898 }
3899 }
3900 /* Put back j into * stop j so that calling function gets it correct */
3901 if( stopj == NULL)
3902 warn("Bad news... NULL stopj pointer in push dc function. This means that calling function does not know how many cells I have done!");
3903 else
3904 *stopj = j;
3905
3906
3907 return;
3908 }
3909
3910
3911 /* Function: follow_on_dc_GeneStretch6(mat,starti,stopi,startj,stopj,dpenv,perc_done)
3912 *
3913 * Descrip: No Description
3914 *
3915 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
3916 * Arg: starti [UNKN ] Undocumented argument [int]
3917 * Arg: stopi [UNKN ] Undocumented argument [int]
3918 * Arg: startj [UNKN ] Undocumented argument [int]
3919 * Arg: stopj [UNKN ] Undocumented argument [int]
3920 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
3921 * Arg: perc_done [UNKN ] Undocumented argument [int]
3922 *
3923 */
follow_on_dc_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,DPEnvelope * dpenv,int perc_done)3924 void follow_on_dc_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,DPEnvelope * dpenv,int perc_done)
3925 {
3926 int i;
3927 int j;
3928 int k;
3929 int score;
3930 int temp;
3931 int localshadow[7];
3932 long int total;
3933 long int num;
3934
3935
3936 total = (stopi - starti+1) * (stopj - startj+1);
3937 num = 0;
3938
3939
3940 for(j=startj;j<=stopj;j++) { /*for each valid j column*/
3941 for(i=starti;i<=stopi;i++) { /*this is strip*/
3942 num++;
3943 if( dpenv != NULL && is_in_DPEnvelope(dpenv,i,j) == FALSE ) { /*Is not in envelope*/
3944 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
3945 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
3946 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
3947 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
3948 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
3949 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
3950 continue;
3951 } /* end of Is not in envelope */
3952 if( num % 1000 == 0 )
3953 log_full_error(REPORT,0,"[%d%%%% done]After mid-j %5d Cells done %d%%%%",perc_done,startj,(num*100)/total);
3954
3955
3956 /* For state MATCH */
3957 /* setting first movement to score */
3958 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3959 /* shift first shadow numbers */
3960 for(k=0;k<7;k++)
3961 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,MATCH,k);
3962 /* From state INSERT to state MATCH */
3963 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3964 if( temp > score ) {
3965 score = temp;
3966 for(k=0;k<7;k++)
3967 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,INSERT,k);
3968 }
3969 /* From state DELETE to state MATCH */
3970 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
3971 if( temp > score ) {
3972 score = temp;
3973 for(k=0;k<7;k++)
3974 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 3,DELETE,k);
3975 }
3976 /* From state INTRON_0 to state MATCH */
3977 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
3978 if( temp > score ) {
3979 score = temp;
3980 for(k=0;k<7;k++)
3981 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 6,INTRON_0,k);
3982 }
3983 /* From state INTRON_1 to state MATCH */
3984 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
3985 if( temp > score ) {
3986 score = temp;
3987 for(k=0;k<7;k++)
3988 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 5,INTRON_1,k);
3989 }
3990 /* From state INTRON_2 to state MATCH */
3991 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
3992 if( temp > score ) {
3993 score = temp;
3994 for(k=0;k<7;k++)
3995 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 4,INTRON_2,k);
3996 }
3997 /* From state MATCH to state MATCH */
3998 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
3999 if( temp > score ) {
4000 score = temp;
4001 for(k=0;k<7;k++)
4002 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 2,MATCH,k);
4003 }
4004 /* From state MATCH to state MATCH */
4005 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
4006 if( temp > score ) {
4007 score = temp;
4008 for(k=0;k<7;k++)
4009 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 1,MATCH,k);
4010 }
4011 /* From state MATCH to state MATCH */
4012 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
4013 if( temp > score ) {
4014 score = temp;
4015 for(k=0;k<7;k++)
4016 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 4,MATCH,k);
4017 }
4018 /* From state MATCH to state MATCH */
4019 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
4020 if( temp > score ) {
4021 score = temp;
4022 for(k=0;k<7;k++)
4023 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 5,MATCH,k);
4024 }
4025
4026
4027 /* Ok - finished max calculation for MATCH */
4028 /* Add any movement independant score and put away */
4029 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
4030 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = score;
4031 for(k=0;k<7;k++)
4032 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = localshadow[k];
4033 /* Now figure out if any specials need this score */
4034 /* Finished calculating state MATCH */
4035
4036
4037 /* For state INSERT */
4038 /* setting first movement to score */
4039 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4040 /* shift first shadow numbers */
4041 for(k=0;k<7;k++)
4042 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,MATCH,k);
4043 /* From state INSERT to state INSERT */
4044 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4045 if( temp > score ) {
4046 score = temp;
4047 for(k=0;k<7;k++)
4048 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,INSERT,k);
4049 }
4050 /* From state DELETE to state INSERT */
4051 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4052 if( temp > score ) {
4053 score = temp;
4054 for(k=0;k<7;k++)
4055 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 3,DELETE,k);
4056 }
4057 /* From state INTRON_0 to state INSERT */
4058 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
4059 if( temp > score ) {
4060 score = temp;
4061 for(k=0;k<7;k++)
4062 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 6,INTRON_0,k);
4063 }
4064 /* From state INTRON_1 to state INSERT */
4065 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
4066 if( temp > score ) {
4067 score = temp;
4068 for(k=0;k<7;k++)
4069 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 5,INTRON_1,k);
4070 }
4071 /* From state INTRON_2 to state INSERT */
4072 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
4073 if( temp > score ) {
4074 score = temp;
4075 for(k=0;k<7;k++)
4076 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 4,INTRON_2,k);
4077 }
4078 /* From state INSERT to state INSERT */
4079 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
4080 if( temp > score ) {
4081 score = temp;
4082 for(k=0;k<7;k++)
4083 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 2,INSERT,k);
4084 }
4085 /* From state INSERT to state INSERT */
4086 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
4087 if( temp > score ) {
4088 score = temp;
4089 for(k=0;k<7;k++)
4090 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INSERT,k);
4091 }
4092
4093
4094 /* Ok - finished max calculation for INSERT */
4095 /* Add any movement independant score and put away */
4096 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
4097 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = score;
4098 for(k=0;k<7;k++)
4099 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = localshadow[k];
4100 /* Now figure out if any specials need this score */
4101 /* Finished calculating state INSERT */
4102
4103
4104 /* For state DELETE */
4105 /* setting first movement to score */
4106 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
4107 /* shift first shadow numbers */
4108 for(k=0;k<7;k++)
4109 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,MATCH,k);
4110 /* From state INSERT to state DELETE */
4111 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
4112 if( temp > score ) {
4113 score = temp;
4114 for(k=0;k<7;k++)
4115 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,INSERT,k);
4116 }
4117 /* From state DELETE to state DELETE */
4118 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
4119 if( temp > score ) {
4120 score = temp;
4121 for(k=0;k<7;k++)
4122 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 1,j - 0,DELETE,k);
4123 }
4124
4125
4126 /* Ok - finished max calculation for DELETE */
4127 /* Add any movement independant score and put away */
4128 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = score;
4129 for(k=0;k<7;k++)
4130 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = localshadow[k];
4131 /* Now figure out if any specials need this score */
4132 /* Finished calculating state DELETE */
4133
4134
4135 /* For state INTRON_0 */
4136 /* setting first movement to score */
4137 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4138 /* shift first shadow numbers */
4139 for(k=0;k<7;k++)
4140 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 8,MATCH,k);
4141 /* From state INSERT to state INTRON_0 */
4142 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4143 if( temp > score ) {
4144 score = temp;
4145 for(k=0;k<7;k++)
4146 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 8,INSERT,k);
4147 }
4148 /* From state INTRON_0 to state INTRON_0 */
4149 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4150 if( temp > score ) {
4151 score = temp;
4152 for(k=0;k<7;k++)
4153 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_0,k);
4154 }
4155
4156
4157 /* Ok - finished max calculation for INTRON_0 */
4158 /* Add any movement independant score and put away */
4159 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = score;
4160 for(k=0;k<7;k++)
4161 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = localshadow[k];
4162 /* Now figure out if any specials need this score */
4163 /* Finished calculating state INTRON_0 */
4164
4165
4166 /* For state INTRON_1 */
4167 /* setting first movement to score */
4168 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4169 /* shift first shadow numbers */
4170 for(k=0;k<7;k++)
4171 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 9,MATCH,k);
4172 /* From state INSERT to state INTRON_1 */
4173 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4174 if( temp > score ) {
4175 score = temp;
4176 for(k=0;k<7;k++)
4177 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 9,INSERT,k);
4178 }
4179 /* From state INTRON_1 to state INTRON_1 */
4180 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4181 if( temp > score ) {
4182 score = temp;
4183 for(k=0;k<7;k++)
4184 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_1,k);
4185 }
4186
4187
4188 /* Ok - finished max calculation for INTRON_1 */
4189 /* Add any movement independant score and put away */
4190 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = score;
4191 for(k=0;k<7;k++)
4192 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = localshadow[k];
4193 /* Now figure out if any specials need this score */
4194 /* Finished calculating state INTRON_1 */
4195
4196
4197 /* For state INTRON_2 */
4198 /* setting first movement to score */
4199 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4200 /* shift first shadow numbers */
4201 for(k=0;k<7;k++)
4202 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 10,MATCH,k);
4203 /* From state INSERT to state INTRON_2 */
4204 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4205 if( temp > score ) {
4206 score = temp;
4207 for(k=0;k<7;k++)
4208 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 10,INSERT,k);
4209 }
4210 /* From state INTRON_2 to state INTRON_2 */
4211 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4212 if( temp > score ) {
4213 score = temp;
4214 for(k=0;k<7;k++)
4215 localshadow[k] = GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_2,k);
4216 }
4217
4218
4219 /* Ok - finished max calculation for INTRON_2 */
4220 /* Add any movement independant score and put away */
4221 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = score;
4222 for(k=0;k<7;k++)
4223 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = localshadow[k];
4224 /* Now figure out if any specials need this score */
4225 /* Finished calculating state INTRON_2 */
4226 } /* end of this is strip */
4227 } /* end of for each valid j column */
4228
4229
4230 /* Function: run_up_dc_GeneStretch6(mat,starti,stopi,startj,stopj,dpenv,perc_done)
4231 *
4232 * Descrip: No Description
4233 *
4234 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
4235 * Arg: starti [UNKN ] Undocumented argument [int]
4236 * Arg: stopi [UNKN ] Undocumented argument [int]
4237 * Arg: startj [UNKN ] Undocumented argument [int]
4238 * Arg: stopj [UNKN ] Undocumented argument [int]
4239 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
4240 * Arg: perc_done [UNKN ] Undocumented argument [int]
4241 *
4242 */
4243 }
run_up_dc_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,DPEnvelope * dpenv,int perc_done)4244 void run_up_dc_GeneStretch6(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,DPEnvelope * dpenv,int perc_done)
4245 {
4246 register int i;
4247 register int j;
4248 register int score;
4249 register int temp;
4250 long int total;
4251 long int num;
4252
4253
4254 total = (stopi - starti+1) * (stopj - startj+1);
4255 if( total <= 0 )
4256 total = 1;
4257 num = 0;
4258
4259
4260 for(j=startj;j<=stopj;j++) { /*for each valid j column*/
4261 for(i=starti;i<=stopi;i++) { /*this is strip*/
4262 if( j == startj && i == starti)
4263 continue;
4264 num++;
4265 if( dpenv != NULL && is_in_DPEnvelope(dpenv,i,j) == FALSE ) { /*Is not in envelope*/
4266 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
4267 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
4268 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
4269 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
4270 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
4271 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
4272 continue;
4273 } /* end of Is not in envelope */
4274 if( num % 1000 == 0 )
4275 log_full_error(REPORT,0,"[%d%%%% done]Before mid-j %5d Cells done %d%%%%",perc_done,stopj,(num*100)/total);
4276
4277
4278 /* For state MATCH */
4279 /* setting first movement to score */
4280 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
4281 /* From state INSERT to state MATCH */
4282 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
4283 if( temp > score ) {
4284 score = temp;
4285 }
4286 /* From state DELETE to state MATCH */
4287 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
4288 if( temp > score ) {
4289 score = temp;
4290 }
4291 /* From state INTRON_0 to state MATCH */
4292 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
4293 if( temp > score ) {
4294 score = temp;
4295 }
4296 /* From state INTRON_1 to state MATCH */
4297 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
4298 if( temp > score ) {
4299 score = temp;
4300 }
4301 /* From state INTRON_2 to state MATCH */
4302 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
4303 if( temp > score ) {
4304 score = temp;
4305 }
4306 /* From state MATCH to state MATCH */
4307 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
4308 if( temp > score ) {
4309 score = temp;
4310 }
4311 /* From state MATCH to state MATCH */
4312 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
4313 if( temp > score ) {
4314 score = temp;
4315 }
4316 /* From state MATCH to state MATCH */
4317 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
4318 if( temp > score ) {
4319 score = temp;
4320 }
4321 /* From state MATCH to state MATCH */
4322 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
4323 if( temp > score ) {
4324 score = temp;
4325 }
4326
4327
4328 /* Ok - finished max calculation for MATCH */
4329 /* Add any movement independant score and put away */
4330 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
4331 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = score;
4332 /* Finished calculating state MATCH */
4333
4334
4335 /* For state INSERT */
4336 /* setting first movement to score */
4337 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4338 /* From state INSERT to state INSERT */
4339 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4340 if( temp > score ) {
4341 score = temp;
4342 }
4343 /* From state DELETE to state INSERT */
4344 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
4345 if( temp > score ) {
4346 score = temp;
4347 }
4348 /* From state INTRON_0 to state INSERT */
4349 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
4350 if( temp > score ) {
4351 score = temp;
4352 }
4353 /* From state INTRON_1 to state INSERT */
4354 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
4355 if( temp > score ) {
4356 score = temp;
4357 }
4358 /* From state INTRON_2 to state INSERT */
4359 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
4360 if( temp > score ) {
4361 score = temp;
4362 }
4363 /* From state INSERT to state INSERT */
4364 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
4365 if( temp > score ) {
4366 score = temp;
4367 }
4368 /* From state INSERT to state INSERT */
4369 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
4370 if( temp > score ) {
4371 score = temp;
4372 }
4373
4374
4375 /* Ok - finished max calculation for INSERT */
4376 /* Add any movement independant score and put away */
4377 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
4378 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = score;
4379 /* Finished calculating state INSERT */
4380
4381
4382 /* For state DELETE */
4383 /* setting first movement to score */
4384 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
4385 /* From state INSERT to state DELETE */
4386 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
4387 if( temp > score ) {
4388 score = temp;
4389 }
4390 /* From state DELETE to state DELETE */
4391 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
4392 if( temp > score ) {
4393 score = temp;
4394 }
4395
4396
4397 /* Ok - finished max calculation for DELETE */
4398 /* Add any movement independant score and put away */
4399 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = score;
4400 /* Finished calculating state DELETE */
4401
4402
4403 /* For state INTRON_0 */
4404 /* setting first movement to score */
4405 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4406 /* From state INSERT to state INTRON_0 */
4407 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4408 if( temp > score ) {
4409 score = temp;
4410 }
4411 /* From state INTRON_0 to state INTRON_0 */
4412 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4413 if( temp > score ) {
4414 score = temp;
4415 }
4416
4417
4418 /* Ok - finished max calculation for INTRON_0 */
4419 /* Add any movement independant score and put away */
4420 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = score;
4421 /* Finished calculating state INTRON_0 */
4422
4423
4424 /* For state INTRON_1 */
4425 /* setting first movement to score */
4426 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4427 /* From state INSERT to state INTRON_1 */
4428 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4429 if( temp > score ) {
4430 score = temp;
4431 }
4432 /* From state INTRON_1 to state INTRON_1 */
4433 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4434 if( temp > score ) {
4435 score = temp;
4436 }
4437
4438
4439 /* Ok - finished max calculation for INTRON_1 */
4440 /* Add any movement independant score and put away */
4441 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = score;
4442 /* Finished calculating state INTRON_1 */
4443
4444
4445 /* For state INTRON_2 */
4446 /* setting first movement to score */
4447 score = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4448 /* From state INSERT to state INTRON_2 */
4449 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
4450 if( temp > score ) {
4451 score = temp;
4452 }
4453 /* From state INTRON_2 to state INTRON_2 */
4454 temp = GeneStretch6_DC_SHADOW_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
4455 if( temp > score ) {
4456 score = temp;
4457 }
4458
4459
4460 /* Ok - finished max calculation for INTRON_2 */
4461 /* Add any movement independant score and put away */
4462 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = score;
4463 /* Finished calculating state INTRON_2 */
4464 } /* end of this is strip */
4465 } /* end of for each valid j column */
4466
4467
4468 /* Function: init_dc_GeneStretch6(mat)
4469 *
4470 * Descrip: No Description
4471 *
4472 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
4473 *
4474 */
4475 }
init_dc_GeneStretch6(GeneStretch6 * mat)4476 void init_dc_GeneStretch6(GeneStretch6 * mat)
4477 {
4478 register int i;
4479 register int j;
4480 register int k;
4481
4482
4483 for(j=0;j<12;j++) {
4484 for(i=(-1);i<mat->query->len;i++) {
4485 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
4486 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
4487 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
4488 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
4489 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
4490 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
4491 for(k=0;k<7;k++) {
4492 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = (-1);
4493 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = (-1);
4494 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = (-1);
4495 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = (-1);
4496 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = (-1);
4497 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = (-1);
4498 }
4499 }
4500 }
4501
4502
4503 return;
4504 }
4505
4506
4507 /* Function: start_end_find_end_GeneStretch6(mat,endj)
4508 *
4509 * Descrip: First function used to find end of the best path in the special state !end
4510 *
4511 *
4512 * Arg: mat [UNKN ] Matrix in small mode [GeneStretch6 *]
4513 * Arg: endj [WRITE] position of end in j (meaningless in i) [int *]
4514 *
4515 * Return [UNKN ] Undocumented return value [int]
4516 *
4517 */
start_end_find_end_GeneStretch6(GeneStretch6 * mat,int * endj)4518 int start_end_find_end_GeneStretch6(GeneStretch6 * mat,int * endj)
4519 {
4520 register int j;
4521 register int max;
4522 register int maxj;
4523
4524
4525 max = GeneStretch6_DC_SHADOW_SPECIAL(mat,0,mat->target->seq->len-1,END);
4526 maxj = mat->target->seq->len-1;
4527 for(j= mat->target->seq->len-2 ;j >= 0 ;j--) {
4528 if( GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,END) > max ) {
4529 max = GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,END);
4530 maxj = j;
4531 }
4532 }
4533
4534
4535 if( endj != NULL)
4536 *endj = maxj;
4537
4538
4539 return max;
4540 }
4541
4542
4543 /* Function: dc_optimised_start_end_calc_GeneStretch6(*mat,dpenv)
4544 *
4545 * Descrip: Calculates special strip, leaving start/end/score points in shadow matrix
4546 * Works off specially laid out memory from steve searle
4547 *
4548 *
4549 * Arg: *mat [UNKN ] Undocumented argument [GeneStretch6]
4550 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
4551 *
4552 * Return [UNKN ] Undocumented return value [boolean]
4553 *
4554 */
dc_optimised_start_end_calc_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)4555 boolean dc_optimised_start_end_calc_GeneStretch6(GeneStretch6 *mat,DPEnvelope * dpenv)
4556 {
4557 int i;
4558 int j;
4559 int k;
4560 int score;
4561 int temp;
4562 int leni;
4563 int lenj;
4564 int localshadow[7];
4565 long int total;
4566 long int num=0;
4567 int * score_pointers;
4568 int * shadow_pointers;
4569 int * localsp;
4570 leni = mat->query->len;
4571 lenj = mat->target->seq->len;
4572 total = leni * lenj;
4573
4574
4575 score_pointers = (int *) calloc (10 * (leni + 1) * 6,sizeof(int));
4576 shadow_pointers = (int *) calloc (10 * (leni + 1) * 6 * 8,sizeof(int));
4577
4578
4579 for(j=0;j<lenj;j++) { /*for each j strip*/
4580 for(i=0;i<leni;i++) { /*for each i position in strip*/
4581 num++;
4582 if( dpenv != NULL && is_in_DPEnvelope(dpenv,i,j) == FALSE ) { /*Is not in envelope*/
4583 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
4584 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
4585 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
4586 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
4587 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
4588 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
4589 continue;
4590 } /* end of Is not in envelope */
4591 if( num%1000 == 0)
4592 log_full_error(REPORT,0,"%6d Cells done [%2d%%%%]",num,num*100/total);
4593
4594
4595
4596
4597 /* For state MATCH */
4598 /* setting first movement to score */
4599 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
4600 /* assign local shadown pointer */
4601 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 3,MATCH,0));
4602 /* From state INSERT to state MATCH */
4603 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4604 if( temp > score ) {
4605 score = temp;
4606 /* assign local shadown pointer */
4607 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 3,INSERT,0));
4608 }
4609 /* From state DELETE to state MATCH */
4610 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4611 if( temp > score ) {
4612 score = temp;
4613 /* assign local shadown pointer */
4614 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 3,DELETE,0));
4615 }
4616 /* From state START to state MATCH */
4617 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i-1,j-3,START) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
4618 if( temp > score ) {
4619 score = temp;
4620 /* This state [START] is a special for MATCH... push top shadow pointers here */
4621 localshadow[0]= i;
4622 localshadow[1]= j;
4623 localshadow[2]= MATCH;
4624 localshadow[3]= (-1);
4625 localshadow[4]= (-1);
4626 localshadow[5]= (-1);
4627 localshadow[6]= score;
4628 localsp = localshadow;
4629 }
4630 /* From state BEFORE_MATCH_CODING to state MATCH */
4631 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
4632 if( temp > score ) {
4633 score = temp;
4634 /* This state [BEFORE_MATCH_CODING] is a special for MATCH... push top shadow pointers here */
4635 localshadow[0]= i;
4636 localshadow[1]= j;
4637 localshadow[2]= MATCH;
4638 localshadow[3]= (-1);
4639 localshadow[4]= (-1);
4640 localshadow[5]= (-1);
4641 localshadow[6]= score;
4642 localsp = localshadow;
4643 }
4644 /* From state INTRON_0 to state MATCH */
4645 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4646 if( temp > score ) {
4647 score = temp;
4648 /* assign local shadown pointer */
4649 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 6,INTRON_0,0));
4650 }
4651 /* From state INTRON_1 to state MATCH */
4652 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4653 if( temp > score ) {
4654 score = temp;
4655 /* assign local shadown pointer */
4656 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 5,INTRON_1,0));
4657 }
4658 /* From state INTRON_2 to state MATCH */
4659 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4660 if( temp > score ) {
4661 score = temp;
4662 /* assign local shadown pointer */
4663 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 4,INTRON_2,0));
4664 }
4665 /* From state MATCH to state MATCH */
4666 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4667 if( temp > score ) {
4668 score = temp;
4669 /* assign local shadown pointer */
4670 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 2,MATCH,0));
4671 }
4672 /* From state MATCH to state MATCH */
4673 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4674 if( temp > score ) {
4675 score = temp;
4676 /* assign local shadown pointer */
4677 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 1,MATCH,0));
4678 }
4679 /* From state MATCH to state MATCH */
4680 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4681 if( temp > score ) {
4682 score = temp;
4683 /* assign local shadown pointer */
4684 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 4,MATCH,0));
4685 }
4686 /* From state MATCH to state MATCH */
4687 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4688 if( temp > score ) {
4689 score = temp;
4690 /* assign local shadown pointer */
4691 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 5,MATCH,0));
4692 }
4693
4694
4695 /* Ok - finished max calculation for MATCH */
4696 /* Add any movement independant score and put away */
4697 /* Actually, already done inside scores */
4698 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,MATCH) = score;
4699 for(k=0;k<7;k++)
4700 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,MATCH,k) = localsp[k];
4701 /* Now figure out if any specials need this score */
4702
4703
4704 /* state MATCH is a source for special END */
4705 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
4706 if( temp > GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) ) {
4707 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) = temp;
4708 /* Have to push only bottem half of system here */
4709 for(k=0;k<3;k++)
4710 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,k) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,MATCH,k);
4711 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,6) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,MATCH,6);
4712 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,3) = i;
4713 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,4) = j;
4714 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,5) = MATCH;
4715 }
4716
4717
4718
4719
4720 /* state MATCH is a source for special AFTER_MATCH_CODING */
4721 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
4722 if( temp > GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,AFTER_MATCH_CODING) ) {
4723 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = temp;
4724 /* Have to push only bottem half of system here */
4725 for(k=0;k<3;k++)
4726 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,k) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,MATCH,k);
4727 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,6) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,MATCH,6);
4728 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,3) = i;
4729 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,4) = j;
4730 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,5) = MATCH;
4731 }
4732
4733
4734
4735
4736 /* Finished calculating state MATCH */
4737
4738
4739 /* For state INSERT */
4740 /* setting first movement to score */
4741 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
4742 /* assign local shadown pointer */
4743 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 3,MATCH,0));
4744 /* From state INSERT to state INSERT */
4745 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4746 if( temp > score ) {
4747 score = temp;
4748 /* assign local shadown pointer */
4749 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 3,INSERT,0));
4750 }
4751 /* From state DELETE to state INSERT */
4752 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4753 if( temp > score ) {
4754 score = temp;
4755 /* assign local shadown pointer */
4756 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 3,DELETE,0));
4757 }
4758 /* From state START to state INSERT */
4759 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i-0,j-3,START) + (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]) + (CSEQ_GENOMIC_CDSPOT(mat->target,j));
4760 if( temp > score ) {
4761 score = temp;
4762 /* This state [START] is a special for INSERT... push top shadow pointers here */
4763 localshadow[0]= i;
4764 localshadow[1]= j;
4765 localshadow[2]= INSERT;
4766 localshadow[3]= (-1);
4767 localshadow[4]= (-1);
4768 localshadow[5]= (-1);
4769 localshadow[6]= score;
4770 localsp = localshadow;
4771 }
4772 /* From state INTRON_0 to state INSERT */
4773 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4774 if( temp > score ) {
4775 score = temp;
4776 /* assign local shadown pointer */
4777 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 6,INTRON_0,0));
4778 }
4779 /* From state INTRON_1 to state INSERT */
4780 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4781 if( temp > score ) {
4782 score = temp;
4783 /* assign local shadown pointer */
4784 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 5,INTRON_1,0));
4785 }
4786 /* From state INTRON_2 to state INSERT */
4787 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1))) +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4788 if( temp > score ) {
4789 score = temp;
4790 /* assign local shadown pointer */
4791 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 4,INTRON_2,0));
4792 }
4793 /* From state INSERT to state INSERT */
4794 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4795 if( temp > score ) {
4796 score = temp;
4797 /* assign local shadown pointer */
4798 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 2,INSERT,0));
4799 }
4800 /* From state INSERT to state INSERT */
4801 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE] +(CSEQ_GENOMIC_CDSPOT(mat->target,j));
4802 if( temp > score ) {
4803 score = temp;
4804 /* assign local shadown pointer */
4805 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INSERT,0));
4806 }
4807
4808
4809 /* Ok - finished max calculation for INSERT */
4810 /* Add any movement independant score and put away */
4811 /* Actually, already done inside scores */
4812 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INSERT) = score;
4813 for(k=0;k<7;k++)
4814 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INSERT,k) = localsp[k];
4815 /* Now figure out if any specials need this score */
4816
4817
4818 /* state INSERT is a source for special END */
4819 temp = score + (mat->query->seg[i]->transition[GW_INSERT2END]) + (0) ;
4820 if( temp > GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) ) {
4821 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) = temp;
4822 /* Have to push only bottem half of system here */
4823 for(k=0;k<3;k++)
4824 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,k) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INSERT,k);
4825 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,6) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INSERT,6);
4826 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,3) = i;
4827 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,4) = j;
4828 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,5) = INSERT;
4829 }
4830
4831
4832
4833
4834 /* Finished calculating state INSERT */
4835
4836
4837 /* For state DELETE */
4838 /* setting first movement to score */
4839 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE] + (0);
4840 /* assign local shadown pointer */
4841 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 0,MATCH,0));
4842 /* From state INSERT to state DELETE */
4843 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE] +(0);
4844 if( temp > score ) {
4845 score = temp;
4846 /* assign local shadown pointer */
4847 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 0,INSERT,0));
4848 }
4849 /* From state DELETE to state DELETE */
4850 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE] +(0);
4851 if( temp > score ) {
4852 score = temp;
4853 /* assign local shadown pointer */
4854 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 1,j - 0,DELETE,0));
4855 }
4856 /* From state START to state DELETE */
4857 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i-1,j-0,START) + mat->query->seg[i]->transition[GW_START2DELETE] + (0);
4858 if( temp > score ) {
4859 score = temp;
4860 /* This state [START] is a special for DELETE... push top shadow pointers here */
4861 localshadow[0]= i;
4862 localshadow[1]= j;
4863 localshadow[2]= DELETE;
4864 localshadow[3]= (-1);
4865 localshadow[4]= (-1);
4866 localshadow[5]= (-1);
4867 localshadow[6]= score;
4868 localsp = localshadow;
4869 }
4870
4871
4872 /* Ok - finished max calculation for DELETE */
4873 /* Add any movement independant score and put away */
4874 /* Actually, already done inside scores */
4875 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,DELETE) = score;
4876 for(k=0;k<7;k++)
4877 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,DELETE,k) = localsp[k];
4878 /* Now figure out if any specials need this score */
4879
4880
4881 /* state DELETE is a source for special END */
4882 temp = score + (mat->query->seg[i]->transition[GW_DELETE2END]) + (0) ;
4883 if( temp > GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) ) {
4884 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,i,j,END) = temp;
4885 /* Have to push only bottem half of system here */
4886 for(k=0;k<3;k++)
4887 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,k) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,DELETE,k);
4888 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,6) = GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,DELETE,6);
4889 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,3) = i;
4890 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,4) = j;
4891 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,5) = DELETE;
4892 }
4893
4894
4895
4896
4897 /* Finished calculating state DELETE */
4898
4899
4900 /* For state INTRON_0 */
4901 /* setting first movement to score */
4902 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
4903 /* assign local shadown pointer */
4904 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 8,MATCH,0));
4905 /* From state INSERT to state INTRON_0 */
4906 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) +(0);
4907 if( temp > score ) {
4908 score = temp;
4909 /* assign local shadown pointer */
4910 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 8,INSERT,0));
4911 }
4912 /* From state INTRON_0 to state INTRON_0 */
4913 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) +(0);
4914 if( temp > score ) {
4915 score = temp;
4916 /* assign local shadown pointer */
4917 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_0,0));
4918 }
4919
4920
4921 /* Ok - finished max calculation for INTRON_0 */
4922 /* Add any movement independant score and put away */
4923 /* Actually, already done inside scores */
4924 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_0) = score;
4925 for(k=0;k<7;k++)
4926 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,k) = localsp[k];
4927 /* Now figure out if any specials need this score */
4928
4929
4930 /* Finished calculating state INTRON_0 */
4931
4932
4933 /* For state INTRON_1 */
4934 /* setting first movement to score */
4935 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
4936 /* assign local shadown pointer */
4937 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 9,MATCH,0));
4938 /* From state INSERT to state INTRON_1 */
4939 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) +(0);
4940 if( temp > score ) {
4941 score = temp;
4942 /* assign local shadown pointer */
4943 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 9,INSERT,0));
4944 }
4945 /* From state INTRON_1 to state INTRON_1 */
4946 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) +(0);
4947 if( temp > score ) {
4948 score = temp;
4949 /* assign local shadown pointer */
4950 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_1,0));
4951 }
4952
4953
4954 /* Ok - finished max calculation for INTRON_1 */
4955 /* Add any movement independant score and put away */
4956 /* Actually, already done inside scores */
4957 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_1) = score;
4958 for(k=0;k<7;k++)
4959 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,k) = localsp[k];
4960 /* Now figure out if any specials need this score */
4961
4962
4963 /* Finished calculating state INTRON_1 */
4964
4965
4966 /* For state INTRON_2 */
4967 /* setting first movement to score */
4968 score = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) + (0);
4969 /* assign local shadown pointer */
4970 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 10,MATCH,0));
4971 /* From state INSERT to state INTRON_2 */
4972 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7))) +(0);
4973 if( temp > score ) {
4974 score = temp;
4975 /* assign local shadown pointer */
4976 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 10,INSERT,0));
4977 }
4978 /* From state INTRON_2 to state INTRON_2 */
4979 temp = GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]) +(0);
4980 if( temp > score ) {
4981 score = temp;
4982 /* assign local shadown pointer */
4983 localsp = &(GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i - 0,j - 1,INTRON_2,0));
4984 }
4985
4986
4987 /* Ok - finished max calculation for INTRON_2 */
4988 /* Add any movement independant score and put away */
4989 /* Actually, already done inside scores */
4990 GeneStretch6_DC_OPT_SHADOW_MATRIX(mat,i,j,INTRON_2) = score;
4991 for(k=0;k<7;k++)
4992 GeneStretch6_DC_OPT_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,k) = localsp[k];
4993 /* Now figure out if any specials need this score */
4994
4995
4996 /* Finished calculating state INTRON_2 */
4997
4998
4999 } /* end of for each i position in strip */
5000
5001
5002 /* Special state START has no special to special movements */
5003
5004
5005 /* Special state END has special to speical */
5006 /* Set score to current score (remember, state probably updated during main loop */
5007 score = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,END);
5008
5009
5010 /* Source MATCH for state END is not special... already calculated */
5011 /* Source INSERT for state END is not special... already calculated */
5012 /* Source DELETE for state END is not special... already calculated */
5013 /* Source AFTER_MATCH_CODING is a special source for END */
5014 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
5015 if( temp > score ) {
5016 score = temp;
5017 /* Also got to propagate shadows */
5018 for(k=0;k<7;k++)
5019 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,END,k) = GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i - 0,j - 3,AFTER_MATCH_CODING,k);
5020 }
5021
5022
5023 /* Put back score... (now updated!) */
5024 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,END) = score;
5025 /* Finished updating state END */
5026
5027
5028
5029
5030 /* Special state BEFORE_MATCH_CODING has special to speical */
5031 /* Set score to current score (remember, state probably updated during main loop */
5032 score = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,BEFORE_MATCH_CODING);
5033
5034
5035 /* Source START is a special source for BEFORE_MATCH_CODING */
5036 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j - 3,START) + (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
5037 if( temp > score ) {
5038 score = temp;
5039 /* Also got to propagate shadows */
5040 for(k=0;k<7;k++)
5041 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,BEFORE_MATCH_CODING,k) = GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i - 0,j - 3,START,k);
5042 }
5043
5044
5045 /* Source BEFORE_MATCH_CODING is a special source for BEFORE_MATCH_CODING */
5046 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j - 3,BEFORE_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
5047 if( temp > score ) {
5048 score = temp;
5049 /* Also got to propagate shadows */
5050 for(k=0;k<7;k++)
5051 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,BEFORE_MATCH_CODING,k) = GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i - 0,j - 3,BEFORE_MATCH_CODING,k);
5052 }
5053
5054
5055 /* Put back score... (now updated!) */
5056 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = score;
5057 /* Finished updating state BEFORE_MATCH_CODING */
5058
5059
5060
5061
5062 /* Special state AFTER_MATCH_CODING has special to speical */
5063 /* Set score to current score (remember, state probably updated during main loop */
5064 score = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,AFTER_MATCH_CODING);
5065
5066
5067 /* Source MATCH for state AFTER_MATCH_CODING is not special... already calculated */
5068 /* Source AFTER_MATCH_CODING is a special source for AFTER_MATCH_CODING */
5069 temp = GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
5070 if( temp > score ) {
5071 score = temp;
5072 /* Also got to propagate shadows */
5073 for(k=0;k<7;k++)
5074 GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i,j,AFTER_MATCH_CODING,k) = GeneStretch6_DC_OPT_SHADOW_SPECIAL_SP(mat,i - 0,j - 3,AFTER_MATCH_CODING,k);
5075 }
5076
5077
5078 /* Put back score... (now updated!) */
5079 GeneStretch6_DC_OPT_SHADOW_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = score;
5080 /* Finished updating state AFTER_MATCH_CODING */
5081
5082
5083 } /* end of for each j strip */
5084 free(score_pointers);
5085 free(shadow_pointers);
5086 return TRUE;
5087 }
5088
5089
5090 /* Function: init_start_end_linear_GeneStretch6(mat)
5091 *
5092 * Descrip: No Description
5093 *
5094 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5095 *
5096 */
init_start_end_linear_GeneStretch6(GeneStretch6 * mat)5097 void init_start_end_linear_GeneStretch6(GeneStretch6 * mat)
5098 {
5099 register int i;
5100 register int j;
5101 for(j=0;j<12;j++) {
5102 for(i=(-1);i<mat->query->len;i++) {
5103 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,MATCH) = NEGI;
5104 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,MATCH,0) = (-1);
5105 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INSERT) = NEGI;
5106 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INSERT,0) = (-1);
5107 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,DELETE) = NEGI;
5108 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,DELETE,0) = (-1);
5109 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_0) = NEGI;
5110 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_0,0) = (-1);
5111 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_1) = NEGI;
5112 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_1,0) = (-1);
5113 GeneStretch6_DC_SHADOW_MATRIX(mat,i,j,INTRON_2) = NEGI;
5114 GeneStretch6_DC_SHADOW_MATRIX_SP(mat,i,j,INTRON_2,0) = (-1);
5115 }
5116 }
5117
5118
5119 for(j=(-10);j<mat->target->seq->len;j++) {
5120 GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,START) = 0;
5121 GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,j,START,0) = j;
5122 GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,END) = NEGI;
5123 GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,j,END,0) = (-1);
5124 GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = NEGI;
5125 GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,j,BEFORE_MATCH_CODING,0) = (-1);
5126 GeneStretch6_DC_SHADOW_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = NEGI;
5127 GeneStretch6_DC_SHADOW_SPECIAL_SP(mat,0,j,AFTER_MATCH_CODING,0) = (-1);
5128 }
5129
5130
5131 return;
5132 }
5133
5134
5135 /* Function: convert_PackAln_to_AlnBlock_GeneStretch6(pal)
5136 *
5137 * Descrip: Converts a path alignment to a label alignment
5138 * The label alignment is probably much more useful than the path
5139 *
5140 *
5141 * Arg: pal [UNKN ] Undocumented argument [PackAln *]
5142 *
5143 * Return [UNKN ] Undocumented return value [AlnBlock *]
5144 *
5145 */
convert_PackAln_to_AlnBlock_GeneStretch6(PackAln * pal)5146 AlnBlock * convert_PackAln_to_AlnBlock_GeneStretch6(PackAln * pal)
5147 {
5148 AlnConvertSet * acs;
5149 AlnBlock * alb;
5150
5151
5152 acs = AlnConvertSet_GeneStretch6();
5153 alb = AlnBlock_from_PackAln(acs,pal);
5154 free_AlnConvertSet(acs);
5155 return alb;
5156 }
5157
5158
5159 static char * query_label[] = { "MATCH_STATE","INSERT_STATE","DELETE_STATE","INTRON_STATE","END","BEFORE_MATCH" };
5160 /* Function: AlnConvertSet_GeneStretch6(void)
5161 *
5162 * Descrip: No Description
5163 *
5164 *
5165 * Return [UNKN ] Undocumented return value [AlnConvertSet *]
5166 *
5167 */
5168 static char * target_label[] = { "CODON","3SS_PHASE_0","3SS_PHASE_1","3SS_PHASE_2","SEQUENCE_DELETION","SEQUENCE_INSERTION","INSERT","5SS_PHASE_0","CENTRAL_INTRON","5SS_PHASE_1","5SS_PHASE_2","END" };
AlnConvertSet_GeneStretch6(void)5169 AlnConvertSet * AlnConvertSet_GeneStretch6(void)
5170 {
5171 AlnConvertUnit * acu;
5172 AlnConvertSet * out;
5173
5174
5175 out = AlnConvertSet_alloc_std();
5176
5177
5178 acu = AlnConvertUnit_alloc();
5179 add_AlnConvertSet(out,acu);
5180 acu->state1 = MATCH;
5181 acu->state2 = MATCH;
5182 acu->offi = 1;
5183 acu->offj = 3;
5184 acu->label1 = query_label[0];
5185 acu->label2 = target_label[0];
5186 acu = AlnConvertUnit_alloc();
5187 add_AlnConvertSet(out,acu);
5188 acu->state1 = INSERT;
5189 acu->state2 = MATCH;
5190 acu->offi = 1;
5191 acu->offj = 3;
5192 acu->label1 = query_label[0];
5193 acu->label2 = target_label[0];
5194 acu = AlnConvertUnit_alloc();
5195 add_AlnConvertSet(out,acu);
5196 acu->state1 = DELETE;
5197 acu->state2 = MATCH;
5198 acu->offi = 1;
5199 acu->offj = 3;
5200 acu->label1 = query_label[0];
5201 acu->label2 = target_label[0];
5202 acu = AlnConvertUnit_alloc();
5203 add_AlnConvertSet(out,acu);
5204 acu->state1 = START + 6;
5205 acu->is_from_special = TRUE;
5206 acu->state2 = MATCH;
5207 acu->offi = (-1);
5208 acu->offj = 3;
5209 acu->label1 = query_label[0];
5210 acu->label2 = target_label[0];
5211 acu = AlnConvertUnit_alloc();
5212 add_AlnConvertSet(out,acu);
5213 acu->state1 = BEFORE_MATCH_CODING + 6;
5214 acu->is_from_special = TRUE;
5215 acu->state2 = MATCH;
5216 acu->offi = (-1);
5217 acu->offj = 3;
5218 acu->label1 = query_label[0];
5219 acu->label2 = target_label[0];
5220 acu = AlnConvertUnit_alloc();
5221 add_AlnConvertSet(out,acu);
5222 acu->state1 = INTRON_0;
5223 acu->state2 = MATCH;
5224 acu->offi = 1;
5225 acu->offj = 6;
5226 acu->label1 = query_label[0];
5227 acu->label2 = target_label[1];
5228 acu = AlnConvertUnit_alloc();
5229 add_AlnConvertSet(out,acu);
5230 acu->state1 = INTRON_1;
5231 acu->state2 = MATCH;
5232 acu->offi = 1;
5233 acu->offj = 5;
5234 acu->label1 = query_label[0];
5235 acu->label2 = target_label[2];
5236 acu = AlnConvertUnit_alloc();
5237 add_AlnConvertSet(out,acu);
5238 acu->state1 = INTRON_2;
5239 acu->state2 = MATCH;
5240 acu->offi = 1;
5241 acu->offj = 4;
5242 acu->label1 = query_label[0];
5243 acu->label2 = target_label[3];
5244 acu = AlnConvertUnit_alloc();
5245 add_AlnConvertSet(out,acu);
5246 acu->state1 = MATCH;
5247 acu->state2 = MATCH;
5248 acu->offi = 1;
5249 acu->offj = 2;
5250 acu->label1 = query_label[0];
5251 acu->label2 = target_label[4];
5252 acu = AlnConvertUnit_alloc();
5253 add_AlnConvertSet(out,acu);
5254 acu->state1 = MATCH;
5255 acu->state2 = MATCH;
5256 acu->offi = 1;
5257 acu->offj = 1;
5258 acu->label1 = query_label[0];
5259 acu->label2 = target_label[4];
5260 acu = AlnConvertUnit_alloc();
5261 add_AlnConvertSet(out,acu);
5262 acu->state1 = MATCH;
5263 acu->state2 = MATCH;
5264 acu->offi = 1;
5265 acu->offj = 4;
5266 acu->label1 = query_label[0];
5267 acu->label2 = target_label[5];
5268 acu = AlnConvertUnit_alloc();
5269 add_AlnConvertSet(out,acu);
5270 acu->state1 = MATCH;
5271 acu->state2 = MATCH;
5272 acu->offi = 1;
5273 acu->offj = 5;
5274 acu->label1 = query_label[0];
5275 acu->label2 = target_label[5];
5276 acu = AlnConvertUnit_alloc();
5277 add_AlnConvertSet(out,acu);
5278 acu->state1 = MATCH;
5279 acu->state2 = INSERT;
5280 acu->offi = 0;
5281 acu->offj = 3;
5282 acu->label1 = query_label[1];
5283 acu->label2 = target_label[0];
5284 acu = AlnConvertUnit_alloc();
5285 add_AlnConvertSet(out,acu);
5286 acu->state1 = INSERT;
5287 acu->state2 = INSERT;
5288 acu->offi = 0;
5289 acu->offj = 3;
5290 acu->label1 = query_label[1];
5291 acu->label2 = target_label[0];
5292 acu = AlnConvertUnit_alloc();
5293 add_AlnConvertSet(out,acu);
5294 acu->state1 = DELETE;
5295 acu->state2 = INSERT;
5296 acu->offi = 0;
5297 acu->offj = 3;
5298 acu->label1 = query_label[1];
5299 acu->label2 = target_label[0];
5300 acu = AlnConvertUnit_alloc();
5301 add_AlnConvertSet(out,acu);
5302 acu->state1 = START + 6;
5303 acu->is_from_special = TRUE;
5304 acu->state2 = INSERT;
5305 acu->offi = (-1);
5306 acu->offj = 3;
5307 acu->label1 = query_label[1];
5308 acu->label2 = target_label[0];
5309 acu = AlnConvertUnit_alloc();
5310 add_AlnConvertSet(out,acu);
5311 acu->state1 = INTRON_0;
5312 acu->state2 = INSERT;
5313 acu->offi = 0;
5314 acu->offj = 6;
5315 acu->label1 = query_label[1];
5316 acu->label2 = target_label[1];
5317 acu = AlnConvertUnit_alloc();
5318 add_AlnConvertSet(out,acu);
5319 acu->state1 = INTRON_1;
5320 acu->state2 = INSERT;
5321 acu->offi = 0;
5322 acu->offj = 5;
5323 acu->label1 = query_label[1];
5324 acu->label2 = target_label[2];
5325 acu = AlnConvertUnit_alloc();
5326 add_AlnConvertSet(out,acu);
5327 acu->state1 = INTRON_2;
5328 acu->state2 = INSERT;
5329 acu->offi = 0;
5330 acu->offj = 4;
5331 acu->label1 = query_label[1];
5332 acu->label2 = target_label[3];
5333 acu = AlnConvertUnit_alloc();
5334 add_AlnConvertSet(out,acu);
5335 acu->state1 = INSERT;
5336 acu->state2 = INSERT;
5337 acu->offi = 0;
5338 acu->offj = 2;
5339 acu->label1 = query_label[1];
5340 acu->label2 = target_label[4];
5341 acu = AlnConvertUnit_alloc();
5342 add_AlnConvertSet(out,acu);
5343 acu->state1 = INSERT;
5344 acu->state2 = INSERT;
5345 acu->offi = 0;
5346 acu->offj = 1;
5347 acu->label1 = query_label[1];
5348 acu->label2 = target_label[4];
5349 acu = AlnConvertUnit_alloc();
5350 add_AlnConvertSet(out,acu);
5351 acu->state1 = MATCH;
5352 acu->state2 = DELETE;
5353 acu->offi = 1;
5354 acu->offj = 0;
5355 acu->label1 = query_label[2];
5356 acu->label2 = target_label[6];
5357 acu = AlnConvertUnit_alloc();
5358 add_AlnConvertSet(out,acu);
5359 acu->state1 = INSERT;
5360 acu->state2 = DELETE;
5361 acu->offi = 1;
5362 acu->offj = 0;
5363 acu->label1 = query_label[2];
5364 acu->label2 = target_label[6];
5365 acu = AlnConvertUnit_alloc();
5366 add_AlnConvertSet(out,acu);
5367 acu->state1 = DELETE;
5368 acu->state2 = DELETE;
5369 acu->offi = 1;
5370 acu->offj = 0;
5371 acu->label1 = query_label[2];
5372 acu->label2 = target_label[6];
5373 acu = AlnConvertUnit_alloc();
5374 add_AlnConvertSet(out,acu);
5375 acu->state1 = START + 6;
5376 acu->is_from_special = TRUE;
5377 acu->state2 = DELETE;
5378 acu->offi = (-1);
5379 acu->offj = 0;
5380 acu->label1 = query_label[2];
5381 acu->label2 = target_label[6];
5382 acu = AlnConvertUnit_alloc();
5383 add_AlnConvertSet(out,acu);
5384 acu->state1 = MATCH;
5385 acu->state2 = INTRON_0;
5386 acu->offi = 0;
5387 acu->offj = 8;
5388 acu->label1 = query_label[3];
5389 acu->label2 = target_label[7];
5390 acu = AlnConvertUnit_alloc();
5391 add_AlnConvertSet(out,acu);
5392 acu->state1 = INSERT;
5393 acu->state2 = INTRON_0;
5394 acu->offi = 0;
5395 acu->offj = 8;
5396 acu->label1 = query_label[3];
5397 acu->label2 = target_label[7];
5398 acu = AlnConvertUnit_alloc();
5399 add_AlnConvertSet(out,acu);
5400 acu->state1 = INTRON_0;
5401 acu->state2 = INTRON_0;
5402 acu->offi = 0;
5403 acu->offj = 1;
5404 acu->label1 = query_label[3];
5405 acu->label2 = target_label[8];
5406 acu = AlnConvertUnit_alloc();
5407 add_AlnConvertSet(out,acu);
5408 acu->state1 = MATCH;
5409 acu->state2 = INTRON_1;
5410 acu->offi = 0;
5411 acu->offj = 9;
5412 acu->label1 = query_label[3];
5413 acu->label2 = target_label[9];
5414 acu = AlnConvertUnit_alloc();
5415 add_AlnConvertSet(out,acu);
5416 acu->state1 = INSERT;
5417 acu->state2 = INTRON_1;
5418 acu->offi = 0;
5419 acu->offj = 9;
5420 acu->label1 = query_label[3];
5421 acu->label2 = target_label[9];
5422 acu = AlnConvertUnit_alloc();
5423 add_AlnConvertSet(out,acu);
5424 acu->state1 = INTRON_1;
5425 acu->state2 = INTRON_1;
5426 acu->offi = 0;
5427 acu->offj = 1;
5428 acu->label1 = query_label[3];
5429 acu->label2 = target_label[8];
5430 acu = AlnConvertUnit_alloc();
5431 add_AlnConvertSet(out,acu);
5432 acu->state1 = MATCH;
5433 acu->state2 = INTRON_2;
5434 acu->offi = 0;
5435 acu->offj = 10;
5436 acu->label1 = query_label[3];
5437 acu->label2 = target_label[10];
5438 acu = AlnConvertUnit_alloc();
5439 add_AlnConvertSet(out,acu);
5440 acu->state1 = INSERT;
5441 acu->state2 = INTRON_2;
5442 acu->offi = 0;
5443 acu->offj = 10;
5444 acu->label1 = query_label[3];
5445 acu->label2 = target_label[10];
5446 acu = AlnConvertUnit_alloc();
5447 add_AlnConvertSet(out,acu);
5448 acu->state1 = INTRON_2;
5449 acu->state2 = INTRON_2;
5450 acu->offi = 0;
5451 acu->offj = 1;
5452 acu->label1 = query_label[3];
5453 acu->label2 = target_label[8];
5454 acu = AlnConvertUnit_alloc();
5455 add_AlnConvertSet(out,acu);
5456 acu->state1 = MATCH;
5457 acu->state2 = END + 6;
5458 acu->offi = (-1);
5459 acu->offj = 0;
5460 acu->label1 = query_label[4];
5461 acu->label2 = target_label[11];
5462 acu = AlnConvertUnit_alloc();
5463 add_AlnConvertSet(out,acu);
5464 acu->state1 = INSERT;
5465 acu->state2 = END + 6;
5466 acu->offi = (-1);
5467 acu->offj = 0;
5468 acu->label1 = query_label[4];
5469 acu->label2 = target_label[11];
5470 acu = AlnConvertUnit_alloc();
5471 add_AlnConvertSet(out,acu);
5472 acu->state1 = DELETE;
5473 acu->state2 = END + 6;
5474 acu->offi = (-1);
5475 acu->offj = 0;
5476 acu->label1 = query_label[4];
5477 acu->label2 = target_label[11];
5478 acu = AlnConvertUnit_alloc();
5479 add_AlnConvertSet(out,acu);
5480 acu->state1 = AFTER_MATCH_CODING + 6;
5481 acu->state2 = END + 6;
5482 acu->offi = (-1);
5483 acu->offj = 3;
5484 acu->label1 = query_label[4];
5485 acu->label2 = target_label[11];
5486 acu = AlnConvertUnit_alloc();
5487 add_AlnConvertSet(out,acu);
5488 acu->state1 = START + 6;
5489 acu->state2 = BEFORE_MATCH_CODING + 6;
5490 acu->offi = (-1);
5491 acu->offj = 3;
5492 acu->label1 = query_label[5];
5493 acu->label2 = target_label[0];
5494 acu = AlnConvertUnit_alloc();
5495 add_AlnConvertSet(out,acu);
5496 acu->state1 = BEFORE_MATCH_CODING + 6;
5497 acu->state2 = BEFORE_MATCH_CODING + 6;
5498 acu->offi = (-1);
5499 acu->offj = 3;
5500 acu->label1 = query_label[5];
5501 acu->label2 = target_label[0];
5502 acu = AlnConvertUnit_alloc();
5503 add_AlnConvertSet(out,acu);
5504 acu->state1 = MATCH;
5505 acu->state2 = AFTER_MATCH_CODING + 6;
5506 acu->offi = (-1);
5507 acu->offj = 0;
5508 acu->label1 = query_label[5];
5509 acu->label2 = target_label[0];
5510 acu = AlnConvertUnit_alloc();
5511 add_AlnConvertSet(out,acu);
5512 acu->state1 = AFTER_MATCH_CODING + 6;
5513 acu->state2 = AFTER_MATCH_CODING + 6;
5514 acu->offi = (-1);
5515 acu->offj = 3;
5516 acu->label1 = query_label[5];
5517 acu->label2 = target_label[0];
5518 add_collapse_label_AlnConvertSet(out,"INTRON_STATE","CENTRAL_INTRON");
5519 return out;
5520 }
5521
5522
5523 /* Function: PackAln_read_Expl_GeneStretch6(mat)
5524 *
5525 * Descrip: Reads off PackAln from explicit matrix structure
5526 *
5527 *
5528 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5529 *
5530 * Return [UNKN ] Undocumented return value [PackAln *]
5531 *
5532 */
PackAln_read_Expl_GeneStretch6(GeneStretch6 * mat)5533 PackAln * PackAln_read_Expl_GeneStretch6(GeneStretch6 * mat)
5534 {
5535 GeneStretch6_access_func_holder holder;
5536
5537
5538 holder.access_main = GeneStretch6_explicit_access_main;
5539 holder.access_special = GeneStretch6_explicit_access_special;
5540 return PackAln_read_generic_GeneStretch6(mat,holder);
5541 }
5542
5543
5544 /* Function: GeneStretch6_explicit_access_main(mat,i,j,state)
5545 *
5546 * Descrip: No Description
5547 *
5548 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5549 * Arg: i [UNKN ] Undocumented argument [int]
5550 * Arg: j [UNKN ] Undocumented argument [int]
5551 * Arg: state [UNKN ] Undocumented argument [int]
5552 *
5553 * Return [UNKN ] Undocumented return value [int]
5554 *
5555 */
GeneStretch6_explicit_access_main(GeneStretch6 * mat,int i,int j,int state)5556 int GeneStretch6_explicit_access_main(GeneStretch6 * mat,int i,int j,int state)
5557 {
5558 return GeneStretch6_EXPL_MATRIX(mat,i,j,state);
5559 }
5560
5561
5562 /* Function: GeneStretch6_explicit_access_special(mat,i,j,state)
5563 *
5564 * Descrip: No Description
5565 *
5566 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5567 * Arg: i [UNKN ] Undocumented argument [int]
5568 * Arg: j [UNKN ] Undocumented argument [int]
5569 * Arg: state [UNKN ] Undocumented argument [int]
5570 *
5571 * Return [UNKN ] Undocumented return value [int]
5572 *
5573 */
GeneStretch6_explicit_access_special(GeneStretch6 * mat,int i,int j,int state)5574 int GeneStretch6_explicit_access_special(GeneStretch6 * mat,int i,int j,int state)
5575 {
5576 return GeneStretch6_EXPL_SPECIAL(mat,i,j,state);
5577 }
5578
5579
5580 /* Function: PackAln_read_generic_GeneStretch6(mat,h)
5581 *
5582 * Descrip: Reads off PackAln from explicit matrix structure
5583 *
5584 *
5585 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5586 * Arg: h [UNKN ] Undocumented argument [GeneStretch6_access_func_holder]
5587 *
5588 * Return [UNKN ] Undocumented return value [PackAln *]
5589 *
5590 */
PackAln_read_generic_GeneStretch6(GeneStretch6 * mat,GeneStretch6_access_func_holder h)5591 PackAln * PackAln_read_generic_GeneStretch6(GeneStretch6 * mat,GeneStretch6_access_func_holder h)
5592 {
5593 register PackAln * out;
5594 int i;
5595 int j;
5596 int state;
5597 int cellscore = (-1);
5598 boolean isspecial;
5599 PackAlnUnit * pau = NULL;
5600 PackAlnUnit * prev = NULL;
5601
5602
5603 assert(mat);
5604 assert(h.access_main);
5605 assert(h.access_special);
5606
5607
5608 out = PackAln_alloc_std();
5609 if( out == NULL )
5610 return NULL;
5611
5612
5613 out->score = find_end_GeneStretch6(mat,&i,&j,&state,&isspecial,h);
5614
5615
5616 /* Add final end transition (at the moment we have not got the score! */
5617 if( (pau= PackAlnUnit_alloc()) == NULL || add_PackAln(out,pau) == FALSE ) {
5618 warn("Failed the first PackAlnUnit alloc, %d length of Alignment in GeneStretch6_basic_read, returning a mess.(Sorry!)",out->len);
5619 return out;
5620 }
5621
5622
5623 /* Put in positions for end trans. Remember that coordinates in C style */
5624 pau->i = i;
5625 pau->j = j;
5626 if( isspecial != TRUE)
5627 pau->state = state;
5628 else pau->state = state + 6;
5629 prev=pau;
5630 while( state != START || isspecial != TRUE) { /*while state != START*/
5631
5632
5633 if( isspecial == TRUE )
5634 max_calc_special_GeneStretch6(mat,i,j,state,isspecial,&i,&j,&state,&isspecial,&cellscore,h);
5635 else
5636 max_calc_GeneStretch6(mat,i,j,state,isspecial,&i,&j,&state,&isspecial,&cellscore,h);
5637 if(i == GeneStretch6_READ_OFF_ERROR || j == GeneStretch6_READ_OFF_ERROR || state == GeneStretch6_READ_OFF_ERROR ) {
5638 warn("Problem - hit bad read off system, exiting now");
5639 break;
5640 }
5641 if( (pau= PackAlnUnit_alloc()) == NULL || add_PackAln(out,pau) == FALSE ) {
5642 warn("Failed a PackAlnUnit alloc, %d length of Alignment in GeneStretch6_basic_read, returning partial alignment",out->len);
5643 break;
5644 }
5645
5646
5647 /* Put in positions for block. Remember that coordinates in C style */
5648 pau->i = i;
5649 pau->j = j;
5650 if( isspecial != TRUE)
5651 pau->state = state;
5652 else pau->state = state + 6;
5653 prev->score = cellscore;
5654 prev = pau;
5655 } /* end of while state != START */
5656
5657
5658 invert_PackAln(out);
5659 return out;
5660 }
5661
5662
5663 /* Function: find_end_GeneStretch6(mat,ri,rj,state,isspecial,h)
5664 *
5665 * Descrip: No Description
5666 *
5667 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5668 * Arg: ri [UNKN ] Undocumented argument [int *]
5669 * Arg: rj [UNKN ] Undocumented argument [int *]
5670 * Arg: state [UNKN ] Undocumented argument [int *]
5671 * Arg: isspecial [UNKN ] Undocumented argument [boolean *]
5672 * Arg: h [UNKN ] Undocumented argument [GeneStretch6_access_func_holder]
5673 *
5674 * Return [UNKN ] Undocumented return value [int]
5675 *
5676 */
find_end_GeneStretch6(GeneStretch6 * mat,int * ri,int * rj,int * state,boolean * isspecial,GeneStretch6_access_func_holder h)5677 int find_end_GeneStretch6(GeneStretch6 * mat,int * ri,int * rj,int * state,boolean * isspecial,GeneStretch6_access_func_holder h)
5678 {
5679 int j;
5680 int max;
5681 int maxj;
5682 int temp;
5683
5684
5685 max = (*h.access_special)(mat,0,mat->target->seq->len-1,END);
5686 maxj = mat->target->seq->len-1;
5687 for(j= mat->target->seq->len-2 ;j >= 0 ;j--) {
5688 if( (temp =(*h.access_special)(mat,0,j,END)) > max ) {
5689 max = temp;
5690 maxj = j;
5691 }
5692 }
5693
5694
5695 if( ri != NULL)
5696 *ri = 0;
5697 if( rj != NULL)
5698 *rj = maxj;
5699 if( state != NULL)
5700 *state = END;
5701 if( isspecial != NULL)
5702 *isspecial = TRUE;
5703
5704
5705 return max;
5706 }
5707
5708
5709 /* Function: GeneStretch6_debug_show_matrix(mat,starti,stopi,startj,stopj,ofp)
5710 *
5711 * Descrip: No Description
5712 *
5713 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5714 * Arg: starti [UNKN ] Undocumented argument [int]
5715 * Arg: stopi [UNKN ] Undocumented argument [int]
5716 * Arg: startj [UNKN ] Undocumented argument [int]
5717 * Arg: stopj [UNKN ] Undocumented argument [int]
5718 * Arg: ofp [UNKN ] Undocumented argument [FILE *]
5719 *
5720 */
GeneStretch6_debug_show_matrix(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,FILE * ofp)5721 void GeneStretch6_debug_show_matrix(GeneStretch6 * mat,int starti,int stopi,int startj,int stopj,FILE * ofp)
5722 {
5723 register int i;
5724 register int j;
5725
5726
5727 for(i=starti;i<stopi && i < mat->query->len;i++) {
5728 for(j=startj;j<stopj && j < mat->target->seq->len;j++) {
5729 fprintf(ofp,"Cell [%d - %d]\n",i,j);
5730 fprintf(ofp,"State MATCH %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH));
5731 fprintf(ofp,"State INSERT %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT));
5732 fprintf(ofp,"State DELETE %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE));
5733 fprintf(ofp,"State INTRON_0 %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0));
5734 fprintf(ofp,"State INTRON_1 %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1));
5735 fprintf(ofp,"State INTRON_2 %d\n",GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2));
5736 fprintf(ofp,"\n\n");
5737 }
5738 }
5739
5740
5741 }
5742
5743
5744 /* Function: max_calc_GeneStretch6(mat,i,j,state,isspecial,reti,retj,retstate,retspecial,cellscore,h)
5745 *
5746 * Descrip: No Description
5747 *
5748 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
5749 * Arg: i [UNKN ] Undocumented argument [int]
5750 * Arg: j [UNKN ] Undocumented argument [int]
5751 * Arg: state [UNKN ] Undocumented argument [int]
5752 * Arg: isspecial [UNKN ] Undocumented argument [boolean]
5753 * Arg: reti [UNKN ] Undocumented argument [int *]
5754 * Arg: retj [UNKN ] Undocumented argument [int *]
5755 * Arg: retstate [UNKN ] Undocumented argument [int *]
5756 * Arg: retspecial [UNKN ] Undocumented argument [boolean *]
5757 * Arg: cellscore [UNKN ] Undocumented argument [int *]
5758 * Arg: h [UNKN ] Undocumented argument [GeneStretch6_access_func_holder]
5759 *
5760 * Return [UNKN ] Undocumented return value [int]
5761 *
5762 */
max_calc_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore,GeneStretch6_access_func_holder h)5763 int max_calc_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore,GeneStretch6_access_func_holder h)
5764 {
5765 register int temp;
5766 register int cscore;
5767
5768
5769 *reti = (*retj) = (*retstate) = GeneStretch6_READ_OFF_ERROR;
5770
5771
5772 if( i < 0 || j < 0 || i > mat->query->len || j > mat->target->seq->len) {
5773 warn("In GeneStretch6 matrix special read off - out of bounds on matrix [i,j is %d,%d state %d in standard matrix]",i,j,state);
5774 return -1;
5775 }
5776
5777
5778 /* Then you have to select the correct switch statement to figure out the readoff */
5779 /* Somewhat odd - reverse the order of calculation and return as soon as it is correct */
5780 cscore = (*h.access_main)(mat,i,j,state);
5781 switch(state) { /*Switch state */
5782 case MATCH :
5783 temp = cscore - (mat->gp->transition[GP4_INSERT_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5784 if( temp == (*h.access_main)(mat,i - 1,j - 5,MATCH) ) {
5785 *reti = i - 1;
5786 *retj = j - 5;
5787 *retstate = MATCH;
5788 *retspecial = FALSE;
5789 if( cellscore != NULL) {
5790 *cellscore = cscore - (*h.access_main)(mat,i-1,j-5,MATCH);
5791 }
5792 return (*h.access_main)(mat,i - 1,j - 5,MATCH);
5793 }
5794 temp = cscore - (mat->gp->transition[GP4_INSERT_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5795 if( temp == (*h.access_main)(mat,i - 1,j - 4,MATCH) ) {
5796 *reti = i - 1;
5797 *retj = j - 4;
5798 *retstate = MATCH;
5799 *retspecial = FALSE;
5800 if( cellscore != NULL) {
5801 *cellscore = cscore - (*h.access_main)(mat,i-1,j-4,MATCH);
5802 }
5803 return (*h.access_main)(mat,i - 1,j - 4,MATCH);
5804 }
5805 temp = cscore - (mat->gp->transition[GP4_DELETE_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5806 if( temp == (*h.access_main)(mat,i - 1,j - 1,MATCH) ) {
5807 *reti = i - 1;
5808 *retj = j - 1;
5809 *retstate = MATCH;
5810 *retspecial = FALSE;
5811 if( cellscore != NULL) {
5812 *cellscore = cscore - (*h.access_main)(mat,i-1,j-1,MATCH);
5813 }
5814 return (*h.access_main)(mat,i - 1,j - 1,MATCH);
5815 }
5816 temp = cscore - (mat->gp->transition[GP4_DELETE_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5817 if( temp == (*h.access_main)(mat,i - 1,j - 2,MATCH) ) {
5818 *reti = i - 1;
5819 *retj = j - 2;
5820 *retstate = MATCH;
5821 *retspecial = FALSE;
5822 if( cellscore != NULL) {
5823 *cellscore = cscore - (*h.access_main)(mat,i-1,j-2,MATCH);
5824 }
5825 return (*h.access_main)(mat,i - 1,j - 2,MATCH);
5826 }
5827 temp = cscore - (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5828 if( temp == (*h.access_main)(mat,i - 1,j - 4,INTRON_2) ) {
5829 *reti = i - 1;
5830 *retj = j - 4;
5831 *retstate = INTRON_2;
5832 *retspecial = FALSE;
5833 if( cellscore != NULL) {
5834 *cellscore = cscore - (*h.access_main)(mat,i-1,j-4,INTRON_2);
5835 }
5836 return (*h.access_main)(mat,i - 1,j - 4,INTRON_2);
5837 }
5838 temp = cscore - (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5839 if( temp == (*h.access_main)(mat,i - 1,j - 5,INTRON_1) ) {
5840 *reti = i - 1;
5841 *retj = j - 5;
5842 *retstate = INTRON_1;
5843 *retspecial = FALSE;
5844 if( cellscore != NULL) {
5845 *cellscore = cscore - (*h.access_main)(mat,i-1,j-5,INTRON_1);
5846 }
5847 return (*h.access_main)(mat,i - 1,j - 5,INTRON_1);
5848 }
5849 temp = cscore - ((((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5850 if( temp == (*h.access_main)(mat,i - 1,j - 6,INTRON_0) ) {
5851 *reti = i - 1;
5852 *retj = j - 6;
5853 *retstate = INTRON_0;
5854 *retspecial = FALSE;
5855 if( cellscore != NULL) {
5856 *cellscore = cscore - (*h.access_main)(mat,i-1,j-6,INTRON_0);
5857 }
5858 return (*h.access_main)(mat,i - 1,j - 6,INTRON_0);
5859 }
5860 temp = cscore - ((mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5861 if( temp == (*h.access_special)(mat,i - 1,j - 3,BEFORE_MATCH_CODING) ) {
5862 *reti = i - 1;
5863 *retj = j - 3;
5864 *retstate = BEFORE_MATCH_CODING;
5865 *retspecial = TRUE;
5866 if( cellscore != NULL) {
5867 *cellscore = cscore - (*h.access_special)(mat,i-1,j-3,BEFORE_MATCH_CODING);
5868 }
5869 return (*h.access_main)(mat,i - 1,j - 3,BEFORE_MATCH_CODING);
5870 }
5871 temp = cscore - ((mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5872 if( temp == (*h.access_special)(mat,i - 1,j - 3,START) ) {
5873 *reti = i - 1;
5874 *retj = j - 3;
5875 *retstate = START;
5876 *retspecial = TRUE;
5877 if( cellscore != NULL) {
5878 *cellscore = cscore - (*h.access_special)(mat,i-1,j-3,START);
5879 }
5880 return (*h.access_main)(mat,i - 1,j - 3,START);
5881 }
5882 temp = cscore - ((mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5883 if( temp == (*h.access_main)(mat,i - 1,j - 3,DELETE) ) {
5884 *reti = i - 1;
5885 *retj = j - 3;
5886 *retstate = DELETE;
5887 *retspecial = FALSE;
5888 if( cellscore != NULL) {
5889 *cellscore = cscore - (*h.access_main)(mat,i-1,j-3,DELETE);
5890 }
5891 return (*h.access_main)(mat,i - 1,j - 3,DELETE);
5892 }
5893 temp = cscore - ((mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5894 if( temp == (*h.access_main)(mat,i - 1,j - 3,INSERT) ) {
5895 *reti = i - 1;
5896 *retj = j - 3;
5897 *retstate = INSERT;
5898 *retspecial = FALSE;
5899 if( cellscore != NULL) {
5900 *cellscore = cscore - (*h.access_main)(mat,i-1,j-3,INSERT);
5901 }
5902 return (*h.access_main)(mat,i - 1,j - 3,INSERT);
5903 }
5904 temp = cscore - ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5905 if( temp == (*h.access_main)(mat,i - 1,j - 3,MATCH) ) {
5906 *reti = i - 1;
5907 *retj = j - 3;
5908 *retstate = MATCH;
5909 *retspecial = FALSE;
5910 if( cellscore != NULL) {
5911 *cellscore = cscore - (*h.access_main)(mat,i-1,j-3,MATCH);
5912 }
5913 return (*h.access_main)(mat,i - 1,j - 3,MATCH);
5914 }
5915 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
5916 return (-1);
5917 case INSERT :
5918 temp = cscore - (mat->gp->transition[GP4_DELETE_2_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5919 if( temp == (*h.access_main)(mat,i - 0,j - 1,INSERT) ) {
5920 *reti = i - 0;
5921 *retj = j - 1;
5922 *retstate = INSERT;
5923 *retspecial = FALSE;
5924 if( cellscore != NULL) {
5925 *cellscore = cscore - (*h.access_main)(mat,i-0,j-1,INSERT);
5926 }
5927 return (*h.access_main)(mat,i - 0,j - 1,INSERT);
5928 }
5929 temp = cscore - (mat->gp->transition[GP4_DELETE_1_BASE]) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5930 if( temp == (*h.access_main)(mat,i - 0,j - 2,INSERT) ) {
5931 *reti = i - 0;
5932 *retj = j - 2;
5933 *retstate = INSERT;
5934 *retspecial = FALSE;
5935 if( cellscore != NULL) {
5936 *cellscore = cscore - (*h.access_main)(mat,i-0,j-2,INSERT);
5937 }
5938 return (*h.access_main)(mat,i - 0,j - 2,INSERT);
5939 }
5940 temp = cscore - (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5941 if( temp == (*h.access_main)(mat,i - 0,j - 4,INTRON_2) ) {
5942 *reti = i - 0;
5943 *retj = j - 4;
5944 *retstate = INTRON_2;
5945 *retspecial = FALSE;
5946 if( cellscore != NULL) {
5947 *cellscore = cscore - (*h.access_main)(mat,i-0,j-4,INTRON_2);
5948 }
5949 return (*h.access_main)(mat,i - 0,j - 4,INTRON_2);
5950 }
5951 temp = cscore - (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5952 if( temp == (*h.access_main)(mat,i - 0,j - 5,INTRON_1) ) {
5953 *reti = i - 0;
5954 *retj = j - 5;
5955 *retstate = INTRON_1;
5956 *retspecial = FALSE;
5957 if( cellscore != NULL) {
5958 *cellscore = cscore - (*h.access_main)(mat,i-0,j-5,INTRON_1);
5959 }
5960 return (*h.access_main)(mat,i - 0,j - 5,INTRON_1);
5961 }
5962 temp = cscore - ((((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)))) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5963 if( temp == (*h.access_main)(mat,i - 0,j - 6,INTRON_0) ) {
5964 *reti = i - 0;
5965 *retj = j - 6;
5966 *retstate = INTRON_0;
5967 *retspecial = FALSE;
5968 if( cellscore != NULL) {
5969 *cellscore = cscore - (*h.access_main)(mat,i-0,j-6,INTRON_0);
5970 }
5971 return (*h.access_main)(mat,i - 0,j - 6,INTRON_0);
5972 }
5973 temp = cscore - ((mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5974 if( temp == (*h.access_special)(mat,i - 0,j - 3,START) ) {
5975 *reti = i - 0;
5976 *retj = j - 3;
5977 *retstate = START;
5978 *retspecial = TRUE;
5979 if( cellscore != NULL) {
5980 *cellscore = cscore - (*h.access_special)(mat,i-0,j-3,START);
5981 }
5982 return (*h.access_main)(mat,i - 0,j - 3,START);
5983 }
5984 temp = cscore - ((mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5985 if( temp == (*h.access_main)(mat,i - 0,j - 3,DELETE) ) {
5986 *reti = i - 0;
5987 *retj = j - 3;
5988 *retstate = DELETE;
5989 *retspecial = FALSE;
5990 if( cellscore != NULL) {
5991 *cellscore = cscore - (*h.access_main)(mat,i-0,j-3,DELETE);
5992 }
5993 return (*h.access_main)(mat,i - 0,j - 3,DELETE);
5994 }
5995 temp = cscore - ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
5996 if( temp == (*h.access_main)(mat,i - 0,j - 3,INSERT) ) {
5997 *reti = i - 0;
5998 *retj = j - 3;
5999 *retstate = INSERT;
6000 *retspecial = FALSE;
6001 if( cellscore != NULL) {
6002 *cellscore = cscore - (*h.access_main)(mat,i-0,j-3,INSERT);
6003 }
6004 return (*h.access_main)(mat,i - 0,j - 3,INSERT);
6005 }
6006 temp = cscore - ((mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)])) - (CSEQ_GENOMIC_CDSPOT(mat->target,j));
6007 if( temp == (*h.access_main)(mat,i - 0,j - 3,MATCH) ) {
6008 *reti = i - 0;
6009 *retj = j - 3;
6010 *retstate = MATCH;
6011 *retspecial = FALSE;
6012 if( cellscore != NULL) {
6013 *cellscore = cscore - (*h.access_main)(mat,i-0,j-3,MATCH);
6014 }
6015 return (*h.access_main)(mat,i - 0,j - 3,MATCH);
6016 }
6017 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6018 return (-1);
6019 case DELETE :
6020 temp = cscore - (mat->query->seg[i]->transition[GW_START2DELETE]) - (0);
6021 if( temp == (*h.access_special)(mat,i - 1,j - 0,START) ) {
6022 *reti = i - 1;
6023 *retj = j - 0;
6024 *retstate = START;
6025 *retspecial = TRUE;
6026 if( cellscore != NULL) {
6027 *cellscore = cscore - (*h.access_special)(mat,i-1,j-0,START);
6028 }
6029 return (*h.access_main)(mat,i - 1,j - 0,START);
6030 }
6031 temp = cscore - (mat->query->seg[i]->transition[GW_DELETE2DELETE]) - (0);
6032 if( temp == (*h.access_main)(mat,i - 1,j - 0,DELETE) ) {
6033 *reti = i - 1;
6034 *retj = j - 0;
6035 *retstate = DELETE;
6036 *retspecial = FALSE;
6037 if( cellscore != NULL) {
6038 *cellscore = cscore - (*h.access_main)(mat,i-1,j-0,DELETE);
6039 }
6040 return (*h.access_main)(mat,i - 1,j - 0,DELETE);
6041 }
6042 temp = cscore - (mat->query->seg[i]->transition[GW_INSERT2DELETE]) - (0);
6043 if( temp == (*h.access_main)(mat,i - 1,j - 0,INSERT) ) {
6044 *reti = i - 1;
6045 *retj = j - 0;
6046 *retstate = INSERT;
6047 *retspecial = FALSE;
6048 if( cellscore != NULL) {
6049 *cellscore = cscore - (*h.access_main)(mat,i-1,j-0,INSERT);
6050 }
6051 return (*h.access_main)(mat,i - 1,j - 0,INSERT);
6052 }
6053 temp = cscore - (mat->query->seg[i]->transition[GW_MATCH2DELETE]) - (0);
6054 if( temp == (*h.access_main)(mat,i - 1,j - 0,MATCH) ) {
6055 *reti = i - 1;
6056 *retj = j - 0;
6057 *retstate = MATCH;
6058 *retspecial = FALSE;
6059 if( cellscore != NULL) {
6060 *cellscore = cscore - (*h.access_main)(mat,i-1,j-0,MATCH);
6061 }
6062 return (*h.access_main)(mat,i - 1,j - 0,MATCH);
6063 }
6064 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6065 return (-1);
6066 case INTRON_0 :
6067 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
6068 if( temp == (*h.access_main)(mat,i - 0,j - 1,INTRON_0) ) {
6069 *reti = i - 0;
6070 *retj = j - 1;
6071 *retstate = INTRON_0;
6072 *retspecial = FALSE;
6073 if( cellscore != NULL) {
6074 *cellscore = cscore - (*h.access_main)(mat,i-0,j-1,INTRON_0);
6075 }
6076 return (*h.access_main)(mat,i - 0,j - 1,INTRON_0);
6077 }
6078 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6079 if( temp == (*h.access_main)(mat,i - 0,j - 8,INSERT) ) {
6080 *reti = i - 0;
6081 *retj = j - 8;
6082 *retstate = INSERT;
6083 *retspecial = FALSE;
6084 if( cellscore != NULL) {
6085 *cellscore = cscore - (*h.access_main)(mat,i-0,j-8,INSERT);
6086 }
6087 return (*h.access_main)(mat,i - 0,j - 8,INSERT);
6088 }
6089 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6090 if( temp == (*h.access_main)(mat,i - 0,j - 8,MATCH) ) {
6091 *reti = i - 0;
6092 *retj = j - 8;
6093 *retstate = MATCH;
6094 *retspecial = FALSE;
6095 if( cellscore != NULL) {
6096 *cellscore = cscore - (*h.access_main)(mat,i-0,j-8,MATCH);
6097 }
6098 return (*h.access_main)(mat,i - 0,j - 8,MATCH);
6099 }
6100 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6101 return (-1);
6102 case INTRON_1 :
6103 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
6104 if( temp == (*h.access_main)(mat,i - 0,j - 1,INTRON_1) ) {
6105 *reti = i - 0;
6106 *retj = j - 1;
6107 *retstate = INTRON_1;
6108 *retspecial = FALSE;
6109 if( cellscore != NULL) {
6110 *cellscore = cscore - (*h.access_main)(mat,i-0,j-1,INTRON_1);
6111 }
6112 return (*h.access_main)(mat,i - 0,j - 1,INTRON_1);
6113 }
6114 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6115 if( temp == (*h.access_main)(mat,i - 0,j - 9,INSERT) ) {
6116 *reti = i - 0;
6117 *retj = j - 9;
6118 *retstate = INSERT;
6119 *retspecial = FALSE;
6120 if( cellscore != NULL) {
6121 *cellscore = cscore - (*h.access_main)(mat,i-0,j-9,INSERT);
6122 }
6123 return (*h.access_main)(mat,i - 0,j - 9,INSERT);
6124 }
6125 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6126 if( temp == (*h.access_main)(mat,i - 0,j - 9,MATCH) ) {
6127 *reti = i - 0;
6128 *retj = j - 9;
6129 *retstate = MATCH;
6130 *retspecial = FALSE;
6131 if( cellscore != NULL) {
6132 *cellscore = cscore - (*h.access_main)(mat,i-0,j-9,MATCH);
6133 }
6134 return (*h.access_main)(mat,i - 0,j - 9,MATCH);
6135 }
6136 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6137 return (-1);
6138 case INTRON_2 :
6139 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON])) - (0);
6140 if( temp == (*h.access_main)(mat,i - 0,j - 1,INTRON_2) ) {
6141 *reti = i - 0;
6142 *retj = j - 1;
6143 *retstate = INTRON_2;
6144 *retspecial = FALSE;
6145 if( cellscore != NULL) {
6146 *cellscore = cscore - (*h.access_main)(mat,i-0,j-1,INTRON_2);
6147 }
6148 return (*h.access_main)(mat,i - 0,j - 1,INTRON_2);
6149 }
6150 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6151 if( temp == (*h.access_main)(mat,i - 0,j - 10,INSERT) ) {
6152 *reti = i - 0;
6153 *retj = j - 10;
6154 *retstate = INSERT;
6155 *retspecial = FALSE;
6156 if( cellscore != NULL) {
6157 *cellscore = cscore - (*h.access_main)(mat,i-0,j-10,INSERT);
6158 }
6159 return (*h.access_main)(mat,i - 0,j - 10,INSERT);
6160 }
6161 temp = cscore - ((mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)))) - (0);
6162 if( temp == (*h.access_main)(mat,i - 0,j - 10,MATCH) ) {
6163 *reti = i - 0;
6164 *retj = j - 10;
6165 *retstate = MATCH;
6166 *retspecial = FALSE;
6167 if( cellscore != NULL) {
6168 *cellscore = cscore - (*h.access_main)(mat,i-0,j-10,MATCH);
6169 }
6170 return (*h.access_main)(mat,i - 0,j - 10,MATCH);
6171 }
6172 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6173 return (-1);
6174 default:
6175 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found!",i,j,state);
6176 return (-1);
6177 } /* end of Switch state */
6178 }
6179
6180
6181 /* Function: max_calc_special_GeneStretch6(mat,i,j,state,isspecial,reti,retj,retstate,retspecial,cellscore,h)
6182 *
6183 * Descrip: No Description
6184 *
6185 * Arg: mat [UNKN ] Undocumented argument [GeneStretch6 *]
6186 * Arg: i [UNKN ] Undocumented argument [int]
6187 * Arg: j [UNKN ] Undocumented argument [int]
6188 * Arg: state [UNKN ] Undocumented argument [int]
6189 * Arg: isspecial [UNKN ] Undocumented argument [boolean]
6190 * Arg: reti [UNKN ] Undocumented argument [int *]
6191 * Arg: retj [UNKN ] Undocumented argument [int *]
6192 * Arg: retstate [UNKN ] Undocumented argument [int *]
6193 * Arg: retspecial [UNKN ] Undocumented argument [boolean *]
6194 * Arg: cellscore [UNKN ] Undocumented argument [int *]
6195 * Arg: h [UNKN ] Undocumented argument [GeneStretch6_access_func_holder]
6196 *
6197 * Return [UNKN ] Undocumented return value [int]
6198 *
6199 */
max_calc_special_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore,GeneStretch6_access_func_holder h)6200 int max_calc_special_GeneStretch6(GeneStretch6 * mat,int i,int j,int state,boolean isspecial,int * reti,int * retj,int * retstate,boolean * retspecial,int * cellscore,GeneStretch6_access_func_holder h)
6201 {
6202 register int temp;
6203 register int cscore;
6204
6205
6206 *reti = (*retj) = (*retstate) = GeneStretch6_READ_OFF_ERROR;
6207
6208
6209 if( j < 0 || j > mat->target->seq->len) {
6210 warn("In GeneStretch6 matrix special read off - out of bounds on matrix [j is %d in special]",j);
6211 return -1;
6212 }
6213
6214
6215 cscore = (*h.access_special)(mat,i,j,state);
6216 switch(state) { /*switch on special states*/
6217 case START :
6218 case END :
6219 /* source AFTER_MATCH_CODING is a special */
6220 temp = cscore - (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
6221 if( temp == (*h.access_special)(mat,i - 0,j - 3,AFTER_MATCH_CODING) ) {
6222 *reti = i - 0;
6223 *retj = j - 3;
6224 *retstate = AFTER_MATCH_CODING;
6225 *retspecial = TRUE;
6226 if( cellscore != NULL) {
6227 *cellscore = cscore - (*h.access_special)(mat,i-0,j-3,AFTER_MATCH_CODING);
6228 }
6229 return (*h.access_special)(mat,i - 0,j - 3,AFTER_MATCH_CODING) ;
6230 }
6231 /* source DELETE is from main matrix */
6232 for(i= mat->query->len-1;i >= 0 ;i--) { /*for i >= 0*/
6233 temp = cscore - (mat->query->seg[i]->transition[GW_DELETE2END]) - (0);
6234 if( temp == (*h.access_main)(mat,i - 0,j - 0,DELETE) ) {
6235 *reti = i - 0;
6236 *retj = j - 0;
6237 *retstate = DELETE;
6238 *retspecial = FALSE;
6239 if( cellscore != NULL) {
6240 *cellscore = cscore - (*h.access_main)(mat,i-0,j-0,DELETE);
6241 }
6242 return (*h.access_main)(mat,i - 0,j - 0,DELETE) ;
6243 }
6244 } /* end of for i >= 0 */
6245 /* source INSERT is from main matrix */
6246 for(i= mat->query->len-1;i >= 0 ;i--) { /*for i >= 0*/
6247 temp = cscore - (mat->query->seg[i]->transition[GW_INSERT2END]) - (0);
6248 if( temp == (*h.access_main)(mat,i - 0,j - 0,INSERT) ) {
6249 *reti = i - 0;
6250 *retj = j - 0;
6251 *retstate = INSERT;
6252 *retspecial = FALSE;
6253 if( cellscore != NULL) {
6254 *cellscore = cscore - (*h.access_main)(mat,i-0,j-0,INSERT);
6255 }
6256 return (*h.access_main)(mat,i - 0,j - 0,INSERT) ;
6257 }
6258 } /* end of for i >= 0 */
6259 /* source MATCH is from main matrix */
6260 for(i= mat->query->len-1;i >= 0 ;i--) { /*for i >= 0*/
6261 temp = cscore - (mat->query->seg[i]->transition[GW_MATCH2END]) - (0);
6262 if( temp == (*h.access_main)(mat,i - 0,j - 0,MATCH) ) {
6263 *reti = i - 0;
6264 *retj = j - 0;
6265 *retstate = MATCH;
6266 *retspecial = FALSE;
6267 if( cellscore != NULL) {
6268 *cellscore = cscore - (*h.access_main)(mat,i-0,j-0,MATCH);
6269 }
6270 return (*h.access_main)(mat,i - 0,j - 0,MATCH) ;
6271 }
6272 } /* end of for i >= 0 */
6273 case BEFORE_MATCH_CODING :
6274 /* source BEFORE_MATCH_CODING is a special */
6275 temp = cscore - (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
6276 if( temp == (*h.access_special)(mat,i - 0,j - 3,BEFORE_MATCH_CODING) ) {
6277 *reti = i - 0;
6278 *retj = j - 3;
6279 *retstate = BEFORE_MATCH_CODING;
6280 *retspecial = TRUE;
6281 if( cellscore != NULL) {
6282 *cellscore = cscore - (*h.access_special)(mat,i-0,j-3,BEFORE_MATCH_CODING);
6283 }
6284 return (*h.access_special)(mat,i - 0,j - 3,BEFORE_MATCH_CODING) ;
6285 }
6286 /* source START is a special */
6287 temp = cscore - (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
6288 if( temp == (*h.access_special)(mat,i - 0,j - 3,START) ) {
6289 *reti = i - 0;
6290 *retj = j - 3;
6291 *retstate = START;
6292 *retspecial = TRUE;
6293 if( cellscore != NULL) {
6294 *cellscore = cscore - (*h.access_special)(mat,i-0,j-3,START);
6295 }
6296 return (*h.access_special)(mat,i - 0,j - 3,START) ;
6297 }
6298 case AFTER_MATCH_CODING :
6299 /* source AFTER_MATCH_CODING is a special */
6300 temp = cscore - (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) - (0);
6301 if( temp == (*h.access_special)(mat,i - 0,j - 3,AFTER_MATCH_CODING) ) {
6302 *reti = i - 0;
6303 *retj = j - 3;
6304 *retstate = AFTER_MATCH_CODING;
6305 *retspecial = TRUE;
6306 if( cellscore != NULL) {
6307 *cellscore = cscore - (*h.access_special)(mat,i-0,j-3,AFTER_MATCH_CODING);
6308 }
6309 return (*h.access_special)(mat,i - 0,j - 3,AFTER_MATCH_CODING) ;
6310 }
6311 /* source MATCH is from main matrix */
6312 for(i= mat->query->len-1;i >= 0 ;i--) { /*for i >= 0*/
6313 temp = cscore - (mat->query->seg[i]->transition[GW_MATCH2END]) - (0);
6314 if( temp == (*h.access_main)(mat,i - 0,j - 0,MATCH) ) {
6315 *reti = i - 0;
6316 *retj = j - 0;
6317 *retstate = MATCH;
6318 *retspecial = FALSE;
6319 if( cellscore != NULL) {
6320 *cellscore = cscore - (*h.access_main)(mat,i-0,j-0,MATCH);
6321 }
6322 return (*h.access_main)(mat,i - 0,j - 0,MATCH) ;
6323 }
6324 } /* end of for i >= 0 */
6325 default:
6326 warn("Major problem (!) - in GeneStretch6 read off, position %d,%d state %d no source found dropped into default on source switch!",i,j,state);
6327 return (-1);
6328 } /* end of switch on special states */
6329 }
6330
6331
6332 /* Function: calculate_GeneStretch6(mat)
6333 *
6334 * Descrip: This function calculates the GeneStretch6 matrix when in explicit mode
6335 * To allocate the matrix use /allocate_Expl_GeneStretch6
6336 *
6337 *
6338 * Arg: mat [UNKN ] GeneStretch6 which contains explicit basematrix memory [GeneStretch6 *]
6339 *
6340 * Return [UNKN ] Undocumented return value [boolean]
6341 *
6342 */
calculate_GeneStretch6(GeneStretch6 * mat)6343 boolean calculate_GeneStretch6(GeneStretch6 * mat)
6344 {
6345 int i;
6346 int j;
6347 int leni;
6348 int lenj;
6349 int tot;
6350 int num;
6351
6352
6353 if( mat->basematrix->type != BASEMATRIX_TYPE_EXPLICIT ) {
6354 warn("in calculate_GeneStretch6, passed a non Explicit matrix type, cannot calculate!");
6355 return FALSE;
6356 }
6357
6358
6359 leni = mat->leni;
6360 lenj = mat->lenj;
6361 tot = leni * lenj;
6362 num = 0;
6363
6364
6365 start_reporting("GeneStretch6 Matrix calculation: ");
6366 for(j=0;j<lenj;j++) {
6367 auto int score;
6368 auto int temp;
6369 for(i=0;i<leni;i++) {
6370 if( num%1000 == 0 )
6371 log_full_error(REPORT,0,"[%7d] Cells %2d%%%%",num,num*100/tot);
6372 num++;
6373
6374
6375 /* For state MATCH */
6376 /* setting first movement to score */
6377 score = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6378 /* From state INSERT to state MATCH */
6379 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6380 if( temp > score ) {
6381 score = temp;
6382 }
6383 /* From state DELETE to state MATCH */
6384 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6385 if( temp > score ) {
6386 score = temp;
6387 }
6388 /* From state START to state MATCH */
6389 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-3,START) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6390 if( temp > score ) {
6391 score = temp;
6392 }
6393 /* From state BEFORE_MATCH_CODING to state MATCH */
6394 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6395 if( temp > score ) {
6396 score = temp;
6397 }
6398 /* From state INTRON_0 to state MATCH */
6399 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
6400 if( temp > score ) {
6401 score = temp;
6402 }
6403 /* From state INTRON_1 to state MATCH */
6404 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
6405 if( temp > score ) {
6406 score = temp;
6407 }
6408 /* From state INTRON_2 to state MATCH */
6409 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
6410 if( temp > score ) {
6411 score = temp;
6412 }
6413 /* From state MATCH to state MATCH */
6414 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
6415 if( temp > score ) {
6416 score = temp;
6417 }
6418 /* From state MATCH to state MATCH */
6419 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
6420 if( temp > score ) {
6421 score = temp;
6422 }
6423 /* From state MATCH to state MATCH */
6424 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
6425 if( temp > score ) {
6426 score = temp;
6427 }
6428 /* From state MATCH to state MATCH */
6429 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
6430 if( temp > score ) {
6431 score = temp;
6432 }
6433
6434
6435 /* Ok - finished max calculation for MATCH */
6436 /* Add any movement independant score and put away */
6437 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
6438 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = score;
6439
6440
6441 /* state MATCH is a source for special END */
6442 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
6443 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6444 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6445 }
6446
6447
6448
6449
6450 /* state MATCH is a source for special AFTER_MATCH_CODING */
6451 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
6452 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) ) {
6453 GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = temp;
6454 }
6455
6456
6457
6458
6459 /* Finished calculating state MATCH */
6460
6461
6462 /* For state INSERT */
6463 /* setting first movement to score */
6464 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6465 /* From state INSERT to state INSERT */
6466 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6467 if( temp > score ) {
6468 score = temp;
6469 }
6470 /* From state DELETE to state INSERT */
6471 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6472 if( temp > score ) {
6473 score = temp;
6474 }
6475 /* From state START to state INSERT */
6476 temp = GeneStretch6_EXPL_SPECIAL(mat,i-0,j-3,START) + (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6477 if( temp > score ) {
6478 score = temp;
6479 }
6480 /* From state INTRON_0 to state INSERT */
6481 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
6482 if( temp > score ) {
6483 score = temp;
6484 }
6485 /* From state INTRON_1 to state INSERT */
6486 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
6487 if( temp > score ) {
6488 score = temp;
6489 }
6490 /* From state INTRON_2 to state INSERT */
6491 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
6492 if( temp > score ) {
6493 score = temp;
6494 }
6495 /* From state INSERT to state INSERT */
6496 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
6497 if( temp > score ) {
6498 score = temp;
6499 }
6500 /* From state INSERT to state INSERT */
6501 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
6502 if( temp > score ) {
6503 score = temp;
6504 }
6505
6506
6507 /* Ok - finished max calculation for INSERT */
6508 /* Add any movement independant score and put away */
6509 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
6510 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = score;
6511
6512
6513 /* state INSERT is a source for special END */
6514 temp = score + (mat->query->seg[i]->transition[GW_INSERT2END]) + (0) ;
6515 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6516 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6517 }
6518
6519
6520
6521
6522 /* Finished calculating state INSERT */
6523
6524
6525 /* For state DELETE */
6526 /* setting first movement to score */
6527 score = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
6528 /* From state INSERT to state DELETE */
6529 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
6530 if( temp > score ) {
6531 score = temp;
6532 }
6533 /* From state DELETE to state DELETE */
6534 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
6535 if( temp > score ) {
6536 score = temp;
6537 }
6538 /* From state START to state DELETE */
6539 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-0,START) + mat->query->seg[i]->transition[GW_START2DELETE];
6540 if( temp > score ) {
6541 score = temp;
6542 }
6543
6544
6545 /* Ok - finished max calculation for DELETE */
6546 /* Add any movement independant score and put away */
6547 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = score;
6548
6549
6550 /* state DELETE is a source for special END */
6551 temp = score + (mat->query->seg[i]->transition[GW_DELETE2END]) + (0) ;
6552 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6553 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6554 }
6555
6556
6557
6558
6559 /* Finished calculating state DELETE */
6560
6561
6562 /* For state INTRON_0 */
6563 /* setting first movement to score */
6564 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6565 /* From state INSERT to state INTRON_0 */
6566 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6567 if( temp > score ) {
6568 score = temp;
6569 }
6570 /* From state INTRON_0 to state INTRON_0 */
6571 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
6572 if( temp > score ) {
6573 score = temp;
6574 }
6575
6576
6577 /* Ok - finished max calculation for INTRON_0 */
6578 /* Add any movement independant score and put away */
6579 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = score;
6580
6581
6582 /* Finished calculating state INTRON_0 */
6583
6584
6585 /* For state INTRON_1 */
6586 /* setting first movement to score */
6587 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6588 /* From state INSERT to state INTRON_1 */
6589 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6590 if( temp > score ) {
6591 score = temp;
6592 }
6593 /* From state INTRON_1 to state INTRON_1 */
6594 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
6595 if( temp > score ) {
6596 score = temp;
6597 }
6598
6599
6600 /* Ok - finished max calculation for INTRON_1 */
6601 /* Add any movement independant score and put away */
6602 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = score;
6603
6604
6605 /* Finished calculating state INTRON_1 */
6606
6607
6608 /* For state INTRON_2 */
6609 /* setting first movement to score */
6610 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6611 /* From state INSERT to state INTRON_2 */
6612 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6613 if( temp > score ) {
6614 score = temp;
6615 }
6616 /* From state INTRON_2 to state INTRON_2 */
6617 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
6618 if( temp > score ) {
6619 score = temp;
6620 }
6621
6622
6623 /* Ok - finished max calculation for INTRON_2 */
6624 /* Add any movement independant score and put away */
6625 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = score;
6626
6627
6628 /* Finished calculating state INTRON_2 */
6629 }
6630
6631
6632 /* Special state START has no special to special movements */
6633
6634
6635 /* Special state END has special to speical */
6636 /* Set score to current score (remember, state probably updated during main loop */
6637 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,END);
6638
6639
6640 /* Source MATCH for state END is not special... already calculated */
6641 /* Source INSERT for state END is not special... already calculated */
6642 /* Source DELETE for state END is not special... already calculated */
6643 /* Source AFTER_MATCH_CODING is a special source for END */
6644 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
6645 if( temp > score )
6646 score = temp;
6647
6648
6649 /* Put back score... (now updated!) */
6650 GeneStretch6_EXPL_SPECIAL(mat,0,j,END) = score;
6651 /* Finished updating state END */
6652
6653
6654
6655
6656 /* Special state BEFORE_MATCH_CODING has special to speical */
6657 /* Set score to current score (remember, state probably updated during main loop */
6658 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING);
6659
6660
6661 /* Source START is a special source for BEFORE_MATCH_CODING */
6662 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,START) + (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
6663 if( temp > score )
6664 score = temp;
6665
6666
6667 /* Source BEFORE_MATCH_CODING is a special source for BEFORE_MATCH_CODING */
6668 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,BEFORE_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
6669 if( temp > score )
6670 score = temp;
6671
6672
6673 /* Put back score... (now updated!) */
6674 GeneStretch6_EXPL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = score;
6675 /* Finished updating state BEFORE_MATCH_CODING */
6676
6677
6678
6679
6680 /* Special state AFTER_MATCH_CODING has special to speical */
6681 /* Set score to current score (remember, state probably updated during main loop */
6682 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,AFTER_MATCH_CODING);
6683
6684
6685 /* Source MATCH for state AFTER_MATCH_CODING is not special... already calculated */
6686 /* Source AFTER_MATCH_CODING is a special source for AFTER_MATCH_CODING */
6687 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
6688 if( temp > score )
6689 score = temp;
6690
6691
6692 /* Put back score... (now updated!) */
6693 GeneStretch6_EXPL_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = score;
6694 /* Finished updating state AFTER_MATCH_CODING */
6695
6696
6697 }
6698 stop_reporting();
6699 return TRUE;
6700 }
6701
6702
6703 /* Function: calculate_dpenv_GeneStretch6(mat,dpenv)
6704 *
6705 * Descrip: This function calculates the GeneStretch6 matrix when in explicit mode, subject to the envelope
6706 *
6707 *
6708 * Arg: mat [UNKN ] GeneStretch6 which contains explicit basematrix memory [GeneStretch6 *]
6709 * Arg: dpenv [UNKN ] Undocumented argument [DPEnvelope *]
6710 *
6711 * Return [UNKN ] Undocumented return value [boolean]
6712 *
6713 */
calculate_dpenv_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)6714 boolean calculate_dpenv_GeneStretch6(GeneStretch6 * mat,DPEnvelope * dpenv)
6715 {
6716 int i;
6717 int j;
6718 int k;
6719 int starti;
6720 int startj;
6721 int endi;
6722 int endj;
6723 int tot;
6724 int num;
6725 int should_calc;
6726
6727
6728 if( mat->basematrix->type != BASEMATRIX_TYPE_EXPLICIT ) {
6729 warn("in calculate_GeneStretch6, passed a non Explicit matrix type, cannot calculate!");
6730 return FALSE;
6731 }
6732
6733
6734 prepare_DPEnvelope(dpenv);
6735 starti = dpenv->starti;
6736 if( starti < 0 )
6737 starti = 0;
6738 startj = dpenv->startj;
6739 if( startj < 0 )
6740 startj = 0;
6741 endi = dpenv->endi;
6742 if( endi > mat->leni )
6743 endi = mat->leni;
6744 endj = dpenv->endj;
6745 if( endj > mat->lenj )
6746 endj = mat->lenj;
6747 tot = (endi-starti) * (endj-startj);
6748 num = 0;
6749
6750
6751 for(j=startj-10;j<endj;j++) {
6752 for(i=1;i<mat->leni;i++) {
6753 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = NEGI;
6754 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = NEGI;
6755 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = NEGI;
6756 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = NEGI;
6757 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = NEGI;
6758 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = NEGI;
6759 }
6760 }
6761 for(j=-10;j<mat->lenj;j++) {
6762 GeneStretch6_EXPL_SPECIAL(mat,i,j,START) = 0;
6763 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = NEGI;
6764 GeneStretch6_EXPL_SPECIAL(mat,i,j,BEFORE_MATCH_CODING) = NEGI;
6765 GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = NEGI;
6766 }
6767
6768
6769 start_reporting("GeneStretch6 Matrix calculation: ");
6770 for(j=startj;j<endj;j++) {
6771 auto int score;
6772 auto int temp;
6773 for(i=starti;i<endi;i++) {
6774 /* Check if is in envelope - code identical to is_in_DPEnvelope, but aggressively inlined here for speed */
6775 should_calc = 0;
6776 for(k=0;k<dpenv->len;k++) {
6777 auto DPUnit * u;
6778 u = dpenv->dpu[k];
6779 switch(u->type) {
6780 case DPENV_RECT :
6781 if( i >= u->starti && j >= u->startj && i <= (u->starti+u->height) && j <= (u->startj+u->length))
6782 should_calc = 1;
6783 break;
6784 case DPENV_DIAG :
6785 if( abs( (i-j) - (u->starti-u->startj)) <= u->height && i+j >= u->starti+u->startj && i+j+u->length >= u->starti+u->startj)
6786 should_calc = 1;
6787 break;
6788 }
6789 if( should_calc == 1 )
6790 break;
6791 }
6792 if( should_calc == 0) {
6793 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = NEGI;
6794 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = NEGI;
6795 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = NEGI;
6796 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = NEGI;
6797 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = NEGI;
6798 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = NEGI;
6799 continue;
6800 }
6801
6802
6803 if( num%1000 == 0 )
6804 log_full_error(REPORT,0,"[%7d] Cells %2d%%%%",num,num*100/tot);
6805 num++;
6806
6807
6808 /* For state MATCH */
6809 /* setting first movement to score */
6810 score = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6811 /* From state INSERT to state MATCH */
6812 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6813 if( temp > score ) {
6814 score = temp;
6815 }
6816 /* From state DELETE to state MATCH */
6817 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6818 if( temp > score ) {
6819 score = temp;
6820 }
6821 /* From state START to state MATCH */
6822 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-3,START) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6823 if( temp > score ) {
6824 score = temp;
6825 }
6826 /* From state BEFORE_MATCH_CODING to state MATCH */
6827 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-3,BEFORE_MATCH_CODING) + (mat->query->seg[i]->transition[GW_START2MATCH]+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)]);
6828 if( temp > score ) {
6829 score = temp;
6830 }
6831 /* From state INTRON_0 to state MATCH */
6832 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
6833 if( temp > score ) {
6834 score = temp;
6835 }
6836 /* From state INTRON_1 to state MATCH */
6837 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
6838 if( temp > score ) {
6839 score = temp;
6840 }
6841 /* From state INTRON_2 to state MATCH */
6842 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_MATCH2MATCH]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
6843 if( temp > score ) {
6844 score = temp;
6845 }
6846 /* From state MATCH to state MATCH */
6847 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-2,MATCH) + mat->gp->transition[GP4_DELETE_1_BASE];
6848 if( temp > score ) {
6849 score = temp;
6850 }
6851 /* From state MATCH to state MATCH */
6852 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-1,MATCH) + mat->gp->transition[GP4_DELETE_2_BASE];
6853 if( temp > score ) {
6854 score = temp;
6855 }
6856 /* From state MATCH to state MATCH */
6857 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-4,MATCH) + mat->gp->transition[GP4_INSERT_1_BASE];
6858 if( temp > score ) {
6859 score = temp;
6860 }
6861 /* From state MATCH to state MATCH */
6862 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-5,MATCH) + mat->gp->transition[GP4_INSERT_2_BASE];
6863 if( temp > score ) {
6864 score = temp;
6865 }
6866
6867
6868 /* Ok - finished max calculation for MATCH */
6869 /* Add any movement independant score and put away */
6870 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
6871 GeneStretch6_EXPL_MATRIX(mat,i,j,MATCH) = score;
6872
6873
6874 /* state MATCH is a source for special END */
6875 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
6876 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6877 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6878 }
6879
6880
6881
6882
6883 /* state MATCH is a source for special AFTER_MATCH_CODING */
6884 temp = score + (mat->query->seg[i]->transition[GW_MATCH2END]) + (0) ;
6885 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) ) {
6886 GeneStretch6_EXPL_SPECIAL(mat,i,j,AFTER_MATCH_CODING) = temp;
6887 }
6888
6889
6890
6891
6892 /* Finished calculating state MATCH */
6893
6894
6895 /* For state INSERT */
6896 /* setting first movement to score */
6897 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,MATCH) + (mat->query->seg[i]->transition[GW_MATCH2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6898 /* From state INSERT to state INSERT */
6899 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,INSERT) + (mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6900 if( temp > score ) {
6901 score = temp;
6902 }
6903 /* From state DELETE to state INSERT */
6904 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-3,DELETE) + (mat->query->seg[i]->transition[GW_DELETE2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6905 if( temp > score ) {
6906 score = temp;
6907 }
6908 /* From state START to state INSERT */
6909 temp = GeneStretch6_EXPL_SPECIAL(mat,i-0,j-3,START) + (mat->query->seg[i]->transition[GW_START2INSERT]+mat->query->seg[i]->insert[CSEQ_GENOMIC_CODON(mat->target,j)]);
6910 if( temp > score ) {
6911 score = temp;
6912 }
6913 /* From state INTRON_0 to state INSERT */
6914 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-6,INTRON_0) + (((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+mat->query->seg[i]->match[CSEQ_GENOMIC_CODON(mat->target,j)])+CSEQ_GENOMIC_3SS(mat->target,(j-3)));
6915 if( temp > score ) {
6916 score = temp;
6917 }
6918 /* From state INTRON_1 to state INSERT */
6919 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-5,INTRON_1) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-2)));
6920 if( temp > score ) {
6921 score = temp;
6922 }
6923 /* From state INTRON_2 to state INSERT */
6924 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-4,INTRON_2) + ((mat->query->seg[i]->transition[GW_INSERT2INSERT]+mat->gp->transition[GP4_INTRON2CDS])+CSEQ_GENOMIC_3SS(mat->target,(j-1)));
6925 if( temp > score ) {
6926 score = temp;
6927 }
6928 /* From state INSERT to state INSERT */
6929 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-2,INSERT) + mat->gp->transition[GP4_DELETE_1_BASE];
6930 if( temp > score ) {
6931 score = temp;
6932 }
6933 /* From state INSERT to state INSERT */
6934 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INSERT) + mat->gp->transition[GP4_DELETE_2_BASE];
6935 if( temp > score ) {
6936 score = temp;
6937 }
6938
6939
6940 /* Ok - finished max calculation for INSERT */
6941 /* Add any movement independant score and put away */
6942 score += CSEQ_GENOMIC_CDSPOT(mat->target,j);
6943 GeneStretch6_EXPL_MATRIX(mat,i,j,INSERT) = score;
6944
6945
6946 /* state INSERT is a source for special END */
6947 temp = score + (mat->query->seg[i]->transition[GW_INSERT2END]) + (0) ;
6948 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6949 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6950 }
6951
6952
6953
6954
6955 /* Finished calculating state INSERT */
6956
6957
6958 /* For state DELETE */
6959 /* setting first movement to score */
6960 score = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,MATCH) + mat->query->seg[i]->transition[GW_MATCH2DELETE];
6961 /* From state INSERT to state DELETE */
6962 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,INSERT) + mat->query->seg[i]->transition[GW_INSERT2DELETE];
6963 if( temp > score ) {
6964 score = temp;
6965 }
6966 /* From state DELETE to state DELETE */
6967 temp = GeneStretch6_EXPL_MATRIX(mat,i-1,j-0,DELETE) + mat->query->seg[i]->transition[GW_DELETE2DELETE];
6968 if( temp > score ) {
6969 score = temp;
6970 }
6971 /* From state START to state DELETE */
6972 temp = GeneStretch6_EXPL_SPECIAL(mat,i-1,j-0,START) + mat->query->seg[i]->transition[GW_START2DELETE];
6973 if( temp > score ) {
6974 score = temp;
6975 }
6976
6977
6978 /* Ok - finished max calculation for DELETE */
6979 /* Add any movement independant score and put away */
6980 GeneStretch6_EXPL_MATRIX(mat,i,j,DELETE) = score;
6981
6982
6983 /* state DELETE is a source for special END */
6984 temp = score + (mat->query->seg[i]->transition[GW_DELETE2END]) + (0) ;
6985 if( temp > GeneStretch6_EXPL_SPECIAL(mat,i,j,END) ) {
6986 GeneStretch6_EXPL_SPECIAL(mat,i,j,END) = temp;
6987 }
6988
6989
6990
6991
6992 /* Finished calculating state DELETE */
6993
6994
6995 /* For state INTRON_0 */
6996 /* setting first movement to score */
6997 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-8,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
6998 /* From state INSERT to state INTRON_0 */
6999 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-8,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
7000 if( temp > score ) {
7001 score = temp;
7002 }
7003 /* From state INTRON_0 to state INTRON_0 */
7004 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_0) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
7005 if( temp > score ) {
7006 score = temp;
7007 }
7008
7009
7010 /* Ok - finished max calculation for INTRON_0 */
7011 /* Add any movement independant score and put away */
7012 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_0) = score;
7013
7014
7015 /* Finished calculating state INTRON_0 */
7016
7017
7018 /* For state INTRON_1 */
7019 /* setting first movement to score */
7020 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-9,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
7021 /* From state INSERT to state INTRON_1 */
7022 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-9,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
7023 if( temp > score ) {
7024 score = temp;
7025 }
7026 /* From state INTRON_1 to state INTRON_1 */
7027 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_1) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
7028 if( temp > score ) {
7029 score = temp;
7030 }
7031
7032
7033 /* Ok - finished max calculation for INTRON_1 */
7034 /* Add any movement independant score and put away */
7035 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_1) = score;
7036
7037
7038 /* Finished calculating state INTRON_1 */
7039
7040
7041 /* For state INTRON_2 */
7042 /* setting first movement to score */
7043 score = GeneStretch6_EXPL_MATRIX(mat,i-0,j-10,MATCH) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
7044 /* From state INSERT to state INTRON_2 */
7045 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-10,INSERT) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+CSEQ_GENOMIC_5SS(mat->target,(j-7)));
7046 if( temp > score ) {
7047 score = temp;
7048 }
7049 /* From state INTRON_2 to state INTRON_2 */
7050 temp = GeneStretch6_EXPL_MATRIX(mat,i-0,j-1,INTRON_2) + (mat->gp->intron[CSEQ_GENOMIC_BASE(mat->target,j)]+mat->gp->transition[GP4_INTRON2INTRON]);
7051 if( temp > score ) {
7052 score = temp;
7053 }
7054
7055
7056 /* Ok - finished max calculation for INTRON_2 */
7057 /* Add any movement independant score and put away */
7058 GeneStretch6_EXPL_MATRIX(mat,i,j,INTRON_2) = score;
7059
7060
7061 /* Finished calculating state INTRON_2 */
7062 }
7063
7064
7065 /* Special state START has no special to special movements */
7066
7067
7068 /* Special state END has special to speical */
7069 /* Set score to current score (remember, state probably updated during main loop */
7070 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,END);
7071
7072
7073 /* Source MATCH for state END is not special... already calculated */
7074 /* Source INSERT for state END is not special... already calculated */
7075 /* Source DELETE for state END is not special... already calculated */
7076 /* Source AFTER_MATCH_CODING is a special source for END */
7077 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->stop->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
7078 if( temp > score )
7079 score = temp;
7080
7081
7082 /* Put back score... (now updated!) */
7083 GeneStretch6_EXPL_SPECIAL(mat,0,j,END) = score;
7084 /* Finished updating state END */
7085
7086
7087
7088
7089 /* Special state BEFORE_MATCH_CODING has special to speical */
7090 /* Set score to current score (remember, state probably updated during main loop */
7091 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING);
7092
7093
7094 /* Source START is a special source for BEFORE_MATCH_CODING */
7095 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,START) + (mat->general_model->start->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
7096 if( temp > score )
7097 score = temp;
7098
7099
7100 /* Source BEFORE_MATCH_CODING is a special source for BEFORE_MATCH_CODING */
7101 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,BEFORE_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
7102 if( temp > score )
7103 score = temp;
7104
7105
7106 /* Put back score... (now updated!) */
7107 GeneStretch6_EXPL_SPECIAL(mat,0,j,BEFORE_MATCH_CODING) = score;
7108 /* Finished updating state BEFORE_MATCH_CODING */
7109
7110
7111
7112
7113 /* Special state AFTER_MATCH_CODING has special to speical */
7114 /* Set score to current score (remember, state probably updated during main loop */
7115 score = GeneStretch6_EXPL_SPECIAL(mat,0,j,AFTER_MATCH_CODING);
7116
7117
7118 /* Source MATCH for state AFTER_MATCH_CODING is not special... already calculated */
7119 /* Source AFTER_MATCH_CODING is a special source for AFTER_MATCH_CODING */
7120 temp = GeneStretch6_EXPL_SPECIAL(mat,0,j - 3,AFTER_MATCH_CODING) + (mat->general_model->general->codon[CSEQ_GENOMIC_CODON(mat->target,j)]) + (0);
7121 if( temp > score )
7122 score = temp;
7123
7124
7125 /* Put back score... (now updated!) */
7126 GeneStretch6_EXPL_SPECIAL(mat,0,j,AFTER_MATCH_CODING) = score;
7127 /* Finished updating state AFTER_MATCH_CODING */
7128
7129
7130 }
7131 stop_reporting();
7132 return TRUE;
7133 }
7134
7135
7136 /* Function: GeneStretch6_alloc(void)
7137 *
7138 * Descrip: Allocates structure: assigns defaults if given
7139 *
7140 *
7141 *
7142 * Return [UNKN ] Undocumented return value [GeneStretch6 *]
7143 *
7144 */
GeneStretch6_alloc(void)7145 GeneStretch6 * GeneStretch6_alloc(void)
7146 {
7147 GeneStretch6 * out; /* out is exported at end of function */
7148
7149
7150 /* call ckalloc and see if NULL */
7151 if((out=(GeneStretch6 *) ckalloc (sizeof(GeneStretch6))) == NULL) {
7152 warn("GeneStretch6_alloc failed ");
7153 return NULL; /* calling function should respond! */
7154 }
7155 out->dynamite_hard_link = 1;
7156 #ifdef PTHREAD
7157 pthread_mutex_init(&(out->dynamite_mutex),NULL);
7158 #endif
7159 out->basematrix = NULL;
7160 out->shatter = NULL;
7161 out->leni = 0;
7162 out->lenj = 0;
7163
7164
7165 return out;
7166 }
7167
7168
7169 /* Function: free_GeneStretch6(obj)
7170 *
7171 * Descrip: Free Function: removes the memory held by obj
7172 * Will chain up to owned members and clear all lists
7173 *
7174 *
7175 * Arg: obj [UNKN ] Object that is free'd [GeneStretch6 *]
7176 *
7177 * Return [UNKN ] Undocumented return value [GeneStretch6 *]
7178 *
7179 */
free_GeneStretch6(GeneStretch6 * obj)7180 GeneStretch6 * free_GeneStretch6(GeneStretch6 * obj)
7181 {
7182 int return_early = 0;
7183
7184
7185 if( obj == NULL) {
7186 warn("Attempting to free a NULL pointer to a GeneStretch6 obj. Should be trappable");
7187 return NULL;
7188 }
7189
7190
7191 #ifdef PTHREAD
7192 assert(pthread_mutex_lock(&(obj->dynamite_mutex)) == 0);
7193 #endif
7194 if( obj->dynamite_hard_link > 1) {
7195 return_early = 1;
7196 obj->dynamite_hard_link--;
7197 }
7198 #ifdef PTHREAD
7199 assert(pthread_mutex_unlock(&(obj->dynamite_mutex)) == 0);
7200 #endif
7201 if( return_early == 1)
7202 return NULL;
7203 if( obj->basematrix != NULL)
7204 free_BaseMatrix(obj->basematrix);
7205 if( obj->shatter != NULL)
7206 free_ShatterMatrix(obj->shatter);
7207 /* obj->query is linked in */
7208 /* obj->target is linked in */
7209 /* obj->gp is linked in */
7210 /* obj->general_model is linked in */
7211
7212
7213 ckfree(obj);
7214 return NULL;
7215 }
7216
7217
7218
7219
7220
7221 #ifdef _cplusplus
7222 }
7223 #endif
7224