pip 超簡易マニュアル


   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.将来計画


1.開発目的について

  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'は現在も成長中である。
【目次に戻る】

2.関連ファイル

関連ファイル
        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値などの情報
【目次に戻る】

3.変更点

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を参照して下さい。
【目次に戻る】

4.動作環境

必要な環境

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プリンターの低価格化により普及率が上がった事によります。
【目次に戻る】

5.各ウィンドウの機能

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を求める。
        印刷
【目次に戻る】

6.各ウィンドウの操作方法

**********   1.Main Window   **********
 

メニューバーの中身

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)


********** 2.Image Window **********

特筆すべきボタンについて
        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はリアルタイムに表示。
 


********** 3.Intensity Window **********
 

特筆すべきボタンについて
        Defaultはグラフのサイズを元に戻す。
        PrintはパターンをLIPSまたはPSファイルまたはプリンターに落とす。

マウス操作
        パターン上で左ボタンで、その周辺のピークをマニュアルフィット
        右ボタンで、その周辺のピークを除去
        中ボタンドラッグで、拡大。
        中ボタンをドラッグせずに軽く押してはなすとDefaultサイズ
        X(pixel), 2theta, Intensityはリアルタイムに表示。

        Sectoringの後は16パターンが重なって表示される。


********** 4.Peak Window **********

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共通事項 **********

SubWindowの下のボタン
        OK      Intensity画面の更新
        Close   そのWindowを閉じる。
 【目次に戻る】


7.IPHには無かった機能についての説明

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)と同じ値になり
        ましたか?これではじめて回折リングにぴったり沿って積分できる
        ようになりました。
【目次に戻る】

8.将来計画

盛り込む予定の機能、改善すべき点
        標準試料のパターンから、Lo, La, Lb, Lcを求める。
              V1.1で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:速度の低下と繁雑さから見送り


バグレポート、感想は藤久裕司まで。
充実したマニュアルを作るために、一部分でも書いた方はぜひ藤久まで
送ってください。マニュアルの一部に結合させていただきます。
英語版も欲しい。