Delete unneeded directory
[jabaws.git] / website / archive / binaries / mac / src / clustalw / src / alignment / AlignmentOutput.cpp
diff --git a/website/archive/binaries/mac/src/clustalw/src/alignment/AlignmentOutput.cpp b/website/archive/binaries/mac/src/clustalw/src/alignment/AlignmentOutput.cpp
deleted file mode 100644 (file)
index a0b9de3..0000000
+++ /dev/null
@@ -1,2479 +0,0 @@
-/**
- * Author: Mark Larkin
- * 
- * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.  
- */
-/**
- * Output routines ported from clustalx C code in 'interface.c'.
- *
- * Changes:
- *
- * 18-04-07,Nigel Brown(EMBL): clustalx code used (firsRes, length) convention
- * to define output columns, while the port uses (firsRes, lastRes). Fixed
- * problems in all 7 output routines where the conventions were mixed giving
- * over-long output blocks.
- *
- * 18-7-07: Mark (UCD), made changes to fastaOut, clustalOut, nbrfOut and gdeOut
- *
- * 9-2-08: Paul (UCD), changes to clustalOut to make output the same as 1.83
- *                     added const NAMESWIDTH which is calculated based on the
- *                     length of the longest sequence name and the upper and lower
- *                     limits specified in MAXNAMESTODISPLAY and MINNAMESTODISPLAY
- */
-
-#ifdef HAVE_CONFIG_H
-    #include "config.h"
-#endif
-#include "AlignmentOutput.h"
-
-namespace clustalw
-{
-
-AlignmentOutput::AlignmentOutput()
-: clusSecStructOffset(9),
-  clusSequenceOffset(15+1) // MARK made a change here for test case findRangeValues 10seqs
-{
-    // NOTE in the old clustal these arrays ended with NULL as a value.
-    try
-    {
-        strongGroup.resize(9);
-        strongGroup[0] = string("STA");
-        strongGroup[1] = string("NEQK");
-        strongGroup[2] = string("NHQK");
-        strongGroup[3] = string("NDEQ");
-        strongGroup[4] = string("QHRK");
-        strongGroup[5] = string("MILV");
-        strongGroup[6] = string("MILF");
-        strongGroup[7] = string("HY");
-        strongGroup[8] = string("FYW");
-    
-        weakGroup.resize(11);
-        weakGroup[0] = string("CSA");
-        weakGroup[1] = string("ATV");
-        weakGroup[2] = string("SAG");
-        weakGroup[3] = string("STNK");
-        weakGroup[4] = string("STPA");
-        weakGroup[5] = string("SGND");
-        weakGroup[6] = string("SNDEQK");
-        weakGroup[7] = string("NDEQHK");
-        weakGroup[8] = string("NEQHRK");
-        weakGroup[9] = string("FVLIM");
-        weakGroup[10] = string("HFY");
-    }
-    catch(const exception& e)
-    {
-        cerr << "An exception has occured in the contructor of AlignmentOutput.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-}
-
-/*
- * The function createAlignmentOutput is used to call all the individual functions
- * for the different file types. It is possible to output the alignment in all file
- * types at the same time.
- */
-void AlignmentOutput::createAlignmentOutput(Alignment* alignPtr, int firstSeq, int lastSeq)
-{
-    int length;  
-    int firstRes; // starting sequence range - Ramu
-    int lastRes; // ending sequence range 
-    bool rangeOK;
-    
-    if((firstSeq <= 0) || (lastSeq < firstSeq))
-    {
-        utilityObject->error("Cannot produce alignment output."
-                " Incorrect call to createAlignmentOutput."
-                " firstSeq = %d"
-                " lastSeq = %d\n", firstSeq, lastSeq);
-        return;
-    }
-    
-    length = 0;
-    firstRes = 1;
-    lastRes = 0;
-    rangeOK = false;
-    
-    try
-    {
-        length = alignPtr->getLengthLongestSequence();
-        lastRes = length;
-
-        if (userParameters->getRangeFromToSet()) 
-        {
-            firstRes = userParameters->getRangeFrom();
-            lastRes = userParameters->getRangeTo();
-            // Check if the numbers are ok.
-            if ((firstRes > lastRes) || (firstRes == -1) || (lastRes == -1)) 
-            {
-                cerr << "seqrange numbers are not set properly, using default....\n";
-                firstRes = 1;
-                lastRes = length;
-            }
-            else
-            {
-                rangeOK = true;
-            }
-        }
-        if (rangeOK && (lastRes > length)) 
-        {
-            lastRes = length;
-            cout << "Seqrange " << lastRes << " is more than the " << length 
-                 << "  setting it to " << length << " \n";
-        }
-
-        if (userParameters->getMenuFlag())
-        {    
-            cout << "Consensus length = " << lastRes << " \n";
-        }
-
-        outputRegion partToOutput;
-        partToOutput._firstSeq = firstSeq;
-        partToOutput._lastSeq = lastSeq;
-        partToOutput._firstRes = firstRes;
-        partToOutput._lastRes = lastRes;
-
-        if(userParameters->getOutputClustal()) 
-        {
-            if(clustalOutFile.get() != 0 && clustalOutFile->is_open())
-            {
-                clustalOut(alignPtr, partToOutput);
-                if(clustalOutFile->is_open())
-                {
-                    clustalOutFile->close();
-                }
-                utilityObject->info("CLUSTAL-Alignment file created  [%s]\n",
-                                    clustalOutName.c_str());
-            }
-        }
-        if(userParameters->getOutputNbrf())  
-        {
-            if(nbrfOutFile.get() != 0 && nbrfOutFile->is_open())
-            {            
-                nbrfOut(alignPtr, partToOutput);
-                if(nbrfOutFile->is_open())
-                {
-                    nbrfOutFile->close();
-                }
-                utilityObject->info("NBRF/PIR-Alignment file created  [%s]\n",
-                                    nbrfOutName.c_str());                
-            }
-        }
-        if(userParameters->getOutputGCG())  
-        {
-            if(gcgOutFile.get() != 0 && gcgOutFile->is_open())
-            {
-                gcgOut(alignPtr, partToOutput);
-                if(gcgOutFile->is_open())
-                {
-                    gcgOutFile->close();
-                }
-                utilityObject->info("GCG-Alignment file created      [%s]\n",
-                                    gcgOutName.c_str());                
-            }
-        }
-        if(userParameters->getOutputPhylip())  
-        {
-            if(phylipOutFile.get() != 0 && phylipOutFile->is_open())
-            {
-                phylipOut(alignPtr, partToOutput);
-                if(phylipOutFile->is_open())
-                {
-                    phylipOutFile->close();
-                }
-                utilityObject->info("PHYLIP-Alignment file created   [%s]\n",
-                                    phylipOutName.c_str());                
-            }
-        }
-        
-        if(userParameters->getOutputGde())  
-        {
-            if(gdeOutFile.get() != 0 && gdeOutFile->is_open())
-            {
-                gdeOut(alignPtr, partToOutput);
-                if(gdeOutFile->is_open())
-                {
-                    gdeOutFile->close();
-                }
-                utilityObject->info("GDE-Alignment file created      [%s]\n",
-                                    gdeOutName.c_str());                
-            }
-        }
-        
-        if(userParameters->getOutputNexus())  
-        {
-            if(nexusOutFile.get() != 0 && nexusOutFile->is_open())
-            {
-                nexusOut(alignPtr, partToOutput);
-                if(nexusOutFile->is_open())
-                {
-                    nexusOutFile->close();
-                }
-                utilityObject->info("NEXUS-Alignment file created    [%s]\n",
-                                    nexusOutName.c_str());                
-            }
-        }
-
-        if(userParameters->getOutputFasta())  
-        {
-            if(fastaOutFile.get() != 0 && fastaOutFile->is_open())
-            {
-                fastaOut(alignPtr, partToOutput);
-                if(fastaOutFile->is_open())
-                {
-                    fastaOutFile->close();
-                }
-                utilityObject->info("Fasta-Alignment file created    [%s]\n",
-                                    fastaOutName.c_str());                
-            }
-        }
-        
-        // Output the alignment to the screen if it is required.
-        if (userParameters->getShowAlign() && userParameters->getMenuFlag()) 
-        {
-            showAlign();
-        }
-    }
-    catch(const exception& e)
-    {
-        cerr << "An exception has occured in the createAlignmentOutput function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-}
-
-bool AlignmentOutput::QTOpenFilesForOutput(AlignmentFileNames fileNames)
-{
-    if(!userParameters->getOutputClustal() && 
-       !userParameters->getOutputNbrf() && !userParameters->getOutputGCG() &&
-       !userParameters->getOutputPhylip() && !userParameters->getOutputGde() &&
-       !userParameters->getOutputNexus() && !userParameters->getOutputFasta()) 
-    {
-         utilityObject->error("You must select an alignment output format\n");
-         return false;
-    }
-        
-    if(fileNames.clustalFile == "" && fileNames.fastaFile == "" && fileNames.gcgFile == ""
-       && fileNames.gdeFile == "" && fileNames.nexusFile == "" && fileNames.nrbfFile == ""
-       && fileNames.phylipFile == "")
-    {
-        utilityObject->error("No names for output files. Cannot output alignment.\n");
-        return false;
-    }
-    
-    if(fileNames.clustalFile != "")
-    {
-        clustalOutName = fileNames.clustalFile;
-        if(!openExplicitFile(clustalOutFile, clustalOutName))
-        { 
-            return false;
-        }
-    }  
-    if(fileNames.fastaFile != "")
-    {
-        fastaOutName = fileNames.fastaFile;
-        if(!openExplicitFile(fastaOutFile, fastaOutName))
-        { 
-            return false;
-        }
-    }
-    if(fileNames.gcgFile != "")
-    {
-        gcgOutName = fileNames.gcgFile;
-        if(!openExplicitFile(gcgOutFile, gcgOutName))
-        { 
-            return false;
-        }
-    }
-    if(fileNames.gdeFile != "")
-    {
-        gdeOutName = fileNames.gdeFile;
-        if(!openExplicitFile(gdeOutFile, gdeOutName))
-        { 
-            return false;
-        }
-    }
-    if(fileNames.nexusFile != "")
-    {
-        nexusOutName = fileNames.nexusFile;
-        if(!openExplicitFile(nexusOutFile, nexusOutName))
-        { 
-            return false;
-        }
-    }
-    if(fileNames.nrbfFile != "")
-    {
-        nbrfOutName = fileNames.nrbfFile;
-        if(!openExplicitFile(nbrfOutFile, nbrfOutName))
-        { 
-            return false;
-        }
-    }
-    if(fileNames.phylipFile != "")
-    {
-        phylipOutName = fileNames.phylipFile;
-        if(!openExplicitFile(phylipOutFile, phylipOutName))
-        { 
-            return false;
-        }
-    } 
-    return true;                         
-}
-/*
- * The function openAlignmentOutput opens a file for output. It returns true if it
- * has been successful and false if it has not been successful
- */
-bool AlignmentOutput::openAlignmentOutput(string path)
-{
-    if(!userParameters->getOutputClustal() && 
-       !userParameters->getOutputNbrf() && !userParameters->getOutputGCG() &&
-       !userParameters->getOutputPhylip() && !userParameters->getOutputGde() &&
-       !userParameters->getOutputNexus() && !userParameters->getOutputFasta()) 
-    {
-         utilityObject->error("You must select an alignment output format\n");
-         return false;
-    }
-    string _fileNameToOutput = path;
-    if(_fileNameToOutput == "")
-    {
-      /*_fileNameToOutput = userParameters->getSeqName();*/
-      /* BUG 166 , file extension, FS, 2009-01-26 */
-      utilityObject->getPath(userParameters->getSeqName(), &_fileNameToOutput);
-    }
-    
-    if(userParameters->getOutputClustal()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            clustalOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(clustalOutFile, clustalOutName))
-            { 
-                return false;
-            }
-        }
-        else 
-        {
-            clustalOutName = openOutputFile(clustalOutFile, 
-                             "\nEnter a name for the CLUSTAL output file ",
-                             _fileNameToOutput, "aln");
-                             
-            if(clustalOutName == "")
-            {
-                return false; // We have not been successful.
-            }
-        }
-    }
-
-    if(userParameters->getOutputNbrf()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            nbrfOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(nbrfOutFile, nbrfOutName))
-            { 
-                return false;
-            }            
-        }
-        else
-        {
-            nbrfOutName = openOutputFile(nbrfOutFile,
-                      "\nEnter a name for the NBRF/PIR output file", _fileNameToOutput,
-                       "pir");
-                      
-            if(nbrfOutName == "")
-            {
-                return false; // We have not been successful.
-            }
-        }
-    }
-
-    if(userParameters->getOutputGCG()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            gcgOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(gcgOutFile, gcgOutName))
-            { 
-                return false;
-            }   
-        }
-        else
-        {
-            gcgOutName = openOutputFile(gcgOutFile,
-                      "\nEnter a name for the GCG output file", _fileNameToOutput, "msf");
-                      
-            if(gcgOutName == "")
-            {
-                return false; // We have not been successful.
-            }
-        }
-    }
-
-    if(userParameters->getOutputPhylip()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            phylipOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(phylipOutFile, phylipOutName))
-            { 
-                return false;
-            }
-        }
-        else
-        {
-            phylipOutName = openOutputFile(phylipOutFile,
-                      "\nEnter a name for the PHYLIP output file", _fileNameToOutput, "phy");
-                      
-            if(phylipOutName == "")
-            {
-                return false; // We have not been successful.
-            }
-        }
-    }
-
-    if(userParameters->getOutputGde()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            gdeOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(gdeOutFile, gdeOutName))
-            { 
-                return false;
-            }
-        }
-        else
-        {
-            gdeOutName = openOutputFile(gdeOutFile, 
-                             "\nEnter a name for the GDE output file     ",
-                             _fileNameToOutput, "gde");
-                 
-            if(gdeOutName == "")
-            {
-                return false; // We have not been successful.
-            }                       
-        }
-    }
-
-    if(userParameters->getOutputNexus()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            nexusOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(nexusOutFile, nexusOutName))
-            { 
-                return false;
-            }
-        }
-        else
-        {
-            nexusOutName = openOutputFile(nexusOutFile, 
-                             "\nEnter a name for the NEXUS output file   ",
-                             _fileNameToOutput, "nxs");
-                 
-            if(nexusOutName == "")
-            {
-                return false; // We have not been successful.
-            }                       
-        }
-    }
-   
-    if(userParameters->getOutputFasta()) 
-    {
-        if (userParameters->getOutfileName() != "") 
-        {
-            fastaOutName = userParameters->getOutfileName();
-            if(!openExplicitFile(fastaOutFile, fastaOutName))
-            { 
-                return false;
-            }
-        }
-        else
-        {
-            fastaOutName = openOutputFile(fastaOutFile, 
-                             "\nEnter a name for the Fasta output file ",
-                             _fileNameToOutput, "fasta");
-                 
-            if(fastaOutName == "")
-            {
-                return false; // We have not been successful.
-            }
-        }
-    }
-  
-    return true;
-
-}
-
-
-/*
- * The function openExplicitFile is used to open a file when we have the name already.
- * It returns true if the file has been opened correctly, false otherwise.
- */
-bool AlignmentOutput::openExplicitFile(auto_ptr<ofstream>& outFile, string fileName)
-{
-    if (fileName == "") 
-    {
-        cerr << "Bad output file [" << fileName << "]\n";
-        utilityObject->error("Bad output file [%s]\n", fileName.c_str());
-        return false;
-    }
-    
-    outFile.reset(new ofstream(fileName.c_str(), ofstream::trunc));
-    if(!outFile->is_open()) 
-    {
-        utilityObject->error("Cannot open output file [%s]\n", fileName.c_str());
-        return false;
-    }
-    return true;
-}
-
-/*
- * The function openOutputFile is used to open a file when we dont have the name yet.
- * This function returns the name if it has been successful. If it has not been 
- * successful it returns a blank string ""
- */
-string AlignmentOutput::openOutputFile(auto_ptr<ofstream>& outFile, string prompt, 
-                                       string path, string fileExtension)
-{
-    string temp;
-    string _fileName; // Will return this name.
-    string message;
-    _fileName = path + fileExtension;
-
-    if(_fileName.compare(userParameters->getSeqName()) == 0) 
-    {
-        cout << "Output file name is the same as input file.\n";
-        if (userParameters->getMenuFlag()) 
-        {
-            message = "\n\nEnter new name to avoid overwriting  [" + _fileName + "]";
-
-            utilityObject->getStr(message, temp);
-            if(temp != "")
-            {
-                _fileName = temp;
-            }
-        }
-    }
-    else if (userParameters->getMenuFlag()) 
-    {
-
-        message = prompt + " [" + _fileName + "]";
-        utilityObject->getStr(message, temp);
-        if(temp != "")
-        {
-            _fileName = temp;
-        }
-    }
-
-    outFile.reset(new ofstream(_fileName.c_str(), ofstream::trunc));
-    if(!outFile->is_open()) 
-    {
-        utilityObject->error("Cannot open output file [%s]\n", _fileName.c_str());
-        return "";
-    }    
-    return _fileName;
-}
-
-/*
- * fastaOut: output the alignment in FASTA format
- */
-void AlignmentOutput::fastaOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    char residue;
-    int val;
-    int i, ii;
-    int j, slen;    
-    int lineLength;
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;
-    rangeNum rnum;  
-    cout << "firstres = " << firstRes << " lastres = " << lastRes << "\n";
-    try
-    {
-        const SeqArray* alignment = alignPtr->getSeqArray(); //NOTE june29
-        vector<char> sequence;
-        sequence.assign(lastRes + 1, '0');     
-    
-        lineLength = PAGEWIDTH - alignPtr->getMaxNames();
-                
-        lineLength = lineLength - lineLength % 10; // round to a multiple of 10
-        if (lineLength > LINELENGTH || lineLength <= 0) // Mark 18-7-07
-        {    
-            lineLength = LINELENGTH;
-        }
-
-
-        for(ii = firstSeq; ii <= lastSeq; ii++) 
-        {
-            i = alignPtr->getOutputIndex(ii - 1);
-            slen = 0;
-            //for(j = firstRes; j < firstRes + lastRes; j++) //- nige
-            for(j = firstRes; j <= lastRes; j++) //- nige
-            {
-                if (j <= alignPtr->getSeqLength(i))
-                {
-                    //val = alignPtr.getResidue(i, j);
-                    val = (*alignment)[i][j]; // NOTE june29
-                }
-                else
-                { 
-                    val = -3;
-                }
-                if((val == -3) || (val == 253))
-                {
-                    break;
-                }
-                else if((val < 0) || (val > userParameters->getMaxAA())) 
-                {
-                    residue = '-';
-                }
-                else 
-                {
-                    residue = userParameters->getAminoAcidCode(val);
-                }
-                if (userParameters->getLowercase())
-                {    
-                    sequence[j - firstRes] = residue;
-                }
-                else
-                {
-                    sequence[j - firstRes] = residue;
-                }
-                slen++;
-            }
-            (*fastaOutFile) << ">" << nameonly(alignPtr->getName(i));
-            if(userParameters->getSeqRange()) 
-            {
-                findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                (*fastaOutFile) << "/" << rnum.start << "-" << rnum.end;
-                
-            }
-            (*fastaOutFile) << "\n";
-            for(j = 1; j <= slen; j++) 
-            {
-                (*fastaOutFile) << sequence[j-1];
-                if((j % lineLength == 0) || (j == slen))
-                { 
-                    (*fastaOutFile) << "\n";
-                }
-            }
-        }
-        fastaOutFile->close();
-        cout << "FASTA file created!\n";
-    }
-    catch(const bad_alloc& e)
-    {
-        fastaOutFile->close();
-        cerr << "A bad_alloc exception has occured in the fastaOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        fastaOutFile->close();
-        cerr << "An exception has occured in the fastaOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        fastaOutFile->close();
-        cerr << "An exception has occured in the fastaOut function.\n";
-        exit(1);    
-    }
-
-}
-
-/* 
- * gcgOut: output the alignment in gcg file format
- */
-void AlignmentOutput::gcgOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    char residue;
-    int val;
-    int i, ii, chunks, block;
-    int j, k, pos1, pos2;    
-    long grandChecksum;
-    try
-    {  
-        int firstRes = partToOutput._firstRes;
-        int lastRes = partToOutput._lastRes;
-        int firstSeq = partToOutput._firstSeq;
-        int lastSeq = partToOutput._lastSeq;    
-        rangeNum rnum;
-        vector<char> sequence;
-        vector<int> allChecks;
-        int _maxLength = alignPtr->getMaxAlnLength();
-        sequence.assign(_maxLength + 1, '0');
-        allChecks.assign(lastSeq + 1, 0);
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        
-        for(i = firstSeq; i <= lastSeq; i++) 
-        {
-            //for(j = firstRes; j <= firstRes + lastRes - 1; j++) //- nige
-            for(j = firstRes; j <= lastRes; j++) //- nige
-            {
-                if (j <= alignPtr->getSeqLength(i))
-                {
-                    //val = alignPtr.getResidue(i, j);
-                    val = (*alignment)[i][j]; // NOTE june29
-                }
-                else
-                { 
-                    val = -3;
-                }
-                if((val == -3) || (val == 253)) 
-                {
-                    break;
-                }
-                else if((val < 0) || (val > userParameters->getMaxAA()))
-                {
-                    residue = '.';
-                }
-                else 
-                {
-                    residue = userParameters->getAminoAcidCode(val);
-                }
-                sequence[j - firstRes + 1] = residue;
-            }
-            // pad any short sequences with gaps, to make all sequences the same length 
-            for(; j <= firstRes + lastRes - 1; j++)
-            { 
-                sequence[j - firstRes + 1] = '.';
-            }
-            allChecks[i] = SeqGCGCheckSum(&sequence, lastRes);
-        }    
-        int _index;
-        grandChecksum = 0;
-        for(i = 1; i <= alignPtr->getNumSeqs(); i++)
-        {
-            _index = alignPtr->getOutputIndex(i - 1);
-            grandChecksum += allChecks[_index];
-        }
-        grandChecksum = grandChecksum % 10000;
-        
-        (*gcgOutFile) << "PileUp\n\n";
-        (*gcgOutFile) << "\n\n   MSF:" << setw(5) << lastRes << "  Type: ";
-                        
-        if(userParameters->getDNAFlag())
-        {
-            (*gcgOutFile) << "N";
-        }
-        else
-        {
-            (*gcgOutFile) << "P";
-        }
-
-        (*gcgOutFile) << "    Check:" << setw(6) << grandChecksum << "   .. \n\n";
-        float _seqWeight;
-
-        int length = lastRes - firstRes + 1; //- nige
-
-        for(ii = firstSeq; ii <= lastSeq; ii++)  
-        {
-            i = alignPtr->getOutputIndex(ii - 1);
-            _seqWeight = (alignPtr->getSeqWeight(i - 1) * 100) / (float) INT_SCALE_FACTOR;
-
-            (*gcgOutFile) << " Name: " << alignPtr->getName(i) << " oo  Len:"
-                        //<< setw(5) << lastRes << "  Check:" << setw(6) << allChecks[i]  //- nige
-                          << setw(5) << length << "  Check:" << setw(6) << allChecks[i] 
-                          << "  Weight:  " << fixed << setprecision(1) << _seqWeight << "\n";
-        }  
-        (*gcgOutFile) << "\n//\n";
-        
-        chunks = length / GCG_LINELENGTH; //- nige
-        if(length % GCG_LINELENGTH != 0)  //- nige
-        {
-            ++chunks;
-        }
-  
-        for(block = 1; block <= chunks; block++) 
-        {
-            (*gcgOutFile) << "\n\n";
-            pos1 = ((block - 1) * GCG_LINELENGTH) + 1;
-            pos2 = (length < pos1 + GCG_LINELENGTH - 1)? length : pos1 + GCG_LINELENGTH - 1;//- nige
-            
-            for(ii = firstSeq; ii <= lastSeq; ii++) 
-            {
-                i = alignPtr->getOutputIndex(ii - 1);
-                if (!userParameters->getSeqRange()) 
-                {
-                    (*gcgOutFile) << "\n" << setw(alignPtr->getMaxNames() + 5) << left
-                                  << alignPtr->getName(i) << " ";
-                }
-                else 
-                {
-                    findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                    std::stringstream ss;
-                    std::stringstream ss2;
-                    string rangeStart;
-                    string rangeEnd;
-                    ss << rnum.start;
-                    ss >> rangeStart;
-                    ss2 << rnum.end;
-                    ss2 >> rangeEnd;
-                    string nameAndRange = nameonly(alignPtr->getName(i)) + "/" + rangeStart;
-                    nameAndRange += "-" + rangeEnd;
-                    (*gcgOutFile) << "\n" << setw(alignPtr->getMaxNames() + 15) << left
-                                  << nameAndRange;
-                }
-                for(j = pos1, k = 1; j <= pos2; j++, k++) 
-                {
-            
-                    //JULIE -
-                    //check for int sequences - pad out with '.' characters to end 
-            
-                    if (j + firstRes - 1 <= alignPtr->getSeqLength(i))
-                    {
-                        //val = alignPtr.getResidue(i, j + firstRes - 1);
-                        val = (*alignment)[i][j + firstRes - 1]; // NOTE june29
-                    }
-                    else
-                    {
-                        val = -3;
-                    }
-                    if((val == -3) || (val == 253))
-                    {
-                        residue = '.';
-                    }
-                    else if((val < 0) || (val > userParameters->getMaxAA()))
-                    {
-                        residue = '.';
-                    }
-                    else 
-                    {
-                        residue = userParameters->getAminoAcidCode(val);
-                    }
-                    (*gcgOutFile) << residue;
-                    if(j % 10 == 0)
-                    { 
-                        (*gcgOutFile) << " ";
-                    }
-                }
-            }
-        }
-        (*gcgOutFile) << "\n\n";
-        gcgOutFile->close();   
-    }
-    catch(const bad_alloc& e)
-    {
-        gcgOutFile->close();
-        cerr << "A bad_alloc exception has occured in the gcgOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        gcgOutFile->close();
-        cerr << "An exception has occured in the gcgOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        gcgOutFile->close();
-        cerr << "An exception has occured in the gcgOut function.\n";
-        exit(1);    
-    }    
-}
-
-void AlignmentOutput::phylipOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;    
-    try
-    {
-        char residue;
-        int val;
-        int i, ii, chunks, block;    
-        int j, k, pos1, pos2;    
-        int nameLen;
-        bool warn;
-        vector<string> _seqNames;
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        rangeNum rnum;
-
-        // Push on a blank string. This is because the index starts at 1 for the seqs etc..
-        _seqNames.push_back("");
-
-        nameLen = 0;
-    
-        for(i = firstSeq; i <= lastSeq; i++)  
-        {
-            _seqNames.push_back(alignPtr->getName(i));
-            ii = _seqNames.size();
-            if(nameLen < ii) 
-            {
-                nameLen = ii;
-            }
-        }
-        if(nameLen > 10) 
-        {
-            warn = false;
-            for(i = 0; i < (int)_seqNames.size() - 1; i++)  
-            {
-                for(j = i + 1; j < (int)_seqNames.size(); j++) 
-                {
-                    if (_seqNames[i].compare(_seqNames[j]) == 0) 
-                    {
-                        warn = true;
-                    }
-                }
-            }
-            if(warn)
-            {
-                utilityObject->warning("Truncating sequence names to 10 characters for PHYLIP output.\nNames in the PHYLIP format file are NOT unambiguous.");
-            }
-            else
-            {
-                utilityObject->warning("Truncating sequence names to 10 characters for PHYLIP output.");
-            }
-        }
-  
-        int length = lastRes - firstRes + 1; //- nige
-
-        chunks = length / GCG_LINELENGTH; //- nige
-        if(length % GCG_LINELENGTH != 0)  //- nige
-        {
-            ++chunks;
-        }
-  
-        (*phylipOutFile) << setw(6) << alignPtr->getNumSeqs() << " "
-                         << setw(6) << length; //-nige
-        
-        for(block = 1; block <= chunks; block++) 
-        {
-            pos1 = ((block - 1) * GCG_LINELENGTH) + 1;
-            //pos2 = (lastRes < pos1 + GCG_LINELENGTH - 1)? lastRes : pos1 + GCG_LINELENGTH - 1; //- nige
-            pos2 = (length < pos1 + GCG_LINELENGTH - 1)? length : pos1 + GCG_LINELENGTH - 1;
-            for(ii = firstSeq; ii <= lastSeq; ii++)  
-            {
-                i = alignPtr->getOutputIndex(ii - 1);
-                if(block == 1)  
-                {
-                    if(!userParameters->getSeqRange()) 
-                    {
-                        string name = alignPtr->getName(i);
-                        (*phylipOutFile) << "\n" << setw(10) << left 
-                                             << name.substr(0,10) << " ";
-                    }
-                    else
-                    {
-                        findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                        std::stringstream ss;
-                        std::stringstream ss2;
-                        string rangeStart;
-                        string rangeEnd;
-                        ss << rnum.start;
-                        ss >> rangeStart;
-                        ss2 << rnum.end;
-                        ss2 >> rangeEnd;
-                        string nameAndRange = nameonly(alignPtr->getName(i)) + "/";
-                        nameAndRange += rangeStart + "-" + rangeEnd;
-                        (*phylipOutFile) << "\n" << setw(alignPtr->getMaxNames() + 15)
-                                         << left
-                                         << nameAndRange;
-                    }
-                }
-                else
-                {
-                    (*phylipOutFile) << "\n           ";
-                }
-                for(j = pos1, k = 1; j <= pos2; j++, k++) 
-                {
-                    if (j + firstRes - 1 <= alignPtr->getSeqLength(i))
-                    {
-                        //val = alignPtr.getResidue(i, j + firstRes - 1);
-                        val = (*alignment)[i][j + firstRes - 1]; // NOTE june29
-                    }
-                    else
-                    {
-                        val = -3;
-                    }
-                    if((val == -3) || (val == 253))
-                    {
-                        break;
-                    }
-                    else if((val < 0) || (val > userParameters->getMaxAA()))
-                    {
-                        residue = '-';
-                    }
-                    else 
-                    {
-                        residue = userParameters->getAminoAcidCode(val);
-                    }
-                    (*phylipOutFile) << residue;
-                    if(j % 10 == 0) 
-                    {
-                        (*phylipOutFile) << " ";
-                    }
-                }
-            }
-            (*phylipOutFile) << "\n";
-        }  
-    }
-    catch(const bad_alloc& e)
-    {
-        phylipOutFile->close();
-        cerr << "A bad_alloc exception has occured in the phylipOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        phylipOutFile->close();
-        cerr << "An exception has occured in the phylipOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        phylipOutFile->close();
-        cerr << "An exception has occured in the phylipOut function.\n";
-        exit(1);    
-    }      
-}
-
-void AlignmentOutput::nexusOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;    
-    try
-    {
-        char residue;
-        int val;
-        int i, ii, chunks, block;    
-        int j, k, pos1, pos2;    
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        rangeNum rnum;
-
-        int length = lastRes - firstRes + 1; //- nige
-
-        chunks = length / GCG_LINELENGTH; //- nige
-        if(length % GCG_LINELENGTH != 0) //- nige
-        {
-            ++chunks;
-        }
-  
-        (*nexusOutFile) << "#NEXUS\n";
-        (*nexusOutFile) << "BEGIN DATA;\n";
-        (*nexusOutFile) << "dimensions ntax=" << alignPtr->getNumSeqs() 
-                        << " nchar=" << length << ";\n"; //- nige
-        (*nexusOutFile) << "format missing=?\n";
-        (*nexusOutFile) << "symbols=\"";
-        
-        for(i = 0; i <= userParameters->getMaxAA(); i++)
-        {
-            (*nexusOutFile) << userParameters->getAminoAcidCode(i);
-        }
-        (*nexusOutFile) << "\"\n";
-        (*nexusOutFile) << "interleave datatype=";
-        bool _dnaFlag = userParameters->getDNAFlag();
-        string _type = _dnaFlag ? "DNA " : "PROTEIN ";
-        (*nexusOutFile) << _type;
-        (*nexusOutFile) << "gap= -;\n";
-        (*nexusOutFile) << "\nmatrix";
-  
-        for(block = 1; block <= chunks; block++) 
-        {
-            pos1 = ((block - 1) * GCG_LINELENGTH) + 1;
-            pos2 = (length < pos1 + GCG_LINELENGTH - 1)? length : pos1 + GCG_LINELENGTH - 1; //- nige
-            for(ii = firstSeq; ii <= lastSeq; ii++)  
-            {
-                i = alignPtr->getOutputIndex(ii - 1);
-                if (!userParameters->getSeqRange()) 
-                {
-                    (*nexusOutFile) << "\n" << setw(alignPtr->getMaxNames() + 1) << left
-                                    << alignPtr->getName(i) << " ";
-                }
-                else 
-                {
-                    findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                    
-                    std::stringstream ss;
-                    std::stringstream ss2;
-                    string rangeStart;
-                    string rangeEnd;
-                    ss << rnum.start;
-                    ss >> rangeStart;
-                    ss2 << rnum.end;
-                    ss2 >> rangeEnd;
-                    string nameAndRange = nameonly(alignPtr->getName(i)) + "/";
-                    nameAndRange += rangeStart + "-" + rangeEnd;
-                    (*nexusOutFile) << "\n" << setw(alignPtr->getMaxNames() + 15)
-                                    << left
-                                    << nameAndRange;                    
-                }
-                for(j = pos1, k = 1; j <= pos2; j++, k++) 
-                {
-                    if (j + firstRes - 1 <= alignPtr->getSeqLength(i))
-                    {
-                        //val = alignPtr.getResidue(i, j + firstRes - 1);
-                        val = (*alignment)[i][j + firstRes - 1]; // NOTE june29
-                    }
-                    else
-                    {
-                        val = -3;
-                    }
-                    if((val == -3) || (val == 253))
-                    {
-                        break;
-                    }
-                    else if((val < 0) || (val > userParameters->getMaxAA()))
-                    {
-                        residue = '-';
-                    }
-                    else 
-                    {
-                        residue = userParameters->getAminoAcidCode(val);
-                    }
-                    (*nexusOutFile) << residue;
-                }
-            }
-            (*nexusOutFile) << "\n";
-        }
-        (*nexusOutFile) << ";\nend;\n";   
-    }
-    catch(const bad_alloc& e)
-    {
-        nexusOutFile->close();
-        cerr << "A bad_alloc exception has occured in the nexusOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        nexusOutFile->close();
-        cerr << "An exception has occured in the nexusOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        nexusOutFile->close();
-        cerr << "An exception has occured in the nexusOut function.\n";
-        exit(1);    
-    }      
-}
-
-/*
- * gdeOut: print out the alignment in gde file format.
- */
-void AlignmentOutput::gdeOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;    
-
-    int length = lastRes - firstRes + 1; //- nige
-
-    try
-    {
-        char residue;
-        int val;
-        vector<char> _ssMask1, _ssMask2, seq;
-        int i, ii;
-        int j, slen;    
-        int lineLength;
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        rangeNum rnum;
-
-        seq.assign(alignPtr->getMaxAlnLength() + 1, '0');
-        
-        // decide the line length for this alignment - maximum is LINELENGTH 
-        lineLength = PAGEWIDTH - alignPtr->getMaxNames();
-        lineLength = lineLength - lineLength % 10; // round to a multiple of 10
-        if (lineLength > LINELENGTH || lineLength <= 0) 
-        {
-            lineLength = LINELENGTH;
-        }
-  
-        // If we are using the secondary structure info from profile 1, set it up
-        if (userParameters->getStructPenalties1() == SECST && 
-            userParameters->getUseSS1() == true) 
-        {
-            int _lengthSeq1 = alignPtr->getSeqLength(1);
-            vector<char>* _secStructMask1 = alignPtr->getSecStructMask1();
-            _ssMask1.assign(_lengthSeq1 + 10, 0);
-            
-            for (i = 0;i < _lengthSeq1;i++)
-            {
-                _ssMask1[i] = _secStructMask1->at(i);
-            }
-            printSecStructMask(_lengthSeq1, _secStructMask1, &_ssMask1);
-        }
-        
-        // If we are using the secondary structure info from profile 2, set it up
-        if (userParameters->getStructPenalties2() == SECST && 
-            userParameters->getUseSS2() == true) 
-        {
-            int indexProfile2FirstSeq = alignPtr->getProfile1NumSeqs() + 1;
-            int lengthSeqProfile2 = alignPtr->getSeqLength(indexProfile2FirstSeq);
-            _ssMask2.assign(lengthSeqProfile2 + 10, 0);
-            vector<char>* _secStructMask2 = alignPtr->getSecStructMask2();
-            
-            for (i=0;i < lengthSeqProfile2;i++)
-            {
-                _ssMask2[i] = _secStructMask2->at(i);
-            }
-            printSecStructMask(lengthSeqProfile2, _secStructMask2, &_ssMask2);  
-        }
-
-        bool _dnaFlag = userParameters->getDNAFlag();
-        string _prefix = _dnaFlag ? "#" : "%";
-        
-        for(ii = firstSeq; ii <= lastSeq; ii++) 
-        {
-            i = alignPtr->getOutputIndex(ii - 1);
-            
-            (*gdeOutFile) << _prefix;
-            if(!userParameters->getSeqRange()) 
-            {
-                (*gdeOutFile) << alignPtr->getName(i) << "\n";
-            }
-            else 
-            {
-                findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                (*gdeOutFile) << nameonly(alignPtr->getName(i)) << "/"
-                              << rnum.start << "-" << rnum.end << "\n";
-            }
-            slen = 0;
-
-            //for(j = firstRes; j < firstRes + lastRes; j++) //- nige
-            for(j = firstRes; j <= lastRes; j++) //- nige
-            {
-                if (j <= alignPtr->getSeqLength(i))
-                {
-                    //val = alignPtr.getResidue(i, j);
-                    val = (*alignment)[i][j]; // NOTE june29
-                }
-                else
-                { 
-                    val = -3;
-                }
-                if((val == -3) || (val == 253))
-                {
-                    break;
-                }
-                else if((val < 0) || (val > userParameters->getMaxAA()))
-                {
-                    residue = '-';
-                }
-                else 
-                {
-                    residue = userParameters->getAminoAcidCode(val);
-                }
-                if (userParameters->getLowercase())
-                {
-                    seq[j - firstRes] = (char)tolower((int)residue);
-                }
-                else
-                {
-                    seq[j - firstRes] = residue;
-                }
-                slen++;
-            }
-            for(j = 1; j <= slen; j++) 
-            {
-                (*gdeOutFile) << seq[j-1];
-                if((j % lineLength == 0) || (j == slen)) 
-                {
-                    (*gdeOutFile) << "\n";
-                }
-            }
-        }
-  
-        if (userParameters->getOutputStructPenalties() == 0 || 
-            userParameters->getOutputStructPenalties() == 2) 
-        {
-            if (userParameters->getStructPenalties1() == SECST && 
-                userParameters->getUseSS1() == true) 
-            {
-                (*gdeOutFile) << "\"SS_" << setw(alignPtr->getMaxNames()) << left
-                              << alignPtr->getSecStructName1() << "\n";
-                              
-                //for(i = firstRes; i < firstRes + lastRes; i++) //- nige
-                for(i = firstRes; i <= lastRes; i++) //- nige
-                {
-                    val = _ssMask1[i - 1];
-                    if (val == userParameters->getGapPos1() || 
-                        val == userParameters->getGapPos2())
-                    {
-                        seq[i - firstRes] = '-';
-                    }
-                    else
-                    {
-                        seq[i - firstRes] = val;
-                    }
-                }
-
-                for(i = 1; i <= lastRes; i++) 
-                {
-                    (*gdeOutFile) << seq[i-1];
-                    if((i % lineLength == 0) || (i == lastRes)) 
-                    {
-                        (*gdeOutFile) << "\n";
-                    }
-                }
-            }
-    
-            if (userParameters->getStructPenalties2() == SECST && 
-                userParameters->getUseSS2() == true) 
-            {
-                (*gdeOutFile) << "\"SS_" << setw(alignPtr->getMaxNames()) << left
-                              << alignPtr->getSecStructName2() << "\n";
-                                              
-                //for(i = firstRes; i < firstRes + lastRes; i++) //- nige
-                for(i = firstRes; i <= lastRes; i++) //- nige
-                {
-                    val = _ssMask2[i - 1];
-                    if (val == userParameters->getGapPos1() || 
-                        val == userParameters->getGapPos2())
-                    {
-                        seq[i - firstRes] = '-';
-                    }
-                    else
-                    {
-                        seq[i - firstRes] = val;
-                    }
-                }
-
-                //for(i = 1; i <= lastRes; i++) //- nige
-                for(i = 1; i <= length; i++) //- nige
-                {
-                    (*gdeOutFile) << seq[i - 1];
-                    //if((i % lineLength == 0) || (i == lastRes)) //- nige
-                    if((i % lineLength == 0) || (i == length)) //- nige
-                    {
-                        (*gdeOutFile) << "\n";
-                    }
-                }
-            }
-        }
-        if (userParameters->getOutputStructPenalties() == 1 || 
-            userParameters->getOutputStructPenalties() == 2) 
-        {
-            if (userParameters->getStructPenalties1() != NONE && 
-                userParameters->getUseSS1() == true) 
-            {
-                (*gdeOutFile) << "\"GM_" << setw(alignPtr->getMaxNames()) << left
-                              << alignPtr->getSecStructName1() << "\n";
-                
-                vector<char>* _gapPenaltyMask1 = alignPtr->getGapPenaltyMask1();          
-                //for(i = firstRes; i < firstRes + lastRes; i++) //- nige
-                for(i = firstRes; i <= lastRes; i++) //- nige
-                {
-                    val = _gapPenaltyMask1->at(i - 1);
-                    if (val == userParameters->getGapPos1() || 
-                        val == userParameters->getGapPos2())
-                    {
-                        seq[i - firstRes] = '-';
-                    }
-                    else
-                    {
-                        seq[i - firstRes] = val;
-                    }
-                }
-
-                //for(i = 1; i <= lastRes; i++) //- nige
-                for(i = 1; i <= length; i++) //- nige
-                {
-                    (*gdeOutFile) << seq[i - 1];
-                    //if((i % lineLength == 0) || (i == lastRes)) //- nige
-                    if((i % lineLength == 0) || (i == length)) //- nige
-                    {
-                        (*gdeOutFile) << "\n";
-                    }
-                }
-            }
-            if (userParameters->getStructPenalties2() != NONE && 
-                userParameters->getUseSS2() == true) 
-            {
-                (*gdeOutFile) << "\"GM_" << setw(alignPtr->getMaxNames()) << left
-                              << alignPtr->getSecStructName2() << "\n";
-                
-                vector<char>* _gapPenaltyMask2 = alignPtr->getGapPenaltyMask2();    
-                //for(i = firstRes; i < firstRes + lastRes; i++) //- nige
-                for(i = firstRes; i < length; i++) //- nige
-                {
-                    val = _gapPenaltyMask2->at(i-1);
-                    if (val == userParameters->getGapPos1() || 
-                        val == userParameters->getGapPos2())
-                    {
-                        seq[i - firstRes] = '-';
-                    }
-                    else
-                    {
-                        seq[i - firstRes] = val;
-                    }
-                }
-
-                //for(i = 1; i <= lastRes; i++) //- nige
-                for(i = 1; i <= length; i++) //- nige
-                {
-                    (*gdeOutFile) << seq[i - 1];
-                    //if((i % lineLength == 0) || (i == lastRes)) //- nige
-                    if((i % lineLength == 0) || (i == length)) //- nige
-                    {
-                        (*gdeOutFile) << "\n";
-                    }
-                }
-            }
-        }
-        gdeOutFile->close();   
-    }
-    catch(const bad_alloc& e)
-    {
-        gdeOutFile->close();
-        cerr << "A bad_alloc exception has occured in the gdeOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        gdeOutFile->close();
-        cerr << "An exception has occured in the gdeOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        gdeOutFile->close();
-        cerr << "An exception has occured in the gdeOut function.\n";
-        exit(1);    
-    }     
-}
-
-void AlignmentOutput::nbrfOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    char residue;
-    int val;
-    int i, ii;
-    int j, slen;    
-    int lineLength;
-    rangeNum rnum;
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;
-            
-    try
-    {
-        int _maxLength = alignPtr->getMaxAlnLength();
-        vector<char> sequence;
-        sequence.assign(_maxLength + 1, '0');
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        // decide the line length for this alignment - maximum is LINELENGTH 
-        lineLength = PAGEWIDTH - alignPtr->getMaxNames();
-        lineLength = lineLength - lineLength % 10; // round to a multiple of 10
-        if (lineLength > LINELENGTH || lineLength <= 0) // Mark, 18-7-07
-        {
-            lineLength = LINELENGTH;
-        }
-        
-        // Get name prefix. DL if DNA, P1 if protein
-        string namePrefix;
-        bool _dnaFlag = userParameters->getDNAFlag();
-        namePrefix = _dnaFlag ? ">DL;" : ">P1;";
-        
-        //int length = lastRes - firstRes + 1; //- nige
-
-        for(ii = firstSeq; ii <= lastSeq; ii++) 
-        {
-            i = alignPtr->getOutputIndex(ii - 1);
-            
-            (*nbrfOutFile) << namePrefix;
-            
-            if (!userParameters->getSeqRange()) 
-            {
-                (*nbrfOutFile) << alignPtr->getName(i) << "\n"
-                               << alignPtr->getTitle(i) << "\n";
-            }
-            else 
-            {
-                findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                (*nbrfOutFile) << nameonly(alignPtr->getName(i)) << "/" << rnum.start
-                               << "-"<< rnum.end << "\n"
-                               << alignPtr->getTitle(i) << "\n";
-            }
-            slen = 0;
-            //for(j = firstRes; j < firstRes + lastRes; j++) //- nige
-            for(j = firstRes; j <= lastRes; j++) //- nige
-            {
-                // NOTE I changed this here!!!!!
-                if (j <= alignPtr->getSeqLength(i))
-                {
-                    //val = alignPtr.getResidue(i, j);
-                    val = (*alignment)[i][j]; // NOTE june29
-                }
-                else
-                { 
-                    val = -3;
-                }
-                if((val == -3) || (val == 253))
-                {
-                    break;
-                }
-                else if((val < 0) || (val > userParameters->getMaxAA()))
-                {
-                    residue = '-';
-                }
-                else 
-                {
-                    residue = userParameters->getAminoAcidCode(val);
-                }
-                sequence[j - firstRes] = residue;
-                slen++;
-            }
-            for(j = 1; j <= slen; j++) 
-            {
-                (*nbrfOutFile) << sequence[j - 1];
-                if((j % lineLength == 0) || (j == slen))
-                { 
-                    (*nbrfOutFile) << "\n";
-                }
-            }
-            (*nbrfOutFile) << "*\n";
-        }    
-        nbrfOutFile->close();
-    }
-    catch(const bad_alloc& e)
-    {
-        nbrfOutFile->close();
-        cerr << "A bad_alloc exception has occured in the nbrfOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        nbrfOutFile->close();
-        cerr << "An exception has occured in the nbrfOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        nbrfOutFile->close();
-        cerr << "An exception has occured in the nbrfOut function.\n";
-        exit(1);    
-    }    
-}
-
-/* 
- * The function clustalOut is used to ouput the Alignment into a clustal format
- * file.
- */
-void AlignmentOutput::clustalOut(Alignment* alignPtr, outputRegion partToOutput)
-{
-    int firstRes = partToOutput._firstRes;
-    int lastRes = partToOutput._lastRes;
-    int firstSeq = partToOutput._firstSeq;
-    int lastSeq = partToOutput._lastSeq;
-        
-    try
-    {
-        vector<char> seq1;    
-        vector<int> seqNo;
-        vector<int> printSeqNo;    
-        vector<char> ss_mask1, ss_mask2;
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        char  temp[MAXLINE];
-        char c;
-        int val;
-        int ii, lv1, catident1[NUMRES], catident2[NUMRES], ident, chunks;
-        int i, j, k, l;
-        int pos, ptr;
-        int lineLength;
-
-        rangeNum rnum;
-        string tmpStr = "";
-        string sequenceLine = "";
-
-
-        int _numSequences = alignPtr->getNumSeqs();
-        // PMcG revert to Clustalw1.83 output format for name width
-        const int NAMESWIDTH=std::max(std::min(MAXNAMESTODISPLAY,alignPtr->getMaxNames()) , MINNAMESTODISPLAY); 
-
-        seqNo.assign(_numSequences + 1, 0);
-        printSeqNo.assign(_numSequences + 1, 0);
-    
-        // check that lastSeq <= _numSequences
-        if(lastSeq > _numSequences)
-        {
-            lastSeq = _numSequences;
-        }
-    
-        for (i = firstSeq; i <= lastSeq; i++)
-        {
-            printSeqNo[i] = seqNo[i] = 0;
-            for(j = 1; j < firstRes; j++) 
-            {
-                //val = alignPtr.getResidue(i, j);
-                val = (*alignment)[i][j]; // NOTE june29
-                if((val >= 0) || (val <= userParameters->getMaxAA()))
-                { 
-                    seqNo[i]++;
-                }
-            }
-        }
-
-        seq1.assign(alignPtr->getMaxAlnLength() + 1, 0);
-        // Check if we have secondary structure in file 1 and if we want to output it.
-        if (userParameters->getStructPenalties1() == SECST && 
-            userParameters->getUseSS1() == true) 
-        {
-            int lengthSeq1 = alignPtr->getSeqLength(1);
-            ss_mask1.assign(lengthSeq1 + 10, 0);
-            vector<char>* _secStructMask1 = alignPtr->getSecStructMask1();
-        
-            for (i = 0; i < lengthSeq1; i++)
-            {
-                ss_mask1[i] = _secStructMask1->at(i);
-            }
-            printSecStructMask(lengthSeq1, _secStructMask1, &ss_mask1);
-          
-        }
-        
-        // Check if we have secondary structure in file 2 and if we want to output it.
-        if (userParameters->getStructPenalties2() == SECST && 
-            userParameters->getUseSS2() == true &&
-            userParameters->getProfile2Empty() == false)
-        {
-            // AW added test getProfile2Empty was meant to fix bug
-            // 141, but only prevents segfault, output still faulty.
-            // Has to be fixed somewhere else
-            int indexProfile2FirstSeq = alignPtr->getProfile1NumSeqs() + 1;
-            int lengthSeqProfile2 = alignPtr->getSeqLength(indexProfile2FirstSeq);
-            ss_mask2.assign(lengthSeqProfile2 + 10, 0);
-            vector<char>* _secStructMask2 = alignPtr->getSecStructMask2();
-            for (i = 0; i < lengthSeqProfile2; i++)
-            {
-                ss_mask2[i] = _secStructMask2->at(i);
-            }
-            printSecStructMask(lengthSeqProfile2, _secStructMask2, &ss_mask2);
-        }
-    
-        (*clustalOutFile) << "CLUSTAL "<< userParameters->getRevisionLevel() 
-                          << " multiple sequence alignment\n\n";
-    
-        // decide the line length for this alignment - maximum is LINELENGTH
-
-        //PMcG  9-2-2008 make line output same as 1.83
-        //lineLength = PAGEWIDTH - alignPtr->getMaxNames();
-        lineLength = PAGEWIDTH - NAMESWIDTH;
-        lineLength = lineLength - lineLength % 10; // round to a multiple of 10
-        if (lineLength > LINELENGTH || lineLength <= 0) // Mark 18-7-07
-        { 
-            lineLength = LINELENGTH;
-        }
-    
-        int length = lastRes - firstRes + 1; //- nige
-
-        chunks = length / lineLength; //- nige
-        if(length % lineLength != 0) //- nige
-        {
-          ++chunks;
-        }
-        //printf("firstRes=%d,lastRes=%d,length=%d,chunks=%d\n",
-        //       firstRes, lastRes, length, chunks);
-
-        // This will loop through each of the blocks.
-        for(lv1 = 1; lv1 <= chunks; ++lv1) 
-        {
-            // pos is begining of chunk, ptr is the end of the chunk to be displayed.
-            pos = ((lv1 - 1) * lineLength) + 1; 
-            ptr = (length < pos + lineLength - 1) ? length : pos + lineLength - 1; //- nige
-   
-            (*clustalOutFile) << "\n";
-            int _outStructPenalty = userParameters->getOutputStructPenalties();
-            
-            string secStructName1 = alignPtr->getSecStructName1(); // Mark 18-7-07
-            
-            if((int)secStructName1.size() > MAXNAMESTODISPLAY)
-            {
-                //secStructName1 = secStructName1.substr(0, MAXNAMESTODISPLAY);
-                secStructName1 = secStructName1.substr(0, NAMESWIDTH);
-            }            
-            if (_outStructPenalty == 0 || _outStructPenalty == 2) 
-            {
-                if (userParameters->getStructPenalties1() == SECST && 
-                    userParameters->getUseSS1() == true) 
-                {
-                    for(i = pos; i <= ptr; ++i) 
-                    {
-                        // Check if we can access mask position first
-                        if((int)ss_mask1.size() > i + firstRes - 2)  
-                        {
-                            val = ss_mask1[i + firstRes - 2]; 
-                            if (val == userParameters->getGapPos1() || 
-                                val == userParameters->getGapPos2())
-                            {
-                                temp[i - pos] = '-';
-                            }
-                            else
-                            {
-                                temp[i - pos] = val;
-                            }
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-                    temp[i - pos] = EOS;  
-                                      
-                    if(userParameters->getSeqRange())
-                    {
-                        //(*clustalOutFile) << "!SS_" << setw(MAXNAMESTODISPLAY +
-                        (*clustalOutFile) << "!SS_" << setw(NAMESWIDTH +
-                                                            clusSecStructOffset)
-                                          << left << secStructName1 
-                                          << "  " << temp << "\n";
-                    }
-                    else
-                    {
-                        //(*clustalOutFile) << "!SS_" << setw(MAXNAMESTODISPLAY)
-                        (*clustalOutFile) << "!SS_" << setw(NAMESWIDTH)
-                                          << left << secStructName1 << "  " 
-                                          << temp << "\n";
-                    }
-                }
-            }
-            if (_outStructPenalty == 1 || _outStructPenalty == 2) 
-            {
-                if (userParameters->getStructPenalties1() != NONE && 
-                    userParameters->getUseSS1() == true) 
-                {
-                    vector<char>* _gapPenaltyMask1 = alignPtr->getGapPenaltyMask1();       
-                    for(i = pos; i <= ptr; ++i) 
-                    {
-                        if((int)_gapPenaltyMask1->size() > i + firstRes - 2) 
-                        {
-                            val = _gapPenaltyMask1->at(i + firstRes - 2); 
-                            if (val == userParameters->getGapPos1() || 
-                                val == userParameters->getGapPos2())
-                            {
-                                temp[i - pos] = '-';
-                            }
-                            else
-                            {
-                                temp[i - pos] = val;
-                            }
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-                    temp[i - pos] = EOS;
-                    
-                    //(*clustalOutFile) << "!GM_" << setw(MAXNAMESTODISPLAY) << left
-                    (*clustalOutFile) << "!GM_" << setw(NAMESWIDTH) << left
-                                      << secStructName1 << "  "
-                                      << temp << "\n";
-                }
-            }
-            
-            
-            string secStructName2 = alignPtr->getSecStructName2(); // Mark 18-7-07
-            //if((int)secStructName2.size() > MAXNAMESTODISPLAY)
-            if((int)secStructName2.size() > NAMESWIDTH)
-            {
-                //secStructName2 = secStructName2.substr(0, MAXNAMESTODISPLAY);
-                secStructName2 = secStructName2.substr(0, NAMESWIDTH);
-            }
-                                
-            if (_outStructPenalty == 0 || _outStructPenalty == 2) 
-            {
-                if (userParameters->getStructPenalties2() == SECST && 
-                    userParameters->getUseSS2() == true) 
-                {
-                    for(i = pos; i <= ptr; ++i) 
-                    {
-                        if((int)ss_mask2.size() > i + firstRes - 2)
-                        {
-                            val = ss_mask2[i + firstRes - 2]; 
-                            if (val == userParameters->getGapPos1() || 
-                                val == userParameters->getGapPos2())
-                            {
-                                temp[i - pos] = '-';
-                            }
-                            else
-                            {
-                                temp[i - pos] = val;
-                            }
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-                    temp[i - pos] = EOS;
-                    
-                                        
-                    if (userParameters->getSeqRange())
-                    {
-                        //(*clustalOutFile) << "!SS_" << setw(MAXNAMESTODISPLAY +
-                        (*clustalOutFile) << "!SS_" << setw(NAMESWIDTH +
-                                                            clusSecStructOffset)
-                                          << left << secStructName2; 
-                        (*clustalOutFile) << "  " << temp << "\n";
-                    }
-                    else
-                    {
-                        //(*clustalOutFile) << "!SS_" << setw(MAXNAMESTODISPLAY)
-                        (*clustalOutFile) << "!SS_" << setw(NAMESWIDTH)
-                                          << left << secStructName2 << "  " 
-                                          << temp << "\n";
-                    }
-                }
-            }
-            
-            if (_outStructPenalty == 1 || _outStructPenalty == 2) 
-            {
-                if (userParameters->getStructPenalties2() != NONE && 
-                    userParameters->getUseSS2() == true) 
-                {
-                    vector<char>* _gapPenaltyMask2 = alignPtr->getGapPenaltyMask2();
-                    for(i = pos; i <= ptr; ++i) 
-                    {
-                        if((int)_gapPenaltyMask2->size() > i + firstRes - 2)
-                        {
-                            val = _gapPenaltyMask2->at(i + firstRes - 2); 
-                            if (val == userParameters->getGapPos1() || 
-                                val == userParameters->getGapPos2())
-                            {
-                                temp[i - pos] = '-';
-                            }
-                            else
-                            {
-                                temp[i - pos] = val;
-                            }
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-                    temp[i - pos] = EOS;
-                    
-                    //(*clustalOutFile) << "!GM_" << setw(MAXNAMESTODISPLAY) << left
-                    (*clustalOutFile) << "!GM_" << setw(NAMESWIDTH) << left
-                                      << secStructName2 << "  "
-                                      << temp << "\n";
-                }
-            }
-        
-            for(ii = firstSeq; ii <= lastSeq; ++ii) 
-            {
-                i = alignPtr->getOutputIndex(ii - 1); 
-                printSeqNo[i] = 0;
-                for(j = pos; j <= ptr; ++j) 
-                {
-                    if (j + firstRes - 1 <= alignPtr->getSeqLength(i))
-                    {
-                        //val = alignPtr.getResidue(i, j + firstRes - 1);
-                        val = (*alignment)[i][j + firstRes - 1]; // NOTE june29
-                    }
-                    else
-                    { 
-                        val = -3;
-                    }
-                    if((val == -3) || (val == 253)) 
-                    {
-                        break;
-                    }
-                    else if((val < 0) || (val > userParameters->getMaxAA()))
-                    {
-                        seq1[j] = '-';
-                    }
-                    else 
-                    {
-                        seq1[j] = userParameters->getAminoAcidCode(val);
-                        seqNo[i]++;
-                        printSeqNo[i] = 1;
-                    } 
-                }
-                for(; j <= ptr; ++j) 
-                {
-                    seq1[j]='-';
-                }
-            
-                sequenceLine = "";
-
-                for(int index = pos; index < ptr + 1; index++)
-                {
-                    sequenceLine += seq1[index];
-                }
-                
-                string seqName = alignPtr->getName(i);
-                //if((int)seqName.size() > MAXNAMESTODISPLAY)
-                if((int)seqName.size() > NAMESWIDTH)
-                {
-                    //seqName = seqName.substr(0, MAXNAMESTODISPLAY);
-                    seqName = seqName.substr(0, NAMESWIDTH);
-                }
-                
-                if (!userParameters->getSeqRange()) 
-                {
-                    // NOTE I made a change here from + 5, to + 6.
-                    //(*clustalOutFile) << setw(alignPtr->getMaxNames() + 6) << left
-                    //                  << alignPtr->getName(i);
-
-                    //(*clustalOutFile) << setw(MAXNAMESTODISPLAY + 6) << left
-                    //                  << seqName; 
-                    // PMcG changed this to revert to behaviour of clustalw1.83
-                    // 
-                    //(*clustalOutFile) << setw(std::max(std::min(MAXNAMESTODISPLAY,alignPtr->getMaxNames()) , MINNAMESTODISPLAY) + 6)
-                    (*clustalOutFile) << setw(NAMESWIDTH + 6) << left << seqName; 
-
-
-                }
-                else // Put the sequence range information in! 
-                {
-                    findRangeValues(alignPtr, &rnum, firstRes, lastRes, ii);
-                    string nameOnly = nameonly(seqName);
-                    std::stringstream ss;
-                    std::stringstream ss2;
-                    string rangeStart;
-                    string rangeEnd;
-                    ss << rnum.start;
-                    ss >> rangeStart;
-                    ss2 << rnum.end;
-                    ss2 >> rangeEnd;
-                    tmpStr = nameOnly + "/" + rangeStart + "-" + rangeEnd;
-                    //(*clustalOutFile) << setw(MAXNAMESTODISPLAY + clusSequenceOffset) 
-                    (*clustalOutFile) << setw(NAMESWIDTH + clusSequenceOffset) 
-                                      << left << tmpStr;
-                }
-            
-                (*clustalOutFile) << sequenceLine;
-            
-                if (userParameters->getClSeqNumbers() && printSeqNo[i])
-                {
-                    (*clustalOutFile) << " " << seqNo[i];
-                }
-            
-                (*clustalOutFile) << "\n";
-            }
-        
-            // Now print out the conservation information!
-            for(i = pos; i <= ptr; ++i) 
-            {
-                seq1[i] = ' ';
-                ident = 0;
-
-                for(j = 1; j <= (int)strongGroup.size(); j++)
-                {
-                    catident1[j - 1] = 0;
-                }
-                for(j = 1; j <= (int)weakGroup.size(); j++) 
-                {
-                    catident2[j - 1] = 0;
-                }
-                
-                for(j = firstSeq; j <= lastSeq; ++j) 
-                {
-                    if((i + firstRes - 1 <= alignPtr->getSeqLength(j)) &&
-                       (i + firstRes - 1 <= alignPtr->getSeqLength(firstSeq)))
-                    {// NOTE june29
-                        if(((*alignment)[firstSeq][i + firstRes - 1] >= 0) && 
-                            ((*alignment)[firstSeq][i + firstRes - 1] <=
-                            userParameters->getMaxAA())) 
-                        {
-                            // Count how many are identical to the first sequence
-                            if((*alignment)[firstSeq][i + firstRes - 1] == 
-                                (*alignment)[j][i + firstRes - 1])
-                            {
-                                ++ident;
-                            }
-                            // Count how many are in the same category.
-                            for(k = 1; k <= (int)strongGroup.size(); k++) 
-                            {
-                                for(l = 0; (c = strongGroup[k - 1][l]); l++) 
-                                {
-                                    int resCode = (*alignment)[j][i + firstRes - 1];
-                                    if(resCode <= userParameters->getMaxAA() + 1)
-                                    {
-                                        if (userParameters->getAminoAcidCode(resCode) == c)
-                                        {
-                                            catident1[k - 1]++;
-                                            break;
-                                        }
-                                    }
-                                }
-                            }
-                            for(k = 1; k <= (int)weakGroup.size(); k++) 
-                            {
-                                for(l = 0; (c = weakGroup[k - 1][l]); l++) 
-                                {//NOTE june29
-                                    int resCode = (*alignment)[j][i + firstRes - 1];
-                                    if(resCode <= userParameters->getMaxAA() + 1)
-                                    {
-                                        if (userParameters->getAminoAcidCode(resCode) == c)
-                                        {
-                                            catident2[k - 1]++;
-                                            break;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }    
-                }
-            
-                // Now do the conservation part for each block. 
-                if(ident == lastSeq - firstSeq + 1)
-                {
-                    seq1[i] = '*'; // All residues the same!
-                }
-                else if (!userParameters->getDNAFlag()) 
-                {
-                    for(k = 1; k <= (int)strongGroup.size(); k++) 
-                    {
-                        if (catident1[k - 1] == lastSeq - firstSeq + 1) 
-                        {
-                            seq1[i] = ':'; // All residues member of the same category
-                            break;
-                        }
-                    }
-                    if(seq1[i] == ' ')
-                    {
-                        for(k = 1; k <= (int)weakGroup.size(); k++) 
-                        {
-                            if (catident2[k - 1] == lastSeq - firstSeq + 1) 
-                            {
-                                seq1[i] = '.'; // All residues member of the same category
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-
-            sequenceLine = "";
-            for(int index = pos; index < ptr + 1; index++)
-            {
-                sequenceLine += seq1[index];
-            }
-
-            //for(k = 0; k < MAXNAMESTODISPLAY + 6; k++)
-            for(k = 0; k < NAMESWIDTH + 6; k++)
-            { 
-                (*clustalOutFile) << " ";
-            }
-            if(userParameters->getSeqRange()) 
-            {
-
-                (*clustalOutFile) << "          ";
-            }
-
-            (*clustalOutFile) << sequenceLine << "\n";
-        }
-        clustalOutFile->close();
-    }
-    catch(const bad_alloc& e)
-    {
-        clustalOutFile->close();
-        cerr << "A bad_alloc exception has occured in the clustalOut function.\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-    catch(VectorOutOfRange e)
-    {
-        clustalOutFile->close();
-        cerr << "An exception has occured in the clustalOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(exception e)
-    {
-        clustalOutFile->close();
-        cerr << "An exception has occured in the clustalOut function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }
-    catch(...)
-    {
-        clustalOutFile->close();
-        cerr << "An exception has occured in the clustalOut function.\n";
-        exit(1);    
-    }    
-}
-
-/*
- * The function printSecStructMask takes in the 2 mask vectors. It makes changes to 
- * mask and puts the result in structMask. This is the one that will be printed out.
- * NOTE I have had to use (*structMask)[i] syntax. This is not good. But there is no
- * way to do random access setting in vectors otherwise.
- */
-void AlignmentOutput::printSecStructMask(int prfLength, vector<char>* mask, 
-                                         vector<char>* structMask)
-{
-    int i, j;
-//    calculate the gap penalty mask from the secondary structures
-
-    i = 0;
-    try
-    {
-        while (i < prfLength) 
-        {
-            if (tolower(mask->at(i)) == 'a' || mask->at(i) == '$') 
-            {
-                for (j = 0; j < userParameters->getHelixEndMinus(); j++) 
-                {
-                    if (i + j >= prfLength || (tolower(mask->at(i+j)) != 'a'
-                                    && mask->at(i+j) != '$')) 
-                    {    
-                        break;
-                    }
-                    (*structMask)[i+j] = 'a';
-                }
-                i += j;
-                while (tolower(mask->at(i)) == 'a' || mask->at(i) == '$') 
-                {
-                    if (i >= prfLength) 
-                        break;
-                    if (mask->at(i) == '$') 
-                    {
-                        (*structMask)[i] = 'A';
-                        i++;
-                        break;
-                    }
-                    else 
-                        (*structMask)[i] = (*mask)[i];
-                    i++;
-                }
-                for (j = 0; j < userParameters->getHelixEndMinus(); j++) 
-                {
-                    if ((i-j-1>=0) && (tolower(mask->at(i-j-1)) == 'a'
-                                        || mask->at(i-j-1) == '$'))
-                    {
-                        (*structMask)[i - j - 1] = 'a';
-                    }
-                }
-            }
-            else if (tolower(mask->at(i)) == 'b' || mask->at(i) == '%') 
-            {
-                for (j = 0; j < userParameters->getStrandEndMinus(); j++) 
-                {
-                    if (i + j >= prfLength || (tolower(mask->at(i+j)) != 'b'
-                                        && mask->at(i+j) != '%')) 
-                    {
-                        break;
-                    }
-                    (*structMask)[i+j] = 'b';
-                }
-                i += j;
-                while (tolower(mask->at(i)) == 'b' || mask->at(i) == '%') 
-                {
-                    if (i >= prfLength) 
-                        break;
-                    if (mask->at(i) == '%') 
-                    {
-                        (*structMask)[i] = 'B';
-                        i++;
-                        break;
-                    }
-                    else
-                    { 
-                        (*structMask)[i] = mask->at(i);
-                    }
-                    i++;
-                }
-                for (j = 0; j < userParameters->getStrandEndMinus(); j++) 
-                {
-                    if ((i - j - 1 >= 0) && (tolower(mask->at(i - j - 1)) == 'b' || 
-                        mask->at(i-j-1) == '%'))
-                    {
-                        (*structMask)[i-j-1] = 'b';
-                    }
-                }
-            }
-            else
-            { 
-                i++;
-            }
-        }
-    }
-    catch(const exception& e)
-    {
-        // Catch all the exceptions
-        cerr << "There has been an exception in the function printSecStructMask\n"
-             << e.what() << "\n";
-        exit(1);
-    }
-}
-
-/*
- * The function findRangeValues is used to find the range to be printed out.
- *
- *
- */
-void AlignmentOutput::findRangeValues(Alignment* alignPtr, rangeNum *rnum, int firstRes, 
-                                int len, int firstSeq)
-{
-    assert(rnum);
-    assert(firstRes > 0);
-    assert(len > 0);
-    assert(firstSeq > 0);
-    
-    try
-    {
-        int val;
-        int i, ii;
-        int j, slen;    
-
-        char tmpName[FILENAMELEN + 15];
-        int iStart = 0;
-        int iEnd = 0; // to print sequence start-end with names
-        int found = 0;
-        int ngaps = 0;
-        int tmpStart = 0; 
-        int tmpEnd = 0;
-        int ntermgaps = 0;
-        int pregaps = 0;
-        int tmpk = 0;
-        int isRange = 0;
-        int formula = 0;
-        const SeqArray* alignment = alignPtr->getSeqArray();
-        
-        tmpName[0] = '\0';
-        slen = 0;
-
-        ii = firstSeq ;
-        i = alignPtr->getOutputIndex(ii - 1); // NOTE Same as elsewhere! 
-        string name = alignPtr->getName(i);
-        
-        if( (sscanf(name.c_str(),"%[^/]/%d-%d",tmpName, &tmpStart, &tmpEnd) == 3)) 
-        {
-            isRange = 1;
-        }
-        
-        for(tmpk = 1; tmpk < firstRes; tmpk++)
-        { 
-            // do this irrespective of above sscanf
-            //val = alignPtr.getResidue(i, tmpk);
-            val = (*alignment)[i][tmpk]; // NOTE june29
-            if ((val < 0) || (val > userParameters->getMaxAA()))
-            { 
-                //it is gap
-                pregaps++;
-            }
-        }
-        
-        for(j = firstRes; j < firstRes + len; j++) 
-        {
-            if(j > alignPtr->getSeqLength(i))
-            {
-                val = -3; // Cant get it so break out.
-            }
-            else
-            {
-                //val = alignPtr.getResidue(i, j);
-                val = (*alignment)[i][j]; // NOTE june29
-            }
-            if((val == -3) || (val == 253))
-            {
-                break;
-            }
-            else if((val < 0) || (val > userParameters->getMaxAA())) 
-            {
-                ngaps++;
-            }
-            else 
-            {
-                found = j;
-            }
-            if ( found && (iStart == 0) ) 
-            {
-                iStart = found;
-                ntermgaps = ngaps;
-            }
-            slen++;
-        }
-        if(userParameters->getSeqRange()) 
-        {
-            cout << "Name : " << alignPtr->getName(i) << " "
-                 << "\n  firstRes = "<< firstRes << " "
-                 << "   len = " << len << " "
-                 << "\n  iStart = " << iStart << " "
-                 << "\n  tmpStart = " << tmpStart << " "
-                 << "\n  ngaps = " << ngaps << " "
-                 << "\n  pregaps = " << pregaps << " ";
-            if (!isRange)
-            {
-                formula = iStart - pregaps;
-            }
-            else
-            {
-                formula = iStart - pregaps +  ( tmpStart == 1 ? 0: tmpStart-1) ;
-            }
-
-            cout << "\n\nsuggestion  iStart - pregaps + tmpStart - ntermgaps = "
-                 << iStart << " - " << pregaps << " + " << tmpStart << " - " << ntermgaps
-                 << " formula " << formula << " ";
-        }
-        else 
-        {
-            cerr << "\n no range found .... strange,  iStart = " << iStart;
-            formula = 1;
-        }
-        if (pregaps == firstRes - 1) // all gaps -  now the conditions........ 
-        {
-            formula = tmpStart ; // keep the previous start... 
-        }
-        formula = (formula <= 0) ? 1: formula;
-        if (pregaps == 0 && tmpStart == 0) 
-        {
-            formula = firstRes;
-        }
-        iEnd = formula + len - ngaps -1;
-        rnum->start = formula;
-        rnum->end = iEnd;
-        cout << "\n check... " << alignPtr->getName(i) << " " << rnum->start 
-             << " - " << rnum->end;
-        cout << " Done checking.........";
-    }
-    catch(VectorOutOfRange e)
-    {
-        cerr << "An exception has occured in the findRangeValues function.\n"
-             << e.what() << "\n";
-        exit(1);    
-    }    
-    catch(...)
-    {
-        cerr << "An exception has occured in findRangeValues function\n";
-        exit(1);
-    }
-}
-
-string AlignmentOutput::nameonly(string s)
-{
-    string tmp;
-    try
-    {
-        int i = 0;
-
-        while (i < (int)s.size()) 
-        {
-            if(s.at(i) != '/')
-            {
-                tmp += s.at(i);
-                i++;
-            }
-            else
-            {
-                break;
-            }
-        }
-    }
-    catch(const exception& e)
-    {
-        cerr << "An exception has occured in the function nameonly\n"
-             << e.what();
-        exit(1);
-    }
-    return tmp;
-}
-
-int AlignmentOutput::SeqGCGCheckSum(vector<char>* seq, int length)
-{
-    int i;
-    long check;
-    int seqResIndex = 1;
-    //int seqLength = seq->size();
-    
-    for (i = 0, check = 0; i < length; i++, seqResIndex++)
-    {
-        char _toUpperCase = (*seq)[seqResIndex];
-        check += ((i % 57) + 1) * toupper(_toUpperCase);
-    }
-
-    return (check % 10000);
-}
-
-void AlignmentOutput::showAlign()
-{
-    //FILE *file;
-    int  numLines;
-    char temp[MAXLINE + 1];
-    temp[0] = '\0';
-    string fileName;
-    string answer;
-    
-    if(userParameters->getOutputClustal()) 
-    {
-        fileName = clustalOutName;
-    }
-    else if(userParameters->getOutputNbrf()) 
-    {
-        fileName = nbrfOutName;
-    }
-    else if(userParameters->getOutputGCG()) 
-    {
-        fileName = gcgOutName;
-    }
-    else if(userParameters->getOutputPhylip()) 
-    {
-        fileName = phylipOutName;
-    }
-    else if(userParameters->getOutputGde()) 
-    {
-        fileName = gdeOutName;
-    }
-    else if(userParameters->getOutputNexus()) 
-    {
-        fileName = nexusOutName;
-    }
-    else if(userParameters->getOutputFasta()) 
-    {
-        fileName = fastaOutName;
-    }
-    else
-    {
-        return; // No file output type!
-    }
-
-    ifstream _fileIn;
-    _fileIn.open(fileName.c_str(), ios::in);        
-    _fileIn.seekg(0, std::ios::beg); // start at the beginning
-    
-    cout << "\n\n";
-    numLines = 0;
-
-    while(_fileIn.getline(temp, MAXLINE + 1, '\n')) 
-    {
-       //fputs(temp,stdout);
-       cout << temp << "\n";
-       ++numLines;
-       if(numLines >= PAGE_LEN) 
-       {
-           cout << "\n";
-           utilityObject->getStr(string("Press [RETURN] to continue or  X  to stop"), answer);
-           if(toupper(answer[0]) == 'X') 
-           {
-               _fileIn.close();
-               return;
-           }
-           else
-           {
-               numLines = 0;
-           }
-       }
-    }
-    _fileIn.close();
-    cout << "\n";
-    utilityObject->getStr(string("Press [RETURN] to continue"), answer);
-}
-
-}
-