Mercurial > repos > aaronquinlan > multi_intersect
diff BEDTools-Version-2.14.3/src/multiBamCov/multiBamCov.cpp @ 1:bec36315bd12 default tip
Deleted selected files
author | aaronquinlan |
---|---|
date | Sat, 19 Nov 2011 14:17:03 -0500 |
parents | dfcd8b6c1bda |
children |
line wrap: on
line diff
--- a/BEDTools-Version-2.14.3/src/multiBamCov/multiBamCov.cpp Thu Nov 03 10:25:04 2011 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/***************************************************************************** - multiBamCov.cpp - - (c) 2009 - Aaron Quinlan - Hall Laboratory - Department of Biochemistry and Molecular Genetics - University of Virginia - aaronquinlan@gmail.com - - Licenced under the GNU General Public License 2.0 license. -******************************************************************************/ -#include "lineFileUtilities.h" -#include "multiBamCov.h" -#include "api/BamMultiReader.h" - - -/* - Constructor -*/ -MultiCovBam::MultiCovBam(const vector<string> &bam_files, const string bed_file, - int minQual, bool properOnly, - bool keepDuplicates, bool keepFailedQC) -: -_bam_files(bam_files), -_bed_file(bed_file), -_minQual(minQual), -_properOnly(properOnly), -_keepDuplicates(keepDuplicates), -_keepFailedQC(keepFailedQC) -{ - _bed = new BedFile(_bed_file); - LoadBamFileMap(); -} - - -/* - Destructor -*/ -MultiCovBam::~MultiCovBam(void) -{} - - - -void MultiCovBam::CollectCoverage() -{ - BamMultiReader reader; - - if ( !reader.Open(_bam_files) ) - { - cerr << "Could not open input BAM files." << endl; - exit(1); - } - else - { - // attempt to find index files - reader.LocateIndexes(); - - // if index data available for all BAM files, we can use SetRegion - if ( reader.HasIndexes() ) { - BED bed, nullBed; - int lineNum = 0; - BedLineStatus bedStatus; - - _bed->Open(); - // loop through each BED entry, jump to it, - // and collect coverage from each BAM - while ((bedStatus = _bed->GetNextBed(bed, lineNum)) != BED_INVALID) - { - if (bedStatus == BED_VALID) - { - // initialize counts for each file to 0 - vector<int> counts(_bam_files.size(), 0); - // get the BAM refId for this chrom. - int refId = reader.GetReferenceID(bed.chrom); - // set up a BamRegion to which to attempt to jump - BamRegion region(refId, (int)bed.start, refId, (int)bed.end); - - // everything checks out, just iterate through specified region, counting alignments - if ( (refId != -1) && (reader.SetRegion(region)) ) { - BamAlignment al; - while ( reader.GetNextAlignment(al) ) - { - bool duplicate = al.IsDuplicate(); - bool failedQC = al.IsFailedQC(); - if (_keepDuplicates) duplicate = false; - if (_keepFailedQC) failedQC = false; - // map qual must exceed minimum - if ((al.MapQuality >= _minQual) && (!duplicate) && (!failedQC)) { - // ignore if not properly paired and we actually care. - if (_properOnly && !al.IsProperPair()) - continue; - - // lookup the offset of the file name and tabulate - //coverage for the appropriate file - counts[bamFileMap[al.Filename]]++; - } - } - } - // report the cov at this interval for each file and reset - _bed->reportBedTab(bed); - ReportCounts(counts); - bed = nullBed; - } - } - _bed->Close(); - } - else { - cerr << "Could not find indexes." << endl; - reader.Close(); - exit(1); - } - } -} - - -void MultiCovBam::LoadBamFileMap(void) -{ - for (size_t i = 0; i < _bam_files.size(); ++i) - { - bamFileMap[_bam_files[i]] = i; - } -} - -void MultiCovBam::ReportCounts(const vector<int> &counts) -{ - for (size_t i = 0; i < counts.size(); ++i) - { - if (i < counts.size() - 1) - cout << counts[i] << "\t"; - else - cout << counts[i]; - } - cout << endl; -}