あいちSR BL5S1でXAFS測定に使用されているプログラムです。 このプログラムは更新が頻繁(平均して月1以上)なので、ほとんどの場合、ここにあるのは現時点の最新より古い version だということにご注意下さい。 測定の前にインターフェイスを見知っておきたい様な場合にご利用下さい。 また、XafsM2 で測定し作成されたデータファイルを再度読み込んで確認するためのビュワーとして使用することもできます。 この目的のためには多少古いバージョンでも問題ありません。
このリストの一番上のものが最新です。 もし、一番上のものが「Exeのみ」だった場合、「環境込」の最新版(リストの上にあるもの)をまず入手、展開してその中に最新の「Exeのみ」を入れてください。
XafsM2 の開発に使っているフレームワークである Qt のメジャーバージョン番号が 5 から 6 に上がってかなり時間が立ちました。 ですが、Qt6 はほんの少しですが Qt5 と互換性がない部分があり、XafsM2 ではそれが不安だったため Qt6 の使用を控えてきました。 はっきり分かっている点として、配列(ベクトル)のサイズ変更に関する規則が違っていて、XafsM2 は互換性がなくなっていました(Qt6版は正常に動かなかった)。 この点、洗い出して一旦正常に動いているように見えるところまで来ましたので 2024.08.08版として公開します。
Qt5 版の安定度と比べると不安は残るところですが、古い環境はいつかはサポートされなくなリますので できればは早いうちに Qt6 版の評価を進めてもらって、バグ出しにご協力頂けると助かります。 (田渕の個人的な用途では Qt6 を日常的に使っていて、田渕が公開しているプログラムも順次 Qt6 に置き換わりつつあります。 そうした他のプログラムでは問題が出ていませんので、XafsM2 もそれほど問題なく安定してくれることを期待します。)
そうこうしているうちにコンパイラとして GCC ではなく LLVM CLang を使うバージョンに上がってしまいました。 こうなると、「〇〇版」で区分けする今の公開/更新形態は分かりにくいので、別環境バージョン別コンパイラ版を日付順に一列に並べるようにしました。
これ以前は Qt5 版のみ
XafsM2 は多くの機能が盛り込まれていますが、実現されている基本的な機能を挙げます。
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.
過去のバージョン(全て Qt5 版です)
当 web ページとその下のページに関するお問い合わせ等ございましたら、連絡先にご連絡をお願いします。
田渕のページのルート