bio-velvet_underground 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +13 -0
  5. data/Gemfile +19 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +53 -0
  8. data/Rakefile +51 -0
  9. data/VERSION +1 -0
  10. data/ext/bioruby.patch +60 -0
  11. data/ext/mkrf_conf.rb +50 -0
  12. data/ext/src/Makefile +125 -0
  13. data/ext/src/src/allocArray.c +305 -0
  14. data/ext/src/src/allocArray.h +86 -0
  15. data/ext/src/src/autoOpen.c +107 -0
  16. data/ext/src/src/autoOpen.h +18 -0
  17. data/ext/src/src/binarySequences.c +813 -0
  18. data/ext/src/src/binarySequences.h +125 -0
  19. data/ext/src/src/concatenatedGraph.c +233 -0
  20. data/ext/src/src/concatenatedGraph.h +30 -0
  21. data/ext/src/src/concatenatedPreGraph.c +262 -0
  22. data/ext/src/src/concatenatedPreGraph.h +29 -0
  23. data/ext/src/src/correctedGraph.c +2642 -0
  24. data/ext/src/src/correctedGraph.h +32 -0
  25. data/ext/src/src/dfib.c +509 -0
  26. data/ext/src/src/dfib.h +69 -0
  27. data/ext/src/src/dfibHeap.c +89 -0
  28. data/ext/src/src/dfibHeap.h +39 -0
  29. data/ext/src/src/dfibpriv.h +105 -0
  30. data/ext/src/src/fib.c +628 -0
  31. data/ext/src/src/fib.h +78 -0
  32. data/ext/src/src/fibHeap.c +79 -0
  33. data/ext/src/src/fibHeap.h +41 -0
  34. data/ext/src/src/fibpriv.h +110 -0
  35. data/ext/src/src/globals.h +153 -0
  36. data/ext/src/src/graph.c +3983 -0
  37. data/ext/src/src/graph.h +233 -0
  38. data/ext/src/src/graphReConstruction.c +1472 -0
  39. data/ext/src/src/graphReConstruction.h +30 -0
  40. data/ext/src/src/graphStats.c +2167 -0
  41. data/ext/src/src/graphStats.h +72 -0
  42. data/ext/src/src/kmer.c +652 -0
  43. data/ext/src/src/kmer.h +73 -0
  44. data/ext/src/src/kmerOccurenceTable.c +236 -0
  45. data/ext/src/src/kmerOccurenceTable.h +44 -0
  46. data/ext/src/src/kseq.h +223 -0
  47. data/ext/src/src/locallyCorrectedGraph.c +557 -0
  48. data/ext/src/src/locallyCorrectedGraph.h +40 -0
  49. data/ext/src/src/passageMarker.c +677 -0
  50. data/ext/src/src/passageMarker.h +137 -0
  51. data/ext/src/src/preGraph.c +1717 -0
  52. data/ext/src/src/preGraph.h +106 -0
  53. data/ext/src/src/preGraphConstruction.c +990 -0
  54. data/ext/src/src/preGraphConstruction.h +26 -0
  55. data/ext/src/src/readCoherentGraph.c +557 -0
  56. data/ext/src/src/readCoherentGraph.h +30 -0
  57. data/ext/src/src/readSet.c +1734 -0
  58. data/ext/src/src/readSet.h +67 -0
  59. data/ext/src/src/recycleBin.c +199 -0
  60. data/ext/src/src/recycleBin.h +58 -0
  61. data/ext/src/src/roadMap.c +342 -0
  62. data/ext/src/src/roadMap.h +65 -0
  63. data/ext/src/src/run.c +318 -0
  64. data/ext/src/src/run.h +52 -0
  65. data/ext/src/src/run2.c +712 -0
  66. data/ext/src/src/scaffold.c +1876 -0
  67. data/ext/src/src/scaffold.h +64 -0
  68. data/ext/src/src/shortReadPairs.c +1243 -0
  69. data/ext/src/src/shortReadPairs.h +32 -0
  70. data/ext/src/src/splay.c +259 -0
  71. data/ext/src/src/splay.h +43 -0
  72. data/ext/src/src/splayTable.c +1315 -0
  73. data/ext/src/src/splayTable.h +31 -0
  74. data/ext/src/src/tightString.c +362 -0
  75. data/ext/src/src/tightString.h +82 -0
  76. data/ext/src/src/utility.c +199 -0
  77. data/ext/src/src/utility.h +98 -0
  78. data/ext/src/third-party/zlib-1.2.3/ChangeLog +855 -0
  79. data/ext/src/third-party/zlib-1.2.3/FAQ +339 -0
  80. data/ext/src/third-party/zlib-1.2.3/INDEX +51 -0
  81. data/ext/src/third-party/zlib-1.2.3/Makefile +154 -0
  82. data/ext/src/third-party/zlib-1.2.3/Makefile.in +154 -0
  83. data/ext/src/third-party/zlib-1.2.3/README +125 -0
  84. data/ext/src/third-party/zlib-1.2.3/adler32.c +149 -0
  85. data/ext/src/third-party/zlib-1.2.3/algorithm.txt +209 -0
  86. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.pup +66 -0
  87. data/ext/src/third-party/zlib-1.2.3/amiga/Makefile.sas +65 -0
  88. data/ext/src/third-party/zlib-1.2.3/as400/bndsrc +132 -0
  89. data/ext/src/third-party/zlib-1.2.3/as400/compile.clp +123 -0
  90. data/ext/src/third-party/zlib-1.2.3/as400/readme.txt +111 -0
  91. data/ext/src/third-party/zlib-1.2.3/as400/zlib.inc +331 -0
  92. data/ext/src/third-party/zlib-1.2.3/compress.c +79 -0
  93. data/ext/src/third-party/zlib-1.2.3/configure +459 -0
  94. data/ext/src/third-party/zlib-1.2.3/contrib/README.contrib +71 -0
  95. data/ext/src/third-party/zlib-1.2.3/contrib/ada/buffer_demo.adb +106 -0
  96. data/ext/src/third-party/zlib-1.2.3/contrib/ada/mtest.adb +156 -0
  97. data/ext/src/third-party/zlib-1.2.3/contrib/ada/read.adb +156 -0
  98. data/ext/src/third-party/zlib-1.2.3/contrib/ada/readme.txt +65 -0
  99. data/ext/src/third-party/zlib-1.2.3/contrib/ada/test.adb +463 -0
  100. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.adb +225 -0
  101. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-streams.ads +114 -0
  102. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.adb +141 -0
  103. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib-thin.ads +450 -0
  104. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.adb +701 -0
  105. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.ads +328 -0
  106. data/ext/src/third-party/zlib-1.2.3/contrib/ada/zlib.gpr +20 -0
  107. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/README.586 +43 -0
  108. data/ext/src/third-party/zlib-1.2.3/contrib/asm586/match.S +364 -0
  109. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/README.686 +34 -0
  110. data/ext/src/third-party/zlib-1.2.3/contrib/asm686/match.S +329 -0
  111. data/ext/src/third-party/zlib-1.2.3/contrib/blast/Makefile +8 -0
  112. data/ext/src/third-party/zlib-1.2.3/contrib/blast/README +4 -0
  113. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.c +444 -0
  114. data/ext/src/third-party/zlib-1.2.3/contrib/blast/blast.h +71 -0
  115. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.pk +0 -0
  116. data/ext/src/third-party/zlib-1.2.3/contrib/blast/test.txt +1 -0
  117. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLib.pas +557 -0
  118. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/ZLibConst.pas +11 -0
  119. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/readme.txt +76 -0
  120. data/ext/src/third-party/zlib-1.2.3/contrib/delphi/zlibd32.mak +93 -0
  121. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.build +33 -0
  122. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.chm +0 -0
  123. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib.sln +21 -0
  124. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs +58 -0
  125. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs +202 -0
  126. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CircularBuffer.cs +83 -0
  127. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/CodecBase.cs +198 -0
  128. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Deflater.cs +106 -0
  129. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.cs +288 -0
  130. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/DotZLib.csproj +141 -0
  131. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/GZipStream.cs +301 -0
  132. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/Inflater.cs +105 -0
  133. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/DotZLib/UnitTests.cs +274 -0
  134. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/LICENSE_1_0.txt +23 -0
  135. data/ext/src/third-party/zlib-1.2.3/contrib/dotzlib/readme.txt +58 -0
  136. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/README +1 -0
  137. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.c +608 -0
  138. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/infback9.h +37 -0
  139. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inffix9.h +107 -0
  140. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inflate9.h +47 -0
  141. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.c +323 -0
  142. data/ext/src/third-party/zlib-1.2.3/contrib/infback9/inftree9.h +55 -0
  143. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffas86.c +1157 -0
  144. data/ext/src/third-party/zlib-1.2.3/contrib/inflate86/inffast.S +1368 -0
  145. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/test.cpp +24 -0
  146. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.cpp +329 -0
  147. data/ext/src/third-party/zlib-1.2.3/contrib/iostream/zfstream.h +128 -0
  148. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream.h +307 -0
  149. data/ext/src/third-party/zlib-1.2.3/contrib/iostream2/zstream_test.cpp +25 -0
  150. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/README +35 -0
  151. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/TODO +17 -0
  152. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/test.cc +50 -0
  153. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.cc +479 -0
  154. data/ext/src/third-party/zlib-1.2.3/contrib/iostream3/zfstream.h +466 -0
  155. data/ext/src/third-party/zlib-1.2.3/contrib/masm686/match.asm +413 -0
  156. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/bld_ml64.bat +2 -0
  157. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.asm +513 -0
  158. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/gvmat64.obj +0 -0
  159. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffas8664.c +186 -0
  160. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.asm +392 -0
  161. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/inffasx64.obj +0 -0
  162. data/ext/src/third-party/zlib-1.2.3/contrib/masmx64/readme.txt +28 -0
  163. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/bld_ml32.bat +2 -0
  164. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.asm +972 -0
  165. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32.obj +0 -0
  166. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/gvmat32c.c +62 -0
  167. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.asm +1083 -0
  168. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/inffas32.obj +0 -0
  169. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/mkasm.bat +3 -0
  170. data/ext/src/third-party/zlib-1.2.3/contrib/masmx86/readme.txt +21 -0
  171. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ChangeLogUnzip +67 -0
  172. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/Makefile +25 -0
  173. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/crypt.h +132 -0
  174. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.c +177 -0
  175. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/ioapi.h +75 -0
  176. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.c +270 -0
  177. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/iowin32.h +21 -0
  178. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/miniunz.c +585 -0
  179. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/minizip.c +420 -0
  180. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.c +281 -0
  181. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/mztools.h +31 -0
  182. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.c +1598 -0
  183. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/unzip.h +354 -0
  184. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.c +1219 -0
  185. data/ext/src/third-party/zlib-1.2.3/contrib/minizip/zip.h +235 -0
  186. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/example.pas +599 -0
  187. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/readme.txt +76 -0
  188. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibd32.mak +93 -0
  189. data/ext/src/third-party/zlib-1.2.3/contrib/pascal/zlibpas.pas +236 -0
  190. data/ext/src/third-party/zlib-1.2.3/contrib/puff/Makefile +8 -0
  191. data/ext/src/third-party/zlib-1.2.3/contrib/puff/README +63 -0
  192. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.c +837 -0
  193. data/ext/src/third-party/zlib-1.2.3/contrib/puff/puff.h +31 -0
  194. data/ext/src/third-party/zlib-1.2.3/contrib/puff/zeros.raw +0 -0
  195. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.c +275 -0
  196. data/ext/src/third-party/zlib-1.2.3/contrib/testzlib/testzlib.txt +10 -0
  197. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile +14 -0
  198. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/Makefile.msc +17 -0
  199. data/ext/src/third-party/zlib-1.2.3/contrib/untgz/untgz.c +674 -0
  200. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/readme.txt +73 -0
  201. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/miniunz.vcproj +126 -0
  202. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/minizip.vcproj +126 -0
  203. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/testzlib.vcproj +126 -0
  204. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlib.rc +32 -0
  205. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibstat.vcproj +246 -0
  206. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.def +92 -0
  207. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.sln +78 -0
  208. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc7/zlibvc.vcproj +445 -0
  209. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/miniunz.vcproj +566 -0
  210. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/minizip.vcproj +563 -0
  211. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlib.vcproj +948 -0
  212. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/testzlibdll.vcproj +567 -0
  213. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlib.rc +32 -0
  214. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibstat.vcproj +870 -0
  215. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.def +92 -0
  216. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.sln +144 -0
  217. data/ext/src/third-party/zlib-1.2.3/contrib/vstudio/vc8/zlibvc.vcproj +1219 -0
  218. data/ext/src/third-party/zlib-1.2.3/crc32.c +423 -0
  219. data/ext/src/third-party/zlib-1.2.3/crc32.h +441 -0
  220. data/ext/src/third-party/zlib-1.2.3/deflate.c +1736 -0
  221. data/ext/src/third-party/zlib-1.2.3/deflate.h +331 -0
  222. data/ext/src/third-party/zlib-1.2.3/example.c +565 -0
  223. data/ext/src/third-party/zlib-1.2.3/examples/README.examples +42 -0
  224. data/ext/src/third-party/zlib-1.2.3/examples/fitblk.c +233 -0
  225. data/ext/src/third-party/zlib-1.2.3/examples/gun.c +693 -0
  226. data/ext/src/third-party/zlib-1.2.3/examples/gzappend.c +500 -0
  227. data/ext/src/third-party/zlib-1.2.3/examples/gzjoin.c +448 -0
  228. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.c +413 -0
  229. data/ext/src/third-party/zlib-1.2.3/examples/gzlog.h +58 -0
  230. data/ext/src/third-party/zlib-1.2.3/examples/zlib_how.html +523 -0
  231. data/ext/src/third-party/zlib-1.2.3/examples/zpipe.c +191 -0
  232. data/ext/src/third-party/zlib-1.2.3/examples/zran.c +404 -0
  233. data/ext/src/third-party/zlib-1.2.3/gzio.c +1026 -0
  234. data/ext/src/third-party/zlib-1.2.3/infback.c +623 -0
  235. data/ext/src/third-party/zlib-1.2.3/inffast.c +318 -0
  236. data/ext/src/third-party/zlib-1.2.3/inffast.h +11 -0
  237. data/ext/src/third-party/zlib-1.2.3/inffixed.h +94 -0
  238. data/ext/src/third-party/zlib-1.2.3/inflate.c +1368 -0
  239. data/ext/src/third-party/zlib-1.2.3/inflate.h +115 -0
  240. data/ext/src/third-party/zlib-1.2.3/inftrees.c +329 -0
  241. data/ext/src/third-party/zlib-1.2.3/inftrees.h +55 -0
  242. data/ext/src/third-party/zlib-1.2.3/make_vms.com +461 -0
  243. data/ext/src/third-party/zlib-1.2.3/minigzip.c +322 -0
  244. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.bor +109 -0
  245. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.dj2 +104 -0
  246. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.emx +69 -0
  247. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.msc +106 -0
  248. data/ext/src/third-party/zlib-1.2.3/msdos/Makefile.tc +94 -0
  249. data/ext/src/third-party/zlib-1.2.3/old/Makefile.riscos +151 -0
  250. data/ext/src/third-party/zlib-1.2.3/old/README +3 -0
  251. data/ext/src/third-party/zlib-1.2.3/old/descrip.mms +48 -0
  252. data/ext/src/third-party/zlib-1.2.3/old/os2/Makefile.os2 +136 -0
  253. data/ext/src/third-party/zlib-1.2.3/old/os2/zlib.def +51 -0
  254. data/ext/src/third-party/zlib-1.2.3/old/visual-basic.txt +160 -0
  255. data/ext/src/third-party/zlib-1.2.3/old/zlib.html +971 -0
  256. data/ext/src/third-party/zlib-1.2.3/projects/README.projects +41 -0
  257. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/README.txt +73 -0
  258. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/example.dsp +278 -0
  259. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/minigzip.dsp +278 -0
  260. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsp +609 -0
  261. data/ext/src/third-party/zlib-1.2.3/projects/visualc6/zlib.dsw +59 -0
  262. data/ext/src/third-party/zlib-1.2.3/qnx/package.qpg +141 -0
  263. data/ext/src/third-party/zlib-1.2.3/trees.c +1219 -0
  264. data/ext/src/third-party/zlib-1.2.3/trees.h +128 -0
  265. data/ext/src/third-party/zlib-1.2.3/uncompr.c +61 -0
  266. data/ext/src/third-party/zlib-1.2.3/win32/DLL_FAQ.txt +397 -0
  267. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.bor +107 -0
  268. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.emx +69 -0
  269. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.gcc +141 -0
  270. data/ext/src/third-party/zlib-1.2.3/win32/Makefile.msc +126 -0
  271. data/ext/src/third-party/zlib-1.2.3/win32/VisualC.txt +3 -0
  272. data/ext/src/third-party/zlib-1.2.3/win32/zlib.def +60 -0
  273. data/ext/src/third-party/zlib-1.2.3/win32/zlib1.rc +39 -0
  274. data/ext/src/third-party/zlib-1.2.3/zconf.h +332 -0
  275. data/ext/src/third-party/zlib-1.2.3/zconf.in.h +332 -0
  276. data/ext/src/third-party/zlib-1.2.3/zlib.3 +159 -0
  277. data/ext/src/third-party/zlib-1.2.3/zlib.h +1357 -0
  278. data/ext/src/third-party/zlib-1.2.3/zutil.c +318 -0
  279. data/ext/src/third-party/zlib-1.2.3/zutil.h +269 -0
  280. data/lib/bio-velvet_underground.rb +12 -0
  281. data/lib/bio-velvet_underground/external/VERSION +1 -0
  282. data/lib/bio-velvet_underground/velvet_underground.rb +72 -0
  283. data/spec/binary_sequence_store_spec.rb +27 -0
  284. data/spec/data/1/CnyUnifiedSeq +0 -0
  285. data/spec/spec_helper.rb +31 -0
  286. metadata +456 -0
@@ -0,0 +1,125 @@
1
+ /*
2
+ Copyright 2011 Convey Computer Corporation (info@conveycomputer.com)
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 _BINARYSEQUENCES_H_
22
+ #define _BINARYSEQUENCES_H_
23
+
24
+ #include "recycleBin.h"
25
+
26
+ struct refInfo_st {
27
+ int32_t m_referenceID;
28
+ int32_t m_pos;
29
+ };
30
+ typedef struct refInfo_st RefInfo;
31
+
32
+
33
+ typedef struct {
34
+ Category m_numCategories;
35
+ uint32_t m_magic;
36
+ boolean m_bDoubleStrand;
37
+ boolean m_bColor;
38
+ uint64_t m_sequenceCnt;
39
+ uint64_t m_timeStamp;
40
+ uint64_t m_seqNuclStoreSize;
41
+ uint64_t m_minSeqLen;
42
+ uint64_t m_maxSeqLen;
43
+ uint64_t m_totalSeqLen;
44
+ boolean m_bFileWriteCompleted;
45
+ } CnyUnifiedSeqFileHeader;
46
+
47
+ // Reading
48
+ struct sequencesReader_st {
49
+ char * m_seqFilename;
50
+ FILE * m_pFile;
51
+ ReadSet * m_sequences;
52
+ boolean m_bIsBinary;
53
+ // following are only used by the binary code
54
+ char * m_namesFilename;
55
+ CnyUnifiedSeqFileHeader m_unifiedSeqFileHeader;
56
+ Category m_numCategories;
57
+ Category m_currCategory;
58
+ uint64_t m_minSeqLen;
59
+ uint64_t m_maxSeqLen;
60
+ uint8_t * m_pReadBuffer;
61
+ uint8_t * m_pReadBufEnd;
62
+ uint64_t m_readBufPos;
63
+ uint8_t * m_pCurrentReadPtr;
64
+ uint8_t * m_pNextReadPtr;
65
+ uint64_t m_currentNuclReadIdx;
66
+ uint64_t m_currentReadLength;
67
+ uint32_t m_refCnt;
68
+ boolean m_bIsRef;
69
+ char ** m_ppCurrString;
70
+ };
71
+
72
+ #define USF_READ_BUF_SIZE (64*1024)
73
+
74
+ ReadSet *importCnyReadSet(char *filename);
75
+ void getCnySeqNucl(SequencesReader *seqReadInfo, uint8_t *sequence);
76
+ uint32_t readCnySeqUint32(SequencesReader *seqReadInfo);
77
+ boolean advanceCnySeqCurrentRead(SequencesReader *seqReadInfo);
78
+ FILE *openCnySeqForRead(const char *fileName, CnyUnifiedSeqFileHeader *seqFileHeader);
79
+ void resetCnySeqCurrentRead(SequencesReader *seqReadInfo);
80
+
81
+ struct refInfoList_st {
82
+ RefInfo m_elem;
83
+ struct refInfoList_st *next;
84
+ };
85
+ typedef struct refInfoList_st RefInfoList;
86
+
87
+ // Writing
88
+ struct sequencesWriter_st {
89
+ FILE * m_pFile;
90
+ // following are only used by the binary code
91
+ FILE * m_nameFile;
92
+ CnyUnifiedSeqFileHeader m_unifiedSeqFileHeader;
93
+ uint64_t m_insertStartIndex;
94
+ uint64_t m_insertLength;
95
+ uint64_t m_insertLengthIndex;
96
+ uint64_t m_insertCurrentIndex;
97
+ uint32_t m_hostBuffersInUse;
98
+ uint32_t m_fileSegmentWriteIdx;
99
+ uint8_t * m_pWriteBuffer[3];
100
+ uint8_t * m_pHostBufPtr;
101
+ uint8_t * m_pHostLengthBufPtr;
102
+ uint8_t * m_pHostLengthBufPtrMax;
103
+ uint8_t * m_pHostBufPtrMax;
104
+ int64_t m_hostBufferFilePos[3];
105
+ RefInfoList * m_refInfoHead;
106
+ uint32_t m_refCnt;
107
+ boolean m_bIsRef;
108
+ Mask ** m_referenceMask;
109
+ Mask * m_current;
110
+ Coordinate m_position;
111
+ boolean m_openMask;
112
+ RecycleBin * m_maskMemory;
113
+ };
114
+ typedef struct sequencesWriter_st SequencesWriter;
115
+
116
+ SequencesWriter * openCnySeqForWrite(const char *unifiedSeqFileName);
117
+ void cnySeqInsertSequenceName(const char *name, IDnum readID, SequencesWriter *seqWriteInfo, Category cat);
118
+ void cnySeqInsertReferenceMask(SequencesWriter *seqWriteInfo, Mask *referenceMask);
119
+ void cnySeqInsertNucleotideString(const char *pReadBuf, SequencesWriter *seqWriteInfo);
120
+ void inputCnySeqFileStart(Category category, SequencesWriter *seqWriteInfo);
121
+ void cnySeqInsertStart(SequencesWriter *seqWriteInfo);
122
+ void cnySeqInsertEnd(SequencesWriter *seqWriteInfo);
123
+ void closeCnySeqForWrite(SequencesWriter *seqWriteInfo);
124
+
125
+ #endif
@@ -0,0 +1,233 @@
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
+ #include <stdlib.h>
22
+ #include <stdio.h>
23
+
24
+ #include "globals.h"
25
+ #include "graph.h"
26
+ #include "passageMarker.h"
27
+ #include "utility.h"
28
+
29
+ // DEBUG
30
+ static boolean isLocallyInitial(PassageMarkerI marker) {
31
+ PassageMarkerI previous = getPreviousInSequence(marker);
32
+ return (previous == NULL_IDX
33
+ || getPassageMarkerFinish(previous) != getPassageMarkerStart(marker));
34
+ }
35
+
36
+ void concatenateReadStarts(Node * target, Node * source, Graph * graph)
37
+ {
38
+ IDnum sourceLength, targetLength;
39
+ ShortReadMarker *sourceArray, *targetArray, *marker;
40
+ IDnum index;
41
+ Coordinate position, nodeLength;
42
+
43
+ if (!readStartsAreActivated(graph))
44
+ return;
45
+
46
+ if (target == NULL || source == NULL)
47
+ return;
48
+
49
+ // Update Coordinates
50
+ sourceArray = getNodeReads(source, graph);
51
+ sourceLength = getNodeReadCount(source, graph);
52
+
53
+ nodeLength = getNodeLength(target);
54
+ for (index = 0; index < sourceLength; index++) {
55
+ marker = getShortReadMarkerAtIndex(sourceArray, index);
56
+ position = getShortReadMarkerPosition(marker);
57
+ if (position != -1) {
58
+ position += nodeLength;
59
+ setShortReadMarkerPosition(marker, position);
60
+ }
61
+ }
62
+
63
+ // Same but for symmetrical reads
64
+ targetArray = getNodeReads(getTwinNode(target), graph);
65
+ targetLength = getNodeReadCount(getTwinNode(target), graph);
66
+
67
+ nodeLength = getNodeLength(source);
68
+ for (index = 0; index < targetLength; index++) {
69
+ marker = getShortReadMarkerAtIndex(targetArray, index);
70
+ position = getShortReadMarkerPosition(marker);
71
+ if (position != -1) {
72
+ position += nodeLength;
73
+ setShortReadMarkerPosition(marker, position);
74
+ }
75
+ }
76
+
77
+ // Merging lists
78
+ mergeNodeReads(target, source, graph);
79
+ mergeNodeReads(getTwinNode(target), getTwinNode(source), graph);
80
+ }
81
+
82
+ // Replaces two consecutive nodes into a single equivalent node
83
+ // The extra memory is freed
84
+ void concatenateStringOfNodes(Node * nodeA, Graph * graph)
85
+ {
86
+ Node *twinA = getTwinNode(nodeA);
87
+ Node * nodeB = nodeA;
88
+ Node * twinB;
89
+ Node *currentNode, *nextNode;
90
+ Coordinate totalLength = 0;
91
+ PassageMarkerI marker, tmpMarker;
92
+ Arc *arc;
93
+
94
+ while (simpleArcCount(nodeB) == 1
95
+ &&
96
+ simpleArcCount(getTwinNode
97
+ (getDestination(getArc(nodeB)))) ==
98
+ 1
99
+ && getDestination(getArc(nodeB)) != getTwinNode(nodeB)
100
+ && getDestination(getArc(nodeB)) != nodeA) {
101
+ totalLength += getNodeLength(nodeB);
102
+ nodeB = getDestination(getArc(nodeB));
103
+ }
104
+ twinB = getTwinNode(nodeB);
105
+ totalLength += getNodeLength(nodeB);
106
+ reallocateNodeDescriptor(nodeA, totalLength);
107
+
108
+ currentNode = nodeA;
109
+ while (currentNode != nodeB) {
110
+ currentNode = getDestination(getArc(currentNode));
111
+
112
+ // Passage marker management in node A:
113
+ for (marker = getMarker(nodeA); marker != NULL_IDX;
114
+ marker = getNextInNode(marker)) {
115
+ if (getNode(getNextInSequence(marker)) != currentNode
116
+ || getFinishOffset(marker) != 0
117
+ || getStartOffset(getNextInSequence(marker)) != 0
118
+ || getPassageMarkerFinish(marker) != getPassageMarkerStart(getNextInSequence(marker)))
119
+ incrementFinishOffset(marker,
120
+ getNodeLength(currentNode));
121
+ }
122
+
123
+ // Swapping new born passageMarkers from B to A
124
+ for (marker = getMarker(currentNode); marker != NULL_IDX; marker = tmpMarker) {
125
+ tmpMarker = getNextInNode(marker);
126
+
127
+ if (isLocallyInitial(marker)
128
+ || getNode(getPreviousInSequence(marker)) != nodeA
129
+ || getStartOffset(marker) != 0
130
+ || getFinishOffset(getPreviousInSequence(marker)) != 0
131
+ || getPassageMarkerStart(marker) != getPassageMarkerFinish(getPreviousInSequence(marker))) {
132
+ extractPassageMarker(marker);
133
+ incrementFinishOffset(getTwinMarker(marker),
134
+ getNodeLength(nodeA));
135
+ transposePassageMarker(marker, nodeA);
136
+ } else
137
+ disconnectNextPassageMarker(getPreviousInSequence
138
+ (marker), graph);
139
+ }
140
+
141
+ // Read starts
142
+ concatenateReadStarts(nodeA, currentNode, graph);
143
+
144
+ // Gaps
145
+ appendNodeGaps(nodeA, currentNode, graph);
146
+
147
+ // Update uniqueness:
148
+ setUniqueness(nodeA, getUniqueness(nodeA) || getUniqueness(currentNode));
149
+
150
+ #ifndef SINGLE_COV_CAT
151
+ Category cat;
152
+ for (cat = 0; cat < CATEGORIES; cat++) {
153
+ // Update virtual coverage
154
+ incrementVirtualCoverage(nodeA, cat,
155
+ getVirtualCoverage(currentNode, cat));
156
+ // Update original virtual coverage
157
+ incrementOriginalVirtualCoverage(nodeA, cat,
158
+ getOriginalVirtualCoverage(currentNode, cat));
159
+ }
160
+ #else
161
+ // Update virtual coverage
162
+ incrementVirtualCoverage(nodeA, getVirtualCoverage(currentNode));
163
+ #endif
164
+
165
+ // Descriptor management (node)
166
+ directlyAppendDescriptors(nodeA, currentNode, totalLength);
167
+ }
168
+
169
+ // Correct arcs
170
+ for (arc = getArc(nodeB); arc != NULL; arc = getNextArc(arc)) {
171
+ if (getDestination(arc) != twinB)
172
+ createAnalogousArc(nodeA, getDestination(arc),
173
+ arc, graph);
174
+ else
175
+ createAnalogousArc(nodeA, twinA, arc, graph);
176
+ }
177
+
178
+ // Freeing gobbled nodes
179
+ currentNode = getTwinNode(nodeB);
180
+ while (currentNode != getTwinNode(nodeA)) {
181
+ arc = getArc(currentNode);
182
+ nextNode = getDestination(arc);
183
+ destroyNode(currentNode, graph);
184
+ currentNode = nextNode;
185
+ }
186
+ }
187
+
188
+ // Detects sequences that could be simplified through concatentation
189
+ // Iterates till graph cannot be more simplified
190
+ // Useless nodes are freed from memory and remaining ones are renumbered
191
+ void concatenateGraph(Graph * graph)
192
+ {
193
+ IDnum nodeIndex;
194
+ Node *node, *twin;
195
+
196
+ velvetLog("Concatenation...\n");
197
+
198
+ for (nodeIndex = 1; nodeIndex < nodeCount(graph); nodeIndex++) {
199
+ node = getNodeInGraph(graph, nodeIndex);
200
+
201
+ if (node == NULL)
202
+ continue;
203
+
204
+ twin = getTwinNode(node);
205
+ while (simpleArcCount(node) == 1
206
+ &&
207
+ simpleArcCount(getTwinNode
208
+ (getDestination(getArc(node)))) ==
209
+ 1) {
210
+ if (getDestination(getArc(node)) == twin
211
+ || getDestination(getArc(node)) == node)
212
+ break;
213
+ concatenateStringOfNodes(node,
214
+ graph);
215
+ }
216
+
217
+ while (simpleArcCount(twin) == 1
218
+ &&
219
+ simpleArcCount(getTwinNode
220
+ (getDestination(getArc(twin)))) ==
221
+ 1) {
222
+ if (getDestination(getArc(twin)) == node
223
+ || getDestination(getArc(twin)) == twin)
224
+ break;
225
+ concatenateStringOfNodes(twin,
226
+ graph);
227
+ }
228
+ }
229
+
230
+ renumberNodes(graph);
231
+ sortGapMarkers(graph);
232
+ velvetLog("Concatenation over!\n");
233
+ }
@@ -0,0 +1,30 @@
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 _CONCATENATEDGRAPH_H_
22
+ #define _CONCATENATEDGRAPH_H_
23
+
24
+ // Concatenates short read markers from node B to the end of nodeA
25
+ void concatenateReadStarts(Node * nodeA, Node * nodeB, Graph * graph);
26
+
27
+ // Concatenates all pairs of nodes which form a linear structure
28
+ void concatenateGraph(Graph * graph);
29
+
30
+ #endif
@@ -0,0 +1,262 @@
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
+ #include <stdlib.h>
22
+ #include <stdio.h>
23
+
24
+ #include "globals.h"
25
+ #include "preGraph.h"
26
+ #include "utility.h"
27
+
28
+ // Replaces two consecutive preNodes into a single equivalent preNode
29
+ // The extra memory is freed
30
+ static void concatenatePreNodes(IDnum preNodeAID, PreArcI oldPreArc,
31
+ PreGraph * preGraph)
32
+ {
33
+ IDnum preNodeBID = preNodeAID;
34
+ IDnum currentPreNodeID, nextPreNodeID;
35
+ PreArcI preArc = oldPreArc;
36
+ Coordinate totalLength = 0;
37
+ Coordinate arrayLength;
38
+ Descriptor * descr, * ptr;
39
+ int writeOffset = 0;
40
+ int wordLength = getWordLength_pg(preGraph);
41
+ Coordinate totalOffset = 0;
42
+
43
+ //velvetLog("Concatenating nodes %li and %li\n", preNodeAID, preNodeBID);
44
+
45
+ while(hasSinglePreArc_pg(preNodeBID, preGraph)
46
+ &&
47
+ hasSinglePreArc_pg(getOtherEnd_pg
48
+ (preArc, preNodeBID),
49
+ preGraph)
50
+ && !isLoop_pg(preArc)
51
+ && getDestination_pg(preArc, preNodeBID) != preNodeAID) {
52
+
53
+ totalLength += getPreNodeLength_pg(preNodeBID, preGraph);
54
+ preNodeBID = getDestination_pg(preArc, preNodeBID);
55
+ preArc = getPreArc_pg(preNodeBID, preGraph);
56
+ }
57
+ totalLength += getPreNodeLength_pg(preNodeBID, preGraph);
58
+ totalLength += wordLength - 1;
59
+
60
+ // Reference marker management
61
+ if (referenceMarkersAreActivated_pg(preGraph)) {
62
+ currentPreNodeID = preNodeAID;
63
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
64
+ for (currentPreNodeID = getDestination_pg(preArc, currentPreNodeID); currentPreNodeID != preNodeBID; currentPreNodeID = getDestination_pg(preArc, currentPreNodeID)) {
65
+ concatenateReferenceMarkers_pg(preNodeAID, currentPreNodeID, preGraph, totalOffset);
66
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
67
+ totalOffset += getPreNodeLength_pg(currentPreNodeID, preGraph);
68
+ }
69
+ concatenateReferenceMarkers_pg(preNodeAID, currentPreNodeID, preGraph, totalOffset);
70
+ }
71
+
72
+ // Descriptor management (preNode)
73
+ arrayLength = totalLength / 4;
74
+ if (totalLength % 4)
75
+ arrayLength++;
76
+ descr = callocOrExit(arrayLength, Descriptor);
77
+ ptr = descr;
78
+ if (preNodeAID > 0) {
79
+ currentPreNodeID = preNodeAID;
80
+ appendDescriptors_pg(&ptr, &writeOffset, currentPreNodeID, preGraph, true);
81
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
82
+ currentPreNodeID = getDestination_pg(preArc, currentPreNodeID);
83
+ while (currentPreNodeID != preNodeBID) {
84
+ appendDescriptors_pg(&ptr, &writeOffset, currentPreNodeID, preGraph, false);
85
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
86
+ currentPreNodeID = getDestination_pg(preArc, currentPreNodeID);
87
+ }
88
+ appendDescriptors_pg(&ptr, &writeOffset, currentPreNodeID, preGraph, false);
89
+ } else {
90
+ currentPreNodeID = -preNodeBID;
91
+ appendDescriptors_pg(&ptr, &writeOffset ,currentPreNodeID, preGraph, true);
92
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
93
+ currentPreNodeID = getDestination_pg(preArc, currentPreNodeID);
94
+ while (currentPreNodeID != -preNodeAID) {
95
+ appendDescriptors_pg(&ptr, &writeOffset ,currentPreNodeID, preGraph, false);
96
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
97
+ currentPreNodeID = getDestination_pg(preArc, currentPreNodeID);
98
+ }
99
+ appendDescriptors_pg(&ptr, &writeOffset ,currentPreNodeID, preGraph, false);
100
+ }
101
+
102
+ if (writeOffset != 0)
103
+ while (writeOffset++ != 4)
104
+ (*ptr) >>= 2;
105
+
106
+ setPreNodeDescriptor_pg(descr, totalLength - wordLength + 1, preNodeAID, preGraph);
107
+
108
+ // Correct preArcs
109
+ for (preArc = getPreArc_pg(preNodeBID, preGraph); preArc != NULL_IDX;
110
+ preArc = getNextPreArc_pg(preArc, preNodeBID)) {
111
+ if (getDestination_pg(preArc, preNodeBID) != -preNodeBID)
112
+ createAnalogousPreArc_pg(preNodeAID,
113
+ getDestination_pg(preArc,
114
+ preNodeBID),
115
+ preArc, preGraph);
116
+ else
117
+ createAnalogousPreArc_pg(preNodeAID, -preNodeAID,
118
+ preArc, preGraph);
119
+ }
120
+
121
+ // Freeing gobbled preNode
122
+ currentPreNodeID = -preNodeBID;
123
+ while (currentPreNodeID != -preNodeAID) {
124
+ preArc = getPreArc_pg(currentPreNodeID, preGraph);
125
+ nextPreNodeID = getDestination_pg(preArc, currentPreNodeID);
126
+ destroyPreNode_pg(currentPreNodeID, preGraph);
127
+ currentPreNodeID = nextPreNodeID;
128
+ }
129
+ }
130
+
131
+ // Detects sequences that could be simplified through concatentation
132
+ // Iterates till preGraph cannot be more simplified
133
+ // Useless preNodes are freed from memory and remaining ones are renumbered
134
+ void concatenatePreGraph_pg(PreGraph * preGraph)
135
+ {
136
+ IDnum preNodeIndex;
137
+ PreArcI preArc;
138
+ PreNode *preNode;
139
+
140
+ velvetLog("Concatenation...\n");
141
+
142
+ for (preNodeIndex = 1; preNodeIndex < preNodeCount_pg(preGraph);
143
+ preNodeIndex++) {
144
+ preNode = getPreNodeInPreGraph_pg(preGraph, preNodeIndex);
145
+
146
+ if (preNode == NULL)
147
+ continue;
148
+
149
+ preArc = getPreArc_pg(preNodeIndex, preGraph);
150
+
151
+ while (hasSinglePreArc_pg(preNodeIndex, preGraph)
152
+ &&
153
+ hasSinglePreArc_pg(getOtherEnd_pg
154
+ (preArc, preNodeIndex),
155
+ preGraph)) {
156
+ if (isLoop_pg(preArc))
157
+ break;
158
+ concatenatePreNodes(preNodeIndex, preArc,
159
+ preGraph);
160
+ preArc = getPreArc_pg(preNodeIndex, preGraph);
161
+ }
162
+
163
+ preArc = getPreArc_pg(-preNodeIndex, preGraph);
164
+
165
+ while (hasSinglePreArc_pg(-preNodeIndex, preGraph)
166
+ &&
167
+ hasSinglePreArc_pg(getOtherEnd_pg
168
+ (preArc, -preNodeIndex),
169
+ preGraph)) {
170
+ if (isLoop_pg(preArc))
171
+ break;
172
+ concatenatePreNodes(-preNodeIndex, preArc,
173
+ preGraph);
174
+ preArc = getPreArc_pg(-preNodeIndex, preGraph);
175
+ }
176
+ }
177
+
178
+ renumberPreNodes_pg(preGraph);
179
+ velvetLog("Concatenation over!\n");
180
+ }
181
+
182
+ static boolean isEligibleTip(IDnum index, PreGraph * preGraph, Coordinate
183
+ cutoffLength)
184
+ {
185
+ IDnum currentIndex = -index;
186
+ Coordinate totalLength = 0;
187
+ PreArcI activeArc = NULL_IDX;
188
+ PreArcI arc;
189
+ IDnum mult = 0;
190
+
191
+ if (getPreArc_pg(index, preGraph) != NULL_IDX)
192
+ return false;
193
+
194
+ // Finding first tangle
195
+ while (currentIndex != 0
196
+ && simplePreArcCount_pg(-currentIndex, preGraph) < 2
197
+ && simplePreArcCount_pg(currentIndex, preGraph) < 2
198
+ && (!referenceMarkersAreActivated_pg(preGraph) || !hasPreMarkers(currentIndex, preGraph))) {
199
+ totalLength += getPreNodeLength_pg(currentIndex, preGraph);
200
+ activeArc = getPreArc_pg(currentIndex, preGraph);
201
+ currentIndex = getDestination_pg(activeArc, currentIndex);
202
+ }
203
+
204
+ // If too long
205
+ if (totalLength >= cutoffLength)
206
+ return false;
207
+
208
+ // If isolated snippet:
209
+ if (currentIndex == 0)
210
+ return true;
211
+
212
+ // Joined tips
213
+ if (simplePreArcCount_pg(-currentIndex, preGraph) < 2)
214
+ return false;
215
+
216
+ // If unique event
217
+ if (getMultiplicity_pg(activeArc) == 1)
218
+ return true;
219
+
220
+ // Computing max arc
221
+ for (arc = getPreArc_pg(-currentIndex, preGraph); arc != NULL_IDX;
222
+ arc = getNextPreArc_pg(arc, -currentIndex))
223
+ if (getMultiplicity_pg(arc) > mult)
224
+ mult = getMultiplicity_pg(arc);
225
+
226
+ // Testing for minority
227
+ return mult > getMultiplicity_pg(activeArc);
228
+ }
229
+
230
+ void clipTips_pg(PreGraph * preGraph)
231
+ {
232
+ IDnum index;
233
+ PreNode *current;
234
+ boolean modified = true;
235
+ Coordinate cutoffLength = getWordLength_pg(preGraph) * 2;
236
+ IDnum counter = 0;
237
+
238
+ velvetLog("Clipping short tips off preGraph\n");
239
+
240
+ while (modified) {
241
+ modified = false;
242
+ for (index = 1; index <= preNodeCount_pg(preGraph);
243
+ index++) {
244
+ current = getPreNodeInPreGraph_pg(preGraph, index);
245
+
246
+ if (current == NULL)
247
+ continue;
248
+
249
+ if (isEligibleTip(index, preGraph, cutoffLength)
250
+ || isEligibleTip(-index, preGraph,
251
+ cutoffLength)) {
252
+ counter++;
253
+ destroyPreNode_pg(index, preGraph);
254
+ modified = true;
255
+ }
256
+ }
257
+ }
258
+
259
+ concatenatePreGraph_pg(preGraph);
260
+ velvetLog("%li tips cut off\n", (long) counter);
261
+ velvetLog("%li nodes left\n", (long) preNodeCount_pg(preGraph));
262
+ }