diff --git a/.travis.yml b/.travis.yml index d890477..aea24f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,7 @@ language: perl perl: - "5.16" + - "5.22-shrplib" env: global: diff --git a/Build.PL b/Build.PL index 3bcb14c..045c515 100644 --- a/Build.PL +++ b/Build.PL @@ -30,13 +30,14 @@ my $requires = { 'Math::Round' => '0.06', 'MIME::Lite' => '3.024', 'Moose' => '0.93', + 'Moose::Meta::Class' => '0', 'Moose::Role' => '0.93', 'Moose::Util::TypeConstraints' => 0, 'MooseX::ClassAttribute' => 0, 'MooseX::Storage' => 0, - 'MooseX::StrictConstructor' => '0.08', 'Parallel::ForkManager' => 0, 'Perl6::Slurp' => '0.03', + 'Pod::Usage' => '0', 'POSIX' => '1.09', 'Readonly' => '1.03', 'Readonly::XS' => 0, diff --git a/Changes b/Changes index 520f3c3..906047a 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,15 @@ LIST OF CHANGES + - RefMaker: added extra dict symlink for RNA SeQc + - code changes to reduce number of warnings under Perl 5.22.2 + +release 50.11 + - seqchksum_merge.pl: + updated to generate chksums on the fly is given a bam file + added new column class (partition) to partition data when merging. + modified and extended tests. N.B. running the script on multiple bam files + should generate the same values as bamcat + bamseqchksum but the + order is no longer guaranteed to be the same - RefMaker: added function for longranger mkref and extended test release 50.10 diff --git a/MANIFEST b/MANIFEST index 8c125a8..5321bc6 100644 --- a/MANIFEST +++ b/MANIFEST @@ -57,6 +57,9 @@ t/data/fastq_split/2518_2_5_merge_part.sam t/data/fastq_split/Homo_sapiens.NCBI36.48.dna.all.fa t/data/fastq_split/seq_ids.txt t/data/good.sam +t/data/seqchksum_merge/merged.different.seqchksum +t/data/seqchksum_merge/group1.seqchksum +t/data/seqchksum_merge/group2.seqchksum t/data/java t/data/mixed.sam t/data/references/Homo_sapiens/1000Genomes_hs37d5/all/fasta/hs37d5.fa diff --git a/bin/FastaFormat b/bin/FastaFormat index cf53cd1..715bfe5 100644 --- a/bin/FastaFormat +++ b/bin/FastaFormat @@ -29,7 +29,7 @@ foreach (@ARGV) { next; } - ( -e $_ ) + ( -e ) ? ( push @fasta_list, $_ ) : ( warn "$_ not found. Skipping...\n" ); } diff --git a/bin/Ref_Maker b/bin/Ref_Maker index 7ba61c3..d8e46d9 100755 --- a/bin/Ref_Maker +++ b/bin/Ref_Maker @@ -150,21 +150,15 @@ sub main { ##no critic (Subroutines::ProhibitExcessComplexity) # samtools requires its index file to be in the same directory as the fasta # Check first that the samtools command worked above. if ($build{'samtools'}) { - eval { - my $source = "samtools/$files[0].fai"; - my $target = "fasta/$files[0].fai"; - croak 'samtools .fai file not found' if !-e $source; - - # This can fail if $target is a broken link. - ( -e $target ) && ( unlink $target ); - - symlink qq{../$source}, $target; - 1; - } or do { - carp "Error symlinking fai file: $EVAL_ERROR $SKIP_STRING"; - }; + create_symlink("samtools/$files[0].fai","fasta/$files[0].fai"); + } + + # RNA SeQc requires dict file in same directory as the fasta + if ($build{'picard'}) { + create_symlink("picard/$files[0].dict","fasta/$files[0].dict"); } + if (@failed) { my $message = 'WARNING: Task(s) failed, see Ref_Maker output for '. 'details: '.join(', ', @failed)."\n"; @@ -337,6 +331,26 @@ sub log_timestamp { return; } + +sub create_symlink{ + + my($source,$target) = @_; + + eval { + croak qq{$source file not found} if !-e $source; + + # This can fail if $target is a broken link. + ( -e $target ) && ( unlink $target ); + + symlink qq{../$source}, $target; + 1; + } or do { + carp "Error symlinking $target file: $EVAL_ERROR $SKIP_STRING"; + }; + + return; +} + sub _get_rm { my $rm_class = Moose::Meta::Class->create_anon_class( roles => [qw/npg_common::roles::software_location/]); @@ -437,6 +451,10 @@ Delete and previous version/attempt and create a fresh directory. Log a timestamp for the start or end (normal or aborted) of an aligner job. +=head2 create_symlink + +Create a symlink between a source and target + =head1 REQUIRED ARGUMENTS =head1 OPTIONS diff --git a/bin/seqchksum_merge.pl b/bin/seqchksum_merge.pl index 247c295..afac3fa 100755 --- a/bin/seqchksum_merge.pl +++ b/bin/seqchksum_merge.pl @@ -10,6 +10,8 @@ # -m : match (value for a given row/col position across input files is constant) # -n : no check, value in the initial input file for the column is copied to the output; comment # rows (where the row in the initial input file begins with '#') will also behave this way +# -p : partition the data in the input files using these values, within each partition all +# other columns are combined ########################################################################################################### use strict; @@ -31,12 +33,14 @@ Readonly::Scalar my $ACC => 1; Readonly::Scalar my $CONST => 2; Readonly::Scalar my $CHKSUM => 3; +Readonly::Scalar my $PARTITION => 4; my %fnc_list = ( $NOOP => \&noop_foldin, $ACC => \&addup_foldin, $CONST => \&const_foldin, $CHKSUM => \&chksum_foldin, + $PARTITION => \&partition_foldin, ); my %flag_fnc = ( @@ -44,15 +48,16 @@ c => $CHKSUM, m => $CONST, n => $NOOP, + p => $PARTITION, ); my %opts; -getopts('a:c:m:n:h', \%opts); +getopts('a:c:m:n:p:l:h', \%opts); # default function map matches the layout of bamseqchksum output (version 0.0.183 currently) my @fnc_map = (); my @default_fnc_map = ( - $CONST, - $CONST, + $PARTITION, + $PARTITION, $ACC, $CONST, $CHKSUM, @@ -62,7 +67,7 @@ ); if($opts{h}) { - croak basename($PROGRAM_NAME), qq{ [-a ; - close $f or croak qq[Error: Failed to open $fn for input]; + my @inrows = (); + if($fn =~ m/q[.](sam|bam|cram)$/smx) { + open my $f, q[-|], qq[cat $fn | bamseqchksum inputformat=$1] or croak qq[Error: Failed to open $fn for input]; + @inrows = <$f>; + close $f or croak qq[Error: Failed to run bamseqchecksum on $fn for input]; + } + else { + open my $f, q[<], $fn or croak qq[Error: Failed to open $fn for input]; + @inrows = <$f>; + close $f or croak qq[Error: Failed to open $fn for input]; + } + if($opts{l}) { + @inrows = splice @inrows, 0, $opts{l}; + } chomp @inrows; - if(not $outrows) { # determine operating parameters, finish setting up fnc_map from command line flags ($outrows, $column_count) = initialise_outrows(\@inrows, \@fnc_map, \@default_fnc_map, $fn); } @@ -91,14 +106,8 @@ # convert any chksum numbers back to hex strings $outrows = chksums_to_hex_strings($outrows, \@fnc_map); -# print results -for my $row (@{$outrows}) { - if(ref $row eq q[ARRAY]) { - $row = join "\t", @{$row}; - } - - print $row, "\n" or carp $OS_ERROR; -} +# output merged seqchksums +output_merged_seqchksum($outrows); exit; @@ -140,9 +149,12 @@ sub count_tab_columns { } sub initialise_outrows { - my ($inrows, $fnc_map, $default_fnc_map, $fn) = @_; - my $init_rows; +## no critic (Variables::ProhibitReusedNames) + my ($inrows, $fnc_map, $default_fnc_map, $fn) = @_; my $col_count; + my $init_rows; + my $outrows; + my $partition; $col_count = count_tab_columns($inrows, $fn); if($col_count <= 0) { @@ -159,6 +171,8 @@ sub initialise_outrows { } # convert non-comment rows into arrays + $init_rows = [ map { /^\#/smx ? $_ :[ split /\t/smx ]} @{$inrows} ]; + # convert non-comment rows into arrays $init_rows = [ map { $_ !~ /^\#/smx? [ (split /\t/smx, $_) ]: $_; } @{$inrows} ]; if(not @{$init_rows}) { croak q[No input in initial input file ], $fn; @@ -166,44 +180,74 @@ sub initialise_outrows { # convert hex strings to decimals in columns containing checksum values for my $rowidx (0..$#{$init_rows}) { - ## no critic (ControlStructures::ProhibitUnlessBlocks ControlStructures::ProhibitPostfixControls) - next unless(ref $init_rows->[$rowidx]); # skip comment rows - for my $colidx (0..$col_count-1) { - if($fnc_map->[$colidx] == $CHKSUM) { - $init_rows->[$rowidx]->[$colidx] = hex($init_rows->[$rowidx]->[$colidx]); - } - } + if(ref $init_rows->[$rowidx]) { + $partition = undef; + for my $colidx (0..$col_count-1) { + if($fnc_map->[$colidx] == $PARTITION) { + $partition .= (defined $partition ? q{:} : q{}) . $init_rows->[$rowidx]->[$colidx]; + } + if($fnc_map->[$colidx] == $CHKSUM) { + $init_rows->[$rowidx]->[$colidx] = hex($init_rows->[$rowidx]->[$colidx]); + } + } + ## no critic (ControlStructures::ProhibitPostfixControls) + $partition = 'NA' unless(defined $partition); + for my $colidx (0..$col_count-1) { + $outrows->{$partition}->[$colidx] = $init_rows->[$rowidx]->[$colidx]; + } + } + else { + # comment row + $partition = q[comments]; + $outrows->{$partition}->{$init_rows->[$rowidx]}++; + } } - return ($init_rows, $col_count); + return ($outrows, $col_count); } sub combine_inrows { my ($init_rows, $inrows, $col_count, $fn) = @_; + my $partition; - # first check layout consistency with initial input - if(@{$inrows} != @{$init_rows}) { - croak q[Error: number of rows is not consistent between input files (first file has ], scalar @{$init_rows}, qq[ rows, $fn has ], scalar @{$inrows}, q[)]; - } + # first check layout consistency with initial input if((my $c=count_tab_columns($inrows, $fn)) != $col_count) { croak q[Error: column count inconsistent between initial input and ], $fn, q[ ( ], $col_count, q[ != ], $c , q[)]; } - for my $rowidx (0..$#{$init_rows}) { - my $outrow = $init_rows->[$rowidx]; - - ## no critic (ControlStructures::ProhibitUnlessBlocks ControlStructures::ProhibitPostfixControls) - next unless(ref $outrow); # skip comment rows - - unless(ref $outrow eq q[ARRAY]) { croak q[Error: non-comment row should be an ARRAY ref, not ], ref $outrow; } - - # combine the incoming values using the method specified by the function map for the column - my @inrow = (split /\t/smx, $inrows->[$rowidx]); - for my $colidx (0..$col_count-1) { - if(not defined ($outrow->[$colidx] = $fnc_list{$fnc_map[$colidx]}->($outrow->[$colidx], $inrow[$colidx]))) { - croak q[Error: Failed to merge value for column ], $colidx, q[ from file ],$fn; - } - } + for my $row (@{$inrows}) { + my $inrow = $row !~ /^\#/smx? [ (split /\t/smx, $row) ]: $row; + if(ref $inrow) { + $partition = undef; + for my $colidx (0..$col_count-1) { + if($fnc_map[$colidx] == $PARTITION) { + $partition .= (defined $partition ? q{:} : q{}) . $inrow->[$colidx]; + } + } + ## no critic (ControlStructures::ProhibitPostfixControls) + $partition = 'NA' unless(defined $partition); + if (exists $init_rows->{$partition}) { + my $outrow = $init_rows->{$partition}; + for my $colidx (0..$col_count-1) { + if(not defined($outrow->[$colidx] = $fnc_list{$fnc_map[$colidx]}->($outrow->[$colidx], $inrow->[$colidx]))) { + croak q[Error: Failed to merge value for column ], $colidx, q[ from file ],$fn; + } + } + } + else { + for my $colidx (0..$col_count-1) { + if($fnc_map[$colidx] == $CHKSUM) { + $inrow->[$colidx] = hex($inrow->[$colidx]); + } + $init_rows->{$partition}->[$colidx] = $inrow->[$colidx]; + } + } + } + else { + # comment row + $partition = q[comments]; + $init_rows->{$partition}->{$inrow}++; + } } return; @@ -216,6 +260,12 @@ sub noop_foldin { return $outval; } +sub partition_foldin { + my ($outval, $inval) = @_; + + return $outval; +} + sub addup_foldin { my ($outval, $inval) = @_; @@ -247,12 +297,12 @@ sub chksum_foldin { sub chksums_to_hex_strings { my ($out, $fnc_map) = @_; - for my $rowidx (0..$#{$outrows}) { + for my $partition (keys %{$outrows}) { ## no critic (ControlStructures::ProhibitUnlessBlocks ControlStructures::ProhibitPostfixControls) - next unless(ref $outrows->[$rowidx]); # skip comment rows + next unless(ref $outrows->{$partition} eq q[ARRAY]); # skip comment rows for my $colidx (0..$column_count-1) { if($fnc_map->[$colidx] == $CHKSUM) { - $outrows->[$rowidx]->[$colidx] = sprintf '%x', $outrows->[$rowidx]->[$colidx]; + $outrows->{$partition}->[$colidx] = sprintf '%x', $outrows->{$partition}->[$colidx]; } } } @@ -260,3 +310,42 @@ sub chksums_to_hex_strings { return $out; } +# output merged seqchksums +sub output_merged_seqchksum { + ## no critic (ControlStructures::ProhibitPostfixControls) + my ($outrow) = @_; + + # print results in the following order comments, col0=all rows, col0="" rows and then all other rows + my $partition = q[comments]; + if (exists $outrows->{$partition}) { + for my $row (sort keys %{$outrows->{$partition}}) { + print $row, "\n" or carp $OS_ERROR; + } + } + for my $partition (sort keys %{$outrows}) { + next unless($partition =~ /^all/smx); + my $row = $outrows->{$partition}; + if(ref $row eq q[ARRAY]) { + $row = join "\t", @{$row}; + } + print $row, "\n" or carp $OS_ERROR; + } + for my $partition (sort keys %{$outrows}) { + next unless($partition =~ /^:/smx); + my $row = $outrows->{$partition}; + if(ref $row eq q[ARRAY]) { + $row = join "\t", @{$row}; + } + print $row, "\n" or carp $OS_ERROR; + } + for my $partition (sort keys %{$outrows}) { + next if $partition =~ /^comments$|^all|^:/smx; + my $row = $outrows->{$partition}; + if(ref $row eq q[ARRAY]) { + $row = join "\t", @{$row}; + } + print $row, "\n" or carp $OS_ERROR; + } + + return; +} diff --git a/lib/npg_common/fastqcheck.pm b/lib/npg_common/fastqcheck.pm index c404582..7b33d24 100644 --- a/lib/npg_common/fastqcheck.pm +++ b/lib/npg_common/fastqcheck.pm @@ -60,8 +60,8 @@ Readonly::Scalar our $RESULT_CLASS_NAME => q[Fastqcheck]; subtype 'FastqcheckFile' => as 'Str' - => where {$_ =~ /[.]fastqcheck$/imsx } - => message {"$_ does not have .fastqcheck extension"}; + => where { /[.]fastqcheck$/imsx } + => message {"$_ does not have .fastqcheck extension"}; subtype 'NonNegativeInteger' => as 'Int' => where { $_ >= 0; } diff --git a/lib/npg_common/roles/software_location.pm b/lib/npg_common/roles/software_location.pm index 2a3fe8b..f5f4cdd 100644 --- a/lib/npg_common/roles/software_location.pm +++ b/lib/npg_common/roles/software_location.pm @@ -21,7 +21,7 @@ our $VERSION = '0'; Readonly::Array my @TOOLS => qw/bwa bwa0_6 samtools samtools_irods bowtie java/; subtype 'NpgCommonResolvedPathExecutable' - => where { (abs_path($_) eq $_) && ( -x $_) }, + => where { (abs_path($_) eq $_) && ( -x ) }, => as 'Str', => message { ($_ || q[]). ' is not an executable' }; coerce 'NpgCommonResolvedPathExecutable', @@ -48,7 +48,7 @@ foreach my $tool ( @TOOLS ) { } subtype 'NpgCommonResolvedPathJarFile' - => where { ( -r $_) && (abs_path($_) eq $_) }, + => where { ( -r ) && (abs_path($_) eq $_) }, => as 'Str'; coerce 'NpgCommonResolvedPathJarFile', from 'Str', diff --git a/t/00-critic.t b/t/00-critic.t index fc3ffdf..20402f2 100644 --- a/t/00-critic.t +++ b/t/00-critic.t @@ -31,6 +31,7 @@ if($EVAL_ERROR) { 'ProhibitLongChainsOfMethodCalls' ], -profile => 't/perlcriticrc', + -verbose => "%m at %f line %l, policy %p\n", ); all_critic_ok(); } diff --git a/t/10-refmaker.t b/t/10-refmaker.t index b9c4bf5..efc333a 100755 --- a/t/10-refmaker.t +++ b/t/10-refmaker.t @@ -1,6 +1,6 @@ use strict; use warnings; -use Test::More tests => 84; +use Test::More tests => 85; use Cwd qw/abs_path getcwd/; use File::Temp qw/tempdir/; use File::Slurp; @@ -12,7 +12,7 @@ use JSON; SKIP: { skip 'Third party bioinformatics tools required. Set TOOLS_INSTALLED to true to run.', - 84 unless ($ENV{'TOOLS_INSTALLED'}); + 85 unless ($ENV{'TOOLS_INSTALLED'}); my $startDir = getcwd(); my $fastaMaster = abs_path('t/data/references/E_coli/K12/fasta/E-coli-K12.fa'); unless (-e $fastaMaster) { @@ -33,6 +33,8 @@ SKIP: { # can't use checksum on Picard .dict, as it contains full path to fasta file my $picard = "picard/E-coli-K12.fa.dict"; ok(-e $picard, "Picard .dict file exists"); + my $picardsl = "fasta/E-coli-K12.fa.dict"; + ok(-e $picardsl, "Picard .dict symlink exists"); ok(-e 'smalt/E-coli-K12.fa.sma', 'Smalt .sma file exists'); diff --git a/t/10-seqchksum_merge.t b/t/10-seqchksum_merge.t index d99c06a..aa71939 100755 --- a/t/10-seqchksum_merge.t +++ b/t/10-seqchksum_merge.t @@ -25,6 +25,10 @@ is(system("$startDir/bin/seqchksum_merge.pl"), 0, 'seqchksum_merge.pl exit statu is(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.seqchksum $seqchksum_data/phix.seqchksum > $tmpdir/merged.matching.seqchksum"), 0, 'seqchksum_merge.pl create matching test output exit status'); is(system("cmp -s $tmpdir/merged.matching.seqchksum $seqchksum_data/merged.seqchksum"), 0, 'seqchksum_merge.pl matching cmp exit status'); +# the files used for merge contain different read groups +is(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/group1.seqchksum $seqchksum_data/group2.seqchksum > $tmpdir/merged.different.seqchksum"), 0, 'seqchksum_merge.pl create matching test output exit status'); +is(system("cmp -s $tmpdir/merged.different.seqchksum $seqchksum_data/merged.different.seqchksum"), 0, 'seqchksum_merge.pl different read groups exit status'); + # the files used for the merge do not "partition" the reads in the combined file (extra occurrence of target.seqchksum), so comparison fails is(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.seqchksum $seqchksum_data/phix.seqchksum $seqchksum_data/target.seqchksum > $tmpdir/merged.extra_input.seqchksum"), 0, 'seqchksum_merge.pl create test output 2 exit status'); isnt(system("cmp -s $tmpdir/merged.extra_input.seqchksum $seqchksum_data/merged.seqchksum"), 0, 'seqchksum_merge.pl extra component file cmp exit status'); @@ -34,11 +38,9 @@ is(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/phix.seqchksum > $tm isnt(system("cmp -s $tmpdir/merged.missing_input.seqchksum $seqchksum_data/merged.seqchksum"), 0, 'seqchksum_merge.pl missing component file cmp exit status'); # errors because format of input files is not consistent -isnt(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.missing_row.seqchksum $seqchksum_data/phix.seqchksum > /dev/null"), 0, 'seqchksum_merge.pl input missing row status'); isnt(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.missing_col.seqchksum $seqchksum_data/phix.seqchksum > /dev/null"), 0, 'seqchksum_merge.pl input missing col status'); -isnt(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.extra_row.seqchksum $seqchksum_data/phix.seqchksum > /dev/null"), 0, 'seqchksum_merge.pl input extra row status'); isnt(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.extra_col.seqchksum $seqchksum_data/phix.seqchksum > /dev/null"), 0, 'seqchksum_merge.pl input extra col status'); -# column 3 flagged (by default) as constant does not match across input files +# column 4 flagged (by default) as constant does not match across input files isnt(system("$startDir/bin/seqchksum_merge.pl $seqchksum_data/target.seqchksum $seqchksum_data/phix.inconstant.seqchksum > /dev/null"), 0, 'seqchksum_merge.pl inconstant constant exit status'); # Initial input file contains only comments. No useful output, but not an error. diff --git a/t/data/seqchksum_merge/group1.seqchksum b/t/data/seqchksum_merge/group1.seqchksum new file mode 100644 index 0000000..d3889ce --- /dev/null +++ b/t/data/seqchksum_merge/group1.seqchksum @@ -0,0 +1,7 @@ +### set count b_seq name_b_seq b_seq_qual b_seq_tags(BC,FI,QT,RT,TC) +all all 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb +all pass 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb + all 0 1 1 1 1 + pass 0 1 1 1 1 +99999_1#1 all 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb +99999_1#1 pass 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb diff --git a/t/data/seqchksum_merge/group2.seqchksum b/t/data/seqchksum_merge/group2.seqchksum new file mode 100644 index 0000000..91dbcb7 --- /dev/null +++ b/t/data/seqchksum_merge/group2.seqchksum @@ -0,0 +1,7 @@ +### set count b_seq name_b_seq b_seq_qual b_seq_tags(BC,FI,QT,RT,TC) +all all 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 +all pass 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 + all 0 1 1 1 1 + pass 0 1 1 1 1 +99999_1#2 all 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 +99999_1#2 pass 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 diff --git a/t/data/seqchksum_merge/merged.different.seqchksum b/t/data/seqchksum_merge/merged.different.seqchksum new file mode 100644 index 0000000..ac7e139 --- /dev/null +++ b/t/data/seqchksum_merge/merged.different.seqchksum @@ -0,0 +1,9 @@ +### set count b_seq name_b_seq b_seq_qual b_seq_tags(BC,FI,QT,RT,TC) +all all 72039843 198a3c29 19bb0b80 3c0564 2f1788da +all pass 72039843 198a3c29 19bb0b80 3c0564 2f1788da + all 0 1 1 1 1 + pass 0 1 1 1 1 +99999_1#1 all 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb +99999_1#1 pass 34667190 5438b5d9 6fc0ed7e 2b891c0c 14076afb +99999_1#2 all 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 +99999_1#2 pass 37372653 a36c8d 1c74e5a5 1477d82b 4db53ad7 diff --git a/t/data/seqchksum_merge/phix.inconstant.seqchksum b/t/data/seqchksum_merge/phix.inconstant.seqchksum index ae921dd..c112cc1 100644 --- a/t/data/seqchksum_merge/phix.inconstant.seqchksum +++ b/t/data/seqchksum_merge/phix.inconstant.seqchksum @@ -1,5 +1,5 @@ ### set count b_seq name_b_seq b_seq_qual b_seq_tags(BC,FI,QT,RT,TC) -all all 11108 1d29099c 33ed05ea 620d3430 1d29099c +all all 11108 a 1d29099c 33ed05ea 620d3430 1d29099c all past 11074 30c317c 23f48de9 4733d3d5 30c317c all 0 1 1 1 1 pass 0 1 1 1 1