Delete unneeded directory
[jabaws.git] / website / archive / binaries / mac / src / clustalw / src / interface / CommandLineParser.cpp
diff --git a/website/archive/binaries/mac/src/clustalw/src/interface/CommandLineParser.cpp b/website/archive/binaries/mac/src/clustalw/src/interface/CommandLineParser.cpp
deleted file mode 100644 (file)
index 3d58c58..0000000
+++ /dev/null
@@ -1,2796 +0,0 @@
-/**
- * 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);
-}
-
-
-}
-