Line 120: |
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.03 . Feng YU 18/7/2021 fix/expand information about Shanghai Synchrotron Radiation Facility (SSRF) | + | # 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 if the image header contains "ED" | + | # 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.04 (13-AUG-2021)" | + | # 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.07 . KD, Thomas Hauß, Gleb Bourenkov 25/10/2021. Detector moved from Petra P14 to P13 |
| + | # revision 1.08 . KD, Thomas Hauß, Feng Yu 7/11/2021 fix TZ in timestamps for SSRF detectors |
| + | # revision 1.09 . KD, Feng Yu 7/11/2021 fix detector number BNL E-18-0121 to be E-18-0104 |
| + | REVISION="1.09 (9-NOV-2021)" |
| | | |
| # | | # |
Line 146: |
Line 151: |
| 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 175: |
Line 182: |
| 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 204: |
Line 212: |
| 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 215: |
Line 224: |
| 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 |
− |
| |
− | if [ "$is_h5" == 1 ]; then
| |
− | # nframes=`h5dump -A -g "/entry/data" $FIRSTFRAME | grep "DATASPACE SIMPLE" | sed -e "s/,.*//" | awk '{a+=$5}END{print a}'`
| |
− | 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`"
| |
− | fi
| |
− |
| |
− | echo DATA_RANGE=$DATA_RANGE
| |
| | | |
| # find out detector type | | # find out detector type |
Line 476: |
Line 476: |
| elif [ "$DET" == "experimental-ED" ]; then | | elif [ "$DET" == "experimental-ED" ]; then |
| DETECTOR="ADSC MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65000 ! OVERLOAD is really unknown " | | DETECTOR="ADSC MINIMUM_VALID_PIXEL_VALUE= 1 OVERLOAD= 65000 ! OVERLOAD is really unknown " |
− | echo --- Electron diffraction data in SMV formart! | + | echo --- Electron diffraction data in SMV format! |
| SENSOR_THICKNESS=0.01 | | SENSOR_THICKNESS=0.01 |
| sed s/\;// tmp2 > tmp1 | | sed s/\;// tmp2 > tmp1 |
Line 488: |
Line 488: |
| BEAM_CENTER_Y=`grep BEAM_CENTER_Y tmp2 | sed s/BEAM_CENTER_Y=//` | | 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` | | QXY=`echo "scale=1; $QX*($BEAM_CENTER_X+$BEAM_CENTER_Y)" | bc -l` |
− | QYO=`echo "scale=1; $QY*$BEAM_CENTER_Y" | bc -l`
| |
| if [ "$QXY" "<" "$BEAM_CENTER_X" ] ; then | | if [ "$QXY" "<" "$BEAM_CENTER_X" ] ; then |
| ORGX=`echo "scale=2; $BEAM_CENTER_Y/$QX" | bc -l` | | ORGX=`echo "scale=2; $BEAM_CENTER_Y/$QX" | bc -l` |
Line 501: |
Line 500: |
| echo --- For TIMEPIX detector, please fix ROTATION_AXIS yourself! | | echo --- For TIMEPIX detector, please fix ROTATION_AXIS yourself! |
| DIRECTION_OF_DETECTOR_X_AXIS="1 0 0" | | 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 517: |
Line 517: |
| | | |
| # find SENSOR_THICKNESS: | | # find SENSOR_THICKNESS: |
− | SENSOR_THICKNESS=`grep thickness tmp2 | sed -e s/'Silicon sensor, thickness'// | awk '{print $1*1000}'` | + | SENSOR_THICKNESS=`grep thickness tmp2 | sed -e s/'Si.* sensor, thickness'// | awk '{print $1*1000}'` |
| # find X_RAY_WAVELENGTH: | | # find X_RAY_WAVELENGTH: |
| X_RAY_WAVELENGTH=`grep Wavelength tmp2 | sed -e s/Wavelength// -e s/A// | awk '{print $1}'` | | X_RAY_WAVELENGTH=`grep Wavelength tmp2 | sed -e s/Wavelength// -e s/A// | awk '{print $1}'` |
Line 569: |
Line 569: |
| fi | | fi |
| # PETRA P14: raw data from Eiger are stored as CBF files so this is treated as Pilatus | | # PETRA P14: raw data from Eiger are stored as CBF files so this is treated as Pilatus |
− | if [ "$DET_SN" == "Dectris Eiger 16M, E-32-0107" -o "$DET_SN" == "Dectris Eiger 4M, E-08-0107" -o "$DET_SN" == "PILATUS 6M-F, S/N 60-0115-F" ] ; then | + | if [ "$DET_SN" == "Dectris Eiger 4M, E-08-0107" -o "$DET_SN" == "PILATUS 6M-F, S/N 60-0115-F" ] ; then |
| rotation_axis="0 -1 0" | | rotation_axis="0 -1 0" |
| echo ROTATION_AXIS="0 -1 0" at PETRA P14 | | echo ROTATION_AXIS="0 -1 0" at PETRA P14 |
| + | fi |
| + | # similarly, Eiger 16M at PETRA P14 until May 22, 2021 |
| + | if [ "$DET_SN" == "Dectris Eiger 16M, E-32-0107" ] ; then |
| + | egrep -q '^# 2020-|^# 2021-0[1-5]|^# 2021-06-[01]|^# 2021-06-2[01]' tmp2 || isatP13=1 |
| + | if [ "$isatP13" == 1 ] ; then |
| + | echo using the default ROTATION_AXIS=1 0 0 at PETRA P13 |
| + | else |
| + | rotation_axis="0 -1 0" |
| + | echo ROTATION_AXIS="0 -1 0" at PETRA P14 |
| + | fi |
| fi | | fi |
| # ESRF ID23-2: | | # ESRF ID23-2: |
Line 580: |
Line 590: |
| | | |
| 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 615: |
Line 629: |
| # SSRF BL17U1 and SSRF BL10U2 (Feng YU 2021-07-18) | | # 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. | | # 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 | + | # 2021-03-01 00:00:00 time stamp is 1614528000 |
| if [ "$SN" == "E-32-0111" ]; then | | 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"` | + | collection_time=`h5dump -d "/entry/instrument/detector/detectorSpecific/data_collection_date" $FIRSTFRAME | grep "(0):" | awk '{print $2}' | sed -e "s/\.\(.*\)//g; s/\"//g"` |
| if [ `uname -s` == "Darwin" ]; then | | if [ `uname -s` == "Darwin" ]; then |
− | collection_timestamp=`date -j -f "%Y-%m-%dT%H:%M:%S%Z" $collection_time +%s` | + | collection_timestamp=`date -j -f "%Y-%m-%dT%H:%M:%S" $collection_time +%s` |
| elif [ `uname -s` == "Linux" ]; then | | elif [ `uname -s` == "Linux" ]; then |
| collection_timestamp=`date -d $collection_time +%s` | | collection_timestamp=`date -d $collection_time +%s` |
Line 634: |
Line 648: |
| rotation_axis="-1 0 0 ! Cannot determine rotation axis. SSRF BL17U1: -1 0 0; SSRF BL02U1: 0 -1 0" | | rotation_axis="-1 0 0 ! Cannot determine rotation axis. SSRF BL17U1: -1 0 0; SSRF BL02U1: 0 -1 0" |
| fi | | fi |
− | elif [ $collection_timestamp -ge 0 ] && [ $collection_timestamp -le 1612108800 ]; then | + | elif [ $collection_timestamp -ge 0 ] && [ $collection_timestamp -le 1614528000 ]; then |
| # SSRF BL17U1 | | # SSRF BL17U1 |
| rotation_axis="-1 0 0" | | rotation_axis="-1 0 0" |
Line 663: |
Line 677: |
| echo "SSRF BL02U1 (Eiger2 S 9M) with horizontal rotation axis" | | echo "SSRF BL02U1 (Eiger2 S 9M) with horizontal rotation axis" |
| fi | | fi |
| + | fi |
| + | # revision 1.05 specialcase nframes for Eiger detectors at BNL |
| + | if [ "$SN" == "E-18-0104" -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 | | 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 963: |
Line 985: |
| ! 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)=CELL BEAM ORIENTATION AXIS POSITION ! Default is: refine everything
| + | REFINE(CORRECT)= $REFINE_CORRECT |
− | | |
| ! parameters specifically for this detector and beamline: | | ! parameters specifically for this detector and beamline: |
| DETECTOR= $DETECTOR | | DETECTOR= $DETECTOR |
Line 980: |
Line 1,001: |
| 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,186: |
Line 1,207: |
| 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, is at | + | echo Full documentation, including complete detector templates, at xds.mr.mpg.de . |
− | echo http://www.mpimf-heidelberg.mpg.de/~kabsch/xds . More documentation in XDSwiki | + | echo More documentation in strucbio.biologie.uni-konstanz.de/xdswiki/index.php . |
− | echo After running xds, inspect, using XDS-Viewer, at least the beamstop mask in | + | echo After running xds, inspect at least the agreement of predicted and observed |
− | echo BKGPIX.cbf, and the agreement of predicted and observed spots in FRAME.cbf!
| + | echo spots in FRAME.cbf! |
| rm -f tmp1 tmp2 | | rm -f tmp1 tmp2 |
| | | |