File: SiteSensPerTree.pm

package info (click to toggle)
altree 1.3.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,288 kB
  • sloc: perl: 3,482; ansic: 1,716; sh: 267; pascal: 67; makefile: 21
file content (125 lines) | stat: -rw-r--r-- 2,781 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package ALTree::SiteSensPerTree;

################################################################
################################################################
####################### SiteSensPerTree ########################
################################################################
################################################################

use base qw(ALTree::Base ALTree::SiteSens);

# Structure SiteSens
#   "site_struct" -> Site
#   "sens_label" -> String
#   "node_list" -> Array of (Node)
#    "m_it" -> Interger # nb mutation of this chage in the tree
#    "R_it" -> Interger # nb co-mutations of this change with character S
#    "V_it" -> Integer  # (R_it-E_it)/sqrt(E_it)

sub New { # [classe] sens_label site_struct
    my $class=shift;
    my $self={};
    my $sens=shift;
    my $site=shift;
    bless($self, $class);
    $self->InitSiteSens($sens, $site);
    $self->_init("node_list" => [], "R_it" => 0, @_);
    return $self;
}

# Appel par Node->AddApo
sub _AddNode {
    my $self=shift;
    my $node=shift;
    if (exists($self->{"m_it"})) {
	die "_AddNode called after GetMit";	
    }
    push @{$self->{"node_list"}}, $node;
}
# Appel par Node->DeleteAllApo
sub _DeleteNode {
    my $self=shift;
    my $node=shift;
    my @new_node_list=grep { $_ != $node } @{$self->{"node_list"}};
    if (scalar(@new_node_list)+1 != $self->NbNodes()) {
	die "Error while removing a node from a SiteSensPerTree";
    }
    $self->{"node_list"}=\@new_node_list;
}
sub NbNodes {
    my $self=shift;

    return scalar (@{$self->{"node_list"}});
}
sub GetNode {
    my $self=shift;
    my $index=shift;
    return $self->{"node_list"}->[$index];
}
sub GetNodesList {
    my $self=shift;
    return @{$self->{"node_list"}};
}

sub SetStep {
    my $self=shift;
    my $step=shift;
    $self->{"Step"}=$step;
}

sub GetStep {
    my $self=shift;
    my $step=shift;
    return $self->{"Step"};
}

sub GetMit {
    my($self)=shift;
    if (not exists($self->{"m_it"})) {
	$self->{"m_it"}=$self->NbNodes();
    }
    return ($self->{"m_it"});
}

sub IncRit {
    my($self)=shift;
    if (exists($self->{"V_it"})) {
	die "IncRit called after GetVit";	
    }    
    $self->{"R_it"}++;
}
sub GetRit {
    my($self)=shift;
    return ($self->{"R_it"});
}

sub GetVit {
    my $self=shift;

    my $Rit=$self->GetRit();
    my $Eit=$self->GetEit();

    if (not exists($self->{"V_it"})) {
	if ($Eit == 0) {
	    $self->{"V_it"}=0;
	} else {
	    $self->{"V_it"}=($Rit-$Eit)/sqrt($Eit);
	}
    }
    return ($self->{"V_it"});
}

sub SetEit {
    my($self)=shift;
    my($value)=shift;
    if (exists($self->{"V_it"})) {
	die "SetEit called after GetVit";	
    }    
    $self->{"E_it"}=$value;
}

sub GetEit {
    my($self)=shift;
    return ($self->{"E_it"});
}
1;