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 )