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,187 @@
1
+ // ***************************************************************************
2
+ // BamToolsIndex.h (c) 2010 Derek Barnett
3
+ // Marth Lab, Department of Biology, Boston College
4
+ // ---------------------------------------------------------------------------
5
+ // Last modified: 5 April 2011 (DB)
6
+ // ---------------------------------------------------------------------------
7
+ // Provides index operations for the BamTools index format (".bti")
8
+ // ***************************************************************************
9
+
10
+ #ifndef BAMTOOLS_INDEX_FORMAT_H
11
+ #define BAMTOOLS_INDEX_FORMAT_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
19
+ // version without notice, or even be removed.
20
+ //
21
+ // We mean it.
22
+
23
+ #include <api/BamAux.h>
24
+ #include <api/BamIndex.h>
25
+ #include <map>
26
+ #include <string>
27
+ #include <vector>
28
+
29
+ namespace BamTools {
30
+ namespace Internal {
31
+
32
+ // contains data for each 'block' in a BTI index
33
+ struct BtiBlock {
34
+
35
+ // data members
36
+ int32_t MaxEndPosition;
37
+ int64_t StartOffset;
38
+ int32_t StartPosition;
39
+
40
+ // ctor
41
+ BtiBlock(const int32_t& maxEndPosition = 0,
42
+ const int64_t& startOffset = 0,
43
+ const int32_t& startPosition = 0)
44
+ : MaxEndPosition(maxEndPosition)
45
+ , StartOffset(startOffset)
46
+ , StartPosition(startPosition)
47
+ { }
48
+ };
49
+
50
+ // convenience typedef for describing a a list of BTI blocks on a reference
51
+ typedef std::vector<BtiBlock> BtiBlockVector;
52
+
53
+ // contains all fields necessary for building, loading, & writing
54
+ // full BTI index data for a single reference
55
+ struct BtiReferenceEntry {
56
+
57
+ // data members
58
+ int32_t ID;
59
+ BtiBlockVector Blocks;
60
+
61
+ // ctor
62
+ BtiReferenceEntry(const int& id = -1)
63
+ : ID(id)
64
+ { }
65
+ };
66
+
67
+ // provides (persistent) summary of BtiReferenceEntry's index data
68
+ struct BtiReferenceSummary {
69
+
70
+ // data members
71
+ int NumBlocks;
72
+ uint64_t FirstBlockFilePosition;
73
+
74
+ // ctor
75
+ BtiReferenceSummary(void)
76
+ : NumBlocks(0)
77
+ , FirstBlockFilePosition(0)
78
+ { }
79
+ };
80
+
81
+ // convenience typedef for describing a full BTI index file summary
82
+ typedef std::vector<BtiReferenceSummary> BtiFileSummary;
83
+
84
+ class BamToolsIndex : public BamIndex {
85
+
86
+ // keep a list of any supported versions here
87
+ // (might be useful later to handle any 'legacy' versions if the format changes)
88
+ // listed for example like: BTI_1_0 = 1, BTI_1_1 = 2, BTI_1_2 = 3, BTI_2_0 = 4, and so on
89
+ //
90
+ // so a change introduced in (hypothetical) BTI_1_2 would be handled from then on by:
91
+ //
92
+ // if ( indexVersion >= BTI_1_2 )
93
+ // do something new
94
+ // else
95
+ // do the old thing
96
+ enum Version { BTI_1_0 = 1
97
+ , BTI_1_1
98
+ , BTI_1_2
99
+ };
100
+
101
+ // ctor & dtor
102
+ public:
103
+ BamToolsIndex(Internal::BamReaderPrivate* reader);
104
+ ~BamToolsIndex(void);
105
+
106
+ // BamIndex implementation
107
+ public:
108
+ // builds index from associated BAM file & writes out to index file
109
+ bool Create(void);
110
+ // returns whether reference has alignments or no
111
+ bool HasAlignments(const int& referenceID) const;
112
+ // attempts to use index data to jump to @region, returns success/fail
113
+ // a "successful" jump indicates no error, but not whether this region has data
114
+ // * thus, the method sets a flag to indicate whether there are alignments
115
+ // available after the jump position
116
+ bool Jump(const BamTools::BamRegion& region, bool* hasAlignmentsInRegion);
117
+ // loads existing data from file into memory
118
+ bool Load(const std::string& filename);
119
+ // change the index caching behavior
120
+ void SetCacheMode(const BamIndex::IndexCacheMode& mode);
121
+ public:
122
+ // returns format's file extension
123
+ static const std::string Extension(void);
124
+
125
+ // internal file ops
126
+ private:
127
+ bool CheckMagicNumber(void);
128
+ bool CheckVersion(void);
129
+ void CloseFile(void);
130
+ bool IsFileOpen(void) const;
131
+ bool OpenFile(const std::string& filename, const char* mode);
132
+ bool Seek(const int64_t& position, const int& origin);
133
+ int64_t Tell(void) const;
134
+
135
+ // internal BTI index building methods
136
+ private:
137
+ void ClearReferenceEntry(BtiReferenceEntry& refEntry);
138
+
139
+ // internal random-access methods
140
+ private:
141
+ bool GetOffset(const BamRegion& region, int64_t& offset, bool* hasAlignmentsInRegion);
142
+
143
+ // internal BTI summary data methods
144
+ private:
145
+ void InitializeFileSummary(const int& numReferences);
146
+ bool LoadFileSummary(void);
147
+ bool LoadHeader(void);
148
+ bool LoadNumBlocks(int& numBlocks);
149
+ bool LoadNumReferences(int& numReferences);
150
+ bool LoadReferenceSummary(BtiReferenceSummary& refSummary);
151
+ bool SkipBlocks(const int& numBlocks);
152
+
153
+ // internal BTI full index input methods
154
+ private:
155
+ bool ReadBlock(BtiBlock& block);
156
+ bool ReadBlocks(const BtiReferenceSummary& refSummary, BtiBlockVector& blocks);
157
+ bool ReadReferenceEntry(BtiReferenceEntry& refEntry);
158
+
159
+ // internal BTI full index output methods
160
+ private:
161
+ bool WriteBlock(const BtiBlock& block);
162
+ bool WriteBlocks(const BtiBlockVector& blocks);
163
+ bool WriteHeader(void);
164
+ bool WriteReferenceEntry(const BtiReferenceEntry& refEntry);
165
+
166
+ // data members
167
+ private:
168
+ FILE* m_indexStream;
169
+ bool m_isBigEndian;
170
+ BamIndex::IndexCacheMode m_cacheMode;
171
+ BtiFileSummary m_indexFileSummary;
172
+ int m_blockSize;
173
+ int32_t m_inputVersion; // Version is serialized as int
174
+ Version m_outputVersion;
175
+
176
+ // static constants
177
+ private:
178
+ static const int DEFAULT_BLOCK_LENGTH;
179
+ static const std::string BTI_EXTENSION;
180
+ static const char* const BTI_MAGIC;
181
+ static const int SIZEOF_BLOCK;
182
+ };
183
+
184
+ } // namespace Internal
185
+ } // namespace BamTools
186
+
187
+ #endif // BAMTOOLS_INDEX_FORMAT_H
@@ -0,0 +1,424 @@
1
+ // ***************************************************************************
2
+ // BamWriter_p.cpp (c) 2010 Derek Barnett
3
+ // Marth Lab, Department of Biology, Boston College
4
+ // ---------------------------------------------------------------------------
5
+ // Last modified: 16 June 2011 (DB)
6
+ // ---------------------------------------------------------------------------
7
+ // Provides the basic functionality for producing BAM files
8
+ // ***************************************************************************
9
+
10
+ #include <api/BamAlignment.h>
11
+ #include <api/BamConstants.h>
12
+ #include <api/internal/BamWriter_p.h>
13
+ using namespace BamTools;
14
+ using namespace BamTools::Internal;
15
+
16
+ #include <cstdio>
17
+ #include <cstdlib>
18
+ #include <cstring>
19
+ using namespace std;
20
+
21
+ // ctor
22
+ BamWriterPrivate::BamWriterPrivate(void)
23
+ : m_isBigEndian( BamTools::SystemIsBigEndian() )
24
+ { }
25
+
26
+ // dtor
27
+ BamWriterPrivate::~BamWriterPrivate(void) {
28
+ m_stream.Close();
29
+ }
30
+
31
+ // calculates minimum bin for a BAM alignment interval
32
+ unsigned int BamWriterPrivate::CalculateMinimumBin(const int begin, int end) const {
33
+ --end;
34
+ if ( (begin >> 14) == (end >> 14) ) return 4681 + (begin >> 14);
35
+ if ( (begin >> 17) == (end >> 17) ) return 585 + (begin >> 17);
36
+ if ( (begin >> 20) == (end >> 20) ) return 73 + (begin >> 20);
37
+ if ( (begin >> 23) == (end >> 23) ) return 9 + (begin >> 23);
38
+ if ( (begin >> 26) == (end >> 26) ) return 1 + (begin >> 26);
39
+ return 0;
40
+ }
41
+
42
+ // closes the alignment archive
43
+ void BamWriterPrivate::Close(void) {
44
+ m_stream.Close();
45
+ }
46
+
47
+ // creates a cigar string from the supplied alignment
48
+ void BamWriterPrivate::CreatePackedCigar(const vector<CigarOp>& cigarOperations, string& packedCigar) {
49
+
50
+ // initialize
51
+ const unsigned int numCigarOperations = cigarOperations.size();
52
+ packedCigar.resize(numCigarOperations * Constants::BAM_SIZEOF_INT);
53
+
54
+ // pack the cigar data into the string
55
+ unsigned int* pPackedCigar = (unsigned int*)packedCigar.data();
56
+
57
+ // iterate over cigar operations
58
+ vector<CigarOp>::const_iterator coIter = cigarOperations.begin();
59
+ vector<CigarOp>::const_iterator coEnd = cigarOperations.end();
60
+ for ( ; coIter != coEnd; ++coIter ) {
61
+
62
+ // store op in packedCigar
63
+ unsigned int cigarOp;
64
+ switch ( coIter->Type ) {
65
+ case (Constants::BAM_CIGAR_MATCH_CHAR) : cigarOp = Constants::BAM_CIGAR_MATCH; break;
66
+ case (Constants::BAM_CIGAR_INS_CHAR) : cigarOp = Constants::BAM_CIGAR_INS; break;
67
+ case (Constants::BAM_CIGAR_DEL_CHAR) : cigarOp = Constants::BAM_CIGAR_DEL; break;
68
+ case (Constants::BAM_CIGAR_REFSKIP_CHAR) : cigarOp = Constants::BAM_CIGAR_REFSKIP; break;
69
+ case (Constants::BAM_CIGAR_SOFTCLIP_CHAR) : cigarOp = Constants::BAM_CIGAR_SOFTCLIP; break;
70
+ case (Constants::BAM_CIGAR_HARDCLIP_CHAR) : cigarOp = Constants::BAM_CIGAR_HARDCLIP; break;
71
+ case (Constants::BAM_CIGAR_PAD_CHAR) : cigarOp = Constants::BAM_CIGAR_PAD; break;
72
+ case (Constants::BAM_CIGAR_SEQMATCH_CHAR) : cigarOp = Constants::BAM_CIGAR_SEQMATCH; break;
73
+ case (Constants::BAM_CIGAR_MISMATCH_CHAR) : cigarOp = Constants::BAM_CIGAR_MISMATCH; break;
74
+ default:
75
+ fprintf(stderr, "BamWriter ERROR: unknown cigar operation found: %c\n", coIter->Type);
76
+ exit(1);
77
+ }
78
+
79
+ *pPackedCigar = coIter->Length << Constants::BAM_CIGAR_SHIFT | cigarOp;
80
+ pPackedCigar++;
81
+ }
82
+ }
83
+
84
+ // encodes the supplied query sequence into 4-bit notation
85
+ void BamWriterPrivate::EncodeQuerySequence(const string& query, string& encodedQuery) {
86
+
87
+ // prepare the encoded query string
88
+ const unsigned int queryLen = query.size();
89
+ const unsigned int encodedQueryLen = (unsigned int)((queryLen / 2.0) + 0.5);
90
+ encodedQuery.resize(encodedQueryLen);
91
+ char* pEncodedQuery = (char*)encodedQuery.data();
92
+ const char* pQuery = (const char*)query.data();
93
+
94
+ unsigned char nucleotideCode;
95
+ bool useHighWord = true;
96
+
97
+ while ( *pQuery ) {
98
+ switch ( *pQuery ) {
99
+ case (Constants::BAM_DNA_EQUAL) : nucleotideCode = Constants::BAM_BASECODE_EQUAL; break;
100
+ case (Constants::BAM_DNA_A) : nucleotideCode = Constants::BAM_BASECODE_A; break;
101
+ case (Constants::BAM_DNA_C) : nucleotideCode = Constants::BAM_BASECODE_C; break;
102
+ case (Constants::BAM_DNA_G) : nucleotideCode = Constants::BAM_BASECODE_G; break;
103
+ case (Constants::BAM_DNA_T) : nucleotideCode = Constants::BAM_BASECODE_T; break;
104
+ case (Constants::BAM_DNA_N) : nucleotideCode = Constants::BAM_BASECODE_N; break;
105
+ default:
106
+ fprintf(stderr, "BamWriter ERROR: only the following bases are supported in the BAM format: {=, A, C, G, T, N}. Found [%c]\n", *pQuery);
107
+ exit(1);
108
+ }
109
+
110
+ // pack the nucleotide code
111
+ if ( useHighWord ) {
112
+ *pEncodedQuery = nucleotideCode << 4;
113
+ useHighWord = false;
114
+ } else {
115
+ *pEncodedQuery |= nucleotideCode;
116
+ ++pEncodedQuery;
117
+ useHighWord = true;
118
+ }
119
+
120
+ // increment the query position
121
+ ++pQuery;
122
+ }
123
+ }
124
+
125
+ // returns whether BAM file is open for writing or not
126
+ bool BamWriterPrivate::IsOpen(void) const {
127
+ return m_stream.IsOpen;
128
+ }
129
+
130
+ // opens the alignment archive
131
+ bool BamWriterPrivate::Open(const string& filename,
132
+ const string& samHeaderText,
133
+ const RefVector& referenceSequences)
134
+ {
135
+ // open the BGZF file for writing, return failure if error
136
+ if ( !m_stream.Open(filename, "wb") )
137
+ return false;
138
+
139
+ // write BAM file 'metadata' components
140
+ WriteMagicNumber();
141
+ WriteSamHeaderText(samHeaderText);
142
+ WriteReferences(referenceSequences);
143
+ return true;
144
+ }
145
+
146
+ // saves the alignment to the alignment archive
147
+ void BamWriterPrivate::SaveAlignment(const BamAlignment& al) {
148
+
149
+ // if BamAlignment contains only the core data and a raw char data buffer
150
+ // (as a result of BamReader::GetNextAlignmentCore())
151
+ if ( al.SupportData.HasCoreOnly ) {
152
+
153
+ // write the block size
154
+ unsigned int blockSize = al.SupportData.BlockLength;
155
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(blockSize);
156
+ m_stream.Write((char*)&blockSize, Constants::BAM_SIZEOF_INT);
157
+
158
+ // re-calculate bin (in case BamAlignment's position has been previously modified)
159
+ const uint32_t alignmentBin = CalculateMinimumBin(al.Position, al.GetEndPosition());
160
+
161
+ // assign the BAM core data
162
+ uint32_t buffer[Constants::BAM_CORE_BUFFER_SIZE];
163
+ buffer[0] = al.RefID;
164
+ buffer[1] = al.Position;
165
+ buffer[2] = (alignmentBin << 16) | (al.MapQuality << 8) | al.SupportData.QueryNameLength;
166
+ buffer[3] = (al.AlignmentFlag << 16) | al.SupportData.NumCigarOperations;
167
+ buffer[4] = al.SupportData.QuerySequenceLength;
168
+ buffer[5] = al.MateRefID;
169
+ buffer[6] = al.MatePosition;
170
+ buffer[7] = al.InsertSize;
171
+
172
+ // swap BAM core endian-ness, if necessary
173
+ if ( m_isBigEndian ) {
174
+ for ( int i = 0; i < 8; ++i )
175
+ BamTools::SwapEndian_32(buffer[i]);
176
+ }
177
+
178
+ // write the BAM core
179
+ m_stream.Write((char*)&buffer, Constants::BAM_CORE_SIZE);
180
+
181
+ // write the raw char data
182
+ m_stream.Write((char*)al.SupportData.AllCharData.data(),
183
+ al.SupportData.BlockLength-Constants::BAM_CORE_SIZE);
184
+ }
185
+
186
+ // otherwise, BamAlignment should contain character in the standard fields: Name, QueryBases, etc
187
+ // ( resulting from BamReader::GetNextAlignment() *OR* being generated directly by client code )
188
+ else {
189
+
190
+ // calculate char lengths
191
+ const unsigned int nameLength = al.Name.size() + 1;
192
+ const unsigned int numCigarOperations = al.CigarData.size();
193
+ const unsigned int queryLength = al.QueryBases.size();
194
+ const unsigned int tagDataLength = al.TagData.size();
195
+
196
+ // no way to tell if BamAlignment.Bin is already defined (no default, invalid value)
197
+ // force calculation of Bin before storing
198
+ const int endPosition = al.GetEndPosition();
199
+ const unsigned int alignmentBin = CalculateMinimumBin(al.Position, endPosition);
200
+
201
+ // create our packed cigar string
202
+ string packedCigar;
203
+ CreatePackedCigar(al.CigarData, packedCigar);
204
+ const unsigned int packedCigarLength = packedCigar.size();
205
+
206
+ // encode the query
207
+ string encodedQuery;
208
+ EncodeQuerySequence(al.QueryBases, encodedQuery);
209
+ const unsigned int encodedQueryLength = encodedQuery.size();
210
+
211
+ // write the block size
212
+ const unsigned int dataBlockSize = nameLength +
213
+ packedCigarLength +
214
+ encodedQueryLength +
215
+ queryLength +
216
+ tagDataLength;
217
+ unsigned int blockSize = Constants::BAM_CORE_SIZE + dataBlockSize;
218
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(blockSize);
219
+ m_stream.Write((char*)&blockSize, Constants::BAM_SIZEOF_INT);
220
+
221
+ // assign the BAM core data
222
+ uint32_t buffer[Constants::BAM_CORE_BUFFER_SIZE];
223
+ buffer[0] = al.RefID;
224
+ buffer[1] = al.Position;
225
+ buffer[2] = (alignmentBin << 16) | (al.MapQuality << 8) | nameLength;
226
+ buffer[3] = (al.AlignmentFlag << 16) | numCigarOperations;
227
+ buffer[4] = queryLength;
228
+ buffer[5] = al.MateRefID;
229
+ buffer[6] = al.MatePosition;
230
+ buffer[7] = al.InsertSize;
231
+
232
+ // swap BAM core endian-ness, if necessary
233
+ if ( m_isBigEndian ) {
234
+ for ( int i = 0; i < 8; ++i )
235
+ BamTools::SwapEndian_32(buffer[i]);
236
+ }
237
+
238
+ // write the BAM core
239
+ m_stream.Write((char*)&buffer, Constants::BAM_CORE_SIZE);
240
+
241
+ // write the query name
242
+ m_stream.Write(al.Name.c_str(), nameLength);
243
+
244
+ // write the packed cigar
245
+ if ( m_isBigEndian ) {
246
+ char* cigarData = (char*)calloc(sizeof(char), packedCigarLength);
247
+ memcpy(cigarData, packedCigar.data(), packedCigarLength);
248
+ if ( m_isBigEndian ) {
249
+ for ( unsigned int i = 0; i < packedCigarLength; ++i )
250
+ BamTools::SwapEndian_32p(&cigarData[i]);
251
+ }
252
+ m_stream.Write(cigarData, packedCigarLength);
253
+ free(cigarData);
254
+ }
255
+ else
256
+ m_stream.Write(packedCigar.data(), packedCigarLength);
257
+
258
+ // write the encoded query sequence
259
+ m_stream.Write(encodedQuery.data(), encodedQueryLength);
260
+
261
+ // write the base qualities
262
+ char* pBaseQualities = (char*)al.Qualities.data();
263
+ for ( unsigned int i = 0; i < queryLength; ++i )
264
+ pBaseQualities[i] -= 33; // FASTQ conversion
265
+ m_stream.Write(pBaseQualities, queryLength);
266
+
267
+ // write the read group tag
268
+ if ( m_isBigEndian ) {
269
+
270
+ char* tagData = (char*)calloc(sizeof(char), tagDataLength);
271
+ memcpy(tagData, al.TagData.data(), tagDataLength);
272
+
273
+ int i = 0;
274
+ while ( (unsigned int)i < tagDataLength ) {
275
+
276
+ i += Constants::BAM_TAG_TAGSIZE; // skip tag chars (e.g. "RG", "NM", etc.)
277
+ const char type = tagData[i]; // get tag type at position i
278
+ ++i;
279
+
280
+ switch ( type ) {
281
+
282
+ case(Constants::BAM_TAG_TYPE_ASCII) :
283
+ case(Constants::BAM_TAG_TYPE_INT8) :
284
+ case(Constants::BAM_TAG_TYPE_UINT8) :
285
+ ++i;
286
+ break;
287
+
288
+ case(Constants::BAM_TAG_TYPE_INT16) :
289
+ case(Constants::BAM_TAG_TYPE_UINT16) :
290
+ BamTools::SwapEndian_16p(&tagData[i]);
291
+ i += sizeof(uint16_t);
292
+ break;
293
+
294
+ case(Constants::BAM_TAG_TYPE_FLOAT) :
295
+ case(Constants::BAM_TAG_TYPE_INT32) :
296
+ case(Constants::BAM_TAG_TYPE_UINT32) :
297
+ BamTools::SwapEndian_32p(&tagData[i]);
298
+ i += sizeof(uint32_t);
299
+ break;
300
+
301
+ case(Constants::BAM_TAG_TYPE_HEX) :
302
+ case(Constants::BAM_TAG_TYPE_STRING) :
303
+ // no endian swapping necessary for hex-string/string data
304
+ while ( tagData[i] )
305
+ ++i;
306
+ // increment one more for null terminator
307
+ ++i;
308
+ break;
309
+
310
+ case(Constants::BAM_TAG_TYPE_ARRAY) :
311
+
312
+ {
313
+ // read array type
314
+ const char arrayType = tagData[i];
315
+ ++i;
316
+
317
+ // swap endian-ness of number of elements in place, then retrieve for loop
318
+ BamTools::SwapEndian_32p(&tagData[i]);
319
+ int32_t numElements;
320
+ memcpy(&numElements, &tagData[i], sizeof(uint32_t));
321
+ i += sizeof(uint32_t);
322
+
323
+ // swap endian-ness of array elements
324
+ for ( int j = 0; j < numElements; ++j ) {
325
+ switch (arrayType) {
326
+ case (Constants::BAM_TAG_TYPE_INT8) :
327
+ case (Constants::BAM_TAG_TYPE_UINT8) :
328
+ // no endian-swapping necessary
329
+ ++i;
330
+ break;
331
+ case (Constants::BAM_TAG_TYPE_INT16) :
332
+ case (Constants::BAM_TAG_TYPE_UINT16) :
333
+ BamTools::SwapEndian_16p(&tagData[i]);
334
+ i += sizeof(uint16_t);
335
+ break;
336
+ case (Constants::BAM_TAG_TYPE_FLOAT) :
337
+ case (Constants::BAM_TAG_TYPE_INT32) :
338
+ case (Constants::BAM_TAG_TYPE_UINT32) :
339
+ BamTools::SwapEndian_32p(&tagData[i]);
340
+ i += sizeof(uint32_t);
341
+ break;
342
+ default:
343
+ // error case
344
+ fprintf(stderr,
345
+ "BamWriter ERROR: unknown binary array type encountered: [%c]\n",
346
+ arrayType);
347
+ exit(1);
348
+ }
349
+ }
350
+
351
+ break;
352
+ }
353
+
354
+ default :
355
+ fprintf(stderr, "BamWriter ERROR: invalid tag value type\n"); // shouldn't get here
356
+ free(tagData);
357
+ exit(1);
358
+ }
359
+ }
360
+ m_stream.Write(tagData, tagDataLength);
361
+ free(tagData);
362
+ }
363
+ else
364
+ m_stream.Write(al.TagData.data(), tagDataLength);
365
+ }
366
+ }
367
+
368
+ void BamWriterPrivate::SetWriteCompressed(bool ok) {
369
+
370
+ // warn if BAM file is already open
371
+ // modifying compression is not allowed in this case
372
+ if ( IsOpen() ) {
373
+ cerr << "BamWriter WARNING: attempting to change compression mode on an open BAM file is not allowed. "
374
+ << "Ignoring request." << endl;
375
+ return;
376
+ }
377
+
378
+ // set BgzfStream compression mode
379
+ m_stream.SetWriteCompressed(ok);
380
+ }
381
+
382
+ void BamWriterPrivate::WriteMagicNumber(void) {
383
+ // write BAM file 'magic number'
384
+ m_stream.Write(Constants::BAM_HEADER_MAGIC, Constants::BAM_HEADER_MAGIC_LENGTH);
385
+ }
386
+
387
+ void BamWriterPrivate::WriteReferences(const BamTools::RefVector& referenceSequences) {
388
+
389
+ // write the number of reference sequences
390
+ uint32_t numReferenceSequences = referenceSequences.size();
391
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(numReferenceSequences);
392
+ m_stream.Write((char*)&numReferenceSequences, Constants::BAM_SIZEOF_INT);
393
+
394
+ // foreach reference sequence
395
+ RefVector::const_iterator rsIter = referenceSequences.begin();
396
+ RefVector::const_iterator rsEnd = referenceSequences.end();
397
+ for ( ; rsIter != rsEnd; ++rsIter ) {
398
+
399
+ // write the reference sequence name length
400
+ uint32_t referenceSequenceNameLen = rsIter->RefName.size() + 1;
401
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(referenceSequenceNameLen);
402
+ m_stream.Write((char*)&referenceSequenceNameLen, Constants::BAM_SIZEOF_INT);
403
+
404
+ // write the reference sequence name
405
+ m_stream.Write(rsIter->RefName.c_str(), referenceSequenceNameLen);
406
+
407
+ // write the reference sequence length
408
+ int32_t referenceLength = rsIter->RefLength;
409
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(referenceLength);
410
+ m_stream.Write((char*)&referenceLength, Constants::BAM_SIZEOF_INT);
411
+ }
412
+ }
413
+
414
+ void BamWriterPrivate::WriteSamHeaderText(const std::string& samHeaderText) {
415
+
416
+ // write the SAM header text length
417
+ uint32_t samHeaderLen = samHeaderText.size();
418
+ if ( m_isBigEndian ) BamTools::SwapEndian_32(samHeaderLen);
419
+ m_stream.Write((char*)&samHeaderLen, Constants::BAM_SIZEOF_INT);
420
+
421
+ // write the SAM header text
422
+ if ( samHeaderLen > 0 )
423
+ m_stream.Write(samHeaderText.data(), samHeaderLen);
424
+ }
@@ -0,0 +1,66 @@
1
+ // ***************************************************************************
2
+ // BamWriter_p.h (c) 2010 Derek Barnett
3
+ // Marth Lab, Department of Biology, Boston College
4
+ // ---------------------------------------------------------------------------
5
+ // Last modified: 24 February 2011 (DB)
6
+ // ---------------------------------------------------------------------------
7
+ // Provides the basic functionality for producing BAM files
8
+ // ***************************************************************************
9
+
10
+ #ifndef BAMWRITER_P_H
11
+ #define BAMWRITER_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
19
+ // version without notice, or even be removed.
20
+ //
21
+ // We mean it.
22
+
23
+ #include <api/BamAux.h>
24
+ #include <api/internal/BgzfStream_p.h>
25
+ #include <string>
26
+ #include <vector>
27
+
28
+ namespace BamTools {
29
+ namespace Internal {
30
+
31
+ class BamWriterPrivate {
32
+
33
+ // ctor & dtor
34
+ public:
35
+ BamWriterPrivate(void);
36
+ ~BamWriterPrivate(void);
37
+
38
+ // interface methods
39
+ public:
40
+ void Close(void);
41
+ bool IsOpen(void) const;
42
+ bool Open(const std::string& filename,
43
+ const std::string& samHeaderText,
44
+ const BamTools::RefVector& referenceSequences);
45
+ void SaveAlignment(const BamAlignment& al);
46
+ void SetWriteCompressed(bool ok);
47
+
48
+ // 'internal' methods
49
+ public:
50
+ unsigned int CalculateMinimumBin(const int begin, int end) const;
51
+ void CreatePackedCigar(const std::vector<BamTools::CigarOp>& cigarOperations, std::string& packedCigar);
52
+ void EncodeQuerySequence(const std::string& query, std::string& encodedQuery);
53
+ void WriteMagicNumber(void);
54
+ void WriteReferences(const BamTools::RefVector& referenceSequences);
55
+ void WriteSamHeaderText(const std::string& samHeaderText);
56
+
57
+ // data members
58
+ private:
59
+ BgzfStream m_stream;
60
+ bool m_isBigEndian;
61
+ };
62
+
63
+ } // namespace Internal
64
+ } // namespace BamTools
65
+
66
+ #endif // BAMWRITER_P_H