#!/usr/bin/perl # the above is the standard linux/unix path for perl: change if your computer is nonstandard sub print_help{ print STDERR <0 or die "Invalid atom index $atom1\n"; $atom2=shift(@ARGV)+0; $atom2>0 or die "Invalid atom index $atom2\n"; next; } if($p eq "-h"){ # help print_help; die "\n"; } print_help; die "invalid option $p\n"; } if($#inputfiles<0){ push(@inputfiles,"-"); # adds stdio for lack of arguments } @ave=(0.,0.,0.); @ave2=(0.,0.,0.); @max=(-$BIG,-$BIG,-$BIG); @min=($BIG,$BIG,$BIG); while ($filename=shift(@inputfiles)){ for($i=0;$i<3;$i++){ $di[$i]=0; } $count=-1; $frames=0; open(INPUT, $filename) || die "Cannot open $filename\n"; while(){ s/^\s*//; # remove leading spaces @li = split('\s+'); if($#li==0 && $count!=0){ $count=-1; $frames++; if($di[0]!=0 || $di[1]!=0 || $di[2]!=0){ # previous frame... $distance=0.; for($i=0;$i<3;$i++){ $distance+=$di[$i]*$di[$i]; } print $distance."\n"; } for($i=0;$i<3;$i++){ $di[$i]=0; } } if($count==0){ print $frames." ".$li[1]." "; }elsif($count>0){ if($count==$atom1){ for($i=0;$i<3;$i++){ $di[$i]+=$li[$i+1]; } } if($count==$atom2){ for($i=0;$i<3;$i++){ $di[$i]-=$li[$i+1]; } } } $count++; } close(INPUT); $distance=0.; # last frame... for($i=0;$i<3;$i++){ $distance+=$di[$i]*$di[$i]; } print $distance."\n"; }