#!/bin/bash
# This shell script folds an RNA or DNA sequence and creates output
# files.
export _POSIX2_Version=0
export Package_URL="http://www.unafold.org"

export DATDIR=`mfold_datdir|sed -e 's@/$@@'`
export Package=mfold
export Version=3.6

# Abort subroutine
abort() {
    rm -f mfold.log  fort.*
    if [ $# -gt 0 ] ; then
	    echo -e "$1"
    fi
    echo "Job Aborted"
    exit 1
}
	
if [ $# -eq 0 ]
	then
    echo -e "Usage is\nmfold SEQ='file_name' with optional parameters:
    [ AUX='auxfile_name' ] [ RUN_TYPE=text (default) or html ]
    [ NA=RNA (default) or DNA ] [ LC=sequence type (default = linear) ]
    [ T=temperature (default = 37 deg C) ] [ P=percent (default = 5) ]
    [ NA_CONC=Na+ molar concentration (default = 1.0) ]
    [ MG_CONC=Mg++ molar concentration (default = 0.0) ]
    [ W=window parameter (default - set by sequence length) ]
    [ MAXBP=max base pair distance (default - no limit) ]
    [ MAX=maximum number of foldings to be computed (default 100) ]
    [ MAX_LP=maximum bulge/interior loop size (default 30) ]
    [ MAX_AS=maximum asymmetry of a bulge/interior loop (default 30) ]
    [ ANN=structure annotation type: none (default), p-num or ss-count ]
    [ MODE=structure display mode: auto (default), bases or lines ]
    [ LAB_FR=base numbering frequency ] [ ROT_ANG=structure rotation angle ]
    [ START=5' base # (default = 1)] [ STOP=3' base # (default = end) ]
    [ REUSE=NO/YES (default=NO) reuse existing .sav file ]"
    exit 2
elif [ $# -eq 1 ] ; then
    if [ $1 = '-V' -o $1 = '-v' ] ; then
	echo "$Package version $Version"
	exit 0
    fi
fi

# Write header
echo "$Package version $Version"

# Set default values.
SEQ=""
RUN_TYPE=text
NA=RNA
LC=linear
T=default
P=5
W=-1
MAXBP="no limit"
MAX=100
ANN=none
MODE=auto
LAB_FR=default
ROT_ANG=0
START=1
STOP=30000
REUSE=NO

# Process the command line arguments 1 at a time.
COUNT=$#
while [ $COUNT != 0 ]; do
    if [ `echo $1|cut -d= -f1` = "SEQ" ]; then
	SEQ=`echo $1|cut -d= -f2`
    elif [ `echo $1|cut -d= -f1` = "AUX" ]; then
	AUX=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "RUN_TYPE" ]; then
	RUN_TYPE=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "NA" ]; then
	NA=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "LC" ]; then
	LC=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "T" ]; then
	T=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "NA_CONC" ]; then
	NA_CONC=`echo $1|cut -d= -f2`
    elif [ `echo $1|cut -d= -f1` = "MG_CONC" ]; then
	MG_CONC=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "P" ]; then
	P=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "W" ]; then
	W=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "MAXBP" ]; then
	MAXBP=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "MAX" ]; then
	MAX=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "MAX_LP" ]; then
	MAX_LP=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "MAX_AS" ]; then
	MAX_AS=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "ANN" ]; then
	ANN=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "MODE" ]; then
	MODE=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "LAB_FR" ]; then
	LAB_FR=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "ROT_ANG" ]; then
	ROT_ANG=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "START" ]; then
	START=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "STOP" ]; then
	STOP=`echo $1|cut -d= -f2`     
    elif [ `echo $1|cut -d= -f1` = "REUSE" ]; then
	REUSE=`echo $1|cut -d= -f2`     
    else
	echo "Invalid entry: " $1 "on command line."    
	exit 1
    fi
    COUNT=`expr $COUNT - 1`
    shift
done
NA_CONC=${NA_CONC:-1.0}
MG_CONC=${MG_CONC:-0.0}
MAX_LP=${MAX_LP:-30}
MAX_AS=${MAX_AS:-30}


echo REUSE= $REUSE
# Check for sequence
if [ ! -s $SEQ ]; then
    echo "Sequence has not been defined or it does not exist."
    exit 1
fi

# SEQ is redefined to local version but the FILE_PREFIX does not
# contain "local" in it.
FILE_PREFIX=`reformat-seq.sh $SEQ`
SEQ=${FILE_PREFIX}-local.seq

#LOGFILE=/dev/null
LOGFILE=$FILE_PREFIX.log

# Create con file from aux file (for constrained folding)
AUX=${AUX:-$FILE_PREFIX.aux}
rm -f $FILE_PREFIX.con
# Maximum range for base pairs
if [ "$MAXBP" != "no limit" ]; then
    echo -e "9\n" $MAXBP|tr -d " " >> $FILE_PREFIX.con
fi
if [ -s $AUX ]; then
    echo "Constraint file is " $AUX
#  Single force
    grep F $AUX|tr "O" "0"|grep " 0 "|sed 's/F/2+/g'|\
	sed 's/ 0 / /g'|tr "+" "\012" >> $FILE_PREFIX.con
#  Double force
    grep F $AUX|tr "O" "0"|grep -v " 0 "|sed 's/F/3+/g'|\
	tr "+" "\012" >> $FILE_PREFIX.con
#  Single prohibit
    grep P $AUX|tr "O" "0"|grep " 0 "|sed 's/P/6+/g'|\
	sed 's/ 0 / /g'|tr "+" "\012"  >> $FILE_PREFIX.con
#  Double prohibit
    grep P $AUX|tr "O" "0"|grep -v " 0 "|grep -v "-"|sed 's/P/7+/g'|\
	tr "+" "\012" >> $FILE_PREFIX.con
#  Range prohibit
    grep P $AUX|grep "[0-9]-[0-9]"|tr "-" " "|sed 's/P/8+/g'|\
	tr "+" "\012" >> $FILE_PREFIX.con
fi

# Write out sequence using 'auxgen'
auxgen ${FILE_PREFIX}-local > $LOGFILE 2>&1 || abort "auxgen failed"
mv ${FILE_PREFIX}-local.pnt $FILE_PREFIX.pnt 
SEQ_NAME=`head -n1 $FILE_PREFIX.pnt|cut -c1-72|tr -s " " " "|sed 's/^ //'|sed 's/^>//'`
echo $FILE_PREFIX.pnt "created."

LENGTH=`grep '^#BASES= ' $FILE_PREFIX.pnt|awk '{printf "%d",$2}'`
if [ $STOP -gt $LENGTH ]; then
    STOP=$LENGTH
fi
if [ $START -lt 1 ]; then
    START=1
fi
LENGTH=`expr $STOP - $START + 1`
echo "Sequence length is" $LENGTH

# Generate energy tables for temperature T
# EXT is extension for energy file names
# T=default means that T was not specified on the command line.
# This yields version 3.0 energies at 37 degrees (.dat) for RNA
E_Version=2.3
if [ $T = default ]; then
    T=37
    if [ $NA = RNA ]; then
	EXT=dat
	E_Version=3.0
    else
	EXT=37
    fi
else
    if [ $T -lt 0 ]; then
	T=0
    elif [ $T -gt 100 ]; then
	T=100
    fi
    EXT=$T
fi

# Choosing program nafold2, sav2plot2 and sav2p-num2 have been
# abandoned. No more short integers for the fill energy arrays.
# Note also that sav2p-num is now sav2p_num 
# Executable files containing '-' should be avoided.
PROG=nafold 
SAV2PLOT=sav2plot
SAV2PNUM=sav2p_num
# Test for sir_graph_ng
which sir_graph_ng >/dev/null 2>&1
if [ $? -eq 0 ] ; then
    SIR_GRAPH=sir_graph_ng
else
    SIR_GRAPH=sir_graph
fi

ARG1=`echo $LC|cut -c1`
ARG2=$RUN_TYPE

if [ ! -s $FILE_PREFIX.sav -o $REUSE = NO ]; then
    if [ $EXT = dat ]; then
	echo "Folding at 37 degrees using version 3.0 dat files."
    else
newtemp >> $LOGFILE 2>&1 <<EOF || abort "newtemp failed"
$NA
$T
$NA_CONC
$MG_CONC
EOF
if [ $NA = RNA ]; then
    echo "RNA free energy files (version 2.3) at $T degrees created."
else
    echo "DNA free energy files (version 3.0) at $T degrees created."
fi
    fi
    
# Fold the sequence; creating a save file.
# Skip this is the .sav file already exists.
    
# First create a command file.
cat > $FILE_PREFIX.cmd <<EOF
1
$FILE_PREFIX.sav
$SEQ
1
$START
$STOP
asint1x2.$EXT
asint2x3.$EXT
dangle.$EXT
loop.$EXT
miscloop.$EXT
sint2.$EXT
sint4.$EXT
sint6.$EXT
stack.$EXT
tloop.$EXT
triloop.$EXT
tstackh.$EXT
tstacki.$EXT
1
7
$MAX_LP
8
$MAX_AS
 
EOF
    
# Add constraints, if any.
if [ -s $FILE_PREFIX.con ]; then
   cat $FILE_PREFIX.con >> $FILE_PREFIX.cmd
fi
# Finish nafold command file.
echo "10" >> $FILE_PREFIX.cmd
$PROG $ARG1 $ARG2 < $FILE_PREFIX.cmd >>$LOGFILE 2>&1 || abort "Fill run failed"
echo "Save file created using ${PROG}."
if [ ! -s $FILE_PREFIX.sav ] ; then
   abort "Save file is empty. No foldings."
fi
rm -f $FILE_PREFIX.cmd
# End of REUSE=YES bypass
fi

# Create the ASCII KCAL plot file.
# The energy increment, KCAL, should be (P * Vmin)/100

# Run sav2plot2 program just to retrieve minimum
# folding energy, ENERGY

$SAV2PLOT > $FILE_PREFIX.tmp-log  <<EOF
$FILE_PREFIX.sav
$FILE_PREFIX.plot
0
EOF

# Get folding energy
ENERGY=`grep 'vmin = ' $FILE_PREFIX.tmp-log|awk '{printf "%0.2f",$3}'`
rm -f $FILE_PREFIX.tmp-log
echo "Minimum folding energy is $ENERGY kcal/mol."
KCAL=`echo -e $ENERGY|awk -v p=$P '{a=-$1*p/100; if(p<0) {a=-p/100} else \
      {if (a<1) {a=1}; if (a>12) {a=12}}; printf "%0.2f", a}'`
echo "Energy increment is $KCAL kcal/mol."

$SAV2PLOT >> $LOGFILE 2>&1 <<EOF || abort "Plot file generation failed"
$FILE_PREFIX.sav
$FILE_PREFIX.plot
$KCAL
4
EOF

# Filter plot file. On 6/3/96, Zuker removes single base pairs only
FILTER=1
if [ $LENGTH -gt 100 ]; then
   FILTER=2
   filter-sort $FILE_PREFIX.plot $FILTER >> $LOGFILE 2>&1
fi

# Create the p-num file
$SAV2PNUM $FILTER >> $LOGFILE 2>&1 <<EOF || abort "P-num file not created"
$FILE_PREFIX.sav
$FILE_PREFIX.ann
$KCAL
EOF

# Run the h-num program.
h-num $FILE_PREFIX o >> $LOGFILE 2>&1 || abort "H-num file not created"
head -n1 $FILE_PREFIX.h-num > temp1-$FILE_PREFIX
tail -n+2 $FILE_PREFIX.h-num|sort -k4 > temp2-$FILE_PREFIX
cat temp1-$FILE_PREFIX temp2-$FILE_PREFIX > $FILE_PREFIX.h-num
rm -f temp1-$FILE_PREFIX temp2-$FILE_PREFIX 
echo -e 'H-num file created from plot file.'

# Create suboptimal foldings
if [ $W = -1 ]; then
 if [ $LENGTH -lt "30" ]
    then
    W="0"
 elif [ $LENGTH -lt "50" ]
    then
    W="1"
 elif [ $LENGTH -lt "120" ]
    then
    W="2"
 elif [ $LENGTH -lt "200" ]
    then
    W="3"
 elif [ $LENGTH -lt "300" ]
    then
    W="5"
 elif [ $LENGTH -lt "400" ]
    then
    W="7"
 elif [ $LENGTH -lt "500" ]
    then
    W="8"
 elif [ $LENGTH -lt "600" ]
    then
    W="10"
 elif [ $LENGTH -lt "700" ]
    then
    W="11"
 elif [ $LENGTH -lt "800" ]
    then
    W="12"
 elif [ $LENGTH -lt "1200" ]
    then
    W="15"
 elif [ $LENGTH -lt "2000" ]
    then
    W="20"
 else
    W="25"
 fi
fi 

if [ $RUN_TYPE = html ]; then
   OUT=out.html
   DET=det.html
else
   OUT=out
   DET=det
fi
$PROG $ARG1 $ARG2 >>$LOGFILE 2>&1 <<EOF || abort "Structures not computed"
2
1
$P
$MAX
$W
$FILE_PREFIX.sav



n
$FILE_PREFIX.$OUT
y
$FILE_PREFIX.ct
y
$FILE_PREFIX.$DET
EOF

# Compute enthalpies and add enthalpies, entropies and crude Tms to
# text and detailed output files.

if [ $EXT != dat -o $NA = DNA ]; then

if [ $NA = RNA ]; then
   DH=dh
else
   DH=dhd
fi
efn <<EOF > $FILE_PREFIX.dh 2>&1
$LC
$FILE_PREFIX.ct
n
n
asint1x2.$DH
asint2x3.$DH
dangle.$DH
loop.$DH
miscloop.$DH
sint2.$DH
sint4.$DH
sint6.$DH
stack.$DH
tloop.$DH
triloop.$DH
tstackh.$DH
tstacki.$DH
EOF
add_dHdSTm $FILE_PREFIX.$OUT $FILE_PREFIX.dh $T $RUN_TYPE >> $LOGFILE 2>&1
mv $FILE_PREFIX.dHdSTm $FILE_PREFIX.$OUT >> $LOGFILE 2>&1
add_dHdSTm $FILE_PREFIX.$DET $FILE_PREFIX.dh $T $RUN_TYPE >> $LOGFILE 2>&1
mv $FILE_PREFIX.dHdSTm $FILE_PREFIX.$DET >> $LOGFILE 2>&1
# Add nucleic acid type, temperature and salt conditions at top of file.
LorC=`echo $LC|tr "lc" "LC"`
if [ $RUN_TYPE = text ]; then
    HEADER=`echo -e "$LorC $NA folding at ${T} C. [Na+] = $NA_CONC, [Mg++] = $MG_CONC."`
    echo -e "${HEADER}" > $FILE_PREFIX.temp
    cat $FILE_PREFIX.$OUT >> $FILE_PREFIX.temp
    mv $FILE_PREFIX.temp $FILE_PREFIX.$OUT
    echo -e "${HEADER}" > $FILE_PREFIX.temp
    cat $FILE_PREFIX.$DET >> $FILE_PREFIX.temp
    mv $FILE_PREFIX.temp $FILE_PREFIX.$DET
else
    HEADER=`echo -e "$LorC $NA folding at ${T} &#176;C. [Na<SUP>+</SUP>] = $NA_CONC, [Mg<SUP>++</SUP>] = $MG_CONC."`
    head -n1 $FILE_PREFIX.$OUT > $FILE_PREFIX.temp
    echo -e "${HEADER}" >> $FILE_PREFIX.temp
    tail -n+1 $FILE_PREFIX.$OUT >> $FILE_PREFIX.temp
    mv $FILE_PREFIX.temp $FILE_PREFIX.$OUT
    head -n1 $FILE_PREFIX.$DET|tr -s " " " " > $FILE_PREFIX.temp
    echo -e "${HEADER}" >> $FILE_PREFIX.temp
    tail -n+3 $FILE_PREFIX.$DET|tr -s ' ' ' ' >> $FILE_PREFIX.temp 
    echo -e "</body></html>"  >> $FILE_PREFIX.temp
    mv $FILE_PREFIX.temp $FILE_PREFIX.$DET
fi

fi

# Create ss-count file.
ss_count < $FILE_PREFIX.ct > $FILE_PREFIX.ss-count

# Use lines mode for larger sequences, unless user overrides this.
if [ $MODE = auto ]; then
   if [ $LENGTH -lt 800 ]; then
      MODE=bases
   else
      MODE=lines
   fi
   if [ $MODE = bases ]; then
      ANN_TYPE=Both
   else
      ANN_TYPE=Dot
   fi
elif [ $MODE = bases ]; then
   ANN_TYPE=Character
else
   ANN_TYPE=Dot
   MODE=lines
fi

echo 'Suboptimal foldings created.'

which boxplot_ng >/dev/null 2>&1
if [ $? -eq 0 ] ; then
# Generate a PostScript and gif energy dot plot.
    boxplot_ng -d -c 4 -pg -r 72 -t "Fold of $SEQ_NAME at ${T} C."\
	$FILE_PREFIX  >> $LOGFILE 2>&1 
    echo 'Energy dot plot created.'
else
    echo 'boxplot_ng not found. No energy dot plot created.'
fi

# Re-evaluate free energies using efn2 if using version 3 rules
if [ $EXT = dat -a $NA = RNA ]; then
   cat $FILE_PREFIX.ct| awk -v SEQ_NAME="$SEQ_NAME" '{\
       if($2 $3 == "dG="){ 
		n = split($0,header,"=") ;
		print header[1]," = 0.0          [initially "$4"] "SEQ_NAME }
        else {print $0}
    }'  > $FILE_PREFIX-temp.ct
# Split ct file into individual files.
   awk -f $DATDIR/split_ct.awk $FILE_PREFIX-temp.ct $FILE_PREFIX-temp >> $LOGFILE 2>&1
   for i in ${FILE_PREFIX}-temp*.ct ; do
      j=`echo $i|sed 's/-temp//'`
      efn2 $i $j
   done
   rm -f $FILE_PREFIX-*.ct 
   cat $FILE_PREFIX.$OUT|sed 's/ dG =/ Initial dG =/' > $FILE_PREFIX-temp.$OUT
   mv $FILE_PREFIX-temp.$OUT $FILE_PREFIX.$OUT
   cat $FILE_PREFIX.$DET|sed 's/ dG =/ Initial dG =/' > $FILE_PREFIX-temp.$DET
   mv $FILE_PREFIX-temp.$DET $FILE_PREFIX.$DET
   echo "Free energies re-evaluated using efn2 and added to ct file."
else
   awk -f $DATDIR/split_ct.awk $FILE_PREFIX.ct $FILE_PREFIX >> $LOGFILE 2>&1
fi

# Generate PostScript and gif output files for each folding

# Compute appropriate flags
# -t h added below by D.S on Oct 28, 1998 to create color annotation table

if [ $ANN = "None" ]; then
    if [ $MODE = lines ] ; then
	FLAG="-outline"
    else
	FLAG=""
    fi
elif [ $ANN = "p-num" ]; then
   if [ $ANN_TYPE = "Character" ]; then
      FLAG="-ab -pnum"
   elif [ $ANN_TYPE = "Dot" ]; then
      FLAG="-ad -pnum"
   else 
      FLAG="-pnum"
   fi
elif [ $ANN = "ss-count" ]; then
   if [ $ANN_TYPE = "Character" ]; then
      FLAG="-ab -ss-count"
   elif [ $ANN_TYPE = "Dot" ]; then
      FLAG="-ad -ss-count"
   else 
      FLAG="-ss-count"
   fi
fi

# Determine labeling frequency
if [ $LAB_FR = default ] ; then
   if [ $LENGTH -le 50 ]; then
      LAB_FR=10
   elif [ $LENGTH -le 300 ]; then
      LAB_FR=20
   else
      LAB_FR=50
   fi
fi

FLAG="$FLAG -ar -bp -rot $ROT_ANG -fix -lab $LAB_FR"
which $SIR_GRAPH >/dev/null 2>&1
if [ $? -eq 0 ] ; then
    for CTFILE in ${FILE_PREFIX}_*.ct ; do
	PREF=`basename $CTFILE .ct`
	echo -e $PREF|cut -d_ -f2|tr '\012' '\011'
	$SIR_GRAPH $FLAG -ss $PREF >> $LOGFILE 2>&1
	$SIR_GRAPH $FLAG -p $PREF >> $LOGFILE 2>&1
	$SIR_GRAPH $FLAG -png $X $PREF >> $LOGFILE 2>&1
	epstopdf ${PREF}.ps || convert ${PREF}.ps ${PREF}.pdf
    done
    echo -e '\nStructure plots generated.'
else
    echo 'sir_graph not found. No structure plots.'
fi

if [ $RUN_TYPE = html ]; then

   NUM_FOLD=`grep STRUCTURE_ $FILE_PREFIX.out.html|wc|tr -s " " " "|\
             cut -d" " -f2`
   if [ $NUM_FOLD = 1 ]; then
      STRUCTURE=Structure
   else
      STRUCTURE=Structures
   fi
   YEAR=`date +%Y`
   echo "Creating html files."
   cat > $FILE_PREFIX.html <<EOF
<html><head><title>$NA folding results on $SEQ_NAME</title></head>
<body bgcolor=#DFC890 text=#000000 vlink=#2F4F4F link=#8E2323 alink=#00FFFF>
<font SIZE=2><code>$PACKAGE</code> version $VERSION :
2005-$YEAR, Michael Zuker, Rensselaer Polytechnic Institute<hr></font>
<center><H1>Folding $SEQ_NAME at $T&#176; C. <font SIZE=2>($E_Version)</font><br>
</H2></center><B><HR SIZE=5><p><pre>
EOF

   tail -n+3 $FILE_PREFIX.pnt >> $FILE_PREFIX.html
   echo "</pre>" >> $FILE_PREFIX.html

   cat >> $FILE_PREFIX.html <<EOF
   <center><img src= $DATDIR/Flower.gif alt="flower" align=middle hspace=20>
   <font COLOR=#8E2323 SIZE=7><I><U>- Output -</U></I></font>
   <img src= $DATDIR/Flower.gif hspace=20 alt="flower" align=middle>
   </center><P><img src=" $DATDIR/l_green.gif" alt="-" hspace=10>
   The <I>energy dot plot</I> for $SEQ_NAME. 
   <a href="$DATDIR/form1-doc.html#EDP">(<i>Definition</i>)</a><br>
   File formats: <a href="$FILE_PREFIX.plot"> <i>Text</i>
   </a>,<a href="$FILE_PREFIX.ps"> <i>PostScript</i></a>,
   <a href="$FILE_PREFIX.gif"><I>gif</I></a><P>
   <img src=" $DATDIR/l_green.gif" ALT="-" hspace=10> Computed $STRUCTURE: &nbsp; New <a href="$FILE_PREFIX.rnaml"><i>RNAML syntax</i></a>,
    &nbsp; <a href="$DATDIR/formats.html">(<i>File Formats</i>)</a>
EOF

   NUM_FOLD=`grep STRUCTURE_ $FILE_PREFIX.out.html|wc|tr -s " " " "|cut -d" " -f2`
   if [ $NUM_FOLD = 1 ]; then
      STRUCTURE=Structure
   else
      STRUCTURE=Structures
   fi
   COUNT=0
   while [ $COUNT != $NUM_FOLD ]; do
      COUNT=`expr $COUNT + 1`
      echo "<P><img src= $DATDIR/green.gif ALT=->
      <a href=$FILE_PREFIX.out.html#STRUCTURE_$COUNT>Structure $COUNT</a> :" >> $FILE_PREFIX.html
      if [ $EXT = dat ]; then
         grep " dG =" ${FILE_PREFIX}_$COUNT.ct|tr -d "]"|tr -s " " " "|cut -d" " -f6-7|sed 's/\[initially/Initial dG =/'|sed 's@$@ kcal/mol,@' >> $FILE_PREFIX.html
      else
         grep " dG =" ${FILE_PREFIX}_$COUNT.ct|tr -d "]"|tr -s " " " "|cut -d" " -f3-5|sed 's@$@ kcal/mol,@' >> $FILE_PREFIX.html
      fi 
      echo "<a href=${FILE_PREFIX}.det.html#STRUCTURE_$COUNT>
      (<I>Thermodynamic Details</I>)</a>.<br>Different structure file formats:
      <a href=${FILE_PREFIX}_$COUNT.ps><i>PostScript</i></a>,
      <a href=${FILE_PREFIX}_$COUNT.gif><i>gif</i></a>,
      <a href=${FILE_PREFIX}_$COUNT.ct><i>.ct file</i></a>,
      <a href=${FILE_PREFIX}_$COUNT.ss><i>XRNA ss</i></a>." >> $FILE_PREFIX.html
   done

   #Trailer
   DATE=`date +"%B %d, %Y."`
   TIME=`date +"%T %Z"`
   echo "<p> $DATE $TIME"  >> $FILE_PREFIX.html

   cat >> $FILE_PREFIX.html <<EOF
      <HR SIZE=5><br><font SIZE=2><a href="$Package_URL/">
      <HR NOSHADE></body></html>
EOF
fi

# Cleanup
rm -f mfold.log  fort.* *.$EXT $SEQ

echo "All done."
