/*****************************************************************************
#   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    "consedParameters.h"
#include    <stdio.h>
#include    "printAutoFinishParameters.h"
#include    "fileDefines.h"


void printAutoFinishParameters() {

   fprintf( pAO, "PARAMETERS {\n" );
   fprintf( pAO, "! If you want to modify any of these parameters, just cut/paste\n" );
   fprintf( pAO, "! the relevant line into your ~/.consedrc file\n" );
   fprintf( pAO, "! (or into the edit_dir/.consedrc file)\n" );























   fprintf( pAO, "! In the following, I have annotated the parameters with the following\n");
   fprintf( pAO, "! symbols:\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "! (YES)  freely customize to your own site\n");
   fprintf( pAO, "! (OK)  don't change unless you have a specific need and know what you\n");
   fprintf( pAO, "!         are doing\n");
   fprintf( pAO, "! (NO)  don't change this!\n");
   fprintf( pAO, "! (GREEN LAB) Resources here are just those for Green Lab research and have\n");
   fprintf( pAO, "!             no effect on any Consed/Autofinish/AutoReport functions\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "! parameters in the (YES) category:\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "consed.autoFinishMinNumberOfErrorsFixedByAnExp: %.3f\n",
        pCP->dAutoFinishMinNumberOfErrorsFixedByAnExp_ );

   fprintf( pAO, "! if an experiment solves fewer errors than this, it isn't worth doing\n");
   fprintf( pAO, "! so won't be chosen.  This parameter controls when Autofinish stops\n");
   fprintf( pAO, "! choosing experiments.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.autoFinishRedundancy: %.3f\n",
        pCP->dAutoFinishRedundancy_ );

   fprintf( pAO, "! This number should be between 1.0 and 2.0 If you want more reads\n");
   fprintf( pAO, "! for each area, increase the number towards 2.0  If you want fewer\n");
   fprintf( pAO, "! reads per area, decrease it towards 1.0.  This only affects\n");
   fprintf( pAO, "! universal primer reads--not custom primer reads.\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.autoFinishAverageInsertSize: %d\n",
       pCP->nAutoFinishAverageInsertSize_ );

   fprintf( pAO, "! If a template has a forward but no reverse, when deciding whether to\n");
   fprintf( pAO, "! allow this template for a particular primer or reverse, we need to\n");
   fprintf( pAO, "! make an assumption of where is the end of the template.  If we have\n");
   fprintf( pAO, "! do not have enough forward/reverse pairs to determine the mean, then\n");
   fprintf( pAO, "! this parameter is used.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersMaxInsertSizeOfASubclone: %d\n",
       pCP->nPrimersMaxInsertSizeOfASubclone_ );

   fprintf( pAO, "! check +/- this distance from the primer for false-annealing\n");
   fprintf( pAO, "! and check at most this distance for templates for a primer.\n");
   fprintf( pAO, "! Thus if you have more than one library, make this the max of\n");
   fprintf( pAO, "! all libraries.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersMaxMeltingTemp: %d\n",
       pCP->nPrimersMaxMeltingTemp_ );

   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersMaxMeltingTempForPCR: %d\n",
       pCP->nPrimersMaxMeltingTempForPCR_ );

   fprintf( pAO, "! Note:  the difference between consed.primersMaxMeltingTempForPCR and\n");
   fprintf( pAO, "! consed.primersMinMeltingTempForPCR must be less than or equal to\n");
   fprintf( pAO, "! consed.primersMaxMeltingTempDifferenceForPCR\n");
   fprintf( pAO, "! Otherwise, autofinish may take forever to pick pcr primers.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersPickTemplatesForPrimers: %s\n",
     ( ( pCP->bPrimersPickTemplatesForPrimers_ ) ? "true" : "false" ) );

   fprintf( pAO, "! when picking primers for subclone templates, pick templates also.\n");
   fprintf( pAO, "! If there is no suitable template for a primer, do not pick the\n");
   fprintf( pAO, "! primer.  If you like to pick your own templates, you might want to\n");
   fprintf( pAO, "! turn this off for a little improvement in speed.\n");
   fprintf( pAO, "! This has no effect on Autofinish--just on interactive primer picking\n");
   fprintf( pAO, "! in Consed.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersSubcloneFullPathnameOfFileOfSequencesForScreening: %s\n",
       (char*)pCP->soPrimersSubcloneFullPathnameOfFileOfSequencesForScreening_.data() );

   fprintf( pAO, "! vector sequence file if choosing subclone (e.g., M13, plasmid)\n");
   fprintf( pAO, "! templates\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersCloneFullPathnameOfFileOfSequencesForScreening: %s\n",
       (char*)pCP->soPrimersCloneFullPathnameOfFileOfSequencesForScreening_.data() );

   fprintf( pAO, "! vector sequence file if choosing clone (e.g., cosmid, BAC) template\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersMinMeltingTemp: %d\n",
       pCP->nPrimersMinMeltingTemp_ );

   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.primersMinMeltingTempForPCR: %d\n",
       pCP->nPrimersMinMeltingTempForPCR_ );

   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.autoFinishAllowHighQualityDiscrepanciesInTemplateIfConsistentForwardReversePair: %s\n",
     ( ( pCP->bAutoFinishAllowHighQualityDiscrepanciesInTemplateIfConsistentForwardReversePair_ ) ? "true" : "false" ) );

   fprintf( pAO, "!  otherwise, a single serious hqd will cause the template to be rejected.\n");
   fprintf( pAO, "! (YES)\n");
   fprintf( pAO, "consed.autoReportPrintReadNamesInRegion: %s\n",
     ( ( pCP->bAutoReportPrintReadNamesInRegion_ ) ? "true" : "false" ) );

   fprintf( pAO, "!(OK)\n");
   fprintf( pAO, "consed.autoReportPrintReadNamesInRegionContig: %s\n",
       (char*)pCP->soAutoReportPrintReadNamesInRegionContig_.data() );

   fprintf( pAO, "!(OK)\n");
   fprintf( pAO, "consed.autoReportPrintReadNamesInRegionLeftPos: %d\n",
       pCP->nAutoReportPrintReadNamesInRegionLeftPos_ );

   fprintf( pAO, "!(OK)\n");
   fprintf( pAO, "consed.autoReportPrintReadNamesInRegionRightPos: %d\n",
       pCP->nAutoReportPrintReadNamesInRegionRightPos_ );

   fprintf( pAO, "!(OK)\n");
   fprintf( pAO, "consed.autoReportPrintHighlyDiscrepantRegions: %s\n",
     ( ( pCP->bAutoReportPrintHighlyDiscrepantRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! motivated by solexa reads.  Print where many reads disagree with\n");
   fprintf( pAO, "! reference sequence\n");
   fprintf( pAO, "! uses: \n");
   fprintf( pAO, "! consed.qualityThresholdForFindingHighQualityDiscrepancies\n");
   fprintf( pAO, "!   ignores bases lower than this\n");
   fprintf( pAO, "! consed.navigateByHighlyDiscrepantPositionsMinDiscrepantReads\n");
   fprintf( pAO, "! consed.navigateByHighlyDiscrepantPositionsMaxDepthOfCoverage\n");
   fprintf( pAO, "! consed.navigateByHighlyDiscrepantPositionsIgnoreBasesBelowThisQuality\n");
   fprintf( pAO, "! consed.navigateByHighlyDiscrepantPositionsJustListIndels\n");
   fprintf( pAO, "! consed.navigateByHighlyDiscrepantPositionsIgnoreIfNOrXInConsensus: false\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintScaffolds: %s\n",
     ( ( pCP->bAutoReportPrintScaffolds_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintHighQualityDiscrepancies: %s\n",
     ( ( pCP->bAutoReportPrintHighQualityDiscrepancies_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportHighQualityDiscrepanciesExcludeCompressionOrG_dropoutTags: %s\n",
     ( ( pCP->bAutoReportHighQualityDiscrepanciesExcludeCompressionOrG_dropoutTags_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used in connection with consed.autoReportPrintHighQualityDiscrepancies\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportHighQualityDiscrepanciesExcludeMostPads: %s\n",
     ( ( pCP->bAutoReportHighQualityDiscrepanciesExcludeMostPads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used in connection with consed.autoReportPrintHighQualityDiscrepancies\n");
   fprintf( pAO, "! Excludes high quality discrepancy pads except those in cases such as this:\n");
   fprintf( pAO, "!  consensus   aa\n");
   fprintf( pAO, "!  read 1      *a\n");
   fprintf( pAO, "!  read 2      *a\n");
   fprintf( pAO, "!  read 3      a*\n");
   fprintf( pAO, "!  read 4      a*\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintLowConsensusQualityRegions: %s\n",
     ( ( pCP->bAutoReportPrintLowConsensusQualityRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintSingleSubcloneRegions: %s\n",
     ( ( pCP->bAutoReportPrintSingleSubcloneRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintSingleStrandedRegions: %s\n",
     ( ( pCP->bAutoReportPrintSingleStrandedRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintLinkingForwardReversePairs: %s\n",
     ( ( pCP->bAutoReportPrintLinkingForwardReversePairs_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintFilteredInconsistentForwardReversePairs: %s\n",
     ( ( pCP->bAutoReportPrintFilteredInconsistentForwardReversePairs_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoReportPrintAssemblySummary: %s\n",
     ( ( pCP->bAutoReportPrintAssemblySummary_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotDoPCRIfThisManyAvailableGapSpanningTemplates: %d\n",
       pCP->nAutoFinishDoNotDoPCRIfThisManyAvailableGapSpanningTemplates_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotDoUnorientedPCRIfThisManyOrMoreUnorientedPCRReactions: %d\n",
       pCP->nAutoFinishDoNotDoUnorientedPCRIfThisManyOrMoreUnorientedPCRReactions_ );

   fprintf( pAO, "! \"unoriented\" pcr reactions means cases in which autofinish is suggesting\n");
   fprintf( pAO, "! a pcr reaction to span a gap, but it doesn't know whether the 2 contig ends\n");
   fprintf( pAO, "! really go together since there are not enough (or no)templates that span \n");
   fprintf( pAO, "! that gap \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotDoOrientedPCRIfGapSizeLargerThanThis: %d\n",
       pCP->nAutoFinishDoNotDoOrientedPCRIfGapSizeLargerThanThis_ );

   fprintf( pAO, "! Gap size can be specified in user-defined contigEndPair tags in a \n");
   fprintf( pAO, "! gap_size: field\n");
   fprintf( pAO, "! If the gap size is greater than this number, do not do PCR.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotDoPCRIfEndIsExtendedByReads: %s\n",
     ( ( pCP->bAutoFinishDoNotDoPCRIfEndIsExtendedByReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If this is true, and autofinish was able to walk off the end of a\n");
   fprintf( pAO, "! contig, do not do PCR with that end of the contig. \n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishMaxAcceptableErrorsPerMegabase: %d\n",
       pCP->nAutoFinishMaxAcceptableErrorsPerMegabase_ );

   fprintf( pAO, "! target error rate.  This parameter used to be the one that stopped\n");
   fprintf( pAO, "! Autofinish from calling more reads.  However, consider a BAC that is\n");
   fprintf( pAO, "! nearly perfect except for one region with 3 quality 10 bases in a\n");
   fprintf( pAO, "! row.  In this case the global errors per megabase is very\n");
   fprintf( pAO, "! low--perhaps lower than 1 error per megabase.  Despite this, most\n");
   fprintf( pAO, "! labs would like to do one more read to fix this problem.  Thus we\n");
   fprintf( pAO, "! set this parameter to zero (to disable it) so Autofinish will use\n");
   fprintf( pAO, "! the parameter consed.autoFinishMinNumberOfErrorsFixedByAnExp to stop\n");
   fprintf( pAO, "! calling more reads--it is a local error rate.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishIfNotEnoughFwdRevPairsUseThisPerCentOfInsertSize: %d\n",
       pCP->nAutoFinishIfNotEnoughFwdRevPairsUseThisPerCentOfInsertSize_ );

   fprintf( pAO, "! If a template has a forward but no reverse, when deciding whether to\n");
   fprintf( pAO, "! allow this template for a particular primer, we need to make an assumption\n");
   fprintf( pAO, "! of where is the end of the template.  If the template comes from a library\n");
   fprintf( pAO, "! with insert size 1500, it would be reasonable to assume that the end of\n");
   fprintf( pAO, "! template will be 1500 bases from the forward read.  But if this template\n");
   fprintf( pAO, "! has an insert that is shorter than average, the walk may walk into vector.\n");
   fprintf( pAO, "! To be conservative, we may want to assume that the insert is somewhat \n");
   fprintf( pAO, "! shorter than average.  By default, we assume that it is 90% as large as \n");
   fprintf( pAO, "! the average. This parameter gives that percentage.  This parameter\n");
   fprintf( pAO, "! is used both by Consed and Autofinish.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersNumberOfBasesToBackUpToStartLooking: %d\n",
       pCP->nPrimersNumberOfBasesToBackUpToStartLooking_ );

   fprintf( pAO, "! e.g., if this is 50 and you want a read at position 1000, primers\n");
   fprintf( pAO, "! will be searched before base 950 but not in the region 950 to 1000\n");
   fprintf( pAO, "! This has no effect on Autofinish--just on interactively picking primers.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMakePCRPrimersThisManyBasesBackFromEndOfHighQualitySegment: %d\n",
       pCP->nPrimersMakePCRPrimersThisManyBasesBackFromEndOfHighQualitySegment_ );

   fprintf( pAO, "! When a PCR product is made, you want it to overlap by this many bases\n");
   fprintf( pAO, "! the high quality part of the existing consensus.  Thus choose PCR\n");
   fprintf( pAO, "! primers this many bases back (or more)\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersOKToChoosePrimersInSingleSubcloneRegion: %s\n",
     ( ( pCP->bPrimersOKToChoosePrimersInSingleSubcloneRegion_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersOKToChoosePrimersWhereHighQualityDiscrepancies: %s\n",
     ( ( pCP->bPrimersOKToChoosePrimersWhereHighQualityDiscrepancies_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersOKToChoosePrimersWhereUnalignedHighQualityRegion: %s\n",
     ( ( pCP->bPrimersOKToChoosePrimersWhereUnalignedHighQualityRegion_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCallReversesToFlankGaps: %s\n",
     ( ( pCP->bAutoFinishCallReversesToFlankGaps_ ) ? "true" : "false" ) );

   fprintf( pAO, "! if there is a forward-reverse pair flanking a gap, print it out\n");
   fprintf( pAO, "! if there is not, suggest reverses to flank the gap\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowWholeCloneReads: %s\n",
     ( ( pCP->bAutoFinishAllowWholeCloneReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! ok to call reads whose template for sequencing reaction is the\n");
   fprintf( pAO, "! entire clone (BAC or cosmid)\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowCustomPrimerSubcloneReads: %s\n",
     ( ( pCP->bAutoFinishAllowCustomPrimerSubcloneReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! ok to call reads with custom primers and subclone template\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowResequencingReads: %s\n",
     ( ( pCP->bAutoFinishAllowResequencingReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This is just universal primer reads to be resequenced using\n");
   fprintf( pAO, "! dye terminator chemistry or special chemistry.  (It does not\n");
   fprintf( pAO, "! mean resequencing a custom primer read.)\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowResequencingReadsOnlyForRunsAndStops: %s\n",
     ( ( pCP->bAutoFinishAllowResequencingReadsOnlyForRunsAndStops_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This parameter only has any effect when\n");
   fprintf( pAO, "! consed.autoFinishAllowResequencingReads is set to true.  In that\n");
   fprintf( pAO, "! case no resequencing reads will be suggested, unless it is to cross\n");
   fprintf( pAO, "! a run or stop and special chemistry is suggested.\n");
   fprintf( pAO, "! (OK)    \n");
   fprintf( pAO, "consed.autoFinishAllowDeNovoUniversalPrimerSubcloneReads: %s\n",
     ( ( pCP->bAutoFinishAllowDeNovoUniversalPrimerSubcloneReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Allows calling reverse when there is just a forward.\n");
   fprintf( pAO, "! Allows calling a forward when there is just a reverse.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowMinilibraries: %s\n",
     ( ( pCP->bAutoFinishAllowMinilibraries_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Allows calling minilibraries (shatter libraries or transposon\n");
   fprintf( pAO, "! libraries) of subclone templates for closing gaps\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowPCR: %s\n",
     ( ( pCP->bAutoFinishAllowPCR_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Allows calling PCR for closing gaps, but only as a last resort\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowUnorientedPCRReactions: %s\n",
     ( ( pCP->bAutoFinishAllowUnorientedPCRReactions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Allows calling PCR amongst contig-ends that have insufficient\n");
   fprintf( pAO, "! fwd/rev pair linkage to any other contig-end.  Thus it suggests\n");
   fprintf( pAO, "! pcr amongst all such contig-ends.  \n");
   fprintf( pAO, "! To allow this type of pcr, you must also make:\n");
   fprintf( pAO, "! consed.autoFinishAllowPCRForUnorientedContigEnds: true\n");
   fprintf( pAO, "! See also:\n");
   fprintf( pAO, "! consed.autoFinishDoNotDoUnorientedPCRIfThisManyOrMoreUnorientedPCRReactions: \n");
   fprintf( pAO, "! which gives you finer control over unoriented pcr.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowResequencingAUniversalPrimerAutofinishRead: %s\n",
     ( ( pCP->bAutoFinishAllowResequencingAUniversalPrimerAutofinishRead_ ) ? "true" : "false" ) );

   fprintf( pAO, "! if Autofinish suggests a de novo universal primer read,\n");
   fprintf( pAO, "! do not allow Autofinish to suggest a resequence of this read\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAlwaysCloseGapsUsingMinilibraries: %s\n",
     ( ( pCP->bAutoFinishAlwaysCloseGapsUsingMinilibraries_ ) ? "true" : "false" ) );

   fprintf( pAO, "! \"Minilibraries\" includes transposing a subclone template or\n");
   fprintf( pAO, "! making a shatter library from a subclone template\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishMaximumFinishingReadLength: %d\n",
       pCP->nAutoFinishMaximumFinishingReadLength_ );

   fprintf( pAO, "! Change this only if your finishing reads are typically shorter\n");
   fprintf( pAO, "! than your shotgun reads.  Otherwise, leave it unrealistically long,\n");
   fprintf( pAO, "! and Autofinish will set its model read based on your existing\n");
   fprintf( pAO, "! shotgun reads.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishSuggestMinilibraryIfGapThisManyBasesOrLarger: %d\n",
       pCP->nAutoFinishSuggestMinilibraryIfGapThisManyBasesOrLarger_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishSuggestSpecialChemistryForRunsAndStops: %s\n",
     ( ( pCP->bAutoFinishSuggestSpecialChemistryForRunsAndStops_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Suggest special chemistry such as dGTP for reads that cross\n");
   fprintf( pAO, "! mononucleotide or dinucleotide repeats that cause reads to fail or \n");
   fprintf( pAO, "! stops (structure) that cause reads to fail and thus dye terminator\n");
   fprintf( pAO, "! reads won't work.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishSuggestThisManyMinilibrariesPerGap: %d\n",
       pCP->nAutoFinishSuggestThisManyMinilibrariesPerGap_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersWindowSizeInLooking: %d\n",
       pCP->nPrimersWindowSizeInLooking_ );

   fprintf( pAO, "! e.g., if this is 300, with example above, primers will be searched\n");
   fprintf( pAO, "! from base 650 to 950.  This has no effect on Autofinish--it is just\n");
   fprintf( pAO, "! used for interactive primer picking in Consed.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersAssumeTemplatesAreDoubleStrandedUnlessSpecified: %s\n",
     ( ( pCP->bPrimersAssumeTemplatesAreDoubleStrandedUnlessSpecified_ ) ? "true" : "false" ) );

   fprintf( pAO, "! you can put the template type in the phd file in a WR template item\n");
   fprintf( pAO, "! consed will have a list of these and know which are single and\n");
   fprintf( pAO, "! double stranded\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishAllowResequencingReadsToExtendContigs: %s\n",
     ( ( pCP->bAutoFinishAllowResequencingReadsToExtendContigs_ ) ? "true" : "false" ) );

   fprintf( pAO, "! if false, a resequencing read is not called to extend a contig--only\n");
   fprintf( pAO, "! custom primer reads and de novo universal primer reads are called\n");
   fprintf( pAO, "! for this purpose.  \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCallHowManyReversesToFlankGaps: %d\n",
       pCP->nAutoFinishCallHowManyReversesToFlankGaps_ );

   fprintf( pAO, "! This has two purposes: 1) it specifies how many forward/reverse\n");
   fprintf( pAO, "! pairs should be present for Consed/Autofinish to be certain of the\n");
   fprintf( pAO, "! order/ orientation of two contigs.  If there are this many fwd/rev\n");
   fprintf( pAO, "! pairs flanking a gap, Autofinish will print out the contig ends that\n");
   fprintf( pAO, "! flank the gap.  2) If consed.autoFinishCallReversesToFlankGaps is\n");
   fprintf( pAO, "! set to true, and there are less than this many fwd/rev pairs\n");
   fprintf( pAO, "! flanking a gap, Autofinish will suggest additional reverses until\n");
   fprintf( pAO, "! there are this many.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCloseGaps: %s\n",
     ( ( pCP->bAutoFinishCloseGaps_ ) ? "true" : "false" ) );

   fprintf( pAO, "! this allows you to turn off choosing reads to close gaps\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishContinueEvenThoughReadInfoDoesNotMakeSense: %s\n",
     ( ( pCP->bAutoFinishContinueEvenThoughReadInfoDoesNotMakeSense_ ) ? "true" : "false" ) );

   fprintf( pAO, "! this allows you to override the checks that autofinish makes on the\n");
   fprintf( pAO, "! read info, such as checking there are not more than 5 or so reads\n");
   fprintf( pAO, "! from the same subclone template\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCostOfResequencingUniversalPrimerSubcloneReaction: %.3f\n",
        pCP->dAutoFinishCostOfResequencingUniversalPrimerSubcloneReaction_ );

   fprintf( pAO, "! compares universal primer subclone reaction, custom primer subclone \n");
   fprintf( pAO, "! reaction, and custom primer clone reaction to decide which to favor\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCostOfCustomPrimerSubcloneReaction: %.3f\n",
        pCP->dAutoFinishCostOfCustomPrimerSubcloneReaction_ );

   fprintf( pAO, "! see above\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCostOfCustomPrimerCloneReaction: %.3f\n",
        pCP->dAutoFinishCostOfCustomPrimerCloneReaction_ );

   fprintf( pAO, "! see above \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCostOfDeNovoUniversalPrimerSubcloneReaction: %.3f\n",
        pCP->dAutoFinishCostOfDeNovoUniversalPrimerSubcloneReaction_ );

   fprintf( pAO, "! cost of reverse where there is only a forward or cost of forward\n");
   fprintf( pAO, "! when there is only a reverse\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCostOfMinilibrary: %.3f\n",
        pCP->dAutoFinishCostOfMinilibrary_ );

   fprintf( pAO, "! cost of making a minilibrary (transposon library or shatter library)\n");
   fprintf( pAO, "! from a subclone template\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCoverSingleSubcloneRegions: %s\n",
     ( ( pCP->bAutoFinishCoverSingleSubcloneRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! this allows you to turn off choosing reads to cover single subclone regions\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCoverLowConsensusQualityRegions: %s\n",
     ( ( pCP->bAutoFinishCoverLowConsensusQualityRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! this allows you to turn off choosing reads to cover low consensus\n");
   fprintf( pAO, "! quality regions\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDebugUniversalPrimerReadsFile: %s\n",
       (char*)pCP->filAutoFinishDebugUniversalPrimerReadsFile_.data() );

   fprintf( pAO, "! for debugging Autofinish\n");
   fprintf( pAO, "! put a file with this name in the same directory as the ace file\n");
   fprintf( pAO, "! format:\n");
   fprintf( pAO, "! fcalld09 fwd\n");
   fprintf( pAO, "! fgj74f01 rev\n");
   fprintf( pAO, "! (template name) (fwd or rev)\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDebugCustomPrimerReadsFile: %s\n",
       (char*)pCP->filAutoFinishDebugCustomPrimerReadsFile_.data() );

   fprintf( pAO, "! for debugging Autofinish\n");
   fprintf( pAO, "! put a file with this name in the same directory as the ace file\n");
   fprintf( pAO, "! format:\n");
   fprintf( pAO, "! cgggacctgg\n");
   fprintf( pAO, "! (primer in 5' to 3' orientation)\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotAllowSubcloneCustomPrimerReadsCloserThanThisManyBases: %d\n",
       pCP->nAutoFinishDoNotAllowSubcloneCustomPrimerReadsCloserThanThisManyBases_ );

   fprintf( pAO, "! see consed.autoFinishDoNotAllowSubcloneCustomPrimerReadsCloseTogether\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotAllowWholeCloneCustomPrimerReadsCloserThanThisManyBases: %d\n",
       pCP->nAutoFinishDoNotAllowWholeCloneCustomPrimerReadsCloserThanThisManyBases_ );

   fprintf( pAO, "! see consed.autoFinishDoNotAllowWholeCloneCustomPrimerReadsCloseTogether\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotFinishWhereTheseTagsAre: %s\n",
       (char*)pCP->soAutoFinishDoNotFinishWhereTheseTagsAre_.data() );

   fprintf( pAO, "! list of tag types separated by spaces.  E.g.,\n");
   fprintf( pAO, "! doNotFinish repeat \n");
   fprintf( pAO, "! tells autofinish that you are not interested in finishing in this region\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotExtendContigsWhereTheseTagsAre: %s\n",
       (char*)pCP->soAutoFinishDoNotExtendContigsWhereTheseTagsAre_.data() );

   fprintf( pAO, "! list of tag types separated by spaces.  E.g.,\n");
   fprintf( pAO, "! doNotFinish repeat\n");
   fprintf( pAO, "! tells autofinish that you do not want to extend the contig near this\n");
   fprintf( pAO, "! tag.  If you do not want this feature, just leave the list empty.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotExtendContigsIfTagsAreThisCloseToContigEnd: %d\n",
       pCP->nAutoFinishDoNotExtendContigsIfTagsAreThisCloseToContigEnd_ );

   fprintf( pAO, "! Uses the list from consed.autoFinishDoNotExtendContigsWhereTheseTagsAre\n");
   fprintf( pAO, "! and checks if any of these tags are within this many bases of the end of \n");
   fprintf( pAO, "! the contig.  If they are, does not extend the contig.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDumpTemplates: %s\n",
     ( ( pCP->bAutoFinishDumpTemplates_ ) ? "true" : "false" ) );

   fprintf( pAO, "! for debugging, this allows you to dump all information about the \n");
   fprintf( pAO, "! templates--insert locations \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishExcludeContigIfOnlyThisManyReadsOrLess: %d\n",
       pCP->nAutoFinishExcludeContigIfOnlyThisManyReadsOrLess_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishExcludeContigIfDepthOfCoverageGreaterThanThis: %.3f\n",
        pCP->dAutoFinishExcludeContigIfDepthOfCoverageGreaterThanThis_ );

   fprintf( pAO, "! To exclude contigs that are probably E. coli contamination\n");
   fprintf( pAO, "! \"depth of coverage\" is defined here to mean the sum of the read\n");
   fprintf( pAO, "! lengths (including low quality ends) divided by the contig length.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishExcludeContigIfThisManyBasesOrLess: %d\n",
       pCP->nAutoFinishExcludeContigIfThisManyBasesOrLess_ );

   fprintf( pAO, "! consed.autoFinishExcludeContigIfTooShort must be set to true for\n");
   fprintf( pAO, "! this to have any effect\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishHowManyTemplatesYouIntendToUseForCustomPrimerSubcloneReactions: %d\n",
       pCP->nAutoFinishHowManyTemplatesYouIntendToUseForCustomPrimerSubcloneReactions_ );

   fprintf( pAO, "! this tells autofinish which templates you are planning on using\n");
   fprintf( pAO, "! which is necessary to figure out which regions will still be single\n");
   fprintf( pAO, "! subclone regions\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMinNumberOfTemplatesForPrimers: %d\n",
       pCP->nPrimersMinNumberOfTemplatesForPrimers_ );

   fprintf( pAO, "! if there are fewer templates than this, the primer is rejected\n");
   fprintf( pAO, "consed.autoFinishMinBaseOverlapBetweenAReadAndHighQualitySegmentOfConsensus: %d\n",
       pCP->nAutoFinishMinBaseOverlapBetweenAReadAndHighQualitySegmentOfConsensus_ );

   fprintf( pAO, "! when extending the consensus, a read that is too far from the\n");
   fprintf( pAO, "! consensus will not be assembled by phrap with this contig and thus\n");
   fprintf( pAO, "! will not be useful for extending the consensus.  This gives the\n");
   fprintf( pAO, "! minimum overlap of a read with the high quality segment of the\n");
   fprintf( pAO, "! consensus.  As reads are picked, then additional reads may be picked\n");
   fprintf( pAO, "! further out.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishNumberOfVectorBasesAtBeginningOfAUniveralPrimerRead: %d\n",
       pCP->nAutoFinishNumberOfVectorBasesAtBeginningOfAUniveralPrimerRead_ );

   fprintf( pAO, "! used to figure out where the beginning of a reverse will be.  Not\n");
   fprintf( pAO, "! important to be accurate because the insert size is so uncertain\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishCDNANotGenomic: %s\n",
     ( ( pCP->bAutoFinishCDNANotGenomic_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If this is set to true, the whole clone is assumed to be cDNA and,\n");
   fprintf( pAO, "! rather than the normal method of detecting the end of the clone,\n");
   fprintf( pAO, "! Autofinish detects the end of the cDNA as follows:\n");
   fprintf( pAO, "! the user is expected to add whole read items of type 'template',\n");
   fprintf( pAO, "! with 'type: univ fwd' for the 5' end and 'type: univ rev' for the 3'\n");
   fprintf( pAO, "! end of the cDNA.  \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishConfidenceThatReadWillCoverSingleSubcloneRegion: %d\n",
       pCP->nAutoFinishConfidenceThatReadWillCoverSingleSubcloneRegion_ );

   fprintf( pAO, "! Autofinish computes the per cent of existing reads are aligned at\n");
   fprintf( pAO, "! each base position.  Typically, this number starts at around 0% at\n");
   fprintf( pAO, "! base position 1, rises to close to 100% at around base position 300,\n");
   fprintf( pAO, "! and then drops again to 0% at base position 800 or so.  This number\n");
   fprintf( pAO, "! specifies how high the number must be for Autofinish to consider an\n");
   fprintf( pAO, "! Autofinish read to cover a single subclone region.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishPrintForwardOrReverseStrandWhenPrintingSubcloneTemplatesForCustomPrimerReads: %s\n",
     ( ( pCP->bAutoFinishPrintForwardOrReverseStrandWhenPrintingSubcloneTemplatesForCustomPrimerReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If this is true, then custom primer reads are printed out like this:\n");
   fprintf( pAO, "! tccagaaaactaattcaaaataatg,56,standard.2,->,2413,2413,3681,Contig1,9,djs74_690 (fwd),10,djs74_1803 (fwd),11,djs74_1861 (fwd)\n");
   fprintf( pAO, "! If this is false, then custom primer reads are printed out like this:\n");
   fprintf( pAO, "! tccagaaaactaattcaaaataatg,56,standard.2,->,2413,2413,3681,Contig1,9,djs74_690,10,djs74_1803,11,djs74_1861\n");
   fprintf( pAO, "! The difference is the (fwd) or (rev) that indicates which strand of\n");
   fprintf( pAO, "! the subclone template is to be used.  This is particularly important if\n");
   fprintf( pAO, "! you use M13 and thus must make the reverse strand.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishPrintMinilibrariesSummaryFile: %s\n",
     ( ( pCP->bAutoFinishPrintMinilibrariesSummaryFile_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If this is true, Autofinish will print a file with name\n");
   fprintf( pAO, "! xxx.minilibraries just as it prints one as xxx.univReverses and\n");
   fprintf( pAO, "! xxx.univForwards\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishNearGapsSuggestEachMissingReadOfReadPairs: %s\n",
     ( ( pCP->bAutoFinishNearGapsSuggestEachMissingReadOfReadPairs_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This is set to true to increase the chance of closing a gap.  For\n");
   fprintf( pAO, "! every subclone template that has just one universal primer read\n");
   fprintf( pAO, "! (either just a forward or just a reverse) that might protrude off\n");
   fprintf( pAO, "! the end of the contig, Autofinish suggests the universal primer read\n");
   fprintf( pAO, "! off the opposite end of the subclone template.\n");
   fprintf( pAO, "! If this parameter is set false, then\n");
   fprintf( pAO, "! Autofinish may still choose some of these reads, but it won't\n");
   fprintf( pAO, "! necessarily choose them all.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishDoNotIgnoreLCQIfThisManyBasesFromEndOfContigForLCQTagger: %d\n",
       pCP->nAutoFinishDoNotIgnoreLCQIfThisManyBasesFromEndOfContigForLCQTagger_ );

   fprintf( pAO, "! Do not ignore low consensus quality bases if they are this many \n");
   fprintf( pAO, "! bases from the end of the contig.    \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMinimumLengthOfAPrimer: %d\n",
       pCP->nPrimersMinimumLengthOfAPrimer_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMaximumLengthOfAPrimer: %d\n",
       pCP->nPrimersMaximumLengthOfAPrimer_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMinimumLengthOfAPrimerForPCR: %d\n",
       pCP->nPrimersMinimumLengthOfAPrimerForPCR_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMaximumLengthOfAPrimerForPCR: %d\n",
       pCP->nPrimersMaximumLengthOfAPrimerForPCR_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMaxMeltingTempDifferenceForPCR: %.3f\n",
        pCP->dPrimersMaxMeltingTempDifferenceForPCR_ );

   fprintf( pAO, "! how large can the difference of melting temperatures be between\n");
   fprintf( pAO, "! two primers of a PCR primer pair\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMaxPCRPrimerPairsToDisplay: %d\n",
       pCP->nPrimersMaxPCRPrimerPairsToDisplay_ );

   fprintf( pAO, "! there is a limit here, because there could possibly be millions\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersCheckJustSomePCRPrimerPairsRatherThanAll: %s\n",
     ( ( pCP->bPrimersCheckJustSomePCRPrimerPairsRatherThanAll_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If there are 1000 1st primers, and 1000 2nd primers, that gives\n");
   fprintf( pAO, "! a million pairs for Consed to check, which takes a long time.  So\n");
   fprintf( pAO, "! instead, just check some of the pairs\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersNumberOfTemplatesToDisplayInFront: %d\n",
       pCP->nPrimersNumberOfTemplatesToDisplayInFront_ );

   fprintf( pAO, "! this shows the number of templates to show in the interactive primer\n");
   fprintf( pAO, "! picking window\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersMaxLengthOfMononucleotideRepeat: %d\n",
       pCP->nPrimersMaxLengthOfMononucleotideRepeat_ );

   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersBadLibrariesFile: %s\n",
       (char*)pCP->filPrimersBadLibrariesFile_.data() );

   fprintf( pAO, "! file of libraries, one per line\n");
   fprintf( pAO, "! If any template is from any one of these libraries, then\n");
   fprintf( pAO, "! consed/autofinish will not use this template for walking or\n");
   fprintf( pAO, "! suggesting any universal primer reads\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersLibrariesInfoFile: %s\n",
       (char*)pCP->filPrimersLibrariesInfoFile_.data() );

   fprintf( pAO, "! file of libraries, with one entry for each library of the following\n");
   fprintf( pAO, "! format:\n");
   fprintf( pAO, "! LIB{\n");
   fprintf( pAO, "! name: library1\n");
   fprintf( pAO, "! avgInsertSize: 3000\n");
   fprintf( pAO, "! maxInsertSize: 5000\n");
   fprintf( pAO, "! stranded: single\n");
   fprintf( pAO, "! cost: 600.0\n");
   fprintf( pAO, "! }\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersBadTemplatesFile: %s\n",
       (char*)pCP->filPrimersBadTemplatesFile_.data() );

   fprintf( pAO, "! file of templates that you've tried, don't work, and you don't want to try\n");
   fprintf( pAO, "! again\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersChooseTemplatesByPositionInsteadOfQuality: %s\n",
     ( ( pCP->bPrimersChooseTemplatesByPositionInsteadOfQuality_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Templates for subclone custom primer walks can be chosen either on\n");
   fprintf( pAO, "! the basis of the quality of the template (as determined by the quality \n");
   fprintf( pAO, "! of existing reads from that template) or by the location of the end of \n");
   fprintf( pAO, "! the template.  If this parameter is false, templates will be chosen\n");
   fprintf( pAO, "! based solely on quality.  If this parameter is true, then templates\n");
   fprintf( pAO, "! with forward/reverse pairs will be picked first, followed by templates \n");
   fprintf( pAO, "! that have the beginning of the insert closest to the primer.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersWhenChoosingATemplateMinPotentialReadLength: %d\n",
       pCP->nPrimersWhenChoosingATemplateMinPotentialReadLength_ );

   fprintf( pAO, "! when choosing templates for a custom primer, only choose a template\n");
   fprintf( pAO, "! if the read can be chosen at least this long\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.primersWindowSizeInLookingForPCR: %d\n",
       pCP->nPrimersWindowSizeInLookingForPCR_ );

   fprintf( pAO, "! will look this many bases back from the pointer when looking for a PCR\n");
   fprintf( pAO, "! primer.  Used both interactively and for Autofinish (see\n");
   fprintf( pAO, "! getUnpaddedRangeForMakingPCRPrimers )\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.qualityThresholdForFindingHighQualityDiscrepancies: %d\n",
       pCP->nQualityThresholdForFindingHighQualityDiscrepancies_ );

   fprintf( pAO, "! high quality discrepancies have this quality or higher    \n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishUseLongModelReadRatherThanShort: %s\n",
     ( ( pCP->bAutoFinishUseLongModelReadRatherThanShort_ ) ? "true" : "false" ) );

   fprintf( pAO, "! When calculating the distribution of quality values at high read \n");
   fprintf( pAO, "! positions, should Autofinish assume that the reads that were this\n");
   fprintf( pAO, "! long and longer are representative of finishing reads, or should it\n");
   fprintf( pAO, "! assume that some finishing will not make it out this far in roughly\n");
   fprintf( pAO, "! the same proportion as the existing reads.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoPCRAmplifyFalseProductsOKIfLargerThanThis: %d\n",
       pCP->nAutoPCRAmplifyFalseProductsOKIfLargerThanThis_ );

   fprintf( pAO, "! If a pcr primer pair matches somewhere else and creates a product\n");
   fprintf( pAO, "! larger than this, the pcr primer pair will still be acceptable\n");
   fprintf( pAO, "! since the product will not easily form in the cycle time.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoPCRAmplifyMakePrimerOutOfFirstRegion: %s\n",
     ( ( pCP->bAutoPCRAmplifyMakePrimerOutOfFirstRegion_ ) ? "true" : "false" ) );

   fprintf( pAO, "! I don't expect people will use this.  It allows you to amplify a\n");
   fprintf( pAO, "! region using autoPCRAmplify not by allowing Consed to choose each\n");
   fprintf( pAO, "! primer (the normal case) but rather by fixing the first primer to be\n");
   fprintf( pAO, "! the first area bordering the region.  I added this to allow\n");
   fprintf( pAO, "! non-specific priming to the transplice leader.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoPCRAmplifyMaybeRejectPrimerIfThisCloseToDesiredProduct: %d\n",
       pCP->nAutoPCRAmplifyMaybeRejectPrimerIfThisCloseToDesiredProduct_ );

   fprintf( pAO, "! --->    --->\n");
   fprintf( pAO, "! false   true match\n");
   fprintf( pAO, "! In such a case, the primer pair will be rejected if the false is\n");
   fprintf( pAO, "! within 5000 bases of true, even if false is a false match of the\n");
   fprintf( pAO, "! other primer.\n");
   fprintf( pAO, "!\n");
   fprintf( pAO, "! <---   --->\n");
   fprintf( pAO, "! false  true match\n");
   fprintf( pAO, "! In this case, the primer pair will not be eliminated.\n");
   fprintf( pAO, "! (OK)\n");
   fprintf( pAO, "consed.autoFinishEmulate9_66Behavior: %s\n",
     ( ( pCP->bAutoFinishEmulate9_66Behavior_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Picks univ primer reads and walks in the same phase.  This results\n");
   fprintf( pAO, "! in poor redundancy of universal primer reads, may pick custom primer\n");
   fprintf( pAO, "! reads over universal primer reads, but may pick fewer\n");
   fprintf( pAO, "! reads overall.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersPCRPrimersGroupedIntoWindowOfThisManyBases: %d\n",
       pCP->nPrimersPCRPrimersGroupedIntoWindowOfThisManyBases_ );

   fprintf( pAO, "! to speed up PCR primer picking and to reduce the number of \n");
   fprintf( pAO, "! PCR primer pairs, group primers into windows of this size\n");
   fprintf( pAO, "! and then just compare window against window\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersLookForThisManyPCRPrimerPairsPerPairOfGroups: %d\n",
       pCP->nPrimersLookForThisManyPCRPrimerPairsPerPairOfGroups_ );

   fprintf( pAO, "! to speed up PCR primer picking and to reduce the number of PCr\n");
   fprintf( pAO, "! primer pairs, group primers into windows and then just accept\n");
   fprintf( pAO, "! this many primer pairs from a pair of groups\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishStandardDeviationsFromMeanFromGapToLookForTemplatesForSuggestingEachMissingReadOfReadPairs: %.3f\n",
        pCP->dAutoFinishStandardDeviationsFromMeanFromGapToLookForTemplatesForSuggestingEachMissingReadOfReadPairs_ );

   fprintf( pAO, "! Only applies when consed.autoFinishNearGapsSuggestEachMissingReadOfReadPairs:\n");
   fprintf( pAO, "! is set to true.  If m is the mean insert size and d is the standard\n");
   fprintf( pAO, "! deviation and this parameter is p, then consider all templates\n");
   fprintf( pAO, "! within a distance m + p*d from the gap.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishCheckThatReadsFromTheSameTemplateAreConsistent: %s\n",
     ( ( pCP->bAutoFinishCheckThatReadsFromTheSameTemplateAreConsistent_ ) ? "true" : "false" ) );

   fprintf( pAO, "! I strongly advise keeping this true.  If you change it to false, you\n");
   fprintf( pAO, "! are on your own.  If the forward and reverse universal primer reads\n");
   fprintf( pAO, "! look like this:   <---               ---->, how is autofinish going\n");
   fprintf( pAO, "! to even know where the template is, huh?  Leave it true!\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishDoNotAllowSubcloneCustomPrimerReadsCloseTogether: %s\n",
     ( ( pCP->bAutoFinishDoNotAllowSubcloneCustomPrimerReadsCloseTogether_ ) ? "true" : "false" ) );

   fprintf( pAO, "! at higher redundancy, autofinish may pick custom primer reactions\n");
   fprintf( pAO, "! that are only a few bases apart on the same strand.  This parameter,\n");
   fprintf( pAO, "! along with\n");
   fprintf( pAO, "! consed.autoFinishDoNotAllowSubcloneCustomPrimerReadsCloserThanThisManyBases,\n");
   fprintf( pAO, "! says how far apart they can be\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishDoNotAllowWholeCloneCustomPrimerReadsCloseTogether: %s\n",
     ( ( pCP->bAutoFinishDoNotAllowWholeCloneCustomPrimerReadsCloseTogether_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Even at redundancy 1, Autofinish may pick whole clone reads just\n");
   fprintf( pAO, "! a few bases apart.  This prevents it.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishMinilibrariesPreferTemplateIfSizeThisManyStdDevsFromMean: %.3f\n",
        pCP->dAutoFinishMinilibrariesPreferTemplateIfSizeThisManyStdDevsFromMean_ );

   fprintf( pAO, "! If a template is more than this many standard deviations from the\n");
   fprintf( pAO, "! mean, try to avoid using it, unless there is nothing else.\n");
   fprintf( pAO, "! Rationale: there is something wrong with this template--an insertion\n");
   fprintf( pAO, "! or deletion.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishMinNumberOfForwardReversePairsInLibraryToCalculateAverageInsertSize: %d\n",
       pCP->nAutoFinishMinNumberOfForwardReversePairsInLibraryToCalculateAverageInsertSize_ );

   fprintf( pAO, "! If there are at least this many fwd/rev pairs in a library, then \n");
   fprintf( pAO, "! the mean and standard deviation are used for sizing other templates in\n");
   fprintf( pAO, "! the same library.  If there are fewer than this, then the default size \n");
   fprintf( pAO, "! specified in the librariesInfo.txt file is used.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishIfEnoughFwdRevPairsUseThisManyStdDevBelowMeanForInsertSize: %.3f\n",
        pCP->dAutoFinishIfEnoughFwdRevPairsUseThisManyStdDevBelowMeanForInsertSize_ );

   fprintf( pAO, "! If you are interested in walking on a template that does not have a\n");
   fprintf( pAO, "! forward/reverse pair, then the precise insert size is uncertain.  If\n");
   fprintf( pAO, "! this template comes from a library that has lots of templates with\n");
   fprintf( pAO, "! forward/reverse pairs, then the mean and standard deviation of the\n");
   fprintf( pAO, "! insert sizes from this library is known.  For the template in\n");
   fprintf( pAO, "! question, we could just use the mean of this library (this parameter =\n");
   fprintf( pAO, "! 0.0), but we could be conservative and assume the insert size is\n");
   fprintf( pAO, "! somewhat less.  This parameter tells how much less.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishNewCustomPrimerReadThisFarFromOldCustomPrimerRead: %d\n",
       pCP->nAutoFinishNewCustomPrimerReadThisFarFromOldCustomPrimerRead_ );

   fprintf( pAO, "! this tells autofinish when it wants to make a new custom primer\n");
   fprintf( pAO, "! read, how far this read must be from any previous custom primer\n");
   fprintf( pAO, "! reads on the same strand\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishMinNumberOfSingleSubcloneBasesFixedByAnExp: %d\n",
       pCP->nAutoFinishMinNumberOfSingleSubcloneBasesFixedByAnExp_ );

   fprintf( pAO, "! if an experiment will only fix less than this number of single\n");
   fprintf( pAO, "! subclone bases, don't do it even if the total number of single\n");
   fprintf( pAO, "! subclone bases in the contig is too high\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishNumberOfBasesBetweenContigsAssumed: %d\n",
       pCP->nAutoFinishNumberOfBasesBetweenContigsAssumed_ );

   fprintf( pAO, "! gap size--each base in the gap counts as 1 error so autofinish tries\n");
   fprintf( pAO, "! to extend into gaps\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishPotentialHighQualityPartOfReadStart: %d\n",
       pCP->nAutoFinishPotentialHighQualityPartOfReadStart_ );

   fprintf( pAO, "! nReadUnpaddedConsPosStart + nAutoFinishPotentialHighQualityPartOfReadStart_\n");
   fprintf( pAO, "! == nReadUnpaddedConsPosStartOfPotentialHighQuality\n");
   fprintf( pAO, "! this is used to evaluate the quality of templates\n");
   fprintf( pAO, "! this no longer has much effect on the reads autofinish chooses\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishPotentialHighQualityPartOfReadEnd: %d\n",
       pCP->nAutoFinishPotentialHighQualityPartOfReadEnd_ );

   fprintf( pAO, "! nReadUnpaddedConsPosStart + nAutoFinishPotentialHighQualityPartOfReadEnd_\n");
   fprintf( pAO, "! == nReadUnpaddedConsPosEndOfPotentialHighQuality\n");
   fprintf( pAO, "! this is used to evaluate the quality of templates\n");
   fprintf( pAO, "! this no longer has much effect on the reads autofinish chooses\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishPrintCustomNavigationFileForChosenReads: %s\n",
     ( ( pCP->bAutoFinishPrintCustomNavigationFileForChosenReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! If this is true, then autofinish will print a file of the chosen reads\n");
   fprintf( pAO, "! in the format for consed to navigate (prev and next) to each\n");
   fprintf( pAO, "! location of the proposed new reads\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishReversesForFlankingGapsTemplateMustProtrudeFromContigThisMuch: %d\n",
       pCP->nAutoFinishReversesForFlankingGapsTemplateMustProtrudeFromContigThisMuch_ );

   fprintf( pAO, "! Normal case:\n");
   fprintf( pAO, "! --------------------------- (consensus)\n");
   fprintf( pAO, "!                  ----------- template1\n");
   fprintf( pAO, "!                     ----------- template2\n");
   fprintf( pAO, "!                          ----------- template3\n");
   fprintf( pAO, "! Then you probably would want to use template3 since a reverse is\n");
   fprintf( pAO, "! most likely to go in the other contig rather than go into gap.\n");
   fprintf( pAO, "! But suppose that template2 and template3 don't exist.  Would you\n");
   fprintf( pAO, "! want to use template1?  This parameter tells Autofinish whether you\n");
   fprintf( pAO, "! would want to use it, or pick no reverse at all.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishTagOligosWhenDoExperiments: %s\n",
     ( ( pCP->bAutoFinishTagOligosWhenDoExperiments_ ) ? "true" : "false" ) );

   fprintf( pAO, "! when autofinish is run with -doExperiments, tags the oligos\n");
   fprintf( pAO, "! it chooses\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersLookThisFarForForwardVectorInsertJunction: %d\n",
       pCP->nPrimersLookThisFarForForwardVectorInsertJunction_ );

   fprintf( pAO, "! don't change this--if no X's this far from beginning of read, then\n");
   fprintf( pAO, "! assume that you are in insert\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersDNAConcentrationNanomolar: %.3f\n",
        pCP->dPrimersDNAConcentrationNanomolar_ );

   fprintf( pAO, "! used for melting temperature--don't change this!\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersMaxMatchElsewhereScore: %d\n",
       pCP->nPrimersMaxMatchElsewhereScore_ );

   fprintf( pAO, "! used for testing false-annealing to template and to vector\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersMaxMatchElsewhereScoreForPCR: %d\n",
       pCP->nPrimersMaxMatchElsewhereScoreForPCR_ );

   fprintf( pAO, "! used for testing false-annealing to template and to vector\n");
   fprintf( pAO, "! when used with PCR\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersMaxSelfMatchScore: %d\n",
       pCP->nPrimersMaxSelfMatchScore_ );

   fprintf( pAO, "! cutoff for self-annealing of a primer\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersMaxPrimerDimerScoreForPCR: %d\n",
       pCP->nPrimersMaxPrimerDimerScoreForPCR_ );

   fprintf( pAO, "! careful changing this\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersMinQuality: %d\n",
       pCP->nPrimersMinQuality_ );

   fprintf( pAO, "! you must be sure of the sequence of a primer or it won't anneal to\n");
   fprintf( pAO, "! where you want\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersPrintInfoOnRejectedTemplates: %s\n",
     ( ( pCP->bPrimersPrintInfoOnRejectedTemplates_ ) ? "true" : "false" ) );

   fprintf( pAO, "! whether to print which templates were rejected and why (this output\n");
   fprintf( pAO, "! can be large )\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersSaltConcentrationMillimolar: %.3f\n",
        pCP->dPrimersSaltConcentrationMillimolar_ );

   fprintf( pAO, "! used for melting temperature--don't change this!\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersScreenForVector: %s\n",
     ( ( pCP->bPrimersScreenForVector_ ) ? "true" : "false" ) );

   fprintf( pAO, "! whether or not to screen primers for annealing to vector\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersToleranceForDifferentBeginningLocationOfUniversalPrimerReads: %d\n",
       pCP->nPrimersToleranceForDifferentBeginningLocationOfUniversalPrimerReads_ );

   fprintf( pAO, "! different forward reads or different reverse reads \n");
   fprintf( pAO, "! can differ by up to this amount in the starting location\n");
   fprintf( pAO, "! If they differ by more, then there is something wrong\n");
   fprintf( pAO, "! with the template (it is mislabeled?) so don't use it again for\n");
   fprintf( pAO, "! walking\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.primersTooManyVectorBasesInWalkingRead: %d\n",
       pCP->nPrimersTooManyVectorBasesInWalkingRead_ );

   fprintf( pAO, "! if there are this many x's, then don't walk again on this template\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoFinishMinSmithWatermanScoreOfARun: %d\n",
       pCP->nAutoFinishMinSmithWatermanScoreOfARun_ );

   fprintf( pAO, "! (NO) \n");
   fprintf( pAO, "consed.autoFinishDoNotComparePCRPrimersMoreThanThisManyTimes: %.3f\n",
        pCP->dAutoFinishDoNotComparePCRPrimersMoreThanThisManyTimes_ );

   fprintf( pAO, "! When autofinish tries to find a compatible set of pcr primers, it\n");
   fprintf( pAO, "! can take billions of tries.  This limits the number of tries so that,\n");
   fprintf( pAO, "! if autofinish can't find it in this number of tries, it gives up\n");
   fprintf( pAO, "! rather than running for days, weeks, years!\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoPCRAmplifyTooManySeriousFalseMatches: %d\n",
       pCP->nAutoPCRAmplifyTooManySeriousFalseMatches_ );

   fprintf( pAO, "! If a pcr primer pair has a significant false match to this many\n");
   fprintf( pAO, "! other places in the assembly, do not consider for possible pcr\n");
   fprintf( pAO, "! primer pairs.  This is just for the purpose of speeding up picking\n");
   fprintf( pAO, "! of primer pairs--the higher the number, the faster the searching,\n");
   fprintf( pAO, "! but the more likely a primer pair will be selected that will\n");
   fprintf( pAO, "! create multiple products.\n");
   fprintf( pAO, "! (NO)\n");
   fprintf( pAO, "consed.autoReportAllNeededSpeciesCode: %d\n",
       pCP->nAutoReportAllNeededSpeciesCode_ );

   fprintf( pAO, "! if 1, then require PPan|PTro, GGor, PPyg|MMul\n");
   fprintf( pAO, "! if 2, then require PTro, GGor, PPyg, MMul\n");
   fprintf( pAO, "! if 3, then require PTro, GGor, PPyg|MMul\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportUseCommasInBigNumbers: %s\n",
     ( ( pCP->bAutoReportUseCommasInBigNumbers_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintToCompareToReich: %s\n",
     ( ( pCP->bAutoReportPrintToCompareToReich_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportOnlyAllowSitesThatAreBetweenAcceptableSites: %s\n",
     ( ( pCP->bAutoReportOnlyAllowSitesThatAreBetweenAcceptableSites_ ) ? "true" : "false" ) );

   fprintf( pAO, "! in applyFilters.  This will guarantee that we can find \n");
   fprintf( pAO, "! deamination mutations.\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDeaminationMutationsDeterminedByMoreAccurateMethod: %s\n",
     ( ( pCP->bAutoReportDeaminationMutationsDeterminedByMoreAccurateMethod_ ) ? "true" : "false" ) );

   fprintf( pAO, "! in checkTreesAndRecordDeaminationMutations\n");
   fprintf( pAO, "! whether it uses PPan, GGor, and PPyg as well, or just human, PTro, and MMul\n");
   fprintf( pAO, "! This helps for comparison with the whole genome analysis which just\n");
   fprintf( pAO, "! had PTro, HSap, and MMul\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportChooseTreesUsingBadData: %s\n",
     ( ( pCP->bAutoReportChooseTreesUsingBadData_ ) ? "true" : "false" ) );

   fprintf( pAO, "! in applyFilters\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportChooseTreesByCountingDeaminationMutations: %s\n",
     ( ( pCP->bAutoReportChooseTreesByCountingDeaminationMutations_ ) ? "true" : "false" ) );

   fprintf( pAO, "! in applyFilters\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportChooseTreesUsingKimura: %s\n",
     ( ( pCP->bAutoReportChooseTreesUsingKimura_ ) ? "true" : "false" ) );

   fprintf( pAO, "! in applyFilters\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintCrudeChimpHumanMutations: %s\n",
     ( ( pCP->bAutoReportPrintCrudeChimpHumanMutations_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintPositionsForGraham: %s\n",
     ( ( pCP->bAutoReportPrintPositionsForGraham_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used with printFlankedColumns4\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintAncestralCpGs: %s\n",
     ( ( pCP->bAutoReportPrintAncestralCpGs_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used with printFlankedColumns4\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintCpGMutations: %s\n",
     ( ( pCP->bAutoReportPrintCpGMutations_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used with printFlankedColumns4\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintMutationsWithContext: %s\n",
     ( ( pCP->bAutoReportPrintMutationsWithContext_ ) ? "true" : "false" ) );

   fprintf( pAO, "! print columns that have mutations with flanking\n");
   fprintf( pAO, "! columns that are conserved\n");
   fprintf( pAO, "!(GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCountAllMutationsML: %s\n",
     ( ( pCP->bAutoReportCountAllMutationsML_ ) ? "true" : "false" ) );

   fprintf( pAO, "! counts all types of mutations and uses trees\n");
   fprintf( pAO, "! based on the probability of each tree\n");
   fprintf( pAO, "!(GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCountAllMutations: %s\n",
     ( ( pCP->bAutoReportCountAllMutations_ ) ? "true" : "false" ) );

   fprintf( pAO, "! counts deamination mutations in pairs of columns that\n");
   fprintf( pAO, "! both pass filters.\n");
   fprintf( pAO, "!(GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportIgnoreMultipleTrees: %s\n",
     ( ( pCP->bAutoReportIgnoreMultipleTrees_ ) ? "true" : "false" ) );

   fprintf( pAO, "! used with\n");
   fprintf( pAO, "! consed.autoReportCountAllMutations: false\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCountAcceptableColumnsWithNoneOnLeft: %s\n",
     ( ( pCP->bAutoReportCountAcceptableColumnsWithNoneOnLeft_ ) ? "true" : "false" ) );

   fprintf( pAO, "! count columns that pass all filters, but column to left of it\n");
   fprintf( pAO, "! doesn't pass all filters\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintFlankedColumns4: %s\n",
     ( ( pCP->bAutoReportPrintFlankedColumns4_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This differs from that below primarily in that it \n");
   fprintf( pAO, "! identifies deamination mutationsx\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportUseAnnotationFormat: %s\n",
     ( ( pCP->bAutoReportUseAnnotationFormat_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Used with consed.autoReportPrintFlankedColumns4: \n");
   fprintf( pAO, "! to print things out in a format that can be used for distinguishing\n");
   fprintf( pAO, "! the clades\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintFlankedColumns3: %s\n",
     ( ( pCP->bAutoReportPrintFlankedColumns3_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This differs from that below primarily in that it \n");
   fprintf( pAO, "! uses n instead of ? and prints trees\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintFlankedColumns2: %s\n",
     ( ( pCP->bAutoReportPrintFlankedColumns2_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This differs from that below primarily in that it \n");
   fprintf( pAO, "! doesn't require all species, but rather\n");
   fprintf( pAO, "! PPan | PTro && GGor && MMul | PPyg  \n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintFlankedColumns: %s\n",
     ( ( pCP->bAutoReportPrintFlankedColumns_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportHighQualitySegmentData: %s\n",
     ( ( pCP->bAutoReportHighQualitySegmentData_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportGoodReadsBug: %s\n",
     ( ( pCP->bAutoReportGoodReadsBug_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDiscrepancyRateInFlankedRegions: %s\n",
     ( ( pCP->bAutoReportDiscrepancyRateInFlankedRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDiscrepancyRateInFlankedRegions2: %s\n",
     ( ( pCP->bAutoReportDiscrepancyRateInFlankedRegions2_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDiscrepancyRateInFlankedRegions4: %s\n",
     ( ( pCP->bAutoReportDiscrepancyRateInFlankedRegions4_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDiscrepancyRateInFlankedRegions5: %s\n",
     ( ( pCP->bAutoReportDiscrepancyRateInFlankedRegions5_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportSingleSignalOrQuality: %s\n",
     ( ( pCP->bAutoReportSingleSignalOrQuality_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportLowQualityBasesInHQS: %s\n",
     ( ( pCP->bAutoReportLowQualityBasesInHQS_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareHQSWithLQS: %s\n",
     ( ( pCP->bAutoReportCompareHQSWithLQS_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCountColumnsForGroupsOfSpecies: %s\n",
     ( ( pCP->bAutoReportCountColumnsForGroupsOfSpecies_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportSingleSignalInfo: %s\n",
     ( ( pCP->bAutoReportSingleSignalInfo_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportSingleSignalInfo2: %s\n",
     ( ( pCP->bAutoReportSingleSignalInfo2_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Just used to print out the # of bases at each quality that are\n");
   fprintf( pAO, "! single signal and the # that are multiple signal.  For comparing\n");
   fprintf( pAO, "! 2004 reads with 2005 reads\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrands: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrands_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrandsNoHuman: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrandsNoHuman_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrands2: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrands2_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrands3: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrands3_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrands4: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrands4_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportTopStrandPinnedPosition: %d\n",
       pCP->nAutoReportTopStrandPinnedPosition_ );

   fprintf( pAO, "! for use with consed.autoReportCompareTopAndBottomStrands\n");
   fprintf( pAO, "! given in unpadded read pos in direction of sequencing\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportBottomStrandPinnedPosition: %d\n",
       pCP->nAutoReportBottomStrandPinnedPosition_ );

   fprintf( pAO, "! for use with consed.autoReportCompareTopAndBottomStrands\n");
   fprintf( pAO, "! given in unpadded read pos in direction of sequencing\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCompareTopAndBottomStrandsWithHuman: %s\n",
     ( ( pCP->bAutoReportCompareTopAndBottomStrandsWithHuman_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintLengthsOfAlignedSegmentsOfReads: %s\n",
     ( ( pCP->bAutoReportPrintLengthsOfAlignedSegmentsOfReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintLengthsOfUnalignedHighQualitySegmentsOfReads: %s\n",
     ( ( pCP->bAutoReportPrintLengthsOfUnalignedHighQualitySegmentsOfReads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintIfReadsAreCorrectlyAligned: %s\n",
     ( ( pCP->bAutoReportPrintIfReadsAreCorrectlyAligned_ ) ? "true" : "false" ) );

   fprintf( pAO, "! make sure that .f reads are top strand and .r reads are bottom\n");
   fprintf( pAO, "! strand (Note:  this only is true in some projects.)\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportCalculateErrorProbabilitiesByComparingPTroPPan: %s\n",
     ( ( pCP->bAutoReportCalculateErrorProbabilitiesByComparingPTroPPan_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintAgreeDisagreeBetweenPairsOfSpecies: %s\n",
     ( ( pCP->bAutoReportPrintAgreeDisagreeBetweenPairsOfSpecies_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintAgreeDisagreeBetweenPairsOfSpecies2: %s\n",
     ( ( pCP->bAutoReportPrintAgreeDisagreeBetweenPairsOfSpecies2_ ) ? "true" : "false" ) );

   fprintf( pAO, "! differs from above in that one or the other of the species bases\n");
   fprintf( pAO, "! must be at least quality 45\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportFilterSingleSignal: %s\n",
     ( ( pCP->bAutoReportFilterSingleSignal_ ) ? "true" : "false" ) );

   fprintf( pAO, "! Green 2004 data should not be filtered for single signal\n");
   fprintf( pAO, "! Green 2005 data should be\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportGoodHitReads: %s\n",
       (char*)pCP->filAutoReportGoodHitReads_.data() );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportQualityWindowLow: %d\n",
       pCP->nAutoReportQualityWindowLow_ );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportQualityWindowHigh: %d\n",
       pCP->nAutoReportQualityWindowHigh_ );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintNumberOfIsolatedPadsForEachSpecies: %s\n",
     ( ( pCP->bAutoReportPrintNumberOfIsolatedPadsForEachSpecies_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintNumberOfIsolatedPads: %s\n",
     ( ( pCP->bAutoReportPrintNumberOfIsolatedPads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportIsolatedPadsOfReadsWithThisPattern: %s\n",
       (char*)pCP->soAutoReportIsolatedPadsOfReadsWithThisPattern_.data() );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportMinNumberOfPerfectlyAlignedBasesBeforeDiscrepancy: %d\n",
       pCP->nAutoReportMinNumberOfPerfectlyAlignedBasesBeforeDiscrepancy_ );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportMaxSizeOfDiscrepantRegion: %d\n",
       pCP->nAutoReportMaxSizeOfDiscrepantRegion_ );

   fprintf( pAO, "! used for printing bases of a discrepant region\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportSizeOfDiscrepantRegion: %d\n",
       pCP->nAutoReportSizeOfDiscrepantRegion_ );

   fprintf( pAO, "! size of region between the flanking agreeing region\n");
   fprintf( pAO, "! duplicates parameter above\n");
   fprintf( pAO, "! (GREEN LAB) \n");
   fprintf( pAO, "consed.autoReportPrintMinimumQualityHistogram: %s\n",
     ( ( pCP->bAutoReportPrintMinimumQualityHistogram_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintDiscrepantRegions: %s\n",
     ( ( pCP->bAutoReportPrintDiscrepantRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintBasesInDiscrepantRegions: %s\n",
     ( ( pCP->bAutoReportPrintBasesInDiscrepantRegions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintDiscrepantRegionsButIgnoreReadsContainingThis: %s\n",
       (char*)pCP->soAutoReportPrintDiscrepantRegionsButIgnoreReadsContainingThis_.data() );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportBackboneReadHasThisStringInIt: %s\n",
       (char*)pCP->soAutoReportBackboneReadHasThisStringInIt_.data() );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintDiscrepantRegionsButOnlyIfAboveQualityThreshold: %s\n",
     ( ( pCP->bAutoReportPrintDiscrepantRegionsButOnlyIfAboveQualityThreshold_ ) ? "true" : "false" ) );

   fprintf( pAO, "! if true, \n");
   fprintf( pAO, "! uses consed.qualityThresholdForFindingHighQualityDiscrepancies \n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintSpeciesAlignment: %s\n",
     ( ( pCP->bAutoReportPrintSpeciesAlignment_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintReadAlignment: %s\n",
     ( ( pCP->bAutoReportPrintReadAlignment_ ) ? "true" : "false" ) );

   fprintf( pAO, "! This differs from consed.autoReportPrintSpeciesAlignment in that\n");
   fprintf( pAO, "! reads that are for the same species are not combined.  (This may be\n");
   fprintf( pAO, "! useful for labs other than the Green Lab.)\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintTheseReads: %s\n",
       (char*)pCP->filAutoReportPrintTheseReads_.data() );

   fprintf( pAO, "! for consed.autoReportPrintReadAlignment\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintReadPositions: %s\n",
     ( ( pCP->bAutoReportPrintReadPositions_ ) ? "true" : "false" ) );

   fprintf( pAO, "! use with consed.autoReportPrintSpeciesAlignment:\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrintChosenReadName: %s\n",
     ( ( pCP->bAutoReportPrintChosenReadName_ ) ? "true" : "false" ) );

   fprintf( pAO, "! use with consed.autoReportPrintSpeciesAlignment:\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportNumbersOfCharactersOfChosenReadNameToBePrinted: %d\n",
       pCP->nAutoReportNumbersOfCharactersOfChosenReadNameToBePrinted_ );

   fprintf( pAO, "! if the read name is larger than this, will print this number \n");
   fprintf( pAO, "! of characters at the end of the name.  If the read name is shorter,\n");
   fprintf( pAO, "! will just print the read name.\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportPrefix: %s\n",
       (char*)pCP->soAutoReportPrefix_.data() );

   fprintf( pAO, "! normally this will be the chromosome #\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportUseOldCriteriaForDeletingColumnsOfPads: %s\n",
     ( ( pCP->bAutoReportUseOldCriteriaForDeletingColumnsOfPads_ ) ? "true" : "false" ) );

   fprintf( pAO, "! I think:\n");
   fprintf( pAO, "! old: delete column of pads unless there is a certain non-pad (single\n");
   fprintf( pAO, "! signal, high quality, hqs, good hit read), aggressive method\n");
   fprintf( pAO, "! new: delete column of pads only if all combined reads are certain\n");
   fprintf( pAO, "! pads (high quality, high quality segment, single signal, good hit)\n");
   fprintf( pAO, "! conservative method\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportDeleteColumnsOfPadsBeforeAdjustingReadQualityValues: %s\n",
     ( ( pCP->bAutoReportDeleteColumnsOfPadsBeforeAdjustingReadQualityValues_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportFlankingBasesMustBeSingleSignal: %s\n",
     ( ( pCP->bAutoReportFlankingBasesMustBeSingleSignal_ ) ? "true" : "false" ) );

   fprintf( pAO, "! for use with consed.autoReportPrintMutationsWithContext:\n");
   fprintf( pAO, "! and others\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportMinimumQualityOfFlankingBases: %d\n",
       pCP->nAutoReportMinimumQualityOfFlankingBases_ );

   fprintf( pAO, "! for use with consed.autoReportPrintMutationsWithContext:\n");
   fprintf( pAO, "! and others\n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportFlankingBasesMustBeInHighQualitySegment: %s\n",
     ( ( pCP->bAutoReportFlankingBasesMustBeInHighQualitySegment_ ) ? "true" : "false" ) );

   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed.autoReportSpecies: %s\n",
       (char*)pCP->soAutoReportSpecies_.data() );

   fprintf( pAO, "! These must match primateSpecies.h constants \n");
   fprintf( pAO, "! nPPan, nPTro, nGGor, nPPyg, and nMMul  \n");
   fprintf( pAO, "! (GREEN LAB)\n");
   fprintf( pAO, "consed will use the following instead of consed.autoFinishMinNumberOfErrorsFixedByAnExp: %.3f\n",
       pCP->dAutoFinishMinNumberOfErrorsFixedByAnExpToUse_ );

   fprintf( pAO, "}\n(END OF PARAMETERS)\n\n" );
}