本文整理汇总了C++中BamReader::LocateIndex方法的典型用法代码示例。如果您正苦于以下问题:C++ BamReader::LocateIndex方法的具体用法?C++ BamReader::LocateIndex怎么用?C++ BamReader::LocateIndex使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BamReader
的用法示例。
在下文中一共展示了BamReader::LocateIndex方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LocateIndexes
// locate (& load) index files for BAM readers that don't already have one loaded
bool BamMultiReaderPrivate::LocateIndexes(const BamIndex::IndexType& preferredType)
{
bool errorsEncountered = false;
m_errorString.clear();
// iterate over readers
std::vector<MergeItem>::iterator readerIter = m_readers.begin();
std::vector<MergeItem>::iterator readerEnd = m_readers.end();
for (; readerIter != readerEnd; ++readerIter) {
MergeItem& item = (*readerIter);
BamReader* reader = item.Reader;
if (reader == 0) continue;
// if reader has no index, try to locate one
if (!reader->HasIndex()) {
if (!reader->LocateIndex(preferredType)) {
m_errorString.append(1, '\t');
m_errorString.append(reader->GetErrorString());
m_errorString.append(1, '\n');
errorsEncountered = true;
}
}
}
// check for errors encountered before returning success/fail
if (errorsEncountered) {
const std::string currentError = m_errorString;
const std::string message =
std::string("error while locating index files: \n") + currentError;
SetErrorString("BamMultiReader::LocatingIndexes", message);
return false;
} else
return true;
}
示例2: loadIndex
bool BamParse::loadIndex(BamReader& reader)
{
bool bsignal = reader.OpenIndex(this->filename_index);
if(bsignal==false)
{
cerr << "Index file not found, now create it!!!"<<endl;
bool bci=reader.CreateIndex();
if(bci==false)
{
cerr << "Index file cannot be created!!!"<<endl;
return false;
}
else
{
bool blct=reader.LocateIndex();
if(blct==false)
{
cerr << "Index file cannot be located!!!"<<endl;
return false;
}
}
}
return true;
}
示例3: main
//.........这里部分代码省略.........
//Check for Reference Fasta sequence
if (!has_ref)
{
cerr << "no FASTA reference provided, cannot realign" << endl;
exit(1);
}
////Check for reader
BamReader reader;
if (STdin == true)
{
if (!reader.Open("stdin"))
{
cerr << "could not open stdin bam for reading" << endl;
cerr << reader.GetErrorString() << endl;
reader.Close();
printSummary(argv);
}
}
else
{
if (has_bamfile == true)
{
if (!reader.Open(bamfile))
{
cerr << "ERROR: could not open bam files from stdin ... Aborting" << endl;
cerr << reader.GetErrorString() << endl;
reader.Close();
printSummary(argv);
}
if ( !reader.LocateIndex() )
reader.CreateIndex();
}
else
{
cerr << "--bam flag is set but no bamfile is provided... Aborting" << endl;
reader.Close();
printSummary(argv);
}
}
//// Check Region Tags
if ( (has_regionFile == true) && (has_region == true) )
{
cerr << "ERROR: You provide both region and has provide a Set Region List... Aborting" << endl;
exit(1);
}
//// store the names of all the reference sequences in the BAM file
vector<RefData> referencedata = reader.GetReferenceData();
//// Store Region LIST
vector<BamRegion> regionlist;
if (has_region == true)
{
BamRegion region;
ParseRegionString(regionstr, reader, region);
regionlist.push_back(region);
}
else if (has_regionFile == true)
{
ifstream RG(RegionFile.c_str(), ios_base::in);
string line;
示例4: main
int main(const int argc, char* const argv[]) {
int c, min_mapQ=0, seed=chrono::system_clock::now().time_since_epoch().count();
unsigned int flag_on=0, flag_off=0;
string fn_tgt, fn_in, fn_out="", out_format="b";
while ((c = getopt(argc, argv, "SbBcCt:h1Ho:q:f:F:ul:r:?T:R:L:s:@:m:x:U:")) >= 0) {
switch (c) {
case 's': seed = atoi(optarg); break;
case 'm': break;
case 'c': break;
case 'S': break;
case 'b': break;
case 'C': break;
case 'h': break;
case 'H': break;
case 'o': fn_out = optarg; break;
case 'U': break;
case 'f': flag_on |= strtol(optarg, 0, 0); break;
case 'F': flag_off |= strtol(optarg, 0, 0); break;
case 'q': min_mapQ = atoi(optarg); break;
case 'u': out_format = "u"; break;
case '1': break;
case 'l': break;
case 'r': break;
case 't': fn_tgt = optarg; break;
case 'R': break;
case '?': return usage();
case 'T': break;
case 'B': break;
case '@': break;
case 'x': break;
default: return usage();
}
}
if (fn_tgt.compare("") == 0) return usage();
if (argc == optind) return usage();
fn_in = argv[optind];
BamReader reader;
if (!reader.Open(fn_in)) {
cerr << "ERROR: cannot open [" << fn_in << "] for reading\n";
return 1;
}
if (!reader.LocateIndex()) {
cerr << "ERROR: cannot find BAM index for [" << fn_in << "]\n";
return 1;
}
const SamHeader header = reader.GetHeader();
if (header.SortOrder.compare("coordinate") != 0) {
cerr << "ERROR: [" << fn_in << "] not sorted by coordinate\n";
return 1;
}
const RefVector refseq = reader.GetReferenceData();
vector<BamRegion> regions;
vector<unsigned int> src_depths, tgt_depths;
if (read_region_depth(fn_tgt.c_str(), reader, regions, src_depths, tgt_depths) != 0) return 1;
BamWriter writer;
if (!writer.Open(fn_out, header, refseq)) {
cerr << "ERROR: cannot open [" << fn_out << "] for writing\n";
return 1;
}
BamAlignment aln;
vector<BamAlignment> reads;
vector<string> paired, unpaired;
unordered_map<int, int> kept;
unordered_map<string, unsigned int> seen, sampled;
unordered_map<string, vector<int> > pool;
for (size_t i=0; i<regions.size(); ++i) {
reads.clear();
paired.clear();
unpaired.clear();
kept.clear();
pool.clear();
char region_string[256];
sprintf(region_string, "%s:%d-%d", refseq[regions[i].LeftRefID].RefName.c_str(), regions[i].LeftPosition, regions[i].RightPosition);
if (!reader.SetRegion(regions[i])) {
cerr << "WARNING: failed to locate [" << region_string << "]\n";
//cerr << "WARNING: failed to locate [" << refseq[regions[i].LeftRefID].RefName << ':' << regions[i].LeftPosition << '-' << regions[i].RightPosition << "]\n";
continue;
}
while (reader.GetNextAlignment(aln)) {
if ((aln.AlignmentFlag & flag_on) == flag_on && !(aln.AlignmentFlag & flag_off) && aln.MapQuality >= min_mapQ)
reads.push_back(aln);
}
if (reads.size() == 0) continue;
unsigned int depth = 0;
for (size_t k=0; k<reads.size(); ++k) {
aln = reads[k];
string rn = aln.Name;
if (seen.find(rn) != seen.end()) { // if seen in previous regions
if (sampled.find(rn) != sampled.end()) { // if self or mate sampled before, sample it
if (sampled[rn] != aln.AlignmentFlag) kept[k] = 1; // if mate sampled before, keep it
depth += get_overlap(aln, regions[i]);
}
//.........这里部分代码省略.........