+++ /dev/null
-/**
- * Author: Mark Larkin
- *
- * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.
- */
-#ifdef HAVE_CONFIG_H
- #include "config.h"
-#endif
-#include <cctype>
-#include <cstdio>
-#include <iostream>
-#include <fstream>
-#include "CommandLineParser.h"
-#include "../substitutionMatrix/globalmatrix.h"
-#include "general/Utility.h"
-#include "general/statsObject.h"
-
-
-
-using namespace std;
-
-namespace clustalw
-{
-
-CommandLineParser::CommandLineParser(StringArray* args, bool xmenus)
- :setOptions(-1),
- setHelp(-1),
- setFullHelp(-1),
- setQuiet(-1),
- setInteractive(-1),
- setBatch(-1),
- setGapOpen(-1),
- setGapExtend(-1),
- setPWGapOpen(-1),
- setPWGapExtend(-1),
- setOutOrder(-1),
- setBootLabels(-1),
- setPWMatrix(-1),
- setMatrix(-1),
- setPWDNAMatrix(-1),
- setDNAMatrix(-1),
- setNegative(-1),
- setNoWeights(-1),
- setOutput(-1),
- setOutputTree(-1),
- setQuickTree(-1),
- setType(-1),
- setCase(-1),
- setSeqNo(-1),
- setSeqNoRange(-1),
- setRange(-1),
- setTransWeight(-1),
- setSeed(-1),
- setScore(-1),
- setWindow(-1),
- setKtuple(-1),
- setKimura(-1),
- setTopDiags(-1),
- setPairGap(-1),
- setTossGaps(-1),
- setNoPGap(-1),
- setNoHGap(-1),
- setNoVGap(-1),
- setHGapRes(-1),
- setUseEndGaps(-1),
- setMaxDiv(-1),
- setGapDist(-1),
- setDebug(-1),
- setOutfile(-1),
- setInfile(-1),
- setProfile1(-1),
- setProfile2(-1),
- setAlign(-1),
- setConvert(-1),
- setNewTree(-1),
- setUseTree(-1),
- setNewTree1(-1),
- setUseTree1(-1),
- setNewTree2(-1),
- setUseTree2(-1),
- setBootstrap(-1),
- setTree(-1),
- setProfile(-1),
- setSequences(-1),
- setSecStruct1(-1),
- setSecStruct2(-1),
- setSecStructOutput(-1),
- setHelixGap(-1),
- setStrandGap(-1),
- setLoopGap(-1),
- setTerminalGap(-1),
- setHelixEndIn(-1),
- setHelixEndOut(-1),
- setStrandEndIn(-1),
- setStrandEndOut(-1),
- profileType(PROFILE),
- setDoIteration(-1),
- setNumIterations(-1),
- setTreeAlgorithm(-1),
- setMaxSeqLen(-1),
- setStatsFile(-1),
- setOutputPim(-1)
-{
- int ctr=0;
-
- // The rest of the variables are arrays!
- try
- {
- clustalObj = new Clustal();
-
- // selecting the size prevents the resizing of the vector which is expensive.
- typeArg = new StringArray(3);
- bootLabelsArg = new StringArray(3);
- outOrderArg = new StringArray(3);
- caseArg = new StringArray(3);
- seqNoArg = new StringArray(3);
- seqNoRangeArg = new StringArray(3);
- scoreArg = new StringArray(3);
- outputArg = new StringArray(7);
- outputTreeArg = new StringArray(5);
- outputSecStrArg = new StringArray(5);
- cmdLineType = new StringArray(6);
- clusterAlgorithm = new StringArray(3);
- iterationArg = new StringArray(4);
-
- params = new StringArray; // Wait until I need it!!!!!!!!!
- paramArg = new StringArray;
- }
- catch(const exception &ex)
- {
- cerr << ex.what() << endl;
- cerr << "Terminating program. Cannot continue" << std::endl;
- exit(1);
- }
-
- (*typeArg)[0] = "protein";
- (*typeArg)[1] = "dna";
- (*typeArg)[2] = "";
-
- (*bootLabelsArg)[0] = "node";
- (*bootLabelsArg)[1] = "branch";
- (*bootLabelsArg)[2] = "";
-
- (*outOrderArg)[0] = "input";
- (*outOrderArg)[1] = "aligned";
- (*outOrderArg)[2] = "";
-
- (*caseArg)[0] = "lower";
- (*caseArg)[1] = "upper";
- (*caseArg)[2] = "";
-
- (*seqNoArg)[0] = "off";
- (*seqNoArg)[1] = "on";
- (*seqNoArg)[2] = "";
-
- (*seqNoRangeArg)[0] = "off";
- (*seqNoRangeArg)[1] = "on";
- (*seqNoRangeArg)[2] = "";
-
- (*scoreArg)[0] = "percent";
- (*scoreArg)[1] = "absolute";
- (*scoreArg)[2] = "";
-
- (*outputArg)[0] = "gcg";
- (*outputArg)[1] = "gde";
- (*outputArg)[2] = "pir";
- (*outputArg)[3] = "phylip";
- (*outputArg)[4] = "nexus";
- (*outputArg)[5] = "fasta";
- (*outputArg)[6] = "";
-
- (*outputTreeArg)[0] = "nj";
- (*outputTreeArg)[1] = "phylip";
- (*outputTreeArg)[2] = "dist";
- (*outputTreeArg)[3] = "nexus";
- (*outputTreeArg)[4] = "";
-
- (*outputSecStrArg)[0] = "structure";
- (*outputSecStrArg)[1] = "mask";
- (*outputSecStrArg)[2] = "both";
- (*outputSecStrArg)[3] = "none";
- (*outputSecStrArg)[4] = "";
-
- (*cmdLineType)[0] = " ";
- (*cmdLineType)[1] = "=n ";
- (*cmdLineType)[2] = "=f ";
- (*cmdLineType)[3] = "=string ";
- (*cmdLineType)[4] = "=filename ";
- (*cmdLineType)[5] = "";
-
- (*clusterAlgorithm)[0] = "nj";
- (*clusterAlgorithm)[1] = "upgma";
- (*clusterAlgorithm)[2] = "";
-
- (*iterationArg)[0] = "tree";
- (*iterationArg)[1] = "alignment";
- (*iterationArg)[2] = "none";
- (*iterationArg)[3] = "";
-
- userMatrixName = "";
- pwUserMatrixName = "";
- DNAUserMatrixName = "";
- pwDNAUserMatrixName = "";
-
- clustalTreeName = "";
- distTreeName = "";
- phylipTreeName = "";
- nexusTreeName = "";
- p1TreeName = "";
- p2TreeName = "";
- pimName = "";
-
- // NOTE there were only 3 params for the last one, so I put in NULL for the 4th.
- ctr=0;
- cmdLineFile[ctr++] = getCmdLineDataStruct("infile", &setInfile, FILARG, NULL);
- cmdLineFile[ctr++] = getCmdLineDataStruct("profile1", &setProfile1, FILARG, NULL);
- cmdLineFile[ctr++] = getCmdLineDataStruct("profile2", &setProfile2, FILARG, NULL);
- cmdLineFile[ctr++] = getCmdLineDataStruct("", NULL, -1, NULL);
- // FIXME: final ctr index is hardcoded in CommandLineParser
-
- ctr=0;
- cmdLineVerb[ctr++] = getCmdLineDataStruct("help", &setHelp, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("fullhelp", &setFullHelp, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("quiet", &setQuiet, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("check", &setHelp, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("options", &setOptions, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("align", &setAlign, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("newtree", &setNewTree, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("usetree", &setUseTree, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("newtree1", &setNewTree1, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("usetree1", &setUseTree1, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("newtree2", &setNewTree2, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("usetree2", &setUseTree2, FILARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("bootstrap", &setBootstrap, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("tree", &setTree, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("quicktree", &setQuickTree, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("convert", &setConvert, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("interactive", &setInteractive, NOARG, NULL);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("batch", &setBatch, NOARG, NULL);
- // Mark change 16-feb-2007 I added options for doing LE and iteration
- cmdLineVerb[ctr++] = getCmdLineDataStruct("iteration", &setDoIteration,
- OPTARG, iterationArg);
- cmdLineVerb[ctr++] = getCmdLineDataStruct("", NULL, -1, NULL);
- // FIXME: final ctr index is hardcoded in CommandLineParser.h
-
- // NOTE Start back here!!!!!!!!!!!!
- ctr=0;
- cmdLinePara[ctr++] = getCmdLineDataStruct("type", &setType, OPTARG, typeArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("profile", &setProfile, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("sequences", &setSequences, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("matrix", &setMatrix, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("dnamatrix", &setDNAMatrix, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("negative", &setNegative, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("noweights", &setNoWeights, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("gapopen", &setGapOpen, FLTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("gapext", &setGapExtend, FLTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("endgaps", &setUseEndGaps, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("nopgap", &setNoPGap, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("nohgap", &setNoHGap, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("novgap", &setNoVGap, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("hgapresidues", &setHGapRes, STRARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("maxdiv", &setMaxDiv, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("gapdist", &setGapDist, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pwmatrix", &setPWMatrix, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pwdnamatrix", &setPWDNAMatrix, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pwgapopen", &setPWGapOpen, FLTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pwgapext", &setPWGapExtend, FLTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("ktuple", &setKtuple, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("window", &setWindow, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pairgap", &setPairGap, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("topdiags", &setTopDiags, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("score", &setScore, OPTARG, scoreArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("transweight", &setTransWeight, FLTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("seed", &setSeed, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("kimura", &setKimura, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("tossgaps", &setTossGaps, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("bootlabels", &setBootLabels, OPTARG,
- bootLabelsArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("debug", &setDebug, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("output", &setOutput, OPTARG, outputArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("outputtree", &setOutputTree, OPTARG,
- outputTreeArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("outfile", &setOutfile, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("outorder", &setOutOrder, OPTARG, outOrderArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("case", &setCase, OPTARG, caseArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("seqnos", &setSeqNo, OPTARG, seqNoArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("seqno_range", &setSeqNoRange, OPTARG,
- seqNoRangeArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("range", &setRange, STRARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("nosecstr1", &setSecStruct1, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("nosecstr2", &setSecStruct2, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("secstrout", &setSecStructOutput, OPTARG,
- outputSecStrArg);
- cmdLinePara[ctr++] = getCmdLineDataStruct("helixgap", &setHelixGap, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("strandgap", &setStrandGap, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("loopgap", &setLoopGap, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("terminalgap", &setTerminalGap, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("helixendin", &setHelixEndIn, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("helixendout", &setHelixEndOut, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("strandendin", &setStrandEndIn, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("strandendout",&setStrandEndOut, INTARG, NULL);
- // NOTE these one was added to test the new LE scoring and iterations
- cmdLinePara[ctr++] = getCmdLineDataStruct("numiter",&setNumIterations, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("clustering", &setTreeAlgorithm, OPTARG,
- clusterAlgorithm);
- cmdLinePara[ctr++] = getCmdLineDataStruct("maxseqlen", &setMaxSeqLen, INTARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("stats", &setStatsFile, FILARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("pim", &setOutputPim, NOARG, NULL);
- cmdLinePara[ctr++] = getCmdLineDataStruct("", NULL, -1, NULL);
- // FIXME: final ctr index is hardcoded in CommandLineParser
-
- parseParams(args, xmenus);
-}
-
-CommandLineParser::~CommandLineParser()
-{
- // Free up menory used here!
- // NOTE any dynamically allocated memory (new) must be deleted.
- delete clustalObj;
- delete typeArg;
- delete bootLabelsArg;
- delete outOrderArg;
- delete caseArg;
- delete seqNoArg;
- delete seqNoRangeArg;
- delete scoreArg;
- delete outputArg;
- delete outputTreeArg;
- delete outputSecStrArg;
- delete cmdLineType;
- delete params;
- delete paramArg;
- delete clusterAlgorithm;
- delete iterationArg;
-}
-
-void CommandLineParser::parseParams(StringArray* args, bool xmenus)
-{
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Parsing Command line Parameters!\n");
- }
- #endif
-
- int i, j, temp;
- //int len;
- //static int cl_error_code = 0;
- //char path[FILENAMELEN];
- int numparams = 0;
-
- bool doAlign, doConvert, doAlignUseOldTree, doGuideTreeOnly, doTreeFromAlign,
- doBootstrap, doProfileAlign, doSomething;
-
- if (!xmenus && userParameters->getDisplayInfo())
- {
- cout << std::endl << std::endl << std::endl;
- cout << " CLUSTAL " << userParameters->getRevisionLevel()
- << " Multiple Sequence Alignments" << std::endl << std::endl << std::endl;
- }
-
- doAlign = doConvert = doAlignUseOldTree = doGuideTreeOnly = doTreeFromAlign = false;
- doBootstrap = doProfileAlign = doSomething = false;
-
- numparams = checkParam(args, params, paramArg);
-
- if (numparams < 0)
- {
- exit(1);
- }
-
-//**********************************************************************
-//*** Note: This part of the code is to print out the options with ****
-//*** their expected value types/ranges ****
-//**********************************************************************
-
- if(setHelp != -1)
- {
- userParameters->setHelpFlag(true);
- if (xmenus) {
- // gui will display help
- // but parse rest of args anyway and don't return
- } else {
- clustalObj->getHelp('9');
- exit(1);
- }
- }
-
- if(setFullHelp != -1)
- {
- userParameters->setFullHelpFlag(true);
- if (xmenus) {
- // gui will handle this
- // but parse rest of args anyway and don't return
- } else {
- clustalObj->getFullHelp();
- exit(1);
- }
- }
-
- if(setQuiet != -1)
- {
- userParameters->setDisplayInfo(false);
- utilityObject->beQuiet(true);
- } else {
- userParameters->setDisplayInfo(true);
- utilityObject->beQuiet(false);
- }
-
-
- // need to check maxseqlen before reading input file
- if (setMaxSeqLen != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting max allowed sequence length.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setMaxSeqLen].length() > 0)
- {
- if (sscanf((*paramArg)[setMaxSeqLen].c_str(),"%d", &temp) != 1)
- {
- reportBadOptionAndExit("maxseqlen", "integer");
- }
- }
- if(temp > 0)
- {
- userParameters->setMaxAllowedSeqLength(temp);
- }
- else
- {
- cerr << "Cannot use a negative value for maximum sequence length. Using default" << std::endl;
- }
-
- }
-
- if (setStatsFile != -1)
- {
- if((*paramArg)[setStatsFile].length() > 0)
- {
- statsObject->setEnabled(true);
- statsObject->setStatsFile((*paramArg)[setStatsFile]);
- }
- }
-
-
- if (setOutputPim != -1)
- {
- userParameters->setOutputPim(true);
- }
-
-
- /*if(setDoIteration != -1)
- {
- userParameters->setDoRemoveFirstIteration(true);
- }*/
-
- if(setDoIteration != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting iteration parameter.");
- }
- #endif
- if((*paramArg)[setDoIteration].length() > 0)
- {
- temp = findMatch((*paramArg)[setDoIteration], iterationArg, 3);
- if(temp == 0)
- {
- userParameters->setDoRemoveFirstIteration(TREE);
- }
- else if(temp == 1)
- {
- userParameters->setDoRemoveFirstIteration(ALIGNMENT);
- }
- else if(temp == 2)
- {
- userParameters->setDoRemoveFirstIteration(NONE);
- }
- else
- {
- cerr << "Unknown option for iteration. Setting to NONE" << std::endl;
- userParameters->setDoRemoveFirstIteration(NONE);
- }
- }
- }
- if(setOptions != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Displaying options!\n");
- }
- #endif
-
- cout << "clustalw option list:-" << std::endl;
-
- for (i = 0; cmdLineVerb[i].str[0] != '\0'; i++)
- {
- cout << "\t\t" << default_commandsep << cmdLineVerb[i].str
- << (*cmdLineType)[cmdLineVerb[i].type];
-
- if (cmdLineVerb[i].type == OPTARG)
- {
- if (cmdLineVerb[i].arg != NULL)
- {
- cout << "=" << cmdLineVerb[i].arg->at(0);
- for(j = 1; j < (int)cmdLineVerb[i].arg->size() - 1; j++)
- {
- cout << " OR " << cmdLineVerb[i].arg->at(j);
- }
- }
- }
- cout << std::endl;
- }
- for (i = 0; cmdLineFile[i].str[0] != '\0'; i++)
- {
- cout<<"\t\t" << default_commandsep << cmdLineFile[i].str
- << (*cmdLineType)[cmdLineFile[i].type];
-
- if (cmdLineFile[i].type == OPTARG)
- {
- if (cmdLineFile[i].arg != NULL)
- {
-
- cout << "=" << cmdLineFile[i].arg->at(0);
- for(j = 1; j < (int)cmdLineFile[i].arg->size() - 1; j++)
- {
- cout << " OR " << cmdLineFile[i].arg->at(j);
- }
- }
- }
- cout << std::endl;
- }
- for (i = 0; cmdLinePara[i].str[0] != '\0'; i++)
- {
- cout <<"\t\t" << default_commandsep << cmdLinePara[i].str
- << (*cmdLineType)[cmdLinePara[i].type];
-
- if (cmdLinePara[i].type == OPTARG)
- {
- if (cmdLinePara[i].arg != NULL)
- {
-
- cout << "=" << cmdLinePara[i].arg->at(0);
- for(j = 1; j < (int)cmdLinePara[i].arg->size() - 1; j++)
- {
- cout << " OR " << cmdLinePara[i].arg->at(j);
- }
- }
- }
- cout << std::endl;
- }
- exit(1);
- }
-
-
-//*****************************************************************************
-// Check to see if sequence type is explicitely stated..override ************
-// the automatic checking (DNA or Protein). /type=d or /type=p *************
-//****************************************************************************
-
- if(setType != -1)
- {
- string msg;
- if(((*paramArg)[setType].length()) > 0)
- {
- temp = findMatch((*paramArg)[setType], typeArg, 2);
- if(temp == 0)
- {
- userParameters->setDNAFlag(false);
- userParameters->setExplicitDNAFlag(true);
- msg = "Sequence type explicitly set to Protein";
- cout << msg << std::endl;
- }
- else if(temp == 1)
- {
- msg = "Sequence type explicitly set to DNA";
- cout << msg << std::endl;
- userParameters->setDNAFlag(true);
- userParameters->setExplicitDNAFlag(true);
- }
- else
- {
- msg = "Unknown sequence type " + (*paramArg)[setType];
- cerr << std::endl << msg << endl;
- }
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(msg);
- }
- #endif
- }
- }
-
-
-//***************************************************************************
-// check to see if 1st parameter does not start with '/' i.e. look for an *
-// input file as first parameter. The input file can also be specified *
-// by /infile=fname. *
-//***************************************************************************
-// JULIE - moved to checkParam()
- // if(paramstr[0] != '/')
- // {
- // strcpy(seqName, params[0]);
- // }
-
-
-//*************************************************
-// Look for /infile=file.ext on the command line *
-//*************************************************
-
- if(setInfile != -1)
- {
- if((*paramArg)[setInfile].length() <= 0)
- {
- exitWithErrorMsg("Bad sequence file name");
- }
- userParameters->setSeqName((*paramArg)[setInfile]);
-
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- string msg = "Sequence file name (seqName) has been set to ";
- msg += userParameters->getSeqName();
- logObject->logMsg(msg);
- }
- #endif
- }
-
- // NOTE keep an eye on this part to see if it works.
- if(userParameters->getSeqName() != "")
- {
- // NOTE I will need to cheack if it has been successful before setting
- // doSomething to true.
- int code;
- code = clustalObj->commandLineReadSeq(1);
- if(code == OK)
- {
- doSomething = true;
- }
- else
- {
- doSomething = false;
- exit(1);
- }
- }
-
- // NOTE call the other function to set the parameter values!!
- setOptionalParam();
-
-//*********************************************************
-// Look for /profile1=file.ext AND /profile2=file2.ext *
-// You must give both file names OR neither. *
-//********************************************************
-
-
- if(setProfile1 != -1)
- {
- if((*paramArg)[setProfile1].length() <= 0)
- {
- exitWithErrorMsg("Bad profile 1 file name");
- }
-
- clustalObj->profile1Input((*paramArg)[setProfile1]);
- }
-
- if(setProfile2 != -1)
- {
- if((*paramArg)[setProfile2].length() <= 0)
- {
- exitWithErrorMsg("Bad profile 2 file name");
- }
- if(userParameters->getProfile1Empty())
- {
- exitWithErrorMsg("Only 1 profile file (profile 2) specified.");
- }
-
- clustalObj->profile2Input((*paramArg)[setProfile2]);
- doSomething = doProfileAlign = true;
- }
-
-//************************************************************************
-// Look for /tree or /bootstrap or /align or /usetree ******************
-//************************************************************************
-
- if (setBatch != -1)
- {
- userParameters->setInteractive(false);
- }
-
- if (setInteractive != -1)
- {
- userParameters->setInteractive(true);
- if (setQuiet!=-1) {
- cout << "interactive menu: overriding " << default_commandsep << "quiet" << std::endl;
- userParameters->setDisplayInfo(true);
- utilityObject->beQuiet(false);
- }
- }
-
- if (userParameters->getInteractive())
- {
- setTree = -1;
- setBootstrap = -1;
- setAlign = -1;
- setUseTree = -1;
- setUseTree1 = -1;
- setUseTree2 = -1;
- setNewTree = -1;
- setConvert = -1;
- }
-
- if(setTree != -1 )
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot draw tree. No input alignment file");
- }
- else
- {
- doTreeFromAlign = true;
- }
- }
-
- if(setBootstrap != -1)
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot bootstrap tree. No input alignment file");
- }
- else
- {
- temp = 0;
- // Check if there is anything in the string!
- if((*paramArg)[setBootstrap].length() > 0)
- {
- if (sscanf((*paramArg)[setBootstrap].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("bootstrap", "integer");
- }
- }
- if(temp > 0)
- {
- userParameters->setBootNumTrials(temp);
- }
- doBootstrap = true;
- }
- }
-
- if(setAlign != -1)
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot align sequences. No input file");
- }
- else
- {
- doAlign = true;
- }
- }
-
- if(setConvert != -1)
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot convert sequences. No input file");
- }
- else
- {
- doConvert = true;
- }
- }
-
- if(setUseTree != -1)
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot align sequences. No input file");
- }
- else
- {
- if((*paramArg)[setUseTree].length() == 0)
- {
- exitWithErrorMsg("Cannot align sequences. No tree file specified");
- }
- else
- {
- phylipTreeName = (*paramArg)[setUseTree];
- }
- userParameters->setUseTreeFile(true);
- doAlignUseOldTree = true;
- }
- }
-
- if(setNewTree != -1)
- {
- if(userParameters->getEmpty())
- {
- exitWithErrorMsg("Cannot align sequences. No input file");
- }
- else
- {
- if((*paramArg)[setNewTree].length() == 0)
- {
- exitWithErrorMsg("Cannot align sequences. No tree file specified");
- }
- else
- {
- phylipTreeName = (*paramArg)[setNewTree];
- }
- userParameters->setNewTreeFile(true);
- doGuideTreeOnly = true;
- }
- }
-
- if(setUseTree1 != -1)
- {
- if(userParameters->getProfile1Empty())
- {
- exitWithErrorMsg("Cannot align profiles. No input file");
- }
- else if(profileType == SEQUENCE)
- {
- reportInvalidOptionAndExit("usetree1");
- }
- else
- {
- if((*paramArg)[setUseTree1].length() == 0)
- {
- exitWithErrorMsg("Cannot align profiles. No tree file specified");
- }
- else
- {
- p1TreeName = (*paramArg)[setUseTree1];
- }
- userParameters->setUseTree1File(true);
- doAlignUseOldTree = true;
- }
- }
-
- if(setNewTree1 != -1)
- {
- if(userParameters->getProfile1Empty())
- {
- exitWithErrorMsg("Cannot align profiles. No input file");
- }
- else if(profileType == SEQUENCE)
- {
- reportInvalidOptionAndExit("newtree1");
- }
- else
- {
- if((*paramArg)[setNewTree1].length() == 0)
- {
- exitWithErrorMsg("Cannot align profiles. No tree file specified");
- }
- else
- {
- p1TreeName = (*paramArg)[setNewTree1];
- }
- userParameters->setNewTree1File(true);
- }
- }
-
- if(setUseTree2 != -1)
- {
- if(userParameters->getProfile2Empty())
- {
- exitWithErrorMsg("Cannot align profiles. No input file");
- }
- else if(profileType == SEQUENCE)
- {
- reportInvalidOptionAndExit("usetree2");
- }
- else
- {
- if((*paramArg)[setUseTree2].length() == 0)
- {
- exitWithErrorMsg("Cannot align profiles. No tree file specified");
- }
- else
- {
- p2TreeName = (*paramArg)[setUseTree2];
- }
- userParameters->setUseTree2File(true);
- doAlignUseOldTree = true;
- }
- }
-
- if(setNewTree2 != -1)
- {
- if(userParameters->getProfile2Empty())
- {
- exitWithErrorMsg("Cannot align profiles. No input file");
- }
- else if(profileType == SEQUENCE)
- {
- reportInvalidOptionAndExit("newtree2");
- }
- else
- {
- if((*paramArg)[setNewTree2].length() == 0)
- {
- exitWithErrorMsg("Cannot align profiles. No tree file specified");
- }
- else
- {
- p2TreeName = (*paramArg)[setNewTree2];
- }
- userParameters->setNewTree2File(true);
- }
- }
-
-
- if( (!doTreeFromAlign) && (!doBootstrap) && (!userParameters->getEmpty()) && (!doProfileAlign) &&
- (!doAlignUseOldTree) && (!doGuideTreeOnly) && (!doConvert))
- {
- doAlign = true;
- }
-
-//** ? /quicktree
- if(setQuickTree != -1)
- {
- userParameters->setQuickPairAlign(true);
- }
-
- // NOTE
- if(userParameters->getDNAFlag())
- {
- userParameters->setDNAParams();
- }
- else
- {
- userParameters->setProtParams();
- }
-
- if(userParameters->getInteractive())
- {
- if (!xmenus)
- {
- userParameters->setMenuFlag(true);
- }
- return;
- }
-
-
- if(!doSomething)
- {
- exitWithErrorMsg("No input file(s) specified");
- }
-
-
-
-
-//***************************************************************************
-// Now do whatever has been requested ***************************************
-//***************************************************************************
-// NOTE This part is obviously not done yet! Functions not working in Clustal!!!!
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Now doing the requested task(s)");
- }
- #endif
-
- if(doProfileAlign)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing profile align");
- }
- #endif
- if (profileType == PROFILE)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Calling Profile_align in clustal obj!");
- }
- #endif
- clustalObj->profileAlign(&p1TreeName, &p2TreeName);
- }
- else
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Calling sequencesAlignToProfile in clustal obj!");
- }
- #endif
- clustalObj->sequencesAlignToProfile(&phylipTreeName);
- }
- }
-
- else if(doAlign)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing Alignment");
- }
- #endif
- clustalObj->align(&phylipTreeName);
- }
-
- else if(doConvert)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing filetype conversion");
- }
- #endif
- clustalObj->outputNow();
- }
-
- else if (doAlignUseOldTree)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing Alignment only");
- }
- #endif
- clustalObj->doAlignUseOldTree(&phylipTreeName);
- }
-
- else if(doGuideTreeOnly)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing tree only");
- }
- #endif
- clustalObj->doGuideTreeOnly(&phylipTreeName);
- }
-
- else if(doTreeFromAlign)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing tree");
- }
- #endif
- clustalObj->phylogeneticTree(&phylipTreeName, &clustalTreeName, &distTreeName,
- &nexusTreeName, pimName);
- }
-
- else if(doBootstrap)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Doing Bootstrap");
- }
- #endif
- clustalObj->bootstrapTree(&phylipTreeName, &clustalTreeName, &nexusTreeName);
- }
-
- cout << std::endl;
-
-}
-
-
-
-int CommandLineParser::checkParam(StringArray* args, StringArray* params,
- StringArray* paramArg)
-{
- int len, i, j, nameFirst, num;
- //int k;
- vector<int> match;
- match.resize(MAXARGS);
- bool name1 = false;
-
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Checking Parameters!");
- }
- #endif
-
- if(args->size() == 0) // NOTE I think this will work better!
- {
- cout << "The argument list is empty\n";
- return 0;
- }
-
- // AW: first arg is an input file if it doesnt start with commandsep
- if (VALID_COMMAND_SEP.find((*args)[0][0], 0) == string::npos)
- {
- name1 = true;
- params->push_back((*args)[0]); // Put the string at the back of this vector.
- paramArg->push_back(""); // Push a blank string onto the first element.
- }
- else // It is not a file name
- {
- params->push_back((*args)[0].substr(1));
- }
-
- for (i = 1; i < (int)args->size(); i++)
- {
- params->push_back(""); // Empty string!
-
- for(j = 0; j < (int)(*args)[i].length() - 1; j++)
- {
- if(isprint((*args)[i][j + 1])) // Character printable?
- {
- // We start at j + 1 because each option should begin with commandsep
- (*params)[i].append((*args)[i].substr(j + 1, 1));
- }
- }
- }
- num = i;
-
-
- // AW:
- // params are now setup
- // extract paramArgs in next step
-
-
- if ((int)args->size() > MAXARGS)
- {
- cerr << "Error: too many command line arguments\n";
- return(-1);
- }
- /*
- special case - first parameter is input fileName
- */
- nameFirst = 0;
- if(name1 == true) // If name of file is first argument
- {
- userParameters->setSeqName((*params)[0]);
- /* Andreas Wilm (UCD) 2008-03-19:
- conversion nowadays unnecessary and makes trouble
-
- /@ JULIE
- convert to lower case now
- @/
- #ifndef UNIX
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Converting seqName to lower case.\n");
- }
- string temp = ConvertStringToLower(userParameters->getSeqName());
- userParameters->setSeqName(temp);
- #endif
- */
- nameFirst = 1;
- }
-
- // NOTE if name first we should start at the 2nd element in paramArg
- // This loop is used to set up the paramArg vector!
- for (i = nameFirst; i < num; i++)
- {
- bool has_arg=false;
- paramArg->push_back(""); // Push a new empty string on.
- len = (*params)[i].length();
- for(j = 0; j < len; j++)
- {
- if((*params)[i][j] == '=')
- {
- has_arg=true;
- (*paramArg)[i].assign((*params)[i].substr(j + 1, len - j -1));
- // Trim off the bit from the '=' to the end, and put all in lower case!
- (*params)[i].assign(ConvertStringToLower((*params)[i].substr(0, j)));
- break;
- }
- }
- // Andreas Wilm (UCD): 2008-03-19:
- // this convert nonarg params to lowercase (-QuIcKtReE etc)
- if (!has_arg) {
- (*params)[i].assign(ConvertStringToLower((*params)[i]));
- }
- }
-
- if(paramArg->size() != params->size())
- {
- cerr << "There is something wrong with arguments. Lengths different\n";
- return -1;
- }
-
- /*
- for each parameter given on the command line, first search the list of recognised
- optional parameters....
- */
- for (i = 0; i < num; i++)
- {
- if ((i == 0) && (name1 == true))
- {
- continue;
- }
- j = 0;
- match[i] = -1;
- for(;;)
- {
- if (cmdLinePara[j].str[0] == '\0')
- {
- // Think this means we have not found it!
- break;
- }
- if (!(*params)[i].compare(cmdLinePara[j].str))
- {
- match[i] = j; // Match has been found!
- *cmdLinePara[match[i]].flag = i;
-
- if ((cmdLinePara[match[i]].type != NOARG) && ((*paramArg)[i] == ""))
- {
- cerr << "Error: parameter required for " << default_commandsep << (*params)[i] << endl;
- return -1;
-
- /* Andreas Wilm (UCD) 2008-03-19:
- * conversion nowadays unnecessary and breaks things
- *
- * // JULIE
- * // convert parameters to lower case now, unless the parameter is a fileName
- * #ifdef UNIX
- * else if (cmdLinePara[match[i]].type != FILARG && (*paramArg)[i] != "")
- * #endif
- */
-
- } else if (cmdLinePara[match[i]].type != FILARG && (*paramArg)[i] != "") {
- if ((*paramArg)[i] != "")
- {
- // lowercase arg if not a filename to support mixed case
- (*paramArg)[i].assign(ConvertStringToLower((*paramArg)[i]));
- }
- }
- break;
- }
- j++;
- }
- }
-
- /*
- ....then the list of recognised input files,....
- */
- for (i = 0; i < num; i++)
- {
- if ((i == 0) && (name1 == true))
- {
- continue;
- }
- if (match[i] != -1)
- {
- continue;
- }
- j = 0;
- for(;;)
- {
- if (cmdLineFile[j].str[0] == '\0')
- {
- // Have not found a match!
- break;
- }
- if (!(*params)[i].compare(cmdLineFile[j].str))
- {
- match[i] = j;
- *cmdLineFile[match[i]].flag = i;
- if ((cmdLineFile[match[i]].type != NOARG) &&
- ((*paramArg)[i] == ""))
- {
- cerr << "Error: parameter required for " << default_commandsep << (*params)[i] << endl;
- return -1;
- }
- break;
- }
- j++;
- }
- }
-
- /*
- ....and finally the recognised verbs.
- */
- for (i = 0; i < num; i++)
- {
- if ((i == 0) && (name1 == true))
- {
- continue;
- }
- if (match[i] != -1)
- {
- continue;
- }
- j = 0;
- for(;;)
- {
- if (cmdLineVerb[j].str[0] == '\0')
- {
- // Havent found it!
- break;
- }
- if (!(*params)[i].compare(cmdLineVerb[j].str))
- {
- match[i] = j;
- *cmdLineVerb[match[i]].flag = i;
- if ((cmdLineVerb[match[i]].type != NOARG) && ((*paramArg)[i] == ""))
- {
- cerr << "Error: parameter required for " << default_commandsep << (*params)[i] << endl;
- return -1;
- }
- break;
- }
- j++;
- }
- }
-
- /*
- check for any unrecognised parameters.
- */
- for (i = 0; i < num; i++)
- {
- if (match[i] == -1)
- {
- cerr << "Error: unknown option " << default_commandsep << (*params)[i] << endl;
- return -1;
- }
- }
- return(num);
-}
-
-void CommandLineParser::setOptionalParam()
-{
- int temp;
- int _ktup, _windgap, _signif, _window = 0;
- string _matrixname;
- //int c, i;
- float ftemp;
- //char tstr[100];
-
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg("Setting optional parameters.");
- }
- #endif
- //****************************************************************************
- //* look for parameters on command line e.g. gap penalties, k-tuple etc. *
- //****************************************************************************
-
- // Mark change 16-2-2007.
-
- if(setNumIterations != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting num iterations parameter.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setNumIterations].length() > 0)
- {
- if (sscanf((*paramArg)[setNumIterations].c_str(),"%d", &temp) != 1)
- {
- reportBadOptionAndExit("numiter", "int");
- temp = 0;
- }
- }
- if(temp > 0)
- {
- userParameters->setNumIterations(temp);
- }
- else
- {
- exitWithErrorMsg("Cannot use a negative value for number of iterations.");
- }
- }
-
-
- //** ? /score=percent or /score=absolute *
- if(setScore != -1)
- {
- if((*paramArg)[setScore].length() > 0)
- {
- temp = findMatch((*paramArg)[setScore], scoreArg, 2);
- if(temp == 0)
- {
- userParameters->setPercent(true);
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting score parameter = percent");
- }
- #endif
- }
- else if(temp == 1)
- {
- userParameters->setPercent(false);
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting score parameter = absolute");
- }
- #endif
- }
- else
- {
- cerr << "\nUnknown SCORE type: " << (*paramArg)[setScore] << endl;
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" problem setting score type!!!!!");
- }
- #endif
- }
- }
- }
- // NOTE I decided to stay with sscanf for getting the int. Options in c++ no better.
- //** ? /seed=n *
- if(setSeed != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting seed parameter.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setSeed].length() > 0)
- {
- if (sscanf((*paramArg)[setSeed].c_str(),"%d",&temp) != 1)
- {
- reportBadOptionAndExit("seed", "integer");
- }
- }
- if(temp > 0)
- {
- userParameters->setBootRanSeed(temp);
- }
- cout<< "\ntemp = " << temp << "; seed = " << userParameters->getBootRanSeed()
- << ";\n";
- }
-
- if(setTreeAlgorithm != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting clustering algorithm parameter.");
- }
- #endif
- if((*paramArg)[setTreeAlgorithm].length() > 0)
- {
- temp = findMatch((*paramArg)[setTreeAlgorithm], clusterAlgorithm, 2);
- if(temp == 0)
- {
- userParameters->setClusterAlgorithm(NJ);
- }
- else if(temp == 1)
- {
- userParameters->setClusterAlgorithm(UPGMA);
- }
- else
- {
- cerr << "Unknown option for clustering algorithm. Using default\n";
- userParameters->setClusterAlgorithm(NJ);
- }
- }
- }
-
-
- //** ? /output=PIR, GCG, GDE or PHYLIP *
- if(setOutput != -1)
- {
-
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting output parameter.");
- }
- #endif
- if((*paramArg)[setOutput].length() > 0)
- {
- temp = findMatch((*paramArg)[setOutput], outputArg, 6);
- if (temp >= 0 && temp <= 5)
- {
- userParameters->setOutputClustal(false);
- userParameters->setOutputGCG(false);
- userParameters->setOutputPhylip(false);
- userParameters->setOutputNbrf(false);
- userParameters->setOutputGde(false);
- userParameters->setOutputNexus(false);
- userParameters->setOutputFasta(false);
- }
- switch (temp)
- {
- case 0: // GCG
- userParameters->setOutputGCG(true);
- break;
- case 1: // GDE
- userParameters->setOutputGde(true);
- break;
- case 2: // PIR
- userParameters->setOutputNbrf(true);
- break;
- case 3: // PHYLIP
- userParameters->setOutputPhylip(true);
- break;
- case 4: // NEXUS
- userParameters->setOutputNexus(true);
- break;
- case 5: // NEXUS
- userParameters->setOutputFasta(true);
- break;
- default:
- // FIXME AW: 1.83 behaves the same, but shouldnt
- // we exit here?
- exitWithErrorMsg("Unknown OUTPUT type: " + (*paramArg)[setOutput]);
- }
- }
- }
- //** ? /outputtree=NJ or PHYLIP or DIST or NEXUS
- if(setOutputTree != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting outputtree parameter.");
- }
- #endif
- if((*paramArg)[setOutputTree].length() > 0)
- {
- temp = findMatch((*paramArg)[setOutputTree], outputTreeArg, 4);
- switch (temp)
- {
- case 0: // NJ
- userParameters->setOutputTreeClustal(true);
- break;
- case 1: // PHYLIP
- userParameters->setOutputTreePhylip(true);
- break;
- case 2: // DIST
- userParameters->setOutputTreeDistances(true);
- break;
- case 3: // NEXUS
- userParameters->setOutputTreeNexus(true);
- break;
- default:
- cerr << "\nUnknown OUTPUT TREE type: "
- << (*paramArg)[setOutputTree] << endl;
- }
- }
- }
-
- //** ? /profile (sets type of second input file to profile)
- if(setProfile != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting profileType = PROFILE.");
- }
- #endif
- profileType = PROFILE;
- }
-
- //** ? /sequences (sets type of second input file to list of sequences)
- if(setSequences != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting profileType = SEQUENCE.");
- }
- #endif
- profileType = SEQUENCE;
- }
-
-
- //** ? /ktuple=n
- if(setKtuple != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting ktup parameter.");
- }
- #endif
- _ktup = 0;
- if((*paramArg)[setKtuple].length() > 0)
- {
- if (sscanf((*paramArg)[setKtuple].c_str(),"%d",&_ktup)!=1)
- {
- reportBadOptionAndExit("ktuple", "integer");
- _ktup = 0;
- }
- }
-
- if(_ktup > 0)
- {
- if(userParameters->getDNAFlag())
- {
- if(_ktup <= 4)
- {
- userParameters->setKtup(_ktup);
- userParameters->setDNAKtup(_ktup);
- userParameters->setWindowGap(_ktup + 4);
- userParameters->setDNAWindowGap(_ktup + 4);
- } else {
- // see comment in bug 185
- cerr << "WARNING: Ignoring invalid ktuple of " << _ktup << " (must be <=4)" << std::endl;
- }
- }
- else
- {
- if(_ktup <= 2)
- {
- userParameters->setKtup(_ktup);
- userParameters->setAAKtup(_ktup);
- userParameters->setWindowGap(_ktup + 3);
- userParameters->setAAWindowGap(_ktup + 3);
- // AW: why set setDNAWindowGap? we are in AA mode
- // userParameters->setDNAWindowGap(_ktup + 4);
- } else {
- // see comment in bug 185
- cerr << "WARNING: Ignoring invalid ktuple of " << _ktup << " (must be <=2)" << std::endl;
- }
- }
- }
- }
-
- //** ? /pairgap=n
- if(setPairGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting pairgap parameter.");
- }
- #endif
- _windgap = 0;
- if((*paramArg)[setPairGap].length() > 0)
- {
- if (sscanf((*paramArg)[setPairGap].c_str(),"%d",&_windgap)!=1)
- {
- reportBadOptionAndExit("pairgap", "integer");
- _windgap = 0;
- }
- if(_windgap > 0)
- {
- if(userParameters->getDNAFlag())
- {
- if(_windgap > userParameters->getKtup())
- {
- userParameters->setWindowGap(_windgap);
- userParameters->setDNAWindowGap(_windgap);
- }
- }
- else
- {
- if(_windgap > userParameters->getKtup())
- {
- userParameters->setWindowGap(_windgap);
- userParameters->setAAWindowGap(_windgap);
- }
- }
- }
- }
- }
-
- //** ? /topdiags=n
- if(setTopDiags != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting topdiags parameter.");
- }
- #endif
- _signif = 0;
- if((*paramArg)[setTopDiags].length() > 0)
- {
- if (sscanf((*paramArg)[setTopDiags].c_str(),"%d",&_signif)!=1)
- {
- reportBadOptionAndExit("topdiags", "integer");
- }
- }
- if(_signif > 0)
- {
- if(userParameters->getDNAFlag())
- {
- if(_signif > userParameters->getKtup())
- {
- userParameters->setSignif(_signif);
- userParameters->setDNASignif(_signif);
- }
- }
- else
- {
- if(_signif > userParameters->getKtup())
- {
- userParameters->setSignif(_signif);
- userParameters->setAASignif(_signif);
- }
- }
- }
- }
-
-
- //** ? /window=n
- if(setWindow != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting window parameter.");
- }
- #endif
- _window = 0;
- if((*paramArg)[setWindow].length() > 0)
- {
- if (sscanf((*paramArg)[setWindow].c_str(),"%d",&_window)!=1)
- {
- reportBadOptionAndExit("window", "integer");
- _window = 0;
- }
- }
- if(_window > 0)
- {
- if(userParameters->getDNAFlag())
- {
- if(_window > userParameters->getKtup())
- {
- userParameters->setWindow(_window);
- userParameters->setDNAWindow(_window);
- }
- }
- else
- {
- if(_window > userParameters->getKtup())
- {
- userParameters->setWindow(_window);
- userParameters->setAAWindow(_window);
- }
- }
- }
- }
-
- //** ? /kimura
- if(setKimura != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting kimura=true");
- }
- #endif
- userParameters->setKimura(true);
- }
-
- //** ? /tossgaps
- if(setTossGaps != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting tossgaps=true");
- }
- #endif
- userParameters->setTossGaps(true);
- }
-
- //** ? /negative
- if(setNegative != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting useNegMatrix=true");
- }
- #endif
- userParameters->setUseNegMatrix(true);
- }
-
- //** ? /noweights
- if(setNoWeights!= -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting noweights=true");
- }
- #endif
- userParameters->setNoWeights(true);
- }
-
-
- //** ? /pwmatrix=ID (user's file)
- if(setPWMatrix != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting pwmatrix parameter.");
- }
- #endif
- temp = (*paramArg)[setPWMatrix].length();
- if(temp > 0)
- {
- _matrixname = ConvertStringToLower((*paramArg)[setPWMatrix]);
- if (_matrixname.compare("blosum") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 1, Protein, Pairwise);
- }
- else if (_matrixname.compare("pam") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 2, Protein, Pairwise);
- }
- else if (_matrixname.compare("gonnet") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 3, Protein, Pairwise);
- }
- else if (_matrixname.compare("id") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 4, Protein, Pairwise);
- }
- else
- {
- char hackTempName[FILENAMELEN + 1];
- strcpy(hackTempName, (*paramArg)[setPWMatrix].c_str());
-
- if(subMatrix->getUserMatFromFile(hackTempName, Protein, Pairwise))
- {
- subMatrix->setCurrentNameAndNum((*paramArg)[setPWMatrix], 5,
- Protein, Pairwise);
- pwUserMatrixName = (*paramArg)[setPWMatrix];
- }
- else
- exit(1);
- }
- }
- }
-
-
- //** ? /matrix=ID (user's file)
- if(setMatrix != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting matrix parameter.");
- }
- #endif
- temp = (*paramArg)[setMatrix].length();
- if(temp > 0)
- {
- _matrixname = ConvertStringToLower((*paramArg)[setMatrix]);
-
- if (_matrixname.compare("blosum")==0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 1, Protein, MultipleAlign);
- }
- else if (_matrixname.compare("pam")==0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 2, Protein, MultipleAlign);
- }
- else if (_matrixname.compare("gonnet")==0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 3, Protein, MultipleAlign);
- }
- else if (_matrixname.compare("id")==0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 4, Protein, MultipleAlign);
- }
- else
- {
- char hackTempName[FILENAMELEN + 1];
- strcpy(hackTempName, (*paramArg)[setMatrix].c_str());
-
- if(subMatrix->getUserMatSeriesFromFile(hackTempName))
- {
- subMatrix->setCurrentNameAndNum((*paramArg)[setMatrix], 4,
- Protein, MultipleAlign);
- userMatrixName = (*paramArg)[setMatrix];
- }
- else
- exit(1);
- }
- }
- }
-
- //** ? /pwdnamatrix=ID (user's file)
- if(setPWDNAMatrix != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting pwdnamatrix parameter.");
- }
- #endif
- temp = (*paramArg)[setPWDNAMatrix].length();
- if(temp > 0)
- {
- _matrixname = ConvertStringToLower((*paramArg)[setPWDNAMatrix]);
-
- if (_matrixname.compare("iub") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 1, DNA, Pairwise);
- }
- else if (_matrixname.compare("clustalw") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 2, DNA, Pairwise);
- }
- else
- {
- char hackTempName[FILENAMELEN + 1];
- strcpy(hackTempName, (*paramArg)[setPWDNAMatrix].c_str());
-
- if(subMatrix->getUserMatFromFile(hackTempName, DNA, Pairwise))
- {
- subMatrix->setCurrentNameAndNum((*paramArg)[setPWDNAMatrix], 3,
- Protein, Pairwise);
- pwDNAUserMatrixName = (*paramArg)[setPWDNAMatrix];
- }
- else
- exit(1);
- }
- }
- }
-
- //** ? /dnamatrix=ID (user's file)
- if(setDNAMatrix != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting dnamatrix parameter.");
- }
- #endif
- temp = (*paramArg)[setDNAMatrix].length();
- if(temp > 0)
- {
- _matrixname = ConvertStringToLower((*paramArg)[setDNAMatrix]);
-
- if (_matrixname.compare("iub") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 1, DNA, MultipleAlign);
- }
- else if (_matrixname.compare("clustalw") == 0)
- {
- subMatrix->setCurrentNameAndNum(_matrixname, 2, DNA, MultipleAlign);
- }
- else
- {
- char hackTempName[FILENAMELEN + 1];
- strcpy(hackTempName, (*paramArg)[setDNAMatrix].c_str());
-
- if(subMatrix->getUserMatFromFile(hackTempName, DNA, MultipleAlign))
- {
- subMatrix->setCurrentNameAndNum((*paramArg)[setDNAMatrix], 3,
- Protein, MultipleAlign);
- DNAUserMatrixName = (*paramArg)[setDNAMatrix];
- }
- else
- exit(1);
- }
- }
- }
-
-
- //** ? /maxdiv= n
- if(setMaxDiv != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting maxdiv parameter.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setMaxDiv].length() > 0)
- {
- if (sscanf((*paramArg)[setMaxDiv].c_str(),"%d",&temp)!=1)
- {
- reportBadOptionAndExit("maxdiv", "integer");
- temp = 0;
- }
- }
- if (temp >= 0)
- {
- userParameters->setDivergenceCutoff(temp);
- }
- }
-
- //** ? /gapdist= n
- if(setGapDist != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting gapdist parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setGapDist].length() > 0)
- if (sscanf((*paramArg)[setGapDist].c_str(),"%d",&temp)!=1)
- {
- reportBadOptionAndExit("gapdist", "integer");
- }
- if (temp >= 0)
- {
- userParameters->setGapDist(temp);
- }
- }
-
- //** ? /debug= n
- if(setDebug != -1)
- {
- temp = 0;
- if((*paramArg)[setDebug].length() > 0)
- if (sscanf((*paramArg)[setDebug].c_str(),"%d",&temp)!=1)
- {
- reportBadOptionAndExit("debug", "integer");
- }
- if (temp >= 0)
- {
- userParameters->setDebug(temp);
- }
- }
-
- //** ? /outfile= (user's file)
- if(setOutfile != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting outfile parameter.");
- }
- #endif
- if((*paramArg)[setOutfile].length() > 0)
- {
- userParameters->setOutfileName((*paramArg)[setOutfile]);
- }
- }
-
- //*** ? /case= lower/upper
- if(setCase != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting case parameter.");
- }
- #endif
- if((*paramArg)[setCase].length() > 0)
- {
- temp = findMatch((*paramArg)[setCase], caseArg, 2);
- if(temp == 0)
- {
- userParameters->setLowercase(true);
- }
- else if(temp == 1)
- {
- userParameters->setLowercase(false);
- }
- else
- {
- cerr << "\nUnknown case " << (*paramArg)[setCase] << endl;
- }
- }
- }
-
- //*** ? /seqnos=off/on
- if(setSeqNo != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting seqnos parameter.");
- }
- #endif
- if((*paramArg)[setSeqNo].length() > 0)
- {
- temp = findMatch((*paramArg)[setSeqNo], seqNoArg, 2);
- if(temp == 0)
- {
- userParameters->setClSeqNumbers(false);
- }
- else if(temp == 1)
- {
- userParameters->setClSeqNumbers(true);
- }
- else
- {
- cerr << "\nUnknown SEQNO option " << (*paramArg)[setSeqNo] << endl;
- }
- }
- }
-
-
- if(setSeqNoRange != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting seqno range parameter.");
- }
- #endif
- if((*paramArg)[setSeqNoRange].length() > 0)
- {
- temp = findMatch((*paramArg)[setSeqNoRange], seqNoRangeArg, 2);
- cout << "\n comparing "
- << "\nparamArg[setSeqNoRange]= " << (*paramArg)[setSeqNoRange]
- << "\n comparing \n ";
-
- if(temp == 0)
- {
- userParameters->setSeqRange(false);
- }
- else if(temp == 1)
- {
- userParameters->setSeqRange(true);
- }
- else
- {
- cerr << "\nUnknown Sequence range option "
- << (*paramArg)[setSeqNoRange] << endl;
- }
- }
- }
-
- //*** ? /range=n:m
- if(setRange != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting range parameter.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setRange].length() > 0)
- {
- // NOTE I have made a big change here! Mark march 14th 2006. This was being done
- // in the Alignment output functions.
- int iFirstRes = -1;
- int iLastRes = -1;
- char ignore;
-
- if (sscanf((*paramArg)[setRange].c_str(), "%d%[ :,-]%d", &iFirstRes,
- &ignore, &iLastRes) != 3)
- {
- cerr << "setRange: Syntax Error: Cannot set range, should be from:to \n";
- }
- else
- {
- userParameters->setRangeFrom(iFirstRes);
- userParameters->setRangeTo(iLastRes);
- }
- }
- }
-
- //*** ? /gapopen=n
- if(setGapOpen != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting gapopen parameter.");
- }
- #endif
- ftemp = 0.0;
- if((*paramArg)[setGapOpen].length() > 0)
- {
- if (sscanf((*paramArg)[setGapOpen].c_str(),"%f",&ftemp) != 1)
- {
- reportBadOptionAndExit("gapopen", "real number");
- ftemp = 0.0;
- }
- if(ftemp >= 0.0)
- {
- if( userParameters->getDNAFlag())
- {
- userParameters->setGapOpen(ftemp);
- userParameters->setDNAGapOpen(ftemp);
- }
- else
- {
- userParameters->setGapOpen(ftemp);
- userParameters->setProteinGapOpen(ftemp);
- }
- }
- }
- }
-
- //*** ? /gapext=n
- if(setGapExtend != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting gap extention parameter.");
- }
- #endif
-
- ftemp = 0.0;
- if((*paramArg)[setGapExtend].length() > 0)
- {
- if (sscanf((*paramArg)[setGapExtend].c_str(),"%f",&ftemp) != 1)
- {
- reportBadOptionAndExit("gapext", "real number");
- ftemp = 0.0;
- }
- if(ftemp >= 0)
- {
- if(userParameters->getDNAFlag())
- {
- userParameters->setGapExtend(ftemp);
- userParameters->setDNAGapExtend(ftemp);
- }
- else
- {
- userParameters->setGapExtend(ftemp);
- userParameters->setProteinGapExtend(ftemp);
- }
- }
- }
- }
-
- //*** ? /transweight=n
- if(setTransWeight != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting transweight parameter.");
- }
- #endif
-
- ftemp = 0.0;
- if((*paramArg)[setTransWeight].length() > 0)
- {
- if (sscanf((*paramArg)[setTransWeight].c_str(), "%f", &ftemp) != 1)
- {
- reportBadOptionAndExit("transweight", "real number");
- }
- }
- userParameters->setTransitionWeight(ftemp);
- }
-
- //*** ? /pwgapopen=n
- if(setPWGapOpen != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting pwgapopen parameter.");
- }
- #endif
-
- ftemp = 0.0;
- if((*paramArg)[setPWGapOpen].length() > 0)
- {
- if (sscanf((*paramArg)[setPWGapOpen].c_str(), "%f", &ftemp) != 1)
- {
- reportBadOptionAndExit("pwgapopen", "real number");
- }
- }
- if(ftemp >= 0.0)
- {
- if(userParameters->getDNAFlag())
- {
- userParameters->setPWGapOpen(ftemp);
- userParameters->setDNAPWGapOpenPenalty(ftemp);
- }
- else
- {
- userParameters->setPWGapOpen(ftemp);
- userParameters->setProteinPWGapOpenPenalty(ftemp);
- }
- }
- }
-
-
- //*** ? /gapext=n
- if(setPWGapExtend != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting pwgapext parameter.");
- }
- #endif
-
- ftemp = 0.0;
- if((*paramArg)[setPWGapExtend].length() > 0)
- {
- if (sscanf((*paramArg)[setPWGapExtend].c_str(), "%f", &ftemp) != 1)
- {
- reportBadOptionAndExit("pwgapext", "real number");
- }
- }
- if(ftemp >= 0)
- {
- if(userParameters->getDNAFlag())
- {
- userParameters->setPWGapExtend(ftemp);
- userParameters->setDNAPWGapExtendPenalty(ftemp);
- }
- else
- {
- userParameters->setPWGapExtend(ftemp);
- userParameters->setProteinPWGapExtendPenalty(ftemp);
- }
- }
- }
-
-
-
- //*** ? /outorder=n
- if(setOutOrder != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting outorder parameter.");
- }
- #endif
-
- if((*paramArg)[setOutOrder].length() > 0)
- {
- temp = findMatch((*paramArg)[setOutOrder],outOrderArg,2);
- }
-
- if(temp == 0)
- {
- userParameters->setOutputOrder(INPUT);
- }
- else if(temp == 1)
- {
- userParameters->setOutputOrder(ALIGNED);
- }
- else
- {
- cerr << "\nUnknown OUTPUT ORDER type " << (*paramArg)[setOutOrder] << endl;
- }
- }
-
- //*** ? /bootlabels=n
- if(setBootLabels != -1)
- {
-
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting bootlabels parameter.");
- }
- #endif
-
- if((*paramArg)[setBootLabels].length() > 0)
- {
- temp = findMatch((*paramArg)[setBootLabels], bootLabelsArg, 2);
- }
-
- if(temp == 0)
- {
- userParameters->setBootstrapFormat(BS_NODE_LABELS);
- }
- else if(temp == 1)
- {
- userParameters->setBootstrapFormat(BS_BRANCH_LABELS);
- }
- else
- {
- cerr << "\nUnknown bootlabels type " << (*paramArg)[setBootLabels] << endl;
- }
- }
-
- //*** ? /endgaps
- if(setUseEndGaps != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting useendgaps=true");
- }
- #endif
-
- userParameters->setUseEndGaps(false);
- }
-
- //*** ? /nopgap
- if(setNoPGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting noPrefPenalties=true");
- }
- #endif
-
- userParameters->setNoPrefPenalties(true);
- }
-
- //*** ? /nohgap
- if(setNoHGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting nohgap=true");
- }
- #endif
-
- userParameters->setNoHydPenalties(true);
- }
-
- //*** ? /novgap
- if(setNoVGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting novgap=false");
- }
- #endif
-
- userParameters->setNoVarPenalties(false);
- }
-
- //*** ? /hgapresidues="string"
- // NOTE I have made some big changes here. It looks as if there was an error here!
- if(setHGapRes != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting hgapresidues parameter.");
- }
- #endif
-
- userParameters->setHydResidues((*paramArg)[setHGapRes]);
-
- }
-
- //*** ? /nosecstr1
- if(setSecStruct1 != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting useSS1=false");
- }
- #endif
-
- userParameters->setUseSS1(false);
- }
-
- //*** ? /nosecstr2
- if(setSecStruct2 != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting useSS2=false");
- }
- #endif
-
- userParameters->setUseSS2(false);
- }
-
- //*** ? /secstroutput
- if(setSecStructOutput != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting secstroutput parameter.");
- }
- #endif
-
- if((*paramArg)[setSecStructOutput].length() > 0)
- {
- temp = findMatch((*paramArg)[setSecStructOutput], outputSecStrArg, 4);
- if(temp >= 0 && temp <= 3)
- {
- userParameters->setOutputStructPenalties(temp);
- }
- else
- {
- cerr << "\nUnknown case " << (*paramArg)[setSecStructOutput] << endl;
- }
- }
- }
-
-
- //*** ? /helixgap= n
- if(setHelixGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting helixgap parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setHelixGap].length() > 0)
- {
- if (sscanf((*paramArg)[setHelixGap].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("helixgap", "integer");
- }
- }
- if (temp >= 1 && temp <= 9)
- {
- userParameters->setHelixPenalty(temp);
- }
- }
-
- //*** ? /strandgap= n
- if(setStrandGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting strandgap parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setStrandGap].length() > 0)
- {
- if (sscanf((*paramArg)[setStrandGap].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("strandgap", "integer");
- }
- }
- if (temp >= 1 && temp <= 9)
- {
- userParameters->setStrandPenalty(temp);
- }
- }
-
- //*** ? /loopgap= n
- if(setLoopGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting loopgap parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setLoopGap].length() > 0)
- {
- if (sscanf((*paramArg)[setLoopGap].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("loopgap", "integer");
- }
- }
- if (temp >= 1 && temp <= 9)
- {
- userParameters->setLoopPenalty(temp);
- }
- }
-
- //*** ? /terminalgap= n
- if(setTerminalGap != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting terminalgap parameter.");
- }
- #endif
- temp = 0;
- if((*paramArg)[setTerminalGap].length() > 0)
- {
- if (sscanf((*paramArg)[setTerminalGap].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("terminalgap", "integer");
- temp = 0;
- }
- }
- if (temp >= 1 && temp <= 9)
- {
- userParameters->setHelixEndPenalty(temp);
- userParameters->setStrandEndPenalty(temp);
- }
- }
-
- //*** ? /helixendin= n
- if(setHelixEndIn != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting helixendin parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setHelixEndIn].length() > 0)
- {
- if (sscanf((*paramArg)[setHelixEndIn].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("helixendin", "integer");
- temp = 0;
- }
- }
- if (temp >= 0 && temp <= 3)
- {
- userParameters->setHelixEndMinus(temp);
- }
- }
-
- //*** ? /helixendout= n
- if(setHelixEndOut != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting helixendout parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setHelixEndOut].length() > 0)
- {
- if (sscanf((*paramArg)[setHelixEndOut].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("helixendout", "integer");
- temp = 0;
- }
- }
- if (temp >= 0 && temp <= 3)
- {
- userParameters->setHelixEndPlus(temp);
- }
- }
-
- //*** ? /strandendin= n
- if(setStrandEndIn != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting strandendin parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setStrandEndIn].length() > 0)
- {
- if (sscanf((*paramArg)[setStrandEndIn].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("strandendin", "integer");
- }
- }
- if (temp >= 0 && temp <= 3)
- {
- userParameters->setStrandEndMinus(temp);
- }
- }
-
- //*** ? /strandendout= n
- if(setStrandEndOut != -1)
- {
- #if DEBUGFULL
- if(logObject && DEBUGLOG)
- {
- logObject->logMsg(" Setting strandendout parameter.");
- }
- #endif
-
- temp = 0;
- if((*paramArg)[setStrandEndOut].length() > 0)
- {
- if (sscanf((*paramArg)[setStrandEndOut].c_str(), "%d", &temp) != 1)
- {
- reportBadOptionAndExit("strandendout", "integer");
- }
- }
- if (temp >= 0 && temp <= 3)
- {
- userParameters->setStrandEndPlus(temp);
- }
- }
-}
-
-int CommandLineParser::findMatch(string probe, StringArray* list, int n)
-{
- int i, j, len;
- int count, match=0;
-
- len = probe.length();
- for (i = 0; i < len; i++)
- {
- count = 0;
- for (j = 0; j < n; j++)
- {
- if (probe[i] == (*list)[j][i])
- {
- match = j;
- count++;
- }
- }
- if (count == 0)
- {
- return((int)-1);
- }
- if (count == 1)
- {
- return(match);
- }
- }
- return((int)-1);
-
-}
-
-/*
- * The function getCmdLineDataStruct is used to return a struct with the values
- * specified. It returns it by value. I cant return by reference or else the object will
- * be destroyed.
- */
-CmdLineData CommandLineParser::getCmdLineDataStruct(const char *str, int *flag, int type,
- StringArray* arg)
-{
- CmdLineData tempStruct = {str, flag, type, arg};
- return tempStruct;
-}
-
-void CommandLineParser::printCmdLineData(const CmdLineData& temp)
-{
- std::cout << "The str is: " << temp.str << std::endl;
- std::cout << "The int* is: " << *(temp.flag) << std::endl;
- std::cout << "The type is: " << temp.type << std::endl;
- std::cout << "The StringArray is: " << std::endl;
-
- if(temp.arg == NULL)
- {
- std::cout << " NULL" << std::endl;
- }
- else
- {
- cout << "The number of elements is " << temp.arg->size() << std::endl;
- for(int i = 0; i < (int)temp.arg->size(); i++)
- {
- cout << "The " << i << "th element is: " << temp.arg->at(i) << endl;
- }
- }
-}
-
-/*
- * Helper function to change string to lower case.
- *
- */
-string CommandLineParser::ConvertStringToLower(string strToConvert)
-{
- for(unsigned int i=0;i<strToConvert.length();i++)
- {
- strToConvert[i] = tolower(strToConvert[i]);
- }
- return strToConvert;
-}
-
-
-
-
-void CommandLineParser::exitWithErrorMsg(string msg)
-{
- cerr << "ERROR: " << msg << std::endl;
- exit(1);
-}
-
-void CommandLineParser::reportBadOptionAndExit(string option, string expectedType)
-{
- string msg;
- msg = "Bad option for ";
- msg += default_commandsep;// has to be added separately
- msg += option + ": expected " + expectedType;
- exitWithErrorMsg(msg);
-}
-
-void CommandLineParser::reportInvalidOptionAndExit(string option)
-{
- string msg = "Invalid option ";
- msg += default_commandsep;// has to be added separately
- msg += option;
- exitWithErrorMsg(msg);
-}
-
-
-}
-