string Analyzer::getTestResuls(){ string results = ""; NumberSystem* best; float bestAvg = 1000000; int min = pow(10,DIGITS-1); int max = pow(10,DIGITS) - 1; float avgLength = 0; NumberSystem* currSystem; results.append("MIN:"); results.append(AlphaConverter::integerToString(min)); results.append(" MAX:"); results.append(AlphaConverter::integerToString(max)); results += '\n'; for(unsigned int i = 0; i < systems.size(); i++){ currSystem = &(systems.at(i)); avgLength = getAverageLength(min,max,currSystem); results.append(currSystem->getDescription()); results.append(" avgBitsPerDigit = "); avgLength /= (float)DIGITS; results.append(AlphaConverter::floatToString(avgLength)); results += '\n'; if(avgLength < bestAvg){ bestAvg = avgLength; best = currSystem; } } results.append("Best System: "); results.append(best->getDescription()); results.append(" avgBitsPerDigit = "); results.append(AlphaConverter::floatToString(bestAvg)); return results; }
KmerRepresentativeComputer WindowsStorage::getRepresentativeComputer(junction window, string seed, size_t min_cover, float percent_cover, size_t nb_sampled) { assert(! hasLimitForReadsPerWindow() || nb_sampled <= getMaximalNbReadsPerWindow()); list<Sequence> auditioned_sequences = getSample(window,nb_sampled); KmerRepresentativeComputer repComp(auditioned_sequences, seed); repComp.setRevcomp(true); repComp.setMinCover((! isInterestingJunction(window)) ? min_cover : 1); repComp.setPercentCoverage(percent_cover); repComp.setRequiredSequence(window); repComp.setCoverageReferenceLength(getAverageLength(window)); repComp.compute(*scorer); // We should always have a representative, because either the junction is labelled (thus setMinCover(1)), or: // - there is at least min('min_reads_clone', 'max_auditioned') sequences in auditioned_sequences // - and 'min_cover' = min('min_reads_clone', 'max_auditioned') // - and these sequence are at least as long as the seed if (!repComp.hasRepresentative()) throw invalid_argument("No representative for junction " + window); return repComp; }