#!/usr/bin/perl # talos2aco # # written by Brian Volkman (bvolkman@mcw.edu) # # generate DYANA format PHI/PSI dihedral angle constraints (.aco file) # from TALOS output (pred.tab file) # # syntax: talos2aco talos_filename > dyana_aco_filename # # adjust minimum angle restraint by changing value of 'min_ang' on # the following line; TALOS will generate restraints based on the # standard deviation of the 10 best predicted conformations for each # residue, and in some cases this can be as little as +/- 5 degrees or # less, probably too tight for tyipcal structure refinement. original # value is 10, which produces restraints no tighter than +/- 10 degrees. $min_ang = 10; $file1 = $ARGV[0]; $lb = 0; $sum = 0; $count = 0; %amino = ( "A" => "ALA", "C" => "CYS", "D" => "ASP-", "E" => "GLU-", "F" => "PHE", "G" => "GLY", "H" => "HIST", "I" => "ILE", "K" => "LYS+", "L" => "LEU", "M" => "MET", "N" => "ASN", "P" => "PRO", "Q" => "GLN", "R" => "ARG+", "S" => "SER", "T" => "THR", "V" => "VAL", "W" => "TRP", "Y" => "TYR", ); open (FILE1, "$file1") || die "syntax: talos2aco talos_filename > dyana_aco_filename\n"; while () { @fld = split(/\s+/, $_); #delimits by whitespace if($fld[9] eq "Good") { if($fld[2] ne "P") { if($fld[5]<$min_ang) { $fld[5]=$min_ang; } if($fld[6]<$min_ang) { $fld[6]=$min_ang; } $angle = "PHI"; $lower = $fld[3]-$fld[5]; $upper = $fld[3]+$fld[5]; $~ = "DYANA_ACO"; write; } $angle = "PSI"; $lower = $fld[4]-$fld[6]; $upper = $fld[4]+$fld[6]; $~ = "DYANA_ACO"; write; } } close(FILE1); #define format for output format DYANA_ACO = @>>> @<<< @<<< @####.# @####.# $fld[1], $amino{"$fld[2]"}, $angle, $lower, $upper .