本文整理汇总了C++中BamReader::GetErrorString方法的典型用法代码示例。如果您正苦于以下问题:C++ BamReader::GetErrorString方法的具体用法?C++ BamReader::GetErrorString怎么用?C++ BamReader::GetErrorString使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BamReader
的用法示例。
在下文中一共展示了BamReader::GetErrorString方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: RewindReaders
// returns BAM file pointers to beginning of alignment data
bool BamMultiReaderPrivate::RewindReaders()
{
m_errorString.clear();
bool errorsEncountered = false;
// 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;
// attempt rewind on BamReader
if (!reader->Rewind()) {
m_errorString.append(1, '\t');
m_errorString.append(reader->GetErrorString());
m_errorString.append(1, '\n');
errorsEncountered = true;
}
}
return !errorsEncountered;
}
示例2: 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;
}
示例3: CreateIndexes
// creates index files for BAM files that don't have them
bool BamMultiReaderPrivate::CreateIndexes(const BamIndex::IndexType& type) {
bool errorsEncountered = false;
m_errorString.clear();
// iterate over readers
vector<MergeItem>::iterator itemIter = m_readers.begin();
vector<MergeItem>::iterator itemEnd = m_readers.end();
for ( ; itemIter != itemEnd; ++itemIter ) {
MergeItem& item = (*itemIter);
BamReader* reader = item.Reader;
if ( reader == 0 ) continue;
// if reader doesn't have an index, create one
if ( !reader->HasIndex() ) {
if ( !reader->CreateIndex(type) ) {
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 string currentError = m_errorString;
const string message = string("error while creating index files: ") + "\n" + currentError;
SetErrorString("BamMultiReader::CreateIndexes", message);
return false;
} else
return true;
}
示例4: OpenIndexes
bool BamMultiReaderPrivate::OpenIndexes(const std::vector<std::string>& indexFilenames)
{
// TODO: This needs to be cleaner - should not assume same order.
// And either way, shouldn't start at first reader. Should start at
// first reader without an index?
// make sure same number of index filenames as readers
if (m_readers.size() != indexFilenames.size()) {
const std::string message("size of index file list does not match current BAM file count");
SetErrorString("BamMultiReader::OpenIndexes", message);
return false;
}
bool errorsEncountered = false;
m_errorString.clear();
// iterate over BamReaders
std::vector<std::string>::const_iterator indexFilenameIter = indexFilenames.begin();
std::vector<std::string>::const_iterator indexFilenameEnd = indexFilenames.end();
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;
// open index filename on reader
if (reader) {
const std::string& indexFilename = (*indexFilenameIter);
if (!reader->OpenIndex(indexFilename)) {
m_errorString.append(1, '\t');
m_errorString += reader->GetErrorString();
m_errorString.append(1, '\n');
errorsEncountered = true;
}
}
// increment filename iterator, skip if no more index files to open
if (++indexFilenameIter == indexFilenameEnd) break;
}
// return success/fail
if (errorsEncountered) {
const std::string currentError = m_errorString;
const std::string message =
std::string("could not open all index files: \n\t") + currentError;
SetErrorString("BamMultiReader::OpenIndexes", message);
return false;
} else
return true;
}
示例5: InitializeBAMs
// open BAM input file
void BAMWalkerEngine::InitializeBAMs(const ReferenceReader& ref_reader, const vector<string>& bam_filenames)
{
if (not bam_reader_.SetExplicitMergeOrder(BamMultiReader::MergeByCoordinate)) {
cerr << "ERROR: Could not set merge order to BamMultiReader::MergeByCoordinate" << endl;
exit(1);
}
if (not bam_reader_.Open(bam_filenames)) {
cerr << "ERROR: Could not open input BAM file(s) : " << bam_reader_.GetErrorString() << endl;
exit(1);
}
if (not bam_reader_.LocateIndexes()) {
cerr << "ERROR: Could not open BAM index file(s) : " << bam_reader_.GetErrorString() << endl;
exit(1);
}
// BAM multi reader combines the read group information of the different BAMs but does not merge comment sections
bam_header_ = bam_reader_.GetHeader();
if (!bam_header_.HasReadGroups()) {
cerr << "ERROR: there is no read group in BAM files specified" << endl;
exit(1);
}
// Manually merge comment sections of BAM files if we have more than one BAM file
if (bam_filenames.size() > 1) {
unsigned int num_duplicates = 0;
unsigned int num_merged = 0;
for (unsigned int bam_idx = 0; bam_idx < bam_filenames.size(); bam_idx++) {
BamReader reader;
if (not reader.Open(bam_filenames.at(bam_idx))) {
cerr << "TVC ERROR: Failed to open input BAM file " << reader.GetErrorString() << endl;
exit(1);
}
SamHeader header = reader.GetHeader();
for (unsigned int i_co = 0; i_co < header.Comments.size(); i_co++) {
// Step 1: Check if this comment is already part of the merged header
unsigned int m_co = 0;
while (m_co < bam_header_.Comments.size() and bam_header_.Comments.at(m_co) != header.Comments.at(i_co))
m_co++;
if (m_co < bam_header_.Comments.size()){
num_duplicates++;
continue;
}
// Add comment line to merged header if it is a new one
num_merged++;
bam_header_.Comments.push_back(header.Comments.at(i_co));
}
}
// Verbose what we did
cout << "Merged " << num_merged << " unique comment lines into combined BAM header. Encountered " << num_duplicates << " duplicate comments." << endl;
}
//
// Reference sequences in the bam file must match that in the fasta file
//
vector<RefData> referenceSequences = bam_reader_.GetReferenceData();
if ((int)referenceSequences.size() != ref_reader.chr_count()) {
cerr << "ERROR: Reference in BAM file does not match fasta file" << endl
<< " BAM has " << referenceSequences.size()
<< " chromosomes while fasta has " << ref_reader.chr_count() << endl;
exit(1);
}
for (int chr_idx = 0; chr_idx < ref_reader.chr_count(); ++chr_idx) {
if (referenceSequences[chr_idx].RefName != ref_reader.chr_str(chr_idx)) {
cerr << "ERROR: Reference in BAM file does not match fasta file" << endl
<< " Chromosome #" << (chr_idx+1) << "in BAM is " << referenceSequences[chr_idx].RefName
<< " while fasta has " << ref_reader.chr_str(chr_idx) << endl;
exit(1);
}
if (referenceSequences[chr_idx].RefLength != ref_reader.chr_size(chr_idx)) {
cerr << "ERROR: Reference in BAM file does not match fasta file" << endl
<< " Chromosome " << referenceSequences[chr_idx].RefName
<< "in BAM has length " << referenceSequences[chr_idx].RefLength
<< " while fasta has " << ref_reader.chr_size(chr_idx) << endl;
exit(1);
}
}
//
// Retrieve BaseCaller and TMAP version strings from BAM header
//
set<string> basecaller_versions;
set<string> tmap_versions;
for (SamProgramIterator I = bam_header_.Programs.Begin(); I != bam_header_.Programs.End(); ++I) {
if (I->ID.substr(0,2) == "bc")
basecaller_versions.insert(I->Version);
if (I->ID.substr(0,4) == "tmap")
//.........这里部分代码省略.........
示例6: main
//.........这里部分代码省略.........
break;
default:
abort();
break;
}
}
//// Open Error log files
ofstream cerrlog("bonsaiReport.txt");
streambuf *cerrsave = std::cerr.rdbuf();
// Redirect stream buffers
if (cerrlog.is_open())
cerr.rdbuf(cerrlog.rdbuf());
cerr << commandline << endl;
//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);
示例7: CloseFiles
// close requested BAM files
bool BamMultiReaderPrivate::CloseFiles(const std::vector<std::string>& filenames)
{
bool errorsEncountered = false;
m_errorString.clear();
// iterate over filenames
std::vector<std::string>::const_iterator filesIter = filenames.begin();
std::vector<std::string>::const_iterator filesEnd = filenames.end();
for (; filesIter != filesEnd; ++filesIter) {
const std::string& filename = (*filesIter);
if (filename.empty()) continue;
// 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 matches requested filename
if (reader->GetFilename() == filename) {
// remove reader's entry from alignment cache
m_alignmentCache->Remove(reader);
// clean up reader & its alignment
if (!reader->Close()) {
m_errorString.append(1, '\t');
m_errorString.append(reader->GetErrorString());
m_errorString.append(1, '\n');
errorsEncountered = true;
}
delete reader;
reader = 0;
// delete reader's alignment entry
BamAlignment* alignment = item.Alignment;
delete alignment;
alignment = 0;
// remove reader from reader list
m_readers.erase(readerIter);
// on match, just go on to next filename
// (no need to keep looking and item iterator is invalid now anyway)
break;
}
}
}
// make sure we clean up properly if all readers were closed
if (m_readers.empty()) {
// clean up merger
if (m_alignmentCache) {
m_alignmentCache->Clear();
delete m_alignmentCache;
m_alignmentCache = 0;
}
// reset merge flags
m_hasUserMergeOrder = false;
m_mergeOrder = BamMultiReader::RoundRobinMerge;
}
// return whether all readers closed OK
return !errorsEncountered;
}