aboutsummaryrefslogtreecommitdiff
path: root/scripts/gen-sfs
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2011-11-10 16:08:06 +0100
committerThomas White <taw@physics.org>2012-02-22 15:27:39 +0100
commitf70d3c1535f672c9bd313a229f44d52c979a6ad7 (patch)
tree98ad6da2edcb8e7ab09a89c4232765e6d17c94bc /scripts/gen-sfs
parente21d69a9141e3f64147aa2f68f9c3634d66a493f (diff)
Add scripts/gen-sfs for calculating scattering
Diffstat (limited to 'scripts/gen-sfs')
-rwxr-xr-xscripts/gen-sfs80
1 files changed, 80 insertions, 0 deletions
diff --git a/scripts/gen-sfs b/scripts/gen-sfs
new file mode 100755
index 00000000..bf86fb01
--- /dev/null
+++ b/scripts/gen-sfs
@@ -0,0 +1,80 @@
+#!/bin/sh
+
+PDB=$1
+SYMM=$2
+RESOLUTION=$3
+
+if [ "x$PDB" = "x" ]; then
+ echo "Syntax: $0 <PDB file> <space group> [<resolution>]"
+ exit
+fi
+
+if [ "x$SYMM" = "x" ]; then
+ echo "Syntax: $0 <PDB file> <space group> [<resolution>]"
+ exit
+fi
+
+if [ "x$RESOLUTION" = "x" ]; then
+ echo "Resolution not given. Using 3 Angstroms."
+ RESOLUTION=3
+fi
+
+echo "Running sfall to calculate structure factors..."
+sfall XYZIN $PDB HKLOUT ${PDB}.mtz > gen-sfs.html << EOF
+MODE SFCALC XYZIN
+RESOLUTION $RESOLUTION 1000
+FORM NGAUSS 5
+SYMM $SYMM
+END
+EOF
+if [ $? -ne 0 ]; then exit 1; fi
+
+echo "Running cad to get the right asymmetric unit..."
+cad HKLIN1 ${PDB}.mtz HKLOUT ${PDB}-sorted.mtz >> gen-sfs.html <<EOF
+TITLE Sorted blah
+LABIN FILE 1 E1=FC E2=PHIC
+CTYPE FILE 1 E1=F E2=P
+EOF
+if [ $? -ne 0 ]; then exit 1; fi
+
+echo "Converting structure factors to text..."
+mtz2various hklin ${PDB}-sorted.mtz hklout ${PDB}-temp.hkl >> gen-sfs.html <<EOF
+LABIN H=H K=K L=L FC=FC PHIC=PHIC
+OUTPUT USER '(3I4,2F9.1)'
+EOF
+if [ $? -ne 0 ]; then exit 1; fi
+rm -f ${PDB}.mtz
+perl < ${PDB}-temp.hkl > ${PDB}.hkl << WIBBLE
+use strict;
+
+my \$line;
+open(FILE, "${PDB}-temp.hkl");
+
+printf(" h k l I phase sigma(I) 1/d(nm^-1) ".
+ "counts fs/px ss/px\\n");
+
+while ( \$line = <FILE> ) {
+
+ if ( \$line =~ /^\s*([\d\-]+)\s+([\d\-]+)\s+([\d\-]+)\s+([\d\-\.]+)\s+([\d\-\.]+)/ ) {
+
+ my \$h = \$1;
+ my \$k = \$2;
+ my \$l = \$3;
+ my \$intensity = \$4*\$4; # Square to convert F->I
+ my \$phase = \$5;
+
+ printf("%3i %3i %3i %10.2f %8.2f %10.2f %s %7i %6.1f %6.1f\n",
+ \$h, \$k, \$l, \$intensity, \$phase, 0.0,
+ " -", 1, 0.0, 0.0);
+
+ } else {
+ printf(STDERR "Couldn't understand line '%s'\n", \$line);
+ }
+
+}
+close(FILE);
+printf("End of reflections\n");
+WIBBLE
+exit
+
+rm -f ${PDB}-temp.hkl