Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / local.cpp
1 #include "muscle.h"\r
2 #include "textfile.h"\r
3 #include "msa.h"\r
4 #include "profile.h"\r
5 #include "pwpath.h"\r
6 #include "tree.h"\r
7 \r
8 #define TRACE   0\r
9 \r
10 static void MSAFromFileName(const char *FileName, MSA &a)\r
11         {\r
12         TextFile File(FileName);\r
13         a.FromFile(File);\r
14         }\r
15 \r
16 static ProfPos *ProfileFromMSALocal(MSA &msa, Tree &tree)\r
17         {\r
18         const unsigned uSeqCount = msa.GetSeqCount();\r
19         for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)\r
20                 msa.SetSeqId(uSeqIndex, uSeqIndex);\r
21 \r
22         TreeFromMSA(msa, tree, g_Cluster1, g_Distance1, g_Root1);\r
23         SetMuscleTree(tree);\r
24         return ProfileFromMSA(msa);\r
25         }\r
26 \r
27 void Local()\r
28         {\r
29         if (0 == g_pstrFileName1 || 0 == g_pstrFileName2)\r
30                 Quit("Must specify both -in1 and -in2 for -sw");\r
31 \r
32         SetSeqWeightMethod(g_SeqWeight1);\r
33 \r
34         MSA msa1;\r
35         MSA msa2;\r
36 \r
37         MSAFromFileName(g_pstrFileName1, msa1);\r
38         MSAFromFileName(g_pstrFileName2, msa2);\r
39 \r
40         ALPHA Alpha = ALPHA_Undefined;\r
41         switch (g_SeqType)\r
42                 {\r
43         case SEQTYPE_Auto:\r
44                 Alpha = msa1.GuessAlpha();\r
45                 break;\r
46 \r
47         case SEQTYPE_Protein:\r
48                 Alpha = ALPHA_Amino;\r
49                 break;\r
50 \r
51         case SEQTYPE_DNA:\r
52                 Alpha = ALPHA_DNA;\r
53                 break;\r
54 \r
55         case SEQTYPE_RNA:\r
56                 Alpha = ALPHA_RNA;\r
57                 break;\r
58 \r
59         default:\r
60                 Quit("Invalid SeqType");\r
61                 }\r
62         SetAlpha(Alpha);\r
63 \r
64         msa1.FixAlpha();\r
65         msa2.FixAlpha();\r
66 \r
67         if (ALPHA_DNA == Alpha || ALPHA_RNA == Alpha)\r
68                 SetPPScore(PPSCORE_SPN);\r
69 \r
70         const unsigned uSeqCount1 = msa1.GetSeqCount();\r
71         const unsigned uSeqCount2 = msa2.GetSeqCount();\r
72         const unsigned uMaxSeqCount = (uSeqCount1 > uSeqCount2 ? uSeqCount1 : uSeqCount2);\r
73         MSA::SetIdCount(uMaxSeqCount);\r
74 \r
75         unsigned uLength1 = msa1.GetColCount();\r
76         unsigned uLength2 = msa2.GetColCount();\r
77 \r
78         Tree tree1;\r
79         Tree tree2;\r
80 \r
81         ProfPos *Prof1 = ProfileFromMSALocal(msa1, tree1);\r
82         ProfPos *Prof2 = ProfileFromMSALocal(msa2, tree2);\r
83 \r
84         PWPath Path;\r
85         SW(Prof1, uLength1, Prof2, uLength2, Path);\r
86 \r
87 #if     TRACE\r
88         Path.LogMe();\r
89 #endif\r
90 \r
91         MSA msaOut;\r
92         AlignTwoMSAsGivenPathSW(Path, msa1, msa2, msaOut);\r
93 \r
94 #if     TRACE\r
95         msaOut.LogMe();\r
96 #endif\r
97 \r
98         TextFile fileOut(g_pstrOutFileName, true);\r
99         msaOut.ToFile(fileOut);\r
100         }\r