CracTools
view release on metacpan or search on metacpan
lib/CracTools/SAMReader/SAMline.pm view on Meta::CPAN
return $self;
}
sub isFlagged {
my $self = shift;
my $flag = shift;
return $self->flag & $flag;
}
sub getStrand {
my $self = shift;
if($self->isFlagged($flags{REVERSE_COMPLEMENTED})) {
return -1;
} else {
return 1;
}
}
sub getOriginalSeq {
my $self = shift;
if($self->isFlagged($flags{REVERSE_COMPLEMENTED})) {
return CracTools::Utils::reverseComplement($self->seq);
} else {
return $self->seq;
}
}
sub getLocAsCracFormat {
my $self = shift;
return $self->rname."|".$self->getStrand.",".$self->pos;
}
sub getPatch {
my $self = shift;
my $line_number = shift;
croak("Cannot generate patch without the line number in argument") unless defined $line_number;
if($self->updatedLine ne $self->line) {
my $line1 = $self->line;
my $line2 = $self->updatedLine;
chomp($line1);
chomp($line2);
return "@@ -$line_number,1 +$line_number,1 @@\n-$line1\n+$line2";
} else {
return 0;
}
}
sub line {
my $self = shift;
return $self->{line};
}
sub updatedLine {
my $self = shift;
my $updated_line = shift;
if(defined $updated_line) {
$self->{updated_line} = $updated_line;
return 1;
} elsif (!defined $self->{updated_line}) {
return $self->line;
} else {
return $self->{updated_line};
}
}
sub qname {
my $self = shift;
my $new_qname = shift;
if(defined $new_qname) {
$self->{qname} = $new_qname;
}
return $self->{qname};
}
sub flag {
my $self = shift;
my $new_flag = shift;
if(defined $new_flag) {
$self->{flag} = $new_flag;
}
return $self->{flag};
}
sub rname {
my $self = shift;
my $new_rname = shift;
if(defined $new_rname) {
$self->{rname} = $new_rname;
}
return $self->{rname};
}
sub chr {
my $self = shift;
$self->rname(@_);
}
sub pos {
my $self = shift;
my $new_pos = shift;
if(defined $new_pos) {
$self->{pos} = $new_pos;
}
return $self->{pos};
}
sub mapq {
lib/CracTools/SAMReader/SAMline.pm view on Meta::CPAN
score => $score,
);
} elsif($event_type eq 'undetermined') {
%event_hash = ( message => $event_infos,
);
} elsif($event_type eq 'bioundetermined') {
my ($pos,$message) = $event_infos =~ /([^:]+):(.*)/;
%event_hash = ( pos => $pos,
message => $message,
);
}
if (keys %event_hash > 1) {
$event_hash{event_id} = $event_id;
$event_hash{break_id} = $event_break_id;
$event_hash{event_type} = $event_type;
$self->addEvent(\%event_hash);
}
}
}
## If we have only load a specific event type
#if(defined $event_type_to_load) {
# $self->{$event_type_to_load}{loaded} = 1;
## Else we have load every events.
#} else {
# $self->{events}{loaded} = 1;
#}
}
}
sub addEvent {
my $self = shift;
my $event = shift;
my $event_type = $event->{event_type};
if(defined $self->{events}{$event_type}) {
push(@{$self->{events}{$event_type}},$event);
} else {
$self->{events}{$event_type} = [$event];
}
}
sub removeEvent {
my $self = shift;
my $delete_event = shift;
my $type = $delete_event->{event_type};
if(defined $type && defined $self->{events}{$type}) {
my $i = 0;
foreach my $event (@{$self->{events}{$type}}) {
if($event eq $delete_event) {
splice @{$self->{events}{$type}}, $i, 1;
return 1;
}
$i++;
}
}
return 0;
}
sub updateEvent {
my $self = shift;
my $event = shift;
my $new_event_type = shift;
my %new_event = @_;
# Update new event with old break id and event id
$new_event{event_type} = $new_event_type;
$new_event{event_id} = $event->{event_id};
$new_event{break_id} = $event->{break_id};
if($self->removeEvent($event)) {
# Catch warnings on string concatenation that correspond to missing
# field in the hash for the event to update
local $SIG{'__WARN__'} = sub {croak("Invalid event hash for event type '$new_event_type'");};
my $base_XE = 'XE:Z:'.$new_event{event_id}.':'.$new_event{break_id};
my $new_XE = $base_XE . ':';
if($new_event_type eq 'Junction') {
my $loc = compressCracLoc($new_event{loc}{chr},$new_event{loc}{pos},$new_event{loc}{strand});
$new_XE .= $new_event_type.':'.
$new_event{type}.':'.
$new_event{pos}.':'.
$loc.':'.
$new_event{gap};
} elsif($new_event_type eq 'Ins' || $new_event_type eq 'Del') {
my $loc = compressCracLoc($new_event{loc}{chr},$new_event{loc}{pos},$new_event{loc}{strand});
$new_XE .= $new_event_type.':'.
$new_event{score}.':'.
$new_event{pos}.':'.
$loc.':'.
$new_event{nb};
} elsif($new_event_type eq 'SNP') {
my $loc = compressCracLoc($new_event{loc}{chr},$new_event{loc}{pos},$new_event{loc}{strand});
$new_XE .= $new_event_type.':'.
$new_event{score}.':'.
$new_event{pos}.':'.
$loc.':'.
$new_event{expected}.':'.
$new_event{actual};
} elsif($new_event_type eq 'Error') {
my $loc = compressCracLoc($new_event{loc}{chr},$new_event{loc}{pos},$new_event{loc}{strand});
$new_XE .= $new_event_type.':'.
$new_event{type}.':'.
$new_event{pos}.':'.
$new_event{score}.':'.
$new_event{other1}.':'.
$new_event{other2};
} elsif($new_event_type eq 'chimera') {
my $loc1 = compressCracLoc($new_event{loc1}{chr},$new_event{loc1}{pos},$new_event{loc1}{strand});
my $loc2 = compressCracLoc($new_event{loc2}{chr},$new_event{loc2}{pos},$new_event{loc2}{strand});
$new_XE .= $new_event_type.':'.
$new_event{pos}.':'.
$loc1.':'.
$loc2;
} elsif($new_event_type eq 'Undetermined') {
$new_XE .= $new_event_type.':'.
$new_event{message};
} elsif($new_event_type eq 'BioUndetermined') {
$new_XE .= $new_event_type.':'.
$new_event{pos}.':'.
$new_event{message};
( run in 0.734 second using v1.01-cache-2.11-cpan-39bf76dae61 )