|
NCBI Home IEB Home C Toolkit docs C++ Toolkit source browser C Toolkit source browser (2) |
NCBI C Toolkit Cross ReferenceC/demo/cnsgn.c |
source navigation diff markup identifier search freetext search file search |
1 /*
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * File Name: cnsgn.c
27 *
28 * Author(s): John Kuzio
29 *
30 * Version Creation Date: 98-01-01
31 *
32 * $Revision: 6.9 $
33 *
34 * File Description: consign - codon biased orf selection
35 *
36 * Modifications:
37 * --------------------------------------------------------------------------
38 * Date Name Description of modification
39 * --------------------------------------------------------------------------
40 * $Log: cnsgn.c,v $
41 * Revision 6.9 1998/12/18 16:24:53 kuzio
42 * big GIs
43 *
44 * Revision 6.8 1998/11/16 14:34:10 kuzio
45 * flagBoundaryCondition
46 *
47 * Revision 6.7 1998/10/13 17:15:13 kuzio
48 * preliminary Markov
49 *
50 * Revision 6.6 1998/09/28 16:42:18 kuzio
51 * no met orf check
52 *
53 * Revision 6.5 1998/09/16 18:19:27 kuzio
54 * cvs logging
55 *
56 * ==========================================================================
57 */
58
59 #include <ncbi.h>
60 #include <accentr.h>
61 #include <gather.h>
62 #include <tofasta.h>
63
64 #include <toasn3.h> /* needed by tfuns.h */
65 #include <tfuns.h>
66
67 #ifndef NO_BLS_NET
68 #include <blast.h>
69 #include <netblap3.h>
70 #endif
71
72 #include <urkptpf.h>
73 #include <urkepi.h>
74 #include <urkpcc.h>
75 #include <urkcnsrt.h>
76 #include <urkbias.h>
77
78 #define TOP_ERROR 1
79 static char _this_module[] = "cnsgn";
80 #undef THIS_MODULE
81 #define THIS_MODULE _this_module
82 static char _this_file[] = __FILE__;
83 #undef THIS_FILE
84 #define THIS_FILE _this_file
85
86 Uint1 AAForCodon (Uint1Ptr cdn, CharPtr gcode);
87
88 typedef struct gather_Bioseq
89 {
90 Int4 gi;
91 BioseqPtr bsp;
92 } Gather_BS, PNTR Gather_BSPtr;
93
94 Args myargs[] =
95 {
96 { "FastA file", NULL, NULL, NULL, TRUE,
97 'f', ARG_STRING, 0.0, 0, NULL},
98 { "nucleotide GI", "0", "0", "9000000", TRUE,
99 'g', ARG_INT, 0.0, 0, NULL},
100 { "percent stdev shift", "50.0", "0.0", "100.0", TRUE,
101 'd', ARG_FLOAT, 0.0, 0, NULL},
102 { "minimum cluster for global usage", "2", "1", "4096", TRUE,
103 'c', ARG_INT, 0.0, 0, NULL},
104 { "minimum similar biased hits", "4", "1", "4096", TRUE,
105 'h', ARG_INT, 0.0, 0, NULL},
106 #ifndef NO_BLS_NET
107 { "cut off top n blast hits", "0", "0", "32", TRUE,
108 'n', ARG_INT, 0.0, 0, NULL},
109 { "seed with Blast not ProSite search", "FALSE", "TRUE", "FALSE", TRUE,
110 'b', ARG_BOOLEAN, 0.0, 0, NULL},
111 #endif
112 { "post-bias ProSite pattern match", "FALSE", "TRUE", "FALSE", TRUE,
113 'p', ARG_BOOLEAN, 0.0, 0, NULL},
114 { "keep internal ORFs", "FALSE", "TRUE", "FALSE", TRUE,
115 'i', ARG_BOOLEAN, 0.0, 0, NULL},
116 { "minimum nt_orf override", "1800", "1", "3000", TRUE,
117 'o', ARG_INT, 0.0, 0, NULL},
118 { "codon usage scan window", "360", "150", "3000", TRUE,
119 'w', ARG_INT, 0.0, 0, NULL},
120 { "codon usage scan score cutoff", "1.8", "0.0", "10.0", TRUE,
121 's', ARG_FLOAT, 0.0, 0, NULL},
122 { "show Markov statistics for seed ORFs (not used for selection yet)",
123 "FALSE", "TRUE", "FALSE", TRUE,
124 'm', ARG_BOOLEAN, 0.0, 0, NULL}
125 };
126
127 static Boolean GetBioseq (GatherContextPtr gcp)
128 {
129 Gather_BSPtr gbsp;
130 BioseqPtr bsp;
131 Int4 entrezgi;
132
133 if (gcp == NULL)
134 return FALSE;
135 if ((gbsp = (Gather_BSPtr) gcp->userdata) == NULL)
136 return FALSE;
137
138 if (gbsp->bsp != NULL)
139 return TRUE;
140 if (gcp->thistype != OBJ_BIOSEQ)
141 return TRUE;
142 if ((bsp = (BioseqPtr) (gcp->thisitem)) == NULL)
143 return TRUE;
144
145 if (gbsp->gi > 0)
146 {
147 entrezgi = GetGIForSeqId (bsp->id);
148 if (gbsp->gi == entrezgi)
149 gbsp->bsp = bsp;
150 return TRUE;
151 }
152 else
153 {
154 gbsp->bsp = bsp;
155 return TRUE;
156 }
157 }
158
159 static void AddBioSourceToSeqEntry (SeqEntryPtr sep)
160 {
161 BioseqPtr bsp;
162 ValNodePtr descorp;
163 BioSourcePtr biop;
164 OrgNamePtr onp;
165 OrgRefPtr orp;
166
167 if (sep == NULL)
168 return;
169 if ((bsp = sep->data.ptrvalue) == NULL)
170 return;
171
172 descorp = ValNodeNew (bsp->descr);
173 descorp->choice = Seq_descr_source;
174 biop = BioSourceNew ();
175 descorp->data.ptrvalue = biop;
176 orp = OrgRefNew ();
177 biop->org = orp;
178 onp = OrgNameNew ();
179 orp->orgname = onp;
180 biop->genome = 1;
181 onp->gcode = 1;
182 onp->mgcode = 1;
183
184 if (bsp->descr == NULL)
185 bsp->descr = descorp;
186
187 return;
188 }
189
190 static SeqLocPtr SeqLocSave (SeqLocPtr slp, SeqAlignPtr sap, Int4 skiptop)
191 {
192 Int4 loopcount = 0;
193 SeqLocPtr slpt = NULL;
194
195 while (sap != NULL)
196 {
197 loopcount++;
198 if (loopcount > skiptop)
199 break;
200 sap = sap->next;
201 }
202 if (sap != NULL)
203 slpt = SeqLocDup (slp);
204 return slpt;
205 }
206
207 static void NameTagOrfs (SeqLocPtr slp)
208 {
209 SeqIdPtr id, sip;
210 TextSeqIdPtr tsip;
211 Char name[256];
212 Int4 i;
213
214 i = 0;
215 while (slp != NULL)
216 {
217 i++;
218 sprintf (name, "ORF__%ld", (long) i);
219 tsip = TextSeqIdNew ();
220 tsip->name = StringSave (name);
221 sip = ValNodeNew (NULL);
222 sip->choice = SEQID_OTHER;
223 sip->data.ptrvalue = (Pointer) tsip;
224 id = SeqLocId (slp);
225 ValNodeLink (&id, sip);
226 slp = slp->next;
227 }
228 return;
229 }
230
231 static void TransferNameTags (SeqLocPtr slptarget, SeqLocPtr slpsource)
232 {
233 SeqLocPtr slp;
234 Int4 tstart, tstop, sstart, sstop;
235 SeqIdPtr sip, id;
236 TextSeqIdPtr tsip;
237 Char name[256];
238
239 while (slptarget != NULL)
240 {
241 tstart = SeqLocStart (slptarget);
242 tstop = SeqLocStop (slptarget);
243 slp = slpsource;
244 while (slp != NULL)
245 {
246 sstart = SeqLocStart (slp);
247 sstop = SeqLocStop (slp);
248 if (tstart == sstart && tstop == sstop)
249 break;
250 slp = slp->next;
251 }
252 if (slp == NULL)
253 {
254 StrCpy (name, "ORF__?");
255 }
256 else
257 {
258 sip = SeqLocId (slp);
259 if (sip != NULL)
260 {
261 while (sip->next != NULL)
262 sip = sip->next;
263 if (sip->choice == SEQID_OTHER)
264 {
265 tsip = (TextSeqIdPtr) sip->data.ptrvalue;
266 if (tsip->name != NULL)
267 StrCpy (name, tsip->name);
268 else
269 StrCpy (name, "ORF__?");
270 }
271 else
272 {
273 StrCpy (name, "ORF__?");
274 }
275 }
276 else
277 {
278 StrCpy (name, "ORF__?");
279 }
280 }
281 tsip = TextSeqIdNew ();
282 tsip->name = StringSave (name);
283 sip = ValNodeNew (NULL);
284 sip->choice = SEQID_OTHER;
285 sip->data.ptrvalue = (Pointer) tsip;
286 id = SeqLocId (slptarget);
287 ValNodeLink (&id, sip);
288 slptarget = slptarget->next;
289 }
290 return;
291 }
292
293 static void ShowAllFoundOrfs (SeqLocPtr slp)
294 {
295 Int4 start, stop;
296 SeqLocPtr slpt;
297 SeqIdPtr sip;
298 TextSeqIdPtr tsip;
299 Char name[256];
300
301 while (slp != NULL)
302 {
303 if (slp->choice != SEQLOC_MIX)
304 {
305 start = SeqLocStart (slp);
306 stop = SeqLocStop (slp);
307 }
308 else
309 {
310 slpt = (SeqLocPtr) slp->data.ptrvalue;
311 start = SeqLocStart (slpt);
312 stop = SeqLocStop (slpt);
313 }
314 sip = SeqLocId (slp);
315 if (sip != NULL)
316 {
317 while (sip->next != NULL)
318 sip = sip->next;
319 if (sip->choice == SEQID_OTHER)
320 {
321 tsip = (TextSeqIdPtr) sip->data.ptrvalue;
322 if (tsip->name != NULL)
323 StrCpy (name, tsip->name);
324 else
325 StrCpy (name, "ORF__?");
326 }
327 else
328 {
329 StrCpy (name, "ORF__?");
330 }
331 }
332 else
333 {
334 StrCpy (name, "ORF__?");
335 }
336 printf ("%-10s %8ld %8ld\n",
337 name, (long) start+1, (long) stop+1);
338 slp = slp->next;
339 }
340 return;
341 }
342
343 static Boolean ShowKnownFoundOrfs (GatherContextPtr gcp)
344 {
345 Gather_CDSPtr gcdsp;
346 SeqAnnotPtr sap;
347 SeqFeatPtr sfp;
348 SeqLocPtr slp, slpt;
349 BioseqPtr bsp;
350
351 GBQualPtr gbqp;
352 ValNodePtr vnp;
353 DbtagPtr dtp;
354 ObjectIdPtr oip;
355 Char buf[64];
356 Int4 start, stop, stt, stp;
357
358 SeqIdPtr sip;
359 TextSeqIdPtr tsip;
360 Char name[256];
361
362 if (gcp == NULL)
363 return FALSE;
364 if ((gcdsp = (Gather_CDSPtr) gcp->userdata) == NULL)
365 return FALSE;
366 if (gcp->thistype != OBJ_SEQANNOT)
367 return TRUE;
368 if ((sap = (SeqAnnotPtr) (gcp->thisitem)) == NULL)
369 return TRUE;
370
371 while (sap != NULL)
372 {
373 sfp = (SeqFeatPtr) sap->data;
374 while (sfp != NULL)
375 {
376 if (sfp->data.choice == SEQFEAT_CDREGION)
377 {
378 if (sfp->location->choice == SEQLOC_INT)
379 {
380 if ((bsp = BioseqLockById (SeqLocId (sfp->location))) != NULL)
381 {
382 if (SeqLocMatch (gcdsp->slpFound, sfp->location))
383 {
384 slp = sfp->location;
385 if (slp->choice != SEQLOC_MIX)
386 {
387 start = SeqLocStart (slp);
388 stop = SeqLocStop (slp);
389 }
390 else
391 {
392 slpt = (SeqLocPtr) slp->data.ptrvalue;
393 start = SeqLocStart (slpt);
394 stop = SeqLocStop (slpt);
395 }
396 buf[0] = '\0';
397 if (sfp->qual != NULL)
398 {
399 gbqp = sfp->qual;
400 if (gbqp->val != NULL)
401 {
402 StrNCpy (buf, gbqp->val, 48);
403 buf[48] = '\0';
404 }
405 }
406 else if (sfp->comment != NULL)
407 {
408 StrNCpy (buf, sfp->comment, 48);
409 buf[48] = '\0';
410 }
411 else if (sfp->dbxref != NULL)
412 {
413 vnp = sfp->dbxref;
414 if (vnp != NULL)
415 {
416 dtp = vnp->data.ptrvalue;
417 if (dtp != NULL)
418 {
419 oip = dtp->tag;
420 if (oip != NULL)
421 {
422 StrNCpy (buf, oip->str, 48);
423 buf[48] = '\0';
424 }
425 }
426 }
427 }
428 else
429 {
430 sprintf (buf, "ORF");
431 }
432 slp = gcdsp->slpFound;
433 while (slp != NULL)
434 {
435 stt = SeqLocStart (slp);
436 stp = SeqLocStop (slp);
437 if (stt == start && stp == stop)
438 {
439 sip = SeqLocId (slp);
440 if (sip != NULL)
441 {
442 while (sip->next != NULL)
443 sip = sip->next;
444 if (sip->choice == SEQID_OTHER)
445 {
446 tsip = (TextSeqIdPtr) sip->data.ptrvalue;
447 if (tsip->name != NULL)
448 StrCpy (name, tsip->name);
449 else
450 StrCpy (name, "ORF__?");
451 }
452 else
453 {
454 StrCpy (name, "ORF__?");
455 }
456 }
457 else
458 {
459 StrCpy (name, "ORF__?");
460 }
461 break;
462 }
463 slp = slp->next;
464 }
465 if (slp == NULL)
466 StrCpy (name, "ORF__?");
467 printf ("%-10s %-48s %8ld %8ld\n",
468 name, buf, (long) start+1, (long) stop+1);
469 }
470 BioseqUnlock (bsp);
471 }
472 }
473 }
474 sfp = sfp->next;
475 }
476 sap = sap->next;
477 }
478 return TRUE;
479 }
480
481 Int2 Main (void)
482 {
483 Int2 argcount;
484 Boolean flagHaveNet;
485
486 Int4 gi;
487 FILE *fiop;
488 Char fastafile[256];
489 SeqEntryPtr sep;
490 SeqLocPtr slp, slpn, slpg, slpp, slpa;
491 SeqAlignPtr sap, sapn;
492
493 static GatherScope gs;
494 GatherScopePtr gsp;
495 static Gather_BS gbs;
496 Gather_BSPtr gbsp;
497 Gather_CDSPtr gcdsp;
498
499 #ifndef NO_BLS_NET
500 static CharPtr blast_program = "blastp";
501 static CharPtr blast_database = "nr";
502 BlastNet3Hptr bl3hp;
503 BlastResponsePtr bl3rp;
504 BLAST_OptionsBlkPtr bl3op;
505 ValNodePtr vnp1, vnp2;
506 Boolean flagGap;
507 SeqLocPtr slpepi;
508 #endif
509
510 static CharPtr pattern_file = "ncbipros.dat";
511 ComPatPtr cpp, cpph, cp, cph;
512
513 BioseqPtr bspnt;
514 ValNodePtr orfhead, orflist;
515 #ifndef NO_BLS_NET
516 Int4 nt_blast;
517 Int4 skiptop;
518 #endif
519 Int4 nt_pattern, nt_postpattern, nt_orf;
520 Int4 start, stop;
521 Uint1 strand;
522
523 GeneticCodePtr gcp;
524 ValNodePtr vnp;
525 Int2 gcode;
526 Uint1 cdn[3];
527 CharPtr gcd, gcdi;
528 SeqPortPtr spp;
529 Uint1Ptr aaseq;
530 Int4 ntpos, aapos;
531
532 Boolean flagBlastSeed;
533 Boolean flagPostBiasProsite, flagKeepInternalOrfs;
534 FloatHi probcut;
535 Int4 clustmin, findmin;
536 Int4 tripletwindow, frame, ipos, endpos, iscore;
537 FloatHi scorecutoff;
538 FloatHiPtr score;
539
540 #ifndef NO_BLS_NET
541 EpiDatPtr epip;
542 BioseqPtr bspaa;
543 #endif
544 CharPtr aa, cptr;
545 SeqEntryPtr sepaa;
546 ValNodePtr seqhead, seqlist;
547 SeqIdPtr sip;
548 TextSeqIdPtr tsip;
549 Char name[256];
550
551 Boolean flagShowMarkov;
552 FreqPtr frqp;
553 CharPtr bases = "ACGT";
554 CharPtr pattern;
555 Int4 codons, number, resn, res, i, n;
556 Int4Ptr adjcdnf0, adjcdnf1, adjcdnf2;
557 FloatHiPtr adjcdns0, adjcdns1, adjcdns2;
558
559 Int4 argnum, argoff;
560
561 #ifndef NO_BLS_NET
562 argoff = 2;
563 #else
564 argoff = 0;
565 #endif
566
567 argcount = sizeof (myargs) / sizeof (Args);
568 if (!GetArgs ("cnsgn", argcount, myargs))
569 return 1;
570
571 gi = myargs[1].intvalue;
572 if (myargs[0].strvalue != NULL)
573 StrCpy (fastafile, myargs[0].strvalue);
574 else
575 fastafile[0] = '\0';
576
577 if (myargs[1].intvalue == 0 && myargs[0].strvalue == NULL)
578 {
579 ErrPostEx (SEV_ERROR, TOP_ERROR, 100,
580 "No gi or FastA file given : for help : cnsgn -");
581 ErrShow ();
582 exit (1);
583 }
584
585 gsp = &gs;
586 MemSet ((Pointer) gsp, 0, sizeof (GatherScope));
587 MemSet ((Pointer) gsp->ignore, (int) (TRUE),
588 (size_t) (OBJ_MAX * sizeof (Boolean)));
589 gsp->ignore[OBJ_BIOSEQ] = FALSE;
590
591 gbsp = &gbs;
592 gbsp->bsp = NULL;
593
594 gcdsp = GatherCDSNew ();
595
596 if (gi > 0)
597 {
598 if (!EntrezInit ("cnsgn", FALSE, &flagHaveNet))
599 {
600 ErrPostEx (SEV_ERROR, TOP_ERROR, 101,
601 "Entrez init failed");
602 ErrShow ();
603 exit (1);
604 }
605 if (!EntrezBioseqFetchEnable ("cnsgn", TRUE))
606 {
607 ErrPostEx (SEV_ERROR, TOP_ERROR, 101,
608 "Entrez fetch enable failed");
609 ErrShow ();
610 exit (1);
611 }
612 }
613
614 #ifndef NO_BLS_NET
615 flagBlastSeed = (Boolean) myargs[6].intvalue;
616 #else
617 flagBlastSeed = FALSE;
618 #endif
619 argnum = 5;
620 flagPostBiasProsite = (Boolean) myargs[argnum+argoff].intvalue;
621
622 #ifndef NO_BLS_NET
623 if (flagBlastSeed)
624 {
625 if (!BlastInit (blast_program, &bl3hp, &bl3rp))
626 {
627 ErrPostEx (SEV_ERROR, TOP_ERROR, 101,
628 "Blast init failed");
629 ErrShow ();
630 exit (1);
631 }
632 }
633 #endif
634
635 if (!flagBlastSeed)
636 {
637 cpph = cpp = ReadPrositePattern (pattern_file, TRUE, -1, NULL, NULL);
638 if (cpph == NULL)
639 {
640 ErrPostEx (SEV_ERROR, TOP_ERROR, 101,
641 "read failed %s", pattern_file);
642 ErrShow ();
643 exit (1);
644 }
645 }
646 if (flagPostBiasProsite)
647 {
648 cph = cp = ReadPrositePattern (pattern_file, TRUE, 25, NULL, NULL);
649 if (cph == NULL)
650 {
651 ErrPostEx (SEV_ERROR, TOP_ERROR, 101,
652 "read failed %s", pattern_file);
653 ErrShow ();
654 exit (1);
655 }
656 }
657
658 if (gi > 0)
659 {
660 sep = EntrezSeqEntryGet (gi, SEQENTRY_READ_NUC_PROT);
661 }
662 else
663 {
664 if ((fiop = FileOpen (fastafile, "r")) == NULL)
665 {
666 ErrPostEx (SEV_ERROR, TOP_ERROR, 102,
667 "Failed to open FastA file");
668 ErrShow ();
669 exit (1);
670 }
671 sep = FastaToSeqEntry (fiop, TRUE); /* is_na */
672 AddBioSourceToSeqEntry (sep);
673 FileClose (fiop);
674 }
675
676 if (sep == NULL)
677 {
678 ErrPostEx (SEV_ERROR, TOP_ERROR, 103,
679 "No SeqEntry found");
680 ErrShow ();
681 exit (1);
682 }
683
684 gbsp->gi = gi;
685 GatherSeqEntry (sep, (Pointer) gbsp, GetBioseq, (Pointer) gsp);
686
687 if (gbsp->bsp == NULL)
688 {
689 ErrPostEx (SEV_ERROR, TOP_ERROR, 104,
690 "No Bioseq found");
691 ErrShow ();
692 exit (1);
693 }
694 if (!ISA_na (gbsp->bsp->mol))
695 {
696 ErrPostEx (SEV_ERROR, TOP_ERROR, 105,
697 "Not a nucleic acid Bioseq");
698 ErrShow ();
699 exit (1);
700 }
701 bspnt = gbsp->bsp;
702 bspnt->topology = Seq_strand_both;
703
704 slpg = NULL;
705 slpp = NULL;
706 argnum = 7;
707 #ifndef NO_BLS_NET
708 nt_blast = myargs[argnum+argoff].intvalue;
709 #endif
710 nt_pattern = myargs[argnum+argoff].intvalue;
711 nt_postpattern = 150;
712 nt_orf = 150;
713 argnum = 6;
714 flagKeepInternalOrfs = (Boolean) myargs[argnum+argoff].intvalue;
715
716 #ifndef NO_BLS_NET
717 skiptop = myargs[5].intvalue;
718 if (gi > 0 && skiptop == 0)
719 skiptop++;
720 #endif
721
722 /* orflist is returned sorted by size of ORF */
723 orflist = GetOrfList (bspnt, (Int2) nt_orf);
724 orfhead = orflist = ClearNonMetOrfs (orflist);
725
726 vnp = bspnt->descr;
727 gcode = 0;
728 while (vnp != NULL)
729 {
730 if (vnp->choice == Seq_descr_source)
731 {
732 gcode = BioSourceToGeneticCode ((BioSourcePtr) vnp->data.ptrvalue);
733 break;
734 }
735 vnp = vnp->next;
736 }
737 if (gcode == 0 && sep->choice == 2)
738 {
739 vnp = ((BioseqSetPtr) (sep->data.ptrvalue))->descr;
740 while (vnp != NULL)
741 {
742 if (vnp->choice == Seq_descr_source)
743 {
744 gcode = BioSourceToGeneticCode ((BioSourcePtr) vnp->data.ptrvalue);
745 break;
746 }
747 vnp = vnp->next;
748 }
749 }
750 if (gcode == 0)
751 gcode = 1; /* standard */
752 gcp = GeneticCodeFind (gcode, NULL);
753 if (gcp == NULL)
754 exit (1);
755 gcd = gcdi = NULL;
756 vnp = (ValNodePtr) gcp->data.ptrvalue;
757 while (vnp != NULL)
758 {
759 if (vnp->choice == 6) /* sncbieaa */
760 gcdi = (CharPtr) vnp->data.ptrvalue;
761 else if (vnp->choice == 3) /* ncbieaa */
762 gcd = (CharPtr) vnp->data.ptrvalue;
763 vnp = vnp->next;
764 }
765 if (gcdi == NULL)
766 gcdi = gcd;
767 if (gcdi == NULL)
768 {
769 ErrPostEx (SEV_ERROR, TOP_ERROR, 105,
770 "Could not get genetic code for translation");
771 ErrShow ();
772 exit (1);
773 }
774 seqhead = NULL;
775 while (orflist != NULL)
776 {
777 slp = (SeqLocPtr) orflist->data.ptrvalue;
778 if (slp->choice == SEQLOC_MIX)
779 slp = (SeqLocPtr) slp->data.ptrvalue;
780 start = SeqLocStart (slp);
781 stop = SeqLocStop (slp);
782 strand = SeqLocStrand (slp);
783 aa = (CharPtr) MemNew ((size_t) (sizeof(Char)*(stop-start)));
784 cptr = aa;
785 spp = SeqPortNew (bspnt, start, stop, strand, Seq_code_ncbi4na);
786 ntpos = start;
787 aapos = 0;
788 while (ntpos < start+3)
789 {
790 cdn[0] = SeqPortGetResidue (spp);
791 ntpos++;
792 cdn[1] = SeqPortGetResidue (spp);
793 ntpos++;
794 cdn[2] = SeqPortGetResidue (spp);
795 ntpos++;
796 aa[aapos] = AAForCodon (cdn, gcdi);
797 aapos++;
798 }
799 while (ntpos <= stop)
800 {
801 cdn[0] = SeqPortGetResidue (spp);
802 ntpos++;
803 cdn[1] = SeqPortGetResidue (spp);
804 ntpos++;
805 cdn[2] = SeqPortGetResidue (spp);
806 ntpos++;
807 aa[aapos] = AAForCodon (cdn, gcd);
808 aapos++;
809 }
810 aa[aapos] = '\0';
811 sepaa = FastaToSeqBuff (aa, &cptr, FALSE);
812 seqlist = ValNodeNew (NULL);
813 seqlist->data.ptrvalue = (Pointer) sepaa;
814 ValNodeLink (&seqhead, seqlist);
815 SeqPortFree (spp);
816 MemFree (aa);
817 orflist = orflist->next;
818 }
819
820 seqlist = seqhead;
821 orflist = orfhead;
822 while (orflist != NULL)
823 {
824 slp = (SeqLocPtr) orflist->data.ptrvalue;
825 start = SeqLocStart (slp);
826 stop = SeqLocStop (slp);
827 strand = SeqLocStrand (slp);
828 if (flagBlastSeed)
829 {
830 #ifndef NO_BLS_NET
831 if (stop - start + 1 >= nt_blast)
832 {
833 sepaa = (SeqEntryPtr) seqlist->data.ptrvalue;
834 gbsp->gi = 0;
835 gbsp->bsp = NULL;
836 GatherSeqEntry (sepaa, (Pointer) gbsp, GetBioseq, (Pointer) gsp);
837 bspaa = gbsp->bsp;
838 epip = EpiDatNew ();
839 epip->score = PredictEpiBioseq (bspaa, 0, bspaa->length-1, epip);
840 slpepi = FilterEpiBioseq (epip, bspaa, FALSE, FALSE);
841 EpiDatFree (epip);
842 flagGap = TRUE;
843 bl3op = BLASTOptionNew (blast_program, flagGap);
844 if (slpepi == NULL)
845 {
846 bl3op->expect_value = 0.00000001;
847 bl3op->wordsize = 2;
848 }
849 else
850 {
851 bl3op->expect_value = 0.000001;
852 bl3op->wordsize = 3;
853 }
854 sap = BlastBioseqNet (bl3hp, bspaa, blast_program, blast_database,
855 bl3op, &vnp1, &vnp2, NULL);
856 BLASTOptionDelete (bl3op);
857 while (slpepi != NULL)
858 {
859 slpn = slpepi->next;
860 SeqLocFree (slpepi);
861 slpepi = slpn;
862 }
863 SeqLocLink (&slpg, SeqLocSave (slp, sap, skiptop));
864 while (sap != NULL)
865 {
866 sapn = sap->next;
867 SeqAlignFree (sap);
868 sap = sapn;
869 }
870 }
871 #else
872 /* should never get here */
873 {
874 ErrPostEx (SEV_ERROR, TOP_ERROR, 110,
875 "No BLAST services with this compiled format");
876 ErrShow ();
877 exit (1);
878 }
879 #endif
880 }
881 else if ((!flagBlastSeed && stop - start + 1 >= nt_pattern) ||
882 (flagPostBiasProsite && stop - start + 1 >= nt_postpattern))
883 {
884 vnp = bspnt->descr;
885 gcode = 0;
886 while (vnp != NULL)
887 {
888 if (vnp->choice == Seq_descr_source)
889 {
890 gcode = BioSourceToGeneticCode ((BioSourcePtr) vnp->data.ptrvalue);
891 break;
892 }
893 vnp = vnp->next;
894 }
895 if (gcode == 0 && sep->choice == 2)
896 {
897 vnp = ((BioseqSetPtr) (sep->data.ptrvalue))->descr;
898 while (vnp != NULL)
899 {
900 if (vnp->choice == Seq_descr_source)
901 {
902 gcode = BioSourceToGeneticCode ((BioSourcePtr) vnp->data.ptrvalue);
903 break;
904 }
905 vnp = vnp->next;
906 }
907 }
908 if (gcode == 0)
909 gcode = 1; /* standard */
910 gcp = GeneticCodeFind (gcode, NULL);
911 if (gcp == NULL)
912 exit (1);
913 gcd = gcdi = NULL;
914 vnp = (ValNodePtr) gcp->data.ptrvalue;
915 while (vnp != NULL)
916 {
917 if (vnp->choice == 6) /* sncbieaa */
918 gcdi = (CharPtr) vnp->data.ptrvalue;
919 else if (vnp->choice == 3) /* ncbieaa */
920 gcd = (CharPtr) vnp->data.ptrvalue;
921 vnp = vnp->next;
922 }
923 if (gcdi == NULL)
924 gcdi = gcd; /* gcd != NULL ? */
925
926 spp = SeqPortNew (bspnt, start, stop, strand, Seq_code_ncbi4na);
927 aaseq = (Uint1Ptr) MemNew ((size_t)
928 (sizeof (Uint1) * (((stop-start)/3)+2)));
929 ntpos = start;
930 aapos = 0;
931 while (ntpos < start+3)
932 {
933 cdn[0] = SeqPortGetResidue (spp);
934 ntpos++;
935 cdn[1] = SeqPortGetResidue (spp);
936 ntpos++;
937 cdn[2] = SeqPortGetResidue (spp);
938 ntpos++;
939 aaseq[aapos] = AAForCodon (cdn, gcdi);
940 aapos++;
941 }
942 while (ntpos <= stop)
943 {
944 cdn[0] = SeqPortGetResidue (spp);
945 ntpos++;
946 cdn[1] = SeqPortGetResidue (spp);
947 ntpos++;
948 cdn[2] = SeqPortGetResidue (spp);
949 ntpos++;
950 aaseq[aapos] = AAForCodon (cdn, gcd);
951 aapos++;
952 }
953 aaseq[aapos] = '\0';
954
955 if (!flagBlastSeed && stop - start + 1 >= nt_pattern)
956 {
957 cpp = cpph;
958 while (cpp != NULL)
959 {
960 sap = PatternMatch (aaseq, 0, Seq_strand_plus, SeqLocId (slp),
961 cpp, 0, Seq_strand_unknown, FALSE);
962 if (sap != NULL)
963 break;
964 cpp = cpp->nextpattern;
965 }
966 if (sap != NULL)
967 {
968 SeqLocLink (&slpg, SeqLocDup (slp));
969 }
970 while (sap != NULL)
971 {
972 sapn = sap->next;
973 SeqAlignFree (sap);
974 sap = sapn;
975 }
976 }
977 if (flagPostBiasProsite && stop - start + 1 >= nt_postpattern)
978 {
979 cp = cph;
980 while (cp != NULL)
981 {
982 sap = PatternMatch (aaseq, 0, Seq_strand_plus, SeqLocId (slp),
983 cp, 0, Seq_strand_unknown, FALSE);
984 if (sap != NULL)
985 break;
986 cp = cp->nextpattern;
987 }
988 if (sap != NULL)
989 {
990 SeqLocLink (&slpp, SeqLocDup (slp));
991 }
992 while (sap != NULL)
993 {
994 sapn = sap->next;
995 SeqAlignFree (sap);
996 sap = sapn;
997 }
998 }
999
1000 SeqPortFree (spp);
1001 MemFree (aaseq);
1002 }
1003 orflist = orflist->next;
1004 seqlist = seqlist->next;
1005 }
1006
1007 slpa = NULL;
1008 orflist = orfhead;
1009 while (orflist != NULL)
1010 {
1011 slp = (SeqLocPtr) orflist->data.ptrvalue;
1012 SeqLocLink (&slpa, SeqLocDup (slp));
1013 while (slp != NULL)
1014 {
1015 slpn = slp->next;
1016 SeqLocFree (slp);
1017 slp = slpn;
1018 }
1019 orflist->data.ptrvalue = NULL;
1020 orflist = orflist->next;
1021 }
1022 ValNodeFree (orfhead);
1023
1024 gsp->ignore[OBJ_BIOSEQ] = TRUE;
1025 gsp->ignore[OBJ_SEQANNOT] = FALSE;
1026
1027 argnum = 10;
1028 flagShowMarkov = (Boolean) myargs[argnum+argoff].intvalue;
1029
1030 if (flagShowMarkov)
1031 {
1032 printf ("\n!!!!!!!! Markov !!!!!!!!\n\n");
1033
1034 frqp = ConKovTrainCDS (bspnt, slpg);
1035
1036 printf ("Encoding codon triplets (only if non-zero in any frame)\n");
1037 codons = 9;
1038 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1039 number = (Int4) pow (4, codons);
1040 for (i = 0; i < number; i++)
1041 {
1042 resn = i;
1043 for (n = 0; n < codons; n++)
1044 {
1045 res = resn % 4;
1046 pattern[codons-n-1] = bases[res];
1047 resn /= 4;
1048 }
1049 if (frqp->frame0trip[i] != 0 ||
1050 frqp->frame1trip[i] != 0 ||
1051 frqp->frame2trip[i] != 0)
1052 {
1053 printf ("%8d %s %6d %6d %6d\n", i, pattern, frqp->frame0trip[i],
1054 frqp->frame1trip[i],
1055 frqp->frame2trip[i]);
1056 }
1057 }
1058 MemFree (pattern);
1059 printf ("Codon usage in 3 frames of CDS\n");
1060 codons = 3;
1061 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1062 number = (Int4) pow (4, codons);
1063 for (i = 0; i < number; i++)
1064 {
1065 resn = i;
1066 for (n = 0; n < codons; n++)
1067 {
1068 res = resn % 4;
1069 pattern[codons-n-1] = bases[res];
1070 resn /= 4;
1071 }
1072 printf ("%8d %s %6d %6d %6d\n", i, pattern, frqp->frame0cdnobs[i],
1073 frqp->frame1cdnobs[i],
1074 frqp->frame2cdnobs[i]);
1075 }
1076 MemFree (pattern);
1077 printf ("std encoding non-zero triplets in frame 0 (in-frame)\n");
1078 codons = 9;
1079 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1080 number = (Int4) pow (4, codons);
1081 for (i = 0; i < number; i++)
1082 {
1083 resn = i;
1084 for (n = 0; n < codons; n++)
1085 {
1086 res = resn % 4;
1087 pattern[codons-n-1] = bases[res];
1088 resn /= 4;
1089 }
1090 if (frqp->frame0trip[i] != 0)
1091 {
1092 printf ("%8d %s %8.4f %8.4f %8.4f\n", i, pattern, frqp->frame0std[i],
1093 frqp->frame1std[i],
1094 frqp->frame2std[i]);
1095 }
1096 }
1097 MemFree (pattern);
1098 printf ("std encoding non-zero triplets in frame 1 (out of frame)\n");
1099 codons = 9;
1100 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1101 number = (Int4) pow (4, codons);
1102 for (i = 0; i < number; i++)
1103 {
1104 resn = i;
1105 for (n = 0; n < codons; n++)
1106 {
1107 res = resn % 4;
1108 pattern[codons-n-1] = bases[res];
1109 resn /= 4;
1110 }
1111 if (frqp->frame1trip[i] != 0)
1112 {
1113 printf ("%8d %s %8.4f %8.4f %8.4f\n", i, pattern, frqp->frame0std[i],
1114 frqp->frame1std[i],
1115 frqp->frame2std[i]);
1116 }
1117 }
1118 MemFree (pattern);
1119 printf ("std encoding non-zero triplets in frame 2 (out of frame)\n");
1120 codons = 9;
1121 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1122 number = (Int4) pow (4, codons);
1123 for (i = 0; i < number; i++)
1124 {
1125 resn = i;
1126 for (n = 0; n < codons; n++)
1127 {
1128 res = resn % 4;
1129 pattern[codons-n-1] = bases[res];
1130 resn /= 4;
1131 }
1132 if (frqp->frame2trip[i] != 0)
1133 {
1134 printf ("%8d %s %8.4f %8.4f %8.4f\n", i, pattern, frqp->frame0std[i],
1135 frqp->frame1std[i],
1136 frqp->frame2std[i]);
1137 }
1138 }
1139 MemFree (pattern);
1140 printf ("Adjusted 3-frame codon usage\n");
1141 adjcdnf0 = (Int4Ptr) MemNew ((size_t) (sizeof (Int4) * 64));
1142 adjcdnf1 = (Int4Ptr) MemNew ((size_t) (sizeof (Int4) * 64));
1143 adjcdnf2 = (Int4Ptr) MemNew ((size_t) (sizeof (Int4) * 64));
1144 adjcdns0 = (FloatHiPtr) MemNew ((size_t) (sizeof (FloatHi) * 64));
1145 adjcdns1 = (FloatHiPtr) MemNew ((size_t) (sizeof (FloatHi) * 64));
1146 adjcdns2 = (FloatHiPtr) MemNew ((size_t) (sizeof (FloatHi) * 64));
1147 codons = 9;
1148 number = (Int4) pow (4, codons);
1149 res = (Int4) pow (4, 3);
1150 for (i = 0; i < number; i++)
1151 {
1152 if (frqp->frame0std[i] >= 2.5)
1153 {
1154 n = i;
1155 resn = n % res;
1156 n /= res;
1157 resn = n % res;
1158 adjcdnf0[resn] += frqp->frame0trip[i];
1159 }
1160 if (frqp->frame1std[i] >= 2.5)
1161 {
1162 n = i;
1163 resn = n % res;
1164 n /= res;
1165 resn = n % res;
1166 adjcdnf1[resn] += frqp->frame1trip[i];
1167 }
1168 if (frqp->frame2std[i] >= 2.5)
1169 {
1170 n = i;
1171 resn = n % res;
1172 n /= res;
1173 resn = n % res;
1174 adjcdnf2[resn] += frqp->frame2trip[i];
1175 }
1176 }
1177 codons = 3;
1178 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1179 number = (Int4) pow (4, codons);
1180 for (i = 0; i < number; i++)
1181 {
1182 resn = i;
1183 for (n = 0; n < codons; n++)
1184 {
1185 res = resn % 4;
1186 pattern[codons-n-1] = bases[res];
1187 resn /= 4;
1188 }
1189 printf ("%8d %s %6d %6d %6d\n", i, pattern, adjcdnf0[i],
1190 adjcdnf1[i],
1191 adjcdnf2[i]);
1192 }
1193 MemFree (pattern);
1194 codons = 3;
1195 pattern = (CharPtr) MemNew ((size_t) (sizeof (Char) * (codons+1)));
1196 number = (Int4) pow (4, codons);
1197 for (i = 0; i < number; i++)
1198 {
1199 resn = i;
1200 for (n = 0; n < codons; n++)
1201 {
1202 res = resn % 4;
1203 pattern[codons-n-1] = bases[res];
1204 resn /= 4;
1205 }
1206 if (adjcdnf0[i] == 0)
1207 adjcdnf0[i] = 1;
1208 if (adjcdnf1[i] == 0)
1209 adjcdnf1[i] = 1;
1210 if (adjcdnf2[i] == 0)
1211 adjcdnf2[i] = 1;
1212 adjcdns0[i] = (FloatHi) (frqp->frame0cdnobs[i] - adjcdnf0[i]) /
1213 (FloatHi) sqrt ((FloatHi) adjcdnf0[i]);
1214 adjcdns1[i] = (FloatHi) (frqp->frame1cdnobs[i] - adjcdnf1[i]) /
1215 (FloatHi) sqrt ((FloatHi) adjcdnf1[i]);
1216 adjcdns2[i] = (FloatHi) (frqp->frame2cdnobs[i] - adjcdnf2[i]) /
1217 (FloatHi) sqrt ((FloatHi) adjcdnf2[i]);
1218 printf ("%8d %s %8.4f %8.4f %8.4f\n", i, pattern, adjcdns0[i],
1219 adjcdns1[i],
1220 adjcdns2[i]);
1221 }
1222 MemFree (pattern);
1223 MemFree (adjcdnf0);
1224 MemFree (adjcdnf1);
1225 MemFree (adjcdnf2);
1226 MemFree (adjcdns0);
1227 MemFree (adjcdns1);
1228 MemFree (adjcdns2);
1229 FreqFree (frqp);
1230 }
1231
1232 printf ("\n!!!!!!!! All ORFs !!!!!!!!\n\n");
1233 SortByLocOrfs (&slpa);
1234 NameTagOrfs (slpa);
1235 gcdsp->slpAll = slpa;
1236 ShowAllFoundOrfs (slpa);
1237
1238 if (gi > 0)
1239 {
1240 printf ("\n!!!!!!!! All Known ORFs !!!!!!!!\n\n");
1241 gcdsp->slpFound = slpa;
1242 GatherSeqEntry (sep, (Pointer) gcdsp, ShowKnownFoundOrfs, (Pointer) gsp);
1243 gcdsp->slpFound = NULL;
1244 }
1245
1246 if (flagBlastSeed)
1247 {
1248 printf ("\n!!!!!! Seed Blast ORFs !!!!!!\n\n");
1249 }
1250 else
1251 {
1252 printf ("\n!!!!!! Seed Pattern ORFs !!!!!!\n\n");
1253 }
1254 SortByLocOrfs (&slpg);
1255 TransferNameTags (slpg, slpa);
1256 ShowAllFoundOrfs (slpg);
1257
1258 probcut = myargs[2].floatvalue / 100.0;
1259 clustmin = myargs[3].intvalue;
1260 findmin = myargs[4].intvalue;
1261
1262 slp = FindSimilarBiasOrfs (sep, probcut, clustmin, findmin, slpg, slpa);
1263
1264 /* add blast or pattern hits to found list */
1265 SeqLocLink (&slp, slpg);
1266 slpg = NULL;
1267 /* add any postbias pattern hits to found list */
1268 SeqLocLink (&slp, slpp);
1269 slpp = NULL;
1270
1271 UniqueOrfs (&slp);
1272 SortByLocOrfs (&slp);
1273
1274 if (!flagKeepInternalOrfs)
1275 RemoveInternalOrfs (&slp);
1276
1277 printf ("\n!! Seed ORFs plus ORFs With CU Bias To Seed ORFs !\n\n");
1278 TransferNameTags (slp, slpa);
1279 gcdsp->slpHit = slp;
1280 ShowAllFoundOrfs (slp);
1281
1282 if (gi > 0)
1283 {
1284 gcdsp->slpFound = slp;
1285 printf ("\n!!!!!!!!! Found ORFs That Are Known ORFs !!!!!!!!!\n\n");
1286 GatherSeqEntry (sep, (Pointer) gcdsp, ShowKnownFoundOrfs, (Pointer) gsp);
1287 gcdsp->slpFound = NULL;
1288 }
1289
1290 printf ("\n!!!! Six Frame Codon Usage !!!!\n");
1291 argnum = 8;
1292 tripletwindow = myargs[argnum+argoff].intvalue;
1293 argnum = 9;
1294 scorecutoff = myargs[argnum+argoff].floatvalue;
1295
1296 gcdsp->tableGlobal = CodonTableFromSeqLoc (bspnt, slp);
1297 endpos = bspnt->length - 3 - tripletwindow;
1298 for (frame = 0; frame < 3; frame++)
1299 {
1300 score = BiasScoreBioseq (bspnt, gcdsp->tableGlobal, tripletwindow,
1301 frame, Seq_strand_plus);
1302 printf ("\nplus strand -- frame %ld\n\n", (long) (frame+1));
1303 iscore = 0;
1304 for (ipos = frame; ipos < endpos; ipos += 3)
1305 {
1306 if (score[iscore] <= scorecutoff)
1307 {
1308 slp = gcdsp->slpAll;
1309 while (slp != NULL)
1310 {
1311 if (SeqLocStrand (slp) == Seq_strand_plus)
1312 {
1313 start = SeqLocStart (slp);
1314 stop = SeqLocStop (slp);
1315 if (ipos >= start && ipos <= stop)
1316 break;
1317 }
1318 slp = slp->next;
1319 }
1320 if (slp == NULL)
1321 {
1322 StrCpy (name, "-");
1323 }
1324 else
1325 {
1326 sip = SeqLocId (slp);
1327 if (sip != NULL)
1328 {
1329 while (sip->next != NULL)
1330 sip = sip->next;
1331 if (sip->choice == SEQID_OTHER)
1332 {
1333 tsip = (TextSeqIdPtr) sip->data.ptrvalue;
1334 if (tsip->name != NULL)
1335 StrCpy (name, tsip->name);
1336 else
1337 StrCpy (name, "-");
1338 }
1339 else
1340 {
1341 StrCpy (name, "-");
1342 }
1343 }
1344 else
1345 {
1346 StrCpy (name, "-");
1347 }
1348 }
1349 printf ("%8ld %8.5f %-10s\n", (long) (ipos+1), score[iscore], name);
1350 }
1351 iscore++;
1352 }
1353 MemFree (score);
1354 }
1355 for (frame = 0; frame < 3; frame++)
1356 {
1357 score = BiasScoreBioseq (bspnt, gcdsp->tableGlobal, tripletwindow,
1358 frame, Seq_strand_minus);
1359 printf ("\nminus strand -- frame %ld\n\n", (long) (frame+1));
1360 iscore = 0;
1361 for (ipos = frame; ipos < endpos; ipos += 3)
1362 {
1363 if (score[iscore] <= scorecutoff)
1364 {
1365 slp = gcdsp->slpAll;
1366 while (slp != NULL)
1367 {
1368 if (SeqLocStrand (slp) == Seq_strand_minus)
1369 {
1370 start = SeqLocStart (slp);
1371 stop = SeqLocStop (slp);
1372 if (ipos >= start && ipos <= stop)
1373 break;
1374 }
1375 slp = slp->next;
1376 }
1377 if (slp == NULL)
1378 {
1379 StrCpy (name, "-");
1380 }
1381 else
1382 {
1383 sip = SeqLocId (slp);
1384 if (sip != NULL)
1385 {
1386 while (sip->next != NULL)
1387 sip = sip->next;
1388 if (sip->choice == SEQID_OTHER)
1389 {
1390 tsip = (TextSeqIdPtr) sip->data.ptrvalue;
1391 if (tsip->name != NULL)
1392 StrCpy (name, tsip->name);
1393 else
1394 StrCpy (name, "-");
1395 }
1396 else
1397 {
1398 StrCpy (name, "-");
1399 }
1400 }
1401 else
1402 {
1403 StrCpy (name, "-");
1404 }
1405 }
1406 printf ("%8ld %8.5f %-10s\n", (long) (ipos+1), score[iscore], name);
1407 }
1408 iscore++;
1409 }
1410 MemFree (score);
1411 }
1412
1413 seqlist = seqhead;
1414 while (seqlist != NULL)
1415 {
1416 seqlist->data.ptrvalue =
1417 (Pointer) SeqEntryFree ((SeqEntryPtr) seqlist->data.ptrvalue);
1418 seqlist = seqlist->next;
1419 }
1420 ValNodeFree (seqhead);
1421 GatherCDSFree (gcdsp);
1422 SeqEntryFree (sep);
1423
1424 if (gi > 0)
1425 {
1426 EntrezBioseqFetchDisable ();
1427 EntrezFini ();
1428 }
1429 #ifndef NO_BLS_NET
1430 if (flagBlastSeed)
1431 BlastFini (bl3hp);
1432 #endif
1433 if (!flagBlastSeed)
1434 ComPatFree (cpph);
1435 if (flagPostBiasProsite)
1436 ComPatFree (cph);
1437
1438 return 0;
1439 }
1440 |
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more information. |