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