Skip to content
Commits on Source (6)
MELTING(1) Melting user-guide MELTING(1)
NAME
melting - nearest-neighbor computation of nucleic acid
hybridation
SYNOPSIS
melting [options]
DESCRIPTION
Melting computes, for a nucleic acid duplex, the enthalpy
and the entropy of the helix-coil transition, and then its
melting temperature. Three types of hybridisation are
possible: DNA/DNA, DNA/RNA, and RNA/RNA. The program uses
the method of nearest-neighbors. The set of thermodynamic
parameters can be easely changed, for instance following
an experimental breakthrough. Melting is a free program in
both sense of the term. It comes with no cost and it is
open-source. In addition it is coded in ISO C and can be
compiled on any operating system. Some perl scripts are
provided to show how melting can be used as a block to
construct more ambitious programs.
If you use MELTING, please quote
Le Novère. MELTING, a free tool to compute the
melting temperature of nucleic acid duplex.
Bioinformatics, in the press.
OPTIONS
The options are treated sequentially. If there is a con­
flict between the value of two options, the latter nor­
mally erases the former.
-Afile.nn
Informs the program to use file.nn as an alterna­
tive set of nearest-neighbor parameters, rather
than the default for the specified hybridisation
type. The standard distribution of melting provides
some files ready-to-use: all97a.nn (Allawi et al
1997), bre86a.nn (Breslauer et al 1986), san96a.nn
(SantaLucia et al 1996), sug96a.nn (Sugimoto et al
1996), san04a.nn (santalucia et al 2004) (DNA/DNA),
fre86a.nn (Freier et al 1986),xia98a.nn (Xia
et al 1998), (RNA/RNA), and sug95a.nn (Sugimoto
et al 1995), (DNA/RNA).
The program will look for the file in a directory
specified during the installation. However, if an
environment variable NN_PATH is defined, melting
will search in this one first. Be careful, the
option -A changes the default parameter set defined
by the option -H.
-Ccomplementary_sequence
Enters the complementary sequence, from 3' to 5'.
This option is mandatory if there are mismatches
between the two strands. If it is not used, the
program will compute it as the complement of the
sequence entered with the option -S.
-Ddnadnade.nn
Informs the program to use the file dnadnade.nn to
compute the contribution of dangling ends to the
thermodynamic of helix-coil transition. The dan­
gling ends are not taken into account by the
approximative mode.
-Ffactor
This is the a correction factor used to modulate
the effect of the nucleic acid concentration in
the computation of the melting temperature. See
section ALGORITHM for details.
-Gx.xxe-xx
Magnesium concentration (No maximum concentration
for the moment). The effect of ions on thermod-
ynamic stability of nucleic acid duplexes is co-
mplex, and the correct­ing functions are at best
rough approximations.The published Tm correction
formula for divalent Mg2+ ions of Owczarzy et al.(2008)
can take in account the competitive binding of mono-
valent and divalent ions on DNA. However this formula
is only for DNA duplexes.
-h Displays a short help and quit with EXIT_SUCCESS.
-Hhybridisation_type
Specifies the hybridisation type. This will set the
nearest-neighbor set to use if no alternative set
is provided by the option -A (remember the options
are read sequentially). Moreover this parameter
determines the equation to use if the sequence
length exceeds the limit of application of the
nearest-neighbor approach (arbitrarily set up by
the author). Possible values are dnadna, dnarna and
rnadna (synonymous), and rnarna. For reasons of
compatibility the values of the previous versions
of melting A,B,C,F,R,S,T,U,W are still available
although strongly deprecated. Use the option -A to
require an alternative set of thermodynamic parame­
ters. IMPORTANT: If the duplex is a DNA/RNA het­
eroduplex, the sequence of the DNA strand has to be
entered with the option -S.
-Iinput_file
Provides the name of an input file containing the
parameters of the run. The input has to contain one
parameter per line, formatted as in the command
line. The order is not important, as well as blank
lines. example:
###beginning###
-Hdnadna
-Asug96a.nn
-SAGCTCGACTC
-CTCGAGGTGAG
-N0.2
-P0.0001
-v
-Ksan96a
###end###
-ifile.nn
Informs the program to use file.nn as an alterna­
tive set of inosine base pair parameters, rather
than the default for the specified hybridisation
type. The standard distribution of melting provides
some files ready-to-use: san05a.nn (Santalucia et
al 2005) for deoxyinosine in DNA duplexes, bre07a.nn
(Brent M Znosko et al 2007)for inosine in RNA duple-
xes. Note that not all the inosine mismatched wob-
ble's pairs have been investi­gated. Therefore it co-
uld be impossible to compute the Tm of a duplex wi-
th inosine pairs. Moreover, those inosine pairs are
not taken into account by the approximative mode.
-Ksalt_correction
Permits to chose another correction for the concen­
tration in sodium. Currently, one can chose between
wet91a, san96a, san98a. See section ALGORITHM.
-kx.xxe-xx
Potassium concentration (No maximum concentration
for the moment). The effect of ions on thermod-
ynamic stability of nucleic acid duplexes is co-
mplex, and the correct­ing functions are at best
rough approximations.The published Tm correction
formula for sodium ions of Owczarzy et al.(2008)is there-
fore also applicable to buffers containing Tris or
KCl. Monovalent K+, Na+, Tris+ ions stabilize DNA
duplexes with similar potency, and their effects on
duplex stability are additive. However this formula
is only for DNA duplexes.
-L Prints the legal informations and quit with
EXIT_SUCCESS.
-Mdnadnamm.nn
Informs the program to use the file dnadnamm.nn to
compute the contribution of mismatches to the ther­
modynamic of helix-coil transition. Note that not
all the mismatched Crick's pairs have been investi­
gated. Therefore it could be impossible to compute
the Tm of a mismatched duplex. Moreover, those mis­
matches are not taken into account by the approxi­
mative mode.
-Nx.xxe-xx
Sodium concentration (between 0 and 10 M). The
effect of ions on thermodynamic stability of
nucleic acid duplexes is complex, and the correct­
ing functions are at best rough approximations.
Moreover, they are generally reliable only for
[Na+] belonging to [0.1,1M]. If there are no other
ions in solution, we can use only the sodium corre-
ction. In the other case, we use the Owczarzy's al-
gorithm.
-Ooutput_file
The output is directed to this file instead of the
standard output. The name of the file can be omit­
ted. An automatic name is then generated, of the
form meltingYYYYMMMDD_HHhMMm.out (of course, on
POSIX compliant systems, you can emulate this with
the redirection of stdout to a file constructed
with the program date).
-Px.xxe-xx
Concentration of the nucleic acid strand in excess
(between 0 and 0.1 M).
-p
Return the directory supposed to contain the
sets of calorimetric parameters and quit with
EXIT_SUCCESS. If the environment variable NN_PATH
is set, it is returned. Otherwise, the value
defined by default during the compilation is
returned.
-q Turn off the interactive correction of wrongly
entered parameter. Useful for run through a server,
or a batch script. Default is OFF (i.e. interactive
on). The switch works in both sens. Therefore if
-q has been set in an input file, another -q on the
command line will switch the quiet mode OFF (same
thing if two -q are set on the same command line).
-Ssequence
Sequence of one strand of the nucleic acid duplex,
entered 5' to 3'. IMPORTANT: If it is a DNA/RNA
heteroduplex, the sequence of the DNA strand has to
be entered. Uridine and thymidine are considered as
identical. The bases can be upper or lowercase. If
There are inosine base pairs in the sequence, a co-
mplementary is mandatored.
-Txxx
Size threshold before approximative computation.
The nearest-neighbour approach will be used only if
the length of the sequence is inferior to this
threshold.
-tx.xxe-xx
Tris buffer concentration (No maximum concentrat-
ion for the moment). The effect of ions on the-
rmodynamic stability of nucleic acid duplexes is
complex, and the correct­ing functions are at best
rough approximations.The published Tm correction
formula for sodium ions of Owczarzy et al(2008)is there-
fore also applicable to buffers containing Tris or
KCl. Monovalent K+, Na+, Tris+ ions stabilize DNA
duplexes with similar potency, and their effects on
duplex stability are additive. However this formula
is only for DNA duplexes. Be careful, the Tris+ ion
concentration is about half of the total tris buffer
concentration.
-v Control the verbose mode, issuing a lot more infor­
mation about the current run (try it once to see if
you can get something interesting). Default is OFF.
The switch works in both sens. Therefore if -v has
been set in an input file, another -v on the com­
mand line will switch the verbose mode OFF (same
thing if two -v are set on the same command line).
-V Displays the version number and quit with EXIT_SUC­
CESS.
-x Force the program to compute an approximative tm,
based on G+C content. This option has to be used
with caution. Note that such a calcul is increas­
ingly incorrect when the length of the duplex
decreases. Moreover, it does not take into account
nucleic acid concentration, which is a strong mis­
take.
ALGORITHM
Thermodynamics of helix-coil transition of nucleic acid
The nearest-neighbor approach is based on the fact that
the helix-coil transition works as a zipper. After an
initial attachment, the hybridisation propagates later­
ally. Therefore, the process depends on the adjacent
nucleotides on each strand (the Crick's pairs). Two
duplexes with the same base pairs could have different
stabilities, and on the contrary, two duplexes with dif­
ferent sequences but identical sets of Crick's pairs will
have the same thermodynamics properties (see Sugimoto et
al. 1994). This program first computes the hybridisation
enthalpy and entropy from the elementary parameters of
each Crick's pair.
DeltaH = deltaH(initiation) + SUM(deltaH(Crick's pair))
DeltaS = deltaS(initiation) + SUM(deltaS(Crick's pair))
See Wetmur J.G. (1991) and SantaLucia (1998) for deep
reviews on the nucleic acid hybridisation and on the dif­
ferent set of nearest-neighbor parameters.
Effect of mismatches and dangling ends
The mismatching (inosine mismatches included) pairs are
also taken into account. However the thermodynamic para-
meters are still not available for every possible cases
(notably when both positions are mismatched). In such a
case, the program, unable to compute any relevant result,
will quit with a warning.
The two first and positions cannot be mismatched. in such
a case, the result is unpredictable, and all cases are
possible. for instance (see Allawi and SanLucia 1997), the
duplex
A T
GTGAGCTCAT
TACTCGAGTG
T A
is more stable than
AGTGAGCTCATT
TTACTCGAGTGA
The dangling ends, that is the umatched terminal
nucleotides, can be taken into account.
Example
DeltaH(
AGCGATGAA-
-CGCTGCTTT
) = DeltaH(AG/-C)+DeltaH(A-/TT)
+DeltaH(initG/C)+DeltaH(initA/T)
+DeltaH(GC/CG)+DeltaH(CG/GC)+2xDeltaH(GA/CT)+DeltaH(AA/TT)
+Delta(AT/TG mismatch) +DeltaG(TG/GC mismatch)
(The same computation is performed for DeltaS)
The melting temperature
Then the melting temperature is computed by the following
formula:
Tm = DeltaH / (DeltaS + Rx ln ([nucleic acid]/F))
Tm in K (for [Na+] = 1 M )
+ f([Na+]) - 273.15
correction for the salt concentration (if there are only Na+
cations in the solution) and to get the temperature in degree
Celsius.(In fact some corrections are directly included in the
DeltaS see that of SanLucia 1998)
Correction for the concentration of nucleic acid
If the concentration of the two strands are similar, F is
1 in case of self-complementary oligonucleotides, 4
otherwise. If one strand is in excess (for instance in PCR
experiment), F is 2 (Actually the formula would have to
use the difference of concentrations rather than the total
concentration, but if the excess is sufficient, the total
concentration can be assumed to be identical to the
concentration of the strand in excess).
Note however that MELTING makes the assumption of no self-
assembly, i.e. the computation does not take any entropic
term to correct for self-complementarity.
Correction for the concentration of salt
Currently, the only available correction is for sodium
(i.e. monovalent cations).
the correction can be chosen between wet91a, presented in
Wetmur 1991 i.e.
16.6 x log([Na+] / (1 + 0.7 x [Na+])) + 3.85
san96a presented in SantaLucia et al. 1996 i.e.
12.5 x log[Na+]
and san98a presented in SantaLucia 1998 i.e. a correction
of the entropic term without modification of enthalpy
DeltaS = DeltaS([Na+]=1M) + 0.368 x (N-1) x ln[Na+]
Where N is the length of the duplex.
Correction for the concentration of ions when other monovalent
ions such as Tris+ and K+ or divalent Mg2+ ions are added
If there are only Na+ ions, we can use the correction for
the concentration of salt(see above). In the opposite case
, we will use the magnesium and monovalent ions correction
from Owczarzy et al (2008). (only for DNA duplexes)
[Mon+] = [Na+] + [K+] + [Tris+]
Where [Tris+] = [Tris buffer]/2. (in the option -t, it is
the Tris buffer concentration which is entered).
If [Mon+] = 0, the divalent ions are the only ions present
and the melting temperature is :
1/Tm(Mg2+) = 1/Tm(1M Na+) + a - b x ln([Mg2+]) + Fgc x (c
+ d x ln([Mg2+]) + 1/(2 x (Nbp - 1)) x (- e +
f x ln([Mg2+]) + g x ln([Mg2+]) x ln([Mg2+]))
where : a = 3.92/100000, b = 9.11/1000000, c = 6.26/100000
,d = 1.42/100000,e = 4.82/10000;f = 5.25/10000, g = 8.31/
100000.
Fgc is the fraction of GC base pairs in the sequence and
Nbp is the length of the sequence (Number of base pairs).
If [Mon+] > 0, there are several cases because we can have
a competitive DNA binding between monovalent and divalent
cations :
If the ratio [Mg2+]^(0.5)/[Mon+] is inferior to 0.22, mono-
valent ion influence is dominant, divalent cations can be
disregarded and the melting temperature is :
1/Tm(Mg2+) = 1/Tm(1M Na+) + (4.29 x Fgc - 3.95) x 1/100000
x ln([mon+]) + 9.40 x 1/1000000 x ln([Mon+])
x ln([Mon+])
where : Fgc is the fraction of GC base pairs in the sequen-
ce.
If the ratio [Mg2+]^(0.5)/[Mon+] is included in [0.22, 6[,
we must take in account both Mg2+ and monovalent cations
concentrations. The melting temperature is :
1/Tm(Mg2+) = 1/Tm(1M Na+) + a - b x ln([Mg2+]) + Fgc x (c
+ d x ln([Mg2+]) + 1/(2 x (Nbp - 1)) x (- e +
f x ln([Mg2+]) + g x ln([Mg2+]) x ln([Mg2+]))
where : a = 3.92/100000 x (0.843 - 0.352 x [Mon+]0.5 x
ln([Mon+])), b = 9.11/1000000, c = 6.26/100000
,d = 1.42/100000 x (1.279 - 4.03/1000 x ln([mon+]) - 8.03/1000
x ln([mon+] x ln([mon+]),e = 4.82/10000;f = 5.25/10000, g =
8.31/100000 x (0.486 - 0.258 x ln([mon+]) + 5.25/1000 x
ln([mon+] x ln([mon+] x ln([mon+]).
Fgc is the fraction of GC base pairs in the sequence and
Nbp is the length of the sequence (Number of base pairs).
Finally, if the ratio [Mg2+]^(0.5)/[Mon+] is superior to 6,
divalent ion influence is dominant, monovalent cations can
be disregarded and the melting temperature is :
1/Tm(Mg2+) = 1/Tm(1M Na+) + a - b x ln([Mg2+]) + Fgc x (c
+ d x ln([Mg2+]) + 1/(2 x (Nbp - 1)) x (- e +
f x ln([Mg2+]) + g x ln([Mg2+]) x ln([Mg2+]))
where : a = 3.92/100000, b = 9.11/1000000, c = 6.26/100000
,d = 1.42/100000,e = 4.82/10000;f = 5.25/10000, g = 8.31/
100000.
Fgc is the fraction of GC base pairs in the sequence and
Nbp is the length of the sequence (Number of base pairs).
Long sequences
It is important to realise that the nearest-neighbor
approach has been established on small oligonucleotides.
Therefore the use of melting in the non-approximative mode
is really accurate only for relatively short sequences
(Although if the sequences are two short, let's say < 6
bp, the influence of extremities becomes too important and
the reliability decreases a lot). For long sequences an
approximative mode has been designed. This mode is
launched if the sequence length is higher than the value
given by the option -T (the default threshold is 60 bp).
The melting temperature is computed by the following for­
mulas:
DNA/DNA:
Tm = 81.5+16.6*log10([Na+]/(1+0.7[Na+]))+0.41%GC-500/size
DNA/RNA:
Tm = 67+16.6*log10([Na+]/(1.0+0.7[Na+]))+0.8%GC-500/size
RNA/RNA:
Tm = 78+16.6*log10([Na+]/(1.0+0.7[Na+]))+0.7%GC-500/size
This mode is nevertheless strongly disencouraged.
Miscellaneous comments
Melting is currently accurate only when the hybridisation
is performed at pH 7±1.
The computation is valid only for the hybridisations per­
formed in aqueous medium. Therefore the use of denaturing
agents such as formamide completely invalidates the
results.
REFERENCES
Allawi H.T., SantaLucia J. (1997). Thermodynamics and NMR of
internal G-T mismatches in DNA. Biochemistry 36: 10581-10594
Allawi H.T., SantaLucia J. (1998). Nearest Neighbor thermodynamics
parameters for internal G.A mismatches in DNA. Biochemistry 37:
2170-2179
Allawi H.T., SantaLucia J. (1998).Thermodynamics of internal C.T
mismatches in DNA. Biochemistry 26: 2694-2701.
Allawi H.T., SantaLucia J. (1998). Nearest Neighbor thermodynamics
of internal A.C mismatches in DNA: sequence dependence and pH effects.
Biochemistry 37: 9435-9444.
Bommarito S., Peyret N., SantaLucia J. (2000). Thermodynamic parameters
for DNA sequences with dangling ends.Nucleic Acids Res 28: 1929-1934
Breslauer K.J., Frank R., Blocker H., Marky L.A. (1986). Predicting DNA
duplex stability from the base sequence. Proc Natl Acad Sci USA 83:
3746-3750
Freier S.M., Kierzek R., Jaeger J.A., Sugimoto N., Caruthers M.H.,
Neilson T., Turner D.H. (1986). Biochemistry 83:9373-9377
Owczarzy R., Moreira B.G., You Y., Behlke M.B., Walder J.A.(2008)
Predicting stability of DNA duplexes in solutions containing Magnesium
and Monovalent Cations. Biochemistry 47: 5336-5353.
Peyret N., Seneviratne P.A., Allawi H.T., SantaLucia J. (1999). Nearest
Neighbor thermodynamics and NMR of DNA sequences with internal A.A, C.C,
G.G and T.T mismatches. dependence and pH effects. Biochemistry} 38:3468
-3477
SantaLucia J. Jr, Allawi H.T., Seneviratne P.A. (1996). Improved nearest-
neighbor parameters for predicting DNA duplex stability.Biochemistry 35:
3555-3562
Sugimoto N., Katoh M., Nakano S., Ohmichi T., Sasaki M. (1994). RNA/DNA
hybrid duplexes with identical nearest-neighbor base-pairs have identical
stability. FEBS Letters 354: 74-78
Sugimoto N., Nakano S., Katoh M., Matsumura A., Nakamuta H., Ohmichi T.,
Yoneyama M., Sasaki M. (1995). Thermodynamic parameters to predict stability
of RNA/DNA hybrid duplexes. Biochemistry 34: 11211-11216
Sugimoto N., Nakano S., Yoneyama M., Honda K. (1996). Improved thermodynamic
parameters and helix initiation factor to predict stability of DNA duplexes.
Nuc Acids Res 24: 4501-4505
Watkins N.E., Santalucia J. Jr. (2005). Nearest-neighbor thermodynamics of
deoxyinosine pairs in DNA duplexes. Nuc Acids Res 33: 6258-6267
Wright D.J., Rice J.L., Yanker D.M., Znosko B.M. (2007). Nearest neighbor parameters
for inosine-uridine pairs in RNA duplexes. Biochemistry 46: 4625-4634
Xia T., SantaLucia J., Burkard M.E., Kierzek R., Schroeder S.J., Jiao X.,
Cox C., Turner D.H. (1998). Thermodynamics parameters expanded nearest-neighbor model for formation of RNA duplexes with
Watson-Crick base pairs. Biochemistry 37: 14719-14735
For review see:
SantaLucia J. (1998) A unified view of polymer, dumbbell,
and oligonucleotide DNA nearest-neighbor thermodynamics.
Proc Natl Acad Sci USA 95: 1460-1465
SantaLucia J., Hicks Donald (2004) The Thermodynamics of
DNA structural motifs. Annu. Rev. Biophys. Struct. 33: 415
-440
Wetmur J.G. (1991) DNA probes: applications of the princi­
ples of nucleic acid hybridization. Crit Rev Biochem Mol
Biol 26: 227-259
FILES
*.nn Files containing the nearest-neighbor parameters,
enthalpy and entropy, for each Crick's pair. They
have to be placed in a directory defined during the
compilation or targeted by the environment variable
NN_PATH.
tkmelting.pl
A Graphical User Interface written in Perl/Tk is
available for those who prefer the 'button and
menu' approach.
*.pl Scripts are available to use MELTING iteratively.
For instance, the script multi.pl permits to pre­
dict the Tm of several duplexes in one shot. The
script profil.pl allow an interactive computation
along a sequence, by sliding a window of specified
width.
SEE ALSO
New versions and related material can be found at
http://www.pasteur.fr/recherche/unites/neubiomol/melt­
inghome.html and at https://sourceforge.net/projects/melting/.
You can use MELTING through a web server at
http://bioweb.pasteur.fr/seqanal/interfaces/melting.html
KNOWN BUGS
The infiles have to be ended by a blank line because oth­
erwise the last line is not decoded.
If an infile is called, containing the address of another
input file, it does not care of this latter. If it is its
own address, the program quit (is it a bug or a feature?).
In interactive mode, a sequence can be entered on several
lines with a backslash
AGCGACGAGCTAGCCTA\
AGGACCTATACGAC
If by mistake it is entered as
AGCGACGAGCTAGCCTA\AGGACCTATACGAC
The backslash will be considered as an illegal character.
Here again, I do not think it is actually a bug (even if
it is unlikely, there is a small probability that the
backslash could actually be a mistyped base).
COPYRIGHT
Melting is copyright (C) 1997, 2009 by Nicolas Le Novère
and Marine Dumousseau
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any
later version.
Debian GNU/Linux 2009 April 08 8
MELTING(1) Melting user-guide MELTING(1)
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
ACKNOWLEDGEMENTS
Nicolas Joly is an efficient and kind debugger and advisor. Catherine
Letondal wrote the HTML interface to melting. Thanks to Nirav Merchant,
Taejoon Kwon, Leo Schalkwyk, Mauro Petrillo, Andrew Thompson, Wong Chee
Hong, Ivano Zara for their bug fixes and comments. Thanks to Richard Owczarzy
for his magnesium correction. Thanks to Charles Plessy for the graphical interface
files. Finally thanks to the usenet helpers, particularly Olivier Dehon and Nicolas Chuche.
AUTHORS
Nicolas Le Novère and Marine Dumousseau,
EMBL-EBI, Wellcome-Trust Genome Campus
Hinxton Cambridge, CB10 1SD, UK
lenov@ebi.ac.uk
HISTORY
See the file ChangeLog for the changes of the versions 4
and more recent.
#!/usr/bin/perl -w
##############################################################################
# MELTING #
# This program computes for a nucleotide probe, the enthalpie, the entropy #
# of the helix-coil transition, and then its melting temperature. #
# Three types of hybridisation are possible: DNA/DNA, DNA/RNA, and RNA/RNA. #
# Copyright (C) Nicolas Le Novère and Marine Dumousseau 1997-2013 #
##############################################################################
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#
#
# Nicolas Le Novere
# Babraham Institute, Babraham Research Campus
# Babraham CB22 3AT Cambridge United-Kingdom.
# n.lenovere@gmail.com
#
# Marine Dumousseau
# EMBL-EBI, Wellcome-Trust Genome Campus
# Hinxton CB10 1SD Cambridge United-Kingdom.
# marine@ebi.ac.uk
###################################################################
# Usage is: ./multi.pl config_file < inputfile > outputfile #
# Where inputfile contains one sequence per line. No space before #
# sequence and at least one space before extra information #
# Write the parameters of melting in an input file. See manual. #
###################################################################
use strict;
my @linecontent; # contains the elements of a line generated by the function split
my $infile; # contains the parameters of the run except the sequence
my @sequences; # contains all the sequences from which to predict the Tm
my $seq; # one sequence
my @rawresults; # contains the raw output of MELTING
my ($tm,$H,$S);
if (not defined $ARGV[0]){
print "Except the sequences, all parameters have to be contained in a \n",
"configuration file, and the script run as:\n",
" prompt> ./multi.pl config_file < inputfile > outputfile\n";
exit;
}
# Read the sequences to analise
while (<STDIN>){
if ( $_ !~ /^(\s*\#.*|\s+)$/){ # do not take into account comment and blank lines
chomp;
@linecontent = split(" "); # Note that each line could contain
push(@sequences,$linecontent[0]); # other elements used in derived programs
}
}
print "sequences DeltaH DeltaS Tm (deg C) \n";
foreach $seq (@sequences){
@rawresults = `melting -I$ARGV[0] -S$seq -q`;
foreach (@rawresults){
@linecontent = split(" ");
if ($linecontent[0] =~ /melting/i ){ $tm = $linecontent[2];
} elsif ($linecontent[0] =~ /enthalpy/i ){ $H = $linecontent[1];
} elsif ($linecontent[0] =~ /entropy/i ){ $S = $linecontent[1];
}
}
printf "%-30s %6.0f %5.1f %4.1f\n",$seq, $H, $S, $tm;
}
#!/usr/bin/perl -w
##############################################################################
# MELTING #
# This program computes for a nucleotide probe, the enthalpie, the entropy #
# of the helix-coil transition, and then its melting temperature. #
# Three types of hybridisation are possible: DNA/DNA, DNA/RNA, and RNA/RNA. #
# Copyright (C) Nicolas Le Novère and Marine Dumousseau 1997-2013 #
##############################################################################
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#
#
# Nicolas Le Novere
# Babraham Institute, Babraham Research Campus
# Babraham CB22 3AT Cambridge United-Kingdom.
# n.lenovere@gmail.com
#
# Marine Dumousseau
# EMBL-EBI, Wellcome-Trust Genome Campus
# Hinxton CB10 1SD Cambridge United-Kingdom.
# marine@ebi.ac.uk
###################################################################
# Usage is: profil.pl -Iinfile -Wwindow < inputfile > outputfile #
# Where inputfile contains one sequence per line. No space before #
# sequence and at least one space before extra information #
# Write the parameters of melting in an input file. See manual. #
###################################################################
use strict;
my $VERSION = 2;
my $argument; # one of the arguments
my $infile = "infile"; # contains the parameters of the run except the sequence
my $window = 10; # contains the length of the window to analise
my %nucleic_acid ; # the nucleic acid of the analysis
##########################
# Processes the arguments
##########################
if (not @ARGV){
usage();
exit();
}
if (join("",@ARGV) =~ /-H/i){
usage();
exit();
}
foreach $argument (@ARGV){
if ($argument =~ /^-I/i){ # infile specification
$argument =~ /^-I([\w\.]*)/i;
if (defined $1){$infile = $1;}
else {warning_infile();}
} elsif ($argument =~ /^-W/i){ # window width specification
$argument =~ /^-W(\d*)/i;
if (defined $1){$window = $1;}
else {warning_window();}
} else {
print "Oups! I did not recognise the option $argument.\n";
print "I do not take it into account\n";
}
}
#################################
# Reads the sequences to analyse
#################################
# it would be desirable to treat a multisequence FASTA file as
# a set of independant sequences rather than to concatenate
# everything.
while (<STDIN>){
if (/^\s*>/){next;} # remove the fasta info line
chomp(); # remove end of line
s/#.*//; # remove the comments
s/[^AGCTU]//g; # keeps only AGCTU, case insensitive
$_ = uc($_); # switch everything uppercase
$nucleic_acid{"sequence"}.=$_; # append
}
#print "DEBUG--> sequence is: ",$nucleic_acid{"sequence"},"\n";
# Note that each line could contain other elements used in derived programs, but separed by spaces
#############
# Here we go
#############
@{$nucleic_acid{"results"}}=compute_tm($nucleic_acid{"sequence"},$window);
#print "DEBUG--> results: ",$nucleic_acid{"results"},"\n";
print_result();
sub usage{
print <<EOU;
Usage is: profil.pl [-H] -Iinfile -Wwindow < inputfile > outputfile
where
-H, -h, -help print this message;
-Iinfile file containing the parameters
-Wwindow width of the window analysed at each run
inputfile file containing the sequence
outputfile file containing the results
EOU
}
sub warning_infile{
print <<EOWI;
Except the sequences, all parameters have to be contained a configuration
file, and the script run as:
prompt> ./profil.pl -Iconfig_file -Wwindow < inputfile > outputfile)
Since no configuration file has been provided (option -I), the file infile
is assumed. See the user-guide of melting for the format of this file.
EOWI
}
sub warning_window{
print "Since no window length specification has been entered (option -W), a default\n";
print "length of 10 nucleotides is assumed\n";
}
sub compute_tm{
my ($sequence,$window)=@_;
my $i; # loop counter
my @results; # array of hashes containing the results of one nucleic acid
my $seqlength = length $sequence;
# print "DEBUG--> length of the sequence is: ",$seqlength,"\n";
if ($seqlength < $window){$window = $seqlength;} # in case of very short sequences
my $half_window = sprintf ("%d",$window / 2); # absolute value.
# print "DEBUG--> half of the window is: ",$half_window,"\n";
# Tm is reported to the middle of the string, we have to populate the first half
# Note the '<', index beginning at 0
for ($i=0 ; $i<$half_window ; $i++){
$results[$i]->{"subsequence"} = 'X'x$window;
$results[$i]->{"enthalpy"} = "000000";
$results[$i]->{"entropy"} = "000.00";
$results[$i]->{"tm"} = "-274";
# print "DEBUG--> results[",$i,"] is: ",%{$results[$i]},"\n";
}
# Now we begin the actual analysis. The sequence move from the beginning, but the
# temperatures from the middle of the first substring
my $offset = 0;
while (($offset+$window) <= $seqlength){
my $subsequence = substr($sequence,$offset,$window);
# print "DEBUG--> subsequence is: ",$subsequence,"\n";
$results[$half_window+$offset]->{"subsequence"} = $subsequence;
my @rawresults = `melting -I$infile -S$subsequence -q`;
foreach (@rawresults){
if (/Enthalpy/ ){
($results[$half_window+$offset]->{"enthalpy"}) = (split)[1];
} elsif (/Entropy/ ){
($results[$half_window+$offset]->{"entropy"}) = (split)[1];
} elsif (/Melting/ ){
($results[$half_window+$offset]->{"tm"}) = (split)[2];
} else { # do nothing, this is not suppose to occur but ...
}
}
# print "DEBUG--> results[",$half_window+$offset,"] is: ",%{$results[$half_window+$offset]},"\n";
$offset++;
}
# fill the remaining position of the array
# Note that $offset is incremented just before to quit the loop,
# hence the $half_window+$offset, identical to that of the while loop.
for ( $i = $half_window + $offset ; $i < $seqlength ; $i++ ){
$results[$i]->{"subsequence"} = 'X'x$window;
$results[$i]->{"enthalpy"} = "000000";
$results[$i]->{"entropy"} = "000.00";
$results[$i]->{"tm"} = "-274";
# print "DEBUG--> results[",$i,"] is: ",%{$results[$i]},"\n";
}
return @results;
}
sub print_result{
my $i; # loop counter
print ("Base,Enthalpy,Entropy,Tm\n");
my $seqlength = length $nucleic_acid{"sequence"};
# print "DEBUG--> length of the sequence is: ",$seqlength,"\n";
for ($i=0 ; $i<$seqlength ; $i++){
printf "%s\t", $nucleic_acid{"results"}[$i]->{"subsequence"};
printf "%7d\t ",$nucleic_acid{"results"}[$i]->{"enthalpy"};
printf "%7.2f\t",$nucleic_acid{"results"}[$i]->{"entropy"};
printf "%7.2f ",$nucleic_acid{"results"}[$i]->{"tm"};
print "\n";
}
}
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+ "$@"}' && eval 'exec perl -S $0 $argv:q' if 0;
##############################################################################
# MELTING #
# This program computes for a nucleotide probe, the enthalpie, the entropy #
# of the helix-coil transition, and then its melting temperature. #
# Three types of hybridisation are possible: DNA/DNA, DNA/RNA, and RNA/RNA. #
# Copyright (C) Nicolas Le Novère and Marine Dumousseau 1997-2013 #
##############################################################################
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#
#
# Nicolas Le Novere
# Babraham Institute, Babraham Research Campus
# Babraham CB22 3AT Cambridge United-Kingdom.
# n.lenovere@gmail.com
#
# Marine Dumousseau
# EMBL-EBI, Wellcome-Trust Genome Campus
# Hinxton CB10 1SD Cambridge United-Kingdom.
# marine@ebi.ac.uk
use strict;
use Tk;
require Tk::LabEntry;
require Tk::Dialog;
my $VERSION = 0.005; # version of the Tk interface
my $version; # version of MELTING
my $blackhole; # guess what ...
my $NNDIR; # address of the files containing the calorimetric data
#----------------------
# Arguments of melting
#----------------------
my $altNN = ""; # option -A -> alternative set of calorimetric parameters
my $complement = ""; # option -C -> complementary sequence
my $factor = "4"; # option -F -> factor correcting the nucleic acid concentration
my $magnesium = "0.0"; # option -G -> magnesium concentration
my $type = "dnadna"; # option -H -> type of hybridisation (dna/dna, dna/rna, rna/rna)
# option I useless here (infile)
my $Korrection = "san98a"; # option -K -> salt correction
my $mismatches = ""; # option -M -> alternative set of calorimetric parameters fot mismatches
my $salt = "0.0"; # option -N -> salt concentration
# option O useless here? (outfile)
my $probe = "0.0"; # option -P -> nuceic acid concentration
my $potassium = "0.0"; # option -p -> potassium concentration
my $sequence = ""; # option -S -> Sequence of one strand
my $tris = "0.0"; # option -t -> tris concentration
#---------
# Results
#---------
my $enthalpy; # enthalpy of the helix-coil transition
my $entropy; # entropy of the helix-coil transition
my $tm; # melting-point (temperature of mid-fusion)
my $mw = MainWindow->new();
$mw->title("Melting");
$mw->resizable(0,0);
$version = @{ [split(" ",`melting -V`)] }[1];
###############################
# Presentation of the program #
###############################
my $presentFrame = $mw->Frame->pack(-expand => '1',
-fill => 'both'
);
$presentFrame->Label(-text => "MELTING v$version
Computation of the Tm according to the nearest-neighbour method
Copyright (C) Nicolas Le Nov�re 1997-2001",
-relief => 'raised',
-background => '#DDDDDD',
)->pack(-expand => '1',
-fill => 'both'
);
######################################
# Enter the arguments of the program #
######################################
my $argFrame = $mw->Frame(-borderwidth => 1,
-relief => 'ridge'
)->pack(-expand => '1',
-fill => 'both'
);
#-----------
# sequences
#-----------
$argFrame->Label(-text => 'sequence => A,G,C,T,U,I,- <option -S>'
)->pack(-side => 'top',
-expand => '1',
-fill => 'x'
);
$argFrame->Entry(-width => '30',
-textvariable => \$sequence,
-font => "-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1",
-background => '#999999',
-foreground => '#EEEEEE'
)->pack(-side => 'top',
-expand => '1',
-fill => 'x'
);
$argFrame->Label(-text => 'complement => A,G,C,T,U,I,- (only if mismatches, or inosine mismatches) <option -C>',
)->pack(-side => 'top',
-expand => '1',
-fill => 'x'
);
$argFrame->Entry(-width => '30',
-textvariable => \$complement,
-font => "-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1",
-background => '#999999',
-foreground => '#EEEEEE'
)->pack(-side => 'top',
-expand => '1',
-fill => 'x'
);
my $numericalFrame = $argFrame->Frame->pack(-side => 'right',
-expand => '1',
-fill => 'both'
);
#----------------------------
# nucleic acid concentration
#----------------------------
$numericalFrame->Label(-text => "[strand] <option -P>"
)->grid(-column => 0,
-row => 0,
);
$numericalFrame->Entry(-width => 10,
-textvariable => \$probe,
-background => '#999999',
-foreground => '#EEEEEE'
)->grid(-column => 1,
-row => 0,
);
$numericalFrame->Label(-text => ']0..0.1] M.l-1'
)->grid(-column => 2,
-row => 0,
);
#--------------------
# ions concentration
#--------------------
$numericalFrame->Label(-text => "[salt] <option -N>"
)->grid(-column => 0,
-row => 1,
);
$numericalFrame->Entry(-width => 10,
-textvariable => \$salt,
-background => '#999999',
-foreground => '#EEEEEE'
)->grid(-column => 1,
-row => 1,
);
$numericalFrame->Label(-text => ']0...10] M.l-1'
)->grid(-column => 2,
-row => 1,
);
$numericalFrame->Label(-text => "[potassium] <option -k>"
)->grid(-column => 0,
-row => 2,
);
$numericalFrame->Entry(-width => 10,
-textvariable => \$potassium,
-background => '#999999',
-foreground => '#EEEEEE'
)->grid(-column => 1,
-row => 2,
);
$numericalFrame->Label(-text => ' M.l-1'
)->grid(-column => 2,
-row => 2,
);
$numericalFrame->Label(-text => "[tris] <option -t>"
)->grid(-column => 0,
-row => 3,
);
$numericalFrame->Entry(-width => 10,
-textvariable => \$tris,
-background => '#999999',
-foreground => '#EEEEEE'
)->grid(-column => 1,
-row => 3,
);
$numericalFrame->Label(-text => ' M.l-1'
)->grid(-column => 2,
-row => 3,
);
$numericalFrame->Label(-text => "[magnesium] <option -G>"
)->grid(-column => 0,
-row => 4,
);
$numericalFrame->Entry(-width => 10,
-textvariable => \$magnesium,
-background => '#999999',
-foreground => '#EEEEEE'
)->grid(-column => 1,
-row => 4,
);
$numericalFrame->Label(-text => ' M.l-1'
)->grid(-column => 2,
-row => 4,
);
#--------------------------------------------------------------
# stoichiometric correction for the nucleic acid concentration
#--------------------------------------------------------------
$numericalFrame->Label(-text => "Is one strand in excess (PCR ...)?"
)->grid(-column => 0,
-columnspan => 2,
-row => 5,
);
my $self_Lb = $numericalFrame->Label(-text => "Self-complementary sequence?"
)->grid(-column => 0,
-columnspan => 2,
-row => 6,
);
my $self_Cb = $numericalFrame->Checkbutton(-onvalue => 1,
-offvalue => 4,
-variable => \$factor,
)->grid(-column => 2,
-row => 5,
);
$numericalFrame->Checkbutton(-onvalue => 2,
-offvalue => 4,
-variable => \$factor,
-command => sub{
if ($self_Cb->cget(-indicatoron)){
$self_Cb->configure(-state => 'disabled',
-indicatoron => 0);
} else {
$self_Cb->configure(-state => 'normal',
-indicatoron => 1);
}
},
)->grid(-column => 2,
-row => 6,
);
#------------------
# Salt corrections
#------------------
my $saltCorrFrame = $numericalFrame->Frame->grid(-row => 8,
-column => 0,
-columnspan => 3
);
$saltCorrFrame->Label(-text => "[salt] correction <option -K> (if only Na+ are present)"
)->pack(-side => 'left'
);
foreach (qw(san98a san96a wet91a owc08)){ # added explicit Owc salt correction (MP)
$saltCorrFrame->Radiobutton(-text => $_,
-value => $_,
-variable => \$Korrection,
-selectcolor => '#999999'
)->pack(
);
}
#----------------------------------------------------
# list the available alternative calorimetric tables
#----------------------------------------------------
# Open the directory containing the calorimetric data
# remove the name of the files related to mismatches
# and in the future, controlled by the option -M and not -A
$NNDIR = `melting -p`;
chomp $NNDIR;
$NNDIR =~ s/^\s*path:\s+//;
$NNDIR =~ s/\/$//;
opendir NNF, $NNDIR or print "could not open the directory $NNDIR\n";
my @files = grep {($_ !~ /(mm|de)\.nn/) && ($_ !~ /(san05a|bre07a)\.nn/) && $_ !~ /^\./} readdir NNF;
close NNF;
my $AltSetMenu = $argFrame->Menubutton(-text => "Alt NN sets\n<option -A>",
-relief => 'raised'
)->pack(-side => 'bottom'
);
foreach my $file (@files){
$AltSetMenu->command(-label => $file,
-command => sub{$altNN=$file;}
);
}
# Note that another possibility is the use of Tk::Optionmenu
# However, it does not exhibit any -text option (the visible value is the first
# of the list) of -label
#------------------
# hybridation type
#------------------
my $HybTypeFrame = $argFrame->Frame->pack(-expand => '1',
-fill => 'both',
-side => 'left'
);
$HybTypeFrame->Label(-text => "Hybridation type\n<option -H>"
)->pack(
);
foreach (qw(DNA/DNA DNA/RNA RNA/RNA)){
$HybTypeFrame->Radiobutton(-text => $_,
-value => $_,
-variable => \$type,
-selectcolor => '#999999'
)->pack(
);
}
#####################################
# Output the results of the program #
#####################################
my $resFrame = $mw->Frame(-borderwidth => 1,
-relief => 'ridge'
)->pack(-side => 'left',
-expand => '1',
-fill => 'both'
);
#--------------------------------
# The explanation of each result
#--------------------------------
$resFrame->Label(-text => 'enthalpy'
)->grid(-row => 0,
-column => 0
);
$resFrame->Label(-text => 'entropy'
)->grid(-row => 1,
-column => 0
);
$resFrame->Label(-text => 'melting temperature'
)->grid(-row => 2,
-column => 0
);
#---------------------------------
# Finally, the results themselves
#---------------------------------
$resFrame->Entry(-width => 10,
-textvariable => \$enthalpy
)->grid(-row => 0,
-column => 1
);
$resFrame->Entry(-width => 10,
-textvariable => \$entropy
)->grid(-row => 1,
-column => 1
);
$resFrame->Entry(-width => 10,
-textvariable => \$tm
)->grid(-row => 2,
-column => 1
);
#-------------------------
# The unit of each result
#-------------------------
$resFrame->Label(-text => 'J.mol-1'
)->grid(-row => 0,
-column => 2
);
$resFrame->Label(-text => 'J.mol-1.K-1'
)->grid(-row => 1,
-column => 2
);
$resFrame->Label(-text => '� C'
)->grid(-row => 2,
-column => 2
);
##############
# Here we go #
##############
my $commandFrame = $mw->Frame(-borderwidth => 1,
-relief => 'ridge',
)->pack(-side => 'left',
-expand => '1',
-fill => 'both'
);
$commandFrame->Button(-text => 'Help',
-width => '10',
-command => sub{show_help()}
)->pack(
);
$commandFrame->Button(-text => 'run',
-width => '10',
-command => sub{compute()}
)->pack(
);
$commandFrame->Button(-text => "quit",
-width => '10',
-command => sub { exit }
)->pack(
);
# Note that tk exit function is used here instead of
# -command => [$main => 'destroy']
# The code after the MainLoop is therefore ignored.
# Remind it if you add code after the GUI termination
MainLoop;
#####################################################
# Open a toplevel window with the manpage of melting
#####################################################
sub show_help{
if(!Exists(my $helpWindow)){
$helpWindow = $mw->Toplevel();
$helpWindow->title("Melting help");
my $helpText = $helpWindow->Scrolled("Text",
-font => "-adobe-courier-medium-r-normal--0-0-0-0-m-0-iso8859-1"
)->pack(-expand => 1,
-fill => 'both'
);
open(FH,"melting.hlp") || die "unable to open melting.hlp";
while (<FH>){
$helpText->insert('end', $_);
}
close(FH);
$helpWindow->Button(-text => "close",
-command => sub{$helpWindow->withdraw}
)->pack(
);
} else {
$helpWindow->deiconify();
$helpWindow-> raise();
}
}
#########################################
# Run melting with the chosen parameters
#########################################
sub compute {
my $options;
my @results;
my $line;
my $error;
my @content;
#--------------------------------------
# Construction de la ligne de commande
#--------------------------------------
$type =~ s!/!!;
$type =~ tr/A-Z/a-z/;
$options = "-H$type";
if ($Korrection ne "owc08"){
$options.=" -K$Korrection";} # pass salt correction method to command line (MP)
if ($altNN ne ""){
$options.=" -A$altNN";
}
if ($sequence =~ /[^agctui-]/i or $sequence eq ""){ # allow inosine (MP)
message("error","error","The sequence is empty or contains one or more illegal digits. The only legal digits are a,A,c,C,g,G,i,I,t,T,u,U");
return;
} else {$options.=" -S$sequence";}
if ($complement ne ""){
if ($complement =~ /[^agctui-]/i){ # allow inosine (MP)
message("error","error","The complementary sequence contains one or more illegal digits. The only legal digits are a,A,c,C,g,G,i,I,t,T,u,U");
return;
} elsif (length $sequence != length $complement){
message("error","error","The sequence and its complement have different length");
return;
} else {$options.=" -C$complement";}
}
if ($probe <= 0 or $probe > 0.1){
message("error","error","The concentration of nucleic acid is out of range. It has to be over 0 and under 0.1 M");
return;
} else {$options.=" -P$probe";}
if ($salt < 0 or $salt > 10){
message("error","error","The concentration of salt out of range. It has to be over 0 and under 10 M");
return;
} else {$options.=" -N$salt";}
if ($potassium < 0){
message("error","error","The concentration of potassium must be positive.");
return;
} elsif ($potassium > 0) {$options.=" -k$potassium";} # Check for non-zero before passing to command line (MP)
if ($tris < 0){
message("error","error","The concentration of tris must be positive.");
return;
} elsif ($tris > 0){$options.=" -t$tris";} # Check for non-zero before passing to command line (MP)
if ($magnesium < 0){
message("error","error","The concentration of magnesium must be positive.");
return;
} elsif ($magnesium > 0 or $Korrection eq "owc08") {$options.=" -G$magnesium";} # Check for non-zero before passing to command line. Also force Owc by passing magnesium even if zero (MP)
if ($factor ne "" and $factor ne "default"){
if ($factor =~ /\D/){
message("error","error","The factor of correction for the nucleic acid concentration seems to contain one or more illegal characters. It has to be a number");
return;
} else {$options.=" -F$factor";}
}
#-------------
# C'est parti
#-------------
@results=`melting $options -v -q 2>&1`;
print "@results";
#------------------------
# Parsing of the results
#------------------------
foreach $line (@results){
if ($line =~ /^ \w/){
$error.=$line;
} elsif ($line =~ /^ \w/){
@content = split(" ",$line);
if ($content[0] eq "Enthalpy:"){
$enthalpy = $content[1];
} elsif ($content[0] eq "Entropy:"){
$entropy = $content[1];
} elsif ($content[0] eq "Melting"){
$tm = $content[2];
} else{
# Do nothing
}
}
}
if (defined $error){
$error =~ s/\n//;
message("error","error",$error);
}
}
#############################################################################
# This function opens a window and display the messages required by argument
#############################################################################
sub message{
my $title = shift; # chops the title as the first argument
my $bitmap = shift; # chops the bitmap as the second argument
my $message = shift;
my $message_window = $mw->Dialog(
-title => $title,
-bitmap => $bitmap,
-text => $message,
-default_button => 'OK',
-buttons => ['OK']
)->Show;
}
[01/05/2013] Nicolas Le Novère (n.lenovere@gmail.com)
Upgraded the TkMELTING interface to cover for version 4.3
Code was provided by Markus Piotrowski (Markus.Piotrowski@ruhr-uni-bochum.de)
version 4.3.1
[05/08/2014]Marine Dumousseau (marine@ebi.ac.uk)
Added parameters for consecutive locked nucleic acids and single mismatch in consecutive locked nucleic acids from Owczarzy et al. 2011
Updated version to 5.2.0
[23/05/2014]Marine Dumousseau (marine@ebi.ac.uk)
Fixed a bug in Locked nucleic acids formula which did not deal with terminal locked nucleic acids
Updated version to 5.1.2
[06/02/2014]Marine Dumousseau (marine@ebi.ac.uk)
Update documentation
Added batch script to run MELTING 5 with a file containing different sequences
[04/10/2013]William John Gowers (gowersj@babraham.ac.uk)
Added MELTING GUI for MELTING 5.x.
Updated version to 5.1.1
[09/08/2013]William John Gowers (gowersj@babraham.ac.uk)
Added new thermodynamic parameters for DNA/RNA duplexes from Watkins et al. (2010). Nucl. Acids Res. 39, 1894-1902.
[10/02/2013]Marine Dumousseau (marine@ebi.ac.uk)
Thanks to Richard Owczarzy:
Fixed typos in some thermodynamic parameters:
- bom00 model. GA/C- parameters are dH = -2.1 kcal/mol and dS = -3.9 in the paper
- san05 inosing model. Paramaters rounded to -6.0 kcal/mol. The paper reports -5.6 kcal/mol enthalpy.
- xia98 model. Parameters rounded into -6.8 kcal/mol. published -6.82 kcal/mol
- san04 bulge loop model. The sign of the entropy parameters are wrong.
- ser08 dangling ends model. The sign of some parameters (5' dangling ends) are wrong.
Added new GU parameters from from Serra et al., Biochemistry (2012) 51, 3508-3522. They are now the default parameters for GU base pairs.
version 5.1.0
[06/11/2012]Marine Dumousseau (marine@ebi.ac.uk)
Fix default path to NN files
version 5.0.6
[07/03/2012]Marine Dumousseau (marine@ebi.ac.uk)
Updated the documentation. The factor F cannot be 2 when the oligonucleotides are not self complementary and
one strand is in excess. In this case, F should be 1.
version 5.0.5
[07/01/2011]Marine Dumousseau (marine@ebi.ac.uk)
Changed the installation script
When melting is used without arguments, now displays the help
version 5.0.4
[02/11/2009] Marine Dumousseau (marine@ebi.ac.uk)
Changed the MELTING 5 documentations (references and acknoledgement)
Changed the files in the testResults folder.
version 5.0.3
[23/10/2009] Marine Dumousseau (marine@ebi.ac.uk)
Fixed a bug in bre07a.nn.
version 4.3c
Fixed some bugs in the inosine and single mismatch files.
Added other tests.
Changed the JAR File.
Fixed a bug for the hydroxyadenine model.
Put by 'all97' as default DNA Crick's pair thermodynamic model
version 5.0.2
[14/10/2009] Marine Dumousseau (marine@ebi.ac.uk)
Fixed some bugs in the melting.bib file.
version 5.0.1
[08/10/09] Marine Dumousseau (marine@ebi.ac.uk)
Fixed some bugs in the Javadoc.
Created a build.xml file and buildProject.sh to build the project.
[28/08/09] Marine Dumousseau (marine@ebi.ac.uk)
Fixed a bug for the option -O in OptionManagement.
Created the CompatibleMain class which allow a compatibility
between MELTING 4 and MELTING 5 options (except for the option '-q').
[17/08/09] Marine Dumousseau (marine@ebi.ac.uk)
Version 5 in Java.
New thermodynamic models and parameters for : Crick's pair,
single mismatch, tandem mismatch, internal loop, single
dangling end, double dangling end, long dangling end (only poly A),
inosine, hydroxyadenine, azobenzene, locked nucleic acids, single
bulge loop, long bulge loop.
New corrections for sodium, magnesium or mixed Na, Mg.
New corrections for DMSO and formamide.
[01/JUN/2009] Marine Dumousseau (marine@ebi.ac.uk)
tkmelting.1, tkmelting.1.xml and melting-gui.desktop added.
acknoledgements updated in the different documentation files.
version 4.3b
[15/APR/2009] Marine Dumousseau (marine@ebi.ac.uk)
mac executable added.
[14/APR/2009] Marine Dumousseau (marine@ebi.ac.uk)
Index.html added to the DOC folder.
linux 64 bits executable added.
[03/APR/2009] Marine Dumousseau (marine@ebi.ac.uk)
Documentation modified.
[31/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
mistakes in the thermodynamic tables corrected. Documentation
modification.
[31/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
inosine parameters added
[30/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
Perl interface bugs correction and move some files. Calcul.c and
melting.c bugs correction.
[27/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
Correction of the function which computes the fraction of GC base pairs.
We can now take in account the mismatches CXor GX and inosine mismatches
IG or IC.
New parameters of Santalucia added
[26/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
add the inosine parameters. (from Santalucia 2005 for DNA duplexes and
from Brent M. Znosko 2007 for RNA duplexes (only IU base pairs)).
add the option -i for enter a new set of inosine parameters.
version 4.3
[25/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
add the magnesium correction. (algorithm from Owczarzy 2008, only for
DNA/DNA duplexes)
add the options -k, -t, -G for the potassium, tris and magnesium
concentration.
The Tris+ concentration is about the half of total Tris concentration.
version 4.3
version 4.3
[24/MAR/2009] Marine Dumousseau (marine@ebi.ac.uk)
Fix mistakes in the calorimetric table sug95a.nn.
version 4.2i
version 4.2i
[08/AUG/2007] Nicolas Le Novère (lenov@ebi.ac.uk)
Move from isolatin-1 to utf-8
version 4.2h
[06/SEP/2004] Nicolas Le Novère (lenov@ebi.ac.uk)
Fix mistakes in the calorimetric table xia98a.nn.
version 4.2g
[20/MAY/2004] Nicolas Le Novère (lenov@ebi.ac.uk)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.