App-Sandy
view release on metacpan or search on metacpan
lib/App/Sandy/Role/Digest.pm view on Meta::CPAN
unless (%EXPRESSION_MATRIX && exists $EXPRESSION_MATRIX{$opts->{'expression-matrix'}}) {
die "Option expression-matrix='$opts->{'expression-matrix'}' does not exist into the database.\n",
"Please check '$progname expression' to see the available matrices\n";
}
}
}
sub execute {
my ($self, $opts, $args) = @_;
my $fasta_file = shift @$args;
my %default_opt = $self->default_opt;
$self->fill_opts($opts, \%default_opt);
my $report = $self->_quality_profile_report;
my $entry = $report->{$opts->{'quality-profile'}};
# Set if user wants a verbose log
$LOG_VERBOSE = $opts->{verbose};
# Override default 'count-loops-by'
if ($default_opt{'count-loops-by'} eq 'coverage') {
$opts->{'count-loops-by'} = 'number-of-reads' if exists $opts->{'number-of-reads'};
}
elsif ($default_opt{'count-loops-by'} eq 'number-of-reads') {
$opts->{'count-loops-by'} = 'coverage' if exists $opts->{'coverage'};
} else {
die "'count-lopps-by' must be defined"
}
# Now expression-matrix is an option
if ($opts->{'expression-matrix'}) {
$opts->{'seqid-weight'} = 'count';
}
# Override read-size if quality-profile comes from database
if ($opts->{'quality-profile'} ne 'poisson') {
# Override default or user-defined value
$opts->{'read-mean'} = $entry->{'mean'};
$opts->{'read-stdd'} = $entry->{'stdd'};
$opts->{'sequencing-error'} = $entry->{'error'};
$opts->{'sequencing-type'} = 'single-end' if $entry->{'type'} eq 'single-molecule';
}
# Sequence identifier
$opts->{'id'} ||= $opts->{'sequencing-type'} eq 'paired-end'
? $opts->{'paired-end-id'}
: $opts->{'single-end-id'};
# Append extra id
$opts->{'id'} .= " $opts->{'append-id'}" if defined $opts->{'append-id'};
# If bam, leave only the first field;
if ($opts->{'output-format'} =~ /^(bam|sam)$/) {
$opts->{'id'} = (split ' ' => $opts->{'id'})[0];
}
# In this case, try to make simulation less redundant
if ($opts->{'output-format'} =~ /fastq/ && $opts->{'sequencing-type'} eq 'paired-end'
&& $opts->{'join-paired-ends'}) {
# Try to guess if the user passed a char to distinguish single/paired-end reads
$opts->{'id'} =~ /%R/ || $opts->{'id'} =~ s/(\S+)/$1\/\%R/;
}
# Structural Variation
if ($opts->{'genomic-variation'}) {
my @svs = split(/,/ => join(',', @{ $opts->{'genomic-variation'} }));
@svs = uniq sort @svs;
$opts->{'genomic-variation'} = \@svs;
}
# Structural Variation Regex
if ($opts->{'genomic-variation-regex'}) {
my @sv_list = keys %{ $self->_genomic_variation_report };
my @sv_patterns = split(/,/ => join(',', @{ $opts->{'genomic-variation-regex'} }));
my @svs_rg;
for my $sv_pattern (@sv_patterns) {
my $pattern = qr/$sv_pattern/;
for (@sv_list) {
if (/$pattern/) {
push @svs_rg => $_;
}
}
}
my @svs;
if ($opts->{'genomic-variation'}) {
push @svs => @{ $opts->{'genomic-variation'} };
}
push @svs => @svs_rg;
@svs = uniq sort @svs;
$opts->{'genomic-variation'} = \@svs;
}
# Create output directory if it not exist
make_path($opts->{'output-dir'}, {error => \my $err_list});
my $err_dir;
if (@$err_list) {
for (@$err_list) {
my ($dir, $message) = %$_;
$err_dir .= "Problem creating '$dir': $message\n";
}
die "$err_dir\n";
}
# Concatenate output-dir to prefix
my $prefix = file($opts->{'output-dir'}, $opts->{prefix});
$opts->{prefix} = "$prefix";
#-------------------------------------------------------------------------------
# Log presentation header
#-------------------------------------------------------------------------------
my $time_stamp = localtime;
my $progname = $self->progname;
my $argv = $self->argv;
log_msg <<"HEADER";
--------------------------------------------------------
$progname - $time_stamp
( run in 1.129 second using v1.01-cache-2.11-cpan-39bf76dae61 )