2 #include "textfile.h"
\r
6 #include "objscore.h"
\r
8 bool TreeNeededForWeighting(SEQWEIGHT s)
\r
12 case SEQWEIGHT_ClustalW:
\r
13 case SEQWEIGHT_ThreeWay:
\r
20 static ProfPos *ProfileFromMSALocal(MSA &msa, Tree &tree)
\r
22 const unsigned uSeqCount = msa.GetSeqCount();
\r
23 for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex)
\r
24 msa.SetSeqId(uSeqIndex, uSeqIndex);
\r
26 if (TreeNeededForWeighting(g_SeqWeight2))
\r
28 TreeFromMSA(msa, tree, g_Cluster2, g_Distance2, g_Root1);
\r
29 SetMuscleTree(tree);
\r
31 return ProfileFromMSA(msa);
\r
34 void ProfileProfile(MSA &msa1, MSA &msa2, MSA &msaOut)
\r
36 //ALPHA Alpha = ALPHA_Undefined;
\r
37 //switch (g_SeqType)
\r
39 //case SEQTYPE_Auto:
\r
40 // Alpha = msa1.GuessAlpha();
\r
43 //case SEQTYPE_Protein:
\r
44 // Alpha = ALPHA_Amino;
\r
48 // Alpha = ALPHA_DNA;
\r
52 // Alpha = ALPHA_RNA;
\r
56 // Quit("Invalid SeqType");
\r
66 uLength1 = msa1.GetColCount();
\r
67 uLength2 = msa2.GetColCount();
\r
71 ProfPos *Prof1 = ProfileFromMSALocal(msa1, tree1);
\r
72 ProfPos *Prof2 = ProfileFromMSALocal(msa2, tree2);
\r
76 unsigned uLengthOut;
\r
77 Progress("Aligning profiles");
\r
78 AlignTwoProfs(Prof1, uLength1, 1.0, Prof2, uLength2, 1.0, Path, &ProfOut, &uLengthOut);
\r
80 Progress("Building output");
\r
81 AlignTwoMSAsGivenPath(Path, msa1, msa2, msaOut);
\r
84 // Do profile-profile alignment
\r
87 if (0 == g_pstrFileName1 || 0 == g_pstrFileName2)
\r
88 Quit("-profile needs -in1 and -in2");
\r
90 SetSeqWeightMethod(g_SeqWeight1);
\r
92 TextFile file1(g_pstrFileName1);
\r
93 TextFile file2(g_pstrFileName2);
\r
99 Progress("Reading %s", g_pstrFileName1);
\r
100 msa1.FromFile(file1);
\r
101 Progress("%u seqs %u cols", msa1.GetSeqCount(), msa1.GetColCount());
\r
103 Progress("Reading %s", g_pstrFileName2);
\r
104 msa2.FromFile(file2);
\r
105 Progress("%u seqs %u cols", msa2.GetSeqCount(), msa2.GetColCount());
\r
107 ALPHA Alpha = ALPHA_Undefined;
\r
111 Alpha = msa1.GuessAlpha();
\r
114 case SEQTYPE_Protein:
\r
115 Alpha = ALPHA_Amino;
\r
127 Quit("Invalid seq type");
\r
135 if (ALPHA_DNA == Alpha || ALPHA_RNA == Alpha)
\r
136 SetPPScore(PPSCORE_SPN);
\r
138 const unsigned uSeqCount1 = msa1.GetSeqCount();
\r
139 const unsigned uSeqCount2 = msa2.GetSeqCount();
\r
140 const unsigned uSumSeqCount = uSeqCount1 + uSeqCount2;
\r
141 MSA::SetIdCount(uSumSeqCount);
\r
143 ProfileProfile(msa1, msa2, msaOut);
\r
145 Progress("Writing output");
\r
146 MuscleOutput(msaOut);
\r