/*****************************************************************************
#   Copyright (C) 1994-2008 by David Gordon.
#   All rights reserved.                           
#                                                                           
#   This software is part of a beta-test version of the Consed/Autofinish
#   package.  It should not be redistributed or
#   used for any commercial purpose, including commercially funded
#   sequencing, without written permission from the author and the
#   University of Washington.
#   
#   This software is provided ``AS IS'' and any express or implied
#   warranties, including, but not limited to, the implied warranties of
#   merchantability and fitness for a particular purpose, are disclaimed.
#   In no event shall the authors or the University of Washington be
#   liable for any direct, indirect, incidental, special, exemplary, or
#   consequential damages (including, but not limited to, procurement of
#   substitute goods or services; loss of use, data, or profits; or
#   business interruption) however caused and on any theory of liability,
#   whether in contract, strict liability, or tort (including negligence
#   or otherwise) arising in any way out of the use of this software, even
#   if advised of the possibility of such damage.
#
#   Building Consed from source is error prone and not simple which is
#   why I provide executables.  Due to time limitations I cannot
#   provide any assistance in building Consed.  Even if you do not
#   modify the source, you may introduce errors due to using a
#   different version of the compiler, a different version of motif,
#   different versions of other libraries than I used, etc.  For this
#   reason, if you discover Consed bugs, I can only offer help with
#   those bugs if you first reproduce those bugs with an executable
#   provided by me--not an executable you have built.
# 
#   Modifying Consed is also difficult.  Although Consed is modular,
#   some modules are used by many other modules.  Thus making a change
#   in one place can have unforeseen effects on many other features.
#   It may takes months for you to notice these other side-effects
#   which may not seen connected at all.  It is not feasable for me to
#   provide help with modifying Consed sources because of the
#   potentially huge amount of time involved.
#
#*****************************************************************************/
#include    <stdlib.h>
#include    <iostream.h>
#include    "consedParameters.h"
#include    "consedResources.h"
#include    <stdio.h>
#include    "nPrimerFalseMatchScoreArray.h"
#include    "rwctokenizer.h"
#include    "tagTypes.h"
#include    "mbt_exception.h"
#include    "bIsNumericMaybeWithWhitespace.h"
#include    "guiFindRestrictionEnzymeSites.h"

#define DEFINE_SOLINE
#include    "soLine.h"

#include    "rwcregexp.h"


//
// static class members
//
consedParameters* consedParameters::pGlobalConsedParameters_ = 0;  // pointer to sole instance
bool consedParameters::bConsedParametersCreated_ = false;  // flag indicates instance exists



RWCString consedParameters :: soGetDocumentation() {
   if ( soDocumentation_.isNull() )
      setDocumentation();

   return( soDocumentation_ );
}




void consedParameters :: setParametersForSequencingPrimersNotPCRPrimers( 
                            const bool bSequencingNotPCR ) {
   
   if ( bSequencingNotPCR ) {
      nPrimersMinimumLengthOfAPrimerToUse_ = nPrimersMinimumLengthOfAPrimer_;
      nPrimersMaximumLengthOfAPrimerToUse_ = nPrimersMaximumLengthOfAPrimer_;
      nPrimersMinMeltingTempToUse_ = nPrimersMinMeltingTemp_;
      nPrimersMaxMeltingTempToUse_ = nPrimersMaxMeltingTemp_;
      nPrimersWindowSizeInLookingToUse_ = nPrimersWindowSizeInLooking_;
      nPrimersMaxMatchElsewhereScoreToUse_ = nPrimersMaxMatchElsewhereScore_;
   }
   else {
      nPrimersMinimumLengthOfAPrimerToUse_ = nPrimersMinimumLengthOfAPrimerForPCR_;
      nPrimersMaximumLengthOfAPrimerToUse_ = nPrimersMaximumLengthOfAPrimerForPCR_;
      nPrimersMinMeltingTempToUse_ = nPrimersMinMeltingTempForPCR_;
      nPrimersMaxMeltingTempToUse_ = nPrimersMaxMeltingTempForPCR_;
      nPrimersWindowSizeInLookingToUse_ = nPrimersWindowSizeInLookingForPCR_;
      nPrimersMaxMatchElsewhereScoreToUse_ = nPrimersMaxMatchElsewhereScoreForPCR_;
   }
}


consedParameters :: consedParameters() {
    // just zero-out the entire space

    memset( this, 0, sizeof( consedParameters ) );
}



void consedParameters :: copyPrimerPickingParametersToSelf(
    consedParameters* pCPSource ) {

   // I wouldn't be surprised if I missed some...

   nPrimersMinimumLengthOfAPrimerToUse_ =
      pCPSource->nPrimersMinimumLengthOfAPrimerToUse_;

   nPrimersMaximumLengthOfAPrimerToUse_ =
      pCPSource->nPrimersMaximumLengthOfAPrimerToUse_;

   nPrimersMinMeltingTempToUse_ =
      pCPSource->nPrimersMinMeltingTempToUse_;

   nPrimersMaxMeltingTempToUse_ =
      pCPSource->nPrimersMaxMeltingTempToUse_;

   nPrimersWindowSizeInLookingToUse_ =
      pCPSource->nPrimersWindowSizeInLookingToUse_;

   nPrimersMaxMatchElsewhereScoreToUse_ =
      pCPSource->nPrimersMaxMatchElsewhereScoreToUse_;

   nPrimersMinMeltingTempForPCR_ =
      pCPSource->nPrimersMinMeltingTempForPCR_;

   nPrimersMaxMeltingTempForPCR_ =
      pCPSource->nPrimersMaxMeltingTempForPCR_;

   nPrimersMinMeltingTemp_ =
      pCPSource->nPrimersMinMeltingTemp_;

   nPrimersMaxMeltingTemp_ =
      pCPSource->nPrimersMaxMeltingTemp_;

   nPrimersWindowSizeInLooking_ =
      pCPSource->nPrimersWindowSizeInLooking_;

   nPrimersALittleLessThanAverageInsertSizeOfASubcloneToUse_ =
      pCPSource->nPrimersALittleLessThanAverageInsertSizeOfASubcloneToUse_;

   nPrimersTooManyVectorBasesInWalkingRead_ =
      pCPSource->nPrimersTooManyVectorBasesInWalkingRead_;

   nPrimersToleranceForDifferentBeginningLocationOfUniversalPrimerReads_ =
      pCPSource->nPrimersToleranceForDifferentBeginningLocationOfUniversalPrimerReads_;

   bPrimersScreenForVector_ =
      pCPSource->bPrimersScreenForVector_;

   dPrimersSaltConcentrationMillimolar_ =
      pCPSource->dPrimersSaltConcentrationMillimolar_;

   bPrimersPrintInfoOnRejectedTemplates_ =
      pCPSource->bPrimersPrintInfoOnRejectedTemplates_;

   nPrimersMinQuality_ =
      pCPSource->nPrimersMinQuality_;

   nPrimersMaxPrimerDimerScoreForPCR_ =
      pCPSource->nPrimersMaxPrimerDimerScoreForPCR_;

   nPrimersMaxSelfMatchScore_ =
      pCPSource->nPrimersMaxSelfMatchScore_;

   nPrimersMaxMatchElsewhereScoreForPCR_ =
      pCPSource->nPrimersMaxMatchElsewhereScoreForPCR_;

   nPrimersMaxMatchElsewhereScore_ =
      pCPSource->nPrimersMaxMatchElsewhereScore_;

   dPrimersDNAConcentrationNanomolar_ =
      pCPSource->dPrimersDNAConcentrationNanomolar_;

   nPrimersLookThisFarForForwardVectorInsertJunction_ =
      pCPSource->nPrimersLookThisFarForForwardVectorInsertJunction_;

   nPrimersLookForThisManyPCRPrimerPairsPerPairOfGroups_ =
      pCPSource->nPrimersLookForThisManyPCRPrimerPairsPerPairOfGroups_;

   nPrimersPCRPrimersGroupedIntoWindowOfThisManyBases_ =
      pCPSource->nPrimersPCRPrimersGroupedIntoWindowOfThisManyBases_;

   nPrimersWindowSizeInLookingForPCR_ =
      pCPSource->nPrimersWindowSizeInLookingForPCR_;

   nPrimersWhenChoosingATemplateMinPotentialReadLength_ =
      pCPSource->nPrimersWhenChoosingATemplateMinPotentialReadLength_;

   bPrimersChooseTemplatesByPositionInsteadOfQuality_ =
      pCPSource->bPrimersChooseTemplatesByPositionInsteadOfQuality_;

   filPrimersBadTemplatesFile_ =
      pCPSource->filPrimersBadTemplatesFile_;

   filPrimersLibrariesInfoFile_ =
      pCPSource->filPrimersLibrariesInfoFile_;

   filPrimersBadLibrariesFile_ =
      pCPSource->filPrimersBadLibrariesFile_;

   nPrimersMaxLengthOfMononucleotideRepeat_ =
      pCPSource->nPrimersMaxLengthOfMononucleotideRepeat_;

   nPrimersNumberOfTemplatesToDisplayInFront_ =
      pCPSource->nPrimersNumberOfTemplatesToDisplayInFront_;

   bPrimersCheckJustSomePCRPrimerPairsRatherThanAll_ =
      pCPSource->bPrimersCheckJustSomePCRPrimerPairsRatherThanAll_;

   nPrimersMaxPCRPrimerPairsToDisplay_ =
      pCPSource->nPrimersMaxPCRPrimerPairsToDisplay_;

   dPrimersMaxMeltingTempDifferenceForPCR_ =
      pCPSource->dPrimersMaxMeltingTempDifferenceForPCR_;

   nPrimersMaximumLengthOfAPrimerForPCR_ =
      pCPSource->nPrimersMaximumLengthOfAPrimerForPCR_;

   nPrimersMinimumLengthOfAPrimerForPCR_ =
      pCPSource->nPrimersMinimumLengthOfAPrimerForPCR_;

   nPrimersMaximumLengthOfAPrimer_ =
      pCPSource->nPrimersMaximumLengthOfAPrimer_;

   nPrimersMinimumLengthOfAPrimer_ =
      pCPSource->nPrimersMinimumLengthOfAPrimer_;

   nPrimersMinNumberOfTemplatesForPrimers_ =
      pCPSource->nPrimersMinNumberOfTemplatesForPrimers_;

   bPrimersOKToChoosePrimersInSingleSubcloneRegion_ =
      pCPSource->bPrimersOKToChoosePrimersInSingleSubcloneRegion_;

   bPrimersOKToChoosePrimersWhereHighQualityDiscrepancies_ =
      pCPSource->bPrimersOKToChoosePrimersWhereHighQualityDiscrepancies_;
   
   bPrimersOKToChoosePrimersWhereUnalignedHighQualityRegion_ =
      pCPSource->bPrimersOKToChoosePrimersWhereUnalignedHighQualityRegion_;

}




consedParameters::consedParameters( consedResources* pRes ) :
   bWarnUserAboutOverstrikingWithUppercase_( true ),
   bErrorMessageDisplayedAtStartup_( false ),
   nAutoFinishLastUsedPrimerNumber_( 0 ),
   bOKToUseGui_( true ),
   nAutoFinishNumberOfCloningSitesFound_( 0 ),
   nLastUsedExpID_( 0 ),
   nWhatIsRunning_( 0 ),
   bReadyToPickSecondPCRPrimer_( false ),
   pDefaultLibrary_( NULL ),
   bReadOnly_( false ),
   pAutoFinishFullOutput_( stdout ),
   bNeedToSetContigTemplateArrays_( true ),
   cFindRestrictionEnzymeSitesLastUsedWholeCloneOrPartOfCloneOrWholeContig_( guiFindRestrictionEnzymeSites::cWHOLE_CLONE ),
   soFindRestrictionEnzymeSitesLastUsedUserEnteredContigMap_( soEmptyString ),
   nFindRestrictionEnzymeSitesLastUsedStartUnpaddedConsPos_( -666 ),
   nFindRestrictionEnzymeSitesLastUsedEndUnpaddedConsPos_( -666 ),
   soFindRestrictionEnzymeSitesLastUsedContigAbbreviatedName_( soEmptyString ),
   bWarnUserAboutAmbiguityCodes_( true ),
   bAllowTimestampMismatch_( false ),
   bPrintInFigureOutContigOrderAndOrientation_( true ),
   bLimitNumberOfErrorsReported_( false ),
   nNumberOfStartupErrors_( 0 )
{
   //
   // fail crudely if one already exists - we may not have
   // a gui at all yet
   //
   if (bConsedParametersCreated_) {
      cerr << "Fatal program error:  consedParameters ctor called twice." << endl;
      cerr.flush();
      exit(-1);
   }

   // save pointer to yourself
   pGlobalConsedParameters_ = this;

   // remember you have been created (allow no others)
   bConsedParametersCreated_ = true;


#ifdef NO_POUND_POUND_MACROS

#define saveAConsedParameter( nameWithoutFinalUnderscore ) \
consedParameters::pGetConsedParameters()->nameWithoutFinalUnderscore ## _ \
= pRes->nameWithoutFinalUnderscore ## _

#else

#define saveAConsedParameter( nameWithoutFinalUnderscore ) \
consedParameters::pGetConsedParameters()-> ## nameWithoutFinalUnderscore ## _ \
= pRes-> ## nameWithoutFinalUnderscore ## _

#endif


// This macro expands saveAConsedParameter( nPrimersMaxSelfMatchScore )
//   into
// consedParameters::pGetConsedParameters()->nPrimersMaxSelfMatchScore_
// = pRes->nPrimersMaxSelfMatchScore_

  if ( pRes->bShowProteinTranslation_ == true ) {
     consedParameters::pGetConsedParameters()->nShowProteinTranslation_ =
        nShowProteinTranslationTopStrand;
  }
  else {
     consedParameters::pGetConsedParameters()->nShowProteinTranslation_ =
        nDontShowProteinTranslation;
  }
     
   



   saveAConsedParameter( bPrintPS );
   saveAConsedParameter( soDefaultTagType );
   saveAConsedParameter( bDefaultTagOnConsensusNotReads );
   saveAConsedParameter( dAutoFinishMinNumberOfErrorsFixedByAnExp );
   saveAConsedParameter( dAutoFinishRedundancy );
   saveAConsedParameter( nAutoFinishAverageInsertSize );
   saveAConsedParameter( nPrimersMaxInsertSizeOfASubclone );
   saveAConsedParameter( nPrimersMaxMeltingTemp );
   saveAConsedParameter( nPrimersMaxMeltingTempForPCR );
   saveAConsedParameter( bPrimersPickTemplatesForPrimers );
   saveAConsedParameter( soPrimersSubcloneFullPathnameOfFileOfSequencesForScreening );
   saveAConsedParameter( soPrimersCloneFullPathnameOfFileOfSequencesForScreening );
   saveAConsedParameter( nPrimersMinMeltingTemp );
   saveAConsedParameter( nPrimersMinMeltingTempForPCR );
   saveAConsedParameter( bSearchFunctionsUseUnalignedEndsOfReads );
   saveAConsedParameter( bSearchFunctionsUseLowQualityEndsOfReads );
   saveAConsedParameter( nInexactSearchForStringMaxPerCentMismatch );
   saveAConsedParameter( bOnlyAllowOneReadWriteConsedAtATime );
   saveAConsedParameter( bAutoFinishAllowHighQualityDiscrepanciesInTemplateIfConsistentForwardReversePair );
   saveAConsedParameter( soPrintWindowCommand );
   saveAConsedParameter( filFileOfTagTypes );
   saveAConsedParameter( bAssemblyViewShowConsistentFwdRevPairs );
   saveAConsedParameter( bAssemblyViewShowConsistentFwdRevPairDepth );
   saveAConsedParameter( bAssemblyViewShowConsistentFwdRevPairsBetweenDifferentScaffolds );
   saveAConsedParameter( bAssemblyViewShowLegsOnSquaresForConsistentFwdRevPairs );
   saveAConsedParameter( bAssemblyViewShowGapSpanningFwdRevPairs );
   saveAConsedParameter( soAssemblyViewShowWhichInconsistentFwdRevPairs );
   saveAConsedParameter( bAssemblyViewShowReadDepth );
   saveAConsedParameter( bAssemblyViewShowMultipleHighQualityDiscrepancies );
   saveAConsedParameter( bAssemblyViewShowRestrictionDigestCutSites );
   saveAConsedParameter( bAssemblyViewFilterSequenceMatchesBySize );
   saveAConsedParameter( nAssemblyViewSequenceMatchesMinSize );
   saveAConsedParameter( nAssemblyViewSequenceMatchesMaxSize );
   saveAConsedParameter( bAssemblyViewAutomaticallyStartWithConsed );
   saveAConsedParameter( soAssemblyViewDisplayTheseTagTypesOnTheseLines );
   saveAConsedParameter( bAssemblyViewShowTags );
   saveAConsedParameter( bAutoEditRecalculateHighQualitySegmentsOfReads );
   saveAConsedParameter( bAutoEditConvertCloneEndBasesToXs );
   saveAConsedParameter( bAutoEditTellPhrapNotToOverlapMultiplyDiscrepantReads );
   saveAConsedParameter( bAutoEditTagEditableLowConsensusQualityRegions );
   saveAConsedParameter( bAutoEditMakeFakeRead );
   saveAConsedParameter( soAutoEditMakeFakeReadFromRead1 );
   saveAConsedParameter( soAutoEditMakeFakeReadFromRead2 );
   saveAConsedParameter( soAutoEditMakeFakeReadName );
   saveAConsedParameter( filAutoEditMakeFakeReadFastaFilename );
   saveAConsedParameter( bAutoEditMergeAssembly );
   saveAConsedParameter( filAutoEditSecondaryAceFile );
   saveAConsedParameter( bAutoEditFixRunsInConsensus );
   saveAConsedParameter( bShowAllTracesJustShowGoodTraces );
   saveAConsedParameter( nAddAlignedSequenceQualityOfBases );
   saveAConsedParameter( bMakeLightBackgroundInAlignedReadsWindowAndTracesWindow );
   saveAConsedParameter( bPutVerticalLineAtCursor );
   saveAConsedParameter( bPutHorizontalLineAtCursor );
   saveAConsedParameter( filHighlightedReadsFile );
   saveAConsedParameter( bAutoReportPrintReadNamesInRegion );
   saveAConsedParameter( soAutoReportPrintReadNamesInRegionContig );
   saveAConsedParameter( nAutoReportPrintReadNamesInRegionLeftPos );
   saveAConsedParameter( nAutoReportPrintReadNamesInRegionRightPos );
   saveAConsedParameter( bAutoReportPrintHighlyDiscrepantRegions );
   saveAConsedParameter( bAutoReportPrintScaffolds );
   saveAConsedParameter( bNumberUnpaddedConsensusAtUserDefined );
   saveAConsedParameter( bAutoReportPrintHighQualityDiscrepancies );
   saveAConsedParameter( bAutoReportHighQualityDiscrepanciesExcludeCompressionOrG_dropoutTags );
   saveAConsedParameter( bAutoReportHighQualityDiscrepanciesExcludeMostPads );
   saveAConsedParameter( bAutoReportPrintLowConsensusQualityRegions );
   saveAConsedParameter( bAutoReportPrintSingleSubcloneRegions );
   saveAConsedParameter( bAutoReportPrintSingleStrandedRegions );
   saveAConsedParameter( bAutoReportPrintLinkingForwardReversePairs );
   saveAConsedParameter( bAutoReportPrintFilteredInconsistentForwardReversePairs );
   saveAConsedParameter( bAutoReportPrintAssemblySummary );
   saveAConsedParameter( soShowAllTracesDoNotShowTraceIfTheseTagsPresent );
   saveAConsedParameter( bNameOfFakeJoiningReadsIncludesAceFileName );
   saveAConsedParameter( nWhenUserScrollsOffWindowMillisecondsBetweenScrolling );
   saveAConsedParameter( nWhenUserScrollsOffWindowBasesToScrollEachTime );
   saveAConsedParameter( bCompareContigsUseBandedRatherThanFullSmithWaterman );
   saveAConsedParameter( nCompareContigsBandSize );
   saveAConsedParameter( nAssemblyViewShowFwdRevPairDepthsInRedIfOnlyThisMany );
   saveAConsedParameter( bAssemblyViewShowSequenceMatches );
   saveAConsedParameter( bAssemblyViewOKToShowSequenceMatchesBetweenContigs );
   saveAConsedParameter( bAssemblyViewOKToShowSequenceMatchesWithinContigs );
   saveAConsedParameter( bAssemblyViewOKToShowDirectSequenceMatches );
   saveAConsedParameter( bAssemblyViewOKToShowInvertedSequenceMatches );
   saveAConsedParameter( bAssemblyViewOnlyShowSequenceMatchesToAParticularRegion );
   saveAConsedParameter( soAssemblyViewOnlyShowSequenceMatchesToThisContig );
   saveAConsedParameter( nAssemblyViewOnlyShowSequenceMatchesToThisRegionLeft );
   saveAConsedParameter( nAssemblyViewOnlyShowSequenceMatchesToThisRegionRight );
   saveAConsedParameter( bAssemblyViewOnlyShowSequenceMatchesToEndsOfContigs );
   saveAConsedParameter( nAssemblyViewOnlyShowSequenceMatchesToEndsOfContigsThisFar );
   saveAConsedParameter( soDefaultReadPrefix );
   saveAConsedParameter( filReadPrefixesFile );
   saveAConsedParameter( nMaxCharsDisplayedForReadPrefix );
   saveAConsedParameter( nAutoFinishDoNotDoPCRIfThisManyAvailableGapSpanningTemplates );
   saveAConsedParameter( nAutoFinishDoNotDoUnorientedPCRIfThisManyOrMoreUnorientedPCRReactions );
   saveAConsedParameter( nAutoFinishDoNotDoOrientedPCRIfGapSizeLargerThanThis );
   saveAConsedParameter( bAutoFinishDoNotDoPCRIfEndIsExtendedByReads );
   saveAConsedParameter( nAutoFinishMaxAcceptableErrorsPerMegabase );
   saveAConsedParameter( nAutoFinishIfNotEnoughFwdRevPairsUseThisPerCentOfInsertSize );
   saveAConsedParameter( nPrimersNumberOfBasesToBackUpToStartLooking );
   saveAConsedParameter( nPrimersMakePCRPrimersThisManyBasesBackFromEndOfHighQualitySegment );
   saveAConsedParameter( bPrimersOKToChoosePrimersInSingleSubcloneRegion );
   saveAConsedParameter( bPrimersOKToChoosePrimersWhereHighQualityDiscrepancies );
   saveAConsedParameter( bPrimersOKToChoosePrimersWhereUnalignedHighQualityRegion );
   saveAConsedParameter( bAutoFinishCallReversesToFlankGaps );
   saveAConsedParameter( bAutoFinishAllowWholeCloneReads );
   saveAConsedParameter( bAutoFinishAllowCustomPrimerSubcloneReads );
   saveAConsedParameter( bAutoFinishAllowResequencingReads );
   saveAConsedParameter( bAutoFinishAllowResequencingReadsOnlyForRunsAndStops );
   saveAConsedParameter( bAutoFinishAllowDeNovoUniversalPrimerSubcloneReads );
   saveAConsedParameter( bAutoFinishAllowMinilibraries );
   saveAConsedParameter( bAutoFinishAllowPCR );
   saveAConsedParameter( bAutoFinishAllowUnorientedPCRReactions );
   saveAConsedParameter( bAutoFinishAllowResequencingAUniversalPrimerAutofinishRead );
   saveAConsedParameter( bAutoFinishAlwaysCloseGapsUsingMinilibraries );
   saveAConsedParameter( nAutoFinishMaximumFinishingReadLength );
   saveAConsedParameter( nAutoFinishSuggestMinilibraryIfGapThisManyBasesOrLarger );
   saveAConsedParameter( bAutoFinishSuggestSpecialChemistryForRunsAndStops );
   saveAConsedParameter( nAutoFinishSuggestThisManyMinilibrariesPerGap );
   saveAConsedParameter( nPrimersWindowSizeInLooking );
   saveAConsedParameter( bPrimersAssumeTemplatesAreDoubleStrandedUnlessSpecified );
   saveAConsedParameter( nAlignedReadsWindowInitialCharsWide );
   saveAConsedParameter( nAlignedReadsWindowInitialCharsHigh );
   saveAConsedParameter( nAlignedReadsWindowMaxCharsForReadNames );
   saveAConsedParameter( bAlignedReadsWindowAutomaticallyExpandRoomForReadNames );
   saveAConsedParameter( bAutoFinishAllowResequencingReadsToExtendContigs );
   saveAConsedParameter( nAutoFinishCallHowManyReversesToFlankGaps );
   saveAConsedParameter( bAutoFinishCloseGaps );
   saveAConsedParameter( bAutoFinishContinueEvenThoughReadInfoDoesNotMakeSense );
   saveAConsedParameter( dAutoFinishCostOfResequencingUniversalPrimerSubcloneReaction );
   saveAConsedParameter( dAutoFinishCostOfCustomPrimerSubcloneReaction );
   saveAConsedParameter( dAutoFinishCostOfCustomPrimerCloneReaction );
   saveAConsedParameter( dAutoFinishCostOfDeNovoUniversalPrimerSubcloneReaction );
   saveAConsedParameter( dAutoFinishCostOfMinilibrary );
   saveAConsedParameter( bAutoFinishCoverSingleSubcloneRegions );
   saveAConsedParameter( bAutoFinishCoverLowConsensusQualityRegions );
   saveAConsedParameter( filAutoFinishDebugUniversalPrimerReadsFile );
   saveAConsedParameter( filAutoFinishDebugCustomPrimerReadsFile );
   saveAConsedParameter( nAutoFinishDoNotAllowSubcloneCustomPrimerReadsCloserThanThisManyBases );
   saveAConsedParameter( nAutoFinishDoNotAllowWholeCloneCustomPrimerReadsCloserThanThisManyBases );
   saveAConsedParameter( soAutoFinishDoNotFinishWhereTheseTagsAre );
   saveAConsedParameter( soAutoFinishDoNotExtendContigsWhereTheseTagsAre );
   saveAConsedParameter( nAutoFinishDoNotExtendContigsIfTagsAreThisCloseToContigEnd );
   saveAConsedParameter( filDumpContigOrderAndOrientationInfoToThisFile );
   saveAConsedParameter( bAutoFinishDumpTemplates );
   saveAConsedParameter( nAutoFinishExcludeContigIfOnlyThisManyReadsOrLess );
   saveAConsedParameter( dAutoFinishExcludeContigIfDepthOfCoverageGreaterThanThis );
   saveAConsedParameter( nAutoFinishExcludeContigIfThisManyBasesOrLess );
   saveAConsedParameter( nAutoFinishHowManyTemplatesYouIntendToUseForCustomPrimerSubcloneReactions );
   saveAConsedParameter( nPrimersMinNumberOfTemplatesForPrimers );
   saveAConsedParameter( nAutoFinishMinBaseOverlapBetweenAReadAndHighQualitySegmentOfConsensus );
   saveAConsedParameter( nAutoFinishNumberOfVectorBasesAtBeginningOfAUniveralPrimerRead );
   saveAConsedParameter( bAutoFinishCDNANotGenomic );
   saveAConsedParameter( nAutoFinishConfidenceThatReadWillCoverSingleSubcloneRegion );
   saveAConsedParameter( bAutoFinishPrintForwardOrReverseStrandWhenPrintingSubcloneTemplatesForCustomPrimerReads );
   saveAConsedParameter( bAutoFinishPrintMinilibrariesSummaryFile );
   saveAConsedParameter( bAutoFinishNearGapsSuggestEachMissingReadOfReadPairs );
   saveAConsedParameter( nAutoFinishDoNotIgnoreLCQIfThisManyBasesFromEndOfContigForLCQTagger );
   saveAConsedParameter( bCheckIfTooManyWalks );
   saveAConsedParameter( nNumberOfColumnsBeforeReadNameInAlignedReadsWindow );
   saveAConsedParameter( nCompareContigsAlignsThisManyBasesMax );
   saveAConsedParameter( soCompressedChromatExtension );
   saveAConsedParameter( bDimLowQualityEndsOfReads );
   saveAConsedParameter( bDimUnalignedEndsOfReads );
   saveAConsedParameter( bFakeReadsSpecifiedByFilenameExtension );
   saveAConsedParameter( filFullPathnameOfAddReads2ConsedScript );
   saveAConsedParameter( filFullPathnameOfFixContigEndScript );
   saveAConsedParameter( bFixContigEndsCleanUpTemporaryFiles );
   saveAConsedParameter( nFixContigEndsMinSmithWatermanScoreToMakeJoin );
   saveAConsedParameter( nFixContigEndsMinNumberOfReadsInContig );
   saveAConsedParameter( filFullPathnameOfCrossMatch );
   saveAConsedParameter( filFullPathnameOfPhred );
   saveAConsedParameter( filFullPathnameOfMiniassemblyScript );
   saveAConsedParameter( soGunzipFullPath );
   saveAConsedParameter( filFullPathnameOfFilter454ReadsScript );
   saveAConsedParameter( filFilter454ReadsAgainstThis );
   saveAConsedParameter( fil454LinkerSequences );
   saveAConsedParameter( bHideSomeTagTypesAtStartup );
   saveAConsedParameter( nMaximumNumberOfTracesShown );
   saveAConsedParameter( bNavigateAutomaticTracePopup );
   saveAConsedParameter( bNavigateAutomaticAllTracesPopup );
   saveAConsedParameter( nPrimersMinimumLengthOfAPrimer );
   saveAConsedParameter( nPrimersMaximumLengthOfAPrimer );
   saveAConsedParameter( nPrimersMinimumLengthOfAPrimerForPCR );
   saveAConsedParameter( nPrimersMaximumLengthOfAPrimerForPCR );
   saveAConsedParameter( dPrimersMaxMeltingTempDifferenceForPCR );
   saveAConsedParameter( nPrimersMaxPCRPrimerPairsToDisplay );
   saveAConsedParameter( bPrimersCheckJustSomePCRPrimerPairsRatherThanAll );
   saveAConsedParameter( nPrimersNumberOfTemplatesToDisplayInFront );
   saveAConsedParameter( nPrimersMaxLengthOfMononucleotideRepeat );
   saveAConsedParameter( filPrimersBadLibrariesFile );
   saveAConsedParameter( filPrimersLibrariesInfoFile );
   saveAConsedParameter( filPrimersBadTemplatesFile );
   saveAConsedParameter( bPrimersChooseTemplatesByPositionInsteadOfQuality );
   saveAConsedParameter( nPrimersWhenChoosingATemplateMinPotentialReadLength );
   saveAConsedParameter( nPrimersWindowSizeInLookingForPCR );
   saveAConsedParameter( nQualityThresholdForFindingHighQualityDiscrepancies );
   saveAConsedParameter( nQualityThresholdForNavigateByDepthOfCoverage );
   saveAConsedParameter( bNavigateByHighDepthOfCoverageNotLow );
   saveAConsedParameter( nMinDepthForNavigateByDepthOfCoverage );
   saveAConsedParameter( filDefaultVectorPathnameForRestrictionFragments );
   saveAConsedParameter( filFileOfAdditionalRestrictionEnzymes );
   saveAConsedParameter( soCommonRestrictionEnzymes );
   saveAConsedParameter( soDefaultSelectedRestrictionEnzymes );
   saveAConsedParameter( filRestrictionEnzymesActualFragmentsFile );
   saveAConsedParameter( nRestrictionDigestInitialWindowSizeInTextRows );
   saveAConsedParameter( nRestrictionDigestDoNoShowAreaOfFragmentsOverThisSize );
   saveAConsedParameter( bShowReadsAlphabetically );
   saveAConsedParameter( bShowReadsInAlignedReadsWindowOrderedByFile );
   saveAConsedParameter( filShowReadsInAlignedReadsWindowOrderedByThisFile );
   saveAConsedParameter( soShowReadsAtCursorSortedHow );
   saveAConsedParameter( bShowABIBasesInTraceWindow );
   saveAConsedParameter( nTracesWindowInitialPixelHeight );
   saveAConsedParameter( nAssemblyViewWindowInitialPixelHeight );
   saveAConsedParameter( filAssemblyViewFileOfTemplatesToNotShow );
   saveAConsedParameter( nAssemblyViewCrossMatchMinmatch );
   saveAConsedParameter( nAssemblyViewCrossMatchMinscore );
   saveAConsedParameter( filAssemblyViewFindSequenceMatchesForConsedScript );
   saveAConsedParameter( nAssemblyViewCrossmatchMinmatch );
   saveAConsedParameter( nAssemblyViewCrossmatchMinscore );
   saveAConsedParameter( nAssemblyViewSequenceMatchesMinimumSimilarity );
   saveAConsedParameter( nTracesWindowInitialPixelWidth );
   saveAConsedParameter( nAssemblyViewWindowInitialPixelWidth );
   saveAConsedParameter( bAutomaticallyScaleTraces );
   saveAConsedParameter( dAutomaticallyScaleTracesSamplePeakHeightFractionOfWindowHeight );
   saveAConsedParameter( nAutomaticallyScaleTracesSamplePeakPercentile );
   saveAConsedParameter( nVerticalTraceMagnification );
   saveAConsedParameter( soUserDefinedKeys );
   saveAConsedParameter( soProgramsForUserDefinedKeys );
   saveAConsedParameter( soArgumentsToPassToUserDefinedPrograms );
   saveAConsedParameter( soTagsToApplyWithUserDefinedKeys );
   saveAConsedParameter( bSnpGenomeUseInsertionPolymorphisms );
   saveAConsedParameter( soListOfTagTypesToHide );
   saveAConsedParameter( soListOfOptionalWordsToSaveInListOfReadNames );
   saveAConsedParameter( bExtendConsensusWithHighQuality );
   saveAConsedParameter( bFastStartup );
   saveAConsedParameter( filFastStartupFile );
   saveAConsedParameter( soAlwaysRunProgramToGetChromats );
   saveAConsedParameter( filProgramToRunToGetChromats );
   saveAConsedParameter( filProgramToRunToGetChromatsOf454Reads );
   saveAConsedParameter( bCreateFakeChromatsForSolexaReads );
   saveAConsedParameter( bAutoFinishUseLongModelReadRatherThanShort );
   saveAConsedParameter( nAskAgainIfWantToQuitConsedIfThisManyReads );
   saveAConsedParameter( soPrintWindowInstructions );
   saveAConsedParameter( bAllowMultipleSearchForStringWindows );
   saveAConsedParameter( nAutoPCRAmplifyFalseProductsOKIfLargerThanThis );
   saveAConsedParameter( bAutoPCRAmplifyMakePrimerOutOfFirstRegion );
   saveAConsedParameter( nAutoPCRAmplifyMaybeRejectPrimerIfThisCloseToDesiredProduct );
   saveAConsedParameter( bAddNewReadsRecalculateConsensusQuality );
   saveAConsedParameter( soAddNewReadsPutReadIntoItsOwnContig );
   saveAConsedParameter( bAddNewReadsCheckThatCrossMatchRunCorrectly );
   saveAConsedParameter( nAssemblyViewNumberOfRowsOfTags );
   saveAConsedParameter( bWarnUserWhenTryingToEditAllReads );
   saveAConsedParameter( filMaybeXKEYSYMDBPath );
   saveAConsedParameter( filMaybeXKEYSYMDBPath2 );
   saveAConsedParameter( nAmountToMoveWithBigLeftAndRightArrows );
   saveAConsedParameter( nNavigateByHighlyDiscrepantPositionsMinDiscrepantReads );
   saveAConsedParameter( nNavigateByHighlyDiscrepantPositionsMaxDepthOfCoverage );
   saveAConsedParameter( nNavigateByHighlyDiscrepantPositionsIgnoreBasesBelowThisQuality );
   saveAConsedParameter( bNavigateByHighlyDiscrepantPositionsJustListIndels );
   saveAConsedParameter( bNavigateByHighlyDiscrepantPositionsIgnoreOtherReadsStartingAtSameLocation );
   saveAConsedParameter( bNavigateByHighlyDiscrepantPositionsIgnoreIfListedBasesInConsensus );
   saveAConsedParameter( soNavigateByHighlyDiscrepantPositionsIgnoreIfTheseBasesInConsensus );
   saveAConsedParameter( filPhdBallDirectory );
   saveAConsedParameter( filNewAceFileFOF );
   saveAConsedParameter( nNavigateByHighOrLowDepthCoalesceRegionsIfThisClose );
   saveAConsedParameter( bRemoveReadsDeleteNotJustPutInOwnContig );
   saveAConsedParameter( soPaired454LeftReadExtension );
   saveAConsedParameter( soPaired454RightReadExtension );
   saveAConsedParameter( filSnpGenome1MSnps );
   saveAConsedParameter( bDiffChromosomesExcludeDeletions );
   saveAConsedParameter( bSnpGenomeFilterByWeight );
   saveAConsedParameter( nWantReadsUpToThisFarFromSnps );
   saveAConsedParameter( soPhaster2PhdBallSaveWhichMate );
   saveAConsedParameter( bPhaster2PhdBallSaveInPhasterFormat );
   saveAConsedParameter( bPhaster2PhdBallCalculateNewLocationsFile );
   saveAConsedParameter( bPhdBall2FastaIgnoreLowQualityReads );
   saveAConsedParameter( nPhdBall2FastaLowestAverageQuality );
   saveAConsedParameter( filNextPhredPipelineControlFile );
   saveAConsedParameter( filNextPhredPipelineTiffPerlScript );
   saveAConsedParameter( filNextPhredPipelinePhasterPerlScript );
   saveAConsedParameter( soNextPhredPipelineVersion );
   saveAConsedParameter( soNextPhredPipelineMainDirectory );
   saveAConsedParameter( nMaxNumberOfReadsPerPhdBall );
   saveAConsedParameter( filUserWantsToSaveToThisAceFile );
   saveAConsedParameter( bAutoFinishEmulate9_66Behavior );
   saveAConsedParameter( nPrimersPCRPrimersGroupedIntoWindowOfThisManyBases );
   saveAConsedParameter( nPrimersLookForThisManyPCRPrimerPairsPerPairOfGroups );
   saveAConsedParameter( dAutoFinishStandardDeviationsFromMeanFromGapToLookForTemplatesForSuggestingEachMissingReadOfReadPairs );
   saveAConsedParameter( bAutoFinishCheckThatReadsFromTheSameTemplateAreConsistent );
   saveAConsedParameter( bAutoFinishDoNotAllowSubcloneCustomPrimerReadsCloseTogether );
   saveAConsedParameter( bAutoFinishDoNotAllowWholeCloneCustomPrimerReadsCloseTogether );
   saveAConsedParameter( dAutoFinishMinilibrariesPreferTemplateIfSizeThisManyStdDevsFromMean );
   saveAConsedParameter( nAutoFinishMinNumberOfForwardReversePairsInLibraryToCalculateAverageInsertSize );
   saveAConsedParameter( dAutoFinishIfEnoughFwdRevPairsUseThisManyStdDevBelowMeanForInsertSize );
   saveAConsedParameter( nAutoFinishNewCustomPrimerReadThisFarFromOldCustomPrimerRead );
   saveAConsedParameter( nAutoFinishMinNumberOfSingleSubcloneBasesFixedByAnExp );
   saveAConsedParameter( nAutoFinishNumberOfBasesBetweenContigsAssumed );
   saveAConsedParameter( nAutoFinishPotentialHighQualityPartOfReadStart );
   saveAConsedParameter( nAutoFinishPotentialHighQualityPartOfReadEnd );
   saveAConsedParameter( bAutoFinishPrintCustomNavigationFileForChosenReads );
   saveAConsedParameter( nAutoFinishReversesForFlankingGapsTemplateMustProtrudeFromContigThisMuch );
   saveAConsedParameter( bAutoFinishTagOligosWhenDoExperiments );
   saveAConsedParameter( bCountPads );
   saveAConsedParameter( nDebugging );
   saveAConsedParameter( nDebugging2 );
   saveAConsedParameter( nDebugging3 );
   saveAConsedParameter( soDebuggingString );
   saveAConsedParameter( nIgnoreHighQualityDiscrepanciesThisManyBasesFromEndOfAlignedRegion );
   saveAConsedParameter( nIgnoreUnalignedHighQualitySegmentsShorterThanThis );
   saveAConsedParameter( nPrimersLookThisFarForForwardVectorInsertJunction );
   saveAConsedParameter( dPrimersDNAConcentrationNanomolar );
   saveAConsedParameter( nPrimersMaxMatchElsewhereScore );
   saveAConsedParameter( nPrimersMaxMatchElsewhereScoreForPCR );
   saveAConsedParameter( nPrimersMaxSelfMatchScore );
   saveAConsedParameter( nPrimersMaxPrimerDimerScoreForPCR );
   saveAConsedParameter( nPrimersMinQuality );
   saveAConsedParameter( bPrimersPrintInfoOnRejectedTemplates );
   saveAConsedParameter( dPrimersSaltConcentrationMillimolar );
   saveAConsedParameter( bPrimersScreenForVector );
   saveAConsedParameter( nPrimersToleranceForDifferentBeginningLocationOfUniversalPrimerReads );
   saveAConsedParameter( nPrimersTooManyVectorBasesInWalkingRead );
   saveAConsedParameter( nQualityThresholdForLowConsensusQuality );
   saveAConsedParameter( nTagColorPerCentOfBase );
   saveAConsedParameter( soUncompressedChromatDirectory );
   saveAConsedParameter( fil454sff2scfDirectory );
   saveAConsedParameter( nWhenMakingFakeReadToJoinContigsAddThisManyBasesOnEitherSideOfAlignedRegion );
   saveAConsedParameter( nWriteThisAceFormat );
   saveAConsedParameter( bDumpCoreIfBoundsError );
   saveAConsedParameter( nAutoFinishMinSmithWatermanScoreOfARun );
   saveAConsedParameter( dAutoFinishDoNotComparePCRPrimersMoreThanThisManyTimes );
   saveAConsedParameter( nRestrictionDigestMaximumBasesToCompareToVector );
   saveAConsedParameter( dRestrictionDigestZoomFactor );
   saveAConsedParameter( dRestrictionDigestZoomFactorForNavigate );
   saveAConsedParameter( nRestrictionDigestToleranceInPositionUnits );
   saveAConsedParameter( nAutoPCRAmplifyTooManySeriousFalseMatches );
   saveAConsedParameter( dAssemblyViewZoomFactor );
   saveAConsedParameter( nAssemblyViewFilterInconsistentFwdRevPairsIfThisClose );
   saveAConsedParameter( dAssemblyViewGridCellWidthInPixels );
   saveAConsedParameter( nAssemblyViewCursorSensitivityInPixels );
   saveAConsedParameter( nAssemblyViewReadDepthQuality );
   saveAConsedParameter( nShowAllTracesMaxNumberOfTracesToShowAtOnce );
   saveAConsedParameter( nAllowFwdRevPairScaffoldsToBeMergedIfThisManyBasesIntersectionOrLess );
   saveAConsedParameter( bJustForPrimateProject );
   saveAConsedParameter( filSolexaFilesAreAssumedToBeHere );
   saveAConsedParameter( nSolexaAlignmentFilesPerInsertingPadsCycle );
   saveAConsedParameter( nSolexaAlignmentsPerAlignmentFile );
   saveAConsedParameter( bSolexaFastqFilesArePhredQualityNotSolexaQuality );
   saveAConsedParameter( soSolexa64FastqOrSanger33Fastq );
   saveAConsedParameter( nMaximumReadsInReadList );
   saveAConsedParameter( nMaxLengthOfReadsInapLocatedFragment2 );
   saveAConsedParameter( nMaximumStartupErrorsToReport );
   saveAConsedParameter( n454LinkerAlignmentMatchScore );
   saveAConsedParameter( n454LinkerAlignmentMismatchScore );
   saveAConsedParameter( n454LinkerAlignmentIndelScore );
   saveAConsedParameter( bFilter454ReadsDeleteCrossMatchOutput );
   saveAConsedParameter( nAutoReportAllNeededSpeciesCode );
   saveAConsedParameter( bAutoReportUseCommasInBigNumbers );
   saveAConsedParameter( bAutoReportPrintToCompareToReich );
   saveAConsedParameter( bAutoReportOnlyAllowSitesThatAreBetweenAcceptableSites );
   saveAConsedParameter( bAutoReportDeaminationMutationsDeterminedByMoreAccurateMethod );
   saveAConsedParameter( bAutoReportChooseTreesUsingBadData );
   saveAConsedParameter( bAutoReportChooseTreesByCountingDeaminationMutations );
   saveAConsedParameter( bAutoReportChooseTreesUsingKimura );
   saveAConsedParameter( bAutoReportPrintCrudeChimpHumanMutations );
   saveAConsedParameter( bAutoReportPrintPositionsForGraham );
   saveAConsedParameter( bAutoReportPrintAncestralCpGs );
   saveAConsedParameter( bAutoReportPrintCpGMutations );
   saveAConsedParameter( bAutoReportPrintMutationsWithContext );
   saveAConsedParameter( bAutoReportCountAllMutationsML );
   saveAConsedParameter( bAutoReportCountAllMutations );
   saveAConsedParameter( bAutoReportIgnoreMultipleTrees );
   saveAConsedParameter( bAutoReportCountAcceptableColumnsWithNoneOnLeft );
   saveAConsedParameter( bAutoReportPrintFlankedColumns4 );
   saveAConsedParameter( bAutoReportUseAnnotationFormat );
   saveAConsedParameter( bAutoReportPrintFlankedColumns3 );
   saveAConsedParameter( bAutoReportPrintFlankedColumns2 );
   saveAConsedParameter( bAutoReportPrintFlankedColumns );
   saveAConsedParameter( bAutoReportHighQualitySegmentData );
   saveAConsedParameter( bAutoReportGoodReadsBug );
   saveAConsedParameter( bAutoReportDiscrepancyRateInFlankedRegions );
   saveAConsedParameter( bAutoReportDiscrepancyRateInFlankedRegions2 );
   saveAConsedParameter( bAutoReportDiscrepancyRateInFlankedRegions4 );
   saveAConsedParameter( bAutoReportDiscrepancyRateInFlankedRegions5 );
   saveAConsedParameter( bAutoReportSingleSignalOrQuality );
   saveAConsedParameter( bAutoReportLowQualityBasesInHQS );
   saveAConsedParameter( bAutoReportCompareHQSWithLQS );
   saveAConsedParameter( bAutoReportCountColumnsForGroupsOfSpecies );
   saveAConsedParameter( bAutoReportSingleSignalInfo );
   saveAConsedParameter( bAutoReportSingleSignalInfo2 );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrands );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrandsNoHuman );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrands2 );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrands3 );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrands4 );
   saveAConsedParameter( nAutoReportTopStrandPinnedPosition );
   saveAConsedParameter( nAutoReportBottomStrandPinnedPosition );
   saveAConsedParameter( bAutoReportCompareTopAndBottomStrandsWithHuman );
   saveAConsedParameter( bAutoReportPrintLengthsOfAlignedSegmentsOfReads );
   saveAConsedParameter( bAutoReportPrintLengthsOfUnalignedHighQualitySegmentsOfReads );
   saveAConsedParameter( bAutoReportPrintIfReadsAreCorrectlyAligned );
   saveAConsedParameter( bAutoReportCalculateErrorProbabilitiesByComparingPTroPPan );
   saveAConsedParameter( bAutoReportPrintAgreeDisagreeBetweenPairsOfSpecies );
   saveAConsedParameter( bAutoReportPrintAgreeDisagreeBetweenPairsOfSpecies2 );
   saveAConsedParameter( bAutoReportFilterSingleSignal );
   saveAConsedParameter( filAutoReportGoodHitReads );
   saveAConsedParameter( nAutoReportQualityWindowLow );
   saveAConsedParameter( nAutoReportQualityWindowHigh );
   saveAConsedParameter( bAutoReportPrintNumberOfIsolatedPadsForEachSpecies );
   saveAConsedParameter( bAutoReportPrintNumberOfIsolatedPads );
   saveAConsedParameter( soAutoReportIsolatedPadsOfReadsWithThisPattern );
   saveAConsedParameter( nAutoReportMinNumberOfPerfectlyAlignedBasesBeforeDiscrepancy );
   saveAConsedParameter( nAutoReportMaxSizeOfDiscrepantRegion );
   saveAConsedParameter( nAutoReportSizeOfDiscrepantRegion );
   saveAConsedParameter( bAutoReportPrintMinimumQualityHistogram );
   saveAConsedParameter( bAutoReportPrintDiscrepantRegions );
   saveAConsedParameter( bAutoReportPrintBasesInDiscrepantRegions );
   saveAConsedParameter( soAutoReportPrintDiscrepantRegionsButIgnoreReadsContainingThis );
   saveAConsedParameter( soAutoReportBackboneReadHasThisStringInIt );
   saveAConsedParameter( bAutoReportPrintDiscrepantRegionsButOnlyIfAboveQualityThreshold );
   saveAConsedParameter( bAutoReportPrintSpeciesAlignment );
   saveAConsedParameter( bAutoReportPrintReadAlignment );
   saveAConsedParameter( filAutoReportPrintTheseReads );
   saveAConsedParameter( bAutoReportPrintReadPositions );
   saveAConsedParameter( bAutoReportPrintChosenReadName );
   saveAConsedParameter( nAutoReportNumbersOfCharactersOfChosenReadNameToBePrinted );
   saveAConsedParameter( soAutoReportPrefix );
   saveAConsedParameter( bAutoReportUseOldCriteriaForDeletingColumnsOfPads );
   saveAConsedParameter( bAutoReportDeleteColumnsOfPadsBeforeAdjustingReadQualityValues );
   saveAConsedParameter( bAutoReportFlankingBasesMustBeSingleSignal );
   saveAConsedParameter( nAutoReportMinimumQualityOfFlankingBases );
   saveAConsedParameter( bAutoReportFlankingBasesMustBeInHighQualitySegment );
   saveAConsedParameter( soAutoReportSpecies );


   postProcessing();


}  // consedParameters()



void consedParameters :: processDoNotFinishTagTypes() {
   
   aAutoFinishTagsToNotFinish_.clear();

   RWCTokenizer tokTagTypes( soAutoFinishDoNotFinishWhereTheseTagsAre_ );

   RWCString soDoNotFinishTag;
   while( !( soDoNotFinishTag = tokTagTypes() ).isNull() ) {

      if ( !tagTypes::pGetTagTypes()->bIsAValidTagType( soDoNotFinishTag ) ) {
         ostrstream ost; 
         ost << "You specified consed.autoFinishDoNotFinishWhereTheseTagsAre: " <<
            soAutoFinishDoNotFinishWhereTheseTagsAre_ << " but \"" << soDoNotFinishTag << "\" is not a recognized tag type." << ends;
         InputDataError ide(ost.str());
         throw ide;
      }
      aAutoFinishTagsToNotFinish_.insert( soDoNotFinishTag );
   }
}


void consedParameters :: processDoNotExtendTagTypes() {

    aAutoFinishTagsToNotExtend_.clear();
    
    RWCTokenizer tokTagTypes(
soAutoFinishDoNotExtendContigsWhereTheseTagsAre_ );

    RWCString soDoNotExtendTag;
    while( !( soDoNotExtendTag = tokTagTypes() ).isNull() ) {
    
        if ( !tagTypes::pGetTagTypes()->bIsAValidTagType( soDoNotExtendTag ) ) {
            RWCString soError = "You specified consed.autoFinishDoNotExtendContigsWhereTheseTagsAre: ";
            soError += soAutoFinishDoNotExtendContigsWhereTheseTagsAre_;
            soError += " but \"";
            soError += soDoNotExtendTag;
            soError += "\" is not a recognized tag type.";
            THROW_ERROR( soError );
        }
        aAutoFinishTagsToNotExtend_.insert( soDoNotExtendTag );
    }
}



// this is useful for setting parameters that depend on other parameters
void consedParameters :: postProcessing() {

//    dAutoFinishMinNumberOfErrorsFixedByAnExpToUse_ =
//       dAutoFinishMinNumberOfErrorsFixedByAnExp_ /
//       (double) dAutoFinishRedundancy_;

   dAutoFinishMinNumberOfErrorsFixedByAnExpToUse_ =
      dAutoFinishMinNumberOfErrorsFixedByAnExp_;


    RWCTokenizer tok( soUserDefinedKeys_ );
    RWCString soWord;
    while( !( soWord = tok() ).isNull() ) {
       int nKey;
       if ( !bIsNumericMaybeWithWhitespace( soWord, nKey ) ) {
          PANIC_OST( ost ) << "resource consed.userDefinedKeys should contain just integers which are the values of keysyms of keys defined in /usr/include/X11/keysymdefs.h, but instead it contains " << soUserDefinedKeys_ << ends;
          InputDataError ide( ost.str() );
          throw ide;
       }
       aUserDefinedKeys_.insert( nKey );
    }

    RWCTokenizer tok2( soProgramsForUserDefinedKeys_ );
    while( !( soWord = tok2() ).isNull() ) {
       aProgramsForUserDefinedKeys_.insert( soWord );
    }

    RWCTokenizer tok3( soArgumentsToPassToUserDefinedPrograms_ );
    while( !( soWord = tok3() ).isNull() ) {
       aArgumentsToPassToUserDefinedPrograms_.insert( soWord );
    }


    RWCTokenizer tok4( soTagsToApplyWithUserDefinedKeys_ );
    while( !( soWord = tok4() ).isNull() ) {
       aTagsToApplyWithUserDefinedKeys_.insert( soWord );
    }


    if ( ! ( 
             aUserDefinedKeys_.length() ==
             aProgramsForUserDefinedKeys_.length() &&
             
             aProgramsForUserDefinedKeys_.length() ==
             aArgumentsToPassToUserDefinedPrograms_.length() &&

             aArgumentsToPassToUserDefinedPrograms_.length() ==
             aTagsToApplyWithUserDefinedKeys_.length() 
             ) ) {

       PANIC_OST( ost ) << "resource consed.userDefinedKeys has # of keys: " 
                        << aUserDefinedKeys_.length() 
                        << " with value " 
                        << soUserDefinedKeys_ 
                        << " resource consed.programsForUserDefinedKeys has # of entries: " 
                        << aProgramsForUserDefinedKeys_.length() 
                        << " with value " << soProgramsForUserDefinedKeys_ 
                        << " resource consed.argumentsToPassToUserDefinedPrograms " 
                        << " has # of entries: " 
                        << aArgumentsToPassToUserDefinedPrograms_.length()
                        << " with value " << soArgumentsToPassToUserDefinedPrograms_
                        << " but these should all have the same number of entries" 
                        << ends;
       InputDataError ide( ost.str() );
       throw ide;
    }


    readFileToOrderReadsInAlignedReadsWindow();



    // parse:
    // pCP->soAutoReportPrintDiscrepantRegionsButIgnoreReadsContainingThis_
    // to load 
    // pCP->aAutoReportPatternsOfReadsToIgnore_ 

    RWCTokenizer tokReadsToIgnore( soAutoReportPrintDiscrepantRegionsButIgnoreReadsContainingThis_ );

    RWCString soReadPatternToIgnore;
    while( !( soReadPatternToIgnore = tokReadsToIgnore() ).isNull() ) {
       aAutoReportPatternsOfReadsToIgnore_.insert( soReadPatternToIgnore );
    }



    if ( soSolexa64FastqOrSanger33Fastq_ != "auto" &&
         soSolexa64FastqOrSanger33Fastq_ != "solexa64" &&
         soSolexa64FastqOrSanger33Fastq_ != "sanger33" ) {

       RWCString soError = "consed.solexa64FastqOrSanger33Fastq: should be one of auto, solexa64, or sanger33 but is " +
          soSolexa64FastqOrSanger33Fastq_;

       THROW_ERROR( soError );
    }

}


void consedParameters :: postProcessingAfterTagTypes() {


    // add resource soAssemblyViewDisplayTheseTagTypesOnTheseLines_ 
    // into pCP->aAssemblyViewDisplayTheseTagTypesOnTheseLines_ and sort it so ready
    // for binary search.

#define ADD_ASSEMBLY_VIEW_LINE_TO_ERROR_MESSAGE \
          soError += " in line: \nconsed.assemblyViewDisplayTheseTagTypesOnTheseLines: "; \
          soError += soAssemblyViewDisplayTheseTagTypesOnTheseLines_;



    RWCTokenizer tokAssemblyViewDisplayTheseTagTypesOnTheseLines( 
         soAssemblyViewDisplayTheseTagTypesOnTheseLines_ );

    RWCString soTagType;
    while( !( soTagType = 
          tokAssemblyViewDisplayTheseTagTypesOnTheseLines() ).isNull() ) {
       // is this really a tag type, or did the user make a typo?

       if ( ! tagTypes::pGetTagTypes()->bIsAValidTagType( soTagType ) ) {
          RWCString soError = "Warning: ";
          soError += soTagType;
          soError += " is not a valid tag type ";
          ADD_ASSEMBLY_VIEW_LINE_TO_ERROR_MESSAGE;

          // I think I will not make this error fatal.  The users
          // can deal with it later (or not at all).

          cerr << soError << endl;
          break;
       }

       RWCString soLine = tokAssemblyViewDisplayTheseTagTypesOnTheseLines();
       if ( soLine.isNull() ) {
          RWCString soError = "Warning: There must be a pair of tagType and line number but ";
          soError += soTagType;
          soError += " does not have an associated line number ";
          ADD_ASSEMBLY_VIEW_LINE_TO_ERROR_MESSAGE;
          cerr << soError << endl;
          break;
       }
           
       int nLine;
       if ( !bIsNumericMaybeWithWhitespace( soLine, nLine ) ) {
          RWCString soError = "Warning:  ";
          soError += soLine;
          soError += " is not numeric but should be ";
          ADD_ASSEMBLY_VIEW_LINE_TO_ERROR_MESSAGE;
          cerr << soError << endl;
          break;
       }

       if ( nLine < 0 || nLine > nAssemblyViewDisplayTagMaxLineIndex ) {
          RWCString soError = "Warning: ";
          soError += soLine;
          soError += " is out of bounds.  Should be between ";
          soError += RWCString( (long) 0 );
          soError += " and ";
          soError += RWCString( (long) nAssemblyViewDisplayTagMaxLineIndex );
          ADD_ASSEMBLY_VIEW_LINE_TO_ERROR_MESSAGE;
          cerr << soError << endl;
          break;
       }
       
       aAssemblyViewDisplayTheseTagTypes_.insert( 
           new assemblyViewTagTypeAndLine( soTagType, nLine ) );

    }

    aAssemblyViewDisplayTheseTagTypes_.resort();

}



void consedParameters :: readFileToOrderReadsInAlignedReadsWindow() {


   aShowReadsInAlignedReadsWindowOrderGivenByFile_.clearAndDestroy();

   FILE* pFileToOrderReads = 
       fopen( filShowReadsInAlignedReadsWindowOrderedByThisFile_.data(),
          "r" );

   if ( !pFileToOrderReads ) {
      fprintf( stderr, "couldn't open %s--that's ok\n",
         filShowReadsInAlignedReadsWindowOrderedByThisFile_.data() );

      return;
   }

   while( fgets( soLine.sz_, nMaxLineSize, pFileToOrderReads ) != NULL ) {
      soLine.nCurrentLength_ = strlen( soLine.sz_ );

      soLine.stripTrailingWhitespaceFast();

      if ( soLine.isNull() ) 
         continue;

      // convert * to the regexp expression .*

      for( int n = (int) soLine.length() - 1; n >= 0; --n ) {
         if ( soLine[n] == '*' ) {
            soLine.insert( n, "." );
         }
      }

      // put ^ and $ around the string to make it completely
      // match the read name

      soLine.insert( 0, "^" );
      soLine.append( "$" );

      RWCRegexp* pRegExp = new RWCRegexp( soLine );
      aShowReadsInAlignedReadsWindowOrderGivenByFile_.insert( pRegExp );
   }      


   fclose( pFileToOrderReads );


}