App-Sandy
view release on metacpan or search on metacpan
lib/App/Sandy/Seq/PairedEnd.pm view on Meta::CPAN
my $self = shift;
App::Sandy::Read::PairedEnd->new(
sequencing_error => $self->sequencing_error,
fragment_mean => $self->fragment_mean,
fragment_stdd => $self->fragment_stdd
);
}
override '_build_sym_table' => sub {
my $self = shift;
my $sym_table = super();
my %sym_table_paired_end = (
'%M' => '$info->{fragment_mean}',
'%D' => '$info->{fragment_stdd}',
'%f' => '$info->{fragment_size}',
'%S' => '$info->{fragment_start}',
'%E' => '$info->{fragment_end}',
'%X' => '$info->{fragment_start_ref}',
'%Z' => '$info->{fragment_end_ref}',
'%F' => '$info->{fragment_strand}',
'%A' => '$info->{mate_start_ref}',
'%B' => '$info->{mate_end_ref}',
'%T' => '$info->{mate_start}',
'%N' => '$info->{mate_end}',
'%L' => '$info->{tlen}',
);
@$sym_table{keys %sym_table_paired_end} = values %sym_table_paired_end;
return $sym_table;
};
override '_build_info' => sub {
my $self = shift;
my $info = super();
my %info_paired_end = (
fragment_mean => $self->fragment_mean,
fragment_stdd => $self->fragment_stdd
);
@$info{keys %info_paired_end} = values %info_paired_end;
return $info;
};
sub sprint_seq {
my ($self, $id, $num, $seq_id, $seq_id_type, $ptable, $ptable_size, $is_leader, $rng, $blacklist) = @_;
my $read_size = $self->_get_read_size($rng);
# In order to work third gen sequencing
# simulator, it is necessary to truncate
# the read according to the ptable size
if ($read_size > $ptable_size) {
$read_size = $ptable_size;
}
my ($read1_ref, $read2_ref, $attr) = $self->gen_read($ptable, $ptable_size,
$read_size, $is_leader, $rng, $blacklist);
my $annot_a = $attr->{annot};
$self->_set_info(
'id' => $id,
'num' => $num,
'seq_id' => $seq_id,
'seq_id_type' => $seq_id_type,
'read_size' => $read_size,
'fragment_start' => $attr->{start},
'fragment_end' => $attr->{end},
'fragment_start_ref' => $attr->{start_ref},
'fragment_end_ref' => $attr->{end_ref},
'fragment_size' => $attr->{end} - $attr->{start} + 1,
'fragment_strand' => $is_leader ? 'P' : 'M',
'var' => @$annot_a ? join ',' => @$annot_a : 'none'
);
return $is_leader
? ($self->_sprint_seq($read1_ref, $read_size, 1, $attr, 1, $rng), $self->_sprint_seq($read2_ref, $read_size, 2, $attr, 0, $rng))
: ($self->_sprint_seq($read2_ref, $read_size, 1, $attr, 0, $rng), $self->_sprint_seq($read1_ref, $read_size, 2, $attr, 1, $rng));
}
sub _sprint_seq {
my ($self, $read_ref, $read_size, $read_num, $attr, $is_leader, $rng) = @_;
if ($is_leader) {
my $error_a = $attr->{error1};
my $tlen = $attr->{end2} - $attr->{end1};
$self->_set_info(
'start' => $attr->{start1},
'end' => $attr->{end1},
'start_ref' => $attr->{start_ref},
'end_ref' => $attr->{read_end_ref},
'mate_start' => $attr->{start2},
'mate_end' => $attr->{end2},
'mate_start_ref' => $attr->{end_ref},
'mate_end_ref' => $attr->{read_start_ref},
'read' => $read_num,
'strand' => 'P',
'tlen' => $tlen > 0 ? $tlen : 0,
'error' => @$error_a ? join ',' => @$error_a : 'none'
);
} else {
my $error_a = $attr->{error2};
my $tlen = $attr->{end1} - $attr->{end2};
$self->_set_info(
'start' => $attr->{start2},
'end' => $attr->{end2},
'start_ref' => $attr->{end_ref},
'end_ref' => $attr->{read_start_ref},
'mate_start' => $attr->{start1},
'mate_end' => $attr->{end1},
'mate_start_ref' => $attr->{start_ref},
'mate_end_ref' => $attr->{read_end_ref},
'read' => $read_num,
'strand' => 'M',
'tlen' => $tlen < 0 ? $tlen : 0,
'error' => @$error_a ? join ',' => @$error_a : 'none'
);
}
my $seqid = $self->_gen_id($self->_info);
my $quality_ref = $self->gen_quality($read_size, $rng);
return $self->_gen_seq(\$seqid, $read_ref, $quality_ref, $read_num, $read_size);
}
__END__
=pod
=encoding UTF-8
( run in 1.256 second using v1.01-cache-2.11-cpan-39bf76dae61 )