summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Tille <tille@debian.org>2022-11-05 20:25:56 +0100
committerÉtienne Mollier <emollier@debian.org>2022-11-05 20:25:56 +0100
commit0e9ff8194f337bb4ec66fda389dd99eb19a05b0b (patch)
tree96e0330ca869b4e91214524174bc3abb36f6e696
parentd26dfc9a18a5eff0a8072fb23cbd00df33917b9a (diff)
Math::Random is in package libmath-random-perl which is
Last-Update: Mon, 09 Jan 2017 11:13:13 +0100 unfortunately in non-free thus we can not use it for testing while building this package. Thus the occurrences of references and the surrounding code is removed here. Gbp-Pq: Name skip_test_requiring_non-free_libmath-random-perl.patch
-rw-r--r--Makefile9
-rw-r--r--example/reads/simulate.pl115
2 files changed, 4 insertions, 120 deletions
diff --git a/Makefile b/Makefile
index 30887fb..b7753ab 100644
--- a/Makefile
+++ b/Makefile
@@ -527,12 +527,12 @@ install: all
done
.PHONY: simple-test
-simple-test: perl-deps both both-debug both-sanitized
+simple-test: all
eval `perl -I $(CURDIR)/.tmp/lib/perl5 -Mlocal::lib=$(CURDIR)/.tmp` ; \
sh ./scripts/test/simple_tests.sh
.PHONY: random-test
-random-test: all perl-deps
+random-test: all
eval `perl -I $(CURDIR)/.tmp/lib/perl5 -Mlocal::lib=$(CURDIR)/.tmp` ; \
sh ./scripts/sim/run.sh $(if $(NUM_CORES), $(NUM_CORES), 2)
@@ -543,8 +543,7 @@ perl-deps:
fi
DL=$$( ( which wget >/dev/null 2>&1 && echo "wget --no-check-certificate -O-" ) || echo "curl -L") ; \
$$DL http://cpanmin.us | perl - -l $(CURDIR)/.tmp App::cpanminus local::lib ; \
- eval `perl -I $(CURDIR)/.tmp/lib/perl5 -Mlocal::lib=$(CURDIR)/.tmp` ; \
- $(CURDIR)/.tmp/bin/cpanm --force File::Which Math::Random Clone Test::Deep Sys::Info ; \
+ eval `perl -I $(CURDIR)/.tmp/lib/perl5 -Mlocal::lib=$(CURDIR)/.tmp`
.PHONY: static-libs
static-libs:
@@ -601,7 +600,7 @@ sra-deps:
fi ;
.PHONY: test
-test: simple-test random-test
+test: simple-test
.PHONY: clean
clean:
diff --git a/example/reads/simulate.pl b/example/reads/simulate.pl
index cdf7c51..ac80c04 100644
--- a/example/reads/simulate.pl
+++ b/example/reads/simulate.pl
@@ -33,7 +33,6 @@
use strict;
use warnings;
use Carp;
-use Math::Random qw(random_normal random_exponential);
use Getopt::Long;
use List::Util qw(max min);
@@ -105,7 +104,6 @@ $rdlen_min = $rdlen_min || 40; # min read length (added to exponential draw)
$frag_av = $frag_av || 250; # mean fragment len
$frag_sd = $frag_sd || 45; # s.d. when drawing frag len from normal dist
my @fraglens = (); # fragment lengths (for paired)
-my @readlens = (); # read/end lengths
if($long) {
$nreads = 6000;
@@ -134,77 +132,15 @@ for(0..length($rf)-1) {
}
print STDERR "Adding microindels...\n";
-my $microgap = 0;
-{
- my $newrf = "";
- my $nins = int(length($rf) * 0.0005 + 0.5);
- my $ndel = int(length($rf) * 0.0005 + 0.5);
- $microgap = $nins + $ndel;
- my %indel = ();
- for(1..$nins) {
- my $off = int(rand(length($rf)));
- $indel{$off}{ty} = "ins";
- $indel{$off}{len} = int(random_exponential(1, 3))+1;
- }
- for(1..$ndel) {
- my $off = int(rand(length($rf)));
- $indel{$off}{ty} = "del";
- $indel{$off}{len} = int(random_exponential(1, 3))+1;
- }
- my $lasti = 0;
- for my $rfi (sort {$a <=> $b} keys %indel) {
- if($rfi > $lasti) {
- $newrf .= substr($rf, $lasti, $rfi - $lasti);
- $lasti = $rfi;
- }
- if($indel{$rfi}{ty} eq "ins") {
- $newrf .= rand_dna($indel{$rfi}{len});
- } else {
- $lasti += $indel{$rfi}{len};
- }
- }
- if($lasti < length($rf)-1) {
- $newrf .= substr($rf, $lasti, length($rf) - $lasti - 1);
- }
- $rf = $newrf;
-}
print STDERR "Adding larger rearrangements...\n";
-my $nrearr = int(random_exponential(1, 3)+1);
-for(0..$nrearr) {
- my $break = int(rand(length($rf)));
- my $before = substr($rf, 0, $break);
- my $after = substr($rf, $break);
- $after = revcomp($after) if int(rand()) == 0;
- $rf = $after.$before;
-}
print STDERR "Added $nsnp SNPs\n";
-print STDERR "Added $microgap Microindels\n";
-print STDERR "Added $nrearr Rearrangements\n";
#
# Simulate reads
#
-print STDERR "Picking read and fragment lengths...\n";
-# Pick random read lengths
-if(defined($rdlen_exact)) {
- @readlens = ($rdlen_exact) x ($nreads * ($paired ? 2 : 1));
-} else {
- @readlens = random_exponential($nreads * ($paired ? 2 : 1), $rdlen_av);
- @readlens = map int, @readlens;
- @readlens = map { int($_ + $rdlen_min) } @readlens;
-}
-if($paired) {
- # Pick random fragment and read lengths
- @fraglens = random_normal($nreads, $frag_av, $frag_sd);
- @fraglens = map int, @fraglens;
- for(my $i = 0; $i < scalar(@readlens); $i += 2) {
- $fraglens[$i/2] = max($fraglens[$i/2], $readlens[$i] + $readlens[$i+1]);
- }
-}
-
sub rand_quals($) {
my $ret = "";
my $upper = (rand() < 0.2 ? 11 : 40);
@@ -259,61 +195,10 @@ if($paired) {
}
# Possibly reverse complement
$fstr = revcomp($fstr) if (int(rand(2)) == 0);
- # Get reads 1 and 2
- my $rdlen1 = min($readlens[2*$i], $flen);
- my $rdlen2 = min($readlens[2*$i+1], $flen);
- my $rd1 = substr($fstr, 0, $rdlen1);
- my $rd2 = substr($fstr, length($fstr)-$rdlen2);
- length($rd2) == $rdlen2 || die "Got ".length($rd2)." expected $rdlen2";
- # Reverse complement 2 to simulate --fr orientation
- $rd2 = revcomp($rd2);
- # Generate random quality values
- my $qu1 = rand_quals($rdlen1);
- $rd1 = add_seq_errs($rd1, $qu1);
- length($rd1) == length($qu1) || die;
- my $qu2 = rand_quals($rdlen2);
- $rd2 = add_seq_errs($rd2, $qu2);
- length($rd2) == length($qu2) || die;
- # Print
- print RD1 "\@r".($i+1)."\n$rd1\n+\n$qu1\n";
- print RD2 "\@r".($i+1)."\n$rd2\n+\n$qu2\n";
}
close(RD1);
close(RD2);
print STDERR "Made pairs: reads_1.fq/reads_2.fq\n";
-} else {
- open(RD1, ">${prefix}.fq") || die;
- for(my $i = 0; $i < scalar(@readlens); $i++) {
- # Extract fragment
- my $rdlen = $readlens[$i];
- my $off = int(rand($rflen - ($rdlen-1)));
- my $rd = substr($rf, $off, $rdlen);
- # Check if it has too many Ns
- my %ccnt = ();
- for my $j (1..$rdlen) {
- my $c = uc substr($rd, $j, 1);
- $ccnt{tot}++;
- $ccnt{non_acgt}++ if ($c ne "A" && $c ne "C" && $c ne "G" && $c ne "T");
- $ccnt{$c}++;
- }
- # Skip if it has >10% Ns
- if(1.0 * $ccnt{non_acgt} / $ccnt{tot} > 0.10) {
- $i--;
- next;
- }
- length($rd) == $rdlen || die;
- # Possibly reverse complement
- $rd = revcomp($rd) if int(rand(2)) == 0;
- # Generate random quality values
- my $qu = rand_quals($rdlen);
- length($rd) == length($qu) || die "length(seq) = ".length($rd).", length(qual) = ".length($qu);
- $rd = add_seq_errs($rd, $qu);
- length($rd) == length($qu) || die "length(seq) = ".length($rd).", length(qual) = ".length($qu);
- # Print
- print RD1 "\@r".($i+1)."\n$rd\n+\n$qu\n";
- }
- close(RD1);
- print STDERR "Made unpaired reads: $prefix.fq\n";
}
print STDERR "DONE\n";