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,510 @@
|
|
1
|
+
// ***************************************************************************
|
2
|
+
// SamHeaderValidator.cpp (c) 2010 Derek Barnett
|
3
|
+
// Marth Lab, Department of Biology, Boston College
|
4
|
+
// ---------------------------------------------------------------------------
|
5
|
+
// Last modified: 18 April 2011 (DB)
|
6
|
+
// ---------------------------------------------------------------------------
|
7
|
+
// Provides functionality for validating SamHeader data
|
8
|
+
// ***************************************************************************
|
9
|
+
|
10
|
+
#include <api/SamConstants.h>
|
11
|
+
#include <api/SamHeader.h>
|
12
|
+
#include <api/internal/SamHeaderValidator_p.h>
|
13
|
+
#include <api/internal/SamHeaderVersion_p.h>
|
14
|
+
using namespace BamTools;
|
15
|
+
using namespace BamTools::Internal;
|
16
|
+
|
17
|
+
#include <cctype>
|
18
|
+
#include <iostream>
|
19
|
+
#include <set>
|
20
|
+
#include <sstream>
|
21
|
+
using namespace std;
|
22
|
+
|
23
|
+
namespace BamTools {
|
24
|
+
namespace Internal {
|
25
|
+
|
26
|
+
bool caseInsensitiveCompare(const string& lhs, const string& rhs) {
|
27
|
+
|
28
|
+
// can omit checking chars if lengths not equal
|
29
|
+
const int lhsLength = lhs.length();
|
30
|
+
const int rhsLength = rhs.length();
|
31
|
+
if ( lhsLength != rhsLength )
|
32
|
+
return false;
|
33
|
+
|
34
|
+
// do *basic* toupper checks on each string char's
|
35
|
+
for ( int i = 0; i < lhsLength; ++i ) {
|
36
|
+
if ( toupper( (int)lhs.at(i)) != toupper( (int)rhs.at(i)) )
|
37
|
+
return false;
|
38
|
+
}
|
39
|
+
|
40
|
+
// otherwise OK
|
41
|
+
return true;
|
42
|
+
}
|
43
|
+
|
44
|
+
} // namespace Internal
|
45
|
+
} // namespace BamTools
|
46
|
+
|
47
|
+
// ------------------------------------------------------------------------
|
48
|
+
// Allow validation rules to vary, as needed, between SAM header versions
|
49
|
+
//
|
50
|
+
// use SAM_VERSION_X_Y to tag important changes
|
51
|
+
//
|
52
|
+
// Together, they will allow for comparisons like:
|
53
|
+
// if ( m_version < SAM_VERSION_2_0 ) {
|
54
|
+
// // use some older rule
|
55
|
+
// else
|
56
|
+
// // use rule introduced with version 2.0
|
57
|
+
|
58
|
+
static const SamHeaderVersion SAM_VERSION_1_0 = SamHeaderVersion(1,0);
|
59
|
+
static const SamHeaderVersion SAM_VERSION_1_1 = SamHeaderVersion(1,1);
|
60
|
+
static const SamHeaderVersion SAM_VERSION_1_2 = SamHeaderVersion(1,2);
|
61
|
+
static const SamHeaderVersion SAM_VERSION_1_3 = SamHeaderVersion(1,3);
|
62
|
+
static const SamHeaderVersion SAM_VERSION_1_4 = SamHeaderVersion(1,4);
|
63
|
+
|
64
|
+
// TODO: This functionality is currently unused.
|
65
|
+
// Make validation "version-aware."
|
66
|
+
//
|
67
|
+
// ------------------------------------------------------------------------
|
68
|
+
|
69
|
+
const string SamHeaderValidator::ERROR_PREFIX = "ERROR: ";
|
70
|
+
const string SamHeaderValidator::WARN_PREFIX = "WARNING: ";
|
71
|
+
const string SamHeaderValidator::NEWLINE = "\n";
|
72
|
+
|
73
|
+
SamHeaderValidator::SamHeaderValidator(const SamHeader& header)
|
74
|
+
: m_header(header)
|
75
|
+
{ }
|
76
|
+
|
77
|
+
SamHeaderValidator::~SamHeaderValidator(void) { }
|
78
|
+
|
79
|
+
bool SamHeaderValidator::Validate(bool verbose) {
|
80
|
+
|
81
|
+
// validate header components
|
82
|
+
bool isValid = true;
|
83
|
+
isValid &= ValidateMetadata();
|
84
|
+
isValid &= ValidateSequenceDictionary();
|
85
|
+
isValid &= ValidateReadGroupDictionary();
|
86
|
+
isValid &= ValidateProgramChain();
|
87
|
+
|
88
|
+
// report errors if desired
|
89
|
+
if ( verbose ) {
|
90
|
+
PrintErrorMessages();
|
91
|
+
PrintWarningMessages();
|
92
|
+
}
|
93
|
+
|
94
|
+
// return validation status
|
95
|
+
return isValid;
|
96
|
+
}
|
97
|
+
|
98
|
+
bool SamHeaderValidator::ValidateMetadata(void) {
|
99
|
+
bool isValid = true;
|
100
|
+
isValid &= ValidateVersion();
|
101
|
+
isValid &= ValidateSortOrder();
|
102
|
+
isValid &= ValidateGroupOrder();
|
103
|
+
return isValid;
|
104
|
+
}
|
105
|
+
|
106
|
+
bool SamHeaderValidator::ValidateVersion(void) {
|
107
|
+
|
108
|
+
const string& version = m_header.Version;
|
109
|
+
|
110
|
+
// warn if version not present
|
111
|
+
if ( version.empty() ) {
|
112
|
+
AddWarning("Version (VN) missing. Not required, but strongly recommended");
|
113
|
+
return true;
|
114
|
+
}
|
115
|
+
|
116
|
+
// invalid if version does not contain a period
|
117
|
+
const size_t periodFound = version.find(Constants::SAM_PERIOD);
|
118
|
+
if ( periodFound == string::npos ) {
|
119
|
+
AddError("Invalid version (VN) format: " + version);
|
120
|
+
return false;
|
121
|
+
}
|
122
|
+
|
123
|
+
// invalid if major version is empty or contains non-digits
|
124
|
+
const string majorVersion = version.substr(0, periodFound);
|
125
|
+
if ( majorVersion.empty() || !ContainsOnlyDigits(majorVersion) ) {
|
126
|
+
AddError("Invalid version (VN) format: " + version);
|
127
|
+
return false;
|
128
|
+
}
|
129
|
+
|
130
|
+
// invalid if major version is empty or contains non-digits
|
131
|
+
const string minorVersion = version.substr(periodFound + 1);
|
132
|
+
if ( minorVersion.empty() || !ContainsOnlyDigits(minorVersion) ) {
|
133
|
+
AddError("Invalid version (VN) format: " + version);
|
134
|
+
return false;
|
135
|
+
}
|
136
|
+
|
137
|
+
// TODO: check if version is not just syntactically OK,
|
138
|
+
// but is also a valid SAM version ( 1.0 .. CURRENT )
|
139
|
+
|
140
|
+
// all checked out this far, then version is OK
|
141
|
+
return true;
|
142
|
+
}
|
143
|
+
|
144
|
+
// assumes non-empty input string
|
145
|
+
bool SamHeaderValidator::ContainsOnlyDigits(const string& s) {
|
146
|
+
const size_t nonDigitPosition = s.find_first_not_of(Constants::SAM_DIGITS);
|
147
|
+
return ( nonDigitPosition == string::npos ) ;
|
148
|
+
}
|
149
|
+
|
150
|
+
bool SamHeaderValidator::ValidateSortOrder(void) {
|
151
|
+
|
152
|
+
const string& sortOrder = m_header.SortOrder;
|
153
|
+
|
154
|
+
// warn if sort order not present
|
155
|
+
if ( sortOrder.empty() ) {
|
156
|
+
AddWarning("Sort order (SO) missing. Not required, but strongly recommended");
|
157
|
+
return true;
|
158
|
+
}
|
159
|
+
|
160
|
+
// if sort order is valid keyword
|
161
|
+
if ( sortOrder == Constants::SAM_HD_SORTORDER_COORDINATE ||
|
162
|
+
sortOrder == Constants::SAM_HD_SORTORDER_QUERYNAME ||
|
163
|
+
sortOrder == Constants::SAM_HD_SORTORDER_UNSORTED
|
164
|
+
)
|
165
|
+
{
|
166
|
+
return true;
|
167
|
+
}
|
168
|
+
|
169
|
+
// otherwise
|
170
|
+
AddError("Invalid sort order (SO): " + sortOrder);
|
171
|
+
return false;
|
172
|
+
}
|
173
|
+
|
174
|
+
bool SamHeaderValidator::ValidateGroupOrder(void) {
|
175
|
+
|
176
|
+
const string& groupOrder = m_header.GroupOrder;
|
177
|
+
|
178
|
+
// if no group order, no problem, just return OK
|
179
|
+
if ( groupOrder.empty() )
|
180
|
+
return true;
|
181
|
+
|
182
|
+
// if group order is valid keyword
|
183
|
+
if ( groupOrder == Constants::SAM_HD_GROUPORDER_NONE ||
|
184
|
+
groupOrder == Constants::SAM_HD_GROUPORDER_QUERY ||
|
185
|
+
groupOrder == Constants::SAM_HD_GROUPORDER_REFERENCE
|
186
|
+
)
|
187
|
+
{
|
188
|
+
return true;
|
189
|
+
}
|
190
|
+
|
191
|
+
// otherwise
|
192
|
+
AddError("Invalid group order (GO): " + groupOrder);
|
193
|
+
return false;
|
194
|
+
}
|
195
|
+
|
196
|
+
bool SamHeaderValidator::ValidateSequenceDictionary(void) {
|
197
|
+
|
198
|
+
bool isValid = true;
|
199
|
+
|
200
|
+
// check for unique sequence names
|
201
|
+
isValid &= ContainsUniqueSequenceNames();
|
202
|
+
|
203
|
+
// iterate over sequences
|
204
|
+
const SamSequenceDictionary& sequences = m_header.Sequences;
|
205
|
+
SamSequenceConstIterator seqIter = sequences.ConstBegin();
|
206
|
+
SamSequenceConstIterator seqEnd = sequences.ConstEnd();
|
207
|
+
for ( ; seqIter != seqEnd; ++seqIter ) {
|
208
|
+
const SamSequence& seq = (*seqIter);
|
209
|
+
isValid &= ValidateSequence(seq);
|
210
|
+
}
|
211
|
+
|
212
|
+
// return validation state
|
213
|
+
return isValid;
|
214
|
+
}
|
215
|
+
|
216
|
+
bool SamHeaderValidator::ContainsUniqueSequenceNames(void) {
|
217
|
+
|
218
|
+
bool isValid = true;
|
219
|
+
set<string> sequenceNames;
|
220
|
+
set<string>::iterator nameIter;
|
221
|
+
|
222
|
+
// iterate over sequences
|
223
|
+
const SamSequenceDictionary& sequences = m_header.Sequences;
|
224
|
+
SamSequenceConstIterator seqIter = sequences.ConstBegin();
|
225
|
+
SamSequenceConstIterator seqEnd = sequences.ConstEnd();
|
226
|
+
for ( ; seqIter != seqEnd; ++seqIter ) {
|
227
|
+
const SamSequence& seq = (*seqIter);
|
228
|
+
|
229
|
+
// lookup sequence name
|
230
|
+
const string& name = seq.Name;
|
231
|
+
nameIter = sequenceNames.find(name);
|
232
|
+
|
233
|
+
// error if found (duplicate entry)
|
234
|
+
if ( nameIter != sequenceNames.end() ) {
|
235
|
+
AddError("Sequence name (SN): " + name + " is not unique");
|
236
|
+
isValid = false;
|
237
|
+
}
|
238
|
+
|
239
|
+
// otherwise ok, store name
|
240
|
+
sequenceNames.insert(name);
|
241
|
+
}
|
242
|
+
|
243
|
+
// return validation state
|
244
|
+
return isValid;
|
245
|
+
}
|
246
|
+
|
247
|
+
bool SamHeaderValidator::ValidateSequence(const SamSequence& seq) {
|
248
|
+
bool isValid = true;
|
249
|
+
isValid &= CheckNameFormat(seq.Name);
|
250
|
+
isValid &= CheckLengthInRange(seq.Length);
|
251
|
+
return isValid;
|
252
|
+
}
|
253
|
+
|
254
|
+
bool SamHeaderValidator::CheckNameFormat(const string& name) {
|
255
|
+
|
256
|
+
// invalid if name is empty
|
257
|
+
if ( name.empty() ) {
|
258
|
+
AddError("Sequence entry (@SQ) is missing SN tag");
|
259
|
+
return false;
|
260
|
+
}
|
261
|
+
|
262
|
+
// invalid if first character is a reserved char
|
263
|
+
const char firstChar = name.at(0);
|
264
|
+
if ( firstChar == Constants::SAM_EQUAL || firstChar == Constants::SAM_STAR ) {
|
265
|
+
AddError("Invalid sequence name (SN): " + name);
|
266
|
+
return false;
|
267
|
+
}
|
268
|
+
// otherwise OK
|
269
|
+
return true;
|
270
|
+
}
|
271
|
+
|
272
|
+
bool SamHeaderValidator::CheckLengthInRange(const string& length) {
|
273
|
+
|
274
|
+
// invalid if empty
|
275
|
+
if ( length.empty() ) {
|
276
|
+
AddError("Sequence entry (@SQ) is missing LN tag");
|
277
|
+
return false;
|
278
|
+
}
|
279
|
+
|
280
|
+
// convert string length to numeric
|
281
|
+
stringstream lengthStream(length);
|
282
|
+
unsigned int sequenceLength;
|
283
|
+
lengthStream >> sequenceLength;
|
284
|
+
|
285
|
+
// invalid if length outside accepted range
|
286
|
+
if ( sequenceLength < Constants::SAM_SQ_LENGTH_MIN || sequenceLength > Constants::SAM_SQ_LENGTH_MAX ) {
|
287
|
+
AddError("Sequence length (LN): " + length + " out of range");
|
288
|
+
return false;
|
289
|
+
}
|
290
|
+
|
291
|
+
// otherwise OK
|
292
|
+
return true;
|
293
|
+
}
|
294
|
+
|
295
|
+
bool SamHeaderValidator::ValidateReadGroupDictionary(void) {
|
296
|
+
|
297
|
+
bool isValid = true;
|
298
|
+
|
299
|
+
// check for unique read group IDs & platform units
|
300
|
+
isValid &= ContainsUniqueIDsAndPlatformUnits();
|
301
|
+
|
302
|
+
// iterate over read groups
|
303
|
+
const SamReadGroupDictionary& readGroups = m_header.ReadGroups;
|
304
|
+
SamReadGroupConstIterator rgIter = readGroups.ConstBegin();
|
305
|
+
SamReadGroupConstIterator rgEnd = readGroups.ConstEnd();
|
306
|
+
for ( ; rgIter != rgEnd; ++rgIter ) {
|
307
|
+
const SamReadGroup& rg = (*rgIter);
|
308
|
+
isValid &= ValidateReadGroup(rg);
|
309
|
+
}
|
310
|
+
|
311
|
+
// return validation state
|
312
|
+
return isValid;
|
313
|
+
}
|
314
|
+
|
315
|
+
bool SamHeaderValidator::ContainsUniqueIDsAndPlatformUnits(void) {
|
316
|
+
|
317
|
+
bool isValid = true;
|
318
|
+
set<string> readGroupIds;
|
319
|
+
set<string> platformUnits;
|
320
|
+
set<string>::iterator idIter;
|
321
|
+
set<string>::iterator puIter;
|
322
|
+
|
323
|
+
// iterate over sequences
|
324
|
+
const SamReadGroupDictionary& readGroups = m_header.ReadGroups;
|
325
|
+
SamReadGroupConstIterator rgIter = readGroups.ConstBegin();
|
326
|
+
SamReadGroupConstIterator rgEnd = readGroups.ConstEnd();
|
327
|
+
for ( ; rgIter != rgEnd; ++rgIter ) {
|
328
|
+
const SamReadGroup& rg = (*rgIter);
|
329
|
+
|
330
|
+
// --------------------------------
|
331
|
+
// check for unique ID
|
332
|
+
|
333
|
+
// lookup read group ID
|
334
|
+
const string& id = rg.ID;
|
335
|
+
idIter = readGroupIds.find(id);
|
336
|
+
|
337
|
+
// error if found (duplicate entry)
|
338
|
+
if ( idIter != readGroupIds.end() ) {
|
339
|
+
AddError("Read group ID (ID): " + id + " is not unique");
|
340
|
+
isValid = false;
|
341
|
+
}
|
342
|
+
|
343
|
+
// otherwise ok, store id
|
344
|
+
readGroupIds.insert(id);
|
345
|
+
|
346
|
+
// --------------------------------
|
347
|
+
// check for unique platform unit
|
348
|
+
|
349
|
+
// lookup platform unit
|
350
|
+
const string& pu = rg.PlatformUnit;
|
351
|
+
puIter = platformUnits.find(pu);
|
352
|
+
|
353
|
+
// error if found (duplicate entry)
|
354
|
+
if ( puIter != platformUnits.end() ) {
|
355
|
+
AddError("Platform unit (PU): " + pu + " is not unique");
|
356
|
+
isValid = false;
|
357
|
+
}
|
358
|
+
|
359
|
+
// otherwise ok, store platform unit
|
360
|
+
platformUnits.insert(pu);
|
361
|
+
}
|
362
|
+
|
363
|
+
// return validation state
|
364
|
+
return isValid;
|
365
|
+
}
|
366
|
+
|
367
|
+
bool SamHeaderValidator::ValidateReadGroup(const SamReadGroup& rg) {
|
368
|
+
bool isValid = true;
|
369
|
+
isValid &= CheckReadGroupID(rg.ID);
|
370
|
+
isValid &= CheckSequencingTechnology(rg.SequencingTechnology);
|
371
|
+
return isValid;
|
372
|
+
}
|
373
|
+
|
374
|
+
bool SamHeaderValidator::CheckReadGroupID(const string& id) {
|
375
|
+
|
376
|
+
// invalid if empty
|
377
|
+
if ( id.empty() ) {
|
378
|
+
AddError("Read group entry (@RG) is missing ID tag");
|
379
|
+
return false;
|
380
|
+
}
|
381
|
+
|
382
|
+
// otherwise OK
|
383
|
+
return true;
|
384
|
+
}
|
385
|
+
|
386
|
+
bool SamHeaderValidator::CheckSequencingTechnology(const string& technology) {
|
387
|
+
|
388
|
+
// if no technology provided, no problem, just return OK
|
389
|
+
if ( technology.empty() )
|
390
|
+
return true;
|
391
|
+
|
392
|
+
// if technology is valid keyword
|
393
|
+
if ( caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_CAPILLARY) ||
|
394
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_HELICOS) ||
|
395
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_ILLUMINA) ||
|
396
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_IONTORRENT) ||
|
397
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_LS454) ||
|
398
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_PACBIO) ||
|
399
|
+
caseInsensitiveCompare(technology, Constants::SAM_RG_SEQTECHNOLOGY_SOLID)
|
400
|
+
)
|
401
|
+
{
|
402
|
+
return true;
|
403
|
+
}
|
404
|
+
|
405
|
+
// otherwise
|
406
|
+
AddError("Invalid read group sequencing platform (PL): " + technology);
|
407
|
+
return false;
|
408
|
+
}
|
409
|
+
|
410
|
+
bool SamHeaderValidator::ValidateProgramChain(void) {
|
411
|
+
bool isValid = true;
|
412
|
+
isValid &= ContainsUniqueProgramIds();
|
413
|
+
isValid &= ValidatePreviousProgramIds();
|
414
|
+
return isValid;
|
415
|
+
}
|
416
|
+
|
417
|
+
bool SamHeaderValidator::ContainsUniqueProgramIds(void) {
|
418
|
+
|
419
|
+
bool isValid = true;
|
420
|
+
set<string> programIds;
|
421
|
+
set<string>::iterator pgIdIter;
|
422
|
+
|
423
|
+
// iterate over program records
|
424
|
+
const SamProgramChain& programs = m_header.Programs;
|
425
|
+
SamProgramConstIterator pgIter = programs.ConstBegin();
|
426
|
+
SamProgramConstIterator pgEnd = programs.ConstEnd();
|
427
|
+
for ( ; pgIter != pgEnd; ++pgIter ) {
|
428
|
+
const SamProgram& pg = (*pgIter);
|
429
|
+
|
430
|
+
// lookup program ID
|
431
|
+
const string& pgId = pg.ID;
|
432
|
+
pgIdIter = programIds.find(pgId);
|
433
|
+
|
434
|
+
// error if found (duplicate entry)
|
435
|
+
if ( pgIdIter != programIds.end() ) {
|
436
|
+
AddError("Program ID (ID): " + pgId + " is not unique");
|
437
|
+
isValid = false;
|
438
|
+
}
|
439
|
+
|
440
|
+
// otherwise ok, store ID
|
441
|
+
programIds.insert(pgId);
|
442
|
+
}
|
443
|
+
|
444
|
+
// return validation state
|
445
|
+
return isValid;
|
446
|
+
}
|
447
|
+
|
448
|
+
bool SamHeaderValidator::ValidatePreviousProgramIds(void) {
|
449
|
+
|
450
|
+
bool isValid = true;
|
451
|
+
|
452
|
+
// iterate over program records
|
453
|
+
const SamProgramChain& programs = m_header.Programs;
|
454
|
+
SamProgramConstIterator pgIter = programs.ConstBegin();
|
455
|
+
SamProgramConstIterator pgEnd = programs.ConstEnd();
|
456
|
+
for ( ; pgIter != pgEnd; ++pgIter ) {
|
457
|
+
const SamProgram& pg = (*pgIter);
|
458
|
+
|
459
|
+
// ignore record for validation if PreviousProgramID is empty
|
460
|
+
const string& ppId = pg.PreviousProgramID;
|
461
|
+
if ( ppId.empty() )
|
462
|
+
continue;
|
463
|
+
|
464
|
+
// see if program "chain" contains an entry for ppId
|
465
|
+
if ( !programs.Contains(ppId) ) {
|
466
|
+
AddError("PreviousProgramID (PP): " + ppId + " is not a known ID");
|
467
|
+
isValid = false;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
|
471
|
+
// return validation state
|
472
|
+
return isValid;
|
473
|
+
}
|
474
|
+
void SamHeaderValidator::AddError(const string& message) {
|
475
|
+
m_errorMessages.push_back(ERROR_PREFIX + message + NEWLINE);
|
476
|
+
}
|
477
|
+
|
478
|
+
void SamHeaderValidator::AddWarning(const string& message) {
|
479
|
+
m_warningMessages.push_back(WARN_PREFIX + message + NEWLINE);
|
480
|
+
}
|
481
|
+
|
482
|
+
void SamHeaderValidator::PrintErrorMessages(void) {
|
483
|
+
|
484
|
+
// skip if no error messages
|
485
|
+
if ( m_errorMessages.empty() ) return;
|
486
|
+
|
487
|
+
// print error header line
|
488
|
+
cerr << "* SAM header has " << m_errorMessages.size() << " errors:" << endl;
|
489
|
+
|
490
|
+
// print each error message
|
491
|
+
vector<string>::const_iterator errorIter = m_errorMessages.begin();
|
492
|
+
vector<string>::const_iterator errorEnd = m_errorMessages.end();
|
493
|
+
for ( ; errorIter != errorEnd; ++errorIter )
|
494
|
+
cerr << (*errorIter);
|
495
|
+
}
|
496
|
+
|
497
|
+
void SamHeaderValidator::PrintWarningMessages(void) {
|
498
|
+
|
499
|
+
// skip if no warning messages
|
500
|
+
if ( m_warningMessages.empty() ) return;
|
501
|
+
|
502
|
+
// print warning header line
|
503
|
+
cerr << "* SAM header has " << m_warningMessages.size() << " warnings:" << endl;
|
504
|
+
|
505
|
+
// print each warning message
|
506
|
+
vector<string>::const_iterator warnIter = m_warningMessages.begin();
|
507
|
+
vector<string>::const_iterator warnEnd = m_warningMessages.end();
|
508
|
+
for ( ; warnIter != warnEnd; ++warnIter )
|
509
|
+
cerr << (*warnIter);
|
510
|
+
}
|
@@ -0,0 +1,101 @@
|
|
1
|
+
// ***************************************************************************
|
2
|
+
// SamHeaderValidator.h (c) 2010 Derek Barnett
|
3
|
+
// Marth Lab, Department of Biology, Boston College
|
4
|
+
// ---------------------------------------------------------------------------
|
5
|
+
// Last modified: 13 January 2011 (DB)
|
6
|
+
// ---------------------------------------------------------------------------
|
7
|
+
// Provides functionality for validating SamHeader data
|
8
|
+
// ***************************************************************************
|
9
|
+
|
10
|
+
#ifndef SAM_HEADER_VALIDATOR_P_H
|
11
|
+
#define SAM_HEADER_VALIDATOR_P_H
|
12
|
+
|
13
|
+
// -------------
|
14
|
+
// W A R N I N G
|
15
|
+
// -------------
|
16
|
+
//
|
17
|
+
// This file is not part of the BamTools API. It exists purely as an
|
18
|
+
// implementation detail. This header file may change from version to version
|
19
|
+
// without notice, or even be removed.
|
20
|
+
//
|
21
|
+
// We mean it.
|
22
|
+
|
23
|
+
#include <string>
|
24
|
+
#include <vector>
|
25
|
+
|
26
|
+
namespace BamTools {
|
27
|
+
|
28
|
+
class SamHeader;
|
29
|
+
class SamReadGroup;
|
30
|
+
class SamSequence;
|
31
|
+
|
32
|
+
namespace Internal {
|
33
|
+
|
34
|
+
class SamHeaderValidator {
|
35
|
+
|
36
|
+
// ctor & dtor
|
37
|
+
public:
|
38
|
+
SamHeaderValidator(const SamHeader& header);
|
39
|
+
~SamHeaderValidator(void);
|
40
|
+
|
41
|
+
// SamHeaderValidator interface
|
42
|
+
public:
|
43
|
+
// validates SamHeader data, returns true/false accordingly
|
44
|
+
// prints error & warning messages to stderr when @verbose is true
|
45
|
+
bool Validate(bool verbose = false);
|
46
|
+
|
47
|
+
// internal methods
|
48
|
+
private:
|
49
|
+
|
50
|
+
// validate header metadata
|
51
|
+
bool ValidateMetadata(void);
|
52
|
+
bool ValidateVersion(void);
|
53
|
+
bool ContainsOnlyDigits(const std::string& s);
|
54
|
+
bool ValidateSortOrder(void);
|
55
|
+
bool ValidateGroupOrder(void);
|
56
|
+
|
57
|
+
// validate sequence dictionary
|
58
|
+
bool ValidateSequenceDictionary(void);
|
59
|
+
bool ContainsUniqueSequenceNames(void);
|
60
|
+
bool CheckNameFormat(const std::string& name);
|
61
|
+
bool ValidateSequence(const SamSequence& seq);
|
62
|
+
bool CheckLengthInRange(const std::string& length);
|
63
|
+
|
64
|
+
// validate read group dictionary
|
65
|
+
bool ValidateReadGroupDictionary(void);
|
66
|
+
bool ContainsUniqueIDsAndPlatformUnits(void);
|
67
|
+
bool ValidateReadGroup(const SamReadGroup& rg);
|
68
|
+
bool CheckReadGroupID(const std::string& id);
|
69
|
+
bool CheckSequencingTechnology(const std::string& technology);
|
70
|
+
|
71
|
+
// validate program data
|
72
|
+
bool ValidateProgramChain(void);
|
73
|
+
bool ContainsUniqueProgramIds(void);
|
74
|
+
bool ValidatePreviousProgramIds(void);
|
75
|
+
|
76
|
+
// error reporting
|
77
|
+
void AddError(const std::string& message);
|
78
|
+
void AddWarning(const std::string& message);
|
79
|
+
void PrintErrorMessages(void);
|
80
|
+
void PrintWarningMessages(void);
|
81
|
+
|
82
|
+
// data members
|
83
|
+
private:
|
84
|
+
|
85
|
+
// SamHeader being validated
|
86
|
+
const SamHeader& m_header;
|
87
|
+
|
88
|
+
// error reporting helpers
|
89
|
+
static const std::string ERROR_PREFIX;
|
90
|
+
static const std::string WARN_PREFIX;
|
91
|
+
static const std::string NEWLINE;
|
92
|
+
|
93
|
+
// error reporting messages
|
94
|
+
std::vector<std::string> m_errorMessages;
|
95
|
+
std::vector<std::string> m_warningMessages;
|
96
|
+
};
|
97
|
+
|
98
|
+
} // namespace Internal
|
99
|
+
} // namespace BamTools
|
100
|
+
|
101
|
+
#endif // SAM_HEADER_VALIDATOR_P_H
|