finishm 0.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 (554) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/Gemfile +31 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +59 -0
  8. data/Rakefile +51 -0
  9. data/VERSION +1 -0
  10. data/bin/assembly_visualiser +106 -0
  11. data/bin/check_primer_combinations.rb +73 -0
  12. data/bin/contig_joiner.rb +244 -0
  13. data/bin/contigs_against_assembly.rb +153 -0
  14. data/bin/finishm +143 -0
  15. data/bin/finishm_assembler +55 -0
  16. data/bin/finishm_gap_closer.rb +241 -0
  17. data/bin/kmer_abundance_file_tool.rb +49 -0
  18. data/bin/kmer_pattern_to_assembly.rb +377 -0
  19. data/bin/kmer_profile_finder.rb +92 -0
  20. data/bin/kmers_count_parse.d +52 -0
  21. data/bin/kmers_count_tabulate.d +123 -0
  22. data/bin/kmers_count_tabulate.rb +84 -0
  23. data/bin/pcr_result_parser.rb +108 -0
  24. data/bin/primer_finder.rb +119 -0
  25. data/bin/read_selection_by_kmer.d +174 -0
  26. data/bin/scaffold_by_pattern.rb +119 -0
  27. data/bin/scaffold_connection_possibilities_to_knowns.rb +193 -0
  28. data/bin/scaffold_end_coverages.rb +69 -0
  29. data/bin/trail_validator.rb +84 -0
  30. data/ext/mkrf_conf.rb +56 -0
  31. data/ext/src/Makefile +140 -0
  32. data/ext/src/src/allocArray.c +305 -0
  33. data/ext/src/src/allocArray.h +86 -0
  34. data/ext/src/src/autoOpen.c +107 -0
  35. data/ext/src/src/autoOpen.h +18 -0
  36. data/ext/src/src/binarySequences.c +813 -0
  37. data/ext/src/src/binarySequences.h +125 -0
  38. data/ext/src/src/concatenatedGraph.c +233 -0
  39. data/ext/src/src/concatenatedGraph.h +30 -0
  40. data/ext/src/src/concatenatedPreGraph.c +262 -0
  41. data/ext/src/src/concatenatedPreGraph.h +29 -0
  42. data/ext/src/src/correctedGraph.c +2643 -0
  43. data/ext/src/src/correctedGraph.h +32 -0
  44. data/ext/src/src/dfib.c +509 -0
  45. data/ext/src/src/dfib.h +69 -0
  46. data/ext/src/src/dfibHeap.c +89 -0
  47. data/ext/src/src/dfibHeap.h +39 -0
  48. data/ext/src/src/dfibpriv.h +105 -0
  49. data/ext/src/src/fib.c +628 -0
  50. data/ext/src/src/fib.h +78 -0
  51. data/ext/src/src/fibHeap.c +79 -0
  52. data/ext/src/src/fibHeap.h +41 -0
  53. data/ext/src/src/fibpriv.h +110 -0
  54. data/ext/src/src/globals.h +154 -0
  55. data/ext/src/src/graph.c +3932 -0
  56. data/ext/src/src/graph.h +233 -0
  57. data/ext/src/src/graphReConstruction.c +1472 -0
  58. data/ext/src/src/graphReConstruction.h +30 -0
  59. data/ext/src/src/graphStats.c +2167 -0
  60. data/ext/src/src/graphStats.h +72 -0
  61. data/ext/src/src/graphStructures.h +52 -0
  62. data/ext/src/src/kmer.c +652 -0
  63. data/ext/src/src/kmer.h +73 -0
  64. data/ext/src/src/kmerOccurenceTable.c +236 -0
  65. data/ext/src/src/kmerOccurenceTable.h +44 -0
  66. data/ext/src/src/kseq.h +223 -0
  67. data/ext/src/src/locallyCorrectedGraph.c +557 -0
  68. data/ext/src/src/locallyCorrectedGraph.h +40 -0
  69. data/ext/src/src/passageMarker.c +677 -0
  70. data/ext/src/src/passageMarker.h +137 -0
  71. data/ext/src/src/preGraph.c +1717 -0
  72. data/ext/src/src/preGraph.h +106 -0
  73. data/ext/src/src/preGraphConstruction.c +990 -0
  74. data/ext/src/src/preGraphConstruction.h +26 -0
  75. data/ext/src/src/probe_node_finder.c +84 -0
  76. data/ext/src/src/probe_node_finder.h +6 -0
  77. data/ext/src/src/readCoherentGraph.c +557 -0
  78. data/ext/src/src/readCoherentGraph.h +30 -0
  79. data/ext/src/src/readSet.c +1734 -0
  80. data/ext/src/src/readSet.h +67 -0
  81. data/ext/src/src/readToNode.c +218 -0
  82. data/ext/src/src/readToNode.h +35 -0
  83. data/ext/src/src/recycleBin.c +199 -0
  84. data/ext/src/src/recycleBin.h +58 -0
  85. data/ext/src/src/roadMap.c +342 -0
  86. data/ext/src/src/roadMap.h +65 -0
  87. data/ext/src/src/run.c +318 -0
  88. data/ext/src/src/run.h +52 -0
  89. data/ext/src/src/run2.c +744 -0
  90. data/ext/src/src/runReadToNode.c +29 -0
  91. data/ext/src/src/scaffold.c +1876 -0
  92. data/ext/src/src/scaffold.h +64 -0
  93. data/ext/src/src/shortReadPairs.c +1243 -0
  94. data/ext/src/src/shortReadPairs.h +32 -0
  95. data/ext/src/src/splay.c +259 -0
  96. data/ext/src/src/splay.h +43 -0
  97. data/ext/src/src/splayTable.c +1315 -0
  98. data/ext/src/src/splayTable.h +31 -0
  99. data/ext/src/src/tightString.c +362 -0
  100. data/ext/src/src/tightString.h +82 -0
  101. data/ext/src/src/utility.c +199 -0
  102. data/ext/src/src/utility.h +98 -0
  103. data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
  104. data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
  105. data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
  106. data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
  107. data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
  108. data/ext/src/third-party/zlib-1.2.3/README +125 -0
  109. data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
  110. data/ext/src/third-party/zlib-1.2.3/adler32.o +0 -0
  111. data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
  112. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
  113. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
  114. data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
  115. data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
  116. data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
  117. data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
  118. data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
  119. data/ext/src/third-party/zlib-1.2.3/compress.o +0 -0
  120. data/ext/src/third-party/zlib-1.2.3/configure +459 -0
  121. data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
  122. data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
  123. data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
  124. data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
  125. data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
  126. data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
  127. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
  128. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
  129. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
  130. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
  131. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
  132. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
  133. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
  134. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
  135. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
  136. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
  137. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
  138. data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
  139. data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
  140. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
  141. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
  142. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
  143. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
  144. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
  145. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
  146. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
  147. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
  148. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
  149. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
  150. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
  151. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  152. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  153. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  154. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  155. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  156. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  157. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  158. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  159. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  160. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  161. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  162. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
  163. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
  164. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
  165. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
  166. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
  167. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
  168. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
  169. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
  170. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
  171. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
  172. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
  173. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
  174. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
  175. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
  176. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
  177. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
  178. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
  179. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
  180. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
  181. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
  182. data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
  183. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
  184. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
  185. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
  186. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
  187. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
  188. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
  189. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
  190. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
  191. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
  192. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
  193. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
  194. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
  195. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
  196. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
  197. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
  198. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
  199. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
  200. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
  201. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
  202. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
  203. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
  204. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
  205. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
  206. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
  207. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
  208. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
  209. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
  210. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
  211. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
  212. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
  213. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
  214. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
  215. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
  216. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
  217. data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
  218. data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
  219. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
  220. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
  221. data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
  222. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
  223. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
  224. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
  225. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
  226. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
  227. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
  228. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  229. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
  230. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  231. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
  232. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  233. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
  234. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
  235. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  236. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  237. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
  238. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  239. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  240. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
  241. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  242. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
  243. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
  244. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  245. data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
  246. data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
  247. data/ext/src/third-party/zlib-1.2.3/crc32.o +0 -0
  248. data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
  249. data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
  250. data/ext/src/third-party/zlib-1.2.3/deflate.o +0 -0
  251. data/ext/src/third-party/zlib-1.2.3/example +0 -0
  252. data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
  253. data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
  254. data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
  255. data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
  256. data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
  257. data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
  258. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
  259. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
  260. data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
  261. data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
  262. data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
  263. data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
  264. data/ext/src/third-party/zlib-1.2.3/gzio.o +0 -0
  265. data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
  266. data/ext/src/third-party/zlib-1.2.3/infback.o +0 -0
  267. data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
  268. data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
  269. data/ext/src/third-party/zlib-1.2.3/inffast.o +0 -0
  270. data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
  271. data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
  272. data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
  273. data/ext/src/third-party/zlib-1.2.3/inflate.o +0 -0
  274. data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
  275. data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
  276. data/ext/src/third-party/zlib-1.2.3/inftrees.o +0 -0
  277. data/ext/src/third-party/zlib-1.2.3/libz.a +0 -0
  278. data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
  279. data/ext/src/third-party/zlib-1.2.3/minigzip +0 -0
  280. data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
  281. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
  282. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
  283. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
  284. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
  285. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
  286. data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
  287. data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
  288. data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
  289. data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
  290. data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
  291. data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
  292. data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
  293. data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
  294. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
  295. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
  296. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
  297. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
  298. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
  299. data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
  300. data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
  301. data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
  302. data/ext/src/third-party/zlib-1.2.3/trees.o +0 -0
  303. data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
  304. data/ext/src/third-party/zlib-1.2.3/uncompr.o +0 -0
  305. data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
  306. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
  307. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
  308. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
  309. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
  310. data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
  311. data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
  312. data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
  313. data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
  314. data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
  315. data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
  316. data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
  317. data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
  318. data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
  319. data/ext/src/third-party/zlib-1.2.3/zutil.o +0 -0
  320. data/lib/assembly/a_b_visualiser.rb +169 -0
  321. data/lib/assembly/acyclic_connection_finder.rb +81 -0
  322. data/lib/assembly/all_orfs.rb +615 -0
  323. data/lib/assembly/bad_format_writer.rb +46 -0
  324. data/lib/assembly/bam_probe_read_selector.rb +48 -0
  325. data/lib/assembly/bubbly_assembler.rb +842 -0
  326. data/lib/assembly/c_probe_node_finder.rb +38 -0
  327. data/lib/assembly/connection_interpreter.rb +350 -0
  328. data/lib/assembly/contig_printer.rb +400 -0
  329. data/lib/assembly/coverage_based_graph_filter.rb +68 -0
  330. data/lib/assembly/depth_first_search.rb +63 -0
  331. data/lib/assembly/dijkstra.rb +216 -0
  332. data/lib/assembly/fluffer.rb +253 -0
  333. data/lib/assembly/graph_explorer.rb +85 -0
  334. data/lib/assembly/graph_generator.rb +315 -0
  335. data/lib/assembly/height_finder.rb +355 -0
  336. data/lib/assembly/hybrid_velvet_graph.rb +70 -0
  337. data/lib/assembly/input_genome.rb +182 -0
  338. data/lib/assembly/kmer_coverage_based_path_filter.rb +65 -0
  339. data/lib/assembly/node_finder.rb +171 -0
  340. data/lib/assembly/oriented_node_trail.rb +507 -0
  341. data/lib/assembly/paired_end_assembler.rb +53 -0
  342. data/lib/assembly/paired_end_neighbour_finder.rb +176 -0
  343. data/lib/assembly/probed_graph.rb +105 -0
  344. data/lib/assembly/read_input.rb +79 -0
  345. data/lib/assembly/read_to_node.rb +37 -0
  346. data/lib/assembly/scaffold_breaker.rb +126 -0
  347. data/lib/assembly/sequence_hasher.rb +71 -0
  348. data/lib/assembly/single_coherent_paths_between_nodes.rb +533 -0
  349. data/lib/assembly/single_coherent_wanderer.rb +261 -0
  350. data/lib/assembly/single_ended_assembler.rb +441 -0
  351. data/lib/assembly/velvet_c_binding.rb +54 -0
  352. data/lib/assembly/velvet_graph_sequence_extractor.rb +123 -0
  353. data/lib/external/VERSION +1 -0
  354. data/lib/finishm/assemble.rb +224 -0
  355. data/lib/finishm/explore.rb +217 -0
  356. data/lib/finishm/finisher.rb +303 -0
  357. data/lib/finishm/fluff.rb +122 -0
  358. data/lib/finishm/gapfiller.rb +325 -0
  359. data/lib/finishm/orfs_finder.rb +88 -0
  360. data/lib/finishm/path_counter.rb +90 -0
  361. data/lib/finishm/primers.rb +425 -0
  362. data/lib/finishm/primers_check.rb +176 -0
  363. data/lib/finishm/roundup.rb +344 -0
  364. data/lib/finishm/sequence.rb +142 -0
  365. data/lib/finishm/visualise.rb +430 -0
  366. data/lib/finishm/wander.rb +270 -0
  367. data/lib/kmer_abundance_pattern.rb +79 -0
  368. data/lib/kmer_multi_abundance_file.rb +48 -0
  369. data/lib/oligo_designer.rb +88 -0
  370. data/lib/priner.rb +66 -0
  371. data/spec/acyclic_connection_finder_spec.rb +551 -0
  372. data/spec/all_orfs_spec.rb +443 -0
  373. data/spec/assemble_spec.rb +186 -0
  374. data/spec/bubbly_assembler_spec.rb +707 -0
  375. data/spec/c_node_finder_spec.rb +58 -0
  376. data/spec/connection_interpreter_spec.rb +284 -0
  377. data/spec/contig_printer_spec.rb +291 -0
  378. data/spec/coverage_based_graph_filter_spec.rb +102 -0
  379. data/spec/data/6_3e4e5e6e.1vANME.bam +0 -0
  380. data/spec/data/6_3e4e5e6e.1vANME.bam.bai +0 -0
  381. data/spec/data/acyclic_connection_finder/1/probes.fa +5 -0
  382. data/spec/data/acyclic_connection_finder/1/random1.fa +2 -0
  383. data/spec/data/acyclic_connection_finder/1/random1.sammy.fa.gz +0 -0
  384. data/spec/data/acyclic_connection_finder/1/random2.fa +2 -0
  385. data/spec/data/acyclic_connection_finder/1/random2.sammy.fa.gz +0 -0
  386. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.fa +39 -0
  387. data/spec/data/assembly/1_simple_bubble_uneven_coverage/random3000.slightly_changed.fa +39 -0
  388. data/spec/data/assembly/1_simple_bubble_uneven_coverage/reads_combined.fa.gz +0 -0
  389. data/spec/data/assembly_visualiser/Contig_6_1_to_250.fa.kmers31 +220 -0
  390. data/spec/data/assembly_visualiser/Contig_7_1_to_250.fa.kmers31 +220 -0
  391. data/spec/data/assembly_visualiser/Graph +46 -0
  392. data/spec/data/assembly_visualiser/start_kmers1 +2 -0
  393. data/spec/data/bands.csv +1 -0
  394. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq +0 -0
  395. data/spec/data/c_probe_node_finder/1/CnyUnifiedSeq.names +544 -0
  396. data/spec/data/c_probe_node_finder/1/Graph2 +668 -0
  397. data/spec/data/c_probe_node_finder/1/LastGraph +668 -0
  398. data/spec/data/c_probe_node_finder/1/Log +756 -0
  399. data/spec/data/c_probe_node_finder/1/PreGraph +11 -0
  400. data/spec/data/c_probe_node_finder/1/Roadmaps +2009 -0
  401. data/spec/data/c_probe_node_finder/1/contigs.fa +29 -0
  402. data/spec/data/c_probe_node_finder/1/stats.txt +6 -0
  403. data/spec/data/contig_printer/1/HOWTO_RECREATE +17 -0
  404. data/spec/data/contig_printer/1/contigs.fa +4 -0
  405. data/spec/data/contig_printer/1/seq.fa +2408 -0
  406. data/spec/data/contig_printer/1/seq.fa.svg +153 -0
  407. data/spec/data/contig_printer/1/seq.fa.velvet/Graph2 +2953 -0
  408. data/spec/data/contig_printer/1/seq.fa.velvet/LastGraph +2953 -0
  409. data/spec/data/contig_printer/1/seq.fa.velvet/Log +21 -0
  410. data/spec/data/contig_printer/1/seq.fa.velvet/PreGraph +27 -0
  411. data/spec/data/contig_printer/1/seq.fa.velvet/Roadmaps +5182 -0
  412. data/spec/data/contig_printer/1/seq.fa.velvet/Sequences +3612 -0
  413. data/spec/data/contig_printer/1/seq.fa.velvet/contigs.fa +36 -0
  414. data/spec/data/contig_printer/1/seq.fa.velvet/stats.txt +14 -0
  415. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam +0 -0
  416. data/spec/data/contig_printer/1/seq.faVseq2_1to550.fa.bam.bai +0 -0
  417. data/spec/data/contig_printer/1/seq.node12.fa +4 -0
  418. data/spec/data/contig_printer/1/seq1_1to550.fa +2 -0
  419. data/spec/data/contig_printer/1/seq2_1to550.fa +2 -0
  420. data/spec/data/contig_printer/1/seq2_1to550.fa.fai +1 -0
  421. data/spec/data/explore/1/2seqs.sammy.fa +12004 -0
  422. data/spec/data/explore/1/HOWTO_RECREATE.txt +6 -0
  423. data/spec/data/explore/1/a.fa +2 -0
  424. data/spec/data/explore/1/seq1_and_a.fa +3 -0
  425. data/spec/data/explore/1/seq2.fa +2 -0
  426. data/spec/data/fluff/1/2seqs.sammy.fa +12004 -0
  427. data/spec/data/fluff/1/HOWTO_RECREATE.txt +5 -0
  428. data/spec/data/fluff/1/seq1.fa +2 -0
  429. data/spec/data/fluff/1/seq2.fa +2 -0
  430. data/spec/data/gapfilling/1/reads.fa +171 -0
  431. data/spec/data/gapfilling/1/trail_with_Ns.fa +5 -0
  432. data/spec/data/gapfilling/1/velvetAssembly/Graph2 +130 -0
  433. data/spec/data/gapfilling/1/velvetAssembly/LastGraph +130 -0
  434. data/spec/data/gapfilling/1/velvetAssembly/Log +199 -0
  435. data/spec/data/gapfilling/1/velvetAssembly/PreGraph +7 -0
  436. data/spec/data/gapfilling/1/velvetAssembly/Roadmaps +239 -0
  437. data/spec/data/gapfilling/1/velvetAssembly/Sequences +281 -0
  438. data/spec/data/gapfilling/1/velvetAssembly/contigs.fa +12 -0
  439. data/spec/data/gapfilling/1/velvetAssembly/stats.txt +4 -0
  440. data/spec/data/gapfilling/2/HOWTO_recreate +17 -0
  441. data/spec/data/gapfilling/2/reference.fa +2 -0
  442. data/spec/data/gapfilling/2/reference_part1.fa +4 -0
  443. data/spec/data/gapfilling/2/reference_part2.fa +4 -0
  444. data/spec/data/gapfilling/2/sammy_reads.fa.gz +0 -0
  445. data/spec/data/gapfilling/2/with_gaps.fa +4 -0
  446. data/spec/data/gapfilling/3/HOWTO_recreate +4 -0
  447. data/spec/data/gapfilling/3/reads.fa.gz +0 -0
  448. data/spec/data/gapfilling/3/reference_part1.fa +4 -0
  449. data/spec/data/gapfilling/3/reference_part2.fa +4 -0
  450. data/spec/data/gapfilling/3/with_gaps.fa +4 -0
  451. data/spec/data/gapfilling/4/HOWTO_recreate +1 -0
  452. data/spec/data/gapfilling/4/reads.fa.gz +0 -0
  453. data/spec/data/gapfilling/5/HOWTO_RECREATE +7 -0
  454. data/spec/data/gapfilling/5/answer.fna +2 -0
  455. data/spec/data/gapfilling/5/gappy.fna +2 -0
  456. data/spec/data/gapfilling/5/reads.fa +17961 -0
  457. data/spec/data/gapfilling/5/velvet51_3.5/LastGraph +8337 -0
  458. data/spec/data/gapfilling/5/velvet51_3.5/Sequences +20921 -0
  459. data/spec/data/gapfilling/6/random1.fa +28 -0
  460. data/spec/data/gapfilling/6/random2.fa +28 -0
  461. data/spec/data/gapfilling/6/random_sequence_length_2000 +0 -0
  462. data/spec/data/gapfilling/6/reads.random1.fa.gz +0 -0
  463. data/spec/data/gapfilling/6/reads.random2.fa.gz +0 -0
  464. data/spec/data/gapfilling/6/to_gapfill.fa +22 -0
  465. data/spec/data/kmer_profile_to_assembly/multiple_abundance_file1.csv +2 -0
  466. data/spec/data/kmers_count1.csv +2 -0
  467. data/spec/data/kmers_count2.csv +3 -0
  468. data/spec/data/out +3 -0
  469. data/spec/data/positive_latching_pair.fa +2 -0
  470. data/spec/data/primers.csv +4 -0
  471. data/spec/data/read_selection_by_kmer/blacklist1.txt +1 -0
  472. data/spec/data/read_selection_by_kmer/input.fasta +6 -0
  473. data/spec/data/read_selection_by_kmer/whitelist1.txt +1 -0
  474. data/spec/data/read_selection_by_kmer/whitelist2.txt +2 -0
  475. data/spec/data/read_to_node/1_a_graph/HOWTO_RECREATE.txt +2 -0
  476. data/spec/data/read_to_node/1_a_graph/LastGraph +6695 -0
  477. data/spec/data/read_to_node/1_a_graph/ReadToNode.bin +0 -0
  478. data/spec/data/read_to_node/2_no_read256_or_259/HOWTO_RECREATE.txt +3 -0
  479. data/spec/data/read_to_node/2_no_read256_or_259/LastGraph +6693 -0
  480. data/spec/data/read_to_node/2_no_read256_or_259/ReadToNode.bin +0 -0
  481. data/spec/data/read_to_node/3_no_last_read/LastGraph +6694 -0
  482. data/spec/data/read_to_node/3_no_last_read/ReadToNode.bin +0 -0
  483. data/spec/data/t/details.txt +5 -0
  484. data/spec/data/t/details.txt.srt +5 -0
  485. data/spec/data/t/location.txt +3 -0
  486. data/spec/data/t/location.txt.srt +3 -0
  487. data/spec/data/tweak/1_gap_then_unscaffolded/answer.fa +2 -0
  488. data/spec/data/tweak/1_gap_then_unscaffolded/reads.fa.gz +0 -0
  489. data/spec/data/tweak/1_gap_then_unscaffolded/scaffolds.fa +6 -0
  490. data/spec/data/tweak/2_second_genome/answer2.fa +2 -0
  491. data/spec/data/tweak/2_second_genome/reads.fa.gz +0 -0
  492. data/spec/data/tweak/3_variant/answer.fa +2 -0
  493. data/spec/data/tweak/3_variant/lesser_answer.fa +2 -0
  494. data/spec/data/tweak/3_variant/reads.fa.gz +0 -0
  495. data/spec/data/tweak/3_variant/with_gaps.fa +2 -0
  496. data/spec/data/velvet_test_trails/Assem/Graph +17 -0
  497. data/spec/data/velvet_test_trails/Assem/Graph2 +40 -0
  498. data/spec/data/velvet_test_trails/Assem/LastGraph +40 -0
  499. data/spec/data/velvet_test_trails/Assem/Log +35 -0
  500. data/spec/data/velvet_test_trails/Assem/PreGraph +9 -0
  501. data/spec/data/velvet_test_trails/Assem/Roadmaps +89 -0
  502. data/spec/data/velvet_test_trails/Assem/Sequences +50 -0
  503. data/spec/data/velvet_test_trails/Assem/a.svg +53 -0
  504. data/spec/data/velvet_test_trails/Assem/contigs.fa +15 -0
  505. data/spec/data/velvet_test_trails/Assem/stats.txt +5 -0
  506. data/spec/data/velvet_test_trails/node_fwds.fa +8 -0
  507. data/spec/data/velvet_test_trails/node_seqs.fa +9 -0
  508. data/spec/data/velvet_test_trails/nodes_fwd_rev.fa +16 -0
  509. data/spec/data/velvet_test_trails/read1.fa +2 -0
  510. data/spec/data/velvet_test_trails/reads.fa +50 -0
  511. data/spec/data/velvet_test_trails_reverse/Assem/LastGraph +17 -0
  512. data/spec/data/velvet_test_trails_reverse/Assem/a.svg +53 -0
  513. data/spec/data/velvet_test_trails_reverse/reads_reversed.fa +10 -0
  514. data/spec/data/visualise/1/LastGraph +6695 -0
  515. data/spec/data/visualise/2_paired_end/HOWTO_RECREATE.txt +10 -0
  516. data/spec/data/visualise/2_paired_end/rand1.fa +2 -0
  517. data/spec/data/visualise/2_paired_end/rand2.fa +2 -0
  518. data/spec/data/visualise/2_paired_end/with_gaps.fa +8 -0
  519. data/spec/data/visualise/2_paired_end/with_gaps.read_pairs.fa.gz +0 -0
  520. data/spec/data/wander/1/random1.fa +2 -0
  521. data/spec/data/wander/1/random1.sammy.fa +804 -0
  522. data/spec/depth_first_search_spec.rb +190 -0
  523. data/spec/dijkstra_spec.rb +143 -0
  524. data/spec/explore_spec.rb +29 -0
  525. data/spec/fluffer_spec.rb +155 -0
  526. data/spec/gapfiller_spec.rb +107 -0
  527. data/spec/graph_explorer_spec.rb +475 -0
  528. data/spec/graph_generator_spec.rb +99 -0
  529. data/spec/height_finder_spec.rb +306 -0
  530. data/spec/kmer_abundance_pattern_spec.rb +56 -0
  531. data/spec/kmer_coverage_based_path_filter_spec.rb +73 -0
  532. data/spec/kmer_profile_finder_spec.rb +38 -0
  533. data/spec/kmers_count_tabulate_spec.rb +120 -0
  534. data/spec/oriented_node_trail_spec.rb +221 -0
  535. data/spec/paired_end_neighbours_spec.rb +126 -0
  536. data/spec/paths_between_nodes_spec.rb +349 -0
  537. data/spec/priner_spec.rb +7 -0
  538. data/spec/read_input_spec.rb +23 -0
  539. data/spec/read_selection_by_kmer_spec.rb +166 -0
  540. data/spec/read_to_node_spec.rb +35 -0
  541. data/spec/roundup_spec.rb +366 -0
  542. data/spec/scaffold_breaker_spec.rb +144 -0
  543. data/spec/sequence_spec.rb +43 -0
  544. data/spec/single_coherent_paths_between_nodes_spec.rb +492 -0
  545. data/spec/single_coherent_wanderer_spec.rb +120 -0
  546. data/spec/single_ended_assembler_spec.rb +398 -0
  547. data/spec/spec_helper.rb +310 -0
  548. data/spec/velvet_graph_sequence_extractor_spec.rb +80 -0
  549. data/spec/visualise_spec.rb +105 -0
  550. data/spec/wander_spec.rb +119 -0
  551. data/spec/watch_for_changes.sh +16 -0
  552. data/validation/fasta_compare.rb +72 -0
  553. data/validation/gapfill_simulate_perfect.rb +108 -0
  554. metadata +899 -0
@@ -0,0 +1,72 @@
1
+ /*
2
+ Copyright 2007, 2008 Daniel Zerbino (zerbino@ebi.ac.uk)
3
+
4
+ This file is part of Velvet.
5
+
6
+ Velvet is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ Velvet is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with Velvet; if not, write to the Free Software
18
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+
20
+ */
21
+ #ifndef _GRAPHSTATS_H_
22
+ #define _GRAPHSTATS_H_
23
+
24
+
25
+ void displayGeneralStatistics(Graph * graph, char *filename, ReadSet * reads);
26
+
27
+ void exportLongNodeSequences(char *filename, Graph * graph,
28
+ Coordinate minLength, ReadSet * reads, ShortLength * readLengths, IDnum minCov);
29
+
30
+ Coordinate readCoverage(Node * node);
31
+
32
+ Coordinate n50(Graph * graph);
33
+
34
+ double estimated_cov(Graph * graph, char * directory);
35
+
36
+ Coordinate maxLength(Graph * graph);
37
+
38
+ boolean *removeLowCoverageNodesAndDenounceDubiousReads(Graph * graph,
39
+ double minCov,
40
+ ReadSet * reads,
41
+ boolean export,
42
+ Coordinate minLength,
43
+ char *filename);
44
+
45
+ void removeLowLongCoverageNodesAndDenounceDubiousReads(Graph * graph,
46
+ double minCov,
47
+ ReadSet * reads,
48
+ boolean * dubious,
49
+ boolean export,
50
+ Coordinate minLength,
51
+ char *filename);
52
+
53
+ void removeLowCoverageReferenceNodes(Graph * graph, double minCov, double minLongCov, ReadSet * reads);
54
+
55
+ void exportAMOSContigs(char *filename, Graph * graph,
56
+ Coordinate cutoff_length, ReadSet * reads);
57
+
58
+ IDnum usedReads(Graph * graph, Coordinate minContigLength);
59
+
60
+ Coordinate totalAssemblyLength(Graph * graph);
61
+
62
+ void logFinalStats(Graph * graph, Coordinate minContigKmerLength, char *directory);
63
+
64
+ void exportUnusedReads(Graph* graph, ReadSet * reads, Coordinate minContigKmerLength, char* filename);
65
+
66
+ void exportLongNodeMappings(char *filename, Graph * graph, ReadSet * reads,
67
+ Coordinate minLength, SequencesReader *seqReadInfo);
68
+
69
+ void removeHighCoverageNodes(Graph * graph, double maxCov, boolean export, Coordinate minLength, char * filename);
70
+
71
+ void removeLowArcs(Graph * graph, double cutoff);
72
+ #endif
@@ -0,0 +1,52 @@
1
+ struct arc_st {
2
+ Arc *twinArc; // 64
3
+ Arc *next; // 64
4
+ Arc *previous; // 64
5
+ Arc *nextInLookupTable; // 64
6
+ Node *destination; // 64
7
+ IDnum multiplicity; // 32
8
+ } ATTRIBUTE_PACKED; // 352 Total
9
+
10
+ struct node_st {
11
+ Node *twinNode; // 64
12
+ Arc *arc; // 64
13
+ Descriptor *descriptor; // 64
14
+ PassageMarkerI marker; // 32
15
+ IDnum length; // 32
16
+ #ifndef SINGLE_COV_CAT
17
+ IDnum virtualCoverage[CATEGORIES]; // 32 * 2
18
+ IDnum originalVirtualCoverage[CATEGORIES]; // 32 * 2
19
+ #else
20
+ IDnum virtualCoverage; // 32 * 2
21
+ #endif
22
+ IDnum ID; // 32
23
+ IDnum arcCount; // 32
24
+ boolean status; // 1
25
+ boolean uniqueness; // 1
26
+ } ATTRIBUTE_PACKED; // 418 Total
27
+
28
+ struct shortReadMarker_st {
29
+ IDnum position;
30
+ IDnum readID;
31
+ ShortLength offset;
32
+ } ATTRIBUTE_PACKED;
33
+
34
+ struct gapMarker_st {
35
+ GapMarker *next;
36
+ IDnum position;
37
+ IDnum length;
38
+ } ATTRIBUTE_PACKED;
39
+
40
+ struct graph_st {
41
+ Node **nodes;
42
+ Arc **arcLookupTable;
43
+ ShortReadMarker **nodeReads;
44
+ IDnum *nodeReadCounts;
45
+ GapMarker **gapMarkers;
46
+ Coordinate insertLengths[CATEGORIES + 1];
47
+ double insertLengths_var[CATEGORIES + 1];
48
+ IDnum sequenceCount;
49
+ IDnum nodeCount;
50
+ int wordLength;
51
+ boolean double_stranded;
52
+ };
@@ -0,0 +1,652 @@
1
+ /*
2
+ Copyright 2007, 2008, 2009 Daniel Zerbino (zerbino@ebi.ac.uk)
3
+
4
+ This file is part of Velvet.
5
+
6
+ Velvet is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation; either version 2 of the License, or
9
+ (at your option) any later version.
10
+
11
+ Velvet is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ You should have received a copy of the GNU General Public License
17
+ along with Velvet; if not, write to the Free Software
18
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+
20
+ */
21
+ #include <stdlib.h>
22
+ #include <stdio.h>
23
+
24
+ #include "globals.h"
25
+ #include "kmer.h"
26
+ #include "utility.h"
27
+
28
+ static const uint64_t longLongLeftFilter = (uint64_t) 3 << 62;
29
+ static const uint32_t longLeftFilter = (uint32_t) 3 << 30;
30
+ static const uint16_t intLeftFilter = (uint16_t) 3 << 14;
31
+ static const uint8_t charLeftFilter = (uint8_t) 3 << 6;
32
+
33
+ #if KMER_LONGLONGS
34
+ static uint64_t longLongWordFilter = (uint64_t) ((int64_t) -1);
35
+ #endif
36
+ static uint32_t longWordFilter = (uint32_t) ((int32_t) -1);
37
+ static uint16_t intWordFilter = (uint16_t) ((int16_t) -1);
38
+ static uint8_t charWordFilter = (uint8_t) ((int8_t) -1);
39
+
40
+ #define UNDEFINED 0
41
+ #define CHARS 1
42
+ #define INTS 2
43
+ #define LONGS 3
44
+ #define LONGLONGS 4
45
+ static int kmerFilterIndex = UNDEFINED;
46
+ static int kmerFilterOffset = 0;
47
+ static int kmerFilterLength = 0;
48
+ #if KMER_LONGLONGS
49
+ static int longLongKmerFilterIndex = KMER_LONGLONGS - 1;
50
+ static uint64_t longLongKmerFilter = (uint64_t) ((int64_t) -1);
51
+ #endif
52
+
53
+ static uint64_t keyFilter = 0;
54
+ static int keyFilterIndex = UNDEFINED;
55
+ static int keyFilterOffset = 0;
56
+ static int keyFilterLength = 0;
57
+ #if KMER_LONGLONGS
58
+ static int longLongKeyFilterIndex = KMER_LONGLONGS - 1;
59
+ #endif
60
+
61
+ void resetWordFilter(int wordLength) {
62
+ int kmer_bit_size = wordLength * 2;
63
+
64
+ if (wordLength > MAXKMERLENGTH)
65
+ exitErrorf(EXIT_FAILURE, true, "Word length %i greater than max allowed value (%i).\nRecompile Velvet to deal with this word length.", wordLength, MAXKMERLENGTH);
66
+
67
+ #if KMER_LONGLONGS
68
+ int i;
69
+ for (i = 0; i < KMER_LONGLONGS; i++) {
70
+ if (kmer_bit_size > 64) {
71
+ kmer_bit_size -= 64;
72
+ continue;
73
+ } else if (kmer_bit_size == 64) {
74
+ longLongKmerFilterIndex = i;
75
+ longLongKmerFilter = longLongWordFilter;
76
+ kmerFilterIndex = LONGLONGS;
77
+ kmerFilterOffset = kmer_bit_size - 2;
78
+ kmerFilterLength = kmer_bit_size;
79
+ longWordFilter = 0;
80
+ intWordFilter = 0;
81
+ charWordFilter = 0;
82
+ return;
83
+ } else {
84
+ longLongKmerFilterIndex = i;
85
+ longLongKmerFilter = (((uint64_t) 1) << kmer_bit_size) - 1;
86
+ kmerFilterIndex = LONGLONGS;
87
+ kmerFilterOffset = kmer_bit_size - 2;
88
+ kmerFilterLength = kmer_bit_size;
89
+ longWordFilter = 0;
90
+ intWordFilter = 0;
91
+ charWordFilter = 0;
92
+ return;
93
+ }
94
+ }
95
+ #endif
96
+ #if KMER_LONGS
97
+ if (kmer_bit_size > 32)
98
+ kmer_bit_size -= 32;
99
+ else if (kmer_bit_size == 32) {
100
+ kmerFilterIndex = LONGS;
101
+ kmerFilterOffset = kmer_bit_size - 2;
102
+ kmerFilterLength = kmer_bit_size;
103
+ intWordFilter = 0;
104
+ charWordFilter = 0;
105
+ return;
106
+ } else {
107
+ longWordFilter = (((uint32_t) 1) << kmer_bit_size) - 1;
108
+ kmerFilterIndex = LONGS;
109
+ kmerFilterOffset = kmer_bit_size - 2;
110
+ kmerFilterLength = kmer_bit_size;
111
+ intWordFilter = 0;
112
+ charWordFilter = 0;
113
+ return;
114
+ }
115
+ #endif
116
+ #if KMER_INTS
117
+ if (kmer_bit_size > 16)
118
+ kmer_bit_size -= 16;
119
+ else if (kmer_bit_size == 16) {
120
+ kmerFilterIndex = INTS;
121
+ kmerFilterOffset = kmer_bit_size - 2;
122
+ kmerFilterLength = kmer_bit_size;
123
+ charWordFilter = 0;
124
+ return;
125
+ } else {
126
+ intWordFilter = (((uint16_t) 1) << kmer_bit_size) - 1;
127
+ kmerFilterIndex = INTS;
128
+ kmerFilterOffset = kmer_bit_size - 2;
129
+ kmerFilterLength = kmer_bit_size;
130
+ charWordFilter = 0;
131
+ return;
132
+ }
133
+
134
+ #endif
135
+ #if KMER_CHARS
136
+ if (kmer_bit_size < 8)
137
+ charWordFilter = (((uint8_t) 1) << kmer_bit_size) - 1;
138
+
139
+ kmerFilterIndex = CHARS;
140
+ kmerFilterOffset = kmer_bit_size - 2;
141
+ kmerFilterLength = kmer_bit_size;
142
+ #endif
143
+
144
+ }
145
+
146
+ void resetKeyFilter(int keyLength) {
147
+ int kmer_bit_size = keyLength;
148
+
149
+ if (keyLength > MAXKMERLENGTH)
150
+ exitErrorf(EXIT_FAILURE, true, "Key length %i greater than max allowed value (%i).\nRecompile Velvet to deal with this word length.", keyLength, MAXKMERLENGTH);
151
+
152
+ #if KMER_CHARS
153
+ if (kmerFilterIndex == CHARS) {
154
+ if (kmer_bit_size > kmerFilterLength) {
155
+ kmer_bit_size -= kmerFilterLength;
156
+ } else {
157
+ keyFilterIndex = CHARS;
158
+ keyFilterLength = kmer_bit_size;
159
+ keyFilterOffset = kmerFilterLength - keyFilterLength;
160
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
161
+ return;
162
+ }
163
+ }
164
+ #endif
165
+ #if KMER_INTS
166
+ if (kmerFilterIndex == INTS) {
167
+ if (kmer_bit_size > kmerFilterLength) {
168
+ kmer_bit_size -= kmerFilterLength;
169
+ } else {
170
+ keyFilterIndex = INTS;
171
+ keyFilterLength = kmer_bit_size;
172
+ keyFilterOffset = kmerFilterLength - keyFilterLength;
173
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
174
+ return;
175
+ }
176
+ } else if (intWordFilter) {
177
+ if (kmer_bit_size > 16)
178
+ kmer_bit_size -= 16;
179
+ else {
180
+ keyFilterIndex = INTS;
181
+ keyFilterLength = kmer_bit_size;
182
+ keyFilterOffset = 16 - keyFilterLength;
183
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
184
+ return;
185
+ }
186
+ }
187
+ #endif
188
+ #if KMER_LONGS
189
+ if (kmerFilterIndex == LONGS) {
190
+ if (kmer_bit_size > kmerFilterLength) {
191
+ kmer_bit_size -= kmerFilterLength;
192
+ } else {
193
+ keyFilterIndex = LONGS;
194
+ keyFilterLength = kmer_bit_size;
195
+ keyFilterOffset = kmerFilterLength - keyFilterLength;
196
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
197
+ return;
198
+ }
199
+ } else if (longWordFilter) {
200
+ if (kmer_bit_size > 32)
201
+ kmer_bit_size -= 32;
202
+ else {
203
+ keyFilterIndex = LONGS;
204
+ keyFilterLength = kmer_bit_size;
205
+ keyFilterOffset = 32 - keyFilterLength;
206
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
207
+ return;
208
+ }
209
+ }
210
+ #endif
211
+ #if KMER_LONGLONGS
212
+ if (kmerFilterIndex == LONGLONGS) {
213
+ if (kmer_bit_size > kmerFilterLength) {
214
+ kmer_bit_size -= kmerFilterLength;
215
+ } else {
216
+ keyFilterIndex = LONGLONGS;
217
+ longLongKeyFilterIndex = longLongKmerFilterIndex;
218
+ keyFilterLength = kmer_bit_size;
219
+ keyFilterOffset = kmerFilterLength - keyFilterLength;
220
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
221
+ return;
222
+ }
223
+ } else {
224
+ if (kmer_bit_size > 64)
225
+ abort();
226
+ else {
227
+ keyFilterIndex = LONGLONGS;
228
+ longLongKeyFilterIndex = longLongKmerFilterIndex;
229
+ keyFilterLength = kmer_bit_size;
230
+ keyFilterOffset = 64 - keyFilterLength;
231
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
232
+ return;
233
+ }
234
+ }
235
+
236
+ if (kmer_bit_size > 64)
237
+ abort();
238
+ else {
239
+ keyFilterIndex = LONGLONGS;
240
+ longLongKeyFilterIndex = longLongKmerFilterIndex - 1;
241
+ keyFilterLength = kmer_bit_size;
242
+ keyFilterOffset = 64 - keyFilterLength;
243
+ keyFilter = ((((uint64_t) 1) << keyFilterLength) - 1) << keyFilterOffset;
244
+ return;
245
+ }
246
+ #endif
247
+
248
+ }
249
+
250
+ static void shiftRight(Kmer * kmer) {
251
+ uint64_t leftBits = 0;
252
+ uint64_t rightBits;
253
+
254
+ #if KMER_CHARS
255
+
256
+ #if KMER_INTS | KMER_LONGS | KMER_LONGLONGS
257
+ rightBits = kmer->chars & 3;
258
+ #endif
259
+
260
+ kmer->chars >>= 2;
261
+ kmer->chars += (uint8_t) leftBits;
262
+
263
+ #if KMER_INTS | KMER_LONGS | KMER_LONGLONGS
264
+ leftBits = rightBits;
265
+ #endif
266
+ #endif
267
+
268
+ #if KMER_INTS
269
+
270
+ #if KMER_LONGS | KMER_LONGLONGS
271
+ rightBits = kmer->ints & 3;
272
+ #endif
273
+
274
+ leftBits <<= 14;
275
+ kmer->ints >>= 2;
276
+ kmer->ints += (uint16_t) leftBits;
277
+
278
+ #if KMER_LONGS | KMER_LONGLONGS
279
+ leftBits = rightBits;
280
+ #endif
281
+ #endif
282
+
283
+ #if KMER_LONGS
284
+
285
+ #if KMER_LONGLONGS
286
+ rightBits = kmer->longs & 3;
287
+ #endif
288
+
289
+ leftBits <<= 30;
290
+ kmer->longs >>= 2;
291
+ kmer->longs += (uint32_t) leftBits;
292
+
293
+ #if KMER_LONGLONGS
294
+ leftBits = rightBits;
295
+ #endif
296
+ #endif
297
+
298
+ #if KMER_LONGLONGS
299
+ int i;
300
+ for (i = KMER_LONGLONGS - 1; i >= 0; i--) {
301
+ rightBits = kmer->longlongs[i] & 3;
302
+ leftBits <<= 62;
303
+ kmer->longlongs[i] >>= 2;
304
+ kmer->longlongs[i] += leftBits;
305
+ leftBits = rightBits;
306
+ }
307
+ #endif
308
+ }
309
+
310
+ void copyKmers(Kmer* k1, Kmer* k2) {
311
+
312
+ #if KMER_LONGLONGS
313
+ int i;
314
+ for (i = 0; i < KMER_LONGLONGS; i++)
315
+ k1->longlongs[i] = k2->longlongs[i];
316
+ #endif
317
+ #if KMER_LONGS
318
+ k1->longs = k2->longs;
319
+ #endif
320
+ #if KMER_INTS
321
+ k1->ints = k2->ints;
322
+ #endif
323
+ #if KMER_CHARS
324
+ k1->chars = k2->chars;
325
+ #endif
326
+ }
327
+
328
+ int compareKmers(Kmer* k1, Kmer* k2) {
329
+ #if KMER_LONGLONGS
330
+ int i;
331
+ #endif
332
+
333
+ #if KMER_CHARS
334
+ if (k1->chars == k2->chars)
335
+ ;
336
+ else if (k1->chars > k2->chars)
337
+ return 1;
338
+ else
339
+ return -1;
340
+ #endif
341
+ #if KMER_INTS
342
+ if (k1->ints == k2->ints)
343
+ ;
344
+ else if (k1->ints > k2->ints)
345
+ return 1;
346
+ else
347
+ return -1;
348
+ #endif
349
+ #if KMER_LONGS
350
+ if (k1->longs == k2->longs)
351
+ ;
352
+ else if (k1->longs > k2->longs)
353
+ return 1;
354
+ else
355
+ return -1;
356
+ #endif
357
+ #if KMER_LONGLONGS
358
+ for (i = KMER_LONGLONGS - 1; i >= 0; i--) {
359
+ if (k1->longlongs[i] == k2->longlongs[i])
360
+ continue;
361
+ else if (k1->longlongs[i] > k2->longlongs[i])
362
+ return 1;
363
+ else
364
+ return -1;
365
+ }
366
+ #endif
367
+
368
+ return 0;
369
+ }
370
+
371
+ void clearKmer(Kmer * kmer) {
372
+ #if KMER_LONGLONGS
373
+ int i;
374
+ for (i = 0; i < KMER_LONGLONGS; i++)
375
+ kmer->longlongs[i] = 0;
376
+ #endif
377
+ #if KMER_LONGS
378
+ kmer->longs = 0;
379
+ #endif
380
+ #if KMER_INTS
381
+ kmer->ints = 0;
382
+ #endif
383
+ #if KMER_CHARS
384
+ kmer->chars = 0;
385
+ #endif
386
+ }
387
+
388
+ void printKmer(Kmer * kmer) {
389
+
390
+ #if KMER_CHARS
391
+ velvetLog("%hx\t", kmer->chars);
392
+ #endif
393
+ #if KMER_INTS
394
+ velvetLog("%x\t", kmer->ints);
395
+ #endif
396
+ #if KMER_LONGS
397
+ velvetLog("%x\t", kmer->longs);
398
+ #endif
399
+ #if KMER_LONGLONGS
400
+ int i;
401
+ for (i = KMER_LONGLONGS - 1; i >= 0; i--)
402
+ velvetLog("%llx\t", (long long) kmer->longlongs[i]);
403
+ #endif
404
+ velvetLog("\n");
405
+ }
406
+
407
+ void pushNucleotide(Kmer * kmer, Nucleotide nucleotide) {
408
+
409
+ #if KMER_LONGLONGS
410
+ uint64_t * ptr;
411
+ int i;
412
+ #endif
413
+ #if KMER_LONGLONGS > 1 | KMER_LONGS | KMER_INTS | KMER_CHARS
414
+ uint64_t leftBits;
415
+ #endif
416
+ uint64_t rightBits = 0;
417
+
418
+ #if KMER_LONGLONGS
419
+ ptr = kmer->longlongs;
420
+
421
+ #if KMER_LONGLONGS > 1
422
+ for (i = 0; i < longLongKmerFilterIndex; i++) {
423
+ leftBits = (*ptr & longLongLeftFilter);
424
+ leftBits >>= 62;
425
+ *ptr <<= 2;
426
+ *ptr += rightBits;
427
+ *ptr &= longLongWordFilter;
428
+ rightBits = leftBits;
429
+ ptr++;
430
+ }
431
+ #endif
432
+
433
+ #if KMER_LONGS | KMER_INTS | KMER_CHARS
434
+ leftBits = (*ptr & longLongLeftFilter);
435
+ leftBits >>= 62;
436
+ #endif
437
+
438
+ *ptr <<= 2;
439
+ *ptr += rightBits;
440
+ *ptr &= longLongKmerFilter;
441
+
442
+ #if KMER_LONGS | KMER_INTS | KMER_CHARS
443
+ rightBits = leftBits;
444
+ #endif
445
+ #endif
446
+
447
+ #if KMER_LONGS
448
+
449
+ #if KMER_INTS | KMER_CHARS
450
+ leftBits = kmer->longs & longLeftFilter;
451
+ leftBits >>= 30;
452
+ #endif
453
+ kmer->longs <<= 2;
454
+ kmer->longs += rightBits;
455
+ kmer->longs &= longWordFilter;
456
+
457
+ #if KMER_INTS | KMER_CHARS
458
+ rightBits = leftBits;
459
+ #endif
460
+
461
+ #endif
462
+
463
+ #if KMER_INTS
464
+
465
+ #if KMER_CHARS
466
+ leftBits = kmer->ints & intLeftFilter;
467
+ leftBits >>= 14;
468
+ #endif
469
+ kmer->ints <<= 2;
470
+ kmer->ints += rightBits;
471
+ kmer->ints &= intWordFilter;
472
+
473
+ #if KMER_CHARS
474
+ rightBits = leftBits;
475
+ #endif
476
+
477
+ #endif
478
+
479
+ #if KMER_CHARS
480
+ kmer->chars <<= 2;
481
+ kmer->chars += rightBits;
482
+ kmer->chars &= charWordFilter;
483
+ #endif
484
+
485
+ #if KMER_LONGLONGS
486
+ kmer->longlongs[0] += nucleotide;
487
+ if (kmer->longlongs[0] >= nucleotide)
488
+ return;
489
+
490
+ for (i = 1; i < KMER_LONGLONGS; i++)
491
+ if (++kmer->longlongs[i])
492
+ return;
493
+ #if KMER_LONGS
494
+ if (++kmer->longs)
495
+ return;
496
+ #endif
497
+ #if KMER_INTS
498
+ if (++kmer->ints)
499
+ return;
500
+ #endif
501
+ #if KMER_CHARS
502
+ ++kmer->chars;
503
+ #endif
504
+
505
+ #else
506
+
507
+ #if KMER_LONGS
508
+ kmer->longs += nucleotide;
509
+ if (kmer->longs >= nucleotide)
510
+ return;
511
+ #if KMER_INTS
512
+ if (++kmer->ints)
513
+ return;
514
+ #endif
515
+ #if KMER_CHARS
516
+ ++kmer->chars;
517
+ #endif
518
+
519
+ #else
520
+
521
+ #if KMER_INTS
522
+ kmer->ints += nucleotide;
523
+ if (kmer->ints >= nucleotide)
524
+ return;
525
+ #if KMER_CHARS
526
+ ++kmer->chars;
527
+ #endif
528
+
529
+ #else
530
+
531
+ #if KMER_CHARS
532
+ kmer->chars += nucleotide;
533
+ #endif
534
+
535
+ #endif
536
+ #endif
537
+ #endif
538
+ }
539
+
540
+ Nucleotide popNucleotide(Kmer * kmer) {
541
+ Nucleotide nucl;
542
+
543
+ #if KMER_LONGLONGS
544
+ nucl = kmer->longlongs[0] & 3;
545
+ #elif KMER_LONGS
546
+ nucl = kmer->longs & 3;
547
+ #elif KMER_INTS
548
+ nucl = kmer->ints & 3;
549
+ #elif KMER_CHARS
550
+ nucl = kmer->chars & 3;
551
+ #endif
552
+
553
+ shiftRight(kmer);
554
+ return nucl;
555
+ }
556
+
557
+ void reversePushNucleotide(Kmer * kmer, Nucleotide nucleotide) {
558
+ uint64_t templongLong = nucleotide;
559
+
560
+ shiftRight(kmer);
561
+
562
+ switch(kmerFilterIndex) {
563
+ case UNDEFINED:
564
+ abort();
565
+ #if KMER_LONGLONGS
566
+ case LONGLONGS:
567
+ kmer->longlongs[longLongKmerFilterIndex] += templongLong << kmerFilterOffset;
568
+ return;
569
+ #endif
570
+ #if KMER_LONGS
571
+ case LONGS:
572
+ kmer->longs += templongLong << kmerFilterOffset;
573
+ return;
574
+ #endif
575
+ #if KMER_INTS
576
+ case INTS:
577
+ kmer->ints += templongLong << kmerFilterOffset;
578
+ return;
579
+ #endif
580
+ #if KMER_CHARS
581
+ case CHARS:
582
+ kmer->chars += templongLong << kmerFilterOffset;
583
+ return;
584
+ #endif
585
+ }
586
+
587
+ exitErrorf(EXIT_FAILURE, true, "Anomaly in k-mer filering");
588
+ }
589
+
590
+ KmerKey getKmerKey(Kmer * kmer) {
591
+ KmerKey key = 0;
592
+
593
+ #if KMER_CHARS
594
+ if (keyFilterIndex == CHARS) {
595
+ key = kmer->chars & keyFilter;
596
+ key >>= keyFilterOffset;
597
+ return key;
598
+ }
599
+ #endif
600
+
601
+ #if KMER_INTS
602
+ if (keyFilterIndex == INTS) {
603
+ #if KMER_CHARS
604
+ key += kmer->chars;
605
+ #endif
606
+ key <<= keyFilterLength;
607
+ key += (kmer->ints & keyFilter) >> keyFilterOffset;
608
+ return key;
609
+ }
610
+ #endif
611
+
612
+ #if KMER_LONGS
613
+ if (keyFilterIndex == LONGS) {
614
+ #if KMER_CHARS
615
+ key += kmer->chars;
616
+ #endif
617
+ #if KMER_INTS
618
+ key <<= 16;
619
+ key += kmer->ints;
620
+ #endif
621
+ key <<= keyFilterLength;
622
+ key += (kmer->longs & keyFilter) >> keyFilterOffset;
623
+ return key;
624
+ }
625
+ #endif
626
+
627
+ #if KMER_LONGLONGS
628
+ if (keyFilterIndex == LONGLONGS) {
629
+ #if KMER_CHARS
630
+ key += kmer->chars;
631
+ #endif
632
+ #if KMER_INTS
633
+ key <<= 16;
634
+ key += kmer->ints;
635
+ #endif
636
+ #if KMER_LONGS
637
+ key <<= 32;
638
+ key += kmer->longs;
639
+ #endif
640
+ if (longLongKeyFilterIndex != longLongKmerFilterIndex) {
641
+ key <<= kmerFilterLength;
642
+ key += kmer->longlongs[longLongKmerFilterIndex];
643
+ }
644
+ key <<= keyFilterLength;
645
+ key += (kmer->longlongs[longLongKeyFilterIndex] & keyFilter) >> keyFilterOffset;
646
+
647
+ return key;
648
+ }
649
+ #endif
650
+ abort();
651
+ return 0;
652
+ }