NCBI C Toolkit Cross Reference

C/demo/cnsgn.c


  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 

source navigation ]   [ diff markup ]   [ identifier search ]   [ freetext search ]   [ file search ]  

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.