Generate XDS.INP: Difference between revisions

Jump to navigation Jump to search
(→‎The script: version 0.94 bugfix for Bruker-cbf to make bc accept e.g. 3.1e-005 by using awk printf "%.5f" instead of awk print)
(3 intermediate revisions by the same user not shown)
Line 111: Line 111:
# revision 0.93 . KD 13/03/2020 print out 2theta for MarCCD (DETECTOR_*_AXIS can be derived from this)
# 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.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.94 (16-Mar-2020)"
# 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 276: 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 434: 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 510: 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 520: 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 530: 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 933: 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 966: 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 999: Line 1,023:
UNTRUSTED_RECTANGLE= 0 3110 2717 2757
UNTRUSTED_RECTANGLE= 0 3110 2717 2757
eof
eof
   elif [ $NX == "4150" -a $NY == "4371" ]; then
  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,014: 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,071: 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.
2,652

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.

Navigation menu