This file is indexed.

/usr/include/ncbi/spidey.h is in libncbi6-dev 6.1.20120620-8.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
/* ===========================================================================
*
*                            PUBLIC DOMAIN NOTICE
*            National Center for Biotechnology Information (NCBI)
*
*  This software/database is a "United States Government Work" under the
*  terms of the United States Copyright Act.  It was written as part of
*  the author's official duties as a United States Government employee and
*  thus cannot be copyrighted.  This software/database is freely available
*  to the public for use. The National Library of Medicine and the U.S.
*  Government do not place any restriction on its use or reproduction.
*  We would, however, appreciate having the NCBI and the author cited in
*  any work or product based on this material.
*
*  Although all reasonable efforts have been taken to ensure the accuracy
*  and reliability of the software and data, the NLM and the U.S.
*  Government do not and cannot warrant the performance or results that
*  may be obtained by using this software or data. The NLM and the U.S.
*  Government disclaim all warranties, express or implied, including
*  warranties of performance, merchantability or fitness for any particular
*  purpose.
*
* ===========================================================================
*
* File Name:  spidey.h
*
* Author:  Sarah Wheelan
*
* Version Creation Date:   5/01
*
* $Revision: 6.19 $
*
* File Description: mrna-to-genomic alignment algorithms and functions
*
* Modifications:
* --------------------------------------------------------------------------
* $Log: spidey.h,v $
* Revision 6.19  2004/03/25 21:20:03  kskatz
* All SPI_is_acceptor_* functions have been corrected: 'N' no longer contributes to nor subtracts from the score, log odds are calculated and the scores added; they are however all antilogged because there are too many places in the code where the score is expected to be between 0 and 1.  Also, corrected sequence frequency determination in SPI_is_acceptor_user and SPI_is_donor_user, as well as correcting for 'N'. Finally, and this all began with, I added matrices for Dictyostelium - command line -r -m
*
* Revision 6.18  2003/04/04 19:42:56  kskatz
* Added a new command line option (-R) to allow external users to point spidey to a repeat database that it can pass on to blast for filtering repeats
*
* Revision 6.17  2002/10/02 16:12:54  kskatz
* Added a new option to SPI_Options (bigintron_size) that holds a user-supplied maximum size (default = 220000) for introns and requires the option (bool) bigintron to be set to 'TRUE'; The functions affected are SPI_mRNAPtr SPI_AdjustForSplice(), SPI_is_consistent(), and SPI_FindPiece(); note that the default for bigintron_size is not set in SPI_OptionsNew() (yet)
*
* Revision 6.16  2002/06/27 11:53:33  wheelan
* additions to structures to support off-by-one bug fixes and printing of the cds length
*
* Revision 6.15  2002/05/07 18:42:53  wheelan
* changes to support user-defined splice matrices
*
* Revision 6.14  2002/04/16 17:54:03  wheelan
* increased XLINTRON sizes
*
* Revision 6.13  2002/04/04 17:17:24  wheelan
* changed endfuzz to 8
*
* Revision 6.12  2002/01/30 19:08:51  wheelan
* better support for revcomp
*
* Revision 6.11  2001/12/18 18:00:18  wheelan
* add strand
*
* Revision 6.10  2001/11/20 12:13:28  wheelan
* made SPI_GetProteinFrommRNA EXTERN
*
* Revision 6.9  2001/11/05 16:14:53  wheelan
* added option to print multiple alignment to a file
*
* Revision 6.8  2001/10/04 12:34:07  wheelan
* added bigintron option
*
* Revision 6.7  2001/10/03 14:19:29  wheelan
* include new alignment manager
*
* Revision 6.6  2001/09/04 13:46:37  wheelan
* made SPI_RemoveInconsistentAlnsFromSet and SPI_flip_sa_list extern
*
* Revision 6.5  2001/08/24 13:44:35  wheelan
* changed printaln to Int4
*
* Revision 6.4  2001/08/06 16:49:25  wheelan
* changed revcompthresh parameter to 55 from 65
*
* Revision 6.3  2001/07/11 17:57:07  wheelan
* added typedefs for multiple alignments
*
* Revision 6.2  2001/07/10 16:44:42  wheelan
* added functions to make a multiple alignment
*
* Revision 6.1  2001/05/24 16:27:58  wheelan
* initial checkin
*
*
* ==========================================================================
*/

#ifndef _SPIDEY_
#define _SPIDEY_

#include <ncbi.h>
#include <alignmgr2.h>
#include <actutils.h>
#include <dotseq.h>

#undef NLM_EXTERN
#ifdef NLM_IMPORT
#define NLM_EXTERN NLM_IMPORT
#else
#define NLM_EXTERN extern
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define SPI_DROPOFF  50
#define SPI_GAPOPEN  10
#define SPI_GAPEXTEND  3
#define SPI_PENALTY   -5

#define SPI_MINBADEXON  6
#define SPI_MAXBADEXON  11
#define SPI_BADEXONTHRESH  40

#define SPI_MAXSEQPORT  20000

#define SPI_SPLICETHRESH  0.0001

#define SPI_MAXGAP  4 /* maximum gap allowed in SPI_ExtendAlnAlg */

#define SPI_REVCOMPTHRESH  55 /* minimum allowed % of splice sites present */
                              /* If model is < minimum, then the reverse   */
                              /* complement will be checked.               */
#define SPI_COVERDIFF  15 /* amount the %coverage is allowed to drop in the */
                          /* reverse complement models                      */
#define SPI_MISMTCHDIFF  10 /* amount the %mismatch is allowed to rise in */
                            /* the reverse complement models              */

#define SPI_TEENYEXON  6 /* smallest exon to look for */

#define SPI_ENDFUZZ  8 /* if the overall alignment misses less than or equal */
                        /* to this amount on the ends of the mRNA, the        */
                        /* alignment will be extended.                        */

#define SPI_MINBLASTSIZE  7 /* smallest bit that can go into BlastTwoSequencesByLoc */

#define SPI_MINPOLYASIZE  5 /* minimum #A's to call a poly(A)+ tail */
#define SPI_MAXPOLYASIZE  200 /* maximum number of nucleotides to bother */
                              /* scanning for a tail                     */
#define SPI_LINKERSIZE  8 /* maximum number of non-A's to allow on end of tail */

#define SPI_INTRONSIZE  35000 /* used only to decide whether an mRNA may have fallen */
                              /* off a contig */
#define SPI_INTRONSIZEXL  220000 /* if spot->bigintron TRUE, use this */

#define SPI_BIGINTRON  100000 /* max size of 1st and last introns, if 1st and last exons */
                              /* have to be found by SPI_FindPiece. */
#define SPI_BIGINTRONXL  500000 /* if spot->bigintron TRUE, use this */

#define SPI_PADDING  0 /* how much each region is padded on each side */

#define SPI_NUMSITES  4 /* number of alternative splice sites to consider per exon */

#define SPI_BIGOVERLAP  12 /* above this cutoff, the overlap won't be doubled */
                           /* to get the window in which to search for splice sites */

#define SPI_EXONMERGESIZE  15 /* exons closer than this to each other will get merged */

#define SPI_FLUFF  16 /* amount to search on either side of splice site for interspecies comp. */

#define SPI_UNKNOWN     0
#define SPI_CONSISTENT  1
#define SPI_IMPOSSIBLE  2
#define SPI_DONE1       3
#define SPI_DONE2       4

#define SPI_FUZZ  20  /* amount of overlap/underlap allowed to consider hits consistent*/

#define SPI_LEFT     0
#define SPI_RIGHT    1
#define SPI_BOTH     2
#define SPI_NEITHER  3

#define SPI_REVERSEUNKNOWN  0
#define SPI_REVERSE         1
#define SPI_NOTREVERSED     2

#define SPI_MULT     1
#define SPI_NOTMULT  2

#define SPI_LINE 60 /* line length for text alignment output -- must be more than SPI_PSPLICE */
#define SPI_PSPLICE 10 /* length of genomic sequence to print before and after each exon */
#define SPI_SPACER 12 /* space at the beginning of each printed alignment line */

#define SPI_NUMCOLS  8 /* number of columns in the tab-delimited file of position info for draft */

/* defines for organisms (determines which splice matrices to use) */
#define SPI_VERTEBRATE  1
#define SPI_FLY         2
#define SPI_PLANT       3
#define SPI_CELEGANS    4
#define SPI_DICTY       5

/* return codes for progress callback */
#define SPI_START     1
#define SPI_PROGRESS  2
#define SPI_FINISHED  3

typedef struct spi_bsinfo {
   BioseqPtr  bsp;
   SeqLocPtr  lcaseloc;
   struct spi_bsinfo PNTR next;
} SPI_bsinfo, PNTR SPI_bsinfoPtr;

typedef struct spi_alninfo {
   FloatHi      bit_score;
   SeqAlignPtr  sap;
   Int2         used;
} SPI_AlnInfo, PNTR SPI_AlnInfoPtr;

typedef struct spi_ival {
   Int4         n;
   SeqAlignPtr  sap;
   Int4         gstart;
   Int4         gstop;
   Int4         mstart;
   Int4         mstop;
   Uint2        strand;
   Int2         used;
   Int4         score;
   struct spi_ival PNTR next;
} SPI_Ival, PNTR SPI_IvalPtr;

typedef struct spiexonprof {
   Int4     exonnum;
   Int4Ptr  mismatches;
   Int4     nummismatches;
   struct spiexonprof PNTR next;
} SPI_ExonProf, PNTR SPI_ExonProfPtr;

typedef struct spi_mrna {
   Uint1            strand;
   Boolean          revcomp;
   Int4             numexons;
   FloatHiPtr       exonid; /* percent identity per exon */
   Int4Ptr          exongaps;  /* number of gaps in each exon alignment */
   Uint1Ptr         splicedon;  /* for each exon, is splice donor site (right) present? */
   Uint1Ptr         spliceacc;  /* for each exon, is splice acceptor site (left) present? */
   Uint1            missingends;  /* SPI_LEFT, SPI_RIGHT, SPI_BOTH, or SPI_NEITHER */
   Int4Ptr          mstarts; /* exon starts, in mRNA coordinates */
   Int4Ptr          mstops;  /* exon stops, in mRNA coordinates */
   Int4Ptr          gstarts; /* exon starts, in genomic coordinates */
   Int4Ptr          gstops;  /* exon stops, in genomic coordinates */
   SeqAlignPtr      PNTR saps; /*indexed alignments for exons */
   Int4             mRNAcoverage; /* percentage of the mRNA contained in this alignment */
   FloatHi          mismatch; /* percent mismatches in entire alignment */
   Int4             polyAtail; /* if +, length of polyA tail that doesn't align */
                               /* if negative, length of polyAtail that does align */
   Boolean          fallsoff; /* does this mRNA fall of the end of the contig? */
   SeqAlignPtr      parent; /* parent of exon alignment set */
   SeqAlignPtr      continuous; /* continuous alignment over whole gene */
   SPI_ExonProfPtr  epp; /* positions of mismatches (for printing) */
   CharPtr          protein; /* sequence of the protein translated from the mRNA */
   Int4             transstart; /* translation start position */
   Boolean          holes; /* are there holes in the mRNA alignment? */
   struct spi_mrna PNTR next;
} SPI_mRNA, PNTR SPI_mRNAPtr;

typedef struct spi_utrinfo {
   FloatHi  left;
   FloatHi  right;
} SPI_UTRInfo, PNTR SPI_UTRInfoPtr;

typedef struct spi_seq {
   CharPtr    seq;
   Int4       start;
} SPI_Seq, PNTR SPI_SeqPtr;

typedef struct spi_mult {
   SeqAlignPtr  PNTR exons;
   Int4         numexons;
} SPI_Mult, PNTR SPI_MultPtr;

typedef struct spi_reginfo {
   Boolean      revcomp;
   Int4         gstart;
   Int4         gstop;
   Int4         mstart;
   Int4         mstop;
   Int4         mlen;
   Uint1        strand;
   SPI_mRNAPtr  smp;
   Int4         coverage;
   Int4         score;
   Int4         polyAtail; /* length of polyA(+) tail that doesn't align */
   Boolean      fallsoff; /* this mRNA may fall off the end of the genomic sequence */
   SPI_UTRInfo  utr; /* if this is a CDS, UTR %ids are here */
   SPI_MultPtr  smu;
   Boolean      revcmp_try;
   struct spi_reginfo PNTR next;
} SPI_RegionInfo, PNTR SPI_RegionInfoPtr;

typedef struct spi_tinyinfo {
   Int4  start;
   Int4  n;
   struct spi_tinyinfo PNTR next;
} SPI_TinyInfo, PNTR SPI_TinyInfoPtr;

typedef struct spi_pos {
   Int4  lgroup;
   Int4  group;
   Int4  order;
} SPI_Pos, PNTR SPI_PosPtr;

typedef struct spi_fragmentptr {
   Int4         start;
   Int4         stop;
   Int4         fragnum; /* original fragment number, for reference */
   SeqLocPtr    slp;
   SPI_PosPtr   position_orig;  /* the position info (if any) given for this fragment */
   Int4         position_mrna;  /* after alignment to mRNA, where is this fragment */
   Int4         reverse; /* is this fragment reversed with respect to the mRNA */
   SeqAlignPtr  sap;  /* indexed parent of the alignments for this fragment to the mRNA */
   SPI_mRNAPtr  smp; /* info for the alignment to this fragment */
   Uint1        donor;  /* does this (set of) alignment(s) have a donor site to the next frag? */
   Uint1        acceptor;  /* acceptor site ? */
   struct spi_fragmentptr PNTR next;
} SPI_Frag, PNTR SPI_FragPtr;

typedef struct spi_fragherd {
   Int4         polyAtail; /* length of polyAtail on the mRNA */
   Int4         numfrags;
   SPI_FragPtr  PNTR sfparray;
} SPI_FragHerd, PNTR SPI_FragHerdPtr;

typedef struct spi_fraginfo {
   Int4        mrnastart;
   Int4        mrnastop;
   Uint1       strand;
   Int4        sfpnum;
   Int4        fragnum;
   SPI_PosPtr  position_orig;
} SPI_FragInfo, PNTR SPI_FragInfoPtr;

typedef struct spi_mRNAtoherd {
   BioseqPtr        bsp_mrna; /* mrna sequence */
   Int4             numpieces;
   Int4             numexons;
   Int4Ptr          exons; /* array which specifies which pieces go with which exons */
   Int4Ptr          fragments; /* array of fragment numbers, one per piece */
   Int4Ptr          sfpnum; /* array of sfp numbers, one for each piece */
   Uint1Ptr         fallsoff; /* for each piece, does it fall off fragment? */
   Uint1Ptr         strands; /* genomic strand, one per piece */
   Int4Ptr          mstarts; /* mrna starts, one per piece */
   Int4Ptr          mstops;  /* mrna stops, one per piece */
   Int4Ptr          gstarts; /* genomic starts, one per piece */
   Int4Ptr          gstops; /* genomic stops, one per piece */
   Int4Ptr          lens; /* length of alignment for each piece */
   Int4Ptr          pmismatch; /* number of mismatches per piece */
   Int4Ptr          pgaps; /* number of gaps in alignment for each piece */
   FloatHiPtr       exonid; /* percent identity per exon */
   Int4Ptr          exongaps; /* number of gaps per exon */
   Uint1Ptr         splicedon;  /* for each piece, is splice donor site (right) present? */
   Uint1Ptr         spliceacc;  /* for each piece, is splice acceptor site (left) present? */
   Uint1            missingends;  /* SPI_LEFT, SPI_RIGHT, SPI_BOTH, or SPI_NEITHER */
   SeqAlignPtr      PNTR saps; /* indexed alignments, one for each piece (not exon) */
   FloatHi          mRNAcoverage; /* percentage of the mRNA contained in this alignment */
   Boolean          gaps; /* are there internal pieces missing from the mRNA alignment? */
   FloatHi          mismatch; /* percent mismatches in entire alignment */
   SPI_ExonProfPtr  epp;
   struct spi_mRNAtoherd PNTR next;
} SPI_mRNAToHerd, PNTR SPI_mRNAToHerdPtr;

typedef struct spi_exonherdinfo {
   Int4         fragmentnum;
   SeqAlignPtr  sap;
   Uint1        donor;
   Uint1        acceptor;
   Int4         sfpnum;
   struct spi_exonherdinfo PNTR next;
} SPI_ExonHerdInfo, PNTR SPI_ExonHerdInfoPtr;

typedef struct spi_splice {
   Int4     i;
   FloatHi  score;
   FloatHi  score2;
   Int4     diff;
} SPI_Splice, PNTR SPI_SplicePtr;

typedef struct spi_fragsplice {
   SPI_SplicePtr  splarray;
   Int4           spllen;
   Int4           boundary;
} SPI_FragSpl, PNTR SPI_FragSplPtr;

typedef struct spi_progress {
   Int4  percentdone;
   Int4  returncode;
} SPI_Progress, PNTR SPI_ProgressPtr;

typedef Boolean (LIBCALLBACK *SPI_ProgressCallback)(SPI_ProgressPtr progress);

typedef struct spi_spliceinfo {
   FloatHi  a;
   FloatHi  c;
   FloatHi  g;
   FloatHi  t;
   struct spi_spliceinfo PNTR next;
} SPI_SpliceInfo, PNTR SPI_SpliceInfoPtr;

typedef struct spi_options {
    FloatHi               firstpasseval;
    FloatHi               secpasseval;
    FloatHi               thirdpasseval;
    Int4                  organism;
    Int4                  numreturns;
    Int4                  idcutoff;
    Int4                  lencutoff;
    Int4                  printaln;
    Boolean               interspecies;
    Boolean               printasn;
    SeqAlignPtr           PNTR sap_head;
    CharPtr               draftfile;
    CharPtr               repeat_db_file; /* path to repeat db to use */
    SeqLocPtr             lcaseloc;
    Boolean               fetchcds;
    Boolean               printheader;
    Boolean               ace;
    SPI_ProgressCallback  callback;
    Int4                  from; /* to restrict genomic interval */
    Int4                  to;   /* " */
    Boolean               makemult; /* make a multiple alignment from numerous returns? */
    Boolean               bigintron; 
    Int4                  bigintron_size; /*added by KSK */
    Uint1                 strand; /* to restrict the search to one genomic strand */
    Boolean               revcomp;
    Int4                  dsplicejunc;
    SPI_SpliceInfoPtr     dssp_head;
    Int4                  asplicejunc;
    SPI_SpliceInfoPtr     assp_head;
} SPI_Options, PNTR SPI_OptionsPtr;
    
typedef struct spi_n {
   Int4  n1;
   Int4  n2;
   Int4  n3;
   Int4  n4;
   Int4  n5;
   Int4  n6;
} SPI_n, PNTR SPI_nPtr;

typedef struct spi_block {
   SeqAlignPtr  sap;
   Int4         from_g;
   Int4         to_g;
   struct spi_block PNTR next;
} SPI_Block, PNTR SPI_BlockPtr;

NLM_EXTERN SPI_RegionInfoPtr SPI_AlnSinglemRNAToGen(SPI_bsinfoPtr spig, SPI_bsinfoPtr spim, FILE *ofp, FILE *ofp2, SPI_OptionsPtr spot);
NLM_EXTERN SPI_mRNAToHerdPtr SPI_AlnSinglemRNAToPieces(SPI_bsinfoPtr spig_head, SPI_bsinfoPtr spim, FILE *ofp, FILE *ofp2, SPI_OptionsPtr spot);
NLM_EXTERN void SPI_MakeMultipleAlignment(SPI_RegionInfoPtr srip_head);
NLM_EXTERN void SPI_PrintMultipleAlignment(SPI_RegionInfoPtr srip, Boolean html, BioseqPtr bsp, FILE * ofp);
NLM_EXTERN void SPI_RegionListFree (SPI_RegionInfoPtr srip);

/*************************************************************************************
*  
*  SPI_AlnmRNAToGenomic is available to outside programs; just pass in the two
*  bioseqs and options (to use default options, just pass in NULL, and to use 
*  other options, call SPI_OptionsNew to get an initialized options pointer and
*  make the desired changes).  If options are passed in, they should be freed
*  using SPI_OptionsFree.  SPI_AlignmRNAToGenomic returns a linked list of
*  SPI_mRNAPtrs, one per gene model (default is to only return one gene model).
*  Each SPI_mRNAPtr (see above) has arrays specifying the exon boundaries in
*  genomic and mRNA coordinates as well as information about splice sites,
*  percent identity, number of gaps, etc.  The SPI_mRNAPtr also has one alignment
*  per exon as well as a single alignment (smp->continuous) that covers the entire
*  gene, with big gaps in the mRNA for the genomic introns.  The SPI_mRNAPtr should
*  be freed by the calling function, using SPI_mRNAFree.
*
*  SPI_AlnmRNAToGenomic should only be used on finished sequence; it can handle
*  interspecies comparisons but doesn't work on draft sequence.
*
*************************************************************************************/
NLM_EXTERN SPI_mRNAPtr SPI_AlignmRNAToGenomic(BioseqPtr bsp_genomic, BioseqPtr bsp_mrna, SPI_OptionsPtr spot);

/***************************************************************************
*
*  SPI_flip_sa_list takes the head of a list of seqaligns and switches
*  the first and second row of every alignment (alignments should all have
*  two rows). Then, the indexes are freed and the alignments are reindexed.
*
***************************************************************************/
NLM_EXTERN void SPI_flip_sa_list (SeqAlignPtr sap);

/***************************************************************************
*
*  SPI_RemoveInconsistentAlnsFromSet is a greedy algorithm that first
*  sorts the alignments by score, then takes the highest-scoring
*  alignment and compares it to the next-highest-scoring alignment, which
*  is deleted if it is contained; on subsequent loops each next-highest-
*  scoring alignment is compared to the set of alignments that have
*  been kept. The alignments can be sorted along the first or
*  second sequence; the alignments will be reversed so that they are
*  all on the plus strand of the sequence to be examined.
*  The input alignment must be indexed at least at the LITE level;
*  conflicting child alignments will be deleted, not hidden, by this
*  function.  This function assumes that all children have the same two
*  rows. The 'compact' parameter tells the function whether to try to
*  keep alignments that are more to the left in genomic coordinates, or
*  more to the right.
*
***************************************************************************/
NLM_EXTERN void SPI_RemoveInconsistentAlnsFromSet(SeqAlignPtr sap, Int4 fuzz, Int4 n, Int4 compact);

NLM_EXTERN void SPI_bsinfoFreeList (SPI_bsinfoPtr spi);
NLM_EXTERN void SPI_mRNAFree (SPI_mRNAPtr smp);
NLM_EXTERN SPI_OptionsPtr SPI_OptionsNew(void);
NLM_EXTERN void SPI_OptionsFree (SPI_OptionsPtr spot);
NLM_EXTERN void SPI_is_donor (Uint1Ptr sequence, Int4 seqlen, FloatHiPtr score, Int4 org);
NLM_EXTERN void SPI_is_acceptor (Uint1Ptr sequence, Int4 seqlen, FloatHiPtr score, Int4 org);

/***************************************************************************
*
*  SPI_GetProteinFrommRNA takes an mRNA bioseq and returns a string
*  which is the best protein translation of the mRNA. First, the function
*  looks to see whether there are any annotated CDSs, and if so, it uses
*  the translation of the annotated CDS. If not, the function translates
*  the mRNA in all 3 reading frames and looks for the frame with the
*  longest protein, then returns that protein.
*
***************************************************************************/
NLM_EXTERN CharPtr SPI_GetProteinFrommRNA(BioseqPtr bsp_mrna, Int4Ptr start);

#ifdef __cplusplus
}
#endif

#undef NLM_EXTERN
#ifdef NLM_EXPORT
#define NLM_EXTERN NLM_EXPORT
#else
#define NLM_EXTERN
#endif

#endif