4 * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
7 * This file contains the implementation of the UserParameter functions
8 * Mark Larkin Dec 8 2005
10 * Modified: 17 January 2008 Paul McGettigan added in the O aminoacid residue to handle Pyrrolysine
24 #include "UserParameters.h"
25 #include "clustalw_version.h"
33 UserParameters::UserParameters(bool log)
35 // FIXME: huge parts should be merged/replaced with
36 // setParamsToDefault (which is not used at all)
38 gapPos1 = NUMRES - 2; /* code for gaps inserted by clustalw */
39 gapPos2 = NUMRES - 1; /* code for gaps already in alignment */
41 //revisionLevel = CLU_SHORT_VERSION_STRING;
42 revisionLevel = CLUSTALW_VERSION;
51 outputOrder = ALIGNED; // Note: All macros should be replaced by const
52 divergenceCutoff = 30;
54 hydResidues = "GPSNDQEKR";
57 noHydPenalties = false;
58 noVarPenalties = true;
59 noPrefPenalties = false;
61 endGapPenalties = false;
62 resetAlignmentsNew = false;
63 resetAlignmentsAll = false;
64 outputStructPenalties = OUTSECST;
65 structPenalties1 = NONE;
66 structPenalties2 = NONE;
78 useAmbiguities = false;
80 DNAPWGapExtend = 6.66;
84 quickPairAlign = false;
85 transitionWeight = 0.5;
100 explicitDNAFlag = false;
102 clSeqNumbers = false;
104 outputClustal = true;
106 outputPhylip = false;
112 saveParameters = false;
113 outputTreeClustal = false;
114 outputTreePhylip = true;
115 outputTreeDistances = false;
116 outputTreeNexus = false;
118 bootstrapFormat = BS_BRANCH_LABELS;
119 profile1Name = ""; // Initialise to blank strings
122 profile1Empty = true;
123 profile2Empty = true;
125 //profile1NumSeqs = 0; // MARK: Set to default before used.
128 useTree1File = false;
129 useTree2File = false;
130 newTree1File = false;
131 newTree2File = false;
132 aminoAcidCodes = "ABCDEFGHIKLMNOPQRSTUVWXYZ-";
133 maxAA = aminoAcidCodes.length() - 2;
135 // Some variables need the alignment to be read in before they can be set.
136 // I am putting the default as protein. Note: this should not make a difference
137 // as they are not used before they have been set a value again!!
140 gapExtend = AAGapExtend;
141 PWGapOpen = AAPWGapOpen;
142 PWGapExtend = AAPWGapExtend;
144 gapPos1 = NUMRES - 2;
145 gapPos2 = NUMRES - 1;
147 menuFlag = false; // MARK: I set to default value.
148 DNAFlag = false; // MARK: I set to default value.
149 distanceTree = true; // MARK: I set to default value.
152 windowGap = AAWindowGap;
156 rangeFromToSet = false;
157 QTscorePlotScale = 5;
158 QTresExceptionCutOff = 5;
160 QTseqWeightCalculated = false;
161 QTminLenLowScoreSegment = 1;
162 QTlowScoreDNAMarkingScale = 5;
164 // Set defaults for iteration variables.
166 doRemoveFirstIteration = NONE;
167 maxAllowedSeqLength = INT_MAX;
169 clusterAlgorithm = NJ;
172 fullHelpFlag = false;
178 void UserParameters::setParamsToDefault()
185 outputOrder = ALIGNED;
186 divergenceCutoff = 30;
188 hydResidues = "GPSNDQEKR";
191 noHydPenalties = false;
192 noVarPenalties = true;
193 noPrefPenalties = false;
195 endGapPenalties = false;
196 resetAlignmentsNew = false;
197 resetAlignmentsAll = false;
198 outputStructPenalties = OUTSECST;
199 structPenalties1 = NONE;
200 structPenalties2 = NONE;
211 strandEndPenalty = 2;
212 useAmbiguities = false;
214 DNAPWGapExtend = 6.66;
217 quickPairAlign = false;
218 transitionWeight = 0.5;
230 bootNumTrials = 1000;
234 clSeqNumbers = false;
236 outputClustal = true;
238 outputPhylip = false;
243 outputTreeClustal = false;
244 outputTreePhylip = true;
245 outputTreeDistances = false;
246 outputTreeNexus = false;
248 bootstrapFormat = BS_BRANCH_LABELS;
251 useTree1File = false;
252 useTree2File = false;
253 newTree1File = false;
254 newTree2File = false;
257 rangeFromToSet = false;
258 QTscorePlotScale = 5;
259 QTresExceptionCutOff = 5;
261 QTminLenLowScoreSegment = 1;
262 QTlowScoreDNAMarkingScale = 5;
263 distanceTree = true; // MARK: I set to default value.
276 clusterAlgorithm = NJ;
279 fullHelpFlag = false;
281 doRemoveFirstIteration = NONE;
282 maxAllowedSeqLength = INT_MAX;
286 * The function createParameterOutput is used to put all the user parameters in
287 * a file. It is used for testing and for saving parameters.
290 * FIXME: AW: Some parameters are missing here (e.g. the new ones like
294 void UserParameters::createParameterOutput(void)
296 string parname, temp;
300 utilityObject->getPath(seqName, &path);
301 parname = path + "par";
304 message = "\nEnter a name for the parameter output file [" + parname + "]";
305 utilityObject->getStr(message, temp);
313 outfile.open(parname.c_str(), ofstream::out);
317 return; // Failed to open
320 outfile << "clustalw \\\n";
321 if (!empty && profile1Empty)
323 outfile << "-infile=" << seqName << " \\\n";
327 outfile << "-profile1=" << profile1Name << "\\\n";
331 outfile << "-profile2=" << profile2Name << " \\\n";
335 outfile << "-type=dna \\\n";
339 outfile << "-type=protein \\\n";
343 outfile << "-quicktree \\\n";
344 outfile << "-ktuple=" << ktup << " \\\n";
345 outfile << "-window=" << window << " \\\n";
346 outfile << "-pairgap=" << windowGap << " \\\n";
347 outfile << "-topdiags=" << signif << " \\\n";
350 outfile << "-score=percent \\\n";
354 outfile << "-score=absolute \\\n";
361 //outfile << "-pwmatrix=" << pwMatrixName << " \\\n";
362 outfile << "-pwgapopen=" << fixed << setprecision(2) << AAPWGapOpen
364 outfile << "-pwgapext=" << AAPWGapExtend << " \\\n";
368 outfile << "-pwgapopen=" << fixed << setprecision(2) << PWGapOpen << " \\\n";
369 outfile << "-pwgapext=" << PWGapExtend << " \\\n";
375 //outfile << "-matrix=" << matrixName << " \\\n";
376 outfile << "-gapopen=" << fixed << setprecision(2) << AAGapOpen << " \\\n";
377 outfile << "-gapext=" << AAGapExtend << " \\\n";
381 outfile << "-gapopen=" << fixed << setprecision(2) << DNAGapOpen << " \\\n";
382 outfile << "-gapext=" << DNAGapExtend << " \\\n";
385 outfile << "-maxdiv=" << divergenceCutoff << " \\\n";
388 outfile << "-endgaps \\\n";
395 outfile << "-negative \\\n";
399 outfile << "-nopgap \\\n";
403 outfile << "-nohgap \\\n";
407 outfile << "-novgap \\\n";
409 outfile << "-hgapresidues=" << hydResidues << " \\\n";
410 outfile << "-gapdist=" << gapDist << " \\\n";
414 outfile << "-transweight=" << transitionWeight << " \\\n";
419 outfile << "-output=gcg \\\n";
423 outfile << "-output=gde \\\n";
427 outfile << "-output=pir \\\n";
429 else if (outputPhylip)
431 outfile << "-output=phylip \\\n";
433 else if (outputNexus)
435 outfile << "-output=nexus \\\n";
437 if (outfileName[0]!=EOS)
439 outfile << "-outfile=" << outfileName << " \\\n";
441 if (outputOrder==ALIGNED)
443 outfile << "-outorder=aligned \\\n";
447 outfile << "-outorder=input \\\n";
453 outfile << "-case=lower \\\n";
457 outfile << "-case=upper \\\n";
462 outfile << "-interactive\n";
469 * The function resIndex returns the index of the character c in the string t.
472 int UserParameters::resIndex(string t, char c)
476 for (i = 0; t[i] && t[i] != c; i++)
488 void UserParameters::setDNAMultiGap()
490 gapOpen = DNAGapOpen;
491 gapExtend = DNAGapExtend;
494 void UserParameters::setProtMultiGap()
497 gapExtend = AAGapExtend;
500 void UserParameters::setDNAParams()
502 gapOpen = DNAGapOpen;
503 gapExtend = DNAGapExtend;
504 PWGapOpen = DNAPWGapOpen;
505 PWGapExtend = DNAPWGapExtend;
509 windowGap = DNAWindowGap;
512 void UserParameters::setProtParams()
515 gapExtend = AAGapExtend;
516 PWGapOpen = AAPWGapOpen;
517 PWGapExtend = AAPWGapExtend;
521 windowGap = AAWindowGap;
524 void UserParameters::setPWParamToProtein()
526 PWGapOpen = AAPWGapOpen;
527 PWGapExtend = AAPWGapExtend;
531 windowGap = AAWindowGap;
534 void UserParameters::setPWParamToDNA()
536 PWGapOpen = DNAPWGapOpen;
537 PWGapExtend = DNAPWGapExtend;
541 windowGap = DNAWindowGap;
544 void UserParameters::setPWProteinParam()
546 AAPWGapOpen = PWGapOpen;
547 AAPWGapExtend = PWGapExtend;
551 AAWindowGap = windowGap;
554 void UserParameters::setPWDNAParam()
556 DNAPWGapOpen = PWGapOpen;
557 DNAPWGapExtend = PWGapExtend;
561 DNAWindowGap = windowGap;
564 * The rest of the functions are get, set and toggle functions for the variables.
567 string UserParameters::getRevisionLevel()
569 return revisionLevel;
572 void UserParameters::setRevisionLevel(string value)
574 revisionLevel = value;
577 void UserParameters::setInteractive(bool value)
582 void UserParameters::setGapOpen(float value)
587 void UserParameters::setGapExtend(float value)
592 void UserParameters::setPWGapOpen(float value)
597 void UserParameters::setPWGapExtend(float value)
602 void UserParameters::setMaxAA(int value)
607 void UserParameters::setGapPos1(int value)
612 void UserParameters::setGapPos2(int value)
617 void UserParameters::setProfileNum(int value)
622 void UserParameters::setMenuFlag(bool value)
627 void UserParameters::setDNAFlag(bool value)
640 void UserParameters::setDistanceTree(bool value)
642 distanceTree = value;
645 void UserParameters::setSeqName(string value)
650 void UserParameters::setDNAGapOpen(float value)
655 void UserParameters::setDNAGapExtend(float value)
657 DNAGapExtend = value;
660 void UserParameters::setProteinGapOpen(float value)
665 void UserParameters::setProteinGapExtend(float value)
670 void UserParameters::setGapDist(int value)
675 void UserParameters::setOutputOrder(int value)
680 void UserParameters::toggleOutputOrder()
682 if (outputOrder == INPUT)
684 outputOrder = ALIGNED;
692 void UserParameters::setDivergenceCutoff(int value)
694 divergenceCutoff = value;
697 void UserParameters::setHydResidues(string value)
699 //hydResidues = value;
701 string tempHydRes = "";
702 int inputStringLength = value.length();
703 if(inputStringLength > 0)
705 // NOTE this was causing an error, but I fixed it. Was giving an
706 // out of range error.
707 for (int i = 0; i < MAXHYDRESIDUES && i < inputStringLength; i++)
709 hydResidue = toupper(value.at(i));
711 if (isalpha(hydResidue))
713 tempHydRes += hydResidue;
715 else // Not Alphabetic character!
720 if(tempHydRes.size() > 0)
722 hydResidues = tempHydRes;
727 void UserParameters::setNoWeights(bool value)
732 void UserParameters::setUseNegMatrix(bool value)
737 void UserParameters::toggleUseNegMatrix()
742 void UserParameters::setNoHydPenalties(bool value)
744 noHydPenalties = value;
747 void UserParameters::toggleNoHydPenalties()
749 noHydPenalties ^= true;
752 void UserParameters::setNoVarPenalties(bool value)
754 noVarPenalties = value;
757 void UserParameters::setNoPrefPenalties(bool value)
759 noPrefPenalties = value;
762 void UserParameters::toggleNoPrefPenalties()
764 noPrefPenalties ^= true;
767 void UserParameters::setUseEndGaps(bool value)
772 void UserParameters::toggleUseEndGaps()
777 void UserParameters::setEndGapPenalties(bool value)
779 endGapPenalties = value;
782 void UserParameters::toggleResetAlignmentsNew()
784 resetAlignmentsNew ^= true;
787 void UserParameters::setResetAlignmentsNew(bool value)
789 resetAlignmentsNew = value;
792 void UserParameters::setResetAlignmentsAll(bool value)
794 resetAlignmentsAll = value;
797 void UserParameters::setOutputStructPenalties(int value)
799 outputStructPenalties = value;
802 void UserParameters::setStructPenalties1(int value)
804 structPenalties1 = value;
807 void UserParameters::setStructPenalties2(int value)
809 structPenalties2 = value;
812 void UserParameters::setUseSS1(bool value)
817 void UserParameters::toggleUseSS1()
822 void UserParameters::setUseSS2(bool value)
827 void UserParameters::toggleUseSS2()
832 void UserParameters::setHelixPenalty(int value)
834 helixPenalty = value;
837 void UserParameters::setStrandPenalty(int value)
839 strandPenalty = value;
842 void UserParameters::setLoopPenalty(int value)
847 void UserParameters::setHelixEndMinus(int value)
849 helixEndMinus = value;
852 void UserParameters::setHelixEndPlus(int value)
854 helixEndPlus = value;
857 void UserParameters::setStrandEndMinus(int value)
859 strandEndMinus = value;
862 void UserParameters::setStrandEndPlus(int value)
864 strandEndPlus = value;
867 void UserParameters::setHelixEndPenalty(int value)
869 helixEndPenalty = value;
872 void UserParameters::setStrandEndPenalty(int value)
874 strandEndPenalty = value;
877 void UserParameters::setUseAmbiguities(bool value)
879 useAmbiguities = value;
882 void UserParameters::setDNAPWGapOpenPenalty(float value)
884 DNAPWGapOpen = value;
887 void UserParameters::setDNAPWGapExtendPenalty(float value)
889 DNAPWGapExtend = value;
892 void UserParameters::setProteinPWGapOpenPenalty(float value)
897 void UserParameters::setProteinPWGapExtendPenalty(float value)
899 AAPWGapExtend = value;
902 void UserParameters::toggleQuickPairAlign()
904 quickPairAlign ^= true;
907 void UserParameters::setQuickPairAlign(bool value)
909 quickPairAlign = value;
912 void UserParameters::setTransitionWeight(float value)
914 transitionWeight = value;
917 void UserParameters::setDNAKtup(int value)
922 void UserParameters::setDNAWindowGap(int value)
924 DNAWindowGap = value;
927 void UserParameters::setDNASignif(int value)
932 void UserParameters::setDNAWindow(int value)
937 void UserParameters::setAAKtup(int value)
942 void UserParameters::setAAWindowGap(int value)
947 void UserParameters::setAASignif(int value)
952 void UserParameters::setAAWindow(int value)
957 void UserParameters::setPercent(bool value)
962 void UserParameters::toggleTossGaps()
967 void UserParameters::setTossGaps(bool value)
972 void UserParameters::setKimura(bool value)
977 void UserParameters::toggleKimura()
982 void UserParameters::setBootNumTrials(int value)
984 bootNumTrials = value;
987 void UserParameters::setBootRanSeed(unsigned int value)
992 void UserParameters::setDebug(int value)
997 void UserParameters::setExplicitDNAFlag(bool value)
999 explicitDNAFlag = value;
1002 void UserParameters::setLowercase(bool value)
1007 void UserParameters::toggleLowercase()
1012 void UserParameters::setClSeqNumbers(bool value)
1014 clSeqNumbers = value;
1017 void UserParameters::toggleClSeqNumbers()
1019 clSeqNumbers ^= true;
1022 void UserParameters::setSeqRange(bool value)
1027 void UserParameters::toggleSeqRange()
1032 void UserParameters::setOutputClustal(bool value)
1034 outputClustal = value;
1037 void UserParameters::toggleOutputClustal()
1039 outputClustal ^= true;
1042 void UserParameters::setOutputGCG(bool value)
1047 void UserParameters::toggleOutputGCG()
1052 void UserParameters::setOutputPhylip(bool value)
1054 outputPhylip = value;
1057 void UserParameters::toggleOutputPhylip()
1059 outputPhylip ^= true;
1062 void UserParameters::setOutputNbrf(bool value)
1067 void UserParameters::toggleOutputNbrf()
1072 void UserParameters::setOutputGde(bool value)
1077 void UserParameters::toggleOutputGde()
1082 void UserParameters::setOutputNexus(bool value)
1084 outputNexus = value;
1087 void UserParameters::toggleOutputNexus()
1089 outputNexus ^= true;
1092 void UserParameters::setOutputFasta(bool value)
1094 outputFasta = value;
1097 void UserParameters::toggleOutputFasta()
1099 outputFasta ^= true;
1102 void UserParameters::setShowAlign(bool value)
1107 void UserParameters::toggleShowAlign()
1112 void UserParameters::setSaveParameters(bool value)
1114 saveParameters = value;
1117 void UserParameters::toggleSaveParameters()
1119 saveParameters ^= true;
1122 void UserParameters::setOutputTreeClustal(bool value)
1124 outputTreeClustal = value;
1127 void UserParameters::toggleOutputTreeClustal()
1129 outputTreeClustal ^= true;
1132 void UserParameters::setOutputTreePhylip(bool value)
1134 outputTreePhylip = value;
1137 void UserParameters::toggleOutputTreePhylip()
1139 outputTreePhylip ^= true;
1142 void UserParameters::setOutputTreeDistances(bool value)
1144 outputTreeDistances = value;
1147 void UserParameters::toggleOutputTreeDistances()
1149 outputTreeDistances ^= true;
1152 void UserParameters::setOutputTreeNexus(bool value)
1154 outputTreeNexus = value;
1157 void UserParameters::toggleOutputTreeNexus()
1159 outputTreeNexus ^= true;
1162 void UserParameters::setOutputPim(bool value)
1167 void UserParameters::setBootstrapFormat(int value)
1169 bootstrapFormat = value;
1172 void UserParameters::toggleBootstrapFormat()
1174 if (bootstrapFormat == BS_NODE_LABELS)
1176 bootstrapFormat = BS_BRANCH_LABELS;
1180 bootstrapFormat = BS_NODE_LABELS;
1184 void UserParameters::setProfile1Name(string value)
1186 profile1Name = value;
1189 void UserParameters::setProfile2Name(string value)
1191 profile2Name = value;
1194 void UserParameters::setEmpty(bool value)
1199 void UserParameters::setProfile1Empty(bool value)
1201 profile1Empty = value;
1204 void UserParameters::setProfile2Empty(bool value)
1206 profile2Empty = value;
1209 void UserParameters::setOutfileName(string value)
1211 outfileName = value;
1214 /*void UserParameters::setProfile1NumSeqs(int value)
1216 profile1NumSeqs = value;
1217 }*/ // MARK CHANGE Jan 10
1219 void UserParameters::setUseTreeFile(bool value)
1221 useTreeFile = value;
1224 void UserParameters::setNewTreeFile(bool value)
1226 newTreeFile = value;
1229 void UserParameters::setUseTree1File(bool value)
1231 useTree1File = value;
1234 void UserParameters::setUseTree2File(bool value)
1236 useTree2File = value;
1239 void UserParameters::setNewTree1File(bool value)
1241 newTree1File = value;
1244 void UserParameters::setNewTree2File(bool value)
1246 newTree2File = value;
1249 void UserParameters::setAminoAcidCodes(string value)
1251 aminoAcidCodes = value;
1254 void UserParameters::setKtup(int value)
1259 void UserParameters::setWindow(int value)
1264 void UserParameters::setWindowGap(int value)
1269 void UserParameters::setSignif(int value)
1274 void UserParameters::setRangeFrom(int from)
1277 rangeFromToSet = true;
1280 void UserParameters::setRangeTo(int to)
1283 rangeFromToSet = true;
1286 int UserParameters::getQTScorePlotScale()
1288 return QTscorePlotScale;
1291 void UserParameters::setQTScorePlotScale(int score)
1293 QTscorePlotScale = score;
1296 int UserParameters::getQTResExceptionCutOff()
1298 return QTresExceptionCutOff;
1301 void UserParameters::setQTResExceptionCutOff(int cutOff)
1303 QTresExceptionCutOff = cutOff;
1306 bool UserParameters::getQTseqWeightCalculated()
1308 return QTseqWeightCalculated;
1311 void UserParameters::setQTseqWeightCalculated(bool calculated)
1313 QTseqWeightCalculated = calculated;
1316 int UserParameters::getQTminLenLowScoreSegment()
1318 return QTminLenLowScoreSegment;
1321 void UserParameters::setQTminLenLowScoreSegment(int minLen)
1323 QTminLenLowScoreSegment = minLen;
1326 int UserParameters::getQTlowScoreDNAMarkingScale()
1328 return QTlowScoreDNAMarkingScale;
1331 void UserParameters::setQTlowScoreDNAMarkingScale(int dnaScale)
1333 QTlowScoreDNAMarkingScale = dnaScale;
1336 bool UserParameters::IterationIsEnabled()
1338 if (doRemoveFirstIteration == clustalw::NONE)