NAME

Bio::Tools::MT - Calculating melting temperature of oligos

SYNOPSIS

  use Bio::Tools::MT;
  my $mt = Bio::Tools::MT->new(
			       sequence => $ATCG,
			       );
  print $mt->temperature;
  print $mt->weight;

MELTING TEMPERATURE

There are various ways to calculate the melting temperature (Tm) of an oligo, and all of these will yield different results. This module tries to bundle available methods together for your use.

The formula the module knows are as follows,

Simplest formula

Tm = 4 * (number of G's and C's in the primer) + 2 * (number of A's and T's in the primer)

but this only works for oligos < 14 bases and the reaction happens in presence of 50mM monovalent cations. For longer ones, another approximation is adopted.

Tm = 64.9 + 41 * (number of G's and C's in the primer - 16.4)/N

Salt-adjusted Calculation

Another formula takes into consideration the salt concentration of the reaction.

Tm = 81.5 + 16.6 * (log10([Na+] + [K+])) + 0.41 * (%GC) - 675/N

Base-stacking Calculation

Another more advanced one takes also base stacking parameters.

If the primer is a non-self-complementary oligo and the primer concentration is greater than the target concentration, then

Tm = ( delta(H) / ( delta(S) + R * ln([primer]/2) ) ) - 273.15

delta(H) is the enthalpy of base stacking interactions adjusted for helix initiation factors.

delta(S) is the entropy of base stacking adjusted for helix initiation factors (6,7) and for the contributions of salts(a) to the entropy of the system (6).

R is the universal gas constant.

For self-complementary oligos, the denominator becomes delta(S) + R*ln([primer]/4). And if the primer concentration and the target concentration are almost equal, the denominator becomes delta(S) + R ln([primer] - [target]/2).

For polymers, the situation gets more complex and the salt effects on polymers are quite different. See SantaLucia, J. (1998) Proc. Nat. Acad. Sci. USA 95, 1460.

MOLECULAR WEIGHT

In addition to melting temperature calculation, this module also calculates the molecular weight of a given sequence.

Molecular weight = (330.2 * number of G's) + (314.2 * number of A's) + (305.2 * number of T's) + (290.2 * number of C's), but the weight must be adjusted by +78 if a 5'phosphate is present. Default is unadjusted.

INTERFACE

new

Takes the background settings.

    my $mt = Bio::Tools::MT->new(
				 sequence    => $ATCG,
				 kna_conc    => 50,  # 50 mM
				 primer_conc => 200, # 200 nanomolar
                                 target_cont => 190, # 190 nanomolar
				 mg_conc     => 1.5, # 1.5 mM
				 has_pg      => 1,   # has a phosphate group
				 );

Characters of sequence other than ATCG will be ignored.

kna_conc is for the combined concentration of K+ and Na+. Default is 50 (mH)

primer_conc for the primer concentration in the reaction. (N.B. Primer concentration only affects the base-stacking calculations.) Default is 200 nonamolar.

target_conc for the target concentration. It is set if it is close to the primer concentration, and when calculating temperature using the third model, the denominator changes a little.

mg_conc for the Mg(2+) concentration. This only affects the base-stacking calculations.

has_pg is set to 1 if the oligo has a 5'-phosphate group. (N.B. This affects only the molecular weight, not the temperature. The weight is adjusted by +78 if a 5'phosphate is present.) Default is 0.

result

$mt->result();

Returns an anonymous hash containing the statistics about the sequence, such as temperature, molecular weight, gc-ratio, etc.

temperature

Outputs the predicted melting temperature.

use Data::Dumper;
print $mt->temperature();

In the returned anonymous hash, model stands for the above 3 temperature calculation formulae: 0 for the simplest, 1 for the salt-adjusted, and 2 for the advanced one.

weight

Returns its molecular weight

print $mt->weight();

Also, you have a non-OOish way.

use Bio::Tools::MT qw/weight/;

print weight($ATCG);

print weight($ATCG, 1);  # the one follows if a 5'phosphate group is present

COPYRIGHT

xern <xern@cpan.org>

This module is free software; you can redistribute it or modify it under the same terms as Perl itself.