CIGAR format
authorMarius Gavrilescu <marius@ieval.ro>
Sat, 11 Mar 2017 19:05:34 +0000 (21:05 +0200)
committerMarius Gavrilescu <marius@ieval.ro>
Sat, 11 Mar 2017 22:16:44 +0000 (00:16 +0200)
Edlib.xs
lib/Text/Levenshtein/Edlib.pm
t/Text-Levenshtein-Edlib.t

index 507284e259f42206de42a690ce7c3bc7288b45e9..c4503465428024701062582aa011291450f2248d 100644 (file)
--- a/Edlib.xs
+++ b/Edlib.xs
@@ -54,3 +54,7 @@ CODE:
        RETVAL = newRV_noinc((SV*)returned_av);
 OUTPUT:
        RETVAL
+
+
+char*
+edlibAlignmentToCigar(unsigned char *alignment, int length(alignment), int format)
index 9274517a6efbdc153c5102f8485c1285a3a33e96..2948818c84d5708f7be0b20ebd67cd689461d97f 100644 (file)
@@ -24,7 +24,7 @@ my @constants =
                EDLIB_TASK_PATH/;
 
 our %EXPORT_TAGS =
-  (all => [ @constants, qw/align distance/ ], constants => \@constants);
+  (all => [ @constants, qw/align distance to_cigar/ ], constants => \@constants);
 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
 our @EXPORT = ( @{ $EXPORT_TAGS{'constants'} } );
 our $VERSION = '0.001';
@@ -71,6 +71,13 @@ sub distance {
        align($q, $t, $k)->{editDistance}
 }
 
+sub to_cigar {
+       my ($align, $format) = @_;
+       $align = pack 'C*', @$align;
+       $format //= EDLIB_CIGAR_STANDARD();
+       edlibAlignmentToCigar($align, $format);
+}
+
 1;
 __END__
 
@@ -95,7 +102,9 @@ Text::Levenshtein::Edlib - XS edit distance and optimal alignment path calculati
   say "Start locations are: @{$align->{startLocations}}";
   say "End locations are: @{$align->{endLocations}}";
   say "Alignment path is: @{$align->{alignment}}";
-
+  say "Alignment path (in CIGAR format): ", to_cigar $align->{alignment};
+  say "Alignment path (in extended CIGAR format): ",
+      to_cigar $align->{alignment}, EDLIB_CIGAR_EXTENDED;
 
 =head1 DESCRIPTION
 
index ddd487c887f340737f73bef79ef8e8550970c0b3..1cb186aba8fbccdd15e268c618534327040b061d 100644 (file)
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 9;
+use Test::More tests => 11;
 BEGIN { use_ok('Text::Levenshtein::Edlib', ':all') };
 
 
@@ -36,3 +36,9 @@ is $r->{alphabetLength}, 7, 'align->{alphabetLength}';
 is_deeply $r->{endLocations}, [6], 'align->{endLocations}';
 is_deeply $r->{startLocations}, [0], 'align->{startLocations}';
 is_deeply $r->{alignment}, [3, 0, 0, 0, 3, 0, 2], 'align->{alignment}';
+
+my $cigar;
+$cigar = to_cigar $r->{alignment};
+is $cigar, '6M1D', 'to_cigar';
+$cigar = to_cigar $r->{alignment}, EDLIB_CIGAR_EXTENDED;
+is $cigar, '1X3=1X1=1D', 'to_cigar (extended)';
This page took 0.014312 seconds and 4 git commands to generate.