source: trunk/GDE/MUSCLE/src/muscle.h

Last change on this file was 10390, checked in by aboeckma, 11 years ago

added muscle sourcles amd makefile

File size: 11.5 KB
Line 
1#if     DEBUG && !_DEBUG
2#define _DEBUG  1
3#endif
4
5#if     _DEBUG && !DEBUG
6#define DEBUG   1
7#endif
8
9#if     _MSC_VER
10#define TIMING  0
11#endif
12
13#define VER_3_52        0
14
15#ifdef  _MSC_VER        // Miscrosoft compiler
16#pragma warning(disable : 4800) // int-bool conversion
17#pragma warning(disable : 4996) // deprecated names like strdup, isatty.
18#endif
19
20extern const char *MUSCLE_LONG_VERSION;
21#define SHORT_VERSION "3.8"
22
23#include <stdlib.h>
24#include <string.h>
25#include <ctype.h>
26#include <stdarg.h>
27#include <stdio.h>
28
29#define DOUBLE_AFFINE   0
30#define SINGLE_AFFINE   1
31#define PAF                             0
32
33#include "types.h"
34#include "intmath.h"
35#include "alpha.h"
36#include "params.h"
37
38#ifndef _WIN32
39#define stricmp strcasecmp
40#define strnicmp strncasecmp
41#define _snprintf snprintf
42#define _fsopen(name, mode, share)      fopen((name), (mode))
43#endif
44
45#if     DEBUG
46#undef  assert
47#define assert(b)       Call_MY_ASSERT(__FILE__, __LINE__, b, #b)
48void Call_MY_ASSERT(const char *file, int line, bool b, const char *msg);
49#else
50#define assert(exp)     ((void)0)
51#endif
52
53extern int g_argc;
54extern char **g_argv;
55
56#define Rotate(a, b, c) { SCORE *tmp = a; a = b; b = c; c = tmp; }
57
58const double VERY_LARGE_DOUBLE = 1e20;
59
60extern unsigned g_uTreeSplitNode1;
61extern unsigned g_uTreeSplitNode2;
62
63// Number of elements in array a[]
64#define countof(a)      (sizeof(a)/sizeof(a[0]))
65
66// Maximum of two of any type
67#define Max2(a, b)                      ((a) > (b) ? (a) : (b))
68
69// Maximum of three of any type
70#define Max3(a, b, c)           Max2(Max2(a, b), c)
71
72// Minimum of two of any type
73#define Min2(a, b)              ((a) < (b) ? (a) : (b))
74
75// Maximum of four of any type
76#define Max4(a, b, c, d)        Max2(Max2(a, b), Max2(c, d))
77
78const double VERY_NEGATIVE_DOUBLE = -9e29;
79const float VERY_NEGATIVE_FLOAT = (float) -9e29;
80
81const double BLOSUM_DIST = 0.62;        // todo settable
82
83// insane value for uninitialized variables
84const unsigned uInsane = 8888888;
85const int iInsane = 8888888;
86const SCORE scoreInsane = 8888888;
87const char cInsane = (char) 0xcd;               // int 3 instruction, used e.g. for unint. memory
88const double dInsane = VERY_NEGATIVE_DOUBLE;
89const float fInsane = VERY_NEGATIVE_FLOAT;
90const char INVALID_STATE = '*';
91const BASETYPE BTInsane = (BASETYPE) dInsane;
92const WEIGHT wInsane = BTInsane;
93
94extern double g_dNAN;
95
96extern unsigned long g_tStart;
97
98void Quit(const char szFormat[], ...);
99void Warning(const char szFormat[], ...);
100void TrimBlanks(char szStr[]);
101void TrimLeadingBlanks(char szStr[]);
102void TrimTrailingBlanks(char szStr[]);
103void Log(const char szFormat[], ...);
104bool Verbose();
105const char *ScoreToStr(SCORE Score);
106const char *ScoreToStrL(SCORE Score);
107SCORE StrToScore(const char *pszStr);
108void Break();
109
110double VecSum(const double v[], unsigned n);
111bool IsValidInteger(const char *Str);
112bool IsValidSignedInteger(const char *Str);
113bool IsValidIdentifier(const char *Str);
114bool IsValidFloatChar(char c);
115bool isident(char c);
116bool isidentf(char c);
117
118void TreeFromSeqVect(const SeqVect &c, Tree &tree, CLUSTER Cluster,
119  DISTANCE Distance, ROOT Root, const char *SaveFileName = 0);
120void TreeFromMSA(const MSA &msa, Tree &tree, CLUSTER Cluster,
121  DISTANCE Distance, ROOT Root, const char *SaveFileName = 0);
122
123void StripGaps(char szStr[]);
124void StripWhitespace(char szStr[]);
125const char *GetTimeAsStr();
126unsigned CalcBLOSUMWeights(MSA &Aln, ClusterTree &BlosumCluster);
127void CalcGSCWeights(MSA &Aln, const ClusterTree &BlosumCluster);
128void AssertNormalized(const PROB p[]);
129void AssertNormalizedOrZero(const PROB p[]);
130void AssertNormalized(const double p[]);
131bool VectorIsZero(const double dValues[], unsigned n);
132void VectorSet(double dValues[], unsigned n, double d);
133bool VectorIsZero(const float dValues[], unsigned n);
134void VectorSet(float dValues[], unsigned n, float d);
135
136// @@TODO should be "not linux"
137#if     _WIN32
138double log2(double x);  // Defined in <math.h> on Linux
139#endif
140
141double pow2(double x);
142double lnTolog2(double ln);
143
144double lp2(double x);
145SCORE SumLog(SCORE x, SCORE y);
146SCORE SumLog(SCORE x, SCORE y, SCORE z);
147SCORE SumLog(SCORE w, SCORE x, SCORE y, SCORE z);
148
149double lp2Fast(double x);
150double SumLogFast(double x, double y);
151double SumLogFast(double x, double y, double z);
152double SumLogFast(double w, double x, double y, double z);
153
154void chkmem(const char szMsg[] = "");
155
156void Normalize(PROB p[], unsigned n);
157void Normalize(PROB p[], unsigned n, double dRequiredTotal);
158void NormalizeUnlessZero(PROB p[], unsigned n);
159
160void DebugPrintf(const char szFormat[], ...);
161void SetListFileName(const char *ptrListFileName, bool bAppend);
162void ModelFromAlign(const char *strInputFileName, const char *strModelFileName,
163  double dMaxNIC);
164double GetMemUseMB();
165double GetRAMSizeMB();
166double GetPeakMemUseMB();
167void CheckMemUse();
168const char *ElapsedTimeAsString();
169char *SecsToHHMMSS(long lSecs, char szStr[]);
170double GetCPUGHz();
171SCORE GetBlosum62(unsigned uLetterA, unsigned uLetterB);
172SCORE GetBlosum62d(unsigned uLetterA, unsigned uLetterB);
173SCORE GetBlosum50(unsigned uLetterA, unsigned uLetterB);
174void AssertNormalizedDist(const PROB p[], unsigned N);
175void CmdLineError(const char *Format, ...);
176void Fatal(const char *Format, ...);
177void InitCmd();
178void ExecCommandLine(int argc, char *argv[]);
179void DoCmd();
180void SetLogFile();
181void NameFromPath(const char szPath[], char szName[], unsigned uBytes);
182char *strsave(const char *s);
183void DistKmer20_3(const SeqVect &v, DistFunc &DF);
184void DistKbit20_3(const SeqVect &v, DistFunc &DF);
185void DistKmer6_6(const SeqVect &v, DistFunc &DF);
186void DistKmer4_6(const SeqVect &v, DistFunc &DF);
187void DistPWKimura(const SeqVect &v, DistFunc &DF);
188void FastDistKmer(const SeqVect &v, DistFunc &DF);
189void DistUnaligned(const SeqVect &v, DISTANCE DistMethod, DistFunc &DF);
190double PctIdToMAFFTDist(double dPctId);
191double KimuraDist(double dPctId);
192void SetFastParams();
193void AssertProfsEq(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
194  unsigned uLengthB);
195void ValidateMuscleIds(const MSA &msa);
196void ValidateMuscleIds(const Tree &tree);
197void TraceBackToPath(int **TraceBack, unsigned uLengthA,
198  unsigned uLengthB, PWPath &Path);
199void BitTraceBack(char **TraceBack, unsigned uLengthA, unsigned uLengthB,
200  char LastEdge, PWPath &Path);
201SCORE AlignTwoMSAs(const MSA &msa1, const MSA &msa2, MSA &msaOut, PWPath &Path,
202  bool bLockLeft = false, bool bLockRight = false);
203SCORE AlignTwoProfs(
204  const ProfPos *PA, unsigned uLengthA, WEIGHT wA,
205  const ProfPos *PB, unsigned uLengthB, WEIGHT wB,
206  PWPath &Path, ProfPos **ptrPout, unsigned *ptruLengthOut);
207void AlignTwoProfsGivenPath(const PWPath &Path,
208  const ProfPos *PA, unsigned uLengthA, WEIGHT wA,
209  const ProfPos *PB, unsigned uLengthB, WEIGHT wB,
210  ProfPos **ptrPOut, unsigned *ptruLengthOut);
211void AlignTwoMSAsGivenPathSW(const PWPath &Path, const MSA &msaA, const MSA &msaB,
212  MSA &msaCombined);
213void AlignTwoMSAsGivenPath(const PWPath &Path, const MSA &msaA, const MSA &msaB,
214  MSA &msaCombined);
215SCORE FastScorePath2(const ProfPos *PA, unsigned uLengthA,
216  const ProfPos *PB, unsigned uLengthB, const PWPath &Path);
217SCORE GlobalAlignDiags(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
218  unsigned uLengthB, PWPath &Path);
219SCORE GlobalAlignSimple(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
220  unsigned uLengthB, PWPath &Path);
221SCORE GlobalAlignSP(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
222  unsigned uLengthB, PWPath &Path);
223SCORE GlobalAlignSPN(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
224  unsigned uLengthB, PWPath &Path);
225SCORE GlobalAlignLE(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
226  unsigned uLengthB, PWPath &Path);
227void CalcThreeWayWeights(const Tree &tree, unsigned uNode1, unsigned uNode2,
228  WEIGHT *Weights);
229SCORE GlobalAlignSS(const Seq &seqA, const Seq &seqB, PWPath &Path);
230bool RefineHoriz(MSA &msaIn, const Tree &tree, unsigned uIters, bool bLockLeft, bool bLockRight);
231bool RefineVert(MSA &msaIn, const Tree &tree, unsigned uIters);
232SCORE GlobalAlignNoDiags(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
233  unsigned uLengthB, PWPath &Path);
234
235void SetInputFileName(const char *pstrFileName);
236void SetIter(unsigned uIter);
237void IncIter();
238void SetMaxIters(unsigned uMaxIters);
239void Progress(unsigned uStep, unsigned uTotalSteps);
240void Progress(const char *szFormat, ...);
241void SetStartTime();
242void ProgressStepsDone();
243void SetProgressDesc(const char szDesc[]);
244void SetSeqStats(unsigned uSeqCount, unsigned uMaxL, unsigned uAvgL);
245
246void SetNewHandler();
247void SaveCurrentAlignment();
248void SetCurrentAlignment(MSA &msa);
249void SetOutputFileName(const char *out);
250
251#if     DEBUG
252void SetMuscleSeqVect(SeqVect &v);
253void SetMuscleInputMSA(MSA &msa);
254void ValidateMuscleIds(const MSA &msa);
255void ValidateMuscleIds(const Tree &tree);
256#else
257#define SetMuscleSeqVect(x)             /* empty */
258#define SetMuscleInputMSA(x)    /* empty */
259#define ValidateMuscleIds(x)    /* empty */
260#endif
261
262void ProcessArgVect(int argc, char *argv[]);
263void ProcessArgStr(const char *Str);
264void Usage();
265void SetParams();
266
267void SortCounts(const FCOUNT fcCounts[], unsigned SortOrder[]);
268unsigned ResidueGroupFromFCounts(const FCOUNT fcCounts[]);
269FCOUNT SumCounts(const FCOUNT Counts[]);
270
271bool FlagOpt(const char *Name);
272const char *ValueOpt(const char *Name);
273void DoMuscle();
274void ProfDB();
275void DoSP();
276void ProgAlignSubFams();
277void Run();
278void ListParams();
279void OnException();
280void SetSeqWeightMethod(SEQWEIGHT Method);
281SEQWEIGHT GetSeqWeightMethod();
282WEIGHT GetMuscleSeqWeightById(unsigned uId);
283void ListDiagSavings();
284void CheckMaxTime();
285const char *MaxSecsToStr();
286unsigned long GetStartTime();
287
288void ProgressiveAlign(const SeqVect &v, const Tree &GuideTree, MSA &a);
289ProgNode *ProgressiveAlignE(const SeqVect &v, const Tree &GuideTree, MSA &a);
290
291void CalcDistRangeKmer6_6(const MSA &msa, unsigned uRow, float Dist[]);
292void CalcDistRangeKmer20_3(const MSA &msa, unsigned uRow, float Dist[]);
293void CalcDistRangeKmer20_4(const MSA &msa, unsigned uRow, float Dist[]);
294void CalcDistRangePctIdKimura(const MSA &msa, unsigned uRow, float Dist[]);
295void CalcDistRangePctIdLog(const MSA &msa, unsigned uRow, float Dist[]);
296
297void MakeRootMSA(const SeqVect &v, const Tree &GuideTree, ProgNode Nodes[], MSA &a);
298void MakeRootMSABrenner(SeqVect &v, const Tree &GuideTree, ProgNode Nodes[], MSA &a);
299
300void Refine();
301void Local();
302void Profile();
303void PPScore();
304void UPGMA2(const DistCalc &DC, Tree &tree, LINKAGE Linkage);
305
306char *GetFastaSeq(FILE *f, unsigned *ptrSeqLength, char **ptrLabel,
307  bool DeleteGaps = true);
308SCORE SW(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
309  unsigned uLengthB, PWPath &Path);
310void TraceBackSW(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
311  unsigned uLengthB, const SCORE *DPM_, const SCORE *DPD_, const SCORE *DPI_,
312  unsigned uPrefixLengthAMax, unsigned uPrefixLengthBMax, PWPath &Path);
313void DiffPaths(const PWPath &p1, const PWPath &p2, unsigned Edges1[],
314  unsigned *ptruDiffCount1, unsigned Edges2[], unsigned *ptruDiffCount2);
315void SetPPScore(bool bRespectFlagOpts = true);
316void SetPPScore(PPSCORE p);
317SCORE GlobalAlignDimer(const ProfPos *PA, unsigned uLengthA, const ProfPos *PB,
318  unsigned uLengthB, PWPath &Path);
319bool MissingCommand();
320void Credits();
321void ProfileProfile(MSA &msa1, MSA &msa2, MSA &msaOut);
322void MHackStart(SeqVect &v);
323void MHackEnd(MSA &msa);
324void WriteScoreFile(const MSA &msa);
325char ConsensusChar(const ProfPos &PP);
326void Stabilize(const MSA &msa, MSA &msaStable);
327void MuscleOutput(MSA &msa);
328PTR_SCOREMATRIX ReadMx(TextFile &File);
329void MemPlus(size_t Bytes, char *Where);
330void MemMinus(size_t Bytes, char *Where);
Note: See TracBrowser for help on using the repository browser.