本文整理汇总了C++中BamWriter类的典型用法代码示例。如果您正苦于以下问题:C++ BamWriter类的具体用法?C++ BamWriter怎么用?C++ BamWriter使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BamWriter类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc, char* argv[])
{
vector<string> bamFile;
for(int i=1; i<argc; ++i)
bamFile.push_back(argv[i]);
string outFile = "combined.bam";
BamMultiReader reader;
reader.Open(bamFile);
SamHeader header = reader.GetHeader();
RefVector refs = reader.GetReferenceData();
BamWriter writer;
writer.SetNumThreads(8);
writer.Open(outFile, header, refs);
assert(writer.IsOpen());
BamAlignment al;
size_t numReads = 0;
while(reader.GetNextAlignment(al)){
writer.SaveAlignment(al);
if(++numReads % 10000 == 0)
cerr << setw(12) << numReads << '\r';
}
cerr << setw(12) << numReads << endl;
cerr << "done!" << endl;
}
示例2: bamReader
void Demux::match(){
BamReader bamReader(bamFilePath);
SamRecord samRecord;
while ( bamReader.getNextRecord(samRecord)) {
string recordName(samRecord.getReadName());
recordName = cHandler.decrypt(recordName);
//clean record name
int len=recordName.find("$");
recordName=recordName.substr(0,len);
//clean ended
if (!isDecoy(recordName)){
string outputFile = generateFileName(recordName);
printf("%s\n",outputFile.c_str());
if (writers.find(outputFile) == writers.end()) //if the BamWriter is not initialized
writers[outputFile] = new BamWriter(outputFile, bamReader.getHeader());
BamWriter *writer = writers[outputFile];
writer->writeRecord(samRecord);
}
}
for(auto it=writers.begin();it!=writers.end();it++){
BamWriter *writer = it->second;
writer->close();
delete writer;
}
}
示例3: IntersectBamPE
void BedIntersectPE::IntersectBamPE(string bamFile) {
// load the "B" bed file into a map so
// that we can easily compare "A" to it for overlaps
_bedB->loadBedFileIntoMap();
// open the BAM file
BamReader reader;
BamWriter writer;
reader.Open(bamFile);
// get header & reference information
string bamHeader = reader.GetHeaderText();
RefVector refs = reader.GetReferenceData();
// open a BAM output to stdout if we are writing BAM
if (_bamOutput == true) {
// set compression mode
BamWriter::CompressionMode compressionMode = BamWriter::Compressed;
if ( _isUncompressedBam ) compressionMode = BamWriter::Uncompressed;
writer.SetCompressionMode(compressionMode);
// open our BAM writer
writer.Open("stdout", bamHeader, refs);
}
// track the previous and current sequence
// names so that we can identify blocks of
// alignments for a given read ID.
string prevName, currName;
prevName = currName = "";
vector<BamAlignment> alignments; // vector of BAM alignments for a given ID in a BAM file.
alignments.reserve(100);
_bedA->bedType = 10; // it's a full BEDPE given it's BAM
// rip through the BAM file and convert each mapped entry to BEDPE
BamAlignment bam1, bam2;
while (reader.GetNextAlignment(bam1)) {
// the alignment must be paired
if (bam1.IsPaired() == true) {
// grab the second alignment for the pair.
reader.GetNextAlignment(bam2);
// require that the alignments are from the same query
if (bam1.Name == bam2.Name) {
ProcessBamBlock(bam1, bam2, refs, writer);
}
else {
cerr << "*****ERROR: -bedpe requires BAM to be sorted or grouped by query name. " << endl;
exit(1);
}
}
}
// close up
reader.Close();
if (_bamOutput == true) {
writer.Close();
}
}
示例4: while
bool RevertTool::RevertToolPrivate::Run(void) {
// opens the BAM file without checking for indexes
BamReader reader;
if ( !reader.Open(m_settings->InputFilename) ) {
cerr << "Could not open input BAM file... quitting." << endl;
return false;
}
// get BAM file metadata
const string& headerText = reader.GetHeaderText();
const RefVector& references = reader.GetReferenceData();
// open writer
BamWriter writer;
bool writeUncompressed = ( m_settings->OutputFilename == Options::StandardOut() && !m_settings->IsForceCompression );
if ( !writer.Open(m_settings->OutputFilename, headerText, references, writeUncompressed) ) {
cerr << "Could not open " << m_settings->OutputFilename << " for writing." << endl;
return false;
}
// plow through file, reverting alignments
BamAlignment al;
while ( reader.GetNextAlignment(al) ) {
RevertAlignment(al);
writer.SaveAlignment(al);
}
// clean and exit
reader.Close();
writer.Close();
return true;
}
示例5: process_intra_chrom_pair
//{{{ void process_intra_chrom_pair(const BamAlignment &curr,
void
SV_Pair::
process_intra_chrom_pair(const BamAlignment &curr,
const RefVector refs,
BamWriter &inter_chrom_reads,
map<string, BamAlignment> &mapped_pairs,
UCSCBins<SV_BreakPoint*> &r_bin,
int weight,
int ev_id,
SV_PairReader *reader)
{
if (curr.RefID == curr.MateRefID) {
process_pair(curr,
refs,
mapped_pairs,
r_bin,
weight,
ev_id,
reader);
} else if (curr.IsMapped() &&
curr.IsMateMapped() &&
(curr.RefID >= 0) &&
(curr.MateRefID >= 0) ) {
BamAlignment al = curr;
string x = reader->get_source_file_name();
al.AddTag("LS","Z",x);
inter_chrom_reads.SaveAlignment(al);
}
}
示例6: main
int main (int argc, char *argv[]) {
if( (argc== 1) ||
(argc== 2 && string(argv[1]) == "-h") ||
(argc== 2 && string(argv[1]) == "-help") ||
(argc== 2 && string(argv[1]) == "--help") ){
cout<<"Usage:setAsUnpaired [in bam] [outbam]"<<endl<<"this program takes flags all paired sequences as singles"<<endl;
return 1;
}
string bamfiletopen = string(argv[1]);
string bamFileOUT = string(argv[2]);
BamReader reader;
BamWriter writer;
if ( !reader.Open(bamfiletopen) ) {
cerr << "Could not open input BAM files." << endl;
return 1;
}
const SamHeader header = reader.GetHeader();
const RefVector references = reader.GetReferenceData();
if ( !writer.Open(bamFileOUT,header,references) ) {
cerr << "Could not open output BAM file "<<bamFileOUT << endl;
return 1;
}
BamAlignment al;
while ( reader.GetNextAlignment(al) ) {
if(al.IsMapped()){
cerr << "Cannot yet handle mapped reads " << endl;
return 1;
}
al.SetIsPaired (false);
writer.SaveAlignment(al);
} //while al
reader.Close();
writer.Close();
return 0;
}
示例7: while
// merges sorted temp BAM files into single sorted output BAM file
bool SortTool::SortToolPrivate::MergeSortedRuns(void) {
// open up multi reader for all of our temp files
// this might get broken up if we do a multi-pass system later ??
BamMultiReader multiReader;
if ( !multiReader.Open(m_tempFilenames) ) {
cerr << "bamtools sort ERROR: could not open BamMultiReader for merging temp files... Aborting."
<< endl;
return false;
}
// set sort order for merge
if ( m_settings->IsSortingByName )
multiReader.SetSortOrder(BamMultiReader::SortedByReadName);
else
multiReader.SetSortOrder(BamMultiReader::SortedByPosition);
// open writer for our completely sorted output BAM file
BamWriter mergedWriter;
if ( !mergedWriter.Open(m_settings->OutputBamFilename, m_headerText, m_references) ) {
cerr << "bamtools sort ERROR: could not open " << m_settings->OutputBamFilename
<< " for writing... Aborting." << endl;
multiReader.Close();
return false;
}
// while data available in temp files
BamAlignment al;
while ( multiReader.GetNextAlignmentCore(al) )
mergedWriter.SaveAlignment(al);
// close readers
multiReader.Close();
mergedWriter.Close();
// delete all temp files
vector<string>::const_iterator tempIter = m_tempFilenames.begin();
vector<string>::const_iterator tempEnd = m_tempFilenames.end();
for ( ; tempIter != tempEnd; ++tempIter ) {
const string& tempFilename = (*tempIter);
remove(tempFilename.c_str());
}
return true;
}
示例8:
bool SortTool::SortToolPrivate::WriteTempFile(const vector<BamAlignment>& buffer,
const string& tempFilename)
{
// open temp file for writing
BamWriter tempWriter;
if ( !tempWriter.Open(tempFilename, m_headerText, m_references) ) {
cerr << "bamtools sort ERROR: could not open " << tempFilename
<< " for writing." << endl;
return false;
}
// write data
vector<BamAlignment>::const_iterator buffIter = buffer.begin();
vector<BamAlignment>::const_iterator buffEnd = buffer.end();
for ( ; buffIter != buffEnd; ++buffIter ) {
const BamAlignment& al = (*buffIter);
tempWriter.SaveAlignment(al);
}
// close temp file & return success
tempWriter.Close();
return true;
}
示例9: while
bool CompressTool::CompressToolPrivate::Run(void) {
// ------------------------------------
// initialize conversion input/output
// set to default input if none provided
if ( !m_settings->HasInput )
m_settings->InputFilename = Options::StandardIn();
if ( !m_settings->HasOutput )
m_settings->InputFilename = Options::StandardOut();
SamReader reader;
reader.Open(m_settings->InputFilename);
BamWriter writer;
writer.Open( m_settings->OutputFilename, reader.GetHeader(), reader.GetReferenceData());
int alignment_ct = 0;
while(true) {
BamAlignment alignment;
if(!reader.GetNextAlignment(alignment))
break;
writer.SaveAlignment(alignment);
alignment_ct++;
//progress indicator
//if(alignment_ct % 500000 == 0)
// cerr << ".";
}
reader.Close();
writer.Close();
return true;
}
示例10: WriteBamRecords
void WriteBamRecords(BamWriter& ccsBam, unique_ptr<PbiBuilder>& ccsPbi, Results& counts,
Results&& results)
{
counts += results;
for (const auto& ccs : results) {
BamRecordImpl record;
TagCollection tags;
stringstream name;
// some defaults values
record.Bin(0)
.InsertSize(0)
.MapQuality(255)
.MatePosition(-1)
.MateReferenceId(-1)
.Position(-1)
.ReferenceId(-1)
.Flag(0)
.SetMapped(false);
name << *(ccs.Id.MovieName) << '/' << ccs.Id.HoleNumber << "/ccs";
vector<float> snr = {
static_cast<float>(ccs.SignalToNoise.A), static_cast<float>(ccs.SignalToNoise.C),
static_cast<float>(ccs.SignalToNoise.G), static_cast<float>(ccs.SignalToNoise.T)
};
tags["RG"] = MakeReadGroupId(*(ccs.Id.MovieName), "CCS");
tags["zm"] = static_cast<int32_t>(ccs.Id.HoleNumber);
tags["np"] = static_cast<int32_t>(ccs.NumPasses);
tags["rq"] = static_cast<float>(ccs.PredictedAccuracy);
tags["sn"] = snr;
// TODO(lhepler) maybe remove one day
tags["za"] = static_cast<float>(ccs.AvgZScore);
vector<float> zScores;
for (const double z : ccs.ZScores)
zScores.emplace_back(static_cast<float>(z));
tags["zs"] = zScores;
tags["rs"] = ccs.StatusCounts;
#if DIAGNOSTICS
if (ccs.Barcodes) {
vector<uint16_t> bcs{ccs.Barcodes->first, ccs.Barcodes->second};
tags["bc"] = bcs;
}
tags["ms"] = ccs.ElapsedMilliseconds;
tags["mt"] = static_cast<int32_t>(ccs.MutationsTested);
tags["ma"] = static_cast<int32_t>(ccs.MutationsApplied);
#endif
record.Name(name.str()).SetSequenceAndQualities(ccs.Sequence, ccs.Qualities).Tags(tags);
int64_t offset;
ccsBam.Write(record, &offset);
if (ccsPbi) ccsPbi->AddRecord(record, offset);
}
ccsBam.TryFlush();
}
示例11: main
int main (int argc, const char *argv[])
{
printf ("------------- bamrealignment --------------\n");
OptArgs opts;
opts.ParseCmdLine(argc, argv);
vector<int> score_vals(4);
string input_bam = opts.GetFirstString ('i', "input", "");
string output_bam = opts.GetFirstString ('o', "output", "");
opts.GetOption(score_vals, "4,-6,-5,-2", 's', "scores");
int clipping = opts.GetFirstInt ('c', "clipping", 2);
bool anchors = opts.GetFirstBoolean ('a', "anchors", true);
int bandwidth = opts.GetFirstInt ('b', "bandwidth", 10);
bool verbose = opts.GetFirstBoolean ('v', "verbose", false);
bool debug = opts.GetFirstBoolean ('d', "debug", false);
int format = opts.GetFirstInt ('f', "format", 1);
int num_threads = opts.GetFirstInt ('t', "threads", 8);
string log_fname = opts.GetFirstString ('l', "log", "");
if (input_bam.empty() or output_bam.empty())
return PrintHelp();
opts.CheckNoLeftovers();
std::ofstream logf;
if (log_fname.size ())
{
logf.open (log_fname.c_str ());
if (!logf.is_open ())
{
fprintf (stderr, "bamrealignment: Failed to open log file %s\n", log_fname.c_str());
return 1;
}
}
BamReader reader;
if (!reader.Open(input_bam)) {
fprintf(stderr, "bamrealignment: Failed to open input file %s\n", input_bam.c_str());
return 1;
}
SamHeader header = reader.GetHeader();
RefVector refs = reader.GetReferenceData();
BamWriter writer;
writer.SetNumThreads(num_threads);
if (format == 1)
writer.SetCompressionMode(BamWriter::Uncompressed);
else
writer.SetCompressionMode(BamWriter::Compressed);
if (!writer.Open(output_bam, header, refs)) {
fprintf(stderr, "bamrealignment: Failed to open output file %s\n", output_bam.c_str());
return 1;
}
// The meat starts here ------------------------------------
if (verbose)
cout << "Verbose option is activated, each alignment will print to screen." << endl
<< " After a read hit RETURN to continue to the next one," << endl
<< " or press q RETURN to quit the program," << endl
<< " or press s Return to silence verbose," << endl
<< " or press c RETURN to continue printing without further prompt." << endl << endl;
unsigned int readcounter = 0;
unsigned int mapped_readcounter = 0;
unsigned int realigned_readcounter = 0;
unsigned int modified_alignment_readcounter = 0;
unsigned int pos_update_readcounter = 0;
unsigned int failed_clip_realigned_readcount = 0;
unsigned int already_perfect_readcount = 0;
unsigned int bad_md_tag_readcount = 0;
unsigned int error_recreate_ref_readcount = 0;
unsigned int error_clip_anchor_readcount = 0;
unsigned int error_sw_readcount = 0;
unsigned int error_unclip_readcount = 0;
unsigned int start_position_shift;
int orig_position;
int new_position;
string md_tag, new_md_tag, input = "x";
vector<CigarOp> new_cigar_data;
vector<MDelement> new_md_data;
bool position_shift = false;
time_t start_time = time(NULL);
Realigner aligner;
aligner.verbose_ = verbose;
aligner.debug_ = debug;
if (!aligner.SetScores(score_vals))
cout << "bamrealignment: Four scores need to be provided: match, mismatch, gap open, gap extend score!" << endl;
aligner.SetAlignmentBandwidth(bandwidth);
//.........这里部分代码省略.........
示例12: main
int main (int argc, char *argv[]) {
bool produceUnCompressedBAM=false;
bool verbose=false;
bool ancientDNA=false;
bool keepOrig=false;
string adapter_F=options_adapter_F_BAM;
string adapter_S=options_adapter_S_BAM;
string adapter_chimera=options_adapter_chimera_BAM;
string key="";
bool allowMissing=false;
int trimCutoff=1;
bool allowAligned=false;
bool printLog=false;
string logFileName;
BamReader reader;
BamWriter writer;
string bamFile;
string bamFileOUT="";
string key1;
string key2;
bool useDist=false;
double location=-1.0;
double scale =-1.0;
bool fastqFormat=false;
string fastqfile1 = "";
string fastqfile2 = "";
string fastqoutfile = "";
bool singleEndModeFQ=true;
const string usage=string(string(argv[0])+
" [options] BAMfile"+"\n"+
"\nThis program takes an unaligned BAM where mates are consecutive\nor fastq files and trims and merges reads\n"+
"\n\tYou can specify a unaligned bam file or one or two fastq :\n"+
"\t\t"+"-fq1" +"\t\t"+"First fastq"+"\n"+
"\t\t"+"-fq2" +"\t\t"+"Second fastq file (for paired-end)"+"\n"+
"\t\t"+"-fqo" +"\t\t"+"Output fastq prefix"+"\n\n"+
//"\t"+"-p , --PIPE"+"\n\t\t"+"Read BAM from and write it to PIPE"+"\n"+
"\t"+"-o , --outfile" +"\t\t"+"Output (BAM format)."+"\n"+
"\t"+"-u " +"\t\t"+"Produce uncompressed bam (good for pipe)"+"\n"+
// "\t"+" , --outprefix" +"\n\t\t"+"Prefix for output files (default '"+outprefix+"')."+"\n"+
//"\t"+" , --SAM" +"\n\t\t"+"Output SAM not BAM."+"\n"+
"\t"+"--aligned" +"\t\t"+"Allow reads to be aligned (default "+boolStringify(allowAligned)+")"+"\n"+
"\t"+"-v , --verbose" +"\t\t"+"Turn all messages on (default "+boolStringify(verbose)+")"+"\n"+
"\t"+"--log [log file]" +"\t"+"Print a tally of merged reads to this log file (default only to stderr)"+"\n"+
"\n\t"+"Paired End merging/Single Read trimming options"+"\n"+
"\t\t"+"You can specify either:"+"\n"+
"\t\t\t"+"--ancientdna"+"\t\t\t"+"ancient DNA (default "+boolStringify(ancientDNA)+")"+"\n"+
"\t\t"+" "+"\t\t\t\t"+"this allows for partial overlap"+"\n"+
"\n\t\t"+"or if you know your size length distribution:"+"\n"+
"\t\t\t"+"--loc"+"\t\t\t\t"+"Location for lognormal dist. (default none)"+"\n"+
"\t\t\t"+"--scale"+"\t\t\t\t"+"Scale for lognormal dist. (default none)"+"\n"+
// "\t\t\t\t\t\t\tGood for merging ancient DNA reads into a single sequence\n\n"
"\n\t\t"+"--keepOrig"+"\t\t\t\t"+"Write original reads if they are trimmed or merged (default "+boolStringify(keepOrig)+")"+"\n"+
"\t\t\t\t\t\t\tSuch reads will be marked as PCR duplicates\n\n"
"\t\t"+"-f , --adapterFirstRead" +"\t\t\t"+"Adapter that is observed after the forward read (def. Multiplex: "+options_adapter_F_BAM.substr(0,30)+")"+"\n"+
"\t\t"+"-s , --adapterSecondRead" +"\t\t"+"Adapter that is observed after the reverse read (def. Multiplex: "+options_adapter_S_BAM.substr(0,30)+")"+"\n"+
"\t\t"+"-c , --FirstReadChimeraFilter" +"\t\t"+"If the forward read looks like this sequence, the cluster is filtered out.\n\t\t\t\t\t\t\tProvide several sequences separated by comma (def. Multiplex: "+options_adapter_chimera_BAM.substr(0,30)+")"+"\n"+
"\t\t"+"-k , --key"+"\t\t\t\t"+"Key sequence with which each sequence starts. Comma separate for forward and reverse reads. (default '"+key+"')"+"\n"+
"\t\t"+"-i , --allowMissing"+"\t\t\t"+"Allow one base in one key to be missing or wrong. (default "+boolStringify(allowMissing)+")"+"\n"+
"\t\t"+"-t , --trimCutoff"+"\t\t\t"+"Lowest number of adapter bases to be observed for single Read trimming (default "+stringify(trimCutoff)+")");
if( (argc== 1) ||
(argc== 2 && string(argv[1]) == "-h") ||
(argc== 2 && string(argv[1]) == "-help") ||
(argc== 2 && string(argv[1]) == "--help") ){
cout<<"Usage:"<<endl;
cout<<""<<endl;
cout<<usage<<endl;
return 1;
}
for(int i=1;i<(argc-1);i++){ //all but the last arg
if(strcmp(argv[i],"-fq1") == 0 ){
fastqfile1=string(argv[i+1]);
fastqFormat=true;
i++;
continue;
}
if(strcmp(argv[i],"-fq2") == 0 ){
fastqfile2=string(argv[i+1]);
fastqFormat=true;
//.........这里部分代码省略.........
示例13: buildSortedReadEndLists
/**
* Goes through all the records in a file and generates a set of ReadEnds objects that
* hold the necessary information (reference sequence, 5' read coordinate) to do
* duplication, caching to disk as necssary to sort them.
*/
void MarkDuplicates::buildSortedReadEndLists() {
ReadEndsMap tmp;
long index = 0;
SamHeader header = source->getHeader();
BamWriter writer;
writer.SetCompressionMode(BamWriter::Uncompressed);
writer.Open(getBufferFileName(), header, source->getReferences());
while (true) {
BamAlignment * prec = getInputAlignment();
if(!prec)
break;
BamAlignment & rec = *prec;
if (!rec.IsMapped() || rec.RefID == -1) {
// When we hit the unmapped reads or reads with no coordinate, just write them.
}
else if (rec.IsPrimaryAlignment()){
ReadEnds * fragmentEnd = buildReadEnds(header, index, rec);
fragSort.push_back(fragmentEnd);
if (rec.IsPaired() && rec.IsMateMapped()) {
string read_group;
rec.GetTag("RG", read_group);
string key = read_group + ":" + rec.Name;
ReadEnds * pairedEnds = tmp.remove(rec.RefID, key);
// See if we've already seen the first end or not
if (pairedEnds == NULL) {
pairedEnds = buildReadEnds(header, index, rec);
tmp.put(pairedEnds->read1Sequence, key, pairedEnds);
}
else {
int sequence = fragmentEnd->read1Sequence;
int coordinate = fragmentEnd->read1Coordinate;
// If the second read is actually later, just add the second read data, else flip the reads
if (sequence > pairedEnds->read1Sequence ||
(sequence == pairedEnds->read1Sequence && coordinate >= pairedEnds->read1Coordinate)) {
pairedEnds->read2Sequence = sequence;
pairedEnds->read2Coordinate = coordinate;
pairedEnds->read2IndexInFile = index;
pairedEnds->orientation = getOrientationByte(pairedEnds->orientation == RE_R, rec.IsReverseStrand());
}
else {
pairedEnds->read2Sequence = pairedEnds->read1Sequence;
pairedEnds->read2Coordinate = pairedEnds->read1Coordinate;
pairedEnds->read2IndexInFile = pairedEnds->read1IndexInFile;
pairedEnds->read1Sequence = sequence;
pairedEnds->read1Coordinate = coordinate;
pairedEnds->read1IndexInFile = index;
pairedEnds->orientation = getOrientationByte(rec.IsReverseStrand(), pairedEnds->orientation == RE_R);
}
pairedEnds->score += getScore(rec);
pairSort.push_back(pairedEnds);
}
}
}
// Print out some stats every 1m reads
if (verbose && ++index % 100000 == 0) {
cerr << "\rRead " << index << " records. Tracking " << tmp.size() << " as yet unmatched pairs. Last sequence index: " << rec.Position << std::flush;
}
writer.SaveAlignment(rec);
delete prec;
}
writer.Close();
if(verbose)
cerr << "Read " << index << " records. " << tmp.size() << " pairs never matched." << endl << "Sorting pairs..." << flush;
if(nothreads)
sort(pairSort.begin(), pairSort.end(), compareReadEnds());
else
ogeSortMt(pairSort.begin(), pairSort.end(), compareReadEnds());
if(verbose) cerr << "fragments..." << flush;
if(nothreads)
sort(fragSort.begin(), fragSort.end(), compareReadEnds());
else
ogeSortMt(fragSort.begin(), fragSort.end(), compareReadEnds());
cerr << "done." << endl;
vector<ReadEnds *>contents = tmp.allReadEnds();
// delete unmatched read ends
for(vector<ReadEnds *>::const_iterator i = contents.begin(); i != contents.end(); i++)
delete *i;
//.........这里部分代码省略.........
示例14: main
int main (int argc, char *argv[]) {
int minBaseQuality = 0;
string usage=string(""+string(argv[0])+" [in BAM file] [in VCF file] [chr name] [deam out BAM] [not deam out BAM]"+
"\nThis program divides aligned single end reads into potentially deaminated\n"+
"\nreads and the puts the rest into another bam file if the deaminated positions are not called as the alternative base in the VCF.\n"+
"\nTip: if you do not need one of them, use /dev/null as your output\n"+
"arguments:\n"+
"\t"+"--bq [base qual] : Minimum base quality to flag a deaminated site (Default: "+stringify(minBaseQuality)+")\n"+
"\n");
if(argc == 1 ||
argc < 4 ||
(argc == 2 && (string(argv[0]) == "-h" || string(argv[0]) == "--help") )
){
cerr << "Usage "<<usage<<endl;
return 1;
}
for(int i=1;i<(argc-2);i++){
if(string(argv[i]) == "--bq"){
minBaseQuality=destringify<int>(argv[i+1]);
i++;
continue;
}
}
string bamfiletopen = string( argv[ argc-5 ] );
string vcffiletopen = string( argv[ argc-4 ] );
string chrname = string( argv[ argc-3 ] );
string deambam = string( argv[ argc-2 ] );
string nondeambam = string( argv[ argc-1 ] );
//dummy reader, will need to reposition anyway
VCFreader vcfr (vcffiletopen,
vcffiletopen+".tbi",
chrname,
1,
1,
0);
BamReader reader;
if ( !reader.Open(bamfiletopen) ) {
cerr << "Could not open input BAM file"<< bamfiletopen << endl;
return 1;
}
// if ( !reader.LocateIndex() ) {
// cerr << "The index for the BAM file cannot be located" << endl;
// return 1;
// }
// if ( !reader.HasIndex() ) {
// cerr << "The BAM file has not been indexed." << endl;
// return 1;
// }
//positioning the bam file
int refid=reader.GetReferenceID(chrname);
if(refid < 0){
cerr << "Cannot retrieve the reference ID for "<< chrname << endl;
return 1;
}
//cout<<"redif "<<refid<<endl;
//setting the BAM reader at that position
reader.SetRegion(refid,
0,
refid,
-1);
vector<RefData> testRefData=reader.GetReferenceData();
const SamHeader header = reader.GetHeader();
const RefVector references = reader.GetReferenceData();
BamWriter writerDeam;
if ( !writerDeam.Open(deambam, header, references) ) {
cerr << "Could not open output BAM file" << endl;
return 1;
}
BamWriter writerNoDeam;
if ( !writerNoDeam.Open(nondeambam, header, references) ) {
cerr << "Could not open output BAM file" << endl;
return 1;
}
unsigned int totalReads =0;
unsigned int deaminatedReads =0;
unsigned int ndeaminatedReads =0;
//.........这里部分代码省略.........
示例15: main
//.........这里部分代码省略.........
regionlist.push_back(region);
}
else if (has_regionFile == true)
{
ifstream RG(RegionFile.c_str(), ios_base::in);
string line;
while(getline(RG,line))
{
BamRegion region;
ParseRegionString(line, reader, region);
regionlist.push_back(region);
}
RG.close();
}
else if ( (has_regionFile == false) && (has_region == false) )
{
for (int i= 0; i < (int)referencedata.size(); i++)
{
string regionstr = referencedata.at(i).RefName;
BamRegion region;
ParseRegionString(regionstr, reader, region);
if (!reader.SetRegion(region)) // Bam region will get [0,101) = 0 to 100 => [closed, half-opened)
{
cerr << "ERROR: set region " << regionstr << " failed. Check that REGION describes a valid range... Aborting" << endl;
reader.Close();
exit(1);
}
else
regionlist.push_back(region);
}
}
////
BamWriter writer;
if (!writer.Open("stdout", reader.GetHeaderText(), reader.GetReferenceData()))
{
cerr << "could not open stdout for writing" << endl;
exit(1);
}
//// Smallest start position and Largest end position for Req Seq
vector<RefData>::iterator refdataIter = referencedata.begin();
vector<BamRegion>::iterator regionListIter = regionlist.begin();
// CLASS
RealignFunctionsClass RealignFunction;
map<int, string> RefIDRedName;
vector<SalRealignInfo> AlGroups;
multimap<int, BamAlignment> SortRealignedAlignmentsMultimap;
int refid = 0;
BamAlignment alignment;
bool IsNextAlignment = reader.GetNextAlignment(alignment);
//cerr << " " << alignment.Name << " Chr " << alignment.RefID << " Startpos: " << alignment.Position << " Endpos: " << alignment.GetEndPosition() << " Length: " << alignment.Length << endl;
int windowrealigned = 0;
int TotalWindowDetected = 0;
int TotalReadsAligned = 0;
int TotalWindow = 0;
int TotalReads = 0;
while (refdataIter != referencedata.end() )
{
string refname = refdataIter->RefName;