Changeset: 43f9498dd212 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=43f9498dd212 Modified Files: sql/backends/monet5/bam/85_bam.sql sql/backends/monet5/bam/Tests/benchmark.sql sql/backends/monet5/bam/bam.mal sql/backends/monet5/bam/bam_lib.c sql/backends/monet5/bam/bam_lib.h Branch: DVframework_bam Log Message:
Fixed the first query. Turned out that reverse_qual did nothing else then an ordinary string reversal. So, removed reverse_qual from the UDFs. Furthermore, it turned out that the reverse_seq UDF had to also reverse the sequence. This has been updated. diffs (118 lines): diff --git a/sql/backends/monet5/bam/85_bam.sql b/sql/backends/monet5/bam/85_bam.sql --- a/sql/backends/monet5/bam/85_bam.sql +++ b/sql/backends/monet5/bam/85_bam.sql @@ -8,8 +8,5 @@ RETURNS BOOLEAN EXTERNAL NAME bam.bam_fl CREATE FUNCTION reverse_seq(seq STRING) RETURNS STRING EXTERNAL NAME bam.reverse_seq; -CREATE FUNCTION reverse_qual(qual STRING) -RETURNS STRING EXTERNAL NAME bam.reverse_qual; - CREATE FUNCTION seq_length(cigar STRING) RETURNS INT EXTERNAL NAME bam.seq_length; \ No newline at end of file diff --git a/sql/backends/monet5/bam/Tests/benchmark.sql b/sql/backends/monet5/bam/Tests/benchmark.sql --- a/sql/backends/monet5/bam/Tests/benchmark.sql +++ b/sql/backends/monet5/bam/Tests/benchmark.sql @@ -2,23 +2,23 @@ ------------------------------------------------------------- Query 1 ---------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- -SELECT qname, - CASE WHEN bam_flag("flag", 'segm_reve') THEN reverse_seq("seq") ELSE "seq" END, - CASE WHEN bam_flag("flag", 'segm_reve') THEN reverse_qual("qual") ELSE "qual" END +SELECT qname, + CASE WHEN bam_flag(flag, 'segm_reve') THEN reverse_seq(seq) ELSE seq END, + CASE WHEN bam_flag(flag, 'segm_reve') THEN reverse(qual) ELSE qual END FROM bam.alignments -WHERE file_id = 2 - AND bam_flag("flag", 'seco_alig') = FALSE - AND bam_flag("flag", 'segm_unma') = TRUE +WHERE file_id = 1 + AND bam_flag(flag, 'seco_alig') = FALSE + AND bam_flag(flag, 'segm_unma') = TRUE AND qname IN ( SELECT qname FROM bam.alignments - WHERE bam_flag("flag", 'seco_alig') = FALSE + WHERE bam_flag(flag, 'seco_alig') = FALSE GROUP BY qname HAVING COUNT(*) = 2 - AND SUM(bam_flag("flag", 'firs_segm')) = 1 - AND SUM(bam_flag("flag", 'last_segm')) = 1 + AND SUM(bam_flag(flag, 'firs_segm')) = 1 + AND SUM(bam_flag(flag, 'last_segm')) = 1 ) -ORDER BY qname, bam_flag("flag", 'last_segm'); +ORDER BY qname, bam_flag(flag, 'last_segm'); -- Description: -- This query selects fields required by the FASTQ file format (qname, seq/seq-reverse, qual/qual-reverse). @@ -38,7 +38,7 @@ ORDER BY qname, bam_flag("flag", 'last_s - +/* -------------------------------------------------------------------------------------------------------------------------------------- diff --git a/sql/backends/monet5/bam/bam.mal b/sql/backends/monet5/bam/bam.mal --- a/sql/backends/monet5/bam/bam.mal +++ b/sql/backends/monet5/bam/bam.mal @@ -17,10 +17,6 @@ command bam.reverse_seq(seq:str):str address reverse_seq comment "Reverse DNA sequence." -command bam.reverse_qual(qual:str):str -address reverse_qual -comment "Reverse DNA quality string." - command bam.seq_length(cigar:str):int address seq_length comment "Calculate the real length of a DNA sequence, given its CIGAR string." \ No newline at end of file diff --git a/sql/backends/monet5/bam/bam_lib.c b/sql/backends/monet5/bam/bam_lib.c --- a/sql/backends/monet5/bam/bam_lib.c +++ b/sql/backends/monet5/bam/bam_lib.c @@ -34,10 +34,10 @@ reverse_seq(str *ret, str *seq) { switch((*seq)[i]) { - case 'A': (*ret)[i] = 'T'; break; - case 'T': (*ret)[i] = 'A'; break; - case 'C': (*ret)[i] = 'G'; break; - case 'G': (*ret)[i] = 'C'; break; + case 'A': (*ret)[len-i-1] = 'T'; break; + case 'T': (*ret)[len-i-1] = 'A'; break; + case 'C': (*ret)[len-i-1] = 'G'; break; + case 'G': (*ret)[len-i-1] = 'C'; break; default : throw(MAL, "reverse_seq", "Invalid character found in sequence: '%c'\n", (*seq)[i]); } } @@ -46,14 +46,6 @@ reverse_seq(str *ret, str *seq) } str -reverse_qual(str *ret, str *qual) -{ - /*TODO: Implement */ - *ret = *qual; - return MAL_SUCCEED; -} - -str seq_length(int *ret, str *cigar) { str cigar_consumable = *cigar; diff --git a/sql/backends/monet5/bam/bam_lib.h b/sql/backends/monet5/bam/bam_lib.h --- a/sql/backends/monet5/bam/bam_lib.h +++ b/sql/backends/monet5/bam/bam_lib.h @@ -15,7 +15,6 @@ bam_export str bam_flag(bit *ret, sht *flag, str *name); bam_export str reverse_seq(str *ret, str *seq); -bam_export str reverse_qual(str *ret, str *seq); bam_export str seq_length(int *ret, str *cigar); #endif _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list