自動化対応測定プログラムKAME



スクリーンショット(クリックで拡大)
(概要) C++で書いたマルチスレッドな測定用プログラム。 自分の固体NMRを用いた物性研究に使ってますが、特にNMR専用という訳ではなく汎用です。 対応している測定器の組み合わせならばプログラムの変更が必要ないようになっています。 グラフ表示が速かったり、測定をRubyスクリプトで自動化できるのが特徴。 マルチプラットフォーム(Mac OS X/Linux/Windows)。
Features
一般
マルチスレッド(同期にソフトウェアトランザクショナルメモリ使用)
OpenGLによる高速なグラフ描画
スカラ量(温度、電圧等)の組み合わせは任意にグラフ化可能
ほぼすべての設定等の保存/読み込みが可能
Rubyスクリプトによりほぼすべて制御可能
通信エラー等は例外捕捉により安全に処理
装置からの取得データを全記録/後日再解析可能
NMR部分
National Instruments社のDAQ デバイスをパルサー/オシロとすることができる
FFT/MUSIC/MEM等によるリアルタイムスペクトラム解析
緩和曲線(T1, T2, Tst.e.)もリアルタイムフィット
フーリエステップサムによる磁場/周波数スイープスペクトル測定
緩和・スペクトル測定において測定後でも窓関数(畳み込み)選択可能

ソースコード/バイナリ/マニュアル/API

ライセンスはGPL(GNU public licence) 2 or laterです。
最近の変更点抜粋
Wed Nov 21 2018  (5.2.0)
- Copper Mountain TR1300/1,5048,4530ネットワーク・アナライザのサポート
- オートチューナーの改善
- Thamway PROTのUSB通信の改善
- Mac版のInfo.plistの訂正(一度バイナリを削除してからビルドして下さい)。Mohaveに仮対応。
- ウィンドウの初期表示位置の改善
Tue Sep 18 2018  (5.1.5)
- VNWA3Eの最新のファームウェアによるTCP/IP通信
- Pfeiffer Turbopump controller TC110 (experimental)
Wed Jun 27 2018  (5.1.4)
- スクリプトでのファイル書き込み安定性の改善
- Qt 5.11でのコンパイル
- Thamway PROT3リアルタイム取り込みの改善
Wed Oct 16 2017  (5.1.3)
- OS X High Sierraに対応
- Agilent/HP4282A LCRメータ(experimental)
- PPMSのソフト磁場掃引の修正
Wed Aug 16 2017  (5.1.2)
- 波形データの数値精度を最適化
- NMRパルサーのソフトトリガーを高速化
- Keithley 6482ピコアン
Fri Jul 14 2017  (5.1)
- ユーザーインターフェースの変更
- LCオートチューナーの大幅な改良
- GSL2以降を使用
Thu Jun 22 2017  (5.0)
- Rubyスクリプトの実行時に、スリープ時間の表示、ログファイルの作成を追加
- インターフェースの開始を別スレッドで行うようにした
- グラフの表示色を変更、表示メニューからテーマを選択可能
- PPMSで遅い磁場掃引を追加
- PROT3に暫定対応
Sun Jan 22 2017  (4.2.8)
- Lakeshore 350に対応。
Fri Dec 9 2016  (4.2.7)
- Mac OS X版でAppNap等を停止。動作が概ね安定。
Fri Nov 11 2016  (4.2.6)
- Mac OS X版でもGPIB制御、ThamwayのUSB機器を使用可能にした。
Sun Nov 6 2016  (4.2.4-1)
- 4.2.1以降不安定になっていた現象を修正
Thu Sep 1 2016  (4.2.2-1)
- Digilent Waveform Ainを使用したDSOドライバ
Mon Aug 8 2016  (4.2.1-1)
- 4.1.15-4.2.0の間でクラッシュするバグの修正
Wed Aug 27 2016  (4.2.0-1)
- Qt 5.4以上を要求する。
- 4.1.13-16でmingwのSSEバグでクラッシュする問題を修正
- STMの高速化
- とても長いT1に対応するため、NMR周波数掃引で"cyclic sweep mode"、緩和測定で"Tracks peak freq."を追加
Thu Jun 23 2016  (4.1.13-1)
- Quantum Design PPMSの温度・磁場・ポジション制御ドライバ及びNMR磁場掃引での対応
- Modbus RTUのエラー率低減
- Quantum Design PPMSのモニターに対応
Sun Feb 7 2016  (4.1.11-1)
- ウェーブ形式データの保存がタイミングによっては複数回掃き出されるバグの修正
- Modbus RTUのbaudrateを57600bpsに変更
- OMRON E5*C 調整器(MODBUS)に対応
- Quantum Design PPMSのモニターに対応
Mon May 18 2015  (4.1.0-1)
- NMR I=9/2緩和関数の間違いを修正
- SML SGの修正
- Cryogenic SMSのver7に対する対策
- Windows版でのシリアルポートの動作とDAQmxドライバ、Windowの振る舞いに対する修正
Fri Oct 3 2014  (4.0.12-1)
- 一部のThamwayパルサーに対する修正
- Agilent E5061の修正
Thu Aug 28 2014  (4.0.10-1)
- 高速化
- T1のオートフェーズの改良
- NMR周波数掃引でステップ毎にチューニングを待つモードを追加
Thu Aug 20 2014  (4.0.8-1)
- Overpaintモードを標準にした。Linux版でもFTGL/mikachanfontはもう必要ない
- Thamway パルサー/AD変換/PROT/インピーダンスアナライザーに対応
Fri Aug 19 2014  (4.0.7-1)
- Windows版のTCP接続に対応
- Lecroy DSOの最近の機種に対応
Thu Aug 14 2014  (4.0.6-1)
- KAME4リリース版
- R&Sの信号発生器に対応
- --overpaintオプションでの起動によりグラフのフォントレンダリングにOpenGLを使わない
- WindowsでのGPIB関係のバグ修正
Sun Aug 3 2014  (4.0.1-1)
- β2版、ポップアップに代わってメッセージウィンドウを追加
- 多数のバグ修正。概ね常用可?
Fri Aug 1 2014  (4.0-1)
- β版、表示に若干の乱れ等。
- Windowsに対応
- Mac/Windows版からKDEとFTGLを外した。

全てのChangeLog

対応デバイス

()内は対応している通信手段。"(GPIB)"の場合は測定器のシリアルポートは未テスト・未調整。
DCソース
YOKOGAWA 7651 DC source (GPIB)
ADVANTEST TR6144/R6142/R6144 DC source (GPIB)
MICROTASK/Leiden Triple Current Source (GPIB)

デジタルマルチメータ(DMM)
Keithley 2000/2001 DMM (GPIB)

HP/Agilent 34420A nanovolt meter (GPIB)
HP/Agilent 3458A/3478A DMM (GPIB)
Keithley 6482 picoammeter (GPIB)
SANWA PC500/510/520M/PC5000 DMM (IR SerialPort)
ファンクションジェネレータ
NF WAVE-FACTORY (GPIB)

液面計
Oxford ILM Helium levelmeter (GPIB, SerialPort)

Cryomagnetics LM-500 levelmeter (GPIB)
ロックインアンプ等
Stanford Resrearch SR830 lock-in amplifier (GPIB)

NF LI5640 lock-in amplifier (GPIB)
Andeen-Hagerling 2500A capacitance bridge (GPIB)
超伝導磁石用電源
Oxford PS/IPS-120 magnet power supply (GPIB, SerialPort)

Cryogenic SMS magnet power supply (USB serial port)
ネットワークアナライザ
HP/Agilent 8711/8712/8713/8714 network analyzer (GPIB)

Agilent E5061/E5062 network analyzer (GPIB)
Copper Mountain TR1300/1,5048,4530 Network Analyzer (TCP/IP)
DG8SAQ VNWA3E network analyzer (TCP/IP)
Thamway T300-1049A Impedance Analyzer (SerialPort)
標準信号発生器
KENWOOD SG7130/SG7200 signal generator (GPIB)

HP/Agilent 8643/8644/8648/8664/8665 signal generator (GPIB)
DSTech. DPL-3.2XGF (SerialPort)
Rhode-Schwartz SML-01/02/03/SMV-03 signal generator (GPIB, SerialPort)
Thamway NMR PROT built-in signal generator (USB,TCP/IP)
温度コントローラ
Cryocon M32/M62 temperature controller (GPIB)

LakeShore 340 temperature controller (GPIB)
LakeShore 355 temperature controller (GPIB)
LakeShore 370 temperature controller (GPIB)
Picowatt AVS-47 bridge (GPIB)
Oxford ITC-503 temperature controller (GPIB, SerialPort)
Neocera LTC-21 temperature controller (GPIB)
Keithley 2700 DMM w/ 7700 scanner as temperature controller (GPIB)
OMRON E5*C controller via modbus (SerialPort)
カウンター
Mutoh NPS counter (SerialPort)

流量制御弁
Fujikin FCST1000 Series Mass Flow Controllers (Serial Port 38400bps)

モーター制御
OrientalMotor FLEX CRK motor controller (Serial Port Modbus RTU 115200bps)
OrientalMotor FLEX AR/DG2 motor controller (Serial Port Modbus RTU 115200bps)

ターボ分子ポンプ制御
Pfeiffer Turbo molecular pump controller TC110 (Serial Port)
デジタルストレージオシロスコープ(DSO)
Tektronix DSO (GPIB)

Lecroy/Iwatsu DSO (GPIB)
DSO on NI-DAQ M,S series (NI-DAQmx)
Thamway A/D conversion DV14U25 (USB)
Digilent WaveForms AIN DSO (USB)
PPMS
Quantum Design PPMS low-level interface (GPIB, Serial Port 9600bps)
NMR用パルサー
NMR pulser on NI-DAQ M series (NI-DAQmx)
NMR handmade pulser on H8 (SerialPort)
NMR handmade pulser on SH2(SerialPort)
NMR pulser Thamway N210-1026 PG (USB,GPIB,TCP/IP)
解析/制御ドライバ
電流反転抵抗測定
NMR FID/echo analyzer
NMR field-swept spectrum measurement
NMR frequency-swept spectrum measurement
NMR relaxation(T1/T2/Tst.e.) measurement
NMR LC circuit autotuner

実行環境

プログラムの実行には一般的なKDE4(Linux版のみ)/Qt アプリケーションとしての他に以下の外部ライブラリが必要です。詳しくはマニュアルを参照。
  1. Ruby (スクリプト系のオブジェクト指向言語。測定の自動化と設定の保存/読み込みに使います。)
  2. GSL (GNU Scientific Library。非線形フィットと補完に使ってます。)
  3. FFTW (ver.3系列。最速のFFTライブラリの一つ。)
  4. ATLAS (LAPACK, BLAS) (線形代数ライブラリ。固有値問題に使っています。)
  5. linux-gpib (GPIBを使用する場合に必要。RPMはこちら、SRPMはこちら。)
    もしくはNational Instruments NI-488.2ドライバ。
  6. National Instruments DAQmx (DAQデバイスを使用する場合のみ必要。)
Linux/Mac版のコンパイル時には上記に加え以下が必要です。
  1. libtool-ltdl (GNU libtool dynamic module loader。起動時にモジュールを読み込む為に必要。)
Linuxの場合は付属のspecファイルを適当に使ってRPMが作れます。tools/mkrpm.shを参考にしてください。 上記のライブラリのほとんどは付属のパッケージシステム(yumとかapt-getとか)で取ってこれると思います。

技術的特徴

リアルタイム性を確保するため、ロックフリー(lock-free)アルゴリズムに凝った作りになっています。
  • 内部のオブジェクトはツリー状に管理。 Rubyスクリプトからのアクセスや測定の設定の読み込み/保存は全てオブジェクトツリーに対して行う。
  • オブジェクトベースのソフトウェアトランザクショナルメモリにより、オブジェクトツリーとデータをアクセスする。 ツリーへのオブジェクトの追加・削除はトランザクション中で行える。巡回参照でなければハードリンクも可能になっている。
    //Example for reading.
    { Snapshot<Node> shot( *this); //A snapshot of a subtree.
        printf("Node1 = %lf, Node2 = %lf\n",
            shot[ *child_node1].m_x, 
    		shot[ *child_node2].m_y); //looking up parts of the snapshot.
    }
    
    //Example for transactional writing.
    this->iterate_commit([=](Transaction<Node> &tr) {
        const Snapshot<Node> &shot(tr); //for read-only access.
        tr[ *this].m_z = shot[ *child_node1].m_x + shot[ *child_node2].m_y; 
        tr[ *this].m_z = shot[ *this].m_z + 1;
    }); 
    
    //Example for linking.
    this->iterate_commit_if([=](Transaction<Node> &tr) {
        //adding a new link to child_node1.
        if( !this->insert(tr, child_node1, true))
            return false;
        tr[ *child_node1].m_x = 1;
        return true;
    });
    
    //Other examples: transaction_test.cpp,transaction_dynamic_node_test.cpp,transaction_negotiation_test.cpp
    //Headers: transaction.h, transaction_impl.h , transaction_signal.h
  • 測定装置のIO部分はSTMが使えないのでMutexによる排他制御を使っている。
  • スレッド構成は測定スレッド+GUI(メイン)スレッド+Rubyスレッド+Rawデータ読み込みスレッド。 GUIスレッドには関数オブジェクトとスナップショットをイベントとして渡してプールした後に遅延実行している。
  • ドライバは測定データを生成/保持する為のXPrimaryDriverを 継承するクラスと、解析専門のXSecondaryDriver 由来クラスの2種類。 測定データは一度保存に適した形(rawData) にした後で、analyzeRaw関数内で処理される。XSecondaryDriverが 複数のドライバからのデータを処理する場合には、rawDataに 付けられたタイムスタンプで時間依存関係をチェックする。
  • グラフはOpen GLで描画。高速に半透明で描画できる。描画が追いつかない場合には古いイベントを捨てている。

その他

メッセージ(gettextの翻訳リソース)は関西弁やで。

参考文献


Valid HTML 4.01 Strict 正当なCSSです!