Powder pattern analyzer for Imaging Plate
=
= =
Ver1.0用 1996.02.08
Ver1.1用 1997.03.04
Ver1.2用 1997.08.06
Ver1.2.1用 1997.09.03
Ver1.2.9用 1999.04.28
Hiroshi FUJIHISA
National Institute of Materials and Chemical Research
1-1 Higashi, Tsukuba, Ibaraki 305-8565, JAPAN
Phone/FAX : 0298-54-4601
Email : fujihisa@home.nimc.go.jp
目次
1.開発目的について
2.関連ファイル
3.変更点
4.動作環境
5.各ウィンドウの機能
6.各ウィンドウの操作方法
7.IPHには無かった機能についての説明
8.将来計画
IPを用いた高圧X線回折実験初期の頃(1988-1992 ドラム式IPスキャナー +ポラロイド画面コピー+オープンリールMT)はたいへんだった。おお きなMT(イメージ一枚をなぜかアスキーコードに変換して約100MB、 11枚のイメージがはいる)をPF二階のFACOM端末室で、1パターン ごとにMTからロード、巻き戻し、解析、カーブフィット、印刷を繰り 返し、歩き回っていた。 1992年には現在の解析環境ipw+iph+ipnaxが開発され、FujifilmのBAS2000 とSunのワークステーションに移行した。これにより、ほとんど座ったまま 一次元回折パターンが迅速に得られるようになった。iphは、開発の苦労が 十分報われるほど、今でも多くのグループに利用されている。しかしこの 先の解析方法は各人まちまちである。PC98で動くipuは、データ転送の面倒 くささと使い勝手の悪さと配布の努力不足のためあまり普及していない。 結局、格子定数や原子座標の圧力変化が出るのは、データを持って帰って 数週間から数カ月後になってしまう。Rietan, WPPFが高圧グループに広く 利用されていないのは、そこに至るまでの解析手順の煩雑さがひとつの大 きな原因になっているように思う。 一方ヨーロッパでは、1992年ごろからIP(英国Molecular Dynamics社製)を 使った同様な実験が行われるようになった。Edinburgh大のRoss Piltzが開 発したPlatypus、ESRFのHammersleyが開発したFit2Dはそれぞれオリジナル 解析ソフトで、これらを使ったRietveld解析結果は今後どんどんでてくる であろう。 このままではいけない!もっと使えるシステムにしなければ!将来SPring8 で1分ごとにとれるデータのためにも!と思い立って1995年6月中旬から約 2ヵ月かけて、構想、アルゴリズム開発、コーディングを行った。こうして 形になったものが、この 'pip' である。 その後、試用、バグ出し、機能強化を続け、'pip'は現在も成長中である。【目次に戻る】
関連ファイル pip 実行本体 default.pip 各種初期値のはいったファイル (current directoryに必要) 入力ファイル *.img, *.inf Fuji, RigakuのIPimage *.img.Z compress による圧縮IPimage *.img.gz gzip による圧縮IPimage *.ipf MacScience DIP image 出力ファイル *.xwd SaveImageしてできるXWDフォーマットのイメージ *.bmp SaveImgaeしてできるBMPフォーマットのイメージ *.lips PrintIntensityのLIPS形式の一次元パターン *.ps PrintIntensityのPostScript形式の一次元パターン 入出力ファイル *.pip 各イメージ(*.img)ごとの実験、解析条件 *.bgz Maskingファイル。 *.rie Rietan by Izumi *.wpp Wppf by Toraya *.raw Rigaku RINT SYSTEM, (KaleidaGrapなどで読める) *.std 標準試料のd値などの情報【目次に戻る】
Version1.1 について まず旧Version1.0との違いを書いておきます。 Maskingファイルのフォーマットが変わりました。Ver1.0ではX-Windowの 組み込み関数呼び出してビットマップ形式(*.xbm)でload, saveしてました。 これがあまりにもおそいので自前の関数で処理することにしました。 新Maskingファイルは*.bgzというやつです。フォーマットは簡単で、 マスクプレーンのみを取り出し、gzipで圧縮しただけです。この変更により load,save時間が約5分の1、ファイルサイズがなんと約100分の1 になりました。単に今まで手抜きしていたのがもろばれ。 センターエラー補正を廃止しました。理由は以下の2点からです。 まず、このパラメーターは傾き補正と非常にコリレーションが強く、どちらか を止めないと計算が不安定になることが多くありました。それとピーク位置の ずれの量はほとんどが、傾きによるものであるからです。どちらかを固定する となるとセンターエラーでしょう。次の理由は、現在行っているダイレクト ビームによる原点マーカー法の精度は非常に良く、原点座標が0.1pixel以下で 求まっています。もし回折ピーク位置から求めたセンターエラーが1pixelの オーダーであったなら、よくよく見直してください。きっとその回折パターン はスポットぽつぽつであるか、弱くてノイジーであるかでしょう。そういった 回折線よりも原点マーカーのプロファイルのほうがよっぽどきれいに位置が 決まるのです。というわけです。あとcalc_tiltを連続して実行すると、傾き がどんどん加算されるバグもとっておきました。(おい) IP距離の位置依存性のパラメーターLa, Lb, Lcを廃止しました。そもそも これが導入された理由は、標準試料でIP距離を決める際、高角度のピークほど 距離が小さくなるという原因不明の現象に対応するためでした。これはIPUにも あったマニアックなパラメーターでした。これに対し、波長ずれ説やIPたわみ 説などでてきましたが、、1996年についに原因がわかりました。 「縦と横のピクセルサイズが1000分の1のオーダーで異なる。」 富士フィルムは100分の1の精度までしか保証していないので仕方ないですが。 逆にピクセルサイズ比はマシン固有の値を持つので、それさえpipに入力して おけば、ものすごく格子定数の精度が上がります。 こうするとIP距離の角度依存性など無くなり、La, Lb, Lcは全く不要になり ました。 Postscript形式で1次元パターンを出力できるようになりました。従来は LIPS出力でしたが、コンパイルオプションでどちらにするか選べます。ただし Postscript出力をGhostscriptに通してLIPSプリンターに送った方がきれい です。 標準試料ファイルを読み込み、IP距離を計算できるようにした。 Main Window と Parameter Window を一体化しました。 あと表には見えない部分でも、多くのバグとり、改良がほどこされています。 Version 1.2 Aug. 1997 イメージ上の任意のスポットの座標をフィット MAC ScienceのDIPフォーマットを読み込めるようにした。(テスト中) ImageWindow内のグレースケールにHistogram階調を追加した。 Maskの直径をメニューで選択できるようにした。 Regionをトグルをやめてメニューで選ぶようにした。 CalcTilt強化。IntensityWindowでピークを選択できる。 XWDフォーマットでイメージをセーブできるようにした。(256色 無圧縮) Version 1.2.1 Sept. 1997 BMPフォーマットでイメージをセーブできるようにした。(256色 無圧縮) PrintImageでPostScript出力できるようにした。(グレーに変換) (テスト中 大きさの調整できていない、実験情報を書いていない)
以降、細かい修正はhistory.htmlを参照して下さい。【目次に戻る】
必要な環境 CPU 石にもよるが、PC/AT機ならば、推奨66MHz。 メモリ 16MB以上。扱うIPimageの約3倍あれば快適 OS 大抵のUNIX、またはそれらの互換品 HP-UX, Solaris, Linux, FreeBSD, NetBSD, OpenBSD,,, X-Window X11R5 または X11R6 ベースの PseudoColor(256色モード)対応のXサーバー GUIライブラリ Motif1.2またはMotif2.0または互換品 GNU圧縮ツール gzip1.2.4 (1.2.3はダメ) GNU PostScriptフィルター GhostScript (PostScriptプリンターがない場合) PIPをコンパイル、実行するには、MotifというGUIライブラリが必要です。 HP-UX、SGIには標準でついてますが、Sun、PC-Unixでは別途購入して下さい。 Lesstifというフリーな互換品でも動きます。(現在Version0.80) http://www.hungry.comより入手可能。ただし動作が不安定かも。 なお私のPIP開発環境として、自宅の NetBSD1.2 SHARP X68030 MC68030+68882 25MHz 12MB 趣味,MEMで活躍 Linux-2.0.30 Fujitsu FMV Pentium 166MHz 64MB 1997年1月購入 物質研の HP-UX HP HP PA-RISC 33MHz 16MB IP読取、解析用 Linux-2.0.30 Digital DECpc 486DX 33MHz 24MB Emailと共用 で動作確認しています。 PFとNIRIMではSun Solaris上で動いています。 コンパイルの仕方 各自のシステムに合った"makefile.???"を"makefile"にコピーして 下さい。 Intel系CPUを使う場合はmakefile中のCFLAGSに"-DINTEL"が入っているか 確かめてください。(バイト並びに違いがあるため) CFLAGS中に"-DPOSTSCRIPT"があれば、パターンがPostscript形式で出力 されます。なければLIPS形式になります。 そのあと"make"を実行してください。もしコンパイル時につまづいたら makefileの中のINCLUDEの行を、リンク時にこけたら、SYSLIBの行を 各自のシステムに合わせて編集してみて下さい。 実行時に"libXm.so no found"などのメッセージがでたらライブラリ パスが正しく設定されているかどうか、環境変数LD_LIBRARY_PATH、 ldconfigコマンド等で調べてください。 プリンター出力先の指定 ソース"pip.c"の中にPostscript形式ならば #define PSOUT "??????" (279行目あたり) LIPS形式ならば、 #define LIPSOUT "??????" (289行目あたり) の行があります。 "??????"の部分を編集してから"make"を実行してください。 "??????"の書き方を説明します。pipはPostscirpt(またはLIPS)命令を 出力しますので、その情報を標準入力としてプリンターに送るコマンド ラインを書いて下さい。 Postscript形式の場合 例 画面でパターンを見るためにpipの出力をghostviewの標準入力に送る。 #define PSOUT "ghostview -monochrome -" 例 lprで設定されているPSプリンターに送る。 #define PSOUT "lpr" 例 "pip.ps"に落としつつ、lprで設定されているPSプリンターに送る。 #define PSOUT "tee pip.ps | lpr" 例 remshコマンドでcmxrds1というリモートマシンに「rasaという名の PSプリンタへ印刷しろ」という命令を送る。 #define PSOUT "remsh cmxrds1 -l lp lp -drasa -c -" 例 pipのPostscript出力をghostscriptの標準入力に送り、LIPSへ変換し、 その出力をlprコマンドでLaserShotに送る。 #define PSOUT "gs | lpr" LIPS形式の場合 例 lbpという名前のLaserShotに、lpコマンドでthruオプション (8bit目を通す)をつけて送る。 #define LIPSOUT "lp -dlbp -othru" 例 そのまえに"pip.lips"にも落とす。 #define LIPSOUT "tee pip.lips | lp -dlbp -othru" 例 lprで設定されているLaserShotに送る。 #define LIPSOUT "lpr" 将来的にはLIPSコマンドを直接出力するのはやめ、PostScript出力を GhostScriptで変換するようにして対応したいと思っています。 理由はLIPS用とPostScript用のコードを2種類書くのは面倒であるのと、 PostScript出力をGSで変換したほうが仕上がりがきれいであることと (私がLIPS3の機能を使いこなしていないだけの話なのだが)、 PostScriptプリンターの低価格化により普及率が上がった事によります。【目次に戻る】
1.Main Window pipを実行するとまず現れる。 メニューバー 各種ファイルのロード、セーブ 各種計算の実行 現在の情報表示 センター位置 積分範囲の設定 IP傾き フィルム距離Lo ピクセルサイズX, Y 2theta領域 2.Image Window IPイメージのロード、XWDファイルへセーブ Log, Linear, Histogram強度をグレー階調表示 マスク処理 センター探し マウスポインターの(x, y)、強度, X(pixel), 2theta表示 スポットの中心座標計算 3.Intensity Window パターンのロード、セーブ 1次元パターン表示 マウスドラッグ拡大 ピーク探しオート、マニュアル 印刷 4.Peak Window マークされたピークのx, 2theta, d, Amplitude一覧 標準試料のd値から、IP距離Loを求める。 印刷【目次に戻る】
メニューバーの中身
File
Load Image
Fuji,Rigakuのイメージ。*.img.Z, *.img.gzでもOK
MAC Science DIPイメージ *.ipf
Save Image
XWD,BMPフォーマットでセーブ
Print Image
印刷(テスト中)
Load Intensity
Nax, Rietan, Wppf, Rigakuの1次元パターン
Save Intensity
セーブ
Print Intensity
印刷
Load Param
実験、解析情報 *.pip
Save Param
セーブ
Print Param
印刷
Quit
プログラム終了
Window
Image
各種SubWindowの表示
Intensity
または1番おもてにもってくる
Peak
IPmain
Find Center
Sectoring
Imageを放射状に分割し、それぞれの範囲で積分
Find Spots
Image上のスポットを自動マスク
Find Peaks
オートピークサーチ
Calc Tilt
IP傾き計算
Calc Film Dist
IP距離の計算
Pixel-Intensity
横軸x(pixel)で積分
Angle-Intensity
横軸2thetaで積分
強度計算は、画面のグレー階調のイメージバッファーから
ではなく、元のIP強度バッファーを使って行われる。
画面バッファーは単にMaskされているかどうかなどの判断に
使われる。
Auto Analysis
これを選ぶと、FindCenter, Sectoring, FindPeaks,
CalcTilt, Pixel-Intensityの順番で実行される。
バカチョン解析
Help
Show Help
バージョン情報
このメニューバーにある機能の一部は、各SubWindowの中のボタンでもできる。
各種パラメータについて
積分範囲の指定
Top, Bottom, Vertical(=Top+Bottom)
Left, Right, Horizontal(=Left+Right)
Full(全面)の中から一つ選択
Mask処理
RemoveGreenボタン 範囲中でMaskした緑の部分は使わない
RemoveBlueボタン 範囲中で青い部分は使わない
緑も青も積分に含める時は両方とも押さないようにする。
緑も青も積分から除外する時は両方とも押すようにする。
センター Xo, Yo
Imageをロードした際に自動でFindCenterが実行され、
その値が格納されている。自分で書き換えるとその値を
センターとする。FindCenterボタンを押すと、この値を
初期値としてサーチ&フィットし、結果がまたここに
格納される。
ピクセルサイズ x, y
RigakuのImageにはx, yの両方向の値が入っているので
ロード時にその値が格納される。
しかし自分で解析した方がよいでしょう。(あとで説明)
Fujiの場合は伊藤君の調べた値を手で入力するか、各自
回折リングを解析して決定してください。(あとで説明)
バンド幅 BandWidth
Top, Bottom, Verticalのときは長方形の横の長さ(pixel)
Left, Right, Horizontalのときは縦の長さ
Fullのときはこの値は使われない。
フィルム距離 Lo
標準試料の各ピークから決定した平均値。(mm)
特筆すべきボタンについて
ClearMask
Maskを全部消す
SaveImage
XWD,BMPフォーマットでセーブ
PrintImage
印刷(テスト中)
グレースケールについて
WhiteScale, BlackScaleの大小を入れ替えると白黒反転する。
低いScale未満の強度は青く、高いScaleより大きい強度は赤く表示。
初期状態で青いのは強度0、赤いのは強度飽和を意味する。
元のIPの強度情報量(FUJI
1024,256階調、Rigaku 65536階調)
を大きく落として、画面表示(グレー32階調)しています。
この状態でWhiteScale, BlackScaleを動かすと、画面上の色は
変わりますが、階調は荒いままです。ここでRedrawボタンを押すと、
WhiteScaleとBlackScaleの間の強度が32階調表示されるよう、
元のIPの強度から画面が再計算されます。
Histogramは全ピクセルに対し、強度のヒストグラムをとり、
強度の出現頻度により階調をつけたものです。
バックグランドレベルで細かく見るのに適しています。
マウス操作
イメージ上で左ボタンで、緑の円で塗りつぶす。
右ボタンで、緑を消し、元の状態にもどす。
中ボタンで、現在の位置のX(pixel),
2theta表示。
その周囲のスポットを探し、中心座標を計算、表示します。
(x, y) Intensityはリアルタイムに表示。
特筆すべきボタンについて
Defaultはグラフのサイズを元に戻す。
PrintはパターンをLIPSまたはPSファイルまたはプリンターに落とす。
マウス操作
パターン上で左ボタンで、その周辺のピークをマニュアルフィット
右ボタンで、その周辺のピークを除去
中ボタンドラッグで、拡大。
中ボタンをドラッグせずに軽く押してはなすとDefaultサイズ
X(pixel), 2theta, Intensityはリアルタイムに表示。
Sectoringの後は16パターンが重なって表示される。
Intensity window内でピークバーをつけた場合やピークバーのついたファイル
をロードした場合はそのピーク位置から
x(pixels) -> 2theta(degrees) -> d(A)の順番に計算した結果が格納されている。
Intensity window内に横軸x(pixel)の標準試料データが格納されているときに、
そのパターンに対するd値ファイル*.stdをロードすると、
d(A) -> 2theta(degrees)に変換される。その次にCalc Film Distボタンを
押すと、2theta情報とピーク位置x(pixels)がマッチするLo(mm)が計算される。
SubWindowの下のボタン
OK
Intensity画面の更新
Close そのWindowを閉じる。
【目次に戻る】
Fint Spots IPイメージ上で、パウダーリングに沿ってながめて、強度が異常に 高い部分を探し出し、マスクをします。 しかしスポットだらけのパターンには、これを実行しても意味が ありません。各人の判断で使ってください。 Sectoring センターから放射状に16分割し、それぞれの領域で積分します。 計算終了後、16個のパターンを表示します。 計算には1分から5分かかります。 この状態でFindPeaksすると、16パターンそれぞれ独立にピーク サーチが行われます。 Intensity Window内でマウス操作でもピークを拾えます。 Calc Tilt IPの傾きを求めます。 どの方向に何度傾いているか、2つのパラメータを計算します。 これを実行する前に、Sectoringを実行し、その後傾き計算に使う ピークをFindPeaksかマウス操作でマークしておく必要があります。 一度実行するとMain WindowのAzimuthとTiltが更新されます。 Pixel-Intensity, Angle-Intensityでは、この2つのパラメータが 参照され、パウダーリングのひずみを補正しながら積分します。 注意点 回折ピークが弱くてプロファイルが歪んだり、統計誤差とノイズで、 ピークの先端がなめらかな山になっていないパターンでは、当然 うまくピーク位置が決まりません。こんなパターンに CalcTilt を実行しても正確な傾きは求められません。かえって悪くなる 可能性もあります。 回折パターンが上下方向に延びたスリット状の時CalcTiltすると、 情報のない横方向の傾きはほとんど0になります。スリット幅が広い ほど横方向の傾きは精度良くなります。 常圧の標準試料のきれいなパターンを1枚測定し、CalcTiltで傾き を求めたら、その値を他のパターンでも使うようにするのが良いと 思います。
ピクセルサイズ比の決定
まずリング全周にわたってできるだけ切れていないの粉末回折イメージ を用意します。このときの試料はなんでも構いませんが、低角から高角 までの2Θ領域を広くカバーできる、粒径の細かい常圧試料がよいで しょう。この回折イメージをTop,Bottom,Left,Rightの4つの領域 それぞれを積分幅100から200pixels程度でPixel-Intensity1次元 パターンを作ります。このときピクセルサイズpx(横)とpy(縦)は同じ値 (px=py=0.1000mm/pixel等)にしておいて下さい。それぞれのパターン のピーク位置をマークしてから*t,*b,*l,*rというファイル名でセーブ します。ファイルの後ろにピーク位置情報が入っています。ここから先 は手計算です。Top,Bottomnのピーク位置(pixels)を平均します。(傾き の影響がキャンセルされます。)これを画面縦方向のピーク位置 y(pixels)とします。同様に Left,Rightのピーク位置(pixels)を平均 します。これを画面横方向のピーク位置x(pixels)とします。ピークごと にxとyの比を計算しこれらを平均します。このとき強度の弱いものや、 形が悪いダブレットなどは、平均から除外するほうがよいでしょう。 この方法ではピクセルサイズのpx(横)とpy(縦)の比は決まりますが、 それぞれの絶対値までは解りません。ですのでどちらか一方を固定して ください。縦と横を比べてピーク位置(pixels)の大きい方向がピクセル サイズの小さい方向になります。たとえばx/y=0.995ならばpy/px=0.995 になります。この場合、px=0.1000(固定), py=0.0995と値を入力 しましょう。pipでは画面横方向のピクセルサイズpxを基準にとって います。つまりPixel-Intensityで積分した横軸x(pixels)の単位は常に pxであります。Top,Bottomの縦方向に積分したパターンであっても、 単位はpxです。この状態でもう一度粉末回折イメージにもどり、 Pixel-Intensityをやってみてください。横方向のピーク位置x(pixels) はほとんど変化せず、縦方向y(pixels)がx(pixels)と同じ値になり ましたか?これではじめて回折リングにぴったり沿って積分できる ようになりました。【目次に戻る】
盛り込む予定の機能、改善すべき点標準試料のパターンから、Lo, La, Lb, Lcを求める。
インターフェース、デザインをすっきりさせる。
V1.1で改善
V1.2でも改善 OptionMenuを使用
Imageをtiff, jpeg等のファイルへ落とす
V1.2 でXWDに落とせるようになった。
V1.2.1でBMPに落とせるようになった。
Postscript対応
V1.1でIntensityを印刷可能にした。
V1.2でImage印刷組み込む予定
(LIPSは難しいのでGhostScriptでごまかすか?)
V1.2.1でPostScriptファイルに落とすようにした。
まだテスト段階
将来はLIPSコードを直接出すのは廃止したい。
Imageを前処理で切り取り、高速化
V1.3に組み込む予定
長い計算をWorkProcedure(別タスク)で処理させる
V1.3に組み込む予定
イメージのバックグラウンド強度の自動計算
V1.3に組み込む予定
ピクセルサイズ比の計算
V1.3に組み込む予定
Rietanの入力ファイルを生成
V1.4に組み込む予定 あとまわし
IPimage全体を見渡せる縮小表示
V1.2:速度の低下と繁雑さから見送り