AlignDB-DeltaG
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/AlignDB/DeltaG.pm view on Meta::CPAN
package AlignDB::DeltaG;
use Moose;
use YAML::Syck;
our $VERSION = '1.1.0';
has 'temperature' => ( is => 'rw', isa => 'Num', default => sub {37.0}, );
has 'salt_conc' => ( is => 'rw', isa => 'Num', default => sub {1.0}, );
has 'deltaH' => ( is => 'ro', isa => 'HashRef', );
has 'deltaS' => ( is => 'ro', isa => 'HashRef', );
has 'deltaG' => ( is => 'ro', isa => 'HashRef', );
sub BUILD {
my $self = shift;
# Load thermodynamic data
my ( $deltaH, $deltaS ) = $self->_load_thermodynamic_data;
$self->{deltaH} = $deltaH;
$self->{deltaS} = $deltaS;
# Recalculate the deltaG hash on current temperature and salt conditions
my $deltaG = $self->_init_deltaG;
$self->{deltaG} = $deltaG;
return;
}
sub polymer_deltaG {
my $self = shift;
my $polymer = shift;
$polymer = uc $polymer;
return if $polymer =~ /[^AGCT]/;
my $deltaG = $self->deltaG;
my $polymer_len = length $polymer;
my $dG = 0;
# calculate deltaG
foreach ( 0 .. $polymer_len - 2 ) {
my $nn = substr( $polymer, $_, 2 );
$dG += $deltaG->{$nn};
}
# terminal correction
my $init_terminal = "init" . substr( $polymer, 0, 1 );
$dG += $deltaG->{$init_terminal};
my $end_terminal = "init" . substr( $polymer, -1, 1 );
$dG += $deltaG->{$end_terminal};
# Symmetry correction
my $rc_polymer = $self->_rev_com($polymer);
if ( $polymer eq $rc_polymer ) {
$dG += $deltaG->{sym};
}
return $dG;
}
# Load thermodynamic data comes from references
sub _load_thermodynamic_data {
my $self = shift;
#-------------------#
# deltaH (kcal/mol)
#-------------------#
my %deltaH = qw{
AA -7.6 TT -7.6
AT -7.2
view all matches for this distributionview release on metacpan - search on metacpan
( run in 5.056 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-72ae3ad1e6da )