/***************************************************************************** # 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 "countsOfWhyPrimersAreNotAcceptable.h" #include "whyIsPrimerNotAcceptableTypes.h" void countsOfWhyPrimersAreNotAcceptable :: getCountsInString( RWCString& soExplanation ) { soExplanation.increaseMaxLengthIfNecessary( 2000 ); soExplanation += "acceptable primers: "; soExplanation += RWCString( (long) nAcceptablePrimers_ ); soExplanation += "\n"; soExplanation += "unacceptable primers: "; soExplanation += RWCString( (long) nUnacceptablePrimers_ ); soExplanation += "\n"; soExplanation += "primers tried: "; soExplanation += RWCString( (long) nTotalPrimersTried_ ); soExplanation += "\n"; soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "acceptable primers: %6.2f%% (%d)\n", (float) nAcceptablePrimers_ * 100 / nTotalPrimersTried_, nAcceptablePrimers_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers anneal to sequences in file: %6.2f%% (%d)\n", (float) nBAD_PRIMER_STICKS_TO_SEQUENCE_IN_FILE_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_STICKS_TO_SEQUENCE_IN_FILE_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers too low quality: %6.2f%% (%d)\n", (float) nBAD_PRIMER_TOO_LOW_QUALITY_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_TOO_LOW_QUALITY_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers anneal to somewhere else in assembly: %6.2f%% (%d)\n", (float) nBAD_PRIMER_STICKS_TO_SOMEWHERE_ELSE_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_STICKS_TO_SOMEWHERE_ELSE_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers anneal to self: %6.2f%% (%d)\n", (float) nBAD_PRIMER_STICKS_TO_SELF_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_STICKS_TO_SELF_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers melting temp too low: %6.2f%% (%d)\n", (float) nBAD_PRIMER_MELTING_TEMPERATURE_TOO_LOW_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_MELTING_TEMPERATURE_TOO_LOW_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers melting temp too high: %6.2f%% (%d)\n", (float) nBAD_PRIMER_MELTING_TEMPERATURE_TOO_HIGH_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_MELTING_TEMPERATURE_TOO_HIGH_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers with mononucleotide repeats: %6.2f%% (%d)\n", (float) nBAD_PRIMER_MONONUCLEOTIDE_REPEAT_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_MONONUCLEOTIDE_REPEAT_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers with no template: %6.2f%% (%d)\n", (float) nBAD_PRIMER_HAS_NO_TEMPLATE_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_HAS_NO_TEMPLATE_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers with not enough templates: %6.2f%% (%d)\n", (float) nBAD_PRIMER_NOT_ENOUGH_TEMPLATES_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_NOT_ENOUGH_TEMPLATES_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers in single subclone region: %6.2f%% (%d)\n", (float) nBAD_PRIMER_IN_SINGLE_SUBCLONE_REGION_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_IN_SINGLE_SUBCLONE_REGION_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers where high quality discrepancies: %6.2f%% (%d)\n", (float) nBAD_PRIMER_WHERE_HIGH_QUALITY_DISCREPANCIES_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_WHERE_HIGH_QUALITY_DISCREPANCIES_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers where high quality unaligned region: %6.2f%% (%d)\n", (float) nBAD_PRIMER_WHERE_UNALIGNED_HIGH_QUALITY_REGION_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_WHERE_UNALIGNED_HIGH_QUALITY_REGION_ ); soExplanation.increaseMaxLengthIfNecessary( 200 ); soExplanation.appendFormat( "primers with not all acgt: %6.2f%% (%d)\n", (float) nBAD_PRIMER_NOT_JUST_ACGT_ * 100 / nTotalPrimersTried_, nBAD_PRIMER_NOT_JUST_ACGT_ ); } void countsOfWhyPrimersAreNotAcceptable :: accountForOnePrimer( const primerType* pPrimer ) { ++nTotalPrimersTried_; if ( pPrimer->bAcceptable_ ) ++nAcceptablePrimers_; else { ++nUnacceptablePrimers_; switch( pPrimer->nWhyIsPrimerNotAcceptable_ ) { case BAD_PRIMER_STICKS_TO_SEQUENCE_IN_FILE: ++nBAD_PRIMER_STICKS_TO_SEQUENCE_IN_FILE_; break; case BAD_PRIMER_STICKS_TO_SOMEWHERE_ELSE: ++nBAD_PRIMER_STICKS_TO_SOMEWHERE_ELSE_; break; case BAD_PRIMER_STICKS_TO_SELF: ++nBAD_PRIMER_STICKS_TO_SELF_; break; case BAD_PRIMER_MELTING_TEMPERATURE_TOO_LOW: ++nBAD_PRIMER_MELTING_TEMPERATURE_TOO_LOW_; break; case BAD_PRIMER_MELTING_TEMPERATURE_TOO_HIGH: ++nBAD_PRIMER_MELTING_TEMPERATURE_TOO_HIGH_; break; case BAD_PRIMER_TOO_LOW_QUALITY: ++nBAD_PRIMER_TOO_LOW_QUALITY_; break; case BAD_PRIMER_MONONUCLEOTIDE_REPEAT: ++nBAD_PRIMER_MONONUCLEOTIDE_REPEAT_; break; case BAD_PRIMER_HAS_NO_TEMPLATE: ++nBAD_PRIMER_HAS_NO_TEMPLATE_; break; case BAD_PRIMER_NOT_ENOUGH_TEMPLATES: ++nBAD_PRIMER_NOT_ENOUGH_TEMPLATES_; break; case BAD_PRIMER_IN_SINGLE_SUBCLONE_REGION: ++nBAD_PRIMER_IN_SINGLE_SUBCLONE_REGION_; break; case BAD_PRIMER_WHERE_HIGH_QUALITY_DISCREPANCIES: ++nBAD_PRIMER_WHERE_HIGH_QUALITY_DISCREPANCIES_; break; case BAD_PRIMER_WHERE_UNALIGNED_HIGH_QUALITY_REGION: ++nBAD_PRIMER_WHERE_UNALIGNED_HIGH_QUALITY_REGION_; break; case BAD_PRIMER_NOT_JUST_ACGT: ++nBAD_PRIMER_NOT_JUST_ACGT_; break; case BAD_PRIMER_PAIR_FORMS_PRODUCT_SOMEWHERE_ELSE: ++nBAD_PRIMER_PAIR_FORMS_PRODUCT_SOMEWHERE_ELSE_; break; case BAD_PRIMER_PAIR_FORMS_PRODUCT_WITHIN_OR_ENCLOSING_DESIRED_PRODUCT: ++nBAD_PRIMER_PAIR_FORMS_PRODUCT_WITHIN_OR_ENCLOSING_DESIRED_PRODUCT_; break; case BAD_PRIMER_PAIR_TEMP_DIFF_TOO_GREAT: ++nBAD_PRIMER_PAIR_TEMP_DIFF_TOO_GREAT_; break; case BAD_PRIMER_PAIR_FORMS_PRIMER_DIMER: ++nBAD_PRIMER_PAIR_FORMS_PRIMER_DIMER_; break; } } } void countsOfWhyPrimersAreNotAcceptable :: accountForAllPrimers( primerType* pPrimerArray, const int nNumberOfPrimers ) { ZERO_ALL_COUNTS; for( int nPrimer = 0; nPrimer < nNumberOfPrimers; ++nPrimer ) { primerType* pPrimer = pPrimerArray + nPrimer; accountForOnePrimer( pPrimer ); } }