#! /bin/csh

#    FMO result grabber
#       version 1.3
# written October 27, 2005
#   Dmitri G. Fedorov
#         AIST
# creates one file for all pair energies and NFG files for pair energies
# with fixed first monomer. 
# Required FMO version: 2.1 and up.
# Arguments: GAMESS FMO output file
# Output: CSV files that can be directly read by either GNUplot or Excel.
# example:
# fmograbres FMOtuto.out
#
# Support level and restrictions: 
# 1-layer only.
# only 2-body results (possibly from a 3-body file).
# single point runs only (NOT optimisation log)

if($# != 1 || ! -e $1) then
  echo GAMESS output should be the only argument.
  exit
endif
echo Grabbing the results from $1...
set eij=$1:r.eij.csv
set ei_j=$1:r.eij
set tmp1=$1:r.tmp1
set tmp2=$1:r.tmp2
grep "^[0-9 ][0-9 ][0-9 ][0-9 ][0-9][0-9 ][0-9 ][0-9 ][0-9 ][0-9] [NCMS][1-9]" <$1 >$tmp1
set ncols=`head -1 <$tmp1 | wc -w`
set ifgcol=1
set jfgcol=2
set RIJcol=5
set QIJcol=6
set EIJcol=8
if($ncols > 10) set EIJcol=9
@ DIJcol = $ncols - 1
set totcol=$ncols
echo Creating triangular pair interaction file... 
awk <$tmp1 -v ifgcol=$ifgcol -v jfgcol=$jfgcol -v RIJcol=$RIJcol -v QIJcol=$QIJcol -v EIJcol=$EIJcol -v DIJcol=$DIJcol -v totcol=$totcol '{ printf "%4d,%4d,%7.2f,%8.4f,%13.8f,%12.8f,%9.3f\n",$ifgcol,$jfgcol,$RIJcol,$QIJcol,$EIJcol,$DIJcol,$totcol }' > $eij
set nfg=`tail -1 <$eij | cut -d, -f1`
awk <$tmp1 -v ifgcol=$ifgcol -v jfgcol=$jfgcol -v RIJcol=$RIJcol -v QIJcol=$QIJcol -v EIJcol=$EIJcol -v DIJcol=$DIJcol -v totcol=$totcol '{ printf "%4d,%4d,%7.2f,%8.4f,%13.8f,%12.8f,%9.3f\n%4d,%4d,%7.2f,%8.4f,%13.8f,%12.8f,%9.3f\n",$ifgcol,$jfgcol,$RIJcol,$QIJcol,$EIJcol,$DIJcol,$totcol,$jfgcol,$ifgcol,$RIJcol,-$QIJcol,$EIJcol,$DIJcol,$totcol }' >$tmp2
# for easy processing add zero self-interaction
set ifg=1
while ($ifg <= $nfg)
  echo $ifg | awk '{ printf "%4d,%4d,%7.2f,%8.4f,%13.8f,%12.8f,%9.3f\n",$1,$1,0,0,0,0,0 }' >>$tmp2 
@ ifg ++
end
# sort the data once
#echo Sorting square pair interaction file... 
#sort -n <$tmp2 >$tmp1
# extract interaction for each monomer 
set ifg=1
while ($ifg <= $nfg )
# set i=`echo $ifg | awk '{ printf "^%4d",$1}'`
  echo Processing fragment $ifg out of $nfg
  grep "^[ ]*$ifg," < $tmp2 | cut -d, -f2- | sort -n >$ei_j.$ifg.csv
@ ifg ++
end
rm -f $tmp1 $tmp2
