本文整理汇总了C++中bamtools::BamAlignment类的典型用法代码示例。如果您正苦于以下问题:C++ BamAlignment类的具体用法?C++ BamAlignment怎么用?C++ BamAlignment使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BamAlignment类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: getQuickStats
std::string getQuickStats(const std::string &bamFile, std::map< std::string, int > &keyLen, unsigned int &nFlowFZ, unsigned int &nFlowZM) {
std::string errMsg = "";
BamTools::BamReader bamReader;
if(!bamReader.Open(bamFile)) {
errMsg += "Failed to open bam " + bamFile + "\n";
return(errMsg);
}
BamTools::SamHeader samHeader = bamReader.GetHeader();
for (BamTools::SamReadGroupIterator itr = samHeader.ReadGroups.Begin(); itr != samHeader.ReadGroups.End(); ++itr ) {
if(itr->HasID())
keyLen[itr->ID] = itr->HasKeySequence() ? itr->KeySequence.length() : 0;
if(itr->HasFlowOrder())
nFlowZM = std::max(nFlowZM,(unsigned int) itr->FlowOrder.length());
}
BamTools::BamAlignment alignment;
std::vector<uint16_t> flowIntFZ;
while(bamReader.GetNextAlignment(alignment)) {
if(alignment.GetTag("FZ", flowIntFZ))
nFlowFZ = flowIntFZ.size();
break;
}
bamReader.Close();
if(nFlowFZ==0)
std::cout << "NOTE: bam file has no flow signals in FZ tag: " + bamFile + "\n";
if(nFlowZM==0)
std::cout << "NOTE: bam file has no flow signals in ZM tag: " + bamFile + "\n";
return(errMsg);
}
开发者ID:hgy851018,项目名称:TS,代码行数:28,代码来源:BamHelper.cpp
示例2: GetBamTags
bool GetBamTags(BamTools::BamAlignment &alignment,
const int &num_flows,
vector<float> &measurements,
vector<float> &phase_params,
int &start_flow) {
vector<int16_t> quantized_measurements;
// Retrieve normalized measurements from BAM file
if (not alignment.GetTag("ZM", quantized_measurements)) {
cerr << "ERROR: Normalized measurements ZM:tag is not present in read " << alignment.Name << endl;
return false;
}
if ((int)quantized_measurements.size() > num_flows) {
cerr << "ERROR: Normalized measurements ZM:tag length exceeds flow order length in read " << alignment.Name << endl;
return false;
}
measurements.assign(quantized_measurements.size(), 0.0);
for (size_t counter = 0; counter < quantized_measurements.size(); ++counter)
measurements.at(counter) = (float)quantized_measurements.at(counter)/256;
// Retrieve phasing parameters from BAM file
if (not alignment.GetTag("ZP", phase_params)) {
cerr << "ERROR: Phasing Parameters ZP:tag is not present in read " << alignment.Name << endl;
return false;
}
if (phase_params.size() != 3) {
cerr << "ERROR: Phasing Parameters ZP:tag does not have 3 phase parameters in read " << alignment.Name << endl;
return false;
}
if (phase_params[0] < 0 or phase_params[0] > 1 or phase_params[1] < 0 or phase_params[1] > 1
or phase_params[2] < 0 or phase_params[2] > 1) {
cerr << "ERROR: Phasing Parameters ZP:tag outside of [0,1] range in read " << alignment.Name << endl;
return false;
}
phase_params[2] = 0.0f; // ad-hoc corrector: zero droop
// Retrieve start flow
if (not alignment.GetTag("ZF", start_flow)) {
cerr << "ERROR: Start Flow ZF:tag not found in read " << alignment.Name << endl;
return false;
}
if (start_flow < 0 or start_flow >= num_flows) {
cerr << "ERROR: Start flow outsize of [0,num_flows) range in read " << alignment.Name << endl;
cerr << "Start flow: " << start_flow << " Number of flows: " << num_flows;
return false;
}
// A start flow of zero indicated a read that did not pass basecaller filters
if (start_flow == 0) {
cerr << "WARNING: Start Flow ZF:tag has zero value in read " << alignment.Name << endl;
return false;
}
return true;
}
开发者ID:fw1121,项目名称:Pandoras-Toolbox-for-Bioinformatics,代码行数:53,代码来源:BaseHypothesisEvaluator.cpp
示例3: get_haplotype
int SNPBamProcessor::get_haplotype(BamTools::BamAlignment& aln){
if (!aln.HasTag(HAPLOTYPE_TAG))
return -1;
uint8_t haplotype;
if (!aln.GetTag(HAPLOTYPE_TAG, haplotype)){
char type;
aln.GetTagType(HAPLOTYPE_TAG, type);
printErrorAndDie("Failed to extract haplotype tag");
}
assert(haplotype == 1 || haplotype == 2);
return (int)haplotype;
}
开发者ID:mrG7,项目名称:HipSTR,代码行数:12,代码来源:snp_bam_processor.cpp
示例4: get_library
std::string get_library(BamTools::BamAlignment& aln, std::map<std::string, std::string>& rg_to_library){
std::string rg;
std::string rg_tag = "RG";
char tag_type = 'Z';
if (!aln.GetTagType(rg_tag, tag_type))
printErrorAndDie("Failed to retrieve BAM alignment's RG tag");
aln.GetTag("RG", rg);
auto iter = rg_to_library.find(rg);
if (iter == rg_to_library.end())
printErrorAndDie("No library found for read group " + rg + " in BAM file headers");
return iter->second;
}
开发者ID:mrG7,项目名称:HipSTR,代码行数:12,代码来源:pcr_duplicates.cpp
示例5: getNextAlignment
bool getNextAlignment(BamTools::BamAlignment &alignment, BamTools::BamReader &bamReader, const std::map<std::string, int> &groupID, std::vector< BamTools::BamAlignment > &alignmentSample, std::map<std::string, int> &wellIndex, unsigned int nSample) {
if(nSample > 0) {
// We are randomly sampling, so next read should come from the sample that was already taken from the bam file
if(alignmentSample.size() > 0) {
alignment = alignmentSample.back();
alignmentSample.pop_back();
alignment.BuildCharData();
return(true);
} else {
return(false);
}
} else {
// No random sampling, so we're either returning everything or we're looking for specific read names
bool storeRead = false;
while(bamReader.GetNextAlignment(alignment)) {
if(groupID.size() > 0) {
std::string thisReadGroupID = "";
if( !alignment.GetTag("RG", thisReadGroupID) || (groupID.find(thisReadGroupID)==groupID.end()) );
continue;
}
storeRead=true;
if(wellIndex.size() > 0) {
// We are filtering by position, so check if we should skip or keep the read
int thisCol,thisRow;
if(1 != ion_readname_to_rowcol(alignment.Name.c_str(), &thisRow, &thisCol))
std::cerr << "Error parsing read name: " << alignment.Name << "\n";
std::stringstream wellIdStream;
wellIdStream << thisCol << ":" << thisRow;
std::map<std::string, int>::iterator wellIndexIter;
wellIndexIter = wellIndex.find(wellIdStream.str());
if(wellIndexIter != wellIndex.end()) {
// If the read ID matches we should keep, unless its a duplicate
if(wellIndexIter->second >= 0) {
storeRead=true;
wellIndexIter->second=-1;
} else {
storeRead=false;
std::cerr << "WARNING: found extra instance of readID " << wellIdStream.str() << ", keeping only first\n";
}
} else {
// read ID is not one we should keep
storeRead=false;
}
}
if(storeRead)
break;
}
return(storeRead);
}
}
开发者ID:hgy851018,项目名称:TS,代码行数:50,代码来源:BamHelper.cpp
示例6: TrackReadsOnRegion
void RegionCoverage::TrackReadsOnRegion( const BamTools::BamAlignment &aread, uint32_t endPos )
{
// track total and on-target reads
uint32_t readEnd = endPos ? endPos : aread.GetEndPosition();
uint32_t covType = ReadOnRegion( aread.RefID, aread.Position + 1, readEnd );
TargetContig *contig = m_contigList[m_rcovContigIdx];
if( aread.IsReverseStrand() ) {
++contig->fwdReads;
if( covType & 1 ) ++contig->fwdTrgReads;
} else {
++contig->revReads;
if( covType & 1 ) ++contig->revTrgReads;
}
}
开发者ID:biocyberman,项目名称:TS,代码行数:14,代码来源:RegionCoverage.cpp
示例7: GetFloatBamTag
bool ReadContainer::GetFloatBamTag(const BamTools::BamAlignment& aln,
const std::string& tag_name, float* destination) {
if (!aln.GetTag(tag_name, *destination)) {
return false;
}
return true;
}
开发者ID:roland-ewald,项目名称:lobstr-code,代码行数:7,代码来源:ReadContainer.cpp
示例8: getErrorRate
// Calculate the error rate between the read and the reference
double getErrorRate(BamTools::BamAlignment& record)
{
int nm = 0;
bool hasNM = record.GetTag("NM", nm);
if(hasNM)
return (double)nm / record.Length;
else
return 0.0f;
}
开发者ID:avilella,项目名称:sga,代码行数:10,代码来源:filterBAM.cpp
示例9: GetReadLength
uint32_t BamAlignmentReader::GetReadLength(const std::string& bamPath)
{
uint32_t bamReadLength = 300;
BamTools::BamReader bamReader;
if (!bamReader.Open(bamPath))
{
throw "Unable to open bam file";
}
BamTools::BamAlignment bamAlignment;
while(bamReader.GetNextAlignment(bamAlignment))
{
if (bamAlignment.IsPrimaryAlignment())
{
bamReadLength = bamAlignment.QueryBases.size();
break;
}
}
bamReader.Close();
return bamReadLength;
}
开发者ID:WilliamRichards2017,项目名称:graphite,代码行数:20,代码来源:BamAlignmentReader.cpp
示例10: readAlignmentPair
// Read an alignment pair from the BamReader.
// Returns false if the read fails
bool readAlignmentPair(BamTools::BamReader* pReader,
BamTools::BamAlignment& record1,
BamTools::BamAlignment& record2)
{
// Read a pair from the BAM
// Read record 1. Skip secondary alignments of the previous pair
do
{
if(!pReader->GetNextAlignment(record1))
return false;
} while(!record1.IsPrimaryAlignment());
// Read record 2.
do
{
if(!pReader->GetNextAlignment(record2))
return false;
} while(!record2.IsPrimaryAlignment());
return true;
}
开发者ID:avilella,项目名称:sga,代码行数:22,代码来源:filterBAM.cpp
示例11:
std::vector< IAlignment::SharedPtr > BamAlignmentReader::loadAlignmentsInRegion(Region::SharedPtr regionPtr, SampleManager::SharedPtr sampleManagerPtr, bool excludeDuplicateReads)
{
if (!m_is_open)
{
std::cout << "Bam file not opened" << std::endl;
exit(0);
}
std::vector< IAlignment::SharedPtr > alignmentPtrs;
int refID = this->m_bam_reader->GetReferenceID(regionPtr->getReferenceID());
// add 1 to the start and end positions because this is 0 based
this->m_bam_reader->SetRegion(refID, regionPtr->getStartPosition(), refID, regionPtr->getEndPosition());
// std::cout << "BamAlignmentReader.cpp refID: " << refID << std::endl;
BamTools::BamAlignment bamAlignment;
while(this->m_bam_reader->GetNextAlignment(bamAlignment))
{
if (bamAlignment.IsDuplicate() && excludeDuplicateReads) { continue; }
std::string sampleName;
bamAlignment.GetTag("RG", sampleName);
Sample::SharedPtr samplePtr = sampleManagerPtr->getSamplePtr(sampleName);
if (samplePtr == nullptr)
{
throw "There was an error in the sample name for: " + sampleName;
}
alignmentPtrs.push_back(std::make_shared< BamAlignment >(bamAlignment, samplePtr));
}
// std::this_thread::sleep_for(std::chrono::milliseconds(10000));
if (m_alignment_reader_manager_ptr != nullptr)
{
m_alignment_reader_manager_ptr->checkinReader(this->shared_from_this());
}
// std::cout << "got reads: " << regionPtr->getRegionString() << " " << alignmentPtrs.size() << std::endl;
return alignmentPtrs;
}
开发者ID:WilliamRichards2017,项目名称:graphite,代码行数:37,代码来源:BamAlignmentReader.cpp
示例12: insertRead
void bamParser::insertRead(const BamTools::BamAlignment& read, Reads& reads,
string& chr) {
int32_t loc = read.Position;
bool dir;
dir = (read.IsReverseStrand() ? false : true);
if (loc > 0) {
uint32_t tmp = (uint32_t) loc;
if (dir) {
reads.pos_reads.insertRead(chr, tmp);
} else {
reads.neg_reads.insertRead(chr, tmp);
}
}
}
开发者ID:drestion,项目名称:peakranger,代码行数:15,代码来源:bamParser.cpp
示例13: GetIntBamTag
bool ReadContainer::GetIntBamTag(const BamTools::BamAlignment& aln,
const std::string& tag_name, int* destination) {
char tag_type;
if (!aln.GetTagType(tag_name, tag_type)) {return false;}
switch (tag_type) {
case (BamTools::Constants::BAM_TAG_TYPE_INT32):
return aln.GetTag(tag_name, *destination);
case (BamTools::Constants::BAM_TAG_TYPE_INT8):
int8_t d8;
if (!aln.GetTag(tag_name, d8)) {
return false;
}
*destination = static_cast<int>(d8);
return true;
case (BamTools::Constants::BAM_TAG_TYPE_UINT8):
uint8_t ud8;
if (!aln.GetTag(tag_name, ud8)) {
return false;
}
*destination = static_cast<int>(ud8);
return true;
case (BamTools::Constants::BAM_TAG_TYPE_INT16):
int16_t d16;
if (!aln.GetTag(tag_name, d16)) {
return false;
}
*destination = static_cast<int>(d16);
return true;
case (BamTools::Constants::BAM_TAG_TYPE_UINT16):
uint16_t ud16;
if (!aln.GetTag(tag_name, ud16)) {
return false;
}
*destination = static_cast<int>(ud16);
return true;
case (BamTools::Constants::BAM_TAG_TYPE_UINT32):
uint32_t ud32;
if (!aln.GetTag(tag_name, ud32)) {
return false;
}
*destination = static_cast<int>(ud32);
return true;
default:
stringstream msg;
msg << "Encountered unsupported tag type " << tag_type;
PrintMessageDieOnError(msg.str(), ERROR);
}
return false;
}
开发者ID:roland-ewald,项目名称:lobstr-code,代码行数:49,代码来源:ReadContainer.cpp
示例14: getTagParanoid
bool getTagParanoid(BamTools::BamAlignment &alignment, const std::string &tag, int64_t &value) {
char tagType = ' ';
if(alignment.GetTagType(tag, tagType)) {
switch(tagType) {
case BamTools::Constants::BAM_TAG_TYPE_INT8: {
int8_t value_int8 = 0;
alignment.GetTag(tag, value_int8);
value = value_int8;
} break;
case BamTools::Constants::BAM_TAG_TYPE_UINT8: {
uint8_t value_uint8 = 0;
alignment.GetTag(tag, value_uint8);
value = value_uint8;
} break;
case BamTools::Constants::BAM_TAG_TYPE_INT16: {
int16_t value_int16 = 0;
alignment.GetTag(tag, value_int16);
value = value_int16;
} break;
case BamTools::Constants::BAM_TAG_TYPE_UINT16: {
uint16_t value_uint16 = 0;
alignment.GetTag(tag, value_uint16);
value = value_uint16;
} break;
case BamTools::Constants::BAM_TAG_TYPE_INT32: {
int32_t value_int32 = 0;
alignment.GetTag(tag, value_int32);
value = value_int32;
} break;
case BamTools::Constants::BAM_TAG_TYPE_UINT32: {
uint32_t value_uint32 = 0;
alignment.GetTag(tag, value_uint32);
value = value_uint32;
} break;
default: {
alignment.GetTag(tag, value);
} break;
}
return(true);
} else {
return(false);
}
}
开发者ID:hgy851018,项目名称:TS,代码行数:43,代码来源:BamHelper.cpp
示例15: InitializationClustering
void Config::InitializationClustering() {
struct stat st;
if(stat(Workspace.c_str(),&st) == 0 and st.st_mode and S_IFDIR != 0) Log("[Warning] Workspace directory already present");
else if (mkdir(Workspace.c_str(), 0755) != 0) {
Log("[Error] Could not create workspace directory: " + Workspace);
exit(1);
}
RunningTasksFile = Workspace + "/" + FilePrefix + "running.tasks";
StatsFile = Workspace + "/" + FilePrefix + "stats";
BinClusterFile = Workspace + "/" + FilePrefix + "bpc";
clusterFile = new ClusterFile(BinClusterFile);
clusterDir = Workspace + "/clusters/";
if(stat(clusterDir.c_str(),&st) == 0 and st.st_mode and S_IFDIR != 0) Log("[Warning] Cluster directory already present");
else if (mkdir(clusterDir.c_str(), 0755) != 0) {
Log("[Error] Could not create cluster directory: " + clusterDir);
exit(1);
}
insertsizeDir = Workspace + "/insertsize/";
if(stat(insertsizeDir.c_str(),&st) == 0 and st.st_mode and S_IFDIR != 0) Log("[Warning] Insertsize directory already present");
else if (mkdir(insertsizeDir.c_str(), 0755) != 0) {
Log("[Error] Could not create insertsize directory: " + insertsizeDir);
exit(1);
}
coverageDir = Workspace + "/coverage/";
if(stat(coverageDir.c_str(),&st) == 0 and st.st_mode and S_IFDIR != 0) Log("[Warning] Coverage directory already present");
else if (mkdir(coverageDir.c_str(), 0755) != 0) {
Log("[Error] Could not create coverage directory: " + coverageDir);
exit(1);
}
if (!ForwardBam.empty() && !ReverseBam.empty() && PairedBam.empty()) {
UsePairedBam = false;
} else if (ForwardBam.empty() && ReverseBam.empty() && !PairedBam.empty()) {
UsePairedBam = true;
} else {
Log("[Error] No correct bam file(s)");
exit(1);
}
BamTools::BamAlignment alignment;
BamTools::BamReader BamReader;
if (UsePairedBam) {
BamReader.Open(PairedBam);
if (not BamReader.IsOpen()) {
Log("[Error] Could not open paired bam");
exit(1);
}
if (PairedIndex.empty()) {
if (not BamReader.LocateIndex(BamTools::BamIndex::STANDARD)) {
PairedIndex = PairedBam.substr(0,PairedBam.find_last_of(".bam")-3) + ".bai";
BamReader.OpenIndex(PairedIndex);
}
if (not BamReader.HasIndex()) {
Log("[Error] No index for bamfile");
exit(1);
}
}
BamTools::SamHeader header = BamReader.GetHeader();
for (BamTools::SamReadGroupIterator it = header.ReadGroups.Begin(); it != header.ReadGroups.End(); it++) {
BamTools::SamReadGroup* readgroup = &*it;
readNameConverter.TrimName(readgroup->ID);
readNameConverter.AddReadGroup(readgroup->ID);
}
long int count = 0;
while (BamReader.GetNextAlignment(alignment)) {
string RG;
if (alignment.GetTag("RG", RG)) {
if (not NameTrim.empty()) readNameConverter.TrimName(RG);
if (readNameConverter.AddReadGroup(RG)) {
Log("[Warning] Readgroup '" + RG + "' found in reads but not in header");
count = 0;
}
}
count++;
if (count > 10000) break;
}
BamReader.Close();
} else {
BamReader.Open(ForwardBam);
if (not BamReader.IsOpen()) {
Log("[Error] Could not open first/forward bam");
exit(1);
}
if (ForwardIndex.empty()) {
if (not BamReader.LocateIndex(BamTools::BamIndex::STANDARD)) {
ForwardIndex = ForwardBam.substr(0,ForwardBam.find_last_of(".bam")-3) + ".bai";
BamReader.OpenIndex(ForwardIndex);
}
if (not BamReader.HasIndex()) {
Log("[Error] No index for forward bamfile");
exit(1);
}
}
BamTools::SamHeader forwardheader = BamReader.GetHeader();
for (BamTools::SamReadGroupIterator it = forwardheader.ReadGroups.Begin(); it != forwardheader.ReadGroups.End(); it++) {
BamTools::SamReadGroup* readgroup = &*it;
readNameConverter.TrimName(readgroup->ID);
readNameConverter.AddReadGroup(readgroup->ID);
}
//.........这里部分代码省略.........
开发者ID:ffinfo,项目名称:Picl,代码行数:101,代码来源:Config.cpp
示例16: getVariantCoverage
CoverageStats getVariantCoverage(BamTools::BamReader* pReader, const VCFRecord& record, const ReadTable* refTable)
{
CoverageStats stats;
static const int flankingSize = 100;
static const double minPercentIdentity = 95.0f;
bool is_snv = record.refStr.size() == 1 && record.varStr.size() == 1;
// Grab the reference haplotype
int eventLength = record.varStr.length();
int zeroBasedPos = record.refPosition - 1;
int start = zeroBasedPos - flankingSize - 1;
if(start < 0)
start = 0;
int end = zeroBasedPos + eventLength + 2 * flankingSize;
const SeqItem& chr = refTable->getRead(record.refName);
if(end > (int)chr.seq.length())
end = (int)chr.seq.length();
std::string reference_haplotype = chr.seq.substr(start, end - start);
int translatedPos = zeroBasedPos - start;
std::string variant_haplotype = reference_haplotype;
// Ensure that the reference string at the variant matches the expected
assert(variant_haplotype.substr(translatedPos, record.refStr.length()) == record.refStr);
variant_haplotype.replace(translatedPos, record.refStr.length(), record.varStr);
// Grab all reads in reference region
int refID = pReader->GetReferenceID(record.refName);
if(refID < 0)
return stats;
int refStart = record.refPosition;
int refEnd = record.refPosition;
pReader->SetRegion(refID, refStart, refID, refEnd);
BamTools::BamAlignment aln;
std::vector<double> mapping_quality;
std::vector<BamTools::BamAlignment> alignments;
while(pReader->GetNextAlignment(aln)) {
if(aln.MapQuality > 0)
alignments.push_back(aln);
mapping_quality.push_back(aln.MapQuality);
}
if(!mapping_quality.empty())
stats.median_mapping_quality = median(mapping_quality);
else
stats.median_mapping_quality = 60;
// Shuffle and take the first 200 alignments only
std::random_shuffle(alignments.begin(), alignments.end());
for(size_t i = 0; i < alignments.size() && i < opt::capAlignments; ++i) {
BamTools::BamAlignment alignment = alignments[i];
VariantReadSegments segments = splitReadAtVariant(alignment, record);
if(opt::verbose > 1)
{
fprintf(stderr, "var: %zu %s -> %s\n", record.refPosition, record.refStr.c_str(), record.varStr.c_str());
fprintf(stderr, "pos: %d\n", alignment.Position);
fprintf(stderr, "strand: %s\n", alignment.IsReverseStrand() ? "-" : "+");
fprintf(stderr, "read: %s\n", alignment.QueryBases.c_str());
fprintf(stderr, "qual: %s\n", alignment.Qualities.c_str());
fprintf(stderr, "alnb: %s\n", alignment.AlignedBases.c_str());
fprintf(stderr, "Pre: %s\n", segments.preSegment.c_str());
fprintf(stderr, "Var: %s\n", segments.variantSegment.c_str());
fprintf(stderr, "Pos: %s\n", segments.postSegment.c_str());
fprintf(stderr, "PreQual: %s\n", segments.preQual.c_str());
fprintf(stderr, "VarQual: %s\n", segments.variantQual.c_str());
fprintf(stderr, "PosQual: %s\n", segments.postQual.c_str());
}
bool aligned_at_variant = segments.variantSegment.size() > 0 &&
(segments.preSegment.size() > 0 || segments.postSegment.size() > 0);
if(!aligned_at_variant)
continue;
stats.n_total_reads += 1;
if(segments.variantSegment == record.refStr)
continue; // not an evidence read
// Align the read to the reference and variant haplotype
SequenceOverlap ref_overlap = Overlapper::computeOverlapAffine(alignment.QueryBases, reference_haplotype);
SequenceOverlap var_overlap = Overlapper::computeOverlapAffine(alignment.QueryBases, variant_haplotype);
bool quality_alignment = (ref_overlap.getPercentIdentity() >= minPercentIdentity ||
var_overlap.getPercentIdentity() >= minPercentIdentity);
bool is_evidence_read = quality_alignment && var_overlap.score > ref_overlap.score;
if(is_evidence_read)
{
//.........这里部分代码省略.........
开发者ID:snewhouse,项目名称:sga,代码行数:101,代码来源:somatic-variant-filters.cpp
示例17: ParseRead
bool ReadContainer::ParseRead(const BamTools::BamAlignment& aln,
AlignedRead* aligned_read,
map<pair<string,int>, string>& ref_ext_nucleotides) {
// get read ID
aligned_read->ID = aln.Name;
// get nucleotides
aligned_read->nucleotides = aln.QueryBases;
// get qualities
aligned_read->qualities = aln.Qualities;
// get strand
aligned_read->strand = aln.IsReverseStrand();
// get chrom
aligned_read->chrom = references.at(aln.RefID).RefName;
// get read start
aligned_read->read_start = aln.Position;
// get cigar
aligned_read->cigar_ops = aln.CigarData;
// get if mate pair
if (aln.IsSecondMate()) {
aligned_read->mate = 1;
} else {
aligned_read->mate = 0;
}
// Only process if it is the primary alignment
if (aligned_read->mate) {
return false;
}
// Get all the tag data
// don't process if partially spanning (from old lobSTR)
int partial = 0;
if (GetIntBamTag(aln, "XP", &partial)) {
if (partial == 1) return false;
}
// get read group
if (!GetStringBamTag(aln, "RG", &aligned_read->read_group)) {
stringstream msg;
msg << aln.Name << " Could not get read group.";
PrintMessageDieOnError(msg.str(), ERROR);
}
// get msStart
if (!GetIntBamTag(aln, "XS", &aligned_read->msStart)) {
stringstream msg;
msg << aln.Name << " from group " << aligned_read->read_group << " Could not get STR start coordinate. Did this bam file come from lobSTR?";
PrintMessageDieOnError(msg.str(), ERROR);
}
// get msEnd
if (!GetIntBamTag(aln, "XE", &aligned_read->msEnd)) {
stringstream msg;
msg << aln.Name << " from group " << aligned_read->read_group << " Could not get STR end coordinate. Did this bam file come from lobSTR?";
PrintMessageDieOnError(msg.str(), ERROR);
}
// get mapq. Try unsigned/signed
if (!GetIntBamTag(aln, "XQ", &aligned_read->mapq)) {
stringstream msg;
aligned_read->mapq = 0;
}
// get diff
if (!GetIntBamTag(aln, "XD", &aligned_read->diffFromRef)) {
return false;
}
// get mate dist
if (!GetIntBamTag(aln, "XM", &aligned_read->matedist)) {
aligned_read->matedist = 0;
}
// get STR seq
if (!GetStringBamTag(aln, "XR", &aligned_read->repseq)) {
stringstream msg;
msg << aln.Name << " from group " << aligned_read->read_group << " Could not get repseq.";
PrintMessageDieOnError(msg.str(), ERROR);
}
// get if stitched
if (!GetIntBamTag(aln, "XX", &aligned_read->stitched)) {
aligned_read->stitched = 0;
}
// get ref copy num
if (!GetFloatBamTag(aln, "XC", &aligned_read->refCopyNum)) {
stringstream msg;
msg << aln.Name << " from group " << aligned_read->read_group << " Could not get reference copy number.";
PrintMessageDieOnError(msg.str(), ERROR);
}
// get period
aligned_read->period = aligned_read->repseq.length();
if (include_flank) { // diff is just sum of differences in cigar
CIGAR_LIST cigar_list;
for (vector<BamTools::CigarOp>::const_iterator
it = aligned_read->cigar_ops.begin();
it != aligned_read->cigar_ops.end(); it++) {
CIGAR cig;
cig.num = (*it).Length;
cig.cigar_type = (*it).Type;
cigar_list.cigars.push_back(cig);
}
bool added_s;
bool cigar_had_s;
cigar_list.ResetString();
GenerateCorrectCigar(&cigar_list, aln.QueryBases,
&added_s, &cigar_had_s);
aligned_read->diffFromRef = GetSTRAllele(cigar_list);
}
// apply filters
//.........这里部分代码省略.........
开发者ID:roland-ewald,项目名称:lobstr-code,代码行数:101,代码来源:ReadContainer.cpp
示例18: filterByGraph
// Returns true if the paired reads are a short-insert pair
bool filterByGraph(StringGraph* pGraph,
const BamTools::RefVector& referenceVector,
BamTools::BamAlignment& record1,
BamTools::BamAlignment& record2)
{
std::string vertexID1 = referenceVector[record1.RefID].RefName;
std::string vertexID2 = referenceVector[record2.RefID].RefName;
// Get the vertices for this pair using the mapped IDs
Vertex* pX = pGraph->getVertex(vertexID1);
Vertex* pY = pGraph->getVertex(vertexID2);
// Ensure that the vertices are found
assert(pX != NULL && pY != NULL);
#ifdef DEBUG_CONNECT
std::cout << "Finding path from " << vertexID1 << " to " << vertexID2 << "\n";
#endif
EdgeDir walkDirectionXOut = ED_SENSE;
EdgeDir walkDirectionYIn = ED_SENSE;
// Flip walk directions if the alignment is to the reverse strand
if(record1.IsReverseStrand())
walkDirectionXOut = !walkDirectionXOut;
if(record2.IsReverseStrand())
walkDirectionYIn = !walkDirectionYIn;
int fromX = walkDirectionXOut == ED_SENSE ? record1.Position : record1.GetEndPosition();
int toY = walkDirectionYIn == ED_SENSE ? record2.Position : record2.GetEndPosition();
// Calculate the amount of contig X that already covers the fragment
// Using this number, we calculate how far we should search
int coveredX = walkDirectionXOut == ED_SENSE ? pX->getSeqLen() - fromX : fromX;
int maxWalkDistance = opt::maxDistance - coveredX;
bool bShortInsertPair = false;
if(pX == pY)
{
if(abs(record1.InsertSize) < opt::maxDistance)
bShortInsertPair = true;
}
else
{
SGWalkVector walks;
SGSearch::findWalks(pX, pY, walkDirectionXOut, maxWalkDistance, 10000, true, walks);
if(!walks.empty())
{
for(size_t i = 0; i < walks.size(); ++i)
{
std::string fragment = walks[i].getFragmentString(pX,
pY,
fromX,
toY,
walkDirectionXOut,
walkDirectionYIn);
if((int)fragment.size() < opt::maxDistance)
{
bShortInsertPair = true;
//std::cout << "Found completing fragment (" << pX->getID() << " -> " << pY->getID() << ": " << fragment.size() << "\n";
break;
}
}
}
}
return bShortInsertPair;
}
开发者ID:avilella,项目名称:sga,代码行数:72,代码来源:filterBAM.cpp
示例19: BaseHypothesisEvaluator
// Function to fill in predicted signal values
void BaseHypothesisEvaluator(BamTools::BamAlignment &alignment,
const string &flow_order_str,
const string &alt_base_hyp,
float &delta_score,
float &fit_score,
int heavy_verbose) {
// --- Step 1: Initialize Objects and retrieve relevant tags
delta_score = 1e5;
fit_score = 1e5;
vector<string> Hypotheses(2);
vector<float> measurements, phase_params;
int start_flow, num_flows, prefix_flow=0;
if (not GetBamTags(alignment, flow_order_str.length(), measurements, phase_params, start_flow))
return;
num_flows = measurements.size();
ion::FlowOrder flow_order(flow_order_str, num_flows);
BasecallerRead master_read;
master_read.SetData(measurements, flow_order.num_flows());
TreephaserLite treephaser(flow_order);
treephaser.SetModelParameters(phase_params[0], phase_params[1]);
// --- Step 2: Solve beginning of the read
// Look at mapped vs. unmapped reads in BAM
Hypotheses[0] = alignment.QueryBases;
Hypotheses[1] = alt_base_hyp;
// Safety: reverse complement reverse strand reads in mapped bam
if (alignment.IsMapped() and alignment.IsReverseStrand()) {
RevComplementInPlace(Hypotheses[0]);
RevComplementInPlace(Hypotheses[1]);
}
prefix_flow = GetMasterReadPrefix(treephaser, flow_order, start_flow, Hypotheses[0], master_read);
unsigned int prefix_size = master_read.sequence.size();
// --- Step 3: creating predictions for the individual hypotheses
vector<BasecallerRead> hypothesesReads(Hypotheses.size());
vector<float> squared_distances(Hypotheses.size(), 0.0);
int max_last_flow = 0;
for (unsigned int i_hyp=0; i_hyp<hypothesesReads.size(); ++i_hyp) {
hypothesesReads[i_hyp] = master_read;
// --- add hypothesis sequence to clipped prefix
unsigned int i_base = 0;
int i_flow = prefix_flow;
while (i_base<Hypotheses[i_hyp].length() and i_base<(2*(unsigned int)flow_order.num_flows()-prefix_size)) {
while (i_flow < flow_order.num_flows() and flow_order.nuc_at(i_flow) != Hypotheses[i_hyp][i_base])
i_flow++;
if (i_flow < flow_order.num_flows() and i_flow > max_last_flow)
max_last_flow = i_flow;
if (i_flow >= flow_order.num_flows())
break;
// Add base to sequence only if it fits into flow order
hypothesesReads[i_hyp].sequence.push_back(Hypotheses[i_hyp][i_base]);
i_base++;
}
i_flow = min(i_flow, flow_order.num_flows()-1);
// Solver simulates beginning of the read and then fills in the remaining clipped bases for which we have flow information
treephaser.Solve(hypothesesReads[i_hyp], num_flows, i_flow);
}
// Compute L2-distance of measurements and predictions
for (unsigned int i_hyp=0; i_hyp<hypothesesReads.size(); ++i_hyp) {
for (int iFlow=0; iFlow<=max_last_flow; iFlow++)
squared_distances[i_hyp] += (measurements.at(iFlow) - hypothesesReads[i_hyp].prediction.at(iFlow)) *
(measurements.at(iFlow) - hypothesesReads[i_hyp].prediction.at(iFlow));
}
// Delta: L2-distance of alternative base Hypothesis - L2-distance of bases as called
delta_score = squared_distances.at(1) - squared_distances.at(0);
fit_score = min(squared_distances.at(1), squared_distances.at(0));
// --- verbose ---
if (heavy_verbose > 1 or (delta_score < 0 and heavy_verbose > 0)) {
cout << "Processed read " << alignment.Name << endl;
cout << "Delta Fit: " << delta_score << " Overall Fit: " << fit_score << endl;
PredictionGenerationVerbose(Hypotheses, hypothesesReads, phase_params, flow_order, start_flow, prefix_size);
}
}
开发者ID:fw1121,项目名称:Pandoras-Toolbox-for-Bioinformatics,代码行数:87,代码来源:BaseHypothesisEvaluator.cpp
注:本文中的bamtools::BamAlignment类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论