[med-svn] [Git][med-team/biobambam2][upstream] New upstream version 2.0.152+dfsg

Steffen Möller gitlab at salsa.debian.org
Fri Jan 24 13:39:26 GMT 2020



Steffen Möller pushed to branch upstream at Debian Med / biobambam2


Commits:
fcb2ab68 by Steffen Moeller at 2020-01-24T12:36:54+01:00
New upstream version 2.0.152+dfsg
- - - - -


11 changed files:

- .gitignore
- ChangeLog
- configure.ac
- src/Makefile.am
- src/programs/bamauxmerge2.cpp
- src/programs/bamconsensus.cpp
- src/programs/bamfeaturecount.cpp
- src/programs/bamfilterk.cpp
- src/programs/bamtofastq.1
- src/programs/bamtofastq.cpp
- + src/programs/vcfreplacecontigs.cpp


Changes:

=====================================
.gitignore
=====================================
@@ -64,4 +64,5 @@ src/populaterefcache
 src/vcfconcat
 src/vcfsort
 removespace.sh
-src/filtergtf
\ No newline at end of file
+src/filtergtf
+src/vcfreplacecontigs


=====================================
ChangeLog
=====================================
@@ -1,3 +1,35 @@
+biobambam2 (2.0.152-1) unstable; urgency=medium
+
+  * update libmaus2 version to 2.0.694
+
+ -- German Tischler-Höhle <germant at miltenyibiotec.de>  Wed, 22 Jan 2020 09:58:27 +0100
+
+biobambam2 (2.0.151-1) unstable; urgency=medium
+
+  * bump libmaus2 version
+
+ -- German Tischler-Höhle <germant at miltenyibiotec.de>  Tue, 21 Jan 2020 16:41:38 +0100
+
+biobambam2 (2.0.150-1) unstable; urgency=medium
+
+  * Add cols (line wrapping) option in bamtofastq
+
+ -- German Tischler-Höhle <germant at miltenyibiotec.de>  Tue, 07 Jan 2020 16:37:02 +0100
+
+biobambam2 (2.0.149-1) unstable; urgency=medium
+
+  * use kmerCallbackPosFR instead of kmerCallbackPos in bamfilterk
+  * Add vcfreplacecontigs program
+
+ -- German Tischler-Höhle <germant at miltenyibiotec.de>  Tue, 07 Jan 2020 09:02:29 +0100
+
+biobambam2 (2.0.148-1) unstable; urgency=medium
+
+  * compute maximum depth in bamfeaturecount
+  * fix output of wrong reference id in bamfeaturecount if GTF chrom set is a subset of BAM chrom set
+
+ -- German Tischler-Höhle <germant at miltenyibiotec.de>  Wed, 13 Nov 2019 12:53:00 +0100
+
 biobambam2 (2.0.147-1) unstable; urgency=medium
 
   * fix heap comparisons in bamconsensus


=====================================
configure.ac
=====================================
@@ -1,4 +1,4 @@
-AC_INIT(biobambam2,2.0.147,[germant at miltenyibiotec.de],[biobambam2],[https://gitlab.com/german.tischler/biobambam2])
+AC_INIT(biobambam2,2.0.152,[germant at miltenyibiotec.de],[biobambam2],[https://gitlab.com/german.tischler/biobambam2])
 AC_CANONICAL_SYSTEM
 AC_PROG_LIBTOOL
 
@@ -165,7 +165,7 @@ if test ! -z "${with_libmaus2}" ; then
 	fi
 fi
 
-PKG_CHECK_MODULES([libmaus2],[libmaus2 >= 2.0.683])
+PKG_CHECK_MODULES([libmaus2],[libmaus2 >= 2.0.694])
 
 if test ! -z "${with_libmaus2}" ; then
 	if test ! -z "${PKGCONFIGPATHSAVE}" ; then
@@ -300,7 +300,7 @@ if test "${have_libmaus2_irods}" = "yes" ; then
 		fi
 	fi
 
-	PKG_CHECK_MODULES([libmaus2irods],[libmaus2irods >= 2.0.683])
+	PKG_CHECK_MODULES([libmaus2irods],[libmaus2irods >= 2.0.694])
 
 	LIBMAUS2IRODSCPPFLAGS="${libmaus2irods_CFLAGS}"
 	LIBMAUS2IRODSLIBS="${libmaus2irods_LIBS}"
@@ -463,7 +463,7 @@ AC_ARG_ENABLE(install_uncommon,
         AS_HELP_STRING([--enable-install-uncommon],[enable installation of some uncommon programs (default no)]),
         [install_uncommon=${enableval}],[install_uncommon=no])
 
-UNCOMMON="bamfilter bamfixmatecoordinates bamfixmatecoordinatesnamesorted bamtoname bamdisthist fastabgzfextract bamheap bamfrontback bamrandomtag bamheap2 bamheap3 bamtagconversion fastqtobampar bambisect vcffilterinfo vcfpatchcontigprepend vcfconcat vcfsort filtergtf bamconsensus"
+UNCOMMON="bamfilter bamfixmatecoordinates bamfixmatecoordinatesnamesorted bamtoname bamdisthist fastabgzfextract bamheap bamfrontback bamrandomtag bamheap2 bamheap3 bamtagconversion fastqtobampar bambisect vcffilterinfo vcfpatchcontigprepend vcfconcat vcfsort filtergtf bamconsensus vcfreplacecontigs"
 UNCOMMONINSTALLED=
 UNCOMMONUNINSTALLED=
 if test "${install_uncommon}" = "yes" ; then


=====================================
src/Makefile.am
=====================================
@@ -138,6 +138,7 @@ EXTRA_PROGRAMS = blastnxmltobam \
 	vcfpatchcontigprepend \
 	vcfconcat \
 	vcfsort \
+	vcfreplacecontigs \
 	filtergtf
 
 populaterefcache_SOURCES = programs/populaterefcache.cpp biobambam2/Licensing.cpp
@@ -600,6 +601,11 @@ vcfsort_LDADD = ${LIBMAUS2LIBS}
 vcfsort_LDFLAGS = ${AM_CPPFLAGS} ${LIBMAUS2CPPFLAGS} ${LIBMAUS2LDFLAGS} ${AM_LDFLAGS}
 vcfsort_CPPFLAGS = ${AM_CPPFLAGS} ${LIBMAUS2CPPFLAGS}
 
+vcfreplacecontigs_SOURCES = programs/vcfreplacecontigs.cpp biobambam2/Licensing.cpp
+vcfreplacecontigs_LDADD = ${LIBMAUS2LIBS}
+vcfreplacecontigs_LDFLAGS = ${AM_CPPFLAGS} ${LIBMAUS2CPPFLAGS} ${LIBMAUS2LDFLAGS} ${AM_LDFLAGS}
+vcfreplacecontigs_CPPFLAGS = ${AM_CPPFLAGS} ${LIBMAUS2CPPFLAGS}
+
 bamfiltereofblocks_SOURCES = programs/bamfiltereofblocks.cpp biobambam2/Licensing.cpp biobambam2/RunEOFFilter.cpp
 bamfiltereofblocks_LDADD = ${LIBMAUS2LIBS}
 bamfiltereofblocks_LDFLAGS = ${AM_CPPFLAGS} ${LIBMAUS2CPPFLAGS} ${LIBMAUS2LDFLAGS} ${AM_LDFLAGS}


=====================================
src/programs/bamauxmerge2.cpp
=====================================
@@ -47,6 +47,7 @@
 #include <libmaus2/util/LELoad.hpp>
 #include <libmaus2/bambam/ProgramHeaderLineSet.hpp>
 #include <libmaus2/fastx/FastAReader.hpp>
+#include <libmaus2/bambam/StrCmpNum.hpp>
 
 #include <biobambam2/BamBamConfig.hpp>
 #include <biobambam2/Licensing.hpp>


=====================================
src/programs/bamconsensus.cpp
=====================================
@@ -1854,7 +1854,6 @@ std::vector<ConsensusPart> handleConsensus(
 		}
 		#endif
 
-
 		// get set of branch points
 		std::set<BranchPoint> SBP;
 		for ( uint64_t i = 0; i < VBL.size(); ++i )
@@ -1873,17 +1872,22 @@ std::vector<ConsensusPart> handleConsensus(
 			BranchPoint const & from = cur.from;
 			BranchPoint const & to = cur.to;
 
+			// get from id in branch point vector
 			uint64_t const fromid = std::lower_bound(VBP.begin(),VBP.begin()+VBP.size(),from) - VBP.begin();
 			assert ( fromid < VBP.size() && VBP[fromid] == from );
+			// get to id in branch point vector
 			uint64_t const toid = std::lower_bound(VBP.begin(),VBP.begin()+VBP.size(),to) - VBP.begin();
+			//
 			assert ( toid < VBP.size() && VBP[toid] == to );
 
+			// store link (1 based)
 			edgeMap[fromid+1].push_back(toid+1);
 		}
 
 		std::vector< std::vector<uint64_t> > Vcomp;
 		std::map<uint64_t,uint64_t> Vcompmap;
 
+		// compute connected components
 		{
 			std::set<uint64_t> unseen;
 			std::map<uint64_t,std::vector<uint64_t> > redgeMap;
@@ -1900,7 +1904,6 @@ std::vector<ConsensusPart> handleConsensus(
 				}
 			}
 
-
 			while ( unseen.size() )
 			{
 				#if 0
@@ -1945,9 +1948,11 @@ std::vector<ConsensusPart> handleConsensus(
 
 				std::vector<uint64_t> const V(component.begin(),component.end());
 
+				// set branch point id to component map
 				for ( uint64_t i = 0; i < V.size(); ++i )
 					Vcompmap[V[i]] = Vcomp.size();
 
+				// push connected component
 				Vcomp.push_back(V);
 
 				#if 0
@@ -1959,6 +1964,7 @@ std::vector<ConsensusPart> handleConsensus(
 			}
 		}
 
+		// consider connected components
 		for ( uint64_t z = 0; z < Vcomp.size(); ++z )
 		{
 			std::vector<uint64_t> const & V = Vcomp[z];
@@ -1968,13 +1974,16 @@ std::vector<ConsensusPart> handleConsensus(
 			int64_t maxx = -1;
 			int64_t maxu = -1;
 
+			// iterate over branch points in component
 			for ( uint64_t y = 0; y < V.size(); ++y )
 			{
 				assert ( V[y] > 0 );
+				// get branch point
 				BranchPoint const & BP = VBP[V[y]-1];
 
 				typedef std::vector<BranchLink>::const_iterator it;
 
+				// get branch links originating from BP
 				std::pair<it,it> const P = std::equal_range(
 					VBL.begin(),
 					VBL.end(),
@@ -1982,9 +1991,12 @@ std::vector<ConsensusPart> handleConsensus(
 					BranchLinkFromComparator()
 				);
 
+				// iterate over branch links
 				for ( it x = P.first; x != P.second; ++x )
 				{
+					// get link
 					BranchLink const & BL = *x;
+					// get kmer links
 					KmerLink const * KL_A = AKLBL.begin() + BL.link_start;
 					KmerLink const * KL_E = AKLBL.begin() + BL.link_end;
 
@@ -1993,8 +2005,10 @@ std::vector<ConsensusPart> handleConsensus(
 
 					// std::cerr << BL << std::endl;
 
+					// iterate over kmer links on branch link
 					for ( KmerLink const * KL_C = KL_A; KL_C != KL_E; ++KL_C )
 					{
+						// get frequency of from and to
 						int64_t const fromfreq = KL_C->fromfreq;
 						int64_t const tofreq = KL_C->tofreq;
 
@@ -2021,10 +2035,12 @@ std::vector<ConsensusPart> handleConsensus(
 
 			assert ( maxfreq > 0 );
 
+			// get branch point carying maximum frequency link
 			BranchPoint const & BP = VBP[V[maxy]-1];
 
 			typedef std::vector<BranchLink>::const_iterator it;
 
+			// get vector of links originating from BP
 			std::pair<it,it> const P = std::equal_range(
 				VBL.begin(),
 				VBL.end(),
@@ -2048,8 +2064,10 @@ std::vector<ConsensusPart> handleConsensus(
 			BranchLink curBL = P.first[maxx];
 			VBLmax.push_back(curBL);
 
+			// follow backward links from curBL
 			while ( true )
 			{
+				// look for links
 				std::pair<it,it> const LP =
 					std::equal_range(
 						VBLto.begin(),
@@ -2058,8 +2076,10 @@ std::vector<ConsensusPart> handleConsensus(
 						BranchLinkToComparator()
 					);
 
+				// if any
 				if ( LP.second-LP.first )
 				{
+					// look for maximum weight
 					double weight = -std::numeric_limits<double>::max();
 					int64_t maxi = -1;
 					for ( int64_t i = 0; i < LP.second-LP.first; ++i )
@@ -2079,6 +2099,7 @@ std::vector<ConsensusPart> handleConsensus(
 				}
 			}
 
+			// reverse path (we were going backward)
 			std::reverse(VBLmax.begin(),VBLmax.end());
 
 			curBL = P.first[maxx];
@@ -2086,8 +2107,10 @@ std::vector<ConsensusPart> handleConsensus(
 			std::vector<BranchLink> VBLfrom(VBL);
 			std::sort(VBLfrom.begin(),VBLfrom.end(),BranchLinkFromComparator());
 
+			// follow forward
 			while ( true )
 			{
+				// look for extensions
 				std::pair<it,it> const LP =
 					std::equal_range(
 						VBLfrom.begin(),
@@ -2096,8 +2119,10 @@ std::vector<ConsensusPart> handleConsensus(
 						BranchLinkFromComparator()
 					);
 
+				// if any
 				if ( LP.second-LP.first )
 				{
+					// look for maximum weight
 					double weight = -std::numeric_limits<double>::max();
 					int64_t maxi = -1;
 					for ( int64_t i = 0; i < LP.second-LP.first; ++i )
@@ -2123,6 +2148,7 @@ std::vector<ConsensusPart> handleConsensus(
 			std::cerr << "full path" << std::endl;
 			#endif
 
+			// decode kmer path
 			std::ostringstream fullpathstr;
 			if ( VBLmax.size() )
 			{


=====================================
src/programs/bamfeaturecount.cpp
=====================================
@@ -137,6 +137,8 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 	libmaus2::gtf::GTFData::unique_ptr_type pGTF(libmaus2::gtf::GTFData::obtain(annofn,verbose));
 	libmaus2::gtf::GTFData const & gtfdata = *pGTF;
 
+	// gtfdata.print(std::cerr);
+
 	if ( exportcdna )
 	{
 		if ( !arginfo.hasArg("reference") )
@@ -651,6 +653,10 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 					}
 					#endif
 				}
+				else
+				{
+					// std::cerr << "[W] no GTF data found for " << algn.formatAlignment(bamheader) << std::endl;
+				}
 			}
 
 			#if 0
@@ -672,7 +678,6 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 
 
 	{
-
 		libmaus2::autoarray::AutoArray<libmaus2::gtf::ExonInfo> AEI(gtfdata.Aexon.size());
 
 		libmaus2::sorting::SerialisingSortingBufferedOutputFileArray<libmaus2::gtf::ExonInterval>::merger_ptr_type merger(
@@ -695,9 +700,10 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 				uint64_t uncovered;
 				uint64_t basecover;
 				uint64_t total;
+				uint64_t maxdepth;
 
 				DepthCallback()
-				: uncovered(0), basecover(0), total(0) {}
+				: uncovered(0), basecover(0), total(0), maxdepth(0) {}
 
 				void operator()(uint64_t const from, uint64_t const to, uint64_t const depth)
 				{
@@ -705,6 +711,9 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 
 					uint64_t const l = to-from;
 
+					if ( depth > maxdepth )
+						maxdepth = depth;
+
 					if ( depth )
 					{
 						basecover += l * depth;
@@ -841,13 +850,14 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 						info.unique.uncovered += DC.uncovered;
 						info.unique.basecount += DC.basecover;
 						info.unique.total += DC.total;
+						info.unique.maxdepth = std::max(info.unique.maxdepth,DC.maxdepth);
 					}
 					else
 					{
 						info.ambig.uncovered += DC.uncovered;
 						info.ambig.basecount += DC.basecover;
 						info.ambig.total += DC.total;
-
+						info.ambig.maxdepth = std::max(info.ambig.maxdepth,DC.maxdepth);
 					}
 				}
 
@@ -902,8 +912,7 @@ int bamfeaturecount(libmaus2::util::ArgInfo const & arginfo)
 			char const * name = gtfdata.Aid.begin() + G.name_offset;
 			uint64_t o = 0;
 
-			std::string const refidname = bamheader.getRefIDName(G.chr_id);
-
+			std::string const refidname = gtfdata.Vchr[G.chr_id]; //bamheader.getRefIDName(G.chr_id);
 
 			for ( uint64_t ti = G.start; ti < G.end; ++ti )
 				if (


=====================================
src/programs/bamfilterk.cpp
=====================================
@@ -451,13 +451,14 @@ int bamfilterk(libmaus2::util::ArgInfo const & arginfo)
 
 			void operator()(uint64_t const kmer, uint64_t const pos, bool const z)
 			{
+				//std::cerr << "kmer " << kmer << " seqid " << seqid << " pos " << pos << " z " << z << std::endl;
 				AK.push(o_AK,KMer(kmer,seqid,pos,z));
 			}
 		};
 
 		Callback CB(i,AK,o_AK);
 
-		KB.kmerCallbackPos(
+		KB.kmerCallbackPosFR(
 			Vref[i].c_str(),
 			Vref[i].size(),
 			CB,


=====================================
src/programs/bamtofastq.1
=====================================
@@ -204,6 +204,10 @@ The suffixes k, m, g, K, M and G can be used to denote that the argument is
 to be multiplied by 1024, 1024^2, 1024^3, 1000, 1000^2 or 1000^3
 respectively.
 .PP
+.B cols=<>:
+If set to an unsigned number then wrap the sequence and quality lines at
+this number of columns. By default no wrapping is performed.
+.PP
 .B splitprefix=<bamtofastq_split>:
 file prefix if split>0 and collate=0.
 .PP


=====================================
src/programs/bamtofastq.cpp
=====================================
@@ -229,6 +229,11 @@ static uint64_t getDefaultMaxOutput()
 	return std::numeric_limits<uint64_t>::max();
 }
 
+static uint64_t getDefaultCols()
+{
+	return 0;
+}
+
 template<bamtofastq_conversion_type conversion_type>
 void bamtofastqNonCollating(libmaus2::util::ArgInfo const & arginfo, libmaus2::bambam::BamAlignmentDecoder & bamdec)
 {
@@ -239,6 +244,7 @@ void bamtofastqNonCollating(libmaus2::util::ArgInfo const & arginfo, libmaus2::b
 	bool const gz = arginfo.getValue<int>("gz",0);
 	uint64_t const split = arginfo.getValueUnsignedNumeric("split",getDefaultSplit());
 	uint64_t const maxoutput = arginfo.getValueUnsignedNumeric("maxoutput",getDefaultMaxOutput());
+	uint64_t const cols = arginfo.getValueUnsignedNumeric("cols",getDefaultCols());
 	std::string splitprefix = arginfo.getUnparsedValue("splitprefix",getDefaultSplitPrefix());
 	int const level = libmaus2::bambam::BamBlockWriterBaseFactory::checkCompressionLevel(arginfo.getValue<int>("level",Z_DEFAULT_COMPRESSION));
 	uint32_t const excludeflags = libmaus2::bambam::BamFlagBase::stringToFlags(arginfo.getValue<std::string>("exclude","SECONDARY,SUPPLEMENTARY"));
@@ -256,6 +262,14 @@ void bamtofastqNonCollating(libmaus2::util::ArgInfo const & arginfo, libmaus2::b
 	std::vector<std::string> const Vtags = parseTags(s_auxtags);
 	libmaus2::bambam::BamAuxFilterVector auxtags(Vtags);
 
+	if ( cols%2 == 1 )
+	{
+		libmaus2::exception::LibMausException lme;
+		lme.getStream() << "[E] uneven numbers (" << cols << ") for cols are not supported" << std::endl;
+		lme.finish();
+		throw lme;
+	}
+
 	if ( split )
 	{
 		uint64_t const mult = getSplitMultiplier<conversion_type>();
@@ -298,19 +312,19 @@ void bamtofastqNonCollating(libmaus2::util::ArgInfo const & arginfo, libmaus2::b
 			switch ( conversion_type )
 			{
 				case bamtofastq_conversion_type_fastq:
-					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(algn.D.begin(),T);
+					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(algn.D.begin(),T,cols);
 					break;
 				case bamtofastq_conversion_type_fastq_casava18:
-					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(algn.D.begin(),algn.blocksize,T);
+					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(algn.D.begin(),algn.blocksize,T,cols);
 					break;
 				case bamtofastq_conversion_type_fasta:
-					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(algn.D.begin(),T);
+					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(algn.D.begin(),T,cols);
 					break;
 				case bamtofastq_conversion_type_fastq_try_oq:
-					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(algn.D.begin(),algn.blocksize,T);
+					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(algn.D.begin(),algn.blocksize,T,cols);
 					break;
 				case bamtofastq_conversion_type_fastq_aux:
-					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(algn.D.begin(),algn.blocksize,auxtags,T);
+					la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(algn.D.begin(),algn.blocksize,auxtags,T,cols);
 					break;
 			}
 
@@ -437,6 +451,15 @@ void bamtofastqCollating(
 	CollateCombs combs;
 
 	bool const outputperreadgroup = arginfo.getValue<unsigned int>("outputperreadgroup",getDefaultOutputPerReadgroup());
+	uint64_t const cols = arginfo.getValueUnsignedNumeric("cols",getDefaultCols());
+
+	if ( cols%2 == 1 )
+	{
+		libmaus2::exception::LibMausException lme;
+		lme.getStream() << "[E] uneven numbers (" << cols << ") for cols are not supported" << std::endl;
+		lme.finish();
+		throw lme;
+	}
 
 	std::string const s_auxtags = arginfo.getUnparsedValue("tags",getDefaultTags());
 	std::vector<std::string> const Vtags = parseTags(s_auxtags);
@@ -611,19 +634,19 @@ void bamtofastqCollating(
 				switch ( conversion_type )
 				{
 					case bamtofastq_conversion_type_fasta:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_casava18:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_try_oq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_aux:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 						break;
 				}
 
@@ -634,19 +657,19 @@ void bamtofastqCollating(
 				switch ( conversion_type )
 				{
 					case bamtofastq_conversion_type_fasta:
-						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Db,T);
+						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Db,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq:
-						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Db,T);
+						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Db,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_casava18:
-						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Db,ob->blocksizeb,T);
+						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Db,ob->blocksizeb,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_try_oq:
-						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Db,ob->blocksizeb,T);
+						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Db,ob->blocksizeb,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_aux:
-						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Db,ob->blocksizeb,auxtags,T);
+						lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Db,ob->blocksizeb,auxtags,T,cols);
 						break;
 				}
 
@@ -663,19 +686,19 @@ void bamtofastqCollating(
 				switch ( conversion_type )
 				{
 					case bamtofastq_conversion_type_fasta:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_casava18:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_try_oq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_aux:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 						break;
 				}
 
@@ -692,19 +715,19 @@ void bamtofastqCollating(
 				switch ( conversion_type )
 				{
 					case bamtofastq_conversion_type_fasta:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_casava18:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_try_oq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_aux:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 						break;
 				}
 
@@ -721,19 +744,19 @@ void bamtofastqCollating(
 				switch ( conversion_type )
 				{
 					case bamtofastq_conversion_type_fasta:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_casava18:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_try_oq:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 						break;
 					case bamtofastq_conversion_type_fastq_aux:
-						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+						la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 						break;
 				}
 
@@ -796,19 +819,19 @@ void bamtofastqCollating(
 					switch ( conversion_type )
 					{
 						case bamtofastq_conversion_type_fasta:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_casava18:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_try_oq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_aux:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 							break;
 					}
 					OFS.Fout.write(reinterpret_cast<char const *>(T.begin()),la);
@@ -817,19 +840,19 @@ void bamtofastqCollating(
 					switch ( conversion_type )
 					{
 						case bamtofastq_conversion_type_fasta:
-							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Db,T);
+							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Db,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq:
-							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Db,T);
+							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Db,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_casava18:
-							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Db,ob->blocksizeb,T);
+							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Db,ob->blocksizeb,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_try_oq:
-							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Db,ob->blocksizeb,T);
+							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Db,ob->blocksizeb,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_aux:
-							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Db,ob->blocksizeb,auxtags,T);
+							lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Db,ob->blocksizeb,auxtags,T,cols);
 							break;
 					}
 					OFS.F2out.write(reinterpret_cast<char const *>(T.begin()),lb);
@@ -844,19 +867,19 @@ void bamtofastqCollating(
 					switch ( conversion_type )
 					{
 						case bamtofastq_conversion_type_fasta:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_casava18:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_try_oq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_aux:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 							break;
 					}
 					OFS.Sout.write(reinterpret_cast<char const *>(T.begin()),la);
@@ -871,19 +894,19 @@ void bamtofastqCollating(
 					switch ( conversion_type )
 					{
 						case bamtofastq_conversion_type_fasta:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_casava18:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_try_oq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_aux:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 							break;
 					}
 					OFS.Oout.write(reinterpret_cast<char const *>(T.begin()),la);
@@ -898,19 +921,19 @@ void bamtofastqCollating(
 					switch ( conversion_type )
 					{
 						case bamtofastq_conversion_type_fasta:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastA(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQ(ob->Da,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_casava18:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQCasava18(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_try_oq:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQTryOQ(ob->Da,ob->blocksizea,T,cols);
 							break;
 						case bamtofastq_conversion_type_fastq_aux:
-							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T);
+							la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQAux(ob->Da,ob->blocksizea,auxtags,T,cols);
 							break;
 					}
 					OFS.O2out.write(reinterpret_cast<char const *>(T.begin()),la);
@@ -1037,6 +1060,15 @@ void bamtofastqCollatingRanking(
 		CHCBD.disableValidation();
 
 	libmaus2::bambam::BamToFastqOutputFileSet OFS(arginfo);
+	uint64_t const cols = arginfo.getValueUnsignedNumeric("cols",getDefaultCols());
+
+	if ( cols%2 == 1 )
+	{
+		libmaus2::exception::LibMausException lme;
+		lme.getStream() << "[E] uneven numbers (" << cols << ") for cols are not supported" << std::endl;
+		lme.finish();
+		throw lme;
+	}
 
 	try
 	{
@@ -1059,9 +1091,9 @@ void bamtofastqCollatingRanking(
 			{
 				uint64_t const ranka = libmaus2::bambam::BamAlignmentDecoderBase::getRank(ob->Da,ob->blocksizea);
 				uint64_t const rankb = libmaus2::bambam::BamAlignmentDecoderBase::getRank(ob->Db,ob->blocksizeb);
-				uint64_t const la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,rankb,T);
+				uint64_t const la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,rankb,T,cols);
 				OFS.Fout.write(reinterpret_cast<char const *>(T.begin()),la);
-				uint64_t lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Db,ranka,rankb,T);
+				uint64_t lb = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Db,ranka,rankb,T,cols);
 				OFS.F2out.write(reinterpret_cast<char const *>(T.begin()),lb);
 
 				combs.pairs += 1;
@@ -1072,7 +1104,7 @@ void bamtofastqCollatingRanking(
 			{
 				uint64_t const ranka = libmaus2::bambam::BamAlignmentDecoderBase::getRank(ob->Da,ob->blocksizea);
 
-				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T);
+				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T,cols);
 				OFS.Sout.write(reinterpret_cast<char const *>(T.begin()),la);
 
 				combs.single += 1;
@@ -1083,7 +1115,7 @@ void bamtofastqCollatingRanking(
 			{
 				uint64_t const ranka = libmaus2::bambam::BamAlignmentDecoderBase::getRank(ob->Da,ob->blocksizea);
 
-				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T);
+				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T,cols);
 				OFS.Oout.write(reinterpret_cast<char const *>(T.begin()),la);
 
 				combs.orphans1 += 1;
@@ -1094,7 +1126,7 @@ void bamtofastqCollatingRanking(
 			{
 				uint64_t const ranka = libmaus2::bambam::BamAlignmentDecoderBase::getRank(ob->Da,ob->blocksizea);
 
-				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T);
+				uint64_t la = libmaus2::bambam::BamAlignmentDecoderBase::putFastQRanks(ob->Da,ranka,ranka,T,cols);
 				OFS.O2out.write(reinterpret_cast<char const *>(T.begin()),la);
 
 				combs.orphans2 += 1;
@@ -1299,6 +1331,7 @@ int main(int argc, char * argv[])
 				V.push_back ( std::pair<std::string,std::string> ( "outputperreadgroupprefix=<[]>", "prefix added in front of file names if outputperreadgroup=1 (for collate=1 only)" ) );
 				V.push_back ( std::pair<std::string,std::string> ( std::string("casava18=<[")+libmaus2::util::NumberSerialisation::formatNumber(getDefaultCasava18(),0)+"]>", "restore input taken by c18pe option" ) );
 				V.push_back ( std::pair<std::string,std::string> ( "maxoutput=<[]>", "output no more than this number of entries (default: no limit, collate=0 only)" ) );
+				V.push_back ( std::pair<std::string,std::string> ( "cols=<[]>", "wrap sequence and quality lines at this number of columns (default: do not wrap, even numbers only)" ) );
 
 				::biobambam2::Licensing::printMap(std::cerr,V);
 


=====================================
src/programs/vcfreplacecontigs.cpp
=====================================
@@ -0,0 +1,188 @@
+/**
+    bambam
+    Copyright (C) 2019 German Tischler
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+**/
+#include <config.h>
+
+#include <libmaus2/vcf/VCFParser.hpp>
+#include <libmaus2/util/ArgInfo.hpp>
+#include <libmaus2/lz/BgzfDeflate.hpp>
+#include <libmaus2/fastx/FastAReader.hpp>
+
+#include <biobambam2/Licensing.hpp>
+
+static int getDefaultVerbose() { return 0; }
+
+int vcfreplacecontigs(libmaus2::util::ArgInfo const & arginfo, std::istream & in, std::ostream & out)
+{
+	//unsigned int const verbose = arginfo.getValue<unsigned int>("verbose",getDefaultVerbose());
+	bool const gz = arginfo.getValue<int>("gz",0);
+
+	libmaus2::lz::BgzfOutputStream::unique_ptr_type pBOS;
+
+	if ( gz )
+	{
+		libmaus2::lz::BgzfOutputStream::unique_ptr_type tBOS(new libmaus2::lz::BgzfOutputStream(out));
+		pBOS = UNIQUE_PTR_MOVE(tBOS);
+	}
+
+	std::ostream & vout = gz ? *pBOS : out;
+
+	libmaus2::vcf::VCFParser vcf(in);
+
+	if ( ! ( 0 < arginfo.getNumRestArgs() ) )
+	{
+		std::cerr << "[E] usage: " << arginfo.progname << " <in.fa> <in.vcf" << std::endl;
+		return EXIT_FAILURE;
+	}
+
+	std::string const fafn = arginfo.getUnparsedRestArg(0);
+	std::vector<libmaus2::bambam::Chromosome> V;
+	std::set<std::string> S;
+	{
+		libmaus2::fastx::FastAReader FA(fafn);
+		libmaus2::fastx::FastAReader::pattern_type pat;
+		while ( FA.getNextPatternUnlocked(pat) )
+		{
+			std::string const name = pat.getShortStringId();
+			V.push_back(libmaus2::bambam::Chromosome(name,pat.spattern.size()));
+			S.insert(name);
+			std::cerr << "[V] pushed " << name << "[" << pat.spattern.size() << "]" << std::endl;
+		}
+	}
+
+	vcf.setChromosomeVector(V);
+	vcf.printText(vout);
+
+
+	std::pair<
+        	libmaus2::util::TabEntry<> const *,
+                char const *
+	> P;
+
+	std::pair<
+		std::vector<std::string>,
+		::libmaus2::trie::LinearHashTrie<char,uint32_t>::shared_ptr_type
+	> const Pcontig = vcf.getContigNamesAndTrie();
+
+	uint64_t line = 0;
+	while ( (P = vcf.readEntry()).first )
+	{
+		if ( P.first->size() )
+		{
+			std::pair<char const *, char const *> const Pchr = P.first->get(0,P.second);
+
+			if ( Pcontig.second->searchCompleteNoFailure(Pchr.first,Pchr.second) != -1 )
+			{
+				char const * a = P.first->get(0,P.second).first;
+				char const * e = P.first->get(P.first->size()-1,P.second).second;
+
+				vout.write(a,e-a);
+				vout.put('\n');
+
+				line += 1;
+
+				if ( line % (1024*1024) == 0 )
+					std::cerr << "[V] " << line << std::endl;
+			}
+			else
+			{
+				libmaus2::exception::LibMausException lme;
+				lme.getStream() << "[E] sequence " << std::string(Pchr.first,Pchr.second) << " does not appear in FastA file provided" << std::endl;
+				lme.finish();
+				throw lme;
+			}
+		}
+	}
+
+	// vcf.unparsedCopy(vout);
+
+	#if 0
+	if ( Vin.size() )
+	{
+		std::pair<bool, char const *> E;
+
+		{
+			libmaus2::aio::InputStreamInstance ISI(Vin[0]);
+			libmaus2::vcf::VCFParser vcf(ISI);
+			vcf.printText(vout);
+			vcf.unparsedCopy(vout);
+		}
+
+		for ( uint64_t j = 1; j < Vin.size(); ++j )
+		{
+			libmaus2::aio::InputStreamInstance ISI(Vin[j]);
+			libmaus2::vcf::VCFParser vcf(ISI);
+			vcf.unparsedCopy(vout);
+		}
+	}
+	#endif
+
+	if ( gz )
+	{
+		pBOS->flush();
+		pBOS->addEOFBlock();
+		pBOS.reset();
+	}
+
+	return EXIT_SUCCESS;
+}
+
+int main(int argc, char * argv[])
+{
+	try
+	{
+		::libmaus2::util::ArgInfo const arginfo(argc,argv);
+
+		for ( uint64_t i = 0; i < arginfo.restargs.size(); ++i )
+			if (
+				arginfo.restargs[i] == "-v"
+				||
+				arginfo.restargs[i] == "--version"
+			)
+			{
+				std::cerr << ::biobambam2::Licensing::license();
+				return EXIT_SUCCESS;
+			}
+			else if (
+				arginfo.restargs[i] == "-h"
+				||
+				arginfo.restargs[i] == "--help"
+			)
+			{
+				std::cerr << ::biobambam2::Licensing::license();
+				std::cerr << std::endl;
+				std::cerr << "Key=Value pairs:" << std::endl;
+				std::cerr << std::endl;
+
+				std::vector< std::pair<std::string,std::string> > V;
+
+				V.push_back ( std::pair<std::string,std::string> ( "verbose=<["+::biobambam2::Licensing::formatNumber(getDefaultVerbose())+"]>", "print progress report (default: 1)" ) );
+
+				::biobambam2::Licensing::printMap(std::cerr,V);
+
+				std::cerr << std::endl;
+				return EXIT_SUCCESS;
+			}
+
+		return vcfreplacecontigs(arginfo,std::cin,std::cout);
+	}
+	catch(std::exception const & ex)
+	{
+		std::cerr << ex.what() << std::endl;
+		return EXIT_FAILURE;
+	}
+}



View it on GitLab: https://salsa.debian.org/med-team/biobambam2/commit/fcb2ab68688ae1e6fb59c424684fa2567ad9a44a

-- 
View it on GitLab: https://salsa.debian.org/med-team/biobambam2/commit/fcb2ab68688ae1e6fb59c424684fa2567ad9a44a
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20200124/dbb3ac6c/attachment-0001.html>


More information about the debian-med-commit mailing list