VectorSiteContainer * SequenceApplicationTools::getSitesToAnalyse( const SiteContainer & allSites, map<string, string> & params, string suffix, bool suffixIsOptional, bool gapAsUnknown, bool verbose) { // Fully resolved sites, i.e. without jokers and gaps: VectorSiteContainer * sitesToAnalyse; string option = ApplicationTools::getStringParameter("sequence.sites_to_use", params, "complete", suffix, suffixIsOptional); if(verbose) ApplicationTools::displayResult("Sites to use", option); sitesToAnalyse = new VectorSiteContainer(allSites); if(option == "all") { string maxGapOption = ApplicationTools::getStringParameter("sequence.max_gap_allowed", params, "100%", suffix, suffixIsOptional); if(maxGapOption[maxGapOption.size()-1] == '%') { double gapFreq = TextTools::toDouble(maxGapOption.substr(0,maxGapOption.size()-1)) / 100.; for(unsigned int i = sitesToAnalyse->getNumberOfSites(); i > 0; i--) { map<int, double> freq; SiteTools::getFrequencies(*sitesToAnalyse->getSite(i-1), freq); if(freq[-1] > gapFreq) sitesToAnalyse->deleteSite(i-1); } } else { unsigned int gapNum=TextTools::to<unsigned int>(maxGapOption); for(unsigned int i = sitesToAnalyse->getNumberOfSites(); i > 0; i--) { map<int, unsigned int> counts; SiteTools::getCounts(*sitesToAnalyse->getSite(i-1), counts); if(counts[-1] > gapNum) sitesToAnalyse->deleteSite(i-1); } } if(gapAsUnknown) { SiteContainerTools::changeGapsToUnknownCharacters(*sitesToAnalyse); } } else if(option == "complete") { sitesToAnalyse = dynamic_cast<VectorSiteContainer *>(SiteContainerTools::getCompleteSites(allSites)); int nbSites = sitesToAnalyse->getNumberOfSites(); if(verbose) ApplicationTools::displayResult("Complete sites", TextTools::toString(nbSites)); } else if(option == "nogap") { sitesToAnalyse = dynamic_cast<VectorSiteContainer *>(SiteContainerTools::getSitesWithoutGaps(allSites)); int nbSites = sitesToAnalyse->getNumberOfSites(); if(verbose) ApplicationTools::displayResult("Sites without gap", TextTools::toString(nbSites)); } else { ApplicationTools::displayError("Option '" + option + "' unknown in parameter 'sequence.sitestouse'."); exit(-1); } return sitesToAnalyse; }