XDSGUI User tools
This page is for sharing useful scripts to use in XDSGUI User tools
--- "Update beam center" Read beam center from IDXREF.LP, then adjust location to frame coordinates in case of 2-theta offset
Formatted code:
X=$(perl -e ' # Read IDXREF.LP to get refined beam center, save in $x, $y open(F,"<IDXREF.LP"); while(<F>){ if(/BEAM +(\S*\d) +(\S*\d)/){ $x=$1; $y=$2; } # get X,Y beam } # Read XDS.INP to get parameters needed to adjust for horizontal 2-theta offset (veritcal offsets not supported) open(F,"<XDS.INP"); while(<F>){ if(/^[^!]*DETECTOR_DISTANCE= *(\S*\d)/){ $d=$1; } # d = detector distance if(/^[^!]*DIRECTION_OF_DETECTOR_X-AXIS= *(\S*\d) +\S*\d +(\S*\d)/){ $x1=$1; $x3=$2; } # x1,x3 = horizontal rotation part of X-axis if(/^[^!]*QX= *(\S*\d)/){$qx=$1;} # qx = detector resolition } printf "ORGX=%.2f ORGY=%.2f\n",$x-$x3/$x1*$d/$qx, $y;' ) && sed -e 's/^ *\(ORGX=\)/'"$X"' !\1/;' XDS.INP > x && mv -f x XDS.INP
One-liner for use in XDSGUI
X=$(perl -e 'open(F,"<IDXREF.LP");while(<F>){if(/BEAM +(\S*\d) +(\S*\d)/){$x=$1;$y=$2;}}open(F,"<XDS.INP");while(<F>){if(/^[^!]*DETECTOR_DISTANCE= *(\S*\d)/){$d=$1;}if(/^[^!]*DIRECTION_OF_DETECTOR_X-AXIS= *(\S*\d) +\S*\d +(\S*\d)/){$x1=$1;$x3=$2;}if(/^[^!]*QX= *(\S*\d)/){$qx=$1;}}printf "ORGX=%.2f ORGY=%.2f\n",$x-$x3/$x1*$d/$qx,$y;')&& sed -e 's/^ *\(ORGX=\)/'"$X"' !\1/;' XDS.INP>x && mv -f x XDS.INP