bio-velvet_underground 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.gitmodules +1 -0
- data/.rspec +1 -0
- data/Gemfile +1 -0
- data/README.md +53 -9
- data/VERSION +1 -1
- data/ext/mkrf_conf.rb +22 -4
- data/ext/src/Makefile +27 -14
- data/ext/src/src/concatenatedPreGraph.c +4 -4
- data/ext/src/src/correctedGraph.c +18 -16
- data/ext/src/src/graph.c +50 -16
- data/ext/src/src/graphStats.c +65 -65
- data/ext/src/src/run.c +9 -9
- data/ext/src/src/run2.c +51 -37
- data/ext/src/src/utility.c +10 -9
- data/lib/bio-velvet_underground.rb +55 -11
- data/lib/bio-velvet_underground/binary_sequence_store.rb +86 -0
- data/lib/bio-velvet_underground/constants.rb +33 -0
- data/lib/bio-velvet_underground/graph.rb +262 -0
- data/lib/bio-velvet_underground/runner.rb +59 -0
- data/spec/binary_sequence_store_spec.rb +12 -0
- data/spec/data/2/CnyUnifiedSeq +0 -0
- data/spec/data/3/Assem/Graph2 +40 -0
- data/spec/data/3/Assem/LastGraph +40 -0
- data/spec/data/3/Assem/Log +42 -0
- data/spec/data/3/Assem/PreGraph +9 -0
- data/spec/data/3/Assem/Roadmaps +15 -0
- data/spec/data/3/Assem/Sequences +50 -0
- data/spec/data/3/Assem/contigs.fa +15 -0
- data/spec/data/3/Assem/stats.txt +5 -0
- data/spec/data/3/Sequences +50 -0
- data/spec/data/4/LastGraphKmer51Head +7 -0
- data/spec/graph_spec.rb +52 -0
- data/spec/runner_spec.rb +18 -0
- data/spec/spec_helper.rb +1 -16
- metadata +34 -4
- data/ext/bioruby.patch +0 -60
- data/lib/bio-velvet_underground/velvet_underground.rb +0 -72
data/ext/src/src/run2.c
CHANGED
@@ -68,6 +68,8 @@ static void printUsage()
|
|
68
68
|
puts("\t-paired_exp_fraction <double>\t: remove all the paired end connections which less than the specified fraction of the expected count (default: 0.1)");
|
69
69
|
puts("\t-shortMatePaired* <yes|no>\t: for mate-pair libraries, indicate that the library might be contaminated with paired-end reads (default no)");
|
70
70
|
puts("\t-conserveLong <yes|no>\t\t: preserve sequences with long reads in them (default no)");
|
71
|
+
puts("\t-clip_tips <yes|no>\t\t: do tip clipping on pre-graph (default yes)");
|
72
|
+
puts("\t-tour_bus <yes|no>\t\t: apply the tour bus algorithm (default yes)");
|
71
73
|
puts("");
|
72
74
|
puts("Output:");
|
73
75
|
puts("\tdirectory/contigs.fa\t\t: fasta file of contigs longer than twice hash length");
|
@@ -76,7 +78,7 @@ static void printUsage()
|
|
76
78
|
puts("\tdirectory/velvet_asm.afg\t: (if requested) AMOS compatible assembly file");
|
77
79
|
}
|
78
80
|
|
79
|
-
int
|
81
|
+
int velvetg(int argc, char **argv)
|
80
82
|
{
|
81
83
|
ReadSet *sequences = NULL;
|
82
84
|
RoadMapArray *rdmaps;
|
@@ -86,7 +88,9 @@ int main(int argc, char **argv)
|
|
86
88
|
*preGraphFilename, *seqFilename, *roadmapFilename,
|
87
89
|
*lowCovContigsFilename, *highCovContigsFilename;
|
88
90
|
double coverageCutoff = -1;
|
89
|
-
|
91
|
+
boolean doClipTips = true;
|
92
|
+
boolean doTourBus = true;
|
93
|
+
double longCoverageCutoff = -1;
|
90
94
|
double maxCoverageCutoff = -1;
|
91
95
|
double expectedCoverage = -1;
|
92
96
|
Coordinate minContigLength = -1;
|
@@ -164,7 +168,7 @@ int main(int argc, char **argv)
|
|
164
168
|
return 0;
|
165
169
|
}
|
166
170
|
|
167
|
-
// Memory allocation
|
171
|
+
// Memory allocation
|
168
172
|
directory = argv[1];
|
169
173
|
graphFilename = mallocOrExit(strlen(directory) + 100, char);
|
170
174
|
connectedGraphFilename = mallocOrExit(strlen(directory) + 100, char);
|
@@ -181,9 +185,9 @@ int main(int argc, char **argv)
|
|
181
185
|
if (arg_index >= argc) {
|
182
186
|
velvetLog("Unusual number of arguments!\n");
|
183
187
|
printUsage();
|
184
|
-
#ifdef DEBUG
|
188
|
+
#ifdef DEBUG
|
185
189
|
abort();
|
186
|
-
#endif
|
190
|
+
#endif
|
187
191
|
exit(1);
|
188
192
|
}
|
189
193
|
|
@@ -210,9 +214,9 @@ int main(int argc, char **argv)
|
|
210
214
|
if (insertLength[0] < 0) {
|
211
215
|
velvetLog("Invalid insert length: %lli\n",
|
212
216
|
(long long) insertLength[0]);
|
213
|
-
#ifdef DEBUG
|
217
|
+
#ifdef DEBUG
|
214
218
|
abort();
|
215
|
-
#endif
|
219
|
+
#endif
|
216
220
|
exit(1);
|
217
221
|
}
|
218
222
|
} else if (strcmp(arg, "-ins_length_sd") == 0) {
|
@@ -221,9 +225,9 @@ int main(int argc, char **argv)
|
|
221
225
|
if (std_dev[0] < 0) {
|
222
226
|
velvetLog("Invalid std deviation: %lli\n",
|
223
227
|
(long long) std_dev[0]);
|
224
|
-
#ifdef DEBUG
|
228
|
+
#ifdef DEBUG
|
225
229
|
abort();
|
226
|
-
#endif
|
230
|
+
#endif
|
227
231
|
exit(1);
|
228
232
|
}
|
229
233
|
} else if (strcmp(arg, "-ins_length_long") == 0) {
|
@@ -238,9 +242,9 @@ int main(int argc, char **argv)
|
|
238
242
|
cat = (Category) short_var;
|
239
243
|
if (cat < 1 || cat > CATEGORIES) {
|
240
244
|
velvetLog("Unknown option: %s\n", arg);
|
241
|
-
#ifdef DEBUG
|
245
|
+
#ifdef DEBUG
|
242
246
|
abort();
|
243
|
-
#endif
|
247
|
+
#endif
|
244
248
|
exit(1);
|
245
249
|
}
|
246
250
|
sscanf(argv[arg_index], "%lli", &longlong_var);
|
@@ -248,9 +252,9 @@ int main(int argc, char **argv)
|
|
248
252
|
if (insertLength[cat - 1] < 0) {
|
249
253
|
velvetLog("Invalid insert length: %lli\n",
|
250
254
|
(long long) insertLength[cat - 1]);
|
251
|
-
#ifdef DEBUG
|
255
|
+
#ifdef DEBUG
|
252
256
|
abort();
|
253
|
-
#endif
|
257
|
+
#endif
|
254
258
|
exit(1);
|
255
259
|
}
|
256
260
|
} else if (strncmp(arg, "-ins_length", 11) == 0) {
|
@@ -258,9 +262,9 @@ int main(int argc, char **argv)
|
|
258
262
|
cat = (Category) short_var;
|
259
263
|
if (cat < 1 || cat > CATEGORIES) {
|
260
264
|
velvetLog("Unknown option: %s\n", arg);
|
261
|
-
#ifdef DEBUG
|
265
|
+
#ifdef DEBUG
|
262
266
|
abort();
|
263
|
-
#endif
|
267
|
+
#endif
|
264
268
|
exit(1);
|
265
269
|
}
|
266
270
|
sscanf(argv[arg_index], "%lli", &longlong_var);
|
@@ -268,9 +272,9 @@ int main(int argc, char **argv)
|
|
268
272
|
if (std_dev[cat - 1] < 0) {
|
269
273
|
velvetLog("Invalid std deviation: %lli\n",
|
270
274
|
(long long) std_dev[cat - 1]);
|
271
|
-
#ifdef DEBUG
|
275
|
+
#ifdef DEBUG
|
272
276
|
abort();
|
273
|
-
#endif
|
277
|
+
#endif
|
274
278
|
exit(1);
|
275
279
|
}
|
276
280
|
} else if (strcmp(arg, "-read_trkg") == 0) {
|
@@ -353,6 +357,12 @@ int main(int argc, char **argv)
|
|
353
357
|
exit(1);
|
354
358
|
}
|
355
359
|
shadows[cat - 1] = (strcmp(argv[arg_index], "yes") == 0);
|
360
|
+
} else if (strcmp(arg,"-clip_tips") == 0){
|
361
|
+
if (strcmp(argv[arg_index], "no") == 0)
|
362
|
+
doClipTips = false;
|
363
|
+
} else if (strcmp(arg,"-tour_bus") == 0){
|
364
|
+
if (strcmp(argv[arg_index], "no") == 0)
|
365
|
+
doTourBus = false;
|
356
366
|
} else if (strcmp(arg, "--help") == 0) {
|
357
367
|
printUsage();
|
358
368
|
return 0;
|
@@ -452,7 +462,8 @@ int main(int argc, char **argv)
|
|
452
462
|
|
453
463
|
sequenceLengths =
|
454
464
|
getSequenceLengths(sequences, getWordLength(graph));
|
455
|
-
|
465
|
+
if (doTourBus)
|
466
|
+
correctGraph(graph, sequenceLengths, sequences->categories, conserveLong);
|
456
467
|
exportGraph(graphFilename, graph, sequences->tSequences);
|
457
468
|
} else if ((file = fopen(preGraphFilename, "r")) != NULL) {
|
458
469
|
fclose(file);
|
@@ -468,7 +479,8 @@ int main(int argc, char **argv)
|
|
468
479
|
roadmapFilename, readTracking, accelerationBits);
|
469
480
|
sequenceLengths =
|
470
481
|
getSequenceLengths(sequences, getWordLength(graph));
|
471
|
-
|
482
|
+
if (doTourBus)
|
483
|
+
correctGraph(graph, sequenceLengths, sequences->categories, conserveLong);
|
472
484
|
exportGraph(graphFilename, graph, sequences->tSequences);
|
473
485
|
} else if ((file = fopen(roadmapFilename, "r")) != NULL) {
|
474
486
|
fclose(file);
|
@@ -509,7 +521,7 @@ int main(int argc, char **argv)
|
|
509
521
|
}
|
510
522
|
preGraph = newPreGraph_pg(rdmaps, seqReadInfo);
|
511
523
|
concatenatePreGraph_pg(preGraph);
|
512
|
-
if (!conserveLong)
|
524
|
+
if (!conserveLong && doClipTips)
|
513
525
|
clipTips_pg(preGraph);
|
514
526
|
exportPreGraph_pg(preGraphFilename, preGraph);
|
515
527
|
destroyPreGraph_pg(preGraph);
|
@@ -523,13 +535,14 @@ int main(int argc, char **argv)
|
|
523
535
|
roadmapFilename, readTracking, accelerationBits);
|
524
536
|
sequenceLengths =
|
525
537
|
getSequenceLengths(sequences, getWordLength(graph));
|
526
|
-
|
538
|
+
if (doTourBus)
|
539
|
+
correctGraph(graph, sequenceLengths, sequences->categories, conserveLong);
|
527
540
|
exportGraph(graphFilename, graph, sequences->tSequences);
|
528
541
|
} else {
|
529
542
|
velvetLog("No Roadmap file to build upon! Please run velveth (see manual)\n");
|
530
|
-
#ifdef DEBUG
|
543
|
+
#ifdef DEBUG
|
531
544
|
abort();
|
532
|
-
#endif
|
545
|
+
#endif
|
533
546
|
exit(1);
|
534
547
|
}
|
535
548
|
|
@@ -553,11 +566,11 @@ int main(int argc, char **argv)
|
|
553
566
|
coverageCutoff = expectedCoverage / 2;
|
554
567
|
estimateCutoff = true;
|
555
568
|
}
|
556
|
-
} else {
|
569
|
+
} else {
|
557
570
|
estimateCoverage = false;
|
558
|
-
if (coverageCutoff < 0 && estimateCutoff)
|
571
|
+
if (coverageCutoff < 0 && estimateCutoff)
|
559
572
|
coverageCutoff = estimated_cov(graph, directory) / 2;
|
560
|
-
else
|
573
|
+
else
|
561
574
|
estimateCutoff = false;
|
562
575
|
}
|
563
576
|
|
@@ -580,7 +593,7 @@ int main(int argc, char **argv)
|
|
580
593
|
if (minContigLength < 2 * getWordLength(graph))
|
581
594
|
minContigKmerLength = getWordLength(graph);
|
582
595
|
else
|
583
|
-
minContigKmerLength = minContigLength - getWordLength(graph) + 1;
|
596
|
+
minContigKmerLength = minContigLength - getWordLength(graph) + 1;
|
584
597
|
|
585
598
|
dubious =
|
586
599
|
removeLowCoverageNodesAndDenounceDubiousReads(graph,
|
@@ -599,7 +612,8 @@ int main(int argc, char **argv)
|
|
599
612
|
lowCovContigsFilename);
|
600
613
|
|
601
614
|
removeHighCoverageNodes(graph, maxCoverageCutoff, exportFilteredNodes, minContigKmerLength, highCovContigsFilename);
|
602
|
-
|
615
|
+
if (doClipTips)
|
616
|
+
clipTipsHard(graph, conserveLong);
|
603
617
|
|
604
618
|
if (sequences->readCount > 0 && sequences->categories[0] == REFERENCE)
|
605
619
|
removeLowArcs(graph, coverageCutoff);
|
@@ -635,7 +649,7 @@ int main(int argc, char **argv)
|
|
635
649
|
strcpy(graphFilename, directory);
|
636
650
|
strcat(graphFilename, "/contigs.fa");
|
637
651
|
sequenceLengths = getSequenceLengths(sequences, getWordLength(graph));
|
638
|
-
exportLongNodeSequences(graphFilename, graph, minContigKmerLength, sequences, sequenceLengths, coverageMask);
|
652
|
+
exportLongNodeSequences(graphFilename, graph, minContigKmerLength, sequences, sequenceLengths, coverageMask);
|
639
653
|
|
640
654
|
if (exportAlignments) {
|
641
655
|
strcpy(graphFilename, directory);
|
@@ -663,9 +677,9 @@ int main(int argc, char **argv)
|
|
663
677
|
if (unusedReads)
|
664
678
|
exportUnusedReads(graph, sequences, minContigKmerLength, directory);
|
665
679
|
|
666
|
-
if (estimateCoverage)
|
680
|
+
if (estimateCoverage)
|
667
681
|
velvetLog("Estimated Coverage = %f\n", expectedCoverage);
|
668
|
-
if (estimateCutoff)
|
682
|
+
if (estimateCutoff)
|
669
683
|
velvetLog("Estimated Coverage cutoff = %f\n", coverageCutoff);
|
670
684
|
|
671
685
|
logFinalStats(graph, minContigKmerLength, directory);
|
@@ -673,25 +687,25 @@ int main(int argc, char **argv)
|
|
673
687
|
if (clean > 0) {
|
674
688
|
strcpy(graphFilename, directory);
|
675
689
|
strcat(graphFilename, "/Roadmaps");
|
676
|
-
remove(graphFilename);
|
690
|
+
remove(graphFilename);
|
677
691
|
|
678
692
|
strcpy(graphFilename, directory);
|
679
693
|
strcat(graphFilename, "/LastGraph");
|
680
|
-
remove(graphFilename);
|
681
|
-
}
|
694
|
+
remove(graphFilename);
|
695
|
+
}
|
682
696
|
|
683
697
|
if (clean > 1) {
|
684
698
|
strcpy(graphFilename, directory);
|
685
699
|
strcat(graphFilename, "/Sequences");
|
686
|
-
remove(graphFilename);
|
700
|
+
remove(graphFilename);
|
687
701
|
|
688
702
|
strcpy(graphFilename, directory);
|
689
703
|
strcat(graphFilename, "/Graph2");
|
690
|
-
remove(graphFilename);
|
704
|
+
remove(graphFilename);
|
691
705
|
|
692
706
|
strcpy(graphFilename, directory);
|
693
707
|
strcat(graphFilename, "/Graph");
|
694
|
-
remove(graphFilename);
|
708
|
+
remove(graphFilename);
|
695
709
|
}
|
696
710
|
|
697
711
|
free(sequenceLengths);
|
data/ext/src/src/utility.c
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
Copyright 2009 John Marshall (jm18@sanger.ac.uk)
|
2
|
+
Copyright 2009 John Marshall (jm18@sanger.ac.uk)
|
3
3
|
|
4
4
|
This file is part of Velvet.
|
5
5
|
|
@@ -89,14 +89,15 @@ void exitErrorf(int exitStatus, boolean showErrno, const char *format, ...)
|
|
89
89
|
fprintf(stderr, "\n");
|
90
90
|
va_end(args);
|
91
91
|
|
92
|
-
#ifdef DEBUG
|
92
|
+
#ifdef DEBUG
|
93
93
|
abort();
|
94
|
-
#endif
|
94
|
+
#endif
|
95
95
|
exit(exitStatus);
|
96
96
|
}
|
97
97
|
|
98
98
|
void velvetLog(const char *format, ...)
|
99
99
|
{
|
100
|
+
/* Don't print anything as it interferes with code bound through bioruby-velvet_underground
|
100
101
|
static boolean timeIsSet = false;
|
101
102
|
static struct timeval tvStart;
|
102
103
|
struct timeval tvNow;
|
@@ -117,14 +118,14 @@ void velvetLog(const char *format, ...)
|
|
117
118
|
vprintf(format, args);
|
118
119
|
va_end(args);
|
119
120
|
|
120
|
-
#ifdef DEBUG
|
121
|
+
#ifdef DEBUG
|
121
122
|
fflush(stdout);
|
122
|
-
#endif
|
123
|
+
#endif*/
|
123
124
|
}
|
124
125
|
|
125
|
-
void velvetFprintf(FILE * file, const char * format, ...)
|
126
|
+
void velvetFprintf(FILE * file, const char * format, ...)
|
126
127
|
{
|
127
|
-
|
128
|
+
va_list args;
|
128
129
|
|
129
130
|
va_start(args, format);
|
130
131
|
if (vfprintf(file, format, args) < 0) {
|
@@ -132,9 +133,9 @@ void velvetFprintf(FILE * file, const char * format, ...)
|
|
132
133
|
fprintf(stderr, "%s: ", programName);
|
133
134
|
fprintf(stderr, "Could not write into file\n");
|
134
135
|
va_end(args);
|
135
|
-
#ifdef DEBUG
|
136
|
+
#ifdef DEBUG
|
136
137
|
abort();
|
137
|
-
#endif
|
138
|
+
#endif
|
138
139
|
exit(EXIT_FAILURE);
|
139
140
|
}
|
140
141
|
va_end(args);
|
@@ -1,12 +1,56 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
1
|
+
require 'ffi'
|
2
|
+
|
3
|
+
require 'bio-velvet_underground/constants'
|
4
|
+
require 'bio-logger'
|
5
|
+
|
6
|
+
Bio::Log::LoggerPlus.new('bio-velvet_underground')
|
7
|
+
module Bio
|
8
|
+
module Velvet
|
9
|
+
module UndergroundLogging
|
10
|
+
def log
|
11
|
+
Bio::Log::LoggerPlus['bio-velvet_underground']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Underground
|
16
|
+
extend FFI::Library
|
17
|
+
include Bio::Velvet::UndergroundLogging
|
18
|
+
def self.log
|
19
|
+
Bio::Log::LoggerPlus['bio-velvet_underground']
|
20
|
+
end
|
21
|
+
|
22
|
+
# Return the minimum kmer length greater than or equal to the given
|
23
|
+
# graph hash length e.g. 29 => 31, 31 => 31, 33 => 63.
|
24
|
+
def self.compilation_max_kmer(graph_hash_length)
|
25
|
+
max_kmers.select{|k| graph_hash_length<=k}.min
|
26
|
+
end
|
27
|
+
|
28
|
+
# Attach the correct shared velvet library with ffi. Options:
|
29
|
+
# :kmer: attach library with at least this much kmer length
|
30
|
+
def self.attach_shared_library(velvet_compilation_options={})
|
31
|
+
max_kmer_length = nil
|
32
|
+
given_kmer = velvet_compilation_options[:kmer]
|
33
|
+
if !given_kmer.nil?
|
34
|
+
max_kmer_length = compilation_max_kmer(given_kmer)
|
35
|
+
raise "No installed velvet library available for max kmer #{given_kmer}" if max_kmer_length.nil?
|
36
|
+
end
|
37
|
+
log.debug "Found max kmer length #{max_kmer_length} to load with the velvet library"
|
38
|
+
|
39
|
+
# Set the ffi library path to the correct velvet one
|
40
|
+
lib_location = self.library_location_of(max_kmer_length)
|
41
|
+
log.debug "Loading velvet underground FFI library #{lib_location}.."
|
42
|
+
ffi_lib lib_location
|
43
|
+
log.debug "Velvet library loaded."
|
44
|
+
|
45
|
+
attach_graph_functions
|
46
|
+
attach_binary_sequence_functions
|
47
|
+
attach_runner_functions
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
require 'bio-velvet_underground/binary_sequence_store'
|
54
|
+
require 'bio-velvet_underground/graph'
|
55
|
+
require 'bio-velvet_underground/runner'
|
12
56
|
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class Bio::Velvet::Underground
|
2
|
+
class BinarySequenceStore
|
3
|
+
# Parse a CnyUnifiedSeq file in so that sequences can be accessed
|
4
|
+
def initialize(cny_unified_seq_file)
|
5
|
+
Bio::Velvet::Underground.attach_shared_library
|
6
|
+
readset_pointer = Bio::Velvet::Underground.importCnyReadSet cny_unified_seq_file
|
7
|
+
@readset = Bio::Velvet::Underground::ReadSet.new(readset_pointer)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Return a sequence from the store given its read ID.
|
11
|
+
def [](sequence_id)
|
12
|
+
if sequence_id==0 or sequence_id > @readset[:readCount]
|
13
|
+
raise "Invalid sequence_id #{sequence_id}"
|
14
|
+
end
|
15
|
+
|
16
|
+
pointer = Bio::Velvet::Underground.getTightStringInArray(
|
17
|
+
@readset[:tSequences], sequence_id-1
|
18
|
+
)
|
19
|
+
Bio::Velvet::Underground.readTightString pointer
|
20
|
+
end
|
21
|
+
|
22
|
+
# Number of sequences in this store
|
23
|
+
def length
|
24
|
+
@readset[:readCount]
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns true if the sequence ID refers to the
|
28
|
+
# second in a pair of sequences.
|
29
|
+
def is_second_in_pair?(sequence_id)
|
30
|
+
if sequence_id==0 or sequence_id > @readset[:readCount]
|
31
|
+
raise "Invalid sequence_id #{sequence_id}"
|
32
|
+
end
|
33
|
+
Bio::Velvet::Underground.isSecondInPair @readset, sequence_id-1
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns the ID of the given sequence_id's pair
|
37
|
+
def pair_id(sequence_id)
|
38
|
+
if is_second_in_pair?(sequence_id)
|
39
|
+
sequence_id-1
|
40
|
+
else
|
41
|
+
sequence_id+1
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
# struct readSet_st {
|
48
|
+
# char **sequences;
|
49
|
+
# TightString *tSequences;
|
50
|
+
# char **labels;
|
51
|
+
# char *tSeqMem;
|
52
|
+
# Quality **confidenceScores;
|
53
|
+
# Probability **kmerProbabilities;
|
54
|
+
# IDnum *mateReads;
|
55
|
+
# Category *categories;
|
56
|
+
# unsigned char *secondInPair;
|
57
|
+
# IDnum readCount;
|
58
|
+
# };
|
59
|
+
class ReadSet < FFI::Struct
|
60
|
+
layout :sequences, :pointer, # char **sequences;
|
61
|
+
:tSequences, :pointer, # TightString *tSequences;
|
62
|
+
:labels, :pointer, # char **labels;
|
63
|
+
:tSeqMem, :pointer, # char *tSeqMem; #TODO: they don't really mean char* here - meant as an unsigned short?
|
64
|
+
:confidenceScores, :pointer, # Quality **confidenceScores;
|
65
|
+
:kmerProbabilities, :pointer, # Probability **kmerProbabilities;
|
66
|
+
:mateReads, :pointer, # IDnum *mateReads;
|
67
|
+
:categories, :pointer, # Category *categories;
|
68
|
+
:secondInPair, :pointer, # unsigned char *secondInPair;
|
69
|
+
:readCount, :int32 # IDnum readCount;
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.attach_binary_sequence_functions
|
73
|
+
# ReadSet *importCnyReadSet(char *filename);
|
74
|
+
attach_function :importCnyReadSet, [:string], :pointer
|
75
|
+
|
76
|
+
# char *readTightString(TightString * tString); #tightString.h
|
77
|
+
attach_function :readTightString, [:pointer], :string
|
78
|
+
|
79
|
+
# TightString *getTightStringInArray(TightString * tString,
|
80
|
+
# IDnum position);
|
81
|
+
attach_function :getTightStringInArray, [:pointer, :int32], :pointer
|
82
|
+
|
83
|
+
# boolean isSecondInPair(ReadSet * reads, IDnum index);
|
84
|
+
attach_function :isSecondInPair, [:pointer, :int32], :bool
|
85
|
+
end
|
86
|
+
end
|