ngs_server 0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+ }