Category: FITSIO

4. パルス計測プログラムのビルドと測定実行 – GROWTH FPGA/高速ADCボード

雷雲ガンマ線プロジェクト(GROWTH / Thundercloud Project)で開発したGROWTH FPGA/高速ADCボードに関する記事の第四回です。 GRWOTH FPGA/ADCボード関連の記事一覧 GROWTH FPGA/高速ADCボードの概要 GROWTH FPGA/高速ADCボードの拡張コネクタ GROWTH FPGA/高速ADCボードのFPGA書き込み パルス計測プログラムgrowth_daqのビルドと測定実行 GROWTH実験チームでは、GROWTH FPGA/ADCボード用のFPGAイメージに対応したパルス計測・波形取得用のDAQプログラム(growth_daq)をC++で開発して、オープンソースで公開しています。第三回の手順でFPGAを書き込んだボードをMacやRaspberry Piに接続して、growth_daqを実行すると、パルス信号をセルフトリガ方式でトリガしてFITSファイルやROOTファイルにデータを保存できます。なお、growth_daqはC++で記述されたスタンドアロンのプログラムですが、FPGAボードを制御したり取得したデータを伝送したりする機能はライブラリとして分離されています。このライブラリのクラスをユーザが自作したプログラムから利用すれば、実験ごとの要求に応じたデータ取得プログラムを開発することも可能です。 今回はこのgrowth_daqの入手方法、ビルド手順と実行方法を説明します。 この手順にそって作業していても、依存関係のエラーが出る場合があります。その場合はお手数ですが、このブログのコメント欄かgithubのIssueページで連絡してください。 GROWTH-DAQの入手とビルド gitレポジトリのクローン growth_daqは、githubで公開されているGROWTH-DAQというgitレポジトリに入っています。Mac/Raspberry Pi上のコマンドラインから以下のようにしてcloneしてください。gitが入っていない場合は、Homebrewやapt-getでインストールしてください。git submoduleコマンドは、GROWTH-DAQが依存しているライブラリのうち、githubからcloneできるものを自動的にcloneしてくるためのコマンドです。具体的には、GROWTH-DAQ/.gitmodulesに列挙されたライブラリがcloneされます。 なおGROWTH-DAQは、GROWTH実験で開発した検出器システムを雷雲ガンマ線の観測実験で屋外で自律運用するためのソフトウエア群をまとめたgitレポジトリなので、トップディレクトリのREADME.mdではGROWTH-FY2016(とそれ以降)の検出器を駆動する際の手順が説明されています。growth_daqはdaq/内に格納されており、対応するREADMEファイルはdaq/README.mdです。 依存関係のインストール Macでは、Homebrewをインストールしてから、以下の手順でgrowth_daqが依存しているライブラリをインストールしてください。 Raspberry…

RubyFitsでFITSファイルをCSVファイルとしてダンプする例題

RubyFitsでFITSファイルをCSVファイルとしてダンプする例題をgistにアップロードしました。 以下のようにして実行すると、入力したFITSファイル名の後ろにHDU名をくっつけたファイル名で、CSVファイルが生成されます。 実行前には、RubyFitsをインストールしておく必要がありますが、Macの場合はHomebrewで とすればインストールできます。 conver_fits_to_csv.rb – a short example of FITS Table HDU read access using RubyFits

RubyROOTをHomebrewでインストールする

RubyからCern/ROOTが使える、めちゃくちゃ便利なRubyROOTというツールがあります。JAXAのHirokazu Odakaさんが開発・メンテしてくれています。 マニュアルビルドするには、swigやcmakeを用意する必要があるのですが、簡単にインストールできるようにHomebrewのFormulaを作って、tapに入れました。Macの人はHomebrewをインストールしてから、以下のようにしてtapを取得して、インストールすると使えるようになります。 もしROOTが入っていない場合は、 してください。   天文データを扱う人は、RubyFitsもぜひどうぞ。 でインストールできます。高エネルギー宇宙物理の人は、RubyROOTとRubyFITSを同時に使うと、C++を書かずに論文を書くのに必要なデータ解析ができるようになりますよ。 RubyROOTのサンプルコードはgithubのexamplesフォルダを見るか、HongoWikiの「RubyからROOTを使う」のページも参考にしてください。 たとえば、以下のようにヒストグラムを作成できます(write_hist.rb)。

cfitsioで16-bit unsigned integerを扱う例

cfitsioを用いたFITSファイルを生成するプログラムを書いているときに混乱したので、メモしておきます。 cfitsioはextensionとしてunsigned型の整数を読み書きする機能を提供しています。詳細はオフィシャルのユーザマニュアルの 4.4 Support for Unsigned Integers and Signed Bytes で説明されています。 要点は、カラム型としてUがuint16_tに、Vがuint32_tに対応しており、fits_write_col()するときに、TUSHORTやTUINTで値を渡すせばOKです。ヘッダーの絡む定義部に自動的に適切なTZERO/TSCALが記入され、unsigned型で読み書きができるようになります。 例題の一部を抜き出すと、 カラム定義 カラムへの書き込み 例題の全ソースコードはmain.ccからダウンロードしてください。 コンパイルは、以下のようにしてください。 実行するとsample.fitsが生成され、fv等で開くと、以下のように値が詰まっているはずです。 ヘッダ部は以下のように、TZEROとTSCALが設定されます。

fitsioで”HIERARCH 〜”というヘッダーキーワードを読みこむ

FITSファイルのヘッダキーワードのなかには、階層構造を表すためにHIERARCHという接頭辞がついているものがあります。たとえば、APECのデータファイルのHIERARCH INUM_DENSITIESなど。 これらはFITSIOでは普通に”HIERARCH INUM_DENSITIES”というキーワード名でアクセスすれば、値を読み込む事ができます。(親の階層のキー名を付けたりしなくてよい) CCFitsの例だと、以下のような感じです。readKey<値の型>(キーワード名, 値を格納する変数)でアクセスしています。アクセスできない場合例外が返るので、try-catchで拾います。