2,652
edits
(5 intermediate revisions by the same user not shown) | |||
Line 109: | Line 109: | ||
# revision 0.91 . KD 16/01/2020 Allow negative starting angle for Eiger (found -33 at SLS !). | # revision 0.91 . KD 16/01/2020 Allow negative starting angle for Eiger (found -33 at SLS !). | ||
# revision 0.92 . KD 27/02/2020 read *_master.h5 from Diamond Light Source | # revision 0.92 . KD 27/02/2020 read *_master.h5 from Diamond Light Source | ||
REVISION="0. | # revision 0.93 . KD 13/03/2020 print out 2theta for MarCCD (DETECTOR_*_AXIS can be derived from this) | ||
# revision 0.94 . KD 16/03/2020 bugfix for Bruker-cbf to make bc accept e.g. 3.1e-005 by using awk printf "%.5f" instead of awk print | |||
# revision 0.95 . KD 29/07/2020 fix DLS Eiger HDF5 variant OSCILLATION_RANGE, STARTING_ANGLE. Attention: DLS Eiger variant needs h5dump 1.10 for OVERLOAD! | |||
# revision 0.96 . KD 03/10/2020 make script echo detector serial number if inverted ROTATION_AXIS is detected. | |||
# revision 0.97 . KD 19/10/2020 add UNTRUSTED_RECTANGLEs for Eiger2 (which has a few pixels less than Eiger (thanks to Andreas Förster) | |||
REVISION="0.97 (19-Oct-2020)" | |||
# | # | ||
Line 252: | Line 257: | ||
elif [ "$DET" == "mccd" ]; then | elif [ "$DET" == "mccd" ]; then | ||
echo Data from a MarCCD detector | echo Data from a MarCCD detector | ||
# http://www.sb.fsu.edu/~xray/Manuals/marCCD165header.html has header information | |||
DETECTOR="CCDCHESS MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65500" | DETECTOR="CCDCHESS MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65500" | ||
Line 273: | Line 279: | ||
if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | ||
REVERSE_PHI="yes" | REVERSE_PHI="yes" | ||
echo inverted ROTATION_AXIS since Detector Serial Number is "${DET_SN}" | |||
fi | fi | ||
Line 287: | Line 294: | ||
DETECTOR_DISTANCE=$(od -t dI -j $SKIP -N 4 tmp2 | head -1 | awk '{print $2}') | DETECTOR_DISTANCE=$(od -t dI -j $SKIP -N 4 tmp2 | head -1 | awk '{print $2}') | ||
DETECTOR_DISTANCE=`echo "scale=3; $DETECTOR_DISTANCE/1000" | bc -l` | DETECTOR_DISTANCE=`echo "scale=3; $DETECTOR_DISTANCE/1000" | bc -l` | ||
# Mar 12, 2020 KD | |||
let SKIP=1724 | |||
TWOTHETA=$(od -t dI -j $SKIP -N 4 tmp2 | head -1 | awk '{print $2}') | |||
TWOTHETA=`echo "scale=3; $TWOTHETA/1000" | bc -l` | |||
echo 2THETA= $TWOTHETA | |||
let SKIP=1024+256+128+256+44 | let SKIP=1024+256+128+256+44 | ||
Line 425: | Line 438: | ||
if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | ||
REVERSE_PHI="yes" | REVERSE_PHI="yes" | ||
echo inverted ROTATION_AXIS since detector serial number is ${DET_SN} | |||
fi | fi | ||
Line 501: | Line 515: | ||
if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | if echo "${DET_SN}${REVERSEPHI_SNs}" | sort | uniq -d | grep [0-9] > /dev/null; then | ||
REVERSE_PHI="yes" | REVERSE_PHI="yes" | ||
echo inverted ROTATION_AXIS since detector serial number is ${DET_SN} | |||
fi | fi | ||
if [ "$DET_SN" == "PILATUS XXX, S/N XX-XXX" ] ; then | if [ "$DET_SN" == "PILATUS XXX, S/N XX-XXX" ] ; then | ||
Line 511: | Line 526: | ||
if grep -q "Oscillation_axis X.CW +SLOW" tmp2 ; then | if grep -q "Oscillation_axis X.CW +SLOW" tmp2 ; then | ||
rotation_axis="0 -1 0" | rotation_axis="0 -1 0" | ||
echo ROTATION_AXIS="0 -1 0" at Diamond I24 | |||
fi | fi | ||
fi | fi | ||
# insert similar code for Petra P14 here | # FIXME: insert similar code for Petra P14 here | ||
elif [ "$DET" == "eiger" ]; then | elif [ "$DET" == "eiger" ]; then | ||
Line 521: | Line 537: | ||
if [ "$DLS" == 1 ]; then | if [ "$DLS" == 1 ]; then | ||
echo Eiger HDF5 from Diamond | echo Eiger HDF5 from Diamond | ||
# unfortunately h5dump 1.10 is required to get this right for the DLS .h5 files. This version is available at DLS but usually not elsewhere | |||
OVERLOAD=`h5dump -d "/entry/instrument/detector/saturation_value" $FIRSTFRAME | awk '/\(0\):/{print $2}'` | OVERLOAD=`h5dump -d "/entry/instrument/detector/saturation_value" $FIRSTFRAME | awk '/\(0\):/{print $2}'` | ||
OSCILLATION_RANGE=`h5dump -d "/entry/data/omega" $FIRSTFRAME | awk '/\(0\): [0-9]/{print $3-$2}'` | # v0.95: fix the next 2 lines by taking care of negative values with the \- , and stop after first "(0)" | ||
STARTING_ANGLE=`h5dump -d "/entry/data/omega" $FIRSTFRAME | awk '/\(0\): [0-9]/{print $2}' | sed -e "s/,//"` | OSCILLATION_RANGE=`h5dump -d "/entry/data/omega" $FIRSTFRAME | awk '/\(0\): [\-0-9]/{print $3-$2;exit}'` | ||
STARTING_ANGLE=`h5dump -d "/entry/data/omega" $FIRSTFRAME | awk '/\(0\): [\-0-9]/{print $2;exit}' | sed -e "s/,//"` | |||
echo OSCILLATION_RANGE=$OSCILLATION_RANGE STARTING_ANGLE=$STARTING_ANGLE | echo OSCILLATION_RANGE=$OSCILLATION_RANGE STARTING_ANGLE=$STARTING_ANGLE | ||
# 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"` | ||
Line 739: | Line 757: | ||
X_RAY_WAVELENGTH=`awk '/diffrn_radiation_wavelength.wavelength/{print $2}' tmp2` | X_RAY_WAVELENGTH=`awk '/diffrn_radiation_wavelength.wavelength/{print $2}' tmp2` | ||
OMEGA=`awk '/OMEGA \? \? \?/{ | # fix 16.3.20: instead of print, use printf "%.5f", because bc does not accept e.g. 3.1e-005 | ||
DELTAOMEGA=`awk '/OMEGA \? \? \?/{ | OMEGA=`awk '/OMEGA \? \? \?/{printf "%.5f",$5}' tmp2` | ||
PHI=`awk '/PHI \? \? \?/{ | DELTAOMEGA=`awk '/OMEGA \? \? \?/{printf "%.5f",$6}' tmp2` | ||
DELTAPHI=`awk '/PHI \? \? \?/{printf "% | PHI=`awk '/PHI \? \? \?/{printf "%.5f",$5}' tmp2` | ||
KAPPA=`awk '/CHI \? \? \?/{ | DELTAPHI=`awk '/PHI \? \? \?/{printf "%.5f",$6}' tmp2` | ||
KAPPA=`awk '/CHI \? \? \?/{printf "%.5f",$5}' tmp2` | |||
# echo OMEGA DELTAOMEGA PHI DELTAPHI KAPPA= $OMEGA $DELTAOMEGA $PHI $DELTAPHI $KAPPA | # echo OMEGA DELTAOMEGA PHI DELTAPHI KAPPA= $OMEGA $DELTAOMEGA $PHI $DELTAPHI $KAPPA | ||
Line 923: | Line 942: | ||
! and does not seem to have any downsides. | ! and does not seem to have any downsides. | ||
eof | eof | ||
if [ $NX == "1475" ]; then | if [ $NX == "1028" -a $NY == "1062" ]; then | ||
# Eiger2 1M ; v0.97 numbers from Andreas Förster | |||
cat >> XDS.INP << eof | |||
UNTRUSTED_RECTANGLE= 0 1029 512 551 | |||
eof | |||
elif [ $NX == "1475" ]; then | |||
if ! grep -q Flat_field tmp2 ; then | if ! grep -q Flat_field tmp2 ; then | ||
cat >> XDS.INP << eof | cat >> XDS.INP << eof | ||
Line 956: | Line 980: | ||
eof | eof | ||
fi | fi | ||
elif [ $NX == "2068" -a $NY == "2162" ]; then | |||
# Eiger2 4M ; v0.97 numbers from Andreas Förster | |||
cat >> XDS.INP << eof | |||
!EXCLUSION OF VERTICAL DEAD AREAS OF THE EIGER2 4M DETECTOR | |||
UNTRUSTED_RECTANGLE= 1028 1041 0 2163 | |||
!EXCLUSION OF HORIZONTAL DEAD AREAS OF THE EIGER 4M DETECTOR | |||
UNTRUSTED_RECTANGLE= 0 2069 512 551 | |||
UNTRUSTED_RECTANGLE= 0 2069 1062 1101 | |||
UNTRUSTED_RECTANGLE= 0 2069 1612 1651 | |||
eof | |||
elif [ $NX == "2463" ]; then | elif [ $NX == "2463" ]; then | ||
# Pilatus 6M | # Pilatus 6M | ||
Line 989: | Line 1,023: | ||
UNTRUSTED_RECTANGLE= 0 3110 2717 2757 | UNTRUSTED_RECTANGLE= 0 3110 2717 2757 | ||
eof | eof | ||
elif [ $NX == "4150" | elif [ $NX == "3108" -a $NY == "3262" ]; then | ||
# Eiger2 9M ; v0.97 numbers from Andreas Förster | |||
cat >> XDS.INP << eof | |||
!EXCLUSION OF VERTICAL DEAD AREAS OF THE EIGER2 9M DETECTOR | |||
UNTRUSTED_RECTANGLE= 1028 1041 0 3262 | |||
UNTRUSTED_RECTANGLE= 2068 2081 0 3263 | |||
!EXCLUSION OF HORIZONTAL DEAD AREAS OF THE EIGER2 9M DETECTOR | |||
UNTRUSTED_RECTANGLE= 0 3109 512 551 | |||
UNTRUSTED_RECTANGLE= 0 3109 1062 1101 | |||
UNTRUSTED_RECTANGLE= 0 3109 1612 1651 | |||
UNTRUSTED_RECTANGLE= 0 3109 2162 2201 | |||
UNTRUSTED_RECTANGLE= 0 3109 2712 2751 | |||
eof | |||
elif [ $NX == "4150" -a $NY == "4371" ]; then | |||
# Eiger 16M | # Eiger 16M | ||
cat >> XDS.INP << eof | cat >> XDS.INP << eof | ||
Line 1,004: | Line 1,051: | ||
UNTRUSTED_RECTANGLE= 2069 2082 0 4371 | UNTRUSTED_RECTANGLE= 2069 2082 0 4371 | ||
UNTRUSTED_RECTANGLE= 3109 3122 0 4371 | UNTRUSTED_RECTANGLE= 3109 3122 0 4371 | ||
eof | |||
elif [ $NX == "4148" -a $NY == "4362" ]; then | |||
# Eiger2 16M ; v0.97 numbers from Andreas Förster | |||
cat >> XDS.INP << eof | |||
!EXCLUSION OF HORIZONTAL DEAD AREAS OF THE EIGER2 16M DETECTOR | |||
UNTRUSTED_RECTANGLE= 1028 1041 0 4363 | |||
UNTRUSTED_RECTANGLE= 2068 2081 0 4363 | |||
UNTRUSTED_RECTANGLE= 3108 3121 0 4363 | |||
!EXCLUSION OF VERTICAL DEAD AREAS OF THE EIGER2 16M DETECTOR | |||
UNTRUSTED_RECTANGLE= 0 4149 512 551 | |||
UNTRUSTED_RECTANGLE= 0 4149 1062 1101 | |||
UNTRUSTED_RECTANGLE= 0 4149 1612 1651 | |||
UNTRUSTED_RECTANGLE= 0 4149 2162 2201 | |||
UNTRUSTED_RECTANGLE= 0 4149 2712 2751 | |||
UNTRUSTED_RECTANGLE= 0 4149 3262 3301 | |||
UNTRUSTED_RECTANGLE= 0 4149 3812 3851 | |||
eof | eof | ||
fi | fi | ||
Line 1,061: | Line 1,124: | ||
The script makes use of many GNU commands, like <code>ls, grep, egrep, awk, cut, cat, echo, wc, bc, head, sed, tail, cp, od, python</code>. Some of them (like <code>od</code> and <code>python</code>) are only used in case of specific detectors (MarCCD and RAXIS, respectively). | The script makes use of many GNU commands, like <code>ls, grep, egrep, awk, cut, cat, echo, wc, bc, head, sed, tail, cp, od, python</code>. Some of them (like <code>od</code> and <code>python</code>) are only used in case of specific detectors (MarCCD and RAXIS, respectively). | ||
The script will only work if all the required commands are available. They reside in either the <code>coreutils</code> RPM, or specific RPMs (<code>gawk, sed, bc, grep, python</code> ...). Please note that to get the <code>strings</code> command on some Linux distributions (e.g. FC23) you need to install the <code>binutils</code> RPM package. | The script will only work if all the required commands are available. They reside in either the <code>coreutils</code> RPM, or specific RPMs (<code>gawk, sed, bc, grep, python</code> ...). Please note that to get the <code>strings</code> command on some Linux distributions (e.g. FC23) you need to install the <code>binutils</code> RPM package. | ||
For Eiger data processing, the <code>h5dump</code> program must be installed. This is part of <code>hdf5-tools</code> (Ubuntu) or <code>hdf5</code> (RHEL). | For Eiger data processing, the <code>h5dump</code> program must be installed. This is part of <code>hdf5-tools</code> (Ubuntu) or <code>hdf5</code> (RHEL). The .h5 files collected at Diamond Light Source require a very new version of h5dump (namely h5dump 1.10) to extract the OVERLOAD parameter from the .h5 file; this version is available by default in Ubuntu 20.04 and RHEL/CentOS 8. | ||
On Mac OS X, installation of the "Command Line Tools" (from http://developer.apple.com/downloads; requires Apple ID) is required (open a terminal and type <code>xcode-select --install</code>). These are also part of the (larger, but also free) [http://developer.apple.com/tools/xcode Xcode] package. This package comes with a license that has to be accepted by the user when running a Command Line Tool (e.g. <code>strings</code>) for the first time. | On Mac OS X, installation of the "Command Line Tools" (from http://developer.apple.com/downloads; requires Apple ID) is required (open a terminal and type <code>xcode-select --install</code>). These are also part of the (larger, but also free) [http://developer.apple.com/tools/xcode Xcode] package. This package comes with a license that has to be accepted by the user when running a Command Line Tool (e.g. <code>strings</code>) for the first time. |