.. _VisualContM: ========================================================= VisualContMマニュアル(非弾性単結晶測定可視化) ========================================================= :更新日: 2021.02.26 :著者: 稲村泰弘 .. contents:: 目次 :depth: 2 概要 ====== 単結晶試料による非弾性散乱のデータを処理するためのソフトウェアである。 非弾性散乱装置で測定され保存されるデータ(生データ、RAW data)には、検出された中性子の位置(装置における座標)とエネルギーに関する情報が強度とともに含まれている。 一方で、非弾性散乱データとして解析するための動的構造因子:S(Q,w)においては、試料内部における逆格子空間での座標と強度が必要である。 すなわち単結晶試料の非弾性散乱の生データを構造因子のようなわかりやすい座標や単位で表示するためには、検出された中性子の情報だけでは処理できず、試料の情報及び試料をどのように取り付けたか(方位)の情報が必要となる。これらの情報を利用して必要な変換を行いデータのスライスまで行うのが、このVisualContMである。 .. warning:: 空蟬0.3.7で取り扱える結晶構造には制限があり、Monoclinic, Triclinic系を扱いたい場合は、空蟬4を用いること(2021/2/26追記) この変換作業に必要なデータや情報は、以下のようなものである。 1. 非弾性散乱用処理を行った測定データ - 生データを入射中性子のエネルギーの情報を用いて、横軸エネルギー遷移(Energy Transfer)に変換し、非弾性散乱用の補正処理したもの(VisualContM範囲外) 2. 試料情報 - 結晶格子定数(a,b,c, α,β,γ) - 取付方位情報(試料の格子と装置との方向に関する関係性) 3. 射影情報 - 逆格子空間内で可視化に適切な軸を設定 なお、このソフトウェアで使用できる機能は、Pythonのコマンドラインから全て行う(スクリプトも可)ことも可能である。その情報はこちら( :ref:`非弾性散乱処理用コマンド:運動量エネルギー空間への射影に関連するコマンド` )。 起動方法 ========= 多くの場合、概要で述べた生データに対する非弾性散乱用処理を **SequenceEdirot** ソフトウェア上で行ったのち、その *Visualize* ボタンからVisualContMを起動することになる。 コマンドインターフェース(CUI)からも起動できるが、これはAppendixにて述べる。 インターフェース ================= VisualContMを起動すると以下のようなGUIが表示される。 |VisualContM_main| VisualContMのGUI上では一つのデータに対して1つのタブが与えられ、逆格子空間への変換やスライスなどを行う。それぞれのタブ(データ)に対し、試料の格子定数や取付方位情報である試料情報(Sample Information)、スライスや可視化するための軸を設定する射影情報(Projection)と実行、スライスの実行(Slicing)などが設定、実行できる。 VisualContMはGUI上に複数のタブを持っており、同時に複数の異なる(もしくは同じ)データを扱うことができる。10個のタブにはAからJまで名前が割り振ってあり、タブをクリックすることでそのタブ(データ)を選択することができる。 主なGUIパーツの説明を簡単に行い、いくつかについては別項で詳細に述べる。 Apply params ボタン 現在選択中のタブにあるパラメータを別のタブへコピーする。全てのタブにコピーされるので注意すること。 CalcBar ボタン タブのデータ間で四則演算を行う。このボタンを押すと下記のようなダイアログが現れる。 |VisualContM_dataope| ここで、計算を行うデータのタブ名(A〜J)を選び、四則演算のためのパラメータ(演算子やデータの定数倍のための値、戻り値をどのタブに入れるか、など)を設定し、Calculateボタンを押す。 *Calculate Slicing Data* チェックボックスにチェックがない場合、生データでの計算が行われ、チェックがある場合はSlice後のデータを利用して計算が行われる。 ParameterFile枠 VisualContMで入力されたパラメータや条件は、ファイルとして保存や読み込みができる。したがってParameterFileを保存すれば、それ以降は読み込むだけでパラメータを再現できる。別名 **XtalParam** ファイル。 SampleInfo枠 逆格子空間への変換を行うための試料情報(格子定数や取付方位情報)を入力する。詳細は「作業手順:試料情報」の項を見よ。 Projection枠 スライス、すなわち可視化を行うときの軸の射影を行うための情報を入力し、射影変換を行う。詳細は「作業手順:射影情報と変換」の項を見よ。 Slicing枠 Projection枠で行った射影作業済みのデータに対しスライスを行う。詳細は「作業手順:スライスとプロット」の項を見よ。 作業手順 ================= すでにデータがタブに読み込まれているとする。 これ以降は以下のような手順となる。 1. 以前に保存したパラメータファイルがあれば読み込む 2. 試料情報の入力・修正 3. 射影情報の入力・修正 4. 射影変換の実行 5. スライスの実行・プロット 6. 必要ならパラメータファイルの保存、データのファイル保存 ----------------- 試料情報 ----------------- GUI上のSampleInfoの設定について述べる。ここでは、主に試料自体の格子定数の入力と、試料の取付方位の情報を入力する。更に試料の取付方位の角度補正を行うこともできる。 |VisualContM_main_sample| 格子定数 -------------- 試料の格子定数を入力する。すなわち、単位格子の各軸の長さa,b,c(単位:オングストローム)と、各稜間の角度α,β,γ(単位:度)を入力する。 取付方位情報 ----------------- 装置に対して試料がどのように取り付けられているかを入力する。 図は装置に対して試料が取り付けられている状況を示しているポンチ絵である。 |VisualContM_P1| ここでは試料の装置内(実空間座標系)での位置を決めるために、試料は入射中性子の入ってくる線上(Incident beam)に取り付けられているとする。また同時に入射線を含み、かつ重力に垂直な水平面(Horizontal plane)を仮定する。 一方、試料は単結晶であり、その方位は逆格子空間での座標軸を用いて表すことができる。 両者の関係が明らかとなる、すなわち逆格子空間の座標系で入射中性子の線や水平面を表現できれば、測定された実空間内の座標のデータから、試料内部の逆格子空間へのデータ変換を行うことができる。 具体的には、以下のような2つのベクトルを逆格子空間軸を用いて指定することになる。 1. 中性子の入射線を逆格子空間軸で表したベクトル( **U-vector** ) 2. 水平面を **U-vector** を利用して決定するためのベクトル( **V-vector** ) U-vector ^^^^^^^^^^ 中性子の入射線に平行となる方位を逆格子の指数(h,k,l)で表現する。U-vectorの要素は、GUI上の *Uh* , *Uk* , *Ul* に対応する。 |VisualContM_P2| ただし、ベクトルの長さは気にしなくて良い(内部で単位長さに変換されるので方位だけが重要)。 V-vector ^^^^^^^^^^ U-vectorともう一つのベクトルで平面が作成できる。その平面が装置内の水平面となるようなベクトルをV-vectorとし、U-vector同様に指数(h,k,l)で表現する。V-vectorの要素は、GUI上の *Vh* , *Vk* , *Vl* に対応する。 |VisualContM_P3| 平面が規定できればいいので、U-vectorとV-vectorは厳密に直交しなくても良いし、長さも気にしなくて良い(内部で単位長さに変換されるので方位だけが重要)。 方位情報の回転補正 -------------------- U-vectorとV-vectorで方位情報を指定しても、実際に測定してみると微妙にずれていることが多い。もしくは基準としたい試料方位が存在する場合、解析時にはこの基準方位からの回転角度を指定する形で解析したいこともある。これは **U-vector** と **V-vector** に対し、軸を指定して回転角度を入力することで試料方位を補正する機能である。 設定するには、回転中心軸をプルダウン( *Y* , *Z* , *X* )で選択し、回転角度を入力(単位:度)する。なお、回転軸と回転角度の方向は、以下の通り。 +----------+------------------------+------------------------------------------------+ |回転中心軸|軸の方向 |回転方向の正負 | +==========+========================+================================================+ |Y軸 |鉛直上向きの軸 |取り付け後の試料を真上から見て反時計回りが正 | +----------+------------------------+------------------------------------------------+ |Z軸 |入射中性子の飛行方向の軸|下流(ビームストッパー)側から見て反時計回りが正| +----------+------------------------+------------------------------------------------+ |X軸 |Y軸とZ軸の外積の方向の軸|試料の上流側の面が水平面から上を向く方向が正 | +----------+------------------------+------------------------------------------------+ .. warning:: ここでの回転角度は **U-vectorとV-vectorに対して作用** するものであることに留意してください。よって検出器のマップなどで弾性散乱ピークの位置を補正したい場合、 **回転させたい方向とは逆方向** に回転させる必要があります。 ----------------- 射影情報と変換 ----------------- 可視化(主にスライスであるが)するための軸を設定し、軸の射影変換を行う。hklにおけるどの軸や面の情報が欲しいか( 100面とか110面とか)によって可視化用の軸を指定する。 *Projection* ボタンを押すとデータの射影変換を行う。ここでは逆格子空間の軸を可視化用の軸に射影変換するだけであり、データは4つの軸+強度+エラーを保持している。ただしこの時点のデータはいわゆるグリッド的なデータではなく、散布的データとなっている。 |VisualContM_main_proj| -------------------- スライスとプロット -------------------- 可視化用に射影された軸を利用してデータをスライスし、2次元プロットで表示することができる。 |VisualContM_main_slice| ここでいうスライスとは、可視化用に射影変換されたデータ(4次元散布的データ)を2Dプロッタ上で表示するために、GUI上で指定した2次元グリッドに落とし込む作業がメインである。各グリッド点の強度は、そこへ足しこまれたデータ点の数で規格化される。 スライスする(=グリッドデータ化)ための設定項目として、縦軸には射影軸ax1 〜 ax4、横軸には設定項目として、スライス範囲、畳み込み設定、2Dプロット時の軸及び厚み指定、プロット軸の刻み幅などがある。 Autoボタン データから各射影軸の最大値、最小値を算出し、Rangeに入力する。 Range スライス範囲。スライス時に範囲を設定したい場合に使用する。 **A** ボタンを押すと自動的にその軸の最大値・最小値が入力される。 Folding 畳み込み用の設定。単純に軸に沿った方向における(指定軸に垂直な面を境界に)畳み込みと、2Dプロット時の対角線を境界とした畳み込みが可能である。 軸垂直方向畳み込み +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------+ |設定値 |畳み込み | +===========+=================================================================================================================================================+ |0 |その軸の0を境界面にして畳みこむ、すなわち指定軸の負のデータを正側に畳みこむ(値の絶対値でスライスする) | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------+ |1以上の整数|その軸の0から設定値までの範囲に全データを畳みこむ(指定軸の負のデータを正側に畳み込み、さらに設定値を周期境界面にしてそれ以上の部分を畳みこむ。)| +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------+ |負の整数 |何もしない(デフォルト) | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------+ 対角線畳み込みは、プルダウンの **NoDiag** となっている部分をクリックすると *X > Y* 、 *X > -Y* 、そして *Both* が現れる。なおここでのXとYは2Dスライスのプロッタ上でのX軸とY軸である。 +----------+------------------------------------------------------------------+ |プルダウン|畳み込み | +==========+==================================================================+ |X > Y |スライス面(2Dプロッタ上)の第1象限から第3象限への対角線で畳み込む| +----------+------------------------------------------------------------------+ |X >-Y |スライス面(2Dプロッタ上)の第2象限から第4象限への対角線で畳み込む| +----------+------------------------------------------------------------------+ |Both |両方の対角線で畳み込む | +----------+------------------------------------------------------------------+ PlotAxis 4つの可視化用軸のうち、スライスする面(2Dプロッタ上)の軸を指定する。各軸のプルダウンメニューには、 *X-axis* , *Y-axis* , *Thickness* の3つが表示される。選択として、 1つの *X-axis* , 1つの *Y-axis* 、2つの *Thickness* としないとスライスできない。 *Thickness* の軸方向では *Range* 領域内での平均値が計算される。 Step スライス軸の刻み幅を指定する。これは *PlotAxis* のうち *X-axis* と *Y-axis* にて有効となる。 *Thickness* の軸は単に *Range* の範囲で積分されるだけである。 Sliceボタン 上記の設定を利用してスライスを実行し、2Dプロッタにて表示する。 Output データをテキストファイル、もしくはバイナリで出力する。詳細は「データの出力について」を参照のこと。 データの出力について ====================== Slicing枠にある **Output to** の機能について示す。 この二つのボタン **TXT** と **BIN** で、射影まで終わったデータをスライス条件( *Range* や *Step* )を利用してグリッドデータとして出力することができる。 先に触れたように、射影をしても4次元のデータ(非線形な軸)であるので、 **Output to** のデータ出力には4次元軸と強度+エラー(グリッドデータ)が含まれることになる。出力フォーマットは以下のようになっている。 +--------+-------------------------------------------+----------------------------------+ |出力方式|メッシュデータ1点あたりのフォーマット |留意点など | +========+===========================================+==================================+ |テキスト|,,,,,|カンマ区切りのテキストで1行に保存| +--------+-------------------------------------------+----------------------------------+ |バイナリ|float data[6](テキストのデータと同じ) |サイズは通常4byte*6=24bytes | +--------+-------------------------------------------+----------------------------------+ ここで出力されるデータに関しては、Slicing枠の各射影軸(Ax1〜Ax4)における *Range* の領域や、 *PlotAxis* の指定によって出力されるデータの範囲や強度が変わることに注意すること。 例えば2Dプロット用のスライス条件( *X-axis* , *Y-axis* , *Thickness* ×2)の場合、 *X-axis* や *Y-axis* が指定されている軸に関しては *Range* の範囲と *Step* の区切り幅が適応されると同時に *Thickness* も考慮されて強度とエラーが計算される。結果として2Dプロット時と同じデータが上記のフォーマットの4次元データとして保存される( *Thickness* の軸は定値)。 もし射影済みのデータ点を3次元や4次元のグリッドデータとして保存したい場合は、グリッドにしたい軸に対して *PlotAxis* の指定を *X-axis* か *Y-axis* のどちらかにすればよい。つまり、確実にメッシュデータ全点を出力したい場合は、 1. *Auto* ボタンを押し 2. 全ての軸の *PlotAxis* を *X-axis* か *Y-axis* かのどちらかにして 3. *Step* を望みの幅に設定し 4. *TXT* ボタン(もしくは *BIN* ボタン)を押す ことになる。 Appendix ============= ------------------------------- コマンドラインからの起動方法 ------------------------------- 以下のようにPythonコマンドプロンプトでVisualContMモジュールを読み込む。 :: >>> import vis.VisualContM as VC ここでは、vis.VisualContMというモジュールを読み込むが、扱うには長いので、VCという代用名(エイリアスみたいなもの)を付けている。そのまま続けて :: >>> VC.VisCont(DAT) で起動する。ここで *DAT* は非弾性散乱の解析データである。 .. |VisualContM_main| image:: media/VisualContM_main.png :width: 400px .. |VisualContM_dataope| image:: media/VisualContM_dataope.png :width: 400px .. |VisualContM_main_sample| image:: media/VisualContM_main_sample.png :width: 400px .. |VisualContM_P1| image:: media/VisualContM_P1.png :width: 400px .. |VisualContM_P2| image:: media/VisualContM_P2.png :width: 400px .. |VisualContM_P3| image:: media/VisualContM_P3.png :width: 400px .. |VisualContM_main_proj| image:: media/VisualContM_main_proj.png :width: 400px .. |VisualContM_main_slice| image:: media/VisualContM_main_slice.png :width: 400px