2,684
edits
m (→The script: improve wording) |
|||
(11 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
== The script == | == The script == | ||
<pre> | <pre> | ||
Line 119: | Line 120: | ||
# revision 1.01 . KD 07/12/2020 ROTATION_AXIS=0 -1 0 for Pilatus3 2M, S/N 24-0118 at ID23-2 (http://www.globalphasing.com/autoproc/wiki/index.cgi?BeamlineSettings) | # revision 1.01 . KD 07/12/2020 ROTATION_AXIS=0 -1 0 for Pilatus3 2M, S/N 24-0118 at ID23-2 (http://www.globalphasing.com/autoproc/wiki/index.cgi?BeamlineSettings) | ||
# revision 1.02 . KD 11/01/2021 recognize mar555 detector as mar345 (thanks to Thomas Hauß, HZB) | # revision 1.02 . KD 11/01/2021 recognize mar555 detector as mar345 (thanks to Thomas Hauß, HZB) | ||
REVISION="1. | # revision 1.03 . Feng YU 18/7/2021 fix/expand information about Shanghai Synchrotron Radiation Facility (SSRF) | ||
# revision 1.04 . Zhipu Luo 13/08/2021 extract ORGX,ORGY for electron diffraction from SMV header if the wavelength value starts with 0.0 | |||
# revision 1.05 . KD specialcase extraction of number of images for BNL detectors E-32-0101 and E-18-0104 | |||
# revision 1.06 . KD fix URLs in output. Availability of Apple M1 processor dectris-neggia-Apple-arm64.so . LC_ALL=C . | |||
REVISION="1.06 (15-OCT-2021)" | |||
# | # | ||
Line 143: | Line 148: | ||
exit | exit | ||
fi | fi | ||
# make sure the locale does not interfere with e.g. awk calculations: | |||
LC_ALL="C";export LC_ALL | |||
# | # | ||
# defaults: | # defaults: | ||
Line 172: | Line 179: | ||
SEPMIN=7.0 | SEPMIN=7.0 | ||
CLUSTER_RADIUS=3.5 | CLUSTER_RADIUS=3.5 | ||
REFINE_CORRECT="CELL BEAM ORIENTATION AXIS POSITION ! Default is: refine everything" | |||
dname=`echo "$1" | xargs dirname` | dname=`echo "$1" | xargs dirname` | ||
Line 201: | Line 209: | ||
data_last=`cut -b $pos1-$pos2 tmp1 | tail -n1 | bc` | data_last=`cut -b $pos1-$pos2 tmp1 | tail -n1 | bc` | ||
DATA_RANGE="$data_first $data_last" | DATA_RANGE="$data_first $data_last" | ||
echo DATA_RANGE=$DATA_RANGE | |||
# set SPOT_RANGE to first half of DATA_RANGE | # set SPOT_RANGE to first half of DATA_RANGE | ||
Line 212: | Line 221: | ||
FIRSTFRAME=`head -1 tmp1` | FIRSTFRAME=`head -1 tmp1` | ||
echo $FIRSTFRAME | grep "\.h5$" && is_h5=1 || is_h5=0 | echo $FIRSTFRAME | grep "\.h5$" && is_h5=1 || is_h5=0 | ||
# find out detector type | # find out detector type | ||
Line 248: | Line 248: | ||
grep -q BRUKER tmp2 && grep -q CBF tmp2 && DET=Bruker-cbf | grep -q BRUKER tmp2 && grep -q CBF tmp2 && DET=Bruker-cbf | ||
grep -q CMOS1 tmp2 && DET=adsc-CMOS1 | grep -q CMOS1 tmp2 && DET=adsc-CMOS1 | ||
grep -q MARCONTROL tmp2 && DET=OLDMAR | grep -q MARCONTROL tmp2 && DET=OLDMAR | ||
grep -q "WAVELENGTH=0.0" tmp2 && DET=experimental-ED | |||
else | else | ||
h5dump -d "/entry/instrument/detector/description" $FIRSTFRAME | grep -i Eiger > /dev/null && DET=eiger | h5dump -d "/entry/instrument/detector/description" $FIRSTFRAME | grep -i Eiger > /dev/null && DET=eiger | ||
Line 468: | Line 469: | ||
DETECTOR_DISTANCE=`grep ^DISTANCE tmp2 | sed s/DISTANCE=/-/` | DETECTOR_DISTANCE=`grep ^DISTANCE tmp2 | sed s/DISTANCE=/-/` | ||
OSCILLATION_RANGE=`grep OMEGA_DELTA tmp2 | sed s/OMEGA_DELTA=//` | OSCILLATION_RANGE=`grep OMEGA_DELTA tmp2 | sed s/OMEGA_DELTA=//` | ||
DIRECTION_OF_DETECTOR_X_AXIS="-1 0 0" | DIRECTION_OF_DETECTOR_X_AXIS="-1 0 0" | ||
elif [ "$DET" == "experimental-ED" ]; then | |||
DETECTOR="ADSC MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65000 ! OVERLOAD is really unknown " | |||
echo --- Electron diffraction data in SMV format! | |||
SENSOR_THICKNESS=0.01 | |||
sed s/\;// tmp2 > tmp1 | |||
mv tmp1 tmp2 | |||
X_RAY_WAVELENGTH=`grep WAVELENGTH tmp2 | head -1 | sed s/WAVELENGTH=//` | |||
NX=`grep SIZE1 tmp2 | tail -1 | sed s/SIZE1=//` | |||
QX=`grep PIXEL_SIZE tmp2 | sed s/PIXEL_SIZE=//` | |||
NY=`grep SIZE2 tmp2 | tail -1 | sed s/SIZE2=//` | |||
QY=$QX | |||
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=//` | |||
QXY=`echo "scale=1; $QX*($BEAM_CENTER_X+$BEAM_CENTER_Y)" | bc -l` | |||
if [ "$QXY" "<" "$BEAM_CENTER_X" ] ; then | |||
ORGX=`echo "scale=2; $BEAM_CENTER_Y/$QX" | bc -l` | |||
ORGY=`echo "scale=2; $BEAM_CENTER_X/$QX" | bc -l` | |||
else | |||
ORGX=`echo "scale=2; $BEAM_CENTER_X/1" | bc -l` | |||
ORGY=`echo "scale=2; $BEAM_CENTER_Y/1" | bc -l` | |||
fi | |||
DETECTOR_DISTANCE=`grep ^DISTANCE tmp2 | sed s/DISTANCE=//` | |||
OSCILLATION_RANGE=`grep OSC_RANGE tmp2 | sed s/OSC_RANGE=//` | |||
STARTING_ANGLE=`grep OSC_START tmp2 | sed s/OSC_START=//` | |||
echo --- For TIMEPIX detector, please fix ROTATION_AXIS yourself! | |||
DIRECTION_OF_DETECTOR_X_AXIS="1 0 0" | |||
REFINE_CORRECT="ORIENTATION CELL AXIS BEAM ! for ED, no POSITION when CELL is refined" | |||
elif [ "$DET" == "pilatus" ]; then | elif [ "$DET" == "pilatus" ]; then | ||
Line 548: | Line 577: | ||
elif [ "$DET" == "eiger" ]; then | elif [ "$DET" == "eiger" ]; then | ||
nframes=`h5dump -d "/entry/instrument/detector/detectorSpecific/nimages" $FIRSTFRAME | awk '/\(0\): [0-9]/{print $2}'` | |||
DATA_RANGE="1 $nframes" | |||
SPOT_RANGE="1 `echo "scale=0; if (${nframes}<2) 1; if (${nframes}>1) ${nframes}/2"|bc -l`" | |||
# find out if HDF5 from Diamond (DLS=1) or Dectris (DLS=0) | # find out if HDF5 from Diamond (DLS=1) or Dectris (DLS=0) | ||
DLS=0 | DLS=0 | ||
Line 567: | Line 600: | ||
# STARTING_ANGLE: the \- was introduced in version 0.91 to allow negative values : | # STARTING_ANGLE: the \- was introduced in version 0.91 to allow negative values : | ||
STARTING_ANGLE=`h5dump -d "/entry/sample/goniometer/omega_start" $FIRSTFRAME | awk '/\(0\): [\-0-9]/{print $2}'` | STARTING_ANGLE=`h5dump -d "/entry/sample/goniometer/omega_start" $FIRSTFRAME | awk '/\(0\): [\-0-9]/{print $2}'` | ||
# /entry/sample/goniometer/omega_start is missing in some eiger2 detectors (e.g. Eiger2 9M with fw version release-2020.2.1 and SIMPLON API 1.8) (Feng YU 2021-07-18) | |||
if [ "$STARTING_ANGLE" == "" ]; then | |||
echo "/entry/sample/goniometer/omega_start not found, try /entry/sample/goniometer/omega" | |||
STARTING_ANGLE=`h5dump -d /entry/sample/goniometer/omega $FIRSTFRAME | grep "(0):" | head -n 1 | awk '{print $2}' | sed -e "s/,//g"` | |||
fi | |||
echo "STARTING_ANGLE=$STARTING_ANGLE" | |||
# If rotation vector set (NeXus) | # If rotation vector set (NeXus) | ||
rotation_axis=`h5dump -a "/entry/sample/transformations/omega/vector" $FIRSTFRAME 2>/dev/null | grep "(0):" | sed -e "s/^.*://; s/,//g"` | rotation_axis=`h5dump -a "/entry/sample/transformations/omega/vector" $FIRSTFRAME 2>/dev/null | grep "(0):" | sed -e "s/^.*://; s/,//g"` | ||
# | # EIGER2 16M CHESS ID7B2 has S/N E-32-0123 (A. Finke 2020-11-07) v0.99 | ||
SN=`h5dump -d "/entry/instrument/detector/detector_number" $FIRSTFRAME | awk '/\(0\): /{print $2}' | sed s/\"//g` | SN=`h5dump -d "/entry/instrument/detector/detector_number" $FIRSTFRAME | awk '/\(0\): /{print $2}' | sed s/\"//g` | ||
if | if [ "$SN" == "E-32-0123" ]; then | ||
rotation_axis="-1 0 0" | rotation_axis="-1 0 0" | ||
echo SSRF BL17U1 | echo CHESS ID7B2 with inverted rotation axis | ||
fi | fi | ||
# SSRF BL17U1 and SSRF BL10U2 (Feng YU 2021-07-18) | |||
# Eiger X 16M (S/N E-32-0111) was installed at SSRF BL17U1 from Oct 2017 to Feb 2021. After Feb 2021, it was moved back to SSRF BL10U2. | |||
# 2021-02-01 00:00:00 CST time stamp is 1612108800 | |||
if [ "$SN" == "E-32-0111" ]; then | |||
collection_time=`h5dump -d "/entry/instrument/detector/detectorSpecific/data_collection_date" $FIRSTFRAME | grep "(0):" | awk '{print $2}' | sed -e "s/\.\(.*\)/CST/g; s/\"//g"` | |||
if [ `uname -s` == "Darwin" ]; then | |||
collection_timestamp=`date -j -f "%Y-%m-%dT%H:%M:%S%Z" $collection_time +%s` | |||
elif [ `uname -s` == "Linux" ]; then | |||
collection_timestamp=`date -d $collection_time +%s` | |||
else | |||
collection_timestamp=0 | |||
fi | |||
if [ $collection_timestamp -eq 0 ]; then | |||
is_rotation_axis_set=1 | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME 2>/dev/null || is_rotation_axis_set=0` | |||
if [ "$is_rotation_axis_set" == "1" ]; then | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME | grep "(0):" | sed -e "s/^.*://; s/,//g"` | |||
echo "The rotation axis of SSRF BL10U2 (Eiger X 16M) is $rotation_axis" | |||
else | |||
rotation_axis="-1 0 0 ! Cannot determine rotation axis. SSRF BL17U1: -1 0 0; SSRF BL02U1: 0 -1 0" | |||
fi | |||
elif [ $collection_timestamp -ge 0 ] && [ $collection_timestamp -le 1612108800 ]; then | |||
# SSRF BL17U1 | |||
rotation_axis="-1 0 0" | |||
echo "SSRF BL17U1 (Eiger X 16M) with inverted rotation axis" | |||
else | |||
# SSRF BL10U2 | |||
is_rotation_axis_set=1 | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME 2>/dev/null || is_rotation_axis_set=0` | |||
if [ "$is_rotation_axis_set" == "1" ]; then | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME | grep "(0):" | sed -e "s/^.*://; s/,//g"` | |||
echo "The rotation axis of SSRF BL10U2 (Eiger X 16M) is $rotation_axis" | |||
else | |||
rotation_axis="0 -1 0" | |||
echo "SSRF BL10U2 (Eiger X 16M) with vertical rotation axis" | |||
fi | |||
fi | |||
fi | |||
# SSRF BL02U1 (Feng YU 2021-07-18) | |||
# EIGER2 S 9M SSRF BL02U1 has S/N E-18-0121 | |||
if [ "$SN" == "E-18-0121" ]; then | |||
is_rotation_axis_set=1 | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME 2>/dev/null || is_rotation_axis_set=0` | |||
if [ "$is_rotation_axis_set" == "1" ]; then | |||
rotation_axis=`h5dump -d "/SSRF/RotationAxis" $FIRSTFRAME | grep "(0):" | sed -e "s/^.*://; s/,//g"` | |||
echo "The rotation axis of SSRF BL02U1 (Eiger2 S 9M) is $rotation_axis" | |||
else | |||
rotation_axis="1 0 0" | |||
echo "SSRF BL02U1 (Eiger2 S 9M) with horizontal rotation axis" | |||
fi | |||
fi | |||
# revision 1.05 specialcase nframes for Eiger detectors at BNL | |||
if [ "$SN" == "E-18-0121" -o "$SN" == "E-32-0101" ]; then | |||
echo specialcase nframes for Eiger detectors at BNL: | |||
nframes=`h5dump -A -g "/entry/data" $FIRSTFRAME | grep "DATASPACE SIMPLE" | sed -e "s/,.*//" | awk '{a+=$5}END{print a}'` | |||
DATA_RANGE="1 $nframes" | |||
SPOT_RANGE="1 `echo "scale=0; if (${nframes}<2) 1; if (${nframes}>1) ${nframes}/2"|bc -l`" | |||
fi | |||
fi | fi | ||
echo DATA_RANGE=$DATA_RANGE | |||
DETECTOR="EIGER MINIMUM_VALID_PIXEL_VALUE=0 OVERLOAD= $OVERLOAD" | DETECTOR="EIGER MINIMUM_VALID_PIXEL_VALUE=0 OVERLOAD= $OVERLOAD" | ||
QX=`h5dump -d "/entry/instrument/detector/x_pixel_size" $FIRSTFRAME | awk '/\(0\): [0-9]/{print $2*1000}'` | QX=`h5dump -d "/entry/instrument/detector/x_pixel_size" $FIRSTFRAME | awk '/\(0\): [0-9]/{print $2*1000}'` | ||
Line 874: | Line 972: | ||
! however, if the spots from COLSPOT extend to 2A then POSITION could, and if 1.5A POSITION should be refined | ! however, if the spots from COLSPOT extend to 2A then POSITION could, and if 1.5A POSITION should be refined | ||
REFINE(IDXREF)=CELL BEAM ORIENTATION AXIS ! add POSITION if high resolution, or DETECTOR_DISTANCE inaccurate | REFINE(IDXREF)=CELL BEAM ORIENTATION AXIS ! add POSITION if high resolution, or DETECTOR_DISTANCE inaccurate | ||
REFINE(INTEGRATE)= POSITION BEAM ORIENTATION ! AXIS CELL . If 1.5A or higher it is ok to refine CELL | REFINE(INTEGRATE)= POSITION BEAM ORIENTATION ! AXIS CELL . If 1.5A or higher it is ok to refine CELL (unless electron diffraction) | ||
REFINE(CORRECT)= $REFINE_CORRECT | |||
! parameters specifically for this detector and beamline: | ! parameters specifically for this detector and beamline: | ||
DETECTOR= $DETECTOR | DETECTOR= $DETECTOR | ||
Line 891: | Line 988: | ||
if [ -e /usr/local/lib64/dectris-neggia.so ]; then | if [ -e /usr/local/lib64/dectris-neggia.so ]; then | ||
echo LIB=/usr/local/lib64/dectris-neggia.so >> XDS.INP | echo LIB=/usr/local/lib64/dectris-neggia.so >> XDS.INP | ||
echo LIB= line was written to XDS.INP | echo LIB= line was written to XDS.INP . For Apple ARM64 processors, you must modify the name. | ||
else | else | ||
echo !LIB=/usr/local/lib64/dectris-neggia.so >> XDS.INP | echo !LIB=/usr/local/lib64/dectris-neggia.so >> XDS.INP | ||
Line 1,097: | Line 1,194: | ||
fi | fi | ||
echo XDS.INP is ready for use. The file has only the most important keywords. | echo XDS.INP is ready for use. The file has only the most important keywords. | ||
echo Full documentation, including complete detector templates, | echo Full documentation, including complete detector templates, at xds.mr.mpg.de . | ||
echo | echo More documentation in strucbio.biologie.uni-konstanz.de/xdswiki/index.php . | ||
echo After running xds, inspect | echo After running xds, inspect at least the agreement of predicted and observed | ||
echo spots in FRAME.cbf! | |||
rm -f tmp1 tmp2 | rm -f tmp1 tmp2 | ||
</pre> | </pre> | ||