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