ユーザ用ツール

サイト用ツール


tabuchi:xafsm2

XafsM2 : XAFS測定プログラム

1. 概要

あいちSR BL5S1でXAFS測定に使用されているプログラムです。 このプログラムは更新が頻繁(平均して月1以上)なので、ほとんどの場合、ここにあるのは現時点の最新より古い version だということにご注意下さい。 測定の前にインターフェイスを見知っておきたい様な場合にご利用下さい。 また、XafsM2 で測定し作成されたデータファイルを再度読み込んで確認するためのビュワーとして使用することもできます。 この目的のためには多少古いバージョンでも問題ありません。

2. マニュアル

  • マニュアル (2016.4.14 大幅改定版。今後は実行ファイルのパッケージに含めるのをやめます)

3. ダウンロード(主たる変更点)

このリストの一番上のものが最新です。 もし、一番上のものが「Exeのみ」だった場合、「環境込」の最新版(リストの上にあるもの)をまず入手、展開してその中に最新の「Exeのみ」を入れてください。

  • Exeのみ (Qt5.15.2, Windows 64bit版、2024.05.23更新)
    タイムアウトの設定がないとき(デフォルト)ではタイムアウト無限大になってしまってたのを修正。1秒にした。
  • 環境込 (Qt5.15.2, Windows 64bit版、2024.05.21更新)
    Info ファイルに記録を残す追加の情報を指定したとき、情報を提供するはずのデバイスから返答がない場合のタイムアウト時間を指定可能にした。
    RECORD R001 “DXM Temp.” qGasFlow-IonCh ch0 “stat” “GetValue” 1
    の様に設定ファイルの該当行の末尾に追加して書きます(単位は「秒」)。
  • Exeのみ (Qt5.15.2, Windows 64bit版、2024.05.16更新)
    新機能追加に伴う不具合の原因を探るため、内部状態の表示機能を少し強化したバージョン。
  • 環境込 (Qt5.15.2, Windows 64bit版、2024.04.30更新)
    Info ファイルへの追加の情報書き込みに対応。同梱の NewXAFSM.def 参照。(不具合アリとの報告あり)
  • 環境込 (Qt5.15.2, Windows 64bit版、2024.04.19更新)
    1. 先行版の「デフォルトのファイル名を設定」機能が Windows版ではうまく動作していなかったのの修正。(QFileInfo::canonicalFilePath がなんかおかしかった)
    2. 自動測定への対応の一環として、計測値がレンジアウトした場合にそれを検出し、警告を出す等の機能を実装。同梱の NewXAFSM.def 参照
  • Exe のみ (Qt5.15.2 Windows 64bit版、2024.01.20更新⇒2024.01.22差替⇒2024.02.06差替)
    1. 2次元スキャンの際の測定時間予測に補正係数をかけられるようにした。「状態/設定」画面で設定可。設定フィルで下記の様に設定することもできます。
      2DSCAN_CORRECTION_FACTOR 1.5
    2. 2次元スキャン結果、1次元スキャン結果、モニター記録、蛍光検出器のMCA等を保存する際のデフォルトのファイル名を設定した。
      ファイル選択ダイアログを通さず、直接ファイル名入力も許すことにした。
    3. 2次元スキャンのスキャン範囲等の条件を保存/再現できるようにした。
  • 環境込 (Qt5.15.2, Windows 64bit版、2024.01.05更新)
    自動実行関係で多軸ホルダーを使わず、任意の数の軸に関してその位置を記憶しておいて実行できるようになりました。
  • EXEのみ (Qt5.15.2, Windows 64bit版、2023.12.20更新)
    Stars経由でリモートで行えることを増やしました(自動計測関係の3機能を追加)。
  • 環境込 (Qt5.15.2, Windows 64bit版、2023.12.19更新)
    (自動)試料交換に3軸以上を持つ試料交換機を利用可能にした。設定ファイルの書き方は同梱の NewXAFSM.def を参照。
    1. 3軸で張られる3次元空間中に整数で名前がついた「ホーダー位置」を指定して測定可能。
    2. 試料位置微調整(絶対、相対指定)、ホルダを指定しない試料位置のみの指定(絶対、相対指定)、等も2次元の場合の素直な拡張で3次元以上に対応。
  • Exeのみ (Qt5.15.2, Windows 64bit版、2023.12.15更新)
    波数の最大値を指定したとき、ブロックパラメータがおかしくなる場合があるのを修正。 同時に、現在のブロックパラメータで測定される最大波数を常に表示するようにした。
  • 環境込 実行ファイルのパッケージ (Qt5.15.2, Windows 64bit版、2023.12.04更新)
  • Qt6.5.2 Qt5.15.2 実行ファイルのパッケージ (Windows 64bit版、2023.10.27更新)
    “kで等間隔”モード微修正。
  • Exeのみ (Qt5.15.2 Windows 64bit版、2023.10.26更新)
    “k空間で等間隔” 測定を行うとき、等間隔モードに入る直前の最後の1点が等間隔領域に入り込んでしまって、測定されるエネルギー順序が乱れる問題を解消?したつもり。
  • Qt6.5.2 Qt5.15.2 実行ファイルのパッケージ (Windows 64bit版、2023.08.25更新)
    起動時に SDD のドライバ(qTAPDa)との間で通信のループを起こす問題を解消。
  • Qt6.5.2 Qt5.15.2 実行ファイルのパッケージ (Windows 64bit版、2023.08.25更新)
    起動時に SDD のドライバ(qTAPDa)との間で通信のループを起こす問題を解消。⇒ 不具合あり。2023.10.25版に更新

4. 設定ファイルの例

  1. XAFSM.dat 少し新しい例
  2. NewXAFSM.dat 拡張設定

5. 基本的な機能

XafsM2 は多くの機能が盛り込まれていますが、実現されている基本的な機能を挙げます。

  1. XAFSスペクトル測定時に利用可能な機能
    • ステップスキャン、Quick スキャンをサポートします。
    • Quick スキャンでは、繰り返し周期を指定した反復測定が可能です。
    • 多軸の試料ステージを併用して、複数の試料を自動で交換しながら測定したり、一つの試料内の異なる点を順次測定することができます。
    • 複数の検出器を同時に使用して測定が行えます。
    • 測定中に、I0, I, log(I0/I) やその微分等を随時選択して表示できます。
  2. 測定準備中に利用可能な機能
    • 幾つかの予め設定されたエネルギーや、指定したエネルギーに分光器を移動できます。
    • 多軸のステージに複数試料を載せている場合、指定した試料に移動できます。
    • 分光器の角度や、スリット、ステージの高さ等様々な可動軸を横軸に、I0, I1 等を縦軸にとったスキャンができます。
    • XafsM2 に繋がれた様々な検出器の値をモニターできます。
  3. 蛍光検出用の19ch SSDで利用可能な機能
    • SSDの各チャンネルを GUI 常で視覚的に On/Off 可能です。
    • 蛍光X線スペクトルの表示は予め校正されていて、数10eV程度以上の精度のエネルギーのグラフとして見ることができます。
    • ほとんどの、K線、L線の蛍光位置が登録されていて、蛍光X線スペクトル上で確認できます。
    • SSDに対するエネルギーウインドウの設定が mouse を使用した GUI で行えます。
    • XAFS測定中に各チャンネルの信号を確認することや、選択したチャンネルだけの合計を見ることが可能です。
    • XAFS測定の各点に対応した、蛍光X線スペクトルを全て保存することができます。これを用いて、測定後にエネルギーウインドウを変更したXAFSスペクトルを生成することができます。
  4. 多軸の試料ステージ等と連動して利用可能な機能
    • XafsM2 から制御可能なたくさんの軸(試料ステージの可動軸やスリット、ビームラインの光学系の各種の可動軸等)から2つの軸を選択し、2次元のマッピング測定を行うことができます。
    • この機能によって、試料位置を透過X線や蛍光X線の強度マップで確認することや、特定のエネルギーにウインドウをかけた蛍光X線でマップを作ることで試料中の元素分布を確認すること、マップ上で確認した特定の位置に1クリックで移動し、その場所でXAFS測定を行うこと、などが簡単にできます。

XafsM2のXAFS測定画面(ステップスキャンモード) XafsM2の測定準備画面 XafsM2のSSD設定画面

6. 等波数測定の実装 (Imlrementation of "Equal Step in k" mode)

WN2KEV          : double : Constant to convert wave number to energy.   WN2KEV = hbar * hbar / ( 2 * me * ( 1000 * e ) )
eqInK_          : bool   : true when "eq in k" mode is expected to be activated in the region.
eqInKInTheMode_ : bool   : true when "eq in k" mode is activated.
                           (the measurement step is in the region where the k should be changed by equal step.)
eqInKE0KeV_     : double : The original energy : E0. Wave number of electron is given as "sqrt( ( E - eqInKE0KeV_ ) / WN2KEV )"
eqInKCount_     : int    : Roughly say, measured point in "eq in k" mode is "k = dk * eqInKCount_ + k0".

The code till 2023.10.26.

      if ( ! eqInKInTheMode_ ) {                    // when "eq in k" has not been activated.
                                                    // The energy to go (GoToKeV) is calculated as usual with block parameters.
                                                    
                                                    // May be you don't need to care about the following a few lines of codes.
	if ( SMeasInDeg ) {                         // if ( Step and "eq in deg" )
	  Delta = SBlockStartInDeg[MeasB+1] - SBlockStartInDeg[MeasB];
	  GoToKeV = u->deg2keV( Delta/SBlockPoints[MeasB]*MeasS + SBlockStartInDeg[MeasB] );
	} else {                                    // if ( Step and "eq in displayed unit" )
	  Delta = SBlockStartAsDisp[MeasB+1] - SBlockStartAsDisp[MeasB];
	  GoToKeV = u->any2keV( SBLKUnit, Delta / SBlockPoints[MeasB] * MeasS
				+ SBlockStartAsDisp[MeasB] );
	}

	if ( eqInK_ ) {                             // if "eq in k" mode is expected to be activated over the boundary energy.
	  if ( GoToKeV > eqInKFromEkeV_ ) {         // Check if the calculated (with block params) energy "GoToKeV" 
                                                    // beyond the boundary energy "eqInKFromKeV_" or not.
	    eqInKInTheMode_ = true;                 // When beyond, the "eq in k" is activated.
                                                    // but, since the GoToKeV has already been calculated, 
                                                    // the flag "eqInKInTheMode_" is effective from the next measurement step.
	  }
	}
      } else {                                      // When "eq in k" mode is activated.
	eqInKCount_++;                              // Count up the "eq in k" step, which is set to be 0 when the measurement started.
                                                    // So that the eqInKCount_ == 1 
                                                    // at the first time (after the "eqInKInTheMode is true) control arrives here.
	
	double k0 = sqrt( ( eqInKFromEkeV_ - eqInKE0keV_ ) / WN2KEV ); // The wave number at the energy "eqInKFromKeV"
	double k = k0 + eqInKStep_ * eqInKCount_;                      // The wave number to be measured.
	if ( k > eqInKMaxK_ ) {                                        // If the wave number is larger than the max.
	  MeasStage = 11;                                              // The control move to the other stage.
	  break;
	}
	GoToKeV = WN2KEV * k*k + eqInKE0keV_;                          // Convert the wave number to be measured into keV.
      }
      MoveCurThPosKeV( GoToKeV );                                      // Move the Current Theter to the Position selected with the unit keV. 

The new code edited 2023.10.26.

      if ( ! eqInKInTheMode_ ) {                    // when "eq in k" has not been activated.
                                                    // The energy to go (GoToKeV) is calculated as usual with block parameters.
                                                    
        ... some lines are hide ...
        
	if ( eqInK_ ) {                             // if "eq in k" mode is expected to be activated over the boundary energy.
	  if ( GoToKeV > eqInKFromEkeV_ ) {         // Check if the calculated (with block params) energy "GoToKeV" 
                                                    // beyond the boundary energy "eqInKFromKeV_" or not.
	    eqInKInTheMode_ = true;                 // When beyond, the "eq in k" is activated.
                                                    // but, since the GoToKeV has already been calculated, 
                                                    // the flag "eqInKInTheMode_" is effective from the next measurement step.
	  }
	}
      } 
      
      //
      // This block is no longer the "else block", but new if block to check the "eqInKInTheMode_" again, which can be changed before this block.
      //
      if ( eqInKInTheMode_ ) {                      // When "eq in k" mode is activated.

        // The count up is postponed.
	/* eqInKCount_++;                              // Count up the "eq in k" step, which is set to be 0 when the measurement started.
         *                                           // So that the eqInKCount_ == 1 
         *                                           // at the first time (after the "eqInKInTheMode is true) control arrives here.
	 */

	double k0 = sqrt( ( eqInKFromEkeV_ - eqInKE0keV_ ) / WN2KEV ); // The wave number at the energy "eqInKFromKeV"
	double k = k0 + eqInKStep_ * eqInKCount_;                      // The wave number to be measured.
	if ( k > eqInKMaxK_ ) {                                        // If the wave number is larger than the max.
	  MeasStage = 11;                                              // The control move to the other stage.
	  break;
	}
	GoToKeV = WN2KEV * k*k + eqInKE0keV_;                          // Convert the wave number to be measured into keV.

        // new position of the count up.
        eqInKCount_++;
      }
      MoveCurThPosKeV( GoToKeV );                                      // Move the Current Theter to the Position selected with the unit keV. 

7. 履歴と過去のバージョン

  • 2014.6 : この Wiki ページでの公開を開始しました。

過去のバージョン

  • 実行ファイル (Windows版、2023.08.25更新。Qt5.15.2 64bit版)
    SDD のドライバとの連携見直し。
  • 実行ファイル (Windows版、2023.08.25更新。Qt5.15.2 64bit版)
    “kで等間隔”モード安定化 + 表示等も含めてある程度まともにサポート。
  • 実行ファイル (Windows版、2023.08.24更新2回目。Qt5.15.2 64bit版)
    そろそろ細かなバグに消えてほしい“kで等間隔”の測定実装版。
  • 実行ファイル (Windows版、2023.08.24更新。Qt5.15.2 64bit版)
  • 実行ファイルのパッケージ (Windows版、2023.08.23更新。Qt5.15.2 64bit版)
  • 実行ファイル (Windows版、2023.06.22更新。Qt5.15.2 64bit版)
    “kで等間隔”の測定がだいぶまともになりました。
  • 実行ファイル (Windows版、2023.05.23更新。Qt5.15.2 64bit版)
  • 実行ファイル (Windows版、2023.05.22更新。Qt5.15.2 64bit版)
  • 実行ファイル (Windows版、2022.05.20更新。Qt5.15.2 64bit版)
    SSD/SDD のデッドタイム補正のタイプを設定ファイルで決められるようになりました。
  • 実行ファイルのパッケージ (Windows版、2022.05.20更新。Qt5.15.2 64bit版)
  • 実行ファイルのパッケージ (Windows版、2022.01.07更新。Qt5.15.2 64bit版)
    2Dスキャン結果を画像として保存する際に罫線有無を選択できるようにした。
  • 実行ファイルのパッケージ (Windows版、2020.10.27更新。 Qt5.14.2 64bit版)
    2次元スキャンの見積もり時間表示に対応。
  • 実行ファイルのパッケージ (Windows版、2020.10.27更新。 Qt5.14.2 64bit版)
    久しぶりにこちらに最新版を上げてみました。
  • 実行ファイル (Windows版, 2017.8.3更新。パッケージにある XafsM2-develop.exe と置き換えて下さい。)
  • 実行ファイルのパッケージ (Windows版, 2017.3.24更新)
    1. 2016/12 以降、従来の stable の更新を止め、develop を通常利用版とすることにしました。
      また、実行ファイル作成に使用する Qt のバージョンを 5.2.1 から 5.7 に上げました。
  • 実行ファイルのパッケージ (Windows版, 2016.5.12更新)
    1. 2014/12/10 : 測定時にセーブした蛍光X線スペクトルや二次元スキャンの結果のビューアとしても利用できます
    2. 2014/12/31 : 蛍光X線スペクトルのピーク分離の機能が充実しました。
    3. 蛍光X線で二次元マップを測定した結果も再現でき、測定時と同様のデータ操作ができます。
    4. 周辺のプログラムと連携するため、測定開始/終了のシグナルを発生するようになりました。
    5. 測定に使うユニットからの警報を処理できるようになりました。この機能を使って、AIO64でイオンチャンバの出力を監視し、レンジオーバーの警報が出せます。この機能を使うにはXAFSM.defに追加の記入が必要です。
    6. 2015/02/16 : SSDのドライバも他のドライバと同様に後から起動しても正常に接続できるようになりました。
    7. 2015/03/09 : 一時期実験版としていたブランチと合流しました。
    8. 2015/04/09 : Q-XAFS関連でトラブルのもとになる可能性があったコードを修正しました。
    9. 2015/05/19 : カウンターを使用した Q-XAFSに対応。FP23, CC-10 等を使用する際の不具合解消
      外部プログラムと連携するため、測定の開始をブロックする機能を実装。標準のXANESパラメータ生成の際の不具合修正。
      QXAFS測定に4つの検出器使用可能(なはず)
    10. 2015/12/09 : 蛍光X線で二次元マップを測定した際のデータが正常に読み込めなくなっていたのを修正
    11. 2015/12/10 : 読み込んだ二次元マップに対してウインドウの切り直しを行ったデータをセーブ可能に
    12. 2016/01/22 : 二次元マップデータの読み込みの際の不具合を修正
    13. 2016/04/14 : XafsM2 全体の状態保存/復帰が可能。この機能を利用して、XafsM2 が異常停止したときその直前の状態に戻れるようにした。
    14. 2016/04/14 : ユーザーからの要望をいくつか取り込む。
      1. Ordered List Item測定ファイル先頭に書かれるビームライン名を変更可能(これまではBL5S1で固定)
        但し、これを変更するとathenaのプラグインが認識してくれなくなる可能性あり。
      2. XAFS測定結果のグラフ表示画面に、対応するデータファイル名を表示する
      3. Step XAFS の時の最高測定点数を定義ファイルで変更可能にする(デフォルトは 2,000。最大 20,000まで)
      4. XAFS測定のブロック数を最大9にした(従来は8)
      5. 測定ブロックの設定を、測定結果のファイルから読めるようにした
    15. 2016/05/12 : 報告があった幾つかのバグや不具合への対処
      1. 設定ファイルに SSD が無い場合の不具合に対処
      2. SSD の測定結果をセーブする時は新ファイル形式(develop と同じ)でセーブするのに、読む時は旧形式を期待していたため、新しい測定結果は読み込めない、という不具合の解消。新旧両方の形式が読める。
      3. 「条件設定」でスキャンした時、ピークが出るようなスキャンであってもなくても、ピークを仮定したフィッティングを行ってその結果を重ね書きしていたため、表示が見難くなったり、正常なフィッティングができなくて不具合が発生したりしていたのを修正。
  • 実験版の実行ファイルのパッケージ (Windows版, 2016.4.14更新)
    1. 2015/04/09 : 多素子蛍光検出器を複数台使える様にする改造途中のバージョンです。
      測定に関わる機能はほぼ実装済みですが、まだ確認不足なことと、データ読み込み等の一部の機能について未対応/未確認なのでまだ実験版です。
    2. 2016/04/14 : 本流の変化に追随した更新を行った。
      develp 版として、機能改良、安定化、動作チェック等に進捗があったわけではない。
  • 実行ファイルのパッケージ (Windows版, 2015.5.19)
  • 実行ファイルのパッケージ (Windows版, 2016.3.25)
  • 実行ファイルのパッケージ (Windows版, 2016.4.14)
  • マニュアル (2014年版。基本的な機能に関しては問題なく記載されています。)

当 web ページとその下のページに関するお問い合わせ等ございましたら、連絡先にご連絡をお願いします。
田渕のページのルート

tabuchi/xafsm2.txt · 最終更新: 2024/05/23 09:05 by mtab