ngs_server 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/ngs_server +58 -0
- data/data/holder.txt +0 -0
- data/ext/bamtools/CMakeLists.txt +49 -0
- data/ext/bamtools/LICENSE +22 -0
- data/ext/bamtools/README +60 -0
- data/ext/bamtools/Tutorial_Toolkit_BamTools-1.0.pdf +0 -0
- data/ext/bamtools/docs/Doxyfile +1601 -0
- data/ext/bamtools/extconf.rb +9 -0
- data/ext/bamtools/src/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/DependInfo.cmake +13 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/build.make +65 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/cmake_clean.cmake +8 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/depend.internal +3 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/depend.make +3 -0
- data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/progress.make +2 -0
- data/ext/bamtools/src/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/CMakeLists.txt +18 -0
- data/ext/bamtools/src/ExportHeader.cmake +31 -0
- data/ext/bamtools/src/Makefile +182 -0
- data/ext/bamtools/src/api/BamAlignment.cpp +2432 -0
- data/ext/bamtools/src/api/BamAlignment.h +206 -0
- data/ext/bamtools/src/api/BamAux.h +456 -0
- data/ext/bamtools/src/api/BamConstants.h +127 -0
- data/ext/bamtools/src/api/BamIndex.h +79 -0
- data/ext/bamtools/src/api/BamMultiReader.cpp +395 -0
- data/ext/bamtools/src/api/BamMultiReader.h +126 -0
- data/ext/bamtools/src/api/BamReader.cpp +369 -0
- data/ext/bamtools/src/api/BamReader.h +117 -0
- data/ext/bamtools/src/api/BamWriter.cpp +142 -0
- data/ext/bamtools/src/api/BamWriter.h +63 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/DependInfo.cmake +14 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/build.make +80 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/cmake_clean.cmake +8 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/depend.internal +3 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/depend.make +3 -0
- data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/progress.make +2 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamAlignment.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamMultiReader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamReader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamWriter.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/CXX.includecache +596 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/DependInfo.cmake +41 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamHeader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamProgram.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamProgramChain.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamReadGroup.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamReadGroupDictionary.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamSequence.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamSequenceDictionary.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/build.make +675 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/cmake_clean.cmake +32 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/cmake_clean_target.cmake +3 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/depend.internal +295 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/depend.make +295 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/flags.make +8 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamHeader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamIndexFactory_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamMultiReader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamRandomAccessController_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamReader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamStandardIndex_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamToolsIndex_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamWriter_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BgzfStream_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamFormatParser_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamFormatPrinter_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamHeaderValidator_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/link.txt +2 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/progress.make +24 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamAlignment.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamMultiReader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamReader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamWriter.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/CXX.includecache +596 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/DependInfo.cmake +47 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamHeader.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamProgram.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamProgramChain.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamReadGroup.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamReadGroupDictionary.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamSequence.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamSequenceDictionary.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/build.make +677 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/cmake_clean.cmake +33 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/depend.internal +295 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/depend.make +295 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/flags.make +8 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamHeader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamIndexFactory_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamMultiReader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamRandomAccessController_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamReader_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamStandardIndex_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamToolsIndex_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamWriter_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BgzfStream_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamFormatParser_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamFormatPrinter_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamHeaderValidator_p.cpp.o +0 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/link.txt +1 -0
- data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/progress.make +24 -0
- data/ext/bamtools/src/api/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
- data/ext/bamtools/src/api/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/api/CMakeLists.txt +78 -0
- data/ext/bamtools/src/api/Makefile +902 -0
- data/ext/bamtools/src/api/SamConstants.h +95 -0
- data/ext/bamtools/src/api/SamHeader.cpp +184 -0
- data/ext/bamtools/src/api/SamHeader.h +68 -0
- data/ext/bamtools/src/api/SamProgram.cpp +139 -0
- data/ext/bamtools/src/api/SamProgram.h +61 -0
- data/ext/bamtools/src/api/SamProgramChain.cpp +351 -0
- data/ext/bamtools/src/api/SamProgramChain.h +85 -0
- data/ext/bamtools/src/api/SamReadGroup.cpp +221 -0
- data/ext/bamtools/src/api/SamReadGroup.h +68 -0
- data/ext/bamtools/src/api/SamReadGroupDictionary.cpp +289 -0
- data/ext/bamtools/src/api/SamReadGroupDictionary.h +86 -0
- data/ext/bamtools/src/api/SamSequence.cpp +161 -0
- data/ext/bamtools/src/api/SamSequence.h +60 -0
- data/ext/bamtools/src/api/SamSequenceDictionary.cpp +292 -0
- data/ext/bamtools/src/api/SamSequenceDictionary.h +88 -0
- data/ext/bamtools/src/api/api_global.h +21 -0
- data/ext/bamtools/src/api/cmake_install.cmake +122 -0
- data/ext/bamtools/src/api/internal/BamHeader_p.cpp +132 -0
- data/ext/bamtools/src/api/internal/BamHeader_p.h +71 -0
- data/ext/bamtools/src/api/internal/BamIndexFactory_p.cpp +112 -0
- data/ext/bamtools/src/api/internal/BamIndexFactory_p.h +49 -0
- data/ext/bamtools/src/api/internal/BamMultiMerger_p.h +297 -0
- data/ext/bamtools/src/api/internal/BamMultiReader_p.cpp +805 -0
- data/ext/bamtools/src/api/internal/BamMultiReader_p.h +103 -0
- data/ext/bamtools/src/api/internal/BamRandomAccessController_p.cpp +272 -0
- data/ext/bamtools/src/api/internal/BamRandomAccessController_p.h +93 -0
- data/ext/bamtools/src/api/internal/BamReader_p.cpp +380 -0
- data/ext/bamtools/src/api/internal/BamReader_p.h +112 -0
- data/ext/bamtools/src/api/internal/BamStandardIndex_p.cpp +986 -0
- data/ext/bamtools/src/api/internal/BamStandardIndex_p.h +236 -0
- data/ext/bamtools/src/api/internal/BamToolsIndex_p.cpp +641 -0
- data/ext/bamtools/src/api/internal/BamToolsIndex_p.h +187 -0
- data/ext/bamtools/src/api/internal/BamWriter_p.cpp +424 -0
- data/ext/bamtools/src/api/internal/BamWriter_p.h +66 -0
- data/ext/bamtools/src/api/internal/BgzfStream_p.cpp +438 -0
- data/ext/bamtools/src/api/internal/BgzfStream_p.h +108 -0
- data/ext/bamtools/src/api/internal/SamFormatParser_p.cpp +230 -0
- data/ext/bamtools/src/api/internal/SamFormatParser_p.h +61 -0
- data/ext/bamtools/src/api/internal/SamFormatPrinter_p.cpp +210 -0
- data/ext/bamtools/src/api/internal/SamFormatPrinter_p.h +60 -0
- data/ext/bamtools/src/api/internal/SamHeaderValidator_p.cpp +510 -0
- data/ext/bamtools/src/api/internal/SamHeaderValidator_p.h +101 -0
- data/ext/bamtools/src/api/internal/SamHeaderVersion_p.h +134 -0
- data/ext/bamtools/src/cmake_install.cmake +42 -0
- data/ext/bamtools/src/shared/bamtools_global.h +78 -0
- data/ext/bamtools/src/third_party/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
- data/ext/bamtools/src/third_party/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/third_party/CMakeLists.txt +10 -0
- data/ext/bamtools/src/third_party/Makefile +167 -0
- data/ext/bamtools/src/third_party/cmake_install.cmake +35 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/CXX.includecache +144 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/DependInfo.cmake +27 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/build.make +157 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/cmake_clean.cmake +13 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/depend.internal +31 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/depend.make +31 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/flags.make +8 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_reader.cpp.o +0 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_value.cpp.o +0 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_writer.cpp.o +0 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/link.txt +1 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/progress.make +4 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/third_party/jsoncpp/CMakeLists.txt +23 -0
- data/ext/bamtools/src/third_party/jsoncpp/LICENSE +55 -0
- data/ext/bamtools/src/third_party/jsoncpp/Makefile +263 -0
- data/ext/bamtools/src/third_party/jsoncpp/cmake_install.cmake +29 -0
- data/ext/bamtools/src/third_party/jsoncpp/json.h +15 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_batchallocator.h +130 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_config.h +42 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_features.h +47 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_forwards.h +42 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_internalarray.inl +453 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_internalmap.inl +612 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_reader.cpp +870 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_reader.h +201 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_tool.h +93 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_value.cpp +1701 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_value.h +1059 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_valueiterator.inl +297 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_writer.cpp +819 -0
- data/ext/bamtools/src/third_party/jsoncpp/json_writer.h +179 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/CMakeDirectoryInformation.cmake +25 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/CXX.includecache +698 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/DependInfo.cmake +34 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_convert.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_count.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_coverage.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_filter.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_header.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_index.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_merge.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_random.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_resolve.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_revert.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_sort.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_split.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_stats.cpp.o +0 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/build.make +447 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/cmake_clean.cmake +24 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/depend.internal +319 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/depend.make +319 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/flags.make +8 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/link.txt +1 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/progress.make +15 -0
- data/ext/bamtools/src/toolkit/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/toolkit/CMakeLists.txt +44 -0
- data/ext/bamtools/src/toolkit/Makefile +560 -0
- data/ext/bamtools/src/toolkit/bamtools.cpp +163 -0
- data/ext/bamtools/src/toolkit/bamtools_convert.cpp +888 -0
- data/ext/bamtools/src/toolkit/bamtools_convert.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_count.cpp +187 -0
- data/ext/bamtools/src/toolkit/bamtools_count.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_coverage.cpp +196 -0
- data/ext/bamtools/src/toolkit/bamtools_coverage.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_filter.cpp +911 -0
- data/ext/bamtools/src/toolkit/bamtools_filter.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_header.cpp +122 -0
- data/ext/bamtools/src/toolkit/bamtools_header.h +38 -0
- data/ext/bamtools/src/toolkit/bamtools_index.cpp +126 -0
- data/ext/bamtools/src/toolkit/bamtools_index.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_merge.cpp +221 -0
- data/ext/bamtools/src/toolkit/bamtools_merge.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_random.cpp +255 -0
- data/ext/bamtools/src/toolkit/bamtools_random.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_resolve.cpp +1396 -0
- data/ext/bamtools/src/toolkit/bamtools_resolve.h +42 -0
- data/ext/bamtools/src/toolkit/bamtools_revert.cpp +194 -0
- data/ext/bamtools/src/toolkit/bamtools_revert.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_sort.cpp +410 -0
- data/ext/bamtools/src/toolkit/bamtools_sort.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_split.cpp +551 -0
- data/ext/bamtools/src/toolkit/bamtools_split.h +38 -0
- data/ext/bamtools/src/toolkit/bamtools_stats.cpp +286 -0
- data/ext/bamtools/src/toolkit/bamtools_stats.h +37 -0
- data/ext/bamtools/src/toolkit/bamtools_tool.h +35 -0
- data/ext/bamtools/src/toolkit/bamtools_version.h +20 -0
- data/ext/bamtools/src/toolkit/bamtools_version.h.in +20 -0
- data/ext/bamtools/src/toolkit/cmake_install.cmake +52 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/CXX.includecache +250 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/DependInfo.cmake +29 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_fasta.cpp.o +0 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_options.cpp.o +0 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_pileup_engine.cpp.o +0 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_utilities.cpp.o +0 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/build.make +184 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/cmake_clean.cmake +14 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/depend.internal +40 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/depend.make +40 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/flags.make +8 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/link.txt +1 -0
- data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/progress.make +5 -0
- data/ext/bamtools/src/utils/CMakeFiles/CMakeDirectoryInformation.cmake +23 -0
- data/ext/bamtools/src/utils/CMakeFiles/progress.marks +1 -0
- data/ext/bamtools/src/utils/CMakeLists.txt +30 -0
- data/ext/bamtools/src/utils/Makefile +290 -0
- data/ext/bamtools/src/utils/bamtools_fasta.cpp +632 -0
- data/ext/bamtools/src/utils/bamtools_fasta.h +47 -0
- data/ext/bamtools/src/utils/bamtools_filter_engine.h +552 -0
- data/ext/bamtools/src/utils/bamtools_filter_properties.h +195 -0
- data/ext/bamtools/src/utils/bamtools_filter_ruleparser.h +319 -0
- data/ext/bamtools/src/utils/bamtools_options.cpp +287 -0
- data/ext/bamtools/src/utils/bamtools_options.h +213 -0
- data/ext/bamtools/src/utils/bamtools_pileup_engine.cpp +327 -0
- data/ext/bamtools/src/utils/bamtools_pileup_engine.h +94 -0
- data/ext/bamtools/src/utils/bamtools_utilities.cpp +333 -0
- data/ext/bamtools/src/utils/bamtools_utilities.h +67 -0
- data/ext/bamtools/src/utils/bamtools_variant.h +128 -0
- data/ext/bamtools/src/utils/cmake_install.cmake +29 -0
- data/ext/bamtools/src/utils/utils_global.h +21 -0
- data/lib/ngs_server/version.rb +3 -0
- data/lib/ngs_server.rb +3 -0
- data/ngs_server.gemspec +23 -0
- metadata +339 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ***************************************************************************
|
|
2
|
+
// bamtools_sort.h (c) 2010 Derek Barnett, Erik Garrison
|
|
3
|
+
// Marth Lab, Department of Biology, Boston College
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Last modified: 7 April 2011 (DB)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Sorts a BAM file
|
|
8
|
+
// ***************************************************************************
|
|
9
|
+
|
|
10
|
+
#ifndef BAMTOOLS_SORT_H
|
|
11
|
+
#define BAMTOOLS_SORT_H
|
|
12
|
+
|
|
13
|
+
#include "bamtools_tool.h"
|
|
14
|
+
|
|
15
|
+
namespace BamTools {
|
|
16
|
+
|
|
17
|
+
class SortTool : public AbstractTool {
|
|
18
|
+
|
|
19
|
+
public:
|
|
20
|
+
SortTool(void);
|
|
21
|
+
~SortTool(void);
|
|
22
|
+
|
|
23
|
+
public:
|
|
24
|
+
int Help(void);
|
|
25
|
+
int Run(int argc, char* argv[]);
|
|
26
|
+
|
|
27
|
+
private:
|
|
28
|
+
struct SortSettings;
|
|
29
|
+
SortSettings* m_settings;
|
|
30
|
+
|
|
31
|
+
struct SortToolPrivate;
|
|
32
|
+
SortToolPrivate* m_impl;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace BamTools
|
|
36
|
+
|
|
37
|
+
#endif // BAMTOOLS_SORT_H
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
// ***************************************************************************
|
|
2
|
+
// bamtools_split.cpp (c) 2010 Derek Barnett, Erik Garrison
|
|
3
|
+
// Marth Lab, Department of Biology, Boston College
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Last modified: 7 April 2011 (DB)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Splits a BAM file on user-specified property, creating a new BAM output
|
|
8
|
+
// file for each value found
|
|
9
|
+
// ***************************************************************************
|
|
10
|
+
|
|
11
|
+
#include "bamtools_split.h"
|
|
12
|
+
|
|
13
|
+
#include <api/BamConstants.h>
|
|
14
|
+
#include <api/BamReader.h>
|
|
15
|
+
#include <api/BamWriter.h>
|
|
16
|
+
#include <utils/bamtools_options.h>
|
|
17
|
+
#include <utils/bamtools_variant.h>
|
|
18
|
+
using namespace BamTools;
|
|
19
|
+
|
|
20
|
+
#include <ctime>
|
|
21
|
+
#include <iostream>
|
|
22
|
+
#include <map>
|
|
23
|
+
#include <sstream>
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <vector>
|
|
26
|
+
using namespace std;
|
|
27
|
+
|
|
28
|
+
namespace BamTools {
|
|
29
|
+
|
|
30
|
+
// string constants
|
|
31
|
+
static const string SPLIT_MAPPED_TOKEN = ".MAPPED";
|
|
32
|
+
static const string SPLIT_UNMAPPED_TOKEN = ".UNMAPPED";
|
|
33
|
+
static const string SPLIT_PAIRED_TOKEN = ".PAIRED_END";
|
|
34
|
+
static const string SPLIT_SINGLE_TOKEN = ".SINGLE_END";
|
|
35
|
+
static const string SPLIT_REFERENCE_TOKEN = ".REF_";
|
|
36
|
+
|
|
37
|
+
string GetTimestampString(void) {
|
|
38
|
+
|
|
39
|
+
// get human readable timestamp
|
|
40
|
+
time_t currentTime;
|
|
41
|
+
time(¤tTime);
|
|
42
|
+
stringstream timeStream("");
|
|
43
|
+
timeStream << ctime(¤tTime);
|
|
44
|
+
|
|
45
|
+
// convert whitespace to '_'
|
|
46
|
+
string timeString = timeStream.str();
|
|
47
|
+
size_t found = timeString.find(" ");
|
|
48
|
+
while (found != string::npos) {
|
|
49
|
+
timeString.replace(found, 1, "_");
|
|
50
|
+
found = timeString.find(" ", found+1);
|
|
51
|
+
}
|
|
52
|
+
return timeString;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// remove copy of filename without extension
|
|
56
|
+
// (so /path/to/file.txt becomes /path/to/file )
|
|
57
|
+
string RemoveFilenameExtension(const string& filename) {
|
|
58
|
+
size_t found = filename.rfind(".");
|
|
59
|
+
return filename.substr(0, found);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
} // namespace BamTools
|
|
63
|
+
|
|
64
|
+
// ---------------------------------------------
|
|
65
|
+
// SplitSettings implementation
|
|
66
|
+
|
|
67
|
+
struct SplitTool::SplitSettings {
|
|
68
|
+
|
|
69
|
+
// flags
|
|
70
|
+
bool HasInputFilename;
|
|
71
|
+
bool HasCustomOutputStub;
|
|
72
|
+
bool IsSplittingMapped;
|
|
73
|
+
bool IsSplittingPaired;
|
|
74
|
+
bool IsSplittingReference;
|
|
75
|
+
bool IsSplittingTag;
|
|
76
|
+
|
|
77
|
+
// string args
|
|
78
|
+
string CustomOutputStub;
|
|
79
|
+
string InputFilename;
|
|
80
|
+
string TagToSplit;
|
|
81
|
+
|
|
82
|
+
// constructor
|
|
83
|
+
SplitSettings(void)
|
|
84
|
+
: HasInputFilename(false)
|
|
85
|
+
, HasCustomOutputStub(false)
|
|
86
|
+
, IsSplittingMapped(false)
|
|
87
|
+
, IsSplittingPaired(false)
|
|
88
|
+
, IsSplittingReference(false)
|
|
89
|
+
, IsSplittingTag(false)
|
|
90
|
+
, CustomOutputStub("")
|
|
91
|
+
, InputFilename(Options::StandardIn())
|
|
92
|
+
, TagToSplit("")
|
|
93
|
+
{ }
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// ---------------------------------------------
|
|
97
|
+
// SplitToolPrivate declaration
|
|
98
|
+
|
|
99
|
+
class SplitTool::SplitToolPrivate {
|
|
100
|
+
|
|
101
|
+
// ctor & dtor
|
|
102
|
+
public:
|
|
103
|
+
SplitToolPrivate(SplitTool::SplitSettings* settings)
|
|
104
|
+
: m_settings(settings)
|
|
105
|
+
{ }
|
|
106
|
+
|
|
107
|
+
~SplitToolPrivate(void) {
|
|
108
|
+
m_reader.Close();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 'public' interface
|
|
112
|
+
public:
|
|
113
|
+
bool Run(void);
|
|
114
|
+
|
|
115
|
+
// internal methods
|
|
116
|
+
private:
|
|
117
|
+
// close & delete BamWriters in map
|
|
118
|
+
template<typename T>
|
|
119
|
+
void CloseWriters(map<T, BamWriter*>& writers);
|
|
120
|
+
// calculate output stub based on IO args given
|
|
121
|
+
void DetermineOutputFilenameStub(void);
|
|
122
|
+
// open our BamReader
|
|
123
|
+
bool OpenReader(void);
|
|
124
|
+
// split alignments in BAM file based on isMapped property
|
|
125
|
+
bool SplitMapped(void);
|
|
126
|
+
// split alignments in BAM file based on isPaired property
|
|
127
|
+
bool SplitPaired(void);
|
|
128
|
+
// split alignments in BAM file based on refID property
|
|
129
|
+
bool SplitReference(void);
|
|
130
|
+
// finds first alignment and calls corresponding SplitTagImpl<>
|
|
131
|
+
// depending on tag type
|
|
132
|
+
bool SplitTag(void);
|
|
133
|
+
// templated split tag implementation
|
|
134
|
+
// handle the various types that are possible for tags
|
|
135
|
+
template<typename T>
|
|
136
|
+
bool SplitTagImpl(BamAlignment& al);
|
|
137
|
+
|
|
138
|
+
// data members
|
|
139
|
+
private:
|
|
140
|
+
SplitTool::SplitSettings* m_settings;
|
|
141
|
+
string m_outputFilenameStub;
|
|
142
|
+
BamReader m_reader;
|
|
143
|
+
string m_header;
|
|
144
|
+
RefVector m_references;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
void SplitTool::SplitToolPrivate::DetermineOutputFilenameStub(void) {
|
|
148
|
+
|
|
149
|
+
// if user supplied output filename stub, use that
|
|
150
|
+
if ( m_settings->HasCustomOutputStub )
|
|
151
|
+
m_outputFilenameStub = m_settings->CustomOutputStub;
|
|
152
|
+
|
|
153
|
+
// else if user supplied input BAM filename, use that (minus ".bam" extension) as stub
|
|
154
|
+
else if ( m_settings->HasInputFilename )
|
|
155
|
+
m_outputFilenameStub = RemoveFilenameExtension(m_settings->InputFilename);
|
|
156
|
+
|
|
157
|
+
// otherwise, user did not specify -stub, and input is coming from STDIN
|
|
158
|
+
// generate stub from timestamp
|
|
159
|
+
else m_outputFilenameStub = GetTimestampString();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
bool SplitTool::SplitToolPrivate::OpenReader(void) {
|
|
163
|
+
|
|
164
|
+
// attempt to open BAM file
|
|
165
|
+
if ( !m_reader.Open(m_settings->InputFilename) ) {
|
|
166
|
+
cerr << "bamtools split ERROR: could not open BAM file: " << m_settings->InputFilename << endl;
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// save file 'metadata' & return success
|
|
171
|
+
m_header = m_reader.GetHeaderText();
|
|
172
|
+
m_references = m_reader.GetReferenceData();
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
bool SplitTool::SplitToolPrivate::Run(void) {
|
|
177
|
+
|
|
178
|
+
// determine output stub
|
|
179
|
+
DetermineOutputFilenameStub();
|
|
180
|
+
|
|
181
|
+
// open up BamReader
|
|
182
|
+
if ( !OpenReader() )
|
|
183
|
+
return false;
|
|
184
|
+
|
|
185
|
+
// determine split type from settings
|
|
186
|
+
if ( m_settings->IsSplittingMapped ) return SplitMapped();
|
|
187
|
+
if ( m_settings->IsSplittingPaired ) return SplitPaired();
|
|
188
|
+
if ( m_settings->IsSplittingReference ) return SplitReference();
|
|
189
|
+
if ( m_settings->IsSplittingTag ) return SplitTag();
|
|
190
|
+
|
|
191
|
+
// if we get here, no property was specified
|
|
192
|
+
cerr << "bamtools split ERROR: no property given to split on... " << endl
|
|
193
|
+
<< "Please use -mapped, -paired, -reference, or -tag TAG to specifiy desired split behavior." << endl;
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
bool SplitTool::SplitToolPrivate::SplitMapped(void) {
|
|
198
|
+
|
|
199
|
+
// set up splitting data structure
|
|
200
|
+
map<bool, BamWriter*> outputFiles;
|
|
201
|
+
map<bool, BamWriter*>::iterator writerIter;
|
|
202
|
+
|
|
203
|
+
// iterate through alignments
|
|
204
|
+
BamAlignment al;
|
|
205
|
+
BamWriter* writer;
|
|
206
|
+
bool isCurrentAlignmentMapped;
|
|
207
|
+
while ( m_reader.GetNextAlignment(al) ) {
|
|
208
|
+
|
|
209
|
+
// see if bool value exists
|
|
210
|
+
isCurrentAlignmentMapped = al.IsMapped();
|
|
211
|
+
writerIter = outputFiles.find(isCurrentAlignmentMapped);
|
|
212
|
+
|
|
213
|
+
// if no writer associated with this value
|
|
214
|
+
if ( writerIter == outputFiles.end() ) {
|
|
215
|
+
|
|
216
|
+
// open new BamWriter
|
|
217
|
+
const string outputFilename = m_outputFilenameStub + ( isCurrentAlignmentMapped
|
|
218
|
+
? SPLIT_MAPPED_TOKEN
|
|
219
|
+
: SPLIT_UNMAPPED_TOKEN ) + ".bam";
|
|
220
|
+
writer = new BamWriter;
|
|
221
|
+
if ( !writer->Open(outputFilename, m_header, m_references) ) {
|
|
222
|
+
cerr << "bamtools split ERROR: could not open " << outputFilename
|
|
223
|
+
<< " for writing." << endl;
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// store in map
|
|
228
|
+
outputFiles.insert( make_pair(isCurrentAlignmentMapped, writer) );
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// else grab corresponding writer
|
|
232
|
+
else writer = (*writerIter).second;
|
|
233
|
+
|
|
234
|
+
// store alignment in proper BAM output file
|
|
235
|
+
if ( writer )
|
|
236
|
+
writer->SaveAlignment(al);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// clean up BamWriters
|
|
240
|
+
CloseWriters(outputFiles);
|
|
241
|
+
|
|
242
|
+
// return success
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
bool SplitTool::SplitToolPrivate::SplitPaired(void) {
|
|
247
|
+
|
|
248
|
+
// set up splitting data structure
|
|
249
|
+
map<bool, BamWriter*> outputFiles;
|
|
250
|
+
map<bool, BamWriter*>::iterator writerIter;
|
|
251
|
+
|
|
252
|
+
// iterate through alignments
|
|
253
|
+
BamAlignment al;
|
|
254
|
+
BamWriter* writer;
|
|
255
|
+
bool isCurrentAlignmentPaired;
|
|
256
|
+
while ( m_reader.GetNextAlignment(al) ) {
|
|
257
|
+
|
|
258
|
+
// see if bool value exists
|
|
259
|
+
isCurrentAlignmentPaired = al.IsPaired();
|
|
260
|
+
writerIter = outputFiles.find(isCurrentAlignmentPaired);
|
|
261
|
+
|
|
262
|
+
// if no writer associated with this value
|
|
263
|
+
if ( writerIter == outputFiles.end() ) {
|
|
264
|
+
|
|
265
|
+
// open new BamWriter
|
|
266
|
+
const string outputFilename = m_outputFilenameStub + ( isCurrentAlignmentPaired
|
|
267
|
+
? SPLIT_PAIRED_TOKEN
|
|
268
|
+
: SPLIT_SINGLE_TOKEN ) + ".bam";
|
|
269
|
+
writer = new BamWriter;
|
|
270
|
+
if ( !writer->Open(outputFilename, m_header, m_references) ) {
|
|
271
|
+
cerr << "bamtool split ERROR: could not open " << outputFilename
|
|
272
|
+
<< " for writing." << endl;
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// store in map
|
|
277
|
+
outputFiles.insert( make_pair(isCurrentAlignmentPaired, writer) );
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// else grab corresponding writer
|
|
281
|
+
else writer = (*writerIter).second;
|
|
282
|
+
|
|
283
|
+
// store alignment in proper BAM output file
|
|
284
|
+
if ( writer )
|
|
285
|
+
writer->SaveAlignment(al);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// clean up BamWriters
|
|
289
|
+
CloseWriters(outputFiles);
|
|
290
|
+
|
|
291
|
+
// return success
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
bool SplitTool::SplitToolPrivate::SplitReference(void) {
|
|
296
|
+
|
|
297
|
+
// set up splitting data structure
|
|
298
|
+
map<int32_t, BamWriter*> outputFiles;
|
|
299
|
+
map<int32_t, BamWriter*>::iterator writerIter;
|
|
300
|
+
|
|
301
|
+
// iterate through alignments
|
|
302
|
+
BamAlignment al;
|
|
303
|
+
BamWriter* writer;
|
|
304
|
+
int32_t currentRefId;
|
|
305
|
+
while ( m_reader.GetNextAlignment(al) ) {
|
|
306
|
+
|
|
307
|
+
// see if bool value exists
|
|
308
|
+
currentRefId = al.RefID;
|
|
309
|
+
writerIter = outputFiles.find(currentRefId);
|
|
310
|
+
|
|
311
|
+
// if no writer associated with this value
|
|
312
|
+
if ( writerIter == outputFiles.end() ) {
|
|
313
|
+
|
|
314
|
+
// open new BamWriter
|
|
315
|
+
const string refName = m_references.at(currentRefId).RefName;
|
|
316
|
+
const string outputFilename = m_outputFilenameStub + SPLIT_REFERENCE_TOKEN + refName + ".bam";
|
|
317
|
+
writer = new BamWriter;
|
|
318
|
+
if ( !writer->Open(outputFilename, m_header, m_references) ) {
|
|
319
|
+
cerr << "bamtools split ERROR: could not open " << outputFilename
|
|
320
|
+
<< " for writing." << endl;
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// store in map
|
|
325
|
+
outputFiles.insert( make_pair(currentRefId, writer) );
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// else grab corresponding writer
|
|
329
|
+
else writer = (*writerIter).second;
|
|
330
|
+
|
|
331
|
+
// store alignment in proper BAM output file
|
|
332
|
+
if ( writer )
|
|
333
|
+
writer->SaveAlignment(al);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// clean up BamWriters
|
|
337
|
+
CloseWriters(outputFiles);
|
|
338
|
+
|
|
339
|
+
// return success
|
|
340
|
+
return true;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// finds first alignment and calls corresponding SplitTagImpl<>() depending on tag type
|
|
344
|
+
bool SplitTool::SplitToolPrivate::SplitTag(void) {
|
|
345
|
+
|
|
346
|
+
// iterate through alignments, until we hit TAG
|
|
347
|
+
BamAlignment al;
|
|
348
|
+
while ( m_reader.GetNextAlignment(al) ) {
|
|
349
|
+
|
|
350
|
+
// look for tag in this alignment and get tag type
|
|
351
|
+
char tagType(0);
|
|
352
|
+
if ( !al.GetTagType(m_settings->TagToSplit, tagType) )
|
|
353
|
+
continue;
|
|
354
|
+
|
|
355
|
+
// request split method based on tag type
|
|
356
|
+
// pass it the current alignment found
|
|
357
|
+
switch ( tagType ) {
|
|
358
|
+
|
|
359
|
+
case (Constants::BAM_TAG_TYPE_INT8) :
|
|
360
|
+
case (Constants::BAM_TAG_TYPE_INT16) :
|
|
361
|
+
case (Constants::BAM_TAG_TYPE_INT32) :
|
|
362
|
+
return SplitTagImpl<int32_t>(al);
|
|
363
|
+
|
|
364
|
+
case (Constants::BAM_TAG_TYPE_UINT8) :
|
|
365
|
+
case (Constants::BAM_TAG_TYPE_UINT16) :
|
|
366
|
+
case (Constants::BAM_TAG_TYPE_UINT32) :
|
|
367
|
+
return SplitTagImpl<uint32_t>(al);
|
|
368
|
+
|
|
369
|
+
case (Constants::BAM_TAG_TYPE_FLOAT) :
|
|
370
|
+
return SplitTagImpl<float>(al);
|
|
371
|
+
|
|
372
|
+
case (Constants::BAM_TAG_TYPE_ASCII) :
|
|
373
|
+
case (Constants::BAM_TAG_TYPE_STRING) :
|
|
374
|
+
case (Constants::BAM_TAG_TYPE_HEX) :
|
|
375
|
+
return SplitTagImpl<string>(al);
|
|
376
|
+
|
|
377
|
+
default:
|
|
378
|
+
fprintf(stderr, "bamtools split ERROR: unknown tag type encountered: [%c]\n", tagType);
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// tag not found, but that's not an error - return success
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// --------------------------------------------------------------------------------
|
|
388
|
+
// template method implementation
|
|
389
|
+
// *Technical Note* - use of template methods declared & defined in ".cpp" file
|
|
390
|
+
// goes against normal practices, but works here because these
|
|
391
|
+
// are purely internal (no one can call from outside this file)
|
|
392
|
+
|
|
393
|
+
// close BamWriters & delete pointers
|
|
394
|
+
template<typename T>
|
|
395
|
+
void SplitTool::SplitToolPrivate::CloseWriters(map<T, BamWriter*>& writers) {
|
|
396
|
+
|
|
397
|
+
typedef map<T, BamWriter*> WriterMap;
|
|
398
|
+
typedef typename WriterMap::iterator WriterMapIterator;
|
|
399
|
+
|
|
400
|
+
// iterate over writers
|
|
401
|
+
WriterMapIterator writerIter = writers.begin();
|
|
402
|
+
WriterMapIterator writerEnd = writers.end();
|
|
403
|
+
for ( ; writerIter != writerEnd; ++writerIter ) {
|
|
404
|
+
BamWriter* writer = (*writerIter).second;
|
|
405
|
+
if ( writer == 0 ) continue;
|
|
406
|
+
|
|
407
|
+
// close BamWriter
|
|
408
|
+
writer->Close();
|
|
409
|
+
|
|
410
|
+
// destroy BamWriter
|
|
411
|
+
delete writer;
|
|
412
|
+
writer = 0;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// clear the container (destroying the items doesn't remove them)
|
|
416
|
+
writers.clear();
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// handle the various types that are possible for tags
|
|
420
|
+
template<typename T>
|
|
421
|
+
bool SplitTool::SplitToolPrivate::SplitTagImpl(BamAlignment& al) {
|
|
422
|
+
|
|
423
|
+
typedef T TagValueType;
|
|
424
|
+
typedef map<TagValueType, BamWriter*> WriterMap;
|
|
425
|
+
typedef typename WriterMap::iterator WriterMapIterator;
|
|
426
|
+
|
|
427
|
+
// set up splitting data structure
|
|
428
|
+
WriterMap outputFiles;
|
|
429
|
+
WriterMapIterator writerIter;
|
|
430
|
+
|
|
431
|
+
// local variables
|
|
432
|
+
const string tag = m_settings->TagToSplit;
|
|
433
|
+
BamWriter* writer;
|
|
434
|
+
stringstream outputFilenameStream("");
|
|
435
|
+
TagValueType currentValue;
|
|
436
|
+
|
|
437
|
+
// retrieve first alignment tag value
|
|
438
|
+
if ( al.GetTag(tag, currentValue) ) {
|
|
439
|
+
|
|
440
|
+
// open new BamWriter, save first alignment
|
|
441
|
+
outputFilenameStream << m_outputFilenameStub << ".TAG_" << tag << "_" << currentValue << ".bam";
|
|
442
|
+
writer = new BamWriter;
|
|
443
|
+
if ( !writer->Open(outputFilenameStream.str(), m_header, m_references) ) {
|
|
444
|
+
cerr << "bamtools split ERROR: could not open " << outputFilenameStream.str()
|
|
445
|
+
<< " for writing." << endl;
|
|
446
|
+
return false;
|
|
447
|
+
}
|
|
448
|
+
writer->SaveAlignment(al);
|
|
449
|
+
|
|
450
|
+
// store in map
|
|
451
|
+
outputFiles.insert( make_pair(currentValue, writer) );
|
|
452
|
+
|
|
453
|
+
// reset stream
|
|
454
|
+
outputFilenameStream.str("");
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// iterate through remaining alignments
|
|
458
|
+
while ( m_reader.GetNextAlignment(al) ) {
|
|
459
|
+
|
|
460
|
+
// skip if this alignment doesn't have TAG
|
|
461
|
+
if ( !al.GetTag(tag, currentValue) ) continue;
|
|
462
|
+
|
|
463
|
+
// look up tag value in map
|
|
464
|
+
writerIter = outputFiles.find(currentValue);
|
|
465
|
+
|
|
466
|
+
// if no writer associated with this value
|
|
467
|
+
if ( writerIter == outputFiles.end() ) {
|
|
468
|
+
|
|
469
|
+
// open new BamWriter
|
|
470
|
+
outputFilenameStream << m_outputFilenameStub << ".TAG_" << tag << "_" << currentValue << ".bam";
|
|
471
|
+
writer = new BamWriter;
|
|
472
|
+
if ( !writer->Open(outputFilenameStream.str(), m_header, m_references) ) {
|
|
473
|
+
cerr << "bamtool split ERROR: could not open " << outputFilenameStream.str()
|
|
474
|
+
<< " for writing." << endl;
|
|
475
|
+
return false;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// store in map
|
|
479
|
+
outputFiles.insert( make_pair(currentValue, writer) );
|
|
480
|
+
|
|
481
|
+
// reset stream
|
|
482
|
+
outputFilenameStream.str("");
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// else grab corresponding writer
|
|
486
|
+
else writer = (*writerIter).second;
|
|
487
|
+
|
|
488
|
+
// store alignment in proper BAM output file
|
|
489
|
+
if ( writer )
|
|
490
|
+
writer->SaveAlignment(al);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// clean up BamWriters
|
|
494
|
+
CloseWriters(outputFiles);
|
|
495
|
+
|
|
496
|
+
// return success
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// ---------------------------------------------
|
|
501
|
+
// SplitTool implementation
|
|
502
|
+
|
|
503
|
+
SplitTool::SplitTool(void)
|
|
504
|
+
: AbstractTool()
|
|
505
|
+
, m_settings(new SplitSettings)
|
|
506
|
+
, m_impl(0)
|
|
507
|
+
{
|
|
508
|
+
// set program details
|
|
509
|
+
Options::SetProgramInfo("bamtools split", "splits a BAM file on user-specified property, creating a new BAM output file for each value found", "[-in <filename>] [-stub <filename stub>] < -mapped | -paired | -reference | -tag <TAG> > ");
|
|
510
|
+
|
|
511
|
+
// set up options
|
|
512
|
+
OptionGroup* IO_Opts = Options::CreateOptionGroup("Input & Output");
|
|
513
|
+
Options::AddValueOption("-in", "BAM filename", "the input BAM file", "", m_settings->HasInputFilename, m_settings->InputFilename, IO_Opts, Options::StandardIn());
|
|
514
|
+
Options::AddValueOption("-stub", "filename stub", "prefix stub for output BAM files (default behavior is to use input filename, without .bam extension, as stub). If input is stdin and no stub provided, a timestamp is generated as the stub.", "", m_settings->HasCustomOutputStub, m_settings->CustomOutputStub, IO_Opts);
|
|
515
|
+
|
|
516
|
+
OptionGroup* SplitOpts = Options::CreateOptionGroup("Split Options");
|
|
517
|
+
Options::AddOption("-mapped", "split mapped/unmapped alignments", m_settings->IsSplittingMapped, SplitOpts);
|
|
518
|
+
Options::AddOption("-paired", "split single-end/paired-end alignments", m_settings->IsSplittingPaired, SplitOpts);
|
|
519
|
+
Options::AddOption("-reference", "split alignments by reference", m_settings->IsSplittingReference, SplitOpts);
|
|
520
|
+
Options::AddValueOption("-tag", "tag name", "splits alignments based on all values of TAG encountered (i.e. -tag RG creates a BAM file for each read group in original BAM file)", "",
|
|
521
|
+
m_settings->IsSplittingTag, m_settings->TagToSplit, SplitOpts);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
SplitTool::~SplitTool(void) {
|
|
525
|
+
|
|
526
|
+
delete m_settings;
|
|
527
|
+
m_settings = 0;
|
|
528
|
+
|
|
529
|
+
delete m_impl;
|
|
530
|
+
m_impl = 0;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
int SplitTool::Help(void) {
|
|
534
|
+
Options::DisplayHelp();
|
|
535
|
+
return 0;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
int SplitTool::Run(int argc, char* argv[]) {
|
|
539
|
+
|
|
540
|
+
// parse command line arguments
|
|
541
|
+
Options::Parse(argc, argv, 1);
|
|
542
|
+
|
|
543
|
+
// initialize SplitTool with settings
|
|
544
|
+
m_impl = new SplitToolPrivate(m_settings);
|
|
545
|
+
|
|
546
|
+
// run SplitTool, return success/fail
|
|
547
|
+
if ( m_impl->Run() )
|
|
548
|
+
return 0;
|
|
549
|
+
else
|
|
550
|
+
return 1;
|
|
551
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// ***************************************************************************
|
|
2
|
+
// bamtools_split.h (c) 2010 Derek Barnett, Erik Garrison
|
|
3
|
+
// Marth Lab, Department of Biology, Boston College
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Last modified: 7 April 2011 (DB)
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Splits a BAM file on user-specified property, creating a new BAM output
|
|
8
|
+
// file for each value found
|
|
9
|
+
// ***************************************************************************
|
|
10
|
+
|
|
11
|
+
#ifndef BAMTOOLS_SPLIT_H
|
|
12
|
+
#define BAMTOOLS_SPLIT_H
|
|
13
|
+
|
|
14
|
+
#include "bamtools_tool.h"
|
|
15
|
+
|
|
16
|
+
namespace BamTools {
|
|
17
|
+
|
|
18
|
+
class SplitTool : public AbstractTool {
|
|
19
|
+
|
|
20
|
+
public:
|
|
21
|
+
SplitTool(void);
|
|
22
|
+
~SplitTool(void);
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
int Help(void);
|
|
26
|
+
int Run(int argc, char* argv[]);
|
|
27
|
+
|
|
28
|
+
private:
|
|
29
|
+
struct SplitSettings;
|
|
30
|
+
SplitSettings* m_settings;
|
|
31
|
+
|
|
32
|
+
struct SplitToolPrivate;
|
|
33
|
+
SplitToolPrivate* m_impl;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
} // namespace BamTools
|
|
37
|
+
|
|
38
|
+
#endif // BAMTOOLS_SPLIT_H
|