1 /* SQUID - A C function library for biological sequence analysis
2  * Copyright (C) 1992-1996 Sean R. Eddy
3  *
4  *    This source code is distributed under terms of the
5  *    GNU General Public License. See the files COPYING
6  *    and GNULICENSE for further details.
7  *
8  */
9 
10 #ifndef SQFUNCSH_INCLUDED
11 #define SQFUNCSH_INCLUDED
12 /* sqfuncs.h
13  *
14  * Prototypes for squid library functions;
15  * also makes a good reference list for what the package contains.
16  *
17  * Warning: squid is a slowly evolving beast. Some functions are
18  * obsolete. Some functions are probably just wrong, dating to
19  * a primordial era before I knew anything about what I was doing.
20  * Some functions are both obsolete and wrong but still necessary
21  * to get legacy code to compile.
22  */
23 
24 /*
25  * from aligneval.c
26  */
27 extern float ComparePairAlignments(char *known1, char *known2, char *calc1, char *calc2);
28 extern float CompareRefPairAlignments(int *ref, char *known1, char *known2, char *calc1, char *calc2);
29 extern float CompareMultAlignments(char **kseqs, char **tseqs, int    N);
30 extern float CompareRefMultAlignments(int *ref, char **kseqs, char **tseqs, int    N);
31 extern float PairwiseIdentity(char *s1, char *s2);
32 
33 /*
34  * from alignio.c
35  */
36 extern void AllocAlignment(int nseq, int alen, char ***ret_aseq, AINFO *ainfo);
37 extern void FreeAlignment(char **aseqs, AINFO *ainfo);
38 extern void ReadAlignedFASTA(char *filename, char *env,
39 			     char ***ret_aseq, AINFO *ainfo);
40 extern void WriteAlignedFASTA(FILE *fp, char **aseqs, AINFO *ainfo);
41 extern int  MakeAlignedString(char *aseq, int alen, char *ss, char **ret_s);
42 extern int  MakeDealignedString(char *aseq, int alen, char *ss, char **ret_s);
43 extern int  DealignedLength(char *aseq);
44 extern int  WritePairwiseAlignment(FILE *ofp, char *aseq1, char *name1, int spos1,
45 				   char *aseq2, char *name2, int spos2,
46 				   int **pam, int indent);
47 extern int  MingapAlignment(char **aseqs, AINFO *ainfo);
48 extern int  RandomAlignment(char **rseqs, SQINFO *sqinfo, int nseq, float pop, float pex,
49 			    char ***ret_aseqs, AINFO *ainfo);
50 
51 /* from cluster.c
52  */
53 extern int Cluster(float **mx, int N, enum clust_strategy mode, struct phylo_s **ret_tree);
54 extern struct phylo_s *AllocPhylo(int N);
55 extern void FreePhylo(struct phylo_s *tree, int N);
56 extern void MakeDiffMx(char **aseqs, int num, float ***ret_dmx);
57 extern void MakeIdentityMx(char **aseqs, int num, float ***ret_imx);
58 extern void PrintNewHampshireTree(FILE *fp, AINFO *ainfo, struct phylo_s *tree, int N);
59 extern void PrintPhylo(FILE *fp, AINFO *ainfo, struct phylo_s *tree, int N);
60 
61 /*
62  * from dayhoff.c
63  */
64 extern int  ParsePAMFile(FILE *fp, int ***ret_pam, float *ret_scale);
65 extern void ScalePAM(int **pam, int scale);
66 
67 
68 /* from file.c
69  */
70 extern char *FileDirname(char *filename);
71 extern char *FileTail(char *file, int noextension);
72 extern char *FileConcat(char *dir, char *file);
73 extern FILE *EnvFileOpen(char *fname, char *env);
74 extern int   FileExists(char *filename);
75 
76 
77 /* from getopt.c
78  */
79 extern int Getopt(int argc, char **argv,
80 		  struct opt_s *opt, int nopts, char *usage,
81 		  int *ret_optind, char **ret_optname, char **ret_optarg);
82 
83 
84 /* from interleaved.c
85  */
86 extern int IsInterleavedFormat(int format);
87 extern int ReadInterleaved(char *seqfile,
88 			   int (*skip_header)(FILE *),
89 			   int (*parse_header)(FILE *, AINFO *),
90 			   int (*is_dataline)(char *, char *),
91 			   char ***ret_aseqs, AINFO *ainfo);
92 extern int ReadAlignment(char *seqfile, int format, char ***ret_aseqs, AINFO *ainfo);
93 
94 /*
95  * from msf.c
96  */
97 extern void  WriteMSF(FILE *fp, char **aseqs, AINFO *ainfo);
98 
99 /* from revcomp.c
100  */
101 extern char *revcomp(char *comp, char *seq);
102 
103 /*
104  * from selex.c
105  */
106 extern int  ReadSELEX(char *seqfile, char ***ret_aseqs, AINFO *ret_aliinfo);
107 extern void WriteSELEX(FILE *fp, char **aseqs, AINFO *ainfo, int cpl);
108 extern int  DealignAseqs(char **aseqs, int num, char ***ret_rseqs);
109 extern int  IsSELEXFormat(char *filename);
110 extern int  TruncateNames(char **names, int N); /* OBSOLETE? */
111 
112 /*
113  * from seqencode.c
114  */
115 extern int seqcmp(char *s1, char *s2, int allow);
116 extern int seqncmp(char *s1, char *s2, int n, int allow);
117 extern int seqencode(char *codeseq,char *str);
118 extern int coded_revcomp(char *comp, char *seq);
119 extern int seqdecode(char *str, char *codeseq);
120 extern int seqndecode(char *str, char *codeseq, int n);
121 
122 /*
123  * from sqerror.c
124  */
125 extern void Die(char *format, ...);
126 extern void Warn(char *format, ...);
127 
128 /*
129  * from sqio.c
130  */
131 extern void  FreeSequence(char *seq, SQINFO *sqinfo);
132 extern int   SetSeqinfoString(SQINFO *sqinfo, char *sptr, int flag);
133 extern void  SeqinfoCopy(SQINFO *sq1, SQINFO *sq2);
134 extern void  ToDNA(char *seq);
135 extern void  ToRNA(char *seq);
136 extern int   ReadMultipleRseqs(char *seqfile, int fformat, char ***ret_rseqs,
137 			       SQINFO **ret_sqinfo, int *ret_num);
138 extern SQFILE *SeqfileOpen(char *filename, int format, char *env);
139 extern void    SeqfilePosition(SQFILE *sqfp, long offset);
140 extern void    SeqfileRewind(SQFILE *sqfp);
141 extern void    SeqfileClose(SQFILE *sqfp);
142 extern int   ReadSeq(SQFILE *fp, int format, char **ret_seq, SQINFO *sqinfo);
143 extern int   GCGBinaryToSequence(char *seq, int len);
144 extern int   GCGchecksum(char *seq, int seqlen);
145 extern int   GCGMultchecksum(char **seqs, int nseq);
146 extern int   SeqfileFormat(char *filename, int  *ret_format, char *env);
147 extern int   WriteSeq(FILE *outf, int outfmt, char *seq, SQINFO *sqinfo);
148 extern int   Seqtype(char *seq);
149 extern char *SeqFormatString(int code);
150 extern GSIFILE *GSIOpen(char *gsifile);
151 extern int   GSIGetOffset(GSIFILE *gsi, char *key, char *sqfile,
152 			  int *fmt, long *ret_offset);
153 extern void  GSIClose(GSIFILE *gsi);
154 
155 
156 /* from sre_ctype.c
157  */
158 extern int sre_tolower(int c);
159 extern int sre_toupper(int c);
160 
161 /* from sre_math.c
162  */
163 extern float Gaussrandom(float mean, float stddev);
164 extern int   Linefit(float *x, float *y, int N,
165 		     float *ret_a, float *ret_b, float *ret_r);
166 extern void  WeightedLinefit(float *x, float *y, float *var, int N,
167 			     float *ret_m, float *ret_b);
168 extern float  Gammln(float xx);
169 extern int    DNorm(double *vec, int n);
170 extern int    FNorm(float *vec, int n);
171 extern void   DScale(double *vec, int n, double scale);
172 extern void   FScale(float *vec, int n, float scale);
173 extern void   DSet(double *vec, int n, double value);
174 extern void   FSet(float *vec, int n, float value);
175 extern double DSum(double *vec, int n);
176 extern float  FSum(float *vec, int n);
177 extern void   DAdd(double *vec1, double *vec2, int n);
178 extern void   FAdd(float *vec1, float *vec2, int n);
179 extern void   DCopy(double *vec1, double *vec2, int n);
180 extern void   FCopy(float *vec1, float *vec2, int n);
181 extern int    DMax(double *vec, int n);
182 extern int    FMax(float  *vec, int n);
183 extern double DDot(double *vec1, double *vec2, int n);
184 extern float  FDot(float *vec1, float *vec2, int n);
185 extern float  **FMX2Alloc(int rows, int cols);
186 extern void     FMX2Free(float **mx);
187 extern double **DMX2Alloc(int rows, int cols);
188 extern void     DMX2Free(double **mx);
189 extern void     FMX2Multiply(float **A, float **B, float **C, int m, int p, int n);
190 extern float  sre_random(void);
191 extern void   sre_srandom(int seed);
192 extern int    DChoose(double *p, int n);
193 extern int    FChoose(float *p, int n);
194 extern double DLogSum(double *logp, int n);
195 extern float  FLogSum(float *logp, int n);
196 extern double IncompleteGamma(double a, double x);
197 
198 /* from sre_string.c
199  */
200 #ifdef NOSTR
201 extern char *strstr(char *s, char *subs);
202 #endif
203 extern char *Strdup(char *s);
204 extern void  StringChop(char *s);
205 extern int   Strinsert(char *s1, char c, int pos);
206 extern int   Strdelete(char *s1, int pos);
207 extern void  s2lower(char *s);
208 extern void  s2upper(char *s);
209 extern void *MallocOrDie(size_t size);
210 extern void *ReallocOrDie(void *p, size_t size);
211 extern int   Strparse(char *rexp, char *s, int ntok);
212 extern void  SqdClean(void);
213 extern void  StrShuffle(char *s1, char *s2);
214 extern void  StrReverse(char *s1, char *s2);
215 extern void  StrRegionalShuffle(char *s1, char *s2, int w);
216 extern char *RandomSequence(char *alphabet, float *p, int n, int len);
217 
218 
219 /* from stack.c
220  */
221 extern struct intstack_s *InitIntStack(void);
222 extern void PushIntStack(struct intstack_s *stack, int data);
223 extern int  PopIntStack(struct intstack_s  *stack, int *ret_data);
224 extern void ReverseIntStack(struct intstack_s *stack);
225 extern int  FreeIntStack( struct intstack_s *stack );
226 
227 /*
228  * from translate.c
229  */
230 extern char *Translate(char *seq, char **code);
231 
232 /*
233  * from types.c
234  */
235 extern int  IsInt(char *s);
236 extern int  IsReal(char *s);
237 extern void Byteswap(char *swap, int nbytes);
238 
239 /*
240  * from weight.c
241  */
242 extern void GSCWeights(char **aseq, AINFO *ainfo);
243 extern void VoronoiWeights(char **aseq, AINFO *ainfo);
244 extern void BlosumWeights(char **aseq, AINFO *ainfo, float blosumlevel);
245 extern void FilterAlignment(char **aseq, int nseq, AINFO *ainfo, float cutoff,
246 			    char ***ret_anew, int *ret_nnew,
247 			    AINFO **ret_newinfo);
248 extern void SampleAlignment(char **aseq, int nseq, AINFO *ainfo, int sample,
249 			    char ***ret_anew, int *ret_nnew,
250 			    AINFO **ret_newinfo);
251 
252 #endif /* SQFUNCSH_INCLUDED */
253