SPring8での実験など浜松ホトニクス社製フラットパネルセンサのデータを用いる際は、大抵「HiPic」という
データ収集ソフトでデータを収集、保存することになります。この際のデータ形式はITEX形式で、
ヘッダのコメント部に測定器(フラットパネルセンサ)などの情報が入っています。
HiPicに関しては、CCDデータ(浜松ホトニクス/HiPic)の処理の話と同じなのですが、
フォーマットはVer.8.3(@SPring8/BL40B2)でも、CCDのVer.6.0(@SPring8/BL45XU)と同様の形式のようです。
ただし、ITEX形式として、32bitのITEXとなっているようで、
従来の処理ソフト(たとえばfit2d)が使えない、
といった問題があるようです。
そこで、従来の形式に戻すプログラムを書いてみました。こちらを参照。
itex2itex hipicfile -s outputfileのようにすれば、従来の16bit形式になります。C9728DK-10では データ出力は14bitのようなので、これでもデータロスはありません。いずれはもっとダイナミックレンジの大きい デバイスが使用されるかもしれませんが、どうしても以前の形式にしたいなら、16bit(実際には符号付きなので15bit)に 納まるように、何倍かしたほうがいいでしょう(-mオプション)。
フラットパネルセンサでは、II+CCDとは異なり、像の歪みはないはずなので、X線回折での通常の方法で
カメラ長を調べることが出来るはずです。Direct Beam Positionが画像の中にあればいいのですが、そうでない場合も、
何らかの方法で中心位置を決定できなければなりません。
実際には、カメラ長決定用のキャリブレーションデータ(SAXSだとステアリン酸鉛など)を用いることになるでしょう。
その他、CCDと同様に暗電流値データ、(必要ならば)セルのみの空データなどを採っておきます。
実際の処理法は人それぞれのようですが、SPring8などでは各BLである程度の処理法を準備していると思います。
また、自分でプログラムを書いてもいいでしょうし、既存のソフトをうまく利用する手もあります。
私は一旦RigakuのR-AXIS形式に変換してから処理する方法しか思いつきません。
X線のIP(Imaging Plate)ではR-AXISが多く用いられており、R-AXISでの処理方法を利用できるからです。
まず、"ipitex2rax"(拙作iputilsに含まれます)でHiPicのファイルからR-AXISのファイルに変換。
この際には、
ipitex2rax hipicfile -hp -tm -cl:CameraLength -dx:PxlSizeX -dz:PxlSizeZ outfileのようにして変換し、なるべくHiPicの情報を有効に利用できるようにします。
iptiff2rax hipicfile -cl:CameraLength -dx:PxlSizeX -dz:PxlSizeZ outfileのようにすれば、同じように処理できます。
ipedit -t -26:WaveLength -31:CameraLength -45:DirectX -46:DirectZ ImageFileのようにして、波長、カメラ長、中心座標(X,Z)を指定します。なお、ピクセルサイズは上記例では"ipitex2rax"を実行する際に既に 指定しています。
まず、暗電流などの補正データを、上記のデータを使い、以下の手順で補正します。
ipitex2rax hipicfile -hp -tm -cl:CameraLength -dx:PxlSizeX -dz:PxlSizeZ raxisfile
または iptiff2rax hipicfile -cl:CameraLength -dx:PxlSizeX -dz:PxlSizeZ raxisfile
ipedit -t -26:WaveLength -31:CameraLength -45:DirectX -46:DirectZ raxisfile ipsub -f1:raxisfile -f2:dark_raxisfile -f2:-1.0 -replace
次いで、全てのデータを変換するシェルスクリプトを作成し、実行します。
プロファイル化も含め、以下のスクリプトでどうでしょう?
データのあるディレクトリに移動し、適当な引数をつけて実行します。
---ここから--- #!/bin/sh if [ $# -ne 6 ]; then echo "sp8_01.sh ... A data converter itex -> rax, and get profile" echo "Usage : sp8_01.sh basename destdir centreX centreZ cameraLength reffile" exit 1; fi base=$1 #ファイル名の共通部分 dest=$2 #作業ディレクトリ centreX=$3 #ダイレクトビームのX座標 centreZ=$4 #ダイレクトビームのZ座標 length=$5 #カメラ長(mm) reffile=$6 #暗電流データファイル(変換後) lines=0 if [ ! -d $2 ]; then mkdir $2 fi if [ ! -d $2 -o ! -w $2 ]; then echo "Error !! $2 does not exist or is not writable." exit 1 fi if [ -f ${base}/${base}.csv ]; then echo "Error !! $2/$2.csv already exists." exit 1 fi if [ ! -f ${reffile} ]; then echo "Error !! reffile does not exist." exit 1 fi num=0 trap 'exit 1' 1 2 3 9 15 function calcfunc() { # ファイル名の設定 ipname=${dest}/${basename}IP.img # ITEX形式からIP形式へ ipitex2rax -q ${i} -hp -dx:0.05 -dz:0.05 ${ipname} if [ $? -ge 1 ]; then echo "Error in ipitex2rax" exit 1 fi # IP形式のヘッダの編集 (暗電流ファイルと同じ設定でなければならない) ipedit -31:${length} -36:0 ${ipname} if [ $? -ge 1 ]; then echo "Error in ipedit" exit 1 fi # 暗電流を差し引く ipsub -q -f1:${ipname} -f2:${reffile} -m2:-1.0 -replace if [ $? -ge 1 ]; then echo "Error in ipsub" exit 1 fi csvname=${dest}/${basename}.csv if [ ${num} -eq 0 ]; then # 最初のファイルの一次元プロファイル化 echo "#deg.,${basename}" > ${csvname} ipprofile -q ${ipname} -f -sh -mx -sl -dt -xc:${centreX} -zc:${centreZ} - | \ sed -n '1,3! s/\ *\([^ ]*\)\ ,\ *\([^ ]*$\)/\1,\2/p' >> ${csvname} if [ $? -ge 1 ]; then echo "Error in ipprofile" exit 1 fi lines=`wc -l ${csvname} | sed 's/\ *\([0-9]*\).*/\1/'` lines=`expr ${lines} - 1` nextargs=${csvname} else # 2つ目以降のファイルの一次元プロファイル化 echo "${basename}" > ${csvname} ipprofile -q ${ipname} -f -sh -mx -sl -dt -xc:${centreX} -zc:${centreZ} - | \ cut -f 2 -d \, -s | sed -n '1! s/\ *\([^ ]*\)/\1/p' >> ${csvname} if [ $? -ge 1 ]; then echo "Error in ipprofile" exit 1 fi nextargs=${nextargs}\ ${csvname} fi num=`expr ${num} + 1` } # 連続処理 if [ -f ${base}_0001.img ]; then for i in ${base}_[0-9][0-9][0-9][0-9].img { echo "Trying to ${i} ........" basename=`echo ${i} | sed 's/\(.*\)\.img$/\1/'` calcfunc } else for i in ${base}.[0-9][0-9][0-9][0-9] { echo "Trying to ${i} ........" basename=`echo ${i} | sed 's/\(.*\)\.\([0-9][0-9][0-9][0-9]\)$/\1_\2/'` calcfunc } fi # CSVファイルのマージ if [ ${lines} -ne 0 ]; then paste -d \, ${nextargs} | head -n ${lines} > ${dest}/${base}.csv else echo "Unexpected Error." exit 1; fi exit 0 ---ここまで---一次元プロファイルを作成し、最後にそれらをマージして大きなCSVファイルにしています。
R-AXISがない場合、中心やカメラ長を決めるには、fit2dが便利なようです(32bit ITEX形式以外)。
起動後のメニューの「POWDER DIFFRACTION(2-D)」から「INPUT」で画像ファイルを読み込み、
「BEAM CENTRE」の「CIRLE COORDINATES」でデバイリング上の3点以上をクリックして指定すれば、
中心と半径を決定してくれるようです。
但し、デバイリング上の点のクリックの精度が問題となりますから、より多くの点を指定しておけば、
それら全ての点を使って決定してくれるようなので、精度はよくなります。
更に、「INTEGRATE」で波長やピクセルサイズなどを適切に指定すれば、一次元プロファイルを
計算できるようです。[2010.12.6]