#!/bin/sh PDB=$1 SYMM=$2 RESOLUTION=$3 PG=$4 if [ "x$PDB" = "x" ]; then echo "Syntax: $0 [] []" echo echo "The space group and point group must be consistent, it's just" echo "that I don't know how to convert the space group to a point" echo "group." exit fi if [ "x$SYMM" = "x" ]; then echo "Syntax: $0 []" exit fi if [ "x$RESOLUTION" = "x" ]; then echo "Resolution not given. Using 3 Angstroms." RESOLUTION=3 fi if [ "x$PG" = "x" ]; then echo "Point group not given. Output will not contain symmetry information." PG=unknown 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 echo "Failed! Please examine gen-sfs.html for more information." exit 1 fi echo "Running cad to get the right asymmetric unit..." cad HKLIN1 ${PDB}.mtz HKLOUT ${PDB}-sorted.mtz >> gen-sfs.html <> gen-sfs.html << EOF READ ${PDB}-sorted.mtz EXPAND WRITE ${PDB}-P1.mtz STOP EOF echo "Converting structure factors to text..." mtz2various hklin ${PDB}-P1.mtz hklout ${PDB}-temp.hkl >> gen-sfs.html < ${PDB}.hkl << WIBBLE use strict; my \$line; open(FILE, "${PDB}-temp.hkl"); printf("CrystFEL reflection list version 2.0\n"); printf("Symmetry: ${PG}\n"); printf(" h k l I phase sigma(I) nmeas\n"); while ( \$line = ) { 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("%4i %4i %4i %10.2f %8.2f %10.2f %7i\n", \$h, \$k, \$l, \$intensity, \$phase, 0.0, 1); } else { printf(STDERR "Couldn't understand line '%s'\n", \$line); } } close(FILE); printf("End of reflections\n"); WIBBLE rm -f ${PDB}-temp.hkl