7
edits
Olibclarke (talk | contribs) No edit summary |
|||
Line 348: | Line 348: | ||
</pre> | </pre> | ||
to copy the script from this website into an executable file generate_XDS.INP in your current directory. | to copy the script from this website into an executable file generate_XDS.INP in your current directory. | ||
==xds_generate_all: variant of Generate_XDS.INP including scripts for visualisation of statistics and conversion to MTZ== | |||
This script includes some minor modifications of the Generate_XDS.INP script - for instance, it tells the user the energy, as well as the wavelength of the X-rays, and gives the user the beam center in mm as well as pixels - useful when switching between HKL2000, MOSFLM and XDS. | |||
It also generates two executable shell scripts in the same directory as XDS.INP. | |||
The first of these scripts, xds_graph.sh, extracts various statistics from INTEGRATE.LP and CORRECT.LP, pipes them out to a logfile, INTEGRATE_STATS.LP, and plots them using loggraph. This script does not have some of the more useful features of XDSSTAT, such as calculation of per frame Rmeas values, but it does give a quick overview of various data quality parameters by resolution and image number. This script will only work with recent versions of XDS (after calculation of CC(1/2) - not sure exactly which version). | |||
The second of these scripts, xds_to_ccp4.sh, will take XDS_ASCII.HKL and generate a CCP4-format MTZ file, containing anomalous data (as F(+)/F(-) and DANO/SigDANO) and a test set of 5% of reflections for calculation of the free R-factor. It will also generate an unmerged SHELX format HKL file, for input into SHELXC/D/E (e.g. via the HKL2MAP GUI). | |||
Here is the script: | |||
<pre> | |||
#!/bin/bash | |||
# purpose: xds_generate_all | |||
# | |||
# tested with some datasets from ALS, SSRL, SLS, ESRF and BESSY; only MARCCD, ADSC/SMV, PILATUS detectors; | |||
# for other detectors, values marked with XXX must be manually filled in. | |||
# | |||
# revision 0.03 . Kay Diederichs 2/2010 | |||
# revision 0.04 . Kay Diederichs 4/2010 - include alternative ORGX, ORGY calculations for ADSC | |||
# revision 0.05 . Kay Diederichs 5/2010 - grep for "Corrected" in addition to "marccd"; needed for BESSY | |||
# revision 0.06 . KD 6/2010 - add UNTRUSTED_RECTANGLE and UNTRUSTED_ELLIPSE; use `whereis catmar` and so on | |||
# revision 0.07 . KD 6/2010 - decide about ORGX/Y info in MAR header being pixels or mm; other fixes | |||
# revision 0.08 . KD 6/2010 - fixes for Pilatus 6M | |||
# revision 0.09 . KD 6/2010 - get rid of requirement for mccd_xdsparams.pl and/or catmar; rather use "od" | |||
# revision 0.10 . Tim Gruene 7/2010 - set link 'images' to image directory if path exceeds 72 characters | |||
# revision 0.11 . KD 7/2010 - for MarCCD: look for distance info at different byte position | |||
# revision 0.12 . KD 7/2010 - fix for negative PHISTART | |||
# revision 0.13 . KD 8/2010 - store correct NX NY QX QY in XDS.INP | |||
# revision 0.14 . KD 1/2011 - SENSOR_THICKNESS for Pilatus; MINIMUM_NUMBER_OF_PIXELS_IN_A_SPOT=3 | |||
# revision 0.15 . KD 2/2011 - add comment for -ive sign of APS 19-ID and Australian Synchrotron rotation axis | |||
# revision 0.16 . KD 3/2011 - SENSOR_THICKNESS=0.01 for ADSC and MarCCD. Add comment about SILICON= | |||
# revision 0.17 . KD 3/2011 - make it work for .bz2 frames; improve screen output | |||
# revision 0.18 . KD 4/2011 - faster by doing "strings" only once; revert "images/${1##/*/}" "correction" | |||
# revision 0.19 . KD 6/2011 - bugfix for 0.18 | |||
# revision 0.20 . KD 7/2011 - redirect stderr of /bin/ls to /dev/null | |||
# revision 0.21 . KD 11/2011 - SEPMIN, CLUSTER_RADIUS hints; read NX NY from header (for Pilatus 2M) | |||
# revision 0.22 . KD 12/2011 - Pilatus 2M UNTRUSTED_RECTANGLE lines, SENSOR_THICKNESS from header | |||
# revision 0.23 . KD 1/2012 - add UNTRUSTED_QUADRILATERAL, remove MINIMUM_ZETA (0.05 is default now) | |||
# revision 0.24 . KD 3/2012 - remove revision 0.10 since XDS now takes much longer paths | |||
# revision 0.25 . KD 3/2012 - remove revision 0.22 for PSI Pilatus 2M; see http://www.globalphasing.com/autoproc/wiki/index.cgi?TroubleShootingKnownIssues | |||
# revision 0.26 Oliver Clarke 10/12 - Added generation of shell scripts for conversion to MTZ and visualisation of statistics. Other minor alterations to XDS.INP. | |||
REVISION="0.26 (18-Oct-2012)" | |||
# | |||
# usage: e.g. xds_generate_all "frms/mydata_1_???.img" | |||
# make sure to have the two quotation marks ! | |||
# the ? are wildcards for the frame numbers. | |||
# | |||
# limitations: | |||
# - frame numbers are assumed to start with 1 and run consecutively | |||
# | |||
# known problems: | |||
# - for ADSC detectors, there are at least three ways to obtain ORGX and ORGY values from the header (see below); | |||
# - the same might be a problem for MAR headers, too (not sure about this) | |||
# | |||
# notes for debugging of the script: | |||
# - add the -v option to the first line, to see where an error occurs | |||
# - comment out the removal of tmp1 and tmp2 in the last line | |||
# | |||
# ====== Start of script ====== | |||
echo generate_XDS.INP version $REVISION . Obtain the latest version from | |||
echo http://strucbio.biologie.uni-konstanz.de/xdswiki/index.php/generate_XDS.INP | |||
if [ "$1" == "help" ] || [ "$1" == "-help" ] || [ "$1" == "-h" ]; then | |||
echo usage: xds_generate_all \"frms/mydata_1_???.img\" \(_with_ the quotation marks!\) | |||
echo if the frames are compressed with bzip2, leave out the .bz2 extension! | |||
exit | |||
fi | |||
# | |||
# defaults: | |||
# | |||
DETECTOR="XXX MINIMUM_VALID_PIXEL_VALUE=XXX OVERLOAD=XXX" | |||
ORGX=XXX | |||
ORGY=XXX | |||
ORGXMM=XXX | |||
ORGYMM=XXX | |||
DETECTOR_DISTANCE=XXX | |||
OSCILLATION_RANGE=XXX | |||
X_RAY_WAVELENGTH=XXX | |||
X_RAY_ENERGY=XXX | |||
QX=XXX | |||
QY=XXX | |||
NX=XXX | |||
NY=XXX | |||
NXMM=XXX | |||
NYMM=XXX | |||
SENSOR_THICKNESS=0 | |||
# see how we are called: | |||
NAME_TEMPLATE_OF_DATA_FRAMES="$1" | |||
# list frames matching the wildcards in NAME_TEMPLATE_OF_DATA_FRAMES | |||
# don't accept the "direct beam" shot at SLS/Pilatus PX-I and PX-II | |||
/bin/ls -C1 $1 $1.bz2 2>/dev/null | egrep -v "_00000.cbf|_000.img" > tmp1 || exit 1 | |||
# we can continue - the frames are found | |||
# set upper limit of DATA_RANGE to number of frames (see "limitations" above) | |||
DATA_RANGE=`wc -l tmp1 | awk '{print $1}'` | |||
# set upper limit of SPOT_RANGE to half of DATA_RANGE, but not less than 1 | |||
SPOT_RANGE=`echo "scale=0; $DATA_RANGE/2" | bc -l` | |||
SPOT_RANGE=`echo "if ($SPOT_RANGE<1) 1;if ($SPOT_RANGE>1) $SPOT_RANGE" | bc -l` | |||
echo DATA_RANGE=1 $DATA_RANGE | |||
# find out detector type | |||
DET=XXX | |||
FIRSTFRAME=`head -1 tmp1` | |||
echo $FIRSTFRAME | grep -q bz2 && bzcat $FIRSTFRAME > tmp1 && FIRSTFRAME=tmp1 | |||
strings $FIRSTFRAME > tmp2 | |||
egrep -q 'marccd|Corrected' tmp2 && DET=mccd | |||
grep -q PILATUS tmp2 && DET=pilatus | |||
grep -q BEAM_CENTER_X tmp2 && DET=adsc | |||
# identify other detector types in the same way (MAR IP would be straightforward) | |||
# parse ASCII header of first frame | |||
if [ "$DET" == "XXX" ]; then | |||
echo "this is not a MAR, ADSC/SMV or PILATUS detector - fill in XXX values manually!" | |||
DETECTOR="XXX MINIMUM_VALID_PIXEL_VALUE=XXX OVERLOAD=XXX" | |||
# find parameters of first frame | |||
elif [ "$DET" == "mccd" ]; then | |||
echo Data from a MarCCD detector | |||
DETECTOR="CCDCHESS MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65500" | |||
SENSOR_THICKNESS=0.01 | |||
# use first frame of dataset to obtain parameters | |||
# offsets are documented; values can be find in mccd_xdsparams.pl script | |||
let SKIP=1024+80 | |||
NX=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
let SKIP=$SKIP+4 | |||
NY=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
let SKIP=1720 | |||
DETECTOR_DISTANCE=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
DETECTOR_DISTANCE=`echo "scale=3; $DETECTOR_DISTANCE/1000" | bc -l` | |||
let SKIP=1024+256+128+256+4 | |||
ORGX=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
ORGX=`echo "scale=2; $ORGX/1000" | bc -l ` | |||
let SKIP=$SKIP+4 | |||
ORGY=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
ORGY=`echo "scale=2; $ORGY/1000" | bc -l ` | |||
let SKIP=1024+256+128+256+44 | |||
PHISTART=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
let SKIP=1024+256+128+256+76 | |||
PHIEND=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
OSCILLATION_RANGE=`echo "scale=3; ($PHIEND-($PHISTART))/1000" | bc -l` | |||
let SKIP=1024+256+128+256+128+4 | |||
QX=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
QX=`echo "scale=10; $QX/1000000" |bc -l ` | |||
let SKIP=$SKIP+4 | |||
QY=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
QY=`echo "scale=10; $QY/1000000" |bc -l ` | |||
let SKIP=1024+256+128+256+128+128+12 | |||
X_RAY_WAVELENGTH=$(od -t dI -j $SKIP -N 4 $FIRSTFRAME | head -1 | awk '{print $2}') | |||
X_RAY_WAVELENGTH=`echo "scale=5; $X_RAY_WAVELENGTH/100000" | bc -l` | |||
X_RAY_ENERGY=`echo "12398.5/$X_RAY_WAVELENGTH" | bc -l | awk '{printf "%5.1f", $1}'` | |||
# at most BLs, ORGX and ORGY are in pixels, but sometimes in mm ... guess: | |||
NXBYFOUR=`echo "scale=0; $NX/4" | bc -l ` | |||
ORGXINT=`echo "scale=0; $ORGX/1" | bc -l ` | |||
if [ $ORGXINT -lt $NXBYFOUR ]; then | |||
ORGXMM=$ORGX | |||
ORGYMM=$ORGY | |||
NXMM=`echo "$NX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
NYMM=`echo "$NY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
ORGX=`echo "scale=1; $ORGX/$QX" | bc -l` | |||
ORGY=`echo "scale=1; $ORGY/$QY" | bc -l` | |||
echo MARCCD detector: header ORGX, ORGY seem to be in mm ... converting to pixels | |||
else | |||
ORGXMM=`echo "$ORGX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
ORGYMM=`echo "$ORGY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
NXMM=`echo "$NX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
NYMM=`echo "$NY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
echo MARCCD detector: header ORGX, ORGY seem to be in pixel units | |||
fi | |||
elif [ "$DET" == "adsc" ]; then | |||
DETECTOR="ADSC MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65000" | |||
echo Data from ADSC detector. Obtaining ORGX, ORGY depends on beamline setup: | |||
SENSOR_THICKNESS=0.01 | |||
sed s/\;// tmp2 > tmp1 | |||
mv tmp1 tmp2 | |||
# find X_RAY_WAVELENGTH: | |||
X_RAY_WAVELENGTH=`grep WAVELENGTH tmp2 | head -1 | sed s/WAVELENGTH=//` | |||
# find NX, QX, ORGX and ORGY: | |||
X_RAY_ENERGY=`echo "12398.5/$X_RAY_WAVELENGTH" | bc -l | awk '{printf "%5.1f", $1}'` | |||
NX=`grep SIZE1 tmp2 | tail -1 | sed s/SIZE1=//` | |||
QX=`grep PIXEL_SIZE tmp2 | sed s/PIXEL_SIZE=//` | |||
# FIXME - next 2 lines should be done properly, from header | |||
NY=$NX | |||
QY=$QX | |||
NXMM=`echo "$NX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
NYMM=`echo "$NY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
BEAM_CENTER_X=`grep BEAM_CENTER_X tmp2 | sed s/BEAM_CENTER_X=//` | |||
BEAM_CENTER_Y=`grep BEAM_CENTER_Y tmp2 | sed s/BEAM_CENTER_Y=//` | |||
# fix 2010-04-26 - tell user about possible ORGX, ORGY alternatives - | |||
# at ESRF and ... (pls fill in!) the following should be used: | |||
ORGX=`echo "scale=1; $BEAM_CENTER_Y/$QX" | bc -l` | |||
ORGY=`echo "scale=1; $BEAM_CENTER_X/$QX" | bc -l` | |||
echo - at ESRF BLs use: ORGX=$ORGX ORGY=$ORGY | |||
# this 2nd alternative convention should be used at the following beamlines (pls complete the list): ALS 5.0.3, ... | |||
ORGX=`echo "scale=1; $NX-$BEAM_CENTER_X/$QX" | bc -l ` | |||
ORGY=`echo "scale=1; $BEAM_CENTER_Y/$QX" | bc -l ` | |||
echo - at e.g. ALS 5.0.3 use: ORGX=$ORGX ORGY=$ORGY | |||
# this 3rd alternative convention should be used at the following beamlines (pls complete the list): ALS 8.2.2, ... | |||
ORGX=`echo "scale=1; $BEAM_CENTER_X/$QX" | bc -l ` | |||
ORGY=`echo "scale=1; $NX-$BEAM_CENTER_Y/$QX" | bc -l ` | |||
ORGXMM=`echo "$ORGX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
ORGYMM=`echo "$ORGY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
echo - at e.g. ALS 8.2.2 use: ORGX=$ORGX ORGY=$ORGY - this is written to XDS.INP | |||
# the latter alternative is written into the generated XDS.INP ! You have to correct this manually in XDS.INP, or adjust this script. | |||
# find DETECTOR_DISTANCE and OSCILLATION_RANGE: | |||
DETECTOR_DISTANCE=`grep DISTANCE tmp2 | sed s/DISTANCE=//` | |||
OSCILLATION_RANGE=`grep OSC_RANGE tmp2 | sed s/OSC_RANGE=//` | |||
elif [ "$DET" == "pilatus" ]; then | |||
DETECTOR="PILATUS MINIMUM_VALID_PIXEL_VALUE=0 OVERLOAD= 1048576 !PILATUS" | |||
QX=0.172 QY=0.172 | |||
echo Data from a Pilatus detector | |||
sed s/#// tmp2 > tmp1 | |||
mv tmp1 tmp2 | |||
# find SENSOR_THICKNESS: | |||
SENSOR_THICKNESS=`grep thickness tmp2 | sed -e s/'Silicon sensor, thickness'// | awk '{print $1*1000}'` | |||
# find X_RAY_WAVELENGTH: | |||
X_RAY_WAVELENGTH=`grep Wavelength tmp2 | sed -e s/Wavelength// -e s/A// | awk '{print $1}'` | |||
X_RAY_ENERGY=`echo "12398.5/$X_RAY_WAVELENGTH" | bc -l | awk '{printf "%5.1f", $1}'` | |||
# find NX and NY; 2463/2527 is 6M, 1475/1679 is 2M | |||
NX=`grep X-Binary-Size-Fastest-Dimension tmp2 | awk '{print $2}'` | |||
NY=`grep X-Binary-Size-Second-Dimension tmp2 | awk '{print $2}'` | |||
NXMM=`echo "$NX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
NYMM=`echo "$NY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
# find ORGX and ORGY: | |||
ORGX=`grep Beam_xy tmp2 | sed -e s/\(// -e s/\)// -e s/\,// | awk '{print $2}'` | |||
ORGY=`grep Beam_xy tmp2 | sed -e s/\(// -e s/\)// -e s/\,// | awk '{print $3}'` | |||
ORGXMM=`echo "$ORGX*$QX" | bc -l | awk '{printf "%3.2f", $1}'` | |||
ORGYMM=`echo "$ORGY*$QY" | bc -l | awk '{printf "%3.2f", $1}'` | |||
# find DETECTOR_DISTANCE and OSCILLATION_RANGE: | |||
DETECTOR_DISTANCE=`awk '/distance/{print $2}' tmp2` | |||
DETECTOR_DISTANCE=`echo "$DETECTOR_DISTANCE*1000" | bc -l` | |||
OSCILLATION_RANGE=`awk '/Angle/{print $2}' tmp2` | |||
else | |||
echo should never come here | |||
exit 1 | |||
fi | |||
echo ORGX= $ORGX ORGY= $ORGY - check these values with adxv ! | |||
echo DETECTOR_DISTANCE= $DETECTOR_DISTANCE | |||
echo OSCILLATION_RANGE= $OSCILLATION_RANGE | |||
echo X-RAY_WAVELENGTH= $X_RAY_WAVELENGTH | |||
# now we know everything that is required to generate XDS.INP | |||
cat > XDS.INP << eof | |||
!**************************************************************************************** | |||
! Written by generate_XDS.INP version $REVISION | |||
! | |||
! A few notes on usage and modification of this input file: | |||
! | |||
! If XDS fails after IDXREF with an error indicating that | |||
! an insufficient percentage of reflections were indexed, | |||
! but you are confident that the indexing solution is | |||
! correct, rerun XDS with the JOB keyword changed to | |||
! "DEFPIX INTEGRATE CORRECT". | |||
! | |||
! After the first round of integration (in a triclinic cell) | |||
! it is often helpful to reintegrate using the globally | |||
! refined cell parameters and the correct space group. | |||
! You can do this by renaming GXPARM.XDS to XPARM.XDS | |||
! - e.g. by the command "cp GXPARM.XDS XPARM.XDS" - | |||
! and rerunning DEFPIX, INTEGRATE and CORRECT. | |||
! | |||
! If you are trying to determine the optimal starting point for | |||
! data collection starting from a single image, first complete | |||
! a run of XDS using default parameters. Then, rerun XDS using | |||
! the correct cell and spacegroup as described above | |||
! ("cp GXPARM.XDS XPARM.XDS"), but on the second run of XDS, give | |||
! the JOB keyword as "JOB=DEFPIX XPLAN". | |||
!**************************************************************************************** | |||
! | |||
!**************************************************************************************** | |||
!General parameters: | |||
!**************************************************************************************** | |||
JOB= XYCORR INIT COLSPOT IDXREF DEFPIX INTEGRATE CORRECT | |||
ORGX= $ORGX ORGY= $ORGY ! check these values with adxv! | |||
!In mm, ORGX=$ORGXMM and ORGY=$ORGYMM | |||
DETECTOR_DISTANCE= $DETECTOR_DISTANCE | |||
OSCILLATION_RANGE= $OSCILLATION_RANGE | |||
X-RAY_WAVELENGTH= $X_RAY_WAVELENGTH | |||
!X-ray energy is $X_RAY_ENERGY eV (calculated from wavelength) | |||
NAME_TEMPLATE_OF_DATA_FRAMES=$NAME_TEMPLATE_OF_DATA_FRAMES | |||
!REFERENCE_DATA_SET=xxx/XDS_ASCII.HKL ! e.g. to ensure consistent indexing. | |||
!XDS will *only* use the reference dataset if the space group and cell | |||
!parameters are specified below. | |||
DATA_RANGE=1 $DATA_RANGE | |||
SPOT_RANGE=1 $SPOT_RANGE | |||
!BACKGROUND_RANGE=1 10 !Default is first five degrees. | |||
SPACE_GROUP_NUMBER=0 ! 0 if unknown | |||
UNIT_CELL_CONSTANTS= 70 80 90 90 90 90 ! put correct values if known | |||
INCLUDE_RESOLUTION_RANGE=50 0 ! After CORRECT, insert high resol limit; re-run CORRECT | |||
! Ice rings can be excluded from scaling with the keyword | |||
! EXCLUDE_RESOLUTION_RANGE, e.g. EXCLUDE_RESOLUTION_RANGE=2.28 2.22 | |||
!SECONDS=60 !Uncomment this line to tell XDS to wait 1min for the next image before aborting. | |||
!**************************************************************************************** | |||
!Parameters important for processing anomalous data: | |||
!**************************************************************************************** | |||
FRIEDEL'S_LAW=FALSE ! This acts only on the CORRECT step. Even if the anomalous signal | |||
! in your dataset is very small, it still may be useful for | |||
! calculating an anomalous difference map. | |||
STRICT_ABSORPTION_CORRECTION=FALSE !Change this to TRUE if the anomalous signal | |||
! is strong: in that case, in CORRECT.LP the three | |||
! "CHI^2-VALUE OF FIT OF CORRECTION FACTORS" values | |||
! will be significantly> 1, e.g. 1.5. | |||
WFAC1=1.0 !This parameter controls rejection of misfits during scaling. Sometimes, | |||
! strong anomalous pairs may be rejected as misfits, in which case increasing | |||
! WFAC1 (e.g. to 1.5) may improve anomalous signal. | |||
!**************************************************************************************** | |||
!Regions of the detector to be excluded during indexing and integration: | |||
!**************************************************************************************** | |||
! exclude (mask) untrusted areas of detector, e.g. beamstop shadow : | |||
!UNTRUSTED_RECTANGLE= !1800 1950 2100 2150 ! x-min x-max y-min y-max ! repeat | |||
!UNTRUSTED_ELLIPSE= !2034 2070 1850 2240 ! x-min x-max y-min y-max ! if needed | |||
!UNTRUSTED_QUADRILATERAL= !x1 y1 x2 y2 x3 y3 x4 y4 ! see documentation | |||
TRUSTED_REGION=0.00 1.2 ! Partially use corners of detectors; 1.41421=full use, 1.0=edge | |||
! It is important to note that TRUSTED_REGION is the only resolution | |||
! cutoff obeyed during indexing and integration; | |||
! Both INCLUDE_RESOLUTION_RANGE and EXCLUDE_RESOLUTION_RANGE are | |||
! ignored during IDXREF and INTEGRATE. So this parameter can be | |||
! important when indexing or integration steps fail. | |||
!**************************************************************************************** | |||
!Other parameters: | |||
!**************************************************************************************** | |||
VALUE_RANGE_FOR_TRUSTED_DETECTOR_PIXELS=7000. 30000. ! Often 8000 is ok. | |||
STRONG_PIXEL=4 ! COLSPOT: only use strong reflections (default is 3; 6 may be better for strong data) | |||
MINIMUM_NUMBER_OF_PIXELS_IN_A_SPOT=3 ! default of 6 is sometimes too high | |||
MAXIMUM_ERROR_OF_SPOT_POSITION=3 ! Increasing may help for poor quality data | |||
MINPK=75 !Increase (e.g. MINPK=98) to improve data accuracy at the expense of completeness. | |||
DELPHI=5 !Size of integration wedge. Increasing to 10 or 20 may be helpful in some cases. | |||
NUMBER_OF_PROFILE_GRID_POINTS_ALONG_ALPHA/BETA=13 ! Default is 9 - Increasing may improve data | |||
NUMBER_OF_PROFILE_GRID_POINTS_ALONG_GAMMA=13 ! accuracy, particularly if finely-sliced on phi, | |||
! and does not seem to have any downsides. | |||
MINIMUM_ZETA=0.05 ! Controls how close to the blind region (about phi) reflections should be | |||
! integrated. 0.05 is the default; increasing MINIMUM_ZETA to 0.15 *may* | |||
! improve data quality by removing unreliable reflections near the phi | |||
! axis, but will reduce completeness in low symmetry space groups. | |||
SEPMIN=6 ! Reduce if spots are close together (due to a long axis). Consider | |||
CLUSTER_RADIUS=3 ! increasing if crystal is split and unit cell dimensions are relatively short. | |||
! For bad or low resolution data remove the "!" in the following line (default is ALL): | |||
! REFINE(IDXREF)=CELL BEAM ORIENTATION AXIS ! DISTANCE | |||
REFINE(INTEGRATE)=CELL BEAM ORIENTATION ! AXIS DISTANCE (If integration is unstable, comment out this line. | |||
! REFINE(CORRECT)=CELL BEAM ORIENTATION AXIS DISTANCE ! Default is: refine everything | |||
ROTATION_AXIS=1 0 0 !At e.g. Australian Synchrotron, SERCAT ID-22 (?), APS 19-ID (?) this needs to be -1 0 0 | |||
!**************************************************************************************** | |||
! Parameters specifically for this detector and beamline (shouldn't need changing): | |||
!**************************************************************************************** | |||
DETECTOR= $DETECTOR | |||
SENSOR_THICKNESS= $SENSOR_THICKNESS | |||
! attention CCD detectors: for very high resolution (better than 1A) make sure to specify SILICON | |||
! as about 32* what CORRECT.LP suggests (absorption of phosphor is much higher than that of silicon) | |||
NX= $NX NY= $NY QX= $QX QY= $QY ! to make CORRECT happy if frames are unavailable | |||
!In mm, NX=$NXMM and NY=$NYMM | |||
DIRECTION_OF_DETECTOR_X-AXIS=1 0 0 | |||
DIRECTION_OF_DETECTOR_Y-AXIS=0 1 0 | |||
INCIDENT_BEAM_DIRECTION=0 0 1 | |||
FRACTION_OF_POLARIZATION=0.98 ! better value is provided by beamline staff! | |||
POLARIZATION_PLANE_NORMAL=0 1 0 | |||
eof | |||
if [ "$DET" == "pilatus" ]; then | |||
if [ $NX == "1475" ]; then | |||
if ! grep -q FF_p2m0109_E12398_T6199_vrf_m0p20.tif tmp2 ; then | |||
cat >> XDS.INP << eof | |||
!EXCLUSION OF VERTICAL DEAD AREAS OF THE PILATUS 2M DETECTOR | |||
UNTRUSTED_RECTANGLE= 486 496 0 1680 | |||
UNTRUSTED_RECTANGLE= 980 990 0 1680 | |||
!EXCLUSION OF HORIZONTAL DEAD AREAS OF THE PILATUS 2M DETECTOR | |||
UNTRUSTED_RECTANGLE= 0 1476 194 214 | |||
UNTRUSTED_RECTANGLE= 0 1476 406 426 | |||
UNTRUSTED_RECTANGLE= 0 1476 618 638 | |||
UNTRUSTED_RECTANGLE= 0 1476 830 850 | |||
UNTRUSTED_RECTANGLE= 0 1476 1042 1062 | |||
UNTRUSTED_RECTANGLE= 0 1476 1254 1274 | |||
UNTRUSTED_RECTANGLE= 0 1476 1466 1486 | |||
eof | |||
fi | |||
# elif [ $NX == "2463" ]; then | |||
# cat >> XDS.INP << eof | |||
#eof | |||
fi | |||
fi | |||
touch xds_to_ccp4.sh | |||
echo "#!/bin/bash | |||
#Removes old log file if present | |||
rm xds_to_ccp4.log | |||
#Makes new log file | |||
touch xds_to_ccp4.log | |||
#Pipe stdout and stderr to both logfile and tty | |||
tail -f -n1 xds_to_ccp4.log & | |||
exec > xds_to_ccp4.log 2>&1 | |||
echo \" | |||
If this message is all you see, | |||
something has probably gone wrong. | |||
Are you sure XDS_ASCII.HKL is present | |||
in the current directory? | |||
\" | |||
#Make first MTZ file (with DANO/SIGDANO) | |||
echo \"INPUT_FILE=XDS_ASCII.HKL | |||
OUTPUT_FILE=temp.hkl CCP4 | |||
MERGE=TRUE | |||
GENERATE_FRACTION_OF_TEST_REFLECTIONS=0.05 | |||
FRIEDEL'S_LAW=FALSE\" > XDSCONV.INP | |||
xdsconv | |||
f2mtz HKLOUT temp.mtz<F2MTZ.INP | |||
#Make second MTZ file (with F(+)/F(-)) | |||
echo \"INPUT_FILE=XDS_ASCII.HKL | |||
OUTPUT_FILE=temp2.hkl CCP4_F | |||
MERGE=TRUE | |||
GENERATE_FRACTION_OF_TEST_REFLECTIONS=0.05 | |||
FRIEDEL'S_LAW=FALSE\" > XDSCONV.INP | |||
xdsconv | |||
f2mtz HKLOUT temp2.mtz<F2MTZ.INP | |||
#Make SHELX format unmerged hkl file | |||
echo \"INPUT_FILE=XDS_ASCII.HKL | |||
OUTPUT_FILE=xds_shelx.hkl SHELX | |||
MERGE=FALSE | |||
FRIEDEL'S_LAW=FALSE\" > XDSCONV.INP | |||
xdsconv | |||
#cad the two previously generated MTZ files together | |||
cad HKLIN1 temp.mtz HKLIN2 temp2.mtz HKLOUT xds_ccp4_merged.mtz<<EOF | |||
LABIN FILE 1 E1=FP E2=SIGFP E3=DANO E4=SIGDANO E5=FreeRflag | |||
LABIN FILE 2 E1=F(+) E2=SIGF(+) E3=F(-) E4=SIGF(-) | |||
END | |||
EOF | |||
#Remove temporary files | |||
rm temp.mtz | |||
rm temp2.mtz | |||
rm temp.hkl | |||
rm temp2.hkl | |||
rm F2MTZ.INP | |||
echo \" | |||
********************************XDS_TO_CCP4********************************** | |||
This script takes XDS_ASCII.HKL and uses XDSCONV and F2MTZ to | |||
generate a merged CCP4-format MTZ file named | |||
\\\"xds_ccp4_merged.mtz\\\" with a test (free) set | |||
labeled \\\"FreeRflag\\\" constituting 5% of reflections. | |||
The space group of the output MTZ file will be the same as | |||
that present in XDS_ASCII.HKL. It is probably worth checking | |||
that this is the correct space group - either manually inspect | |||
the systematic absences in CORRECT.LP, or run XDS_ASCII.HKL | |||
through the CCP4 program POINTLESS (\\\"pointless xdsin XDS_ASCII.HKL\\\") | |||
Anomalous data is kept, if present, and output as both | |||
DANO/SIGDANO and F(+)/F(-). | |||
This script also generates an unmerged SHELX hkl file, | |||
suitable for input into SHELXC/D/E, named \\\"xds_shelx.hkl\\\". | |||
A log of all processes is present in xds_to_ccp4.log. | |||
Parts of this script have been shamelessly copied from | |||
the XDS Wiki, at http://www.strucbio.biologie.uni-konstanz.de/xdswiki/ | |||
****************************************************************************** | |||
\"" > xds_to_ccp4.sh | |||
touch xds_graph.sh | |||
echo "#!/bin/bash | |||
#Makes new log file | |||
touch INTEGRATE_STATS.LP | |||
#Pipe stdout and stderr to both logfile and tty | |||
tail -f -n1 INTEGRATE_STATS.LP & | |||
exec > INTEGRATE_STATS.LP 2>&1 | |||
echo \" | |||
\\\$TABLE: XDS Integration Statistics : | |||
\\\$SCATTER:Scale factors by image:A:1,3: :Number of overloads by image:A:1,5: :Number of strong reflections by image:A:1,7: :Number of rejects by image:A:1,8: :Mosaicity by image:A:1,10: \\$\\$ | |||
IMAGE IER SCALE NBKG NOVL NEWALD NSTRONG NREJ SIGMAB SIGMAR | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep \"[0-9]\.[0-9][0-9][0-9][0-9] [0-9]\.[0-9][0-9][0-9][0-9]\" INTEGRATE.LP | |||
echo \" \\$\\$ \" | |||
echo \" | |||
\\\$TABLE: XDS Scaling Statistics by Resolution (X-axis is resolution in Angstroems) : | |||
\\\$GRAPHS:Chi-Squared by resolution:A:2,4: :Observed and expected R-factors by resolution (as %):A:2,5,6: :Rejects by resolution:A:2,9: :Rejects by resolution as a percentage of total reflections:A:2,10: \\$\\$ | |||
LOW_RES Resolution(Angstroems) I/Sigma Chi^2 R-FACTOR(OBSERVED) R-FACTOR(EXPECTED) NUMBER_OF_REFLECTIONS ACCEPTED REJECTS REJECT_PERCENT | |||
\\$\\$ \\$\\$ | |||
\" | |||
awk '/RESOLUTION RANGE I\/Sigma Chi\^2 R\-FACTOR R\-FACTOR NUMBER ACCEPTED REJECTED/, /\-\-\-\-\-\-\-\-\-/' CORRECT.LP | egrep -v \"[a-z,A-Z,] | \-\-|\-99\.9\" | egrep \"[0-9]\" | awk '{print \$1,\$2,\$3,\$4,\$5,\$6,\$7,\$8,\$9,(\$9/(\$8+\$9))*100}' | |||
echo \" \\$\\$\" | |||
echo \" | |||
\\\$TABLE: Overall data quality by Resolution (X-axis is resolution in Angstroems) : | |||
\\\$GRAPHS:Completeness vs resolution :A:1,6: :Redundancy vs resolution :A:1,4: :I/Sigma by resolution:A:1,10: :Rmeas by resolution:A:1,11: :Anomalous correlation by resolution:A:1,13: :Significance of the anomalous signal by resolution:A:1,14: \\$\\$ | |||
Resolution(Angstroems) OBSERVED_REFLECTIONS UNIQUE_REFLECTIONS REDUNDANCY POSSIBLE_REFLECTIONS COMPLETENESS R-FACTOR(OBSERVED) R-FACTOR(EXPECTED) COMPARED I/SIGMA R-meas CC(1/2) Anomalous_Correlation SigAno Nano | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep -B25 \" WILSON STATISTICS \" CORRECT.LP | egrep -v \"[a-z,A-Z]|\*\*\*\" | egrep \" \" | awk '{ gsub(/[%*]/,\" \"); print }' | awk '{print \$1,\$2,\$3,\$2/\$3,\$4,\$5,\$6,\$7,\$8,\$9,\$10,\$11,\$12,\$13,\$14}' | |||
echo \" \\$\\$ \" | |||
echo \" | |||
\\\$TABLE: I/Sigma of h00 reflections (for identification of systematic absences): | |||
\\\$GRAPHS:I/Sigma vs h :A:1,5: \\$\\$ | |||
h k l RES I/SIGMA NUMBER | |||
\\$\\$ \\$\\$ | |||
\" | |||
awk '/REFLECTIONS OF TYPE H/,/COMPLETENESS AND QUALITY/' CORRECT.LP | egrep \"[1-9]\" | awk '{print \$1,\$2,\$3,\$4,\$7,\$8}' | awk '(\$1 > 0)' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE: I/Sigma of 0k0 reflections (for identification of systematic absences): | |||
\\\$GRAPHS:I/Sigma vs k :A:2,5: \\$\\$ | |||
h k l RES I/SIGMA NUMBER | |||
\\$\\$ \\$\\$ | |||
\" | |||
awk '/REFLECTIONS OF TYPE H/,/COMPLETENESS AND QUALITY/' CORRECT.LP | egrep \"[1-9]\" | awk '{print \$1,\$2,\$3,\$4,\$7,\$8}' | awk '(\$2 > 0)' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE: I/Sigma of 00l reflections (for identification of systematic absences): | |||
\\\$GRAPHS:I/Sigma vs l :A:3,5: \\$\\$ | |||
h k l RES I/SIGMA NUMBER | |||
\\$\\$ \\$\\$ | |||
\" | |||
awk '/REFLECTIONS OF TYPE H/,/COMPLETENESS AND QUALITY/' CORRECT.LP | egrep \"[1-9]\" | awk '{print \$1,\$2,\$3,\$4,\$7,\$8}' | awk '(\$3 > 0)' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE:Beam center (ORGX/ORGY) plotted vs wedge (DELPHI): | |||
\\\$GRAPHS:ORGX and ORGY vs batch (DELPHI) :A:1,2,3: \\$\\$ | |||
N ORGX ORGY | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep \"DETECTOR ORIGIN\" INTEGRATE.LP | grep -n \"\" | awk '{ gsub(/[a-z,A-Z,),(,:]/,\"\"); print }' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE:Unit cell parameters plotted vs wedge: | |||
\\\$GRAPHS:Unit cell lengths a, b and c plotted vs wedge:A:1,2,3,4: :Unit cell angles alpha, beta and gamma plotted vs wedge:A:1,5,6,7: \\$\\$ | |||
N a b c ALPHA BETA GAMMA | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep \"UNIT CELL PARAMETERS\" INTEGRATE.LP | grep -n \"\" | awk '{ gsub(/[a-z,A-Z,),(,:]/,\"\"); print }' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE:Standard deviation of spot position (pixels) plotted vs wedge: | |||
\\\$GRAPHS:Standard deviation of spot position plotted vs wedge:A:1,2: \\$\\$ | |||
N SD | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep \"SPOT POSITION\" INTEGRATE.LP | grep -n \"\" | awk '{ gsub(/[a-z,A-Z,),(,:]/,\"\"); print }' | |||
echo \"\\$\\$\" | |||
echo \" | |||
\\\$TABLE:Detector distance (mm) plotted vs wedge (DELPHI): | |||
\\\$GRAPHS:Detector distance plotted vs batch:A:1,2: \\$\\$ | |||
N DIST | |||
\\$\\$ \\$\\$ | |||
\" | |||
egrep \"DETECTOR DISTANCE \\(mm\\)\" INTEGRATE.LP | grep -n \"\" | awk '{ gsub(/[a-z,A-Z,),(,:]/,\"\"); print }' | |||
echo \"\\$\\$\" | |||
loggraph INTEGRATE_STATS.LP">xds_graph.sh | |||
chmod +x xds_to_ccp4.sh | |||
chmod +x xds_graph.sh | |||
echo "XDS.INP is ready for use. The file has only the most important keywords. | |||
Full documentation, including complete detector templates, is at | |||
http://www.mpimf-heidelberg.mpg.de/~kabsch/xds . More documentation in XDSwiki | |||
After running xds, inspect, using XDS-Viewer, at least the beamstop mask in | |||
BKGPIX.cbf, and the agreement of predicted and observed spots in FRAME.cbf! | |||
Two shell scripts have been generated that may be of use. | |||
The first, xds_graph.sh, will plot various statistics after an XDS run. | |||
After both INTEGRATE and CORRECT have finished, run it by typing \"./xds_graph.sh\" | |||
without the quotation marks. This script uses loggraph to plot data, so you will | |||
need CCP4 to see the graphical output. All the raw data is piped out to a log file, | |||
INTEGRATE_STATS.LP. | |||
The second script, xds_to_ccp4.sh, will take XDS_ASCII.HKL and generate both a CCP4 | |||
format MTZ file with anomalous data retained (as F(+)/F(-) and DANO/SigDANO) | |||
and an unmerged SHELX format hkl file for input to SHELXC/D/E. Run it after CORRECT | |||
by typing \"./xds_to_ccp4.sh\" at the prompt." | |||
rm -f tmp1 tmp2 | |||
</pre> | |||
Use this script in the same manner as Generate_XDS.INP. The two shell scripts created should be executable; If they are not, then make them so (chmod +x ./xxx.sh). |
edits