本文整理汇总了C++中bamtools::BamAlignment::GetEndPosition方法的典型用法代码示例。如果您正苦于以下问题:C++ BamAlignment::GetEndPosition方法的具体用法?C++ BamAlignment::GetEndPosition怎么用?C++ BamAlignment::GetEndPosition使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类bamtools::BamAlignment
的用法示例。
在下文中一共展示了BamAlignment::GetEndPosition方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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;
}
}
示例2: ParseRead
//.........这里部分代码省略.........
}
// 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
if (unit) {
if (aligned_read->diffFromRef % aligned_read->period != 0){
filter_counter.increment(FilterCounter::NOT_UNIT);
return false;
}
}
if (abs(aligned_read->diffFromRef) > max_diff_ref) {
filter_counter.increment(FilterCounter::DIFF_FROM_REF);
return false;
}
if (aligned_read->mapq > max_mapq) {
filter_counter.increment(FilterCounter::MAPPING_QUALITY);
return false;
}
if (aligned_read->matedist > max_matedist) {
filter_counter.increment(FilterCounter::MATE_DIST);
return false;
}
// Check if the allele length is valid
if (aligned_read->diffFromRef + (aligned_read->refCopyNum*aligned_read->period) < MIN_ALLELE_SIZE) {
filter_counter.increment(FilterCounter::ALLELE_SIZE);
return false;
}
// check that read sufficiently spans STR
int max_read_start = aligned_read->msStart - min_border;
int min_read_stop = aligned_read->msEnd + min_border;
if (aln.Position > max_read_start || aln.GetEndPosition() < min_read_stop){
filter_counter.increment(FilterCounter::SPANNING_AMOUNT);
return false;
}
// check that both ends of the read contain sufficient perfect matches
if (min_read_end_match > 0){
map<pair<string,int>, string>::iterator loc_iter = ref_ext_nucleotides.find(pair<string,int>(aligned_read->chrom, aligned_read->msStart));
if (loc_iter == ref_ext_nucleotides.end())
PrintMessageDieOnError("No extended reference sequence found for locus", ERROR);
string ref_ext_seq = loc_iter->second;
pair<int,int> num_end_matches = AlignmentFilters::GetNumEndMatches(aligned_read, ref_ext_seq, aligned_read->msStart-extend);
if (num_end_matches.first < min_read_end_match || num_end_matches.second < min_read_end_match){
filter_counter.increment(FilterCounter::NUM_END_MATCHES);
return false;
}
}
// check that the prefix and suffix of the read match maximally compared to proximal reference locations
if (maximal_end_match_window > 0){
map<pair<string,int>, string>::iterator loc_iter = ref_ext_nucleotides.find(pair<string,int>(aligned_read->chrom, aligned_read->msStart));
if (loc_iter == ref_ext_nucleotides.end())
PrintMessageDieOnError("No extended reference sequence found for locus", ERROR);
string ref_ext_seq = loc_iter->second;
bool maximum_end_matches = AlignmentFilters::HasLargestEndMatches(aligned_read, ref_ext_seq, aligned_read->msStart-extend, maximal_end_match_window, maximal_end_match_window);
if (!maximum_end_matches){
filter_counter.increment(FilterCounter::NOT_MAXIMAL_END);
return false;
}
}
// check that both ends of the aligned read have sufficient bases before the first indel
if (min_bp_before_indel > 0){
pair<int, int> num_bps = AlignmentFilters::GetEndDistToIndel(aligned_read);
if (num_bps.first != -1 && num_bps.first < min_bp_before_indel){
filter_counter.increment(FilterCounter::BP_BEFORE_INDEL);
return false;
}
if (num_bps.second != -1 && num_bps.second < min_bp_before_indel){
filter_counter.increment(FilterCounter::BP_BEFORE_INDEL);
return false;
}
}
filter_counter.increment(FilterCounter::UNFILTERED);
return true;
}
示例3: 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;
}