本文整理汇总了C++中BamReader::GetNextAlignment方法的典型用法代码示例。如果您正苦于以下问题:C++ BamReader::GetNextAlignment方法的具体用法?C++ BamReader::GetNextAlignment怎么用?C++ BamReader::GetNextAlignment使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BamReader
的用法示例。
在下文中一共展示了BamReader::GetNextAlignment方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main (int argc, char *argv[]) {
if(argc != 4){
cerr<<"This program strips the mapping information and cuts sequences"<<endl;
cerr<<"Usage "<<argv[0]<<" [bam file in] [bam file out] [distribution]"<<endl;
cerr<<"The distribution is one per line"<<endl;
return 1;
}
string bamfiletopen = string(argv[1]);
string bamfiletwrite = string(argv[2]);
string fileDist = string(argv[3]);
igzstream myFile;
string line;
vector<int> distToUse;
myFile.open(fileDist.c_str(), ios::in);
if (myFile.good()){
while ( getline (myFile,line)){
distToUse.push_back( destringify<int>(line) );
}
myFile.close();
}else{
cerr << "Unable to open file "<<fileDist<<endl;
return 1;
}
cerr<<"Read "<<distToUse.size()<<" data points "<<endl;
cerr<<"Reading "<<bamfiletopen<<" writing to "<<bamfiletwrite<<endl;
BamReader reader;
BamWriter writer;
if ( !reader.Open(bamfiletopen) ) {
cerr << "Could not open input BAM files." << endl;
return 1;
}
SamHeader myHeader=reader.GetHeader();
SamProgram sp;
string pID = "removeTagsMapping";
string pName = "removeTagsMapping";
string pCommandLine = "";
for(int i=0;i<(argc);i++){
pCommandLine += (string(argv[i])+" ");
}
putProgramInHeader(&myHeader,pID,pName,pCommandLine,returnGitHubVersion(string(argv[0]),"."));
//no @SQ
myHeader.Sequences.Clear();
vector< RefData > emptyRefVector;
if( !writer.Open(bamfiletwrite,myHeader,emptyRefVector ) ) {
cerr << "Could not open output BAM file "<<bamfiletwrite << endl;
return 1;
}
unsigned int readsTotal=0;
BamAlignment al;
while ( reader.GetNextAlignment(al) ) {
//deleting tag data
al.TagData="";
//reset the flag
// if(al.IsPaired()){
// if(al.IsFirstMate()){
// al.AlignmentFlag = flagFirstPair;
// }else{
// al.AlignmentFlag = flagSecondPair;
// }
// }else{
// }
if(al.IsPaired()){
if(al.IsFirstMate()){
al.Name = al.Name+"/1";
}else{
al.Name = al.Name+"/2";
}
}
al.AlignmentFlag = flagSingleReads;
//no ref or positon
al.RefID=-1;
al.MateRefID=-1;
al.Position=-1;
al.MatePosition=-1;
//no insert size
al.InsertSize=0;
//no cigar
al.CigarData.clear();
//no mapping quality
al.MapQuality=0;
int length = distToUse[ randomInt(0,distToUse.size()-1) ];
//.........这里部分代码省略.........
示例2: sort_inter_chrom_bam
//{{{bool sort_inter_chrom_bam(string in_file_name,
bool sort_inter_chrom_bam(string in_file_name,
string out_file_name)
{
// open input BAM file
BamReader reader;
if ( !reader.Open(in_file_name) ) {
cerr << "sort ERROR: could not open " <<
in_file_name << " for reading... Aborting." << endl;
return false;
}
SamHeader header = reader.GetHeader();
if ( !header.HasVersion() )
header.Version = Constants::SAM_CURRENT_VERSION;
string header_text = header.ToString();
RefVector ref = reader.GetReferenceData();
// set up alignments buffer
BamAlignment al;
vector<BamAlignment> buffer;
buffer.reserve( (size_t)(SORT_DEFAULT_MAX_BUFFER_COUNT*1.1) );
bool bufferFull = false;
int buff_count = 0;
// iterate through file
while ( reader.GetNextAlignment(al)) {
// check buffer's usage
bufferFull = ( buffer.size() >= SORT_DEFAULT_MAX_BUFFER_COUNT );
// store alignments until buffer is "full"
if ( !bufferFull )
buffer.push_back(al);
// if buffer is "full"
else {
// so create a sorted temp file with current buffer contents
// then push "al" into fresh buffer
create_sorted_temp_file(buffer,
out_file_name,
buff_count,
header_text,
ref);
++buff_count;
buffer.push_back(al);
}
}
// handle any leftover buffer contents
if ( !buffer.empty() ) {
create_sorted_temp_file(buffer,
out_file_name,
buff_count,
header_text,
ref);
++buff_count;
}
reader.Close();
return merge_sorted_files(out_file_name, buff_count, header_text, ref);
/*
for (int i = 0; i < buff_count; ++i) {
stringstream temp_name;
temp_name << out_file_name << i;
}
*/
}
示例3: realign_bam
void realign_bam(Parameters& params) {
FastaReference reference;
reference.open(params.fasta_reference);
bool suppress_output = false;
int dag_window_size = params.dag_window_size;
// open BAM file
BamReader reader;
if (!reader.Open("stdin")) {
cerr << "could not open stdin for reading" << endl;
exit(1);
}
BamWriter writer;
if (!params.dry_run && !writer.Open("stdout", reader.GetHeaderText(), reader.GetReferenceData())) {
cerr << "could not open stdout for writing" << endl;
exit(1);
}
// store the names of all the reference sequences in the BAM file
map<int, string> referenceIDToName;
vector<RefData> referenceSequences = reader.GetReferenceData();
int i = 0;
for (RefVector::iterator r = referenceSequences.begin(); r != referenceSequences.end(); ++r) {
referenceIDToName[i] = r->RefName;
++i;
}
vcf::VariantCallFile vcffile;
if (!params.vcf_file.empty()) {
if (!vcffile.open(params.vcf_file)) {
cerr << "could not open VCF file " << params.vcf_file << endl;
exit(1);
}
} else {
cerr << "realignment requires VCF file" << endl;
exit(1);
}
vcf::Variant var(vcffile);
BamAlignment alignment;
map<long int, vector<BamAlignment> > alignmentSortQueue;
// get alignment
// assemble DAG in region around alignment
// loop for each alignment in BAM:
// update DAG when current alignment gets close to edge of assembled DAG
// attempt to realign if read has a certain number of mismatches + gaps or softclips, weighted by basequal
// if alignment to DAG has fewer mismatches and gaps than original alignment, use it
// flatten read into reference space (for now just output alleles from VCF un-spanned insertions)
// write read to queue for streaming re-sorting (some positional change will occur)
long int dag_start_position = 0;
string currentSeqname;
string ref;
//vector<Cigar> cigars; // contains the Cigar strings of nodes in the graph
//vector<long int> refpositions; // contains the reference start coords of nodes in the graph
ReferenceMappings ref_map;
gssw_graph* graph = gssw_graph_create(0);
int8_t* nt_table = gssw_create_nt_table();
int8_t* mat = gssw_create_score_matrix(params.match, params.mism);
int total_reads = 0;
int total_realigned = 0;
int total_improved = 0;
bool emptyDAG = false; // if the dag is constructed over empty sequence
// such as when realigning reads mapped to all-N sequence
if (params.debug) {
cerr << "about to start processing alignments" << endl;
}
while (reader.GetNextAlignment(alignment)) {
string& seqname = referenceIDToName[alignment.RefID];
if (params.debug) {
cerr << "--------------------------------------------" << endl
<< "processing alignment " << alignment.Name << " at "
<< seqname << ":" << alignment.Position << endl;
}
/*
if (!alignment.IsMapped() && graph->size == 0) {
if (params.debug) {
cerr << "unable to build DAG using unmapped read "
<< alignment.Name << " @ "
<< seqname << ":" << alignment.Position
<< " no previous mapped read found and DAG currently empty" << endl;
}
alignmentSortQueue[dag_start_position+dag_window_size].push_back(alignment);
continue;
}
*/
++total_reads;
BamAlignment originalAlignment = alignment;
//.........这里部分代码省略.........