#!/usr/sbin/perl
#
#	PROGRAM TO CONVERT TALOS PROGRAM DIHEDRAL RESTRAINTS TO AMBER FORMAT
#       ONLY RESTRAINTS DESIGNATED AS "GOOD" BY TALOS ARE CONVERTED
#
#	D.E. VOLK 04-19-03 UTMB
#
# usage: talos_to_amber_restr.pl prediction.tab output.disang 
#
$tablein = shift(@ARGV);
$disout = shift(@ARGV);
$tempfile = "temp999file";
#
# COPY FILE MINUS THE FIRST 19 LINES TO A NEW TEMP FILE 
#
system "tail +20 $tablein > temp999file";
#
#
open(MYIN, "$tempfile") || die "Cannot open file $tempfile";
open(OUT, ">>$disout") || die "Cannot open file $disout";
#
while (<MYIN>)
   { 
        ($r1,$r2,$r3,$r4,$r5,$r6,$r7,$r8,$r9) = split(' ',$_);
        if ($r9 =~ /Good/)
	  {
		$res = $r1;     # residue number
		$pre = $r1-1;   # previous residue number
		$nxt = $r1+1;   # next residue number
		$phi = $r3;     # average phi 
		$psi = $r4;     # average psi
		$dphi = $r5;    # Std Dev of Phi
		$dpsi = $r6;    # Std Dev of Psi

		$phi1 = $phi - 2* $dphi; 
		$phi2 = $phi - 1* $dphi; 
		$phi3 = $phi + 1* $dphi; 
		$phi4 = $phi + 2* $dphi; 

		$psi1 = $psi - 2* $dpsi; 
		$psi2 = $psi - 1* $dpsi; 
		$psi3 = $psi + 1* $dpsi; 
		$psi4 = $psi + 2* $dpsi; 

# PRINT PHI RESTRAINT
                printf OUT "# TALOS PHI RESTRAINT FOR RESIDUE %3s\n",$res;
                printf OUT " \&rst \n"; 
                printf OUT " iat(1) = %3s     , iat(2) = %3s     ,\n",$pre,$res; 
                printf OUT " iat(3) = %3s     , iat(4) = %3s     ,\n",$res,$res; 
                printf OUT " atnam(1) = 'C   ' , atnam(2) = 'N   ' , atnam(3) = 'CA  ' ,\n";
                printf OUT " atnam(4) = 'C   ' , iresid = 1,\n";
                printf OUT " r1  = %7.1f , r2 = %7.1f , r3 = %7.1f, r4 =  %7.1f , \n",$phi1,$phi2,$phi3,$phi4;
                printf OUT " rk2 = 200.0, rk3 = 200.0,\n";
                printf OUT " \&end\n\n";


# PRINT PSI RESTRAINT
                printf OUT "# TALOS PSI RESTRAINT FOR RESIDUE %3s\n",$res;
                printf OUT " \&rst \n"; 
                printf OUT " iat(1) = %3s     , iat(2) = %3s     ,\n", $res,$res; 
                printf OUT " iat(3) = %3s     , iat(4) = %3s     ,\n", $res,$nxt; 
                printf OUT " atnam(1) = 'N   ' , atnam(2) = 'CA  ' , atnam(3) = 'C   ' ,\n";
                printf OUT " atnam(4) = 'N   ' , iresid = 1,\n";
                printf OUT " r1  = %7.1f , r2 = %7.1f , r3 = %7.1f , r4 =  %7.1f ,\n",$psi1,$psi2,$psi3,$psi4;
                printf OUT " rk2 = 200.0, rk3 = 200.0\n";
                printf OUT " \&end\n\n";

           }
   }
