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.
Files changed (284) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +2 -0
  4. data/bin/ngs_server +58 -0
  5. data/data/holder.txt +0 -0
  6. data/ext/bamtools/CMakeLists.txt +49 -0
  7. data/ext/bamtools/LICENSE +22 -0
  8. data/ext/bamtools/README +60 -0
  9. data/ext/bamtools/Tutorial_Toolkit_BamTools-1.0.pdf +0 -0
  10. data/ext/bamtools/docs/Doxyfile +1601 -0
  11. data/ext/bamtools/extconf.rb +9 -0
  12. data/ext/bamtools/src/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
  13. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/DependInfo.cmake +13 -0
  14. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/build.make +65 -0
  15. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/cmake_clean.cmake +8 -0
  16. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/depend.internal +3 -0
  17. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/depend.make +3 -0
  18. data/ext/bamtools/src/CMakeFiles/SharedHeaders.dir/progress.make +2 -0
  19. data/ext/bamtools/src/CMakeFiles/progress.marks +1 -0
  20. data/ext/bamtools/src/CMakeLists.txt +18 -0
  21. data/ext/bamtools/src/ExportHeader.cmake +31 -0
  22. data/ext/bamtools/src/Makefile +182 -0
  23. data/ext/bamtools/src/api/BamAlignment.cpp +2432 -0
  24. data/ext/bamtools/src/api/BamAlignment.h +206 -0
  25. data/ext/bamtools/src/api/BamAux.h +456 -0
  26. data/ext/bamtools/src/api/BamConstants.h +127 -0
  27. data/ext/bamtools/src/api/BamIndex.h +79 -0
  28. data/ext/bamtools/src/api/BamMultiReader.cpp +395 -0
  29. data/ext/bamtools/src/api/BamMultiReader.h +126 -0
  30. data/ext/bamtools/src/api/BamReader.cpp +369 -0
  31. data/ext/bamtools/src/api/BamReader.h +117 -0
  32. data/ext/bamtools/src/api/BamWriter.cpp +142 -0
  33. data/ext/bamtools/src/api/BamWriter.h +63 -0
  34. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/DependInfo.cmake +14 -0
  35. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/build.make +80 -0
  36. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/cmake_clean.cmake +8 -0
  37. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/depend.internal +3 -0
  38. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/depend.make +3 -0
  39. data/ext/bamtools/src/api/CMakeFiles/APIHeaders.dir/progress.make +2 -0
  40. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamAlignment.cpp.o +0 -0
  41. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamMultiReader.cpp.o +0 -0
  42. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamReader.cpp.o +0 -0
  43. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/BamWriter.cpp.o +0 -0
  44. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/CXX.includecache +596 -0
  45. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/DependInfo.cmake +41 -0
  46. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamHeader.cpp.o +0 -0
  47. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamProgram.cpp.o +0 -0
  48. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamProgramChain.cpp.o +0 -0
  49. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamReadGroup.cpp.o +0 -0
  50. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamReadGroupDictionary.cpp.o +0 -0
  51. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamSequence.cpp.o +0 -0
  52. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/SamSequenceDictionary.cpp.o +0 -0
  53. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/build.make +675 -0
  54. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/cmake_clean.cmake +32 -0
  55. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/cmake_clean_target.cmake +3 -0
  56. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/depend.internal +295 -0
  57. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/depend.make +295 -0
  58. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/flags.make +8 -0
  59. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamHeader_p.cpp.o +0 -0
  60. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamIndexFactory_p.cpp.o +0 -0
  61. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamMultiReader_p.cpp.o +0 -0
  62. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamRandomAccessController_p.cpp.o +0 -0
  63. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamReader_p.cpp.o +0 -0
  64. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamStandardIndex_p.cpp.o +0 -0
  65. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamToolsIndex_p.cpp.o +0 -0
  66. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BamWriter_p.cpp.o +0 -0
  67. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/BgzfStream_p.cpp.o +0 -0
  68. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamFormatParser_p.cpp.o +0 -0
  69. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamFormatPrinter_p.cpp.o +0 -0
  70. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/internal/SamHeaderValidator_p.cpp.o +0 -0
  71. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/link.txt +2 -0
  72. data/ext/bamtools/src/api/CMakeFiles/BamTools-static.dir/progress.make +24 -0
  73. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamAlignment.cpp.o +0 -0
  74. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamMultiReader.cpp.o +0 -0
  75. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamReader.cpp.o +0 -0
  76. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/BamWriter.cpp.o +0 -0
  77. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/CXX.includecache +596 -0
  78. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/DependInfo.cmake +47 -0
  79. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamHeader.cpp.o +0 -0
  80. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamProgram.cpp.o +0 -0
  81. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamProgramChain.cpp.o +0 -0
  82. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamReadGroup.cpp.o +0 -0
  83. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamReadGroupDictionary.cpp.o +0 -0
  84. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamSequence.cpp.o +0 -0
  85. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/SamSequenceDictionary.cpp.o +0 -0
  86. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/build.make +677 -0
  87. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/cmake_clean.cmake +33 -0
  88. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/depend.internal +295 -0
  89. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/depend.make +295 -0
  90. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/flags.make +8 -0
  91. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamHeader_p.cpp.o +0 -0
  92. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamIndexFactory_p.cpp.o +0 -0
  93. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamMultiReader_p.cpp.o +0 -0
  94. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamRandomAccessController_p.cpp.o +0 -0
  95. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamReader_p.cpp.o +0 -0
  96. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamStandardIndex_p.cpp.o +0 -0
  97. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamToolsIndex_p.cpp.o +0 -0
  98. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BamWriter_p.cpp.o +0 -0
  99. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/BgzfStream_p.cpp.o +0 -0
  100. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamFormatParser_p.cpp.o +0 -0
  101. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamFormatPrinter_p.cpp.o +0 -0
  102. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/internal/SamHeaderValidator_p.cpp.o +0 -0
  103. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/link.txt +1 -0
  104. data/ext/bamtools/src/api/CMakeFiles/BamTools.dir/progress.make +24 -0
  105. data/ext/bamtools/src/api/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
  106. data/ext/bamtools/src/api/CMakeFiles/progress.marks +1 -0
  107. data/ext/bamtools/src/api/CMakeLists.txt +78 -0
  108. data/ext/bamtools/src/api/Makefile +902 -0
  109. data/ext/bamtools/src/api/SamConstants.h +95 -0
  110. data/ext/bamtools/src/api/SamHeader.cpp +184 -0
  111. data/ext/bamtools/src/api/SamHeader.h +68 -0
  112. data/ext/bamtools/src/api/SamProgram.cpp +139 -0
  113. data/ext/bamtools/src/api/SamProgram.h +61 -0
  114. data/ext/bamtools/src/api/SamProgramChain.cpp +351 -0
  115. data/ext/bamtools/src/api/SamProgramChain.h +85 -0
  116. data/ext/bamtools/src/api/SamReadGroup.cpp +221 -0
  117. data/ext/bamtools/src/api/SamReadGroup.h +68 -0
  118. data/ext/bamtools/src/api/SamReadGroupDictionary.cpp +289 -0
  119. data/ext/bamtools/src/api/SamReadGroupDictionary.h +86 -0
  120. data/ext/bamtools/src/api/SamSequence.cpp +161 -0
  121. data/ext/bamtools/src/api/SamSequence.h +60 -0
  122. data/ext/bamtools/src/api/SamSequenceDictionary.cpp +292 -0
  123. data/ext/bamtools/src/api/SamSequenceDictionary.h +88 -0
  124. data/ext/bamtools/src/api/api_global.h +21 -0
  125. data/ext/bamtools/src/api/cmake_install.cmake +122 -0
  126. data/ext/bamtools/src/api/internal/BamHeader_p.cpp +132 -0
  127. data/ext/bamtools/src/api/internal/BamHeader_p.h +71 -0
  128. data/ext/bamtools/src/api/internal/BamIndexFactory_p.cpp +112 -0
  129. data/ext/bamtools/src/api/internal/BamIndexFactory_p.h +49 -0
  130. data/ext/bamtools/src/api/internal/BamMultiMerger_p.h +297 -0
  131. data/ext/bamtools/src/api/internal/BamMultiReader_p.cpp +805 -0
  132. data/ext/bamtools/src/api/internal/BamMultiReader_p.h +103 -0
  133. data/ext/bamtools/src/api/internal/BamRandomAccessController_p.cpp +272 -0
  134. data/ext/bamtools/src/api/internal/BamRandomAccessController_p.h +93 -0
  135. data/ext/bamtools/src/api/internal/BamReader_p.cpp +380 -0
  136. data/ext/bamtools/src/api/internal/BamReader_p.h +112 -0
  137. data/ext/bamtools/src/api/internal/BamStandardIndex_p.cpp +986 -0
  138. data/ext/bamtools/src/api/internal/BamStandardIndex_p.h +236 -0
  139. data/ext/bamtools/src/api/internal/BamToolsIndex_p.cpp +641 -0
  140. data/ext/bamtools/src/api/internal/BamToolsIndex_p.h +187 -0
  141. data/ext/bamtools/src/api/internal/BamWriter_p.cpp +424 -0
  142. data/ext/bamtools/src/api/internal/BamWriter_p.h +66 -0
  143. data/ext/bamtools/src/api/internal/BgzfStream_p.cpp +438 -0
  144. data/ext/bamtools/src/api/internal/BgzfStream_p.h +108 -0
  145. data/ext/bamtools/src/api/internal/SamFormatParser_p.cpp +230 -0
  146. data/ext/bamtools/src/api/internal/SamFormatParser_p.h +61 -0
  147. data/ext/bamtools/src/api/internal/SamFormatPrinter_p.cpp +210 -0
  148. data/ext/bamtools/src/api/internal/SamFormatPrinter_p.h +60 -0
  149. data/ext/bamtools/src/api/internal/SamHeaderValidator_p.cpp +510 -0
  150. data/ext/bamtools/src/api/internal/SamHeaderValidator_p.h +101 -0
  151. data/ext/bamtools/src/api/internal/SamHeaderVersion_p.h +134 -0
  152. data/ext/bamtools/src/cmake_install.cmake +42 -0
  153. data/ext/bamtools/src/shared/bamtools_global.h +78 -0
  154. data/ext/bamtools/src/third_party/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
  155. data/ext/bamtools/src/third_party/CMakeFiles/progress.marks +1 -0
  156. data/ext/bamtools/src/third_party/CMakeLists.txt +10 -0
  157. data/ext/bamtools/src/third_party/Makefile +167 -0
  158. data/ext/bamtools/src/third_party/cmake_install.cmake +35 -0
  159. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/CMakeDirectoryInformation.cmake +22 -0
  160. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/CXX.includecache +144 -0
  161. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/DependInfo.cmake +27 -0
  162. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/build.make +157 -0
  163. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/cmake_clean.cmake +13 -0
  164. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/depend.internal +31 -0
  165. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/depend.make +31 -0
  166. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/flags.make +8 -0
  167. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_reader.cpp.o +0 -0
  168. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_value.cpp.o +0 -0
  169. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/json_writer.cpp.o +0 -0
  170. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/link.txt +1 -0
  171. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/jsoncpp.dir/progress.make +4 -0
  172. data/ext/bamtools/src/third_party/jsoncpp/CMakeFiles/progress.marks +1 -0
  173. data/ext/bamtools/src/third_party/jsoncpp/CMakeLists.txt +23 -0
  174. data/ext/bamtools/src/third_party/jsoncpp/LICENSE +55 -0
  175. data/ext/bamtools/src/third_party/jsoncpp/Makefile +263 -0
  176. data/ext/bamtools/src/third_party/jsoncpp/cmake_install.cmake +29 -0
  177. data/ext/bamtools/src/third_party/jsoncpp/json.h +15 -0
  178. data/ext/bamtools/src/third_party/jsoncpp/json_batchallocator.h +130 -0
  179. data/ext/bamtools/src/third_party/jsoncpp/json_config.h +42 -0
  180. data/ext/bamtools/src/third_party/jsoncpp/json_features.h +47 -0
  181. data/ext/bamtools/src/third_party/jsoncpp/json_forwards.h +42 -0
  182. data/ext/bamtools/src/third_party/jsoncpp/json_internalarray.inl +453 -0
  183. data/ext/bamtools/src/third_party/jsoncpp/json_internalmap.inl +612 -0
  184. data/ext/bamtools/src/third_party/jsoncpp/json_reader.cpp +870 -0
  185. data/ext/bamtools/src/third_party/jsoncpp/json_reader.h +201 -0
  186. data/ext/bamtools/src/third_party/jsoncpp/json_tool.h +93 -0
  187. data/ext/bamtools/src/third_party/jsoncpp/json_value.cpp +1701 -0
  188. data/ext/bamtools/src/third_party/jsoncpp/json_value.h +1059 -0
  189. data/ext/bamtools/src/third_party/jsoncpp/json_valueiterator.inl +297 -0
  190. data/ext/bamtools/src/third_party/jsoncpp/json_writer.cpp +819 -0
  191. data/ext/bamtools/src/third_party/jsoncpp/json_writer.h +179 -0
  192. data/ext/bamtools/src/toolkit/CMakeFiles/CMakeDirectoryInformation.cmake +25 -0
  193. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/CXX.includecache +698 -0
  194. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/DependInfo.cmake +34 -0
  195. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools.cpp.o +0 -0
  196. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_convert.cpp.o +0 -0
  197. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_count.cpp.o +0 -0
  198. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_coverage.cpp.o +0 -0
  199. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_filter.cpp.o +0 -0
  200. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_header.cpp.o +0 -0
  201. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_index.cpp.o +0 -0
  202. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_merge.cpp.o +0 -0
  203. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_random.cpp.o +0 -0
  204. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_resolve.cpp.o +0 -0
  205. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_revert.cpp.o +0 -0
  206. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_sort.cpp.o +0 -0
  207. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_split.cpp.o +0 -0
  208. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/bamtools_stats.cpp.o +0 -0
  209. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/build.make +447 -0
  210. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/cmake_clean.cmake +24 -0
  211. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/depend.internal +319 -0
  212. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/depend.make +319 -0
  213. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/flags.make +8 -0
  214. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/link.txt +1 -0
  215. data/ext/bamtools/src/toolkit/CMakeFiles/bamtools_cmd.dir/progress.make +15 -0
  216. data/ext/bamtools/src/toolkit/CMakeFiles/progress.marks +1 -0
  217. data/ext/bamtools/src/toolkit/CMakeLists.txt +44 -0
  218. data/ext/bamtools/src/toolkit/Makefile +560 -0
  219. data/ext/bamtools/src/toolkit/bamtools.cpp +163 -0
  220. data/ext/bamtools/src/toolkit/bamtools_convert.cpp +888 -0
  221. data/ext/bamtools/src/toolkit/bamtools_convert.h +37 -0
  222. data/ext/bamtools/src/toolkit/bamtools_count.cpp +187 -0
  223. data/ext/bamtools/src/toolkit/bamtools_count.h +37 -0
  224. data/ext/bamtools/src/toolkit/bamtools_coverage.cpp +196 -0
  225. data/ext/bamtools/src/toolkit/bamtools_coverage.h +37 -0
  226. data/ext/bamtools/src/toolkit/bamtools_filter.cpp +911 -0
  227. data/ext/bamtools/src/toolkit/bamtools_filter.h +37 -0
  228. data/ext/bamtools/src/toolkit/bamtools_header.cpp +122 -0
  229. data/ext/bamtools/src/toolkit/bamtools_header.h +38 -0
  230. data/ext/bamtools/src/toolkit/bamtools_index.cpp +126 -0
  231. data/ext/bamtools/src/toolkit/bamtools_index.h +37 -0
  232. data/ext/bamtools/src/toolkit/bamtools_merge.cpp +221 -0
  233. data/ext/bamtools/src/toolkit/bamtools_merge.h +37 -0
  234. data/ext/bamtools/src/toolkit/bamtools_random.cpp +255 -0
  235. data/ext/bamtools/src/toolkit/bamtools_random.h +37 -0
  236. data/ext/bamtools/src/toolkit/bamtools_resolve.cpp +1396 -0
  237. data/ext/bamtools/src/toolkit/bamtools_resolve.h +42 -0
  238. data/ext/bamtools/src/toolkit/bamtools_revert.cpp +194 -0
  239. data/ext/bamtools/src/toolkit/bamtools_revert.h +37 -0
  240. data/ext/bamtools/src/toolkit/bamtools_sort.cpp +410 -0
  241. data/ext/bamtools/src/toolkit/bamtools_sort.h +37 -0
  242. data/ext/bamtools/src/toolkit/bamtools_split.cpp +551 -0
  243. data/ext/bamtools/src/toolkit/bamtools_split.h +38 -0
  244. data/ext/bamtools/src/toolkit/bamtools_stats.cpp +286 -0
  245. data/ext/bamtools/src/toolkit/bamtools_stats.h +37 -0
  246. data/ext/bamtools/src/toolkit/bamtools_tool.h +35 -0
  247. data/ext/bamtools/src/toolkit/bamtools_version.h +20 -0
  248. data/ext/bamtools/src/toolkit/bamtools_version.h.in +20 -0
  249. data/ext/bamtools/src/toolkit/cmake_install.cmake +52 -0
  250. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/CXX.includecache +250 -0
  251. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/DependInfo.cmake +29 -0
  252. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_fasta.cpp.o +0 -0
  253. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_options.cpp.o +0 -0
  254. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_pileup_engine.cpp.o +0 -0
  255. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/bamtools_utilities.cpp.o +0 -0
  256. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/build.make +184 -0
  257. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/cmake_clean.cmake +14 -0
  258. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/depend.internal +40 -0
  259. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/depend.make +40 -0
  260. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/flags.make +8 -0
  261. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/link.txt +1 -0
  262. data/ext/bamtools/src/utils/CMakeFiles/BamTools-utils.dir/progress.make +5 -0
  263. data/ext/bamtools/src/utils/CMakeFiles/CMakeDirectoryInformation.cmake +23 -0
  264. data/ext/bamtools/src/utils/CMakeFiles/progress.marks +1 -0
  265. data/ext/bamtools/src/utils/CMakeLists.txt +30 -0
  266. data/ext/bamtools/src/utils/Makefile +290 -0
  267. data/ext/bamtools/src/utils/bamtools_fasta.cpp +632 -0
  268. data/ext/bamtools/src/utils/bamtools_fasta.h +47 -0
  269. data/ext/bamtools/src/utils/bamtools_filter_engine.h +552 -0
  270. data/ext/bamtools/src/utils/bamtools_filter_properties.h +195 -0
  271. data/ext/bamtools/src/utils/bamtools_filter_ruleparser.h +319 -0
  272. data/ext/bamtools/src/utils/bamtools_options.cpp +287 -0
  273. data/ext/bamtools/src/utils/bamtools_options.h +213 -0
  274. data/ext/bamtools/src/utils/bamtools_pileup_engine.cpp +327 -0
  275. data/ext/bamtools/src/utils/bamtools_pileup_engine.h +94 -0
  276. data/ext/bamtools/src/utils/bamtools_utilities.cpp +333 -0
  277. data/ext/bamtools/src/utils/bamtools_utilities.h +67 -0
  278. data/ext/bamtools/src/utils/bamtools_variant.h +128 -0
  279. data/ext/bamtools/src/utils/cmake_install.cmake +29 -0
  280. data/ext/bamtools/src/utils/utils_global.h +21 -0
  281. data/lib/ngs_server/version.rb +3 -0
  282. data/lib/ngs_server.rb +3 -0
  283. data/ngs_server.gemspec +23 -0
  284. metadata +339 -0
@@ -0,0 +1,641 @@
1
+ // ***************************************************************************
2
+ // BamToolsIndex.cpp (c) 2010 Derek Barnett
3
+ // Marth Lab, Department of Biology, Boston College
4
+ // ---------------------------------------------------------------------------
5
+ // Last modified: 27 April 2011 (DB)
6
+ // ---------------------------------------------------------------------------
7
+ // Provides index operations for the BamTools index format (".bti")
8
+ // ***************************************************************************
9
+
10
+ #include <api/BamAlignment.h>
11
+ #include <api/internal/BamReader_p.h>
12
+ #include <api/internal/BamToolsIndex_p.h>
13
+ #include <api/internal/BgzfStream_p.h>
14
+ using namespace BamTools;
15
+ using namespace BamTools::Internal;
16
+
17
+ #include <cstdio>
18
+ #include <cstdlib>
19
+ #include <cstring>
20
+ #include <algorithm>
21
+ #include <iostream>
22
+ #include <iterator>
23
+ #include <map>
24
+ using namespace std;
25
+
26
+ // static BamToolsIndex constants
27
+ const int BamToolsIndex::DEFAULT_BLOCK_LENGTH = 1000;
28
+ const string BamToolsIndex::BTI_EXTENSION = ".bti";
29
+ const char* const BamToolsIndex::BTI_MAGIC = "BTI\1";
30
+ const int BamToolsIndex::SIZEOF_BLOCK = sizeof(int32_t)*2 + sizeof(int64_t);
31
+
32
+ // ctor
33
+ BamToolsIndex::BamToolsIndex(Internal::BamReaderPrivate* reader)
34
+ : BamIndex(reader)
35
+ , m_indexStream(0)
36
+ , m_cacheMode(BamIndex::LimitedIndexCaching)
37
+ , m_blockSize(BamToolsIndex::DEFAULT_BLOCK_LENGTH)
38
+ , m_inputVersion(0)
39
+ , m_outputVersion(BTI_1_2) // latest version - used for writing new index files
40
+ {
41
+ m_isBigEndian = BamTools::SystemIsBigEndian();
42
+ }
43
+
44
+ // dtor
45
+ BamToolsIndex::~BamToolsIndex(void) {
46
+ CloseFile();
47
+ }
48
+
49
+ bool BamToolsIndex::CheckMagicNumber(void) {
50
+
51
+ // check 'magic number' to see if file is BTI index
52
+ char magic[4];
53
+ size_t elementsRead = fread(magic, sizeof(char), 4, m_indexStream);
54
+ if ( elementsRead != 4 ) {
55
+ cerr << "BamToolsIndex ERROR: could not read format 'magic' number" << endl;
56
+ return false;
57
+ }
58
+
59
+ if ( strncmp(magic, BamToolsIndex::BTI_MAGIC, 4) != 0 ) {
60
+ cerr << "BamToolsIndex ERROR: invalid format" << endl;
61
+ return false;
62
+ }
63
+
64
+ // otherwise ok
65
+ return true;
66
+ }
67
+
68
+ // check index file version, return true if OK
69
+ bool BamToolsIndex::CheckVersion(void) {
70
+
71
+ // read version from file
72
+ size_t elementsRead = fread(&m_inputVersion, sizeof(m_inputVersion), 1, m_indexStream);
73
+ if ( elementsRead != 1 ) return false;
74
+ if ( m_isBigEndian ) SwapEndian_32(m_inputVersion);
75
+
76
+ // if version is negative, or zero
77
+ if ( m_inputVersion <= 0 ) {
78
+ cerr << "BamToolsIndex ERROR: could not load index file: invalid version."
79
+ << endl;
80
+ return false;
81
+ }
82
+
83
+ // if version is newer than can be supported by this version of bamtools
84
+ else if ( m_inputVersion > m_outputVersion ) {
85
+ cerr << "BamToolsIndex ERROR: could not load index file. This version of BamTools does not recognize new index file version"
86
+ << endl
87
+ << "Please update BamTools to a more recent version to support this index file."
88
+ << endl;
89
+ return false;
90
+ }
91
+
92
+ // ------------------------------------------------------------------
93
+ // check for deprecated, unsupported versions
94
+ // (typically whose format did not accomodate a particular bug fix)
95
+
96
+ else if ( (Version)m_inputVersion == BamToolsIndex::BTI_1_0 ) {
97
+ cerr << "BamToolsIndex ERROR: could not load index file. This version of the index contains a bug related to accessing data near reference ends."
98
+ << endl << endl
99
+ << "Please run 'bamtools index -bti -in yourData.bam' to generate an up-to-date, fixed BTI file."
100
+ << endl << endl;
101
+ return false;
102
+ }
103
+
104
+ else if ( (Version)m_inputVersion == BamToolsIndex::BTI_1_1 ) {
105
+ cerr << "BamToolsIndex ERROR: could not load index file. This version of the index contains a bug related to handling empty references."
106
+ << endl << endl
107
+ << "Please run 'bamtools index -bti -in yourData.bam' to generate an up-to-date, fixed BTI file."
108
+ << endl << endl;
109
+ return false;
110
+ }
111
+
112
+ // otherwise ok
113
+ else return true;
114
+ }
115
+
116
+ void BamToolsIndex::ClearReferenceEntry(BtiReferenceEntry& refEntry) {
117
+ refEntry.ID = -1;
118
+ refEntry.Blocks.clear();
119
+ }
120
+
121
+ void BamToolsIndex::CloseFile(void) {
122
+ if ( IsFileOpen() )
123
+ fclose(m_indexStream);
124
+ m_indexFileSummary.clear();
125
+ }
126
+
127
+ // builds index from associated BAM file & writes out to index file
128
+ bool BamToolsIndex::Create(void) {
129
+
130
+ // return false if BamReader is invalid or not open
131
+ if ( m_reader == 0 || !m_reader->IsOpen() ) {
132
+ cerr << "BamToolsIndex ERROR: BamReader is not open"
133
+ << ", aborting index creation" << endl;
134
+ return false;
135
+ }
136
+
137
+ // rewind BamReader
138
+ if ( !m_reader->Rewind() ) {
139
+ cerr << "BamToolsIndex ERROR: could not rewind BamReader to create index"
140
+ << ", aborting index creation" << endl;
141
+ return false;
142
+ }
143
+
144
+ // open new index file (read & write)
145
+ string indexFilename = m_reader->Filename() + Extension();
146
+ if ( !OpenFile(indexFilename, "w+b") ) {
147
+ cerr << "BamToolsIndex ERROR: could not open ouput index file " << indexFilename
148
+ << ", aborting index creation" << endl;
149
+ return false;
150
+ }
151
+
152
+ // initialize BtiFileSummary with number of references
153
+ const int& numReferences = m_reader->GetReferenceCount();
154
+ InitializeFileSummary(numReferences);
155
+
156
+ // initialize output file
157
+ bool createdOk = true;
158
+ createdOk &= WriteHeader();
159
+
160
+ // index building markers
161
+ int32_t currentBlockCount = 0;
162
+ int64_t currentAlignmentOffset = m_reader->Tell();
163
+ int32_t blockRefId = -1;
164
+ int32_t blockMaxEndPosition = -1;
165
+ int64_t blockStartOffset = currentAlignmentOffset;
166
+ int32_t blockStartPosition = -1;
167
+
168
+ // plow through alignments, storing index entries
169
+ BamAlignment al;
170
+ BtiReferenceEntry refEntry;
171
+ while ( m_reader->LoadNextAlignment(al) ) {
172
+
173
+ // if moved to new reference
174
+ if ( al.RefID != blockRefId ) {
175
+
176
+ // if first pass, check:
177
+ if ( currentBlockCount == 0 ) {
178
+
179
+ // write any empty references up to (but not including) al.RefID
180
+ for ( int i = 0; i < al.RefID; ++i ) {
181
+ BtiReferenceEntry emptyEntry(i);
182
+ createdOk &= WriteReferenceEntry(emptyEntry);
183
+ }
184
+ }
185
+
186
+ // not first pass:
187
+ else {
188
+
189
+ // store previous BTI block data in reference entry
190
+ BtiBlock block(blockMaxEndPosition, blockStartOffset, blockStartPosition);
191
+ refEntry.Blocks.push_back(block);
192
+
193
+ // write reference entry, then clear
194
+ createdOk &= WriteReferenceEntry(refEntry);
195
+ ClearReferenceEntry(refEntry);
196
+
197
+ // write any empty references between (but not including) the last blockRefID and current al.RefID
198
+ for ( int i = blockRefId+1; i < al.RefID; ++i ) {
199
+ BtiReferenceEntry emptyEntry(i);
200
+ createdOk &= WriteReferenceEntry(emptyEntry);
201
+ }
202
+
203
+ // reset block count
204
+ currentBlockCount = 0;
205
+ }
206
+
207
+ // set ID for new reference entry
208
+ refEntry.ID = al.RefID;
209
+ }
210
+
211
+ // if beginning of block, update counters
212
+ if ( currentBlockCount == 0 ) {
213
+ blockRefId = al.RefID;
214
+ blockStartOffset = currentAlignmentOffset;
215
+ blockStartPosition = al.Position;
216
+ blockMaxEndPosition = al.GetEndPosition();
217
+ }
218
+
219
+ // increment block counter
220
+ ++currentBlockCount;
221
+
222
+ // check end position
223
+ int32_t alignmentEndPosition = al.GetEndPosition();
224
+ if ( alignmentEndPosition > blockMaxEndPosition )
225
+ blockMaxEndPosition = alignmentEndPosition;
226
+
227
+ // if block is full, get offset for next block, reset currentBlockCount
228
+ if ( currentBlockCount == m_blockSize ) {
229
+
230
+ // store previous block data in reference entry
231
+ BtiBlock block(blockMaxEndPosition, blockStartOffset, blockStartPosition);
232
+ refEntry.Blocks.push_back(block);
233
+
234
+ // update markers
235
+ blockStartOffset = m_reader->Tell();
236
+ currentBlockCount = 0;
237
+ }
238
+
239
+ // not the best name, but for the next iteration, this value will be the offset of the *current* alignment
240
+ // necessary because we won't know if this next alignment is on a new reference until we actually read it
241
+ currentAlignmentOffset = m_reader->Tell();
242
+ }
243
+
244
+ // after finishing alignments, if any data was read, check:
245
+ if ( blockRefId >= 0 ) {
246
+
247
+ // store last BTI block data in reference entry
248
+ BtiBlock block(blockMaxEndPosition, blockStartOffset, blockStartPosition);
249
+ refEntry.Blocks.push_back(block);
250
+
251
+ // write last reference entry, then clear
252
+ createdOk &= WriteReferenceEntry(refEntry);
253
+ ClearReferenceEntry(refEntry);
254
+
255
+ // then write any empty references remaining at end of file
256
+ for ( int i = blockRefId+1; i < numReferences; ++i ) {
257
+ BtiReferenceEntry emptyEntry(i);
258
+ createdOk &= WriteReferenceEntry(emptyEntry);
259
+ }
260
+ }
261
+
262
+ // rewind reader & return result
263
+ createdOk &= m_reader->Rewind();
264
+
265
+ // return result
266
+ return createdOk;
267
+ }
268
+
269
+ // returns format's file extension
270
+ const std::string BamToolsIndex::Extension(void) {
271
+ return BamToolsIndex::BTI_EXTENSION;
272
+ }
273
+
274
+ bool BamToolsIndex::GetOffset(const BamRegion& region, int64_t& offset, bool* hasAlignmentsInRegion) {
275
+
276
+ // return false ref ID is not a valid index in file summary data
277
+ if ( region.LeftRefID < 0 || region.LeftRefID >= (int)m_indexFileSummary.size() )
278
+ return false;
279
+
280
+ // retrieve reference index data for left bound reference
281
+ BtiReferenceEntry refEntry(region.LeftRefID);
282
+ if ( !ReadReferenceEntry(refEntry) ) {
283
+ cerr << "BamToolsIndex ERROR: could not retrieve index data from BTI file" << endl;
284
+ return false;
285
+ }
286
+
287
+ // binary search for an overlapping block (may not be first one though)
288
+ bool found = false;
289
+ typedef BtiBlockVector::const_iterator BtiBlockConstIterator;
290
+ BtiBlockConstIterator blockFirst = refEntry.Blocks.begin();
291
+ BtiBlockConstIterator blockIter = blockFirst;
292
+ BtiBlockConstIterator blockLast = refEntry.Blocks.end();
293
+ iterator_traits<BtiBlockConstIterator>::difference_type count = distance(blockFirst, blockLast);
294
+ iterator_traits<BtiBlockConstIterator>::difference_type step;
295
+ while ( count > 0 ) {
296
+ blockIter = blockFirst;
297
+ step = count/2;
298
+ advance(blockIter, step);
299
+
300
+ const BtiBlock& block = (*blockIter);
301
+ if ( block.StartPosition <= region.RightPosition ) {
302
+ if ( block.MaxEndPosition >= region.LeftPosition ) {
303
+ offset = block.StartOffset;
304
+ break;
305
+ }
306
+ blockFirst = ++blockIter;
307
+ count -= step+1;
308
+ }
309
+ else count = step;
310
+ }
311
+
312
+ // if we didn't search "off the end" of the blocks
313
+ if ( blockIter != blockLast ) {
314
+
315
+ // "walk back" until we've gone too far
316
+ while ( blockIter != blockFirst ) {
317
+ const BtiBlock& currentBlock = (*blockIter);
318
+
319
+ --blockIter;
320
+ const BtiBlock& previousBlock = (*blockIter);
321
+ if ( previousBlock.MaxEndPosition < region.LeftPosition ) {
322
+ offset = currentBlock.StartOffset;
323
+ found = true;
324
+ break;
325
+ }
326
+ }
327
+
328
+ // if we walked all the way to first block, just return that and let the reader's
329
+ // region overlap parsing do the rest
330
+ if ( blockIter == blockFirst ) {
331
+ const BtiBlock& block = (*blockIter);
332
+ offset = block.StartOffset;
333
+ found = true;
334
+ }
335
+ }
336
+
337
+
338
+ // sets to false if blocks container is empty, or if no matching block could be found
339
+ *hasAlignmentsInRegion = found;
340
+
341
+ // return success
342
+ return true;
343
+ }
344
+
345
+ // returns whether reference has alignments or no
346
+ bool BamToolsIndex::HasAlignments(const int& referenceID) const {
347
+ if ( referenceID < 0 || referenceID >= (int)m_indexFileSummary.size() )
348
+ return false;
349
+ const BtiReferenceSummary& refSummary = m_indexFileSummary.at(referenceID);
350
+ return ( refSummary.NumBlocks > 0 );
351
+ }
352
+
353
+ void BamToolsIndex::InitializeFileSummary(const int& numReferences) {
354
+ m_indexFileSummary.clear();
355
+ for ( int i = 0; i < numReferences; ++i )
356
+ m_indexFileSummary.push_back( BtiReferenceSummary() );
357
+ }
358
+
359
+ bool BamToolsIndex::IsFileOpen(void) const {
360
+ return ( m_indexStream != 0 );
361
+ }
362
+
363
+ // attempts to use index data to jump to @region, returns success/fail
364
+ // a "successful" jump indicates no error, but not whether this region has data
365
+ // * thus, the method sets a flag to indicate whether there are alignments
366
+ // available after the jump position
367
+ bool BamToolsIndex::Jump(const BamTools::BamRegion& region, bool* hasAlignmentsInRegion) {
368
+
369
+ // clear flag
370
+ *hasAlignmentsInRegion = false;
371
+
372
+ // skip if invalid reader or not open
373
+ if ( m_reader == 0 || !m_reader->IsOpen() )
374
+ return false;
375
+
376
+ // make sure left-bound position is valid
377
+ const RefVector& references = m_reader->GetReferenceData();
378
+ if ( region.LeftPosition > references.at(region.LeftRefID).RefLength )
379
+ return false;
380
+
381
+ // calculate nearest offset to jump to
382
+ int64_t offset;
383
+ if ( !GetOffset(region, offset, hasAlignmentsInRegion) ) {
384
+ cerr << "BamToolsIndex ERROR: could not jump"
385
+ << ", unable to calculate offset for specified region" << endl;
386
+ return false;
387
+ }
388
+
389
+ // return success/failure of seek
390
+ return m_reader->Seek(offset);
391
+ }
392
+
393
+ // loads existing data from file into memory
394
+ bool BamToolsIndex::Load(const std::string& filename) {
395
+
396
+ // attempt open index file (read-only)
397
+ if ( !OpenFile(filename, "rb") ) {
398
+ cerr << "BamToolsIndex ERROR: could not open input index file " << filename
399
+ << ", aborting index load" << endl;
400
+ return false;
401
+ }
402
+
403
+ // attempt to load & validate BTI header data
404
+ if ( !LoadHeader() ) {
405
+ cerr << "BamToolsIndex ERROR: could load header from index file " << filename
406
+ << ", aborting index load" << endl;
407
+ CloseFile();
408
+ return false;
409
+ }
410
+
411
+ // attempt to load index file summary
412
+ if ( !LoadFileSummary() ) {
413
+ cerr << "BamToolsIndex ERROR: could not generate a summary of index file " << filename
414
+ << ", aborting index load" << endl;
415
+ CloseFile();
416
+ return false;
417
+ }
418
+
419
+ // if we get here, index summary is loaded OK
420
+ return true;
421
+ }
422
+
423
+ bool BamToolsIndex::LoadFileSummary(void) {
424
+
425
+ // load number of reference sequences
426
+ int numReferences;
427
+ if ( !LoadNumReferences(numReferences) )
428
+ return false;
429
+
430
+ // initialize file summary data
431
+ InitializeFileSummary(numReferences);
432
+
433
+ // iterate over reference entries
434
+ bool loadedOk = true;
435
+ BtiFileSummary::iterator summaryIter = m_indexFileSummary.begin();
436
+ BtiFileSummary::iterator summaryEnd = m_indexFileSummary.end();
437
+ for ( ; summaryIter != summaryEnd; ++summaryIter )
438
+ loadedOk &= LoadReferenceSummary(*summaryIter);
439
+
440
+ // return result
441
+ return loadedOk;
442
+ }
443
+
444
+ bool BamToolsIndex::LoadHeader(void) {
445
+
446
+ // if invalid format 'magic number'
447
+ if ( !CheckMagicNumber() )
448
+ return false;
449
+
450
+ // if invalid BTI version
451
+ if ( !CheckVersion() )
452
+ return false;
453
+
454
+ // use file's BTI block size to set member variable
455
+ size_t elementsRead = fread(&m_blockSize, sizeof(m_blockSize), 1, m_indexStream);
456
+ if ( m_isBigEndian ) SwapEndian_32(m_blockSize);
457
+ return ( elementsRead == 1 );
458
+ }
459
+
460
+ bool BamToolsIndex::LoadNumBlocks(int& numBlocks) {
461
+ size_t elementsRead = 0;
462
+ elementsRead += fread(&numBlocks, sizeof(numBlocks), 1, m_indexStream);
463
+ if ( m_isBigEndian ) SwapEndian_32(numBlocks);
464
+ return ( elementsRead == 1 );
465
+ }
466
+
467
+ bool BamToolsIndex::LoadNumReferences(int& numReferences) {
468
+ size_t elementsRead = 0;
469
+ elementsRead += fread(&numReferences, sizeof(numReferences), 1, m_indexStream);
470
+ if ( m_isBigEndian ) SwapEndian_32(numReferences);
471
+ return ( elementsRead == 1 );
472
+ }
473
+
474
+ bool BamToolsIndex::LoadReferenceSummary(BtiReferenceSummary& refSummary) {
475
+
476
+ // load number of blocks
477
+ int numBlocks;
478
+ if ( !LoadNumBlocks(numBlocks) )
479
+ return false;
480
+
481
+ // store block summary data for this reference
482
+ refSummary.NumBlocks = numBlocks;
483
+ refSummary.FirstBlockFilePosition = Tell();
484
+
485
+ // skip blocks in index file (and return status)
486
+ return SkipBlocks(numBlocks);
487
+ }
488
+
489
+ bool BamToolsIndex::OpenFile(const std::string& filename, const char* mode) {
490
+
491
+ // make sure any previous index file is closed
492
+ CloseFile();
493
+
494
+ // attempt to open file
495
+ m_indexStream = fopen(filename.c_str(), mode);
496
+ return IsFileOpen();
497
+ }
498
+
499
+ bool BamToolsIndex::ReadBlock(BtiBlock& block) {
500
+
501
+ // read in block data members
502
+ size_t elementsRead = 0;
503
+ elementsRead += fread(&block.MaxEndPosition, sizeof(block.MaxEndPosition), 1, m_indexStream);
504
+ elementsRead += fread(&block.StartOffset, sizeof(block.StartOffset), 1, m_indexStream);
505
+ elementsRead += fread(&block.StartPosition, sizeof(block.StartPosition), 1, m_indexStream);
506
+
507
+ // swap endian-ness if necessary
508
+ if ( m_isBigEndian ) {
509
+ SwapEndian_32(block.MaxEndPosition);
510
+ SwapEndian_64(block.StartOffset);
511
+ SwapEndian_32(block.StartPosition);
512
+ }
513
+
514
+ // return success/failure
515
+ return ( elementsRead == 3 );
516
+ }
517
+
518
+ bool BamToolsIndex::ReadBlocks(const BtiReferenceSummary& refSummary, BtiBlockVector& blocks) {
519
+
520
+ // prep blocks container
521
+ blocks.clear();
522
+ blocks.reserve(refSummary.NumBlocks);
523
+
524
+ // skip to first block entry
525
+ if ( !Seek( refSummary.FirstBlockFilePosition, SEEK_SET ) ) {
526
+ cerr << "BamToolsIndex ERROR: could not seek to position "
527
+ << refSummary.FirstBlockFilePosition << endl;
528
+ return false;
529
+ }
530
+
531
+ // read & store block entries
532
+ bool readOk = true;
533
+ BtiBlock block;
534
+ for ( int i = 0; i < refSummary.NumBlocks; ++i ) {
535
+ readOk &= ReadBlock(block);
536
+ blocks.push_back(block);
537
+ }
538
+ return readOk;
539
+ }
540
+
541
+ bool BamToolsIndex::ReadReferenceEntry(BtiReferenceEntry& refEntry) {
542
+
543
+ // return false if refId not valid index in file summary structure
544
+ if ( refEntry.ID < 0 || refEntry.ID >= (int)m_indexFileSummary.size() )
545
+ return false;
546
+
547
+ // use index summary to assist reading the reference's BTI blocks
548
+ const BtiReferenceSummary& refSummary = m_indexFileSummary.at(refEntry.ID);
549
+ return ReadBlocks(refSummary, refEntry.Blocks);
550
+ }
551
+
552
+ bool BamToolsIndex::Seek(const int64_t& position, const int& origin) {
553
+ return ( fseek64(m_indexStream, position, origin) == 0 );
554
+ }
555
+
556
+ // change the index caching behavior
557
+ void BamToolsIndex::SetCacheMode(const BamIndex::IndexCacheMode& mode) {
558
+ m_cacheMode = mode;
559
+ // do nothing else here ? cache mode will be ignored from now on, most likely
560
+ }
561
+
562
+ bool BamToolsIndex::SkipBlocks(const int& numBlocks) {
563
+ return Seek( numBlocks*BamToolsIndex::SIZEOF_BLOCK, SEEK_CUR );
564
+ }
565
+
566
+ int64_t BamToolsIndex::Tell(void) const {
567
+ return ftell64(m_indexStream);
568
+ }
569
+
570
+ bool BamToolsIndex::WriteBlock(const BtiBlock& block) {
571
+
572
+ // copy entry data
573
+ int32_t maxEndPosition = block.MaxEndPosition;
574
+ int64_t startOffset = block.StartOffset;
575
+ int32_t startPosition = block.StartPosition;
576
+
577
+ // swap endian-ness if necessary
578
+ if ( m_isBigEndian ) {
579
+ SwapEndian_32(maxEndPosition);
580
+ SwapEndian_64(startOffset);
581
+ SwapEndian_32(startPosition);
582
+ }
583
+
584
+ // write the reference index entry
585
+ size_t elementsWritten = 0;
586
+ elementsWritten += fwrite(&maxEndPosition, sizeof(maxEndPosition), 1, m_indexStream);
587
+ elementsWritten += fwrite(&startOffset, sizeof(startOffset), 1, m_indexStream);
588
+ elementsWritten += fwrite(&startPosition, sizeof(startPosition), 1, m_indexStream);
589
+ return ( elementsWritten == 3 );
590
+ }
591
+
592
+ bool BamToolsIndex::WriteBlocks(const BtiBlockVector& blocks) {
593
+ bool writtenOk = true;
594
+ BtiBlockVector::const_iterator blockIter = blocks.begin();
595
+ BtiBlockVector::const_iterator blockEnd = blocks.end();
596
+ for ( ; blockIter != blockEnd; ++blockIter )
597
+ writtenOk &= WriteBlock(*blockIter);
598
+ return writtenOk;
599
+ }
600
+
601
+ bool BamToolsIndex::WriteHeader(void) {
602
+
603
+ size_t elementsWritten = 0;
604
+
605
+ // write BTI index format 'magic number'
606
+ elementsWritten += fwrite(BamToolsIndex::BTI_MAGIC, 1, 4, m_indexStream);
607
+
608
+ // write BTI index format version
609
+ int32_t currentVersion = (int32_t)m_outputVersion;
610
+ if ( m_isBigEndian ) SwapEndian_32(currentVersion);
611
+ elementsWritten += fwrite(&currentVersion, sizeof(currentVersion), 1, m_indexStream);
612
+
613
+ // write block size
614
+ int32_t blockSize = m_blockSize;
615
+ if ( m_isBigEndian ) SwapEndian_32(blockSize);
616
+ elementsWritten += fwrite(&blockSize, sizeof(blockSize), 1, m_indexStream);
617
+
618
+ // write number of references
619
+ int32_t numReferences = m_indexFileSummary.size();
620
+ if ( m_isBigEndian ) SwapEndian_32(numReferences);
621
+ elementsWritten += fwrite(&numReferences, sizeof(numReferences), 1, m_indexStream);
622
+
623
+ // return success/failure of write
624
+ return ( elementsWritten == 7 );
625
+ }
626
+
627
+ bool BamToolsIndex::WriteReferenceEntry(const BtiReferenceEntry& refEntry) {
628
+
629
+ size_t elementsWritten = 0;
630
+
631
+ // write number of blocks this reference
632
+ uint32_t numBlocks = refEntry.Blocks.size();
633
+ if ( m_isBigEndian ) SwapEndian_32(numBlocks);
634
+ elementsWritten += fwrite(&numBlocks, sizeof(numBlocks), 1, m_indexStream);
635
+
636
+ // write actual block entries
637
+ const bool blocksOk = WriteBlocks(refEntry.Blocks);
638
+
639
+ // return success/fail
640
+ return ( elementsWritten == 1) && blocksOk;
641
+ }