コード例 #1
0
RegionAnnotation
RegionAnnotations::TheHQRegion() const {
    std::vector<RegionAnnotation> hqs_ = HQRegions();
    if (hqs_.size() == 0)
        return RegionAnnotation(holeNumber_, RegionTypeMap::ToIndex(HQRegion, types_), 0, 0, 0);
    else if (hqs_.size() == 1)
        return hqs_[0];
    else assert(false && "Zmw has more than one HQRegion.");
}
コード例 #2
0
bool HDFPulseWriter::WriteOneZmw(const SMRTSequence& seq,
                                 const std::vector<RegionAnnotation>& regions)
{
    if (not this->WriteOneZmw(seq)) {
        return false;
    }
    if (HasRegions()) {
        if (regions.size() == 0) {
            std::vector<RegionAnnotation> fake = {
                RegionAnnotation(seq.HoleNumber(), HQRegion, 0, 0, 0)};
            return regionsWriter_->Write(fake);
        } else {
            return regionsWriter_->Write(regions);
        }
    }
    return true;
}
コード例 #3
0
std::vector<ReadInterval>
RegionAnnotations::SubreadIntervals(const DNALength wholeLength,
                                    const bool byAdapter,
                                    const bool byHQRegion) const {
    std::vector<RegionAnnotation> inserts;
    if (not byAdapter) {
        inserts = Inserts();
    } else {
        if (Adapters().size() != 0) {
            // Must have at least one adapter in order find inserts by adapter.
            std::vector<DNALength> starts, ends;
            starts.push_back(0);
            for(auto adapter: Adapters()) {
                assert(wholeLength >= static_cast<DNALength>(adapter.GetStart()) and
                       wholeLength >= static_cast<DNALength>(adapter.GetEnd())); // bug if fail assert
                starts.push_back(adapter.GetEnd());
                ends.push_back(adapter.GetStart());
            }
            ends.push_back(wholeLength);

            for (size_t i = 0; i < starts.size(); i++) {
                // Use adapter to infer subreads, read score considered unknown.
                if (ends[i] > starts[i]) {
                    inserts.push_back(RegionAnnotation(holeNumber_, Insert, starts[i], ends[i], 0));
                }
            }
        } // else no inserts can be found
    }

    std::vector<ReadInterval> ret;
    for (auto insert: inserts) {
        if (byHQRegion) {
            if (HasHQRegion()) {
                DNALength s = std::max(static_cast<UInt>(insert.GetStart()), HQStart());
                DNALength e = std::min(static_cast<UInt>(insert.GetEnd()), HQEnd());
                if (s < e) {
                    // subreads' read score = HQRegion score.
                    ret.push_back(ReadInterval(s, e, HQScore()));
                }
            } // else ret = {}
        } else {
           ret.push_back(ReadInterval(insert));
        }
    }
    return ret;
}