xspecでのフィッティングX線スペクトル解析の標準フレームワークであるxspecは、既存のモデルだけでなく、各サイトで開発/構築している独自モデルを入れてフィッティングに使用することができます。このページでは、とくに解析的な式で表現するのが難しいモデルで、スペクトルを数値テーブルとして与える方法(テーブルモデル)について、具体的な方法を紹介します。Modelsというドキュメントが、ひじょうに詳しくテーブルモデルの作り方を説明してくれているので、正しいことを知りたい場合はそちらを参照してください。事前に必要な作業このwikiページで紹介しているモデルfits作成プログラムを動作させるためには、NASA/GSFCが公開しているcfitsioとCCFitsという、FITS形式をC/C++言語から操作するためのライブラリが必要です。勉強FITS形式については、http://fits.gsfc.nasa.gov/などで勉強してください。CCFitsは、pointerと参照渡しを多用するので、C++言語をかなりしっかり理解しないと、間違ったコードを書いてしまいます(C++自体の弱点なので、仕方ない。CCFitsがわるい訳ではない。自信がない人は事前に以下のページ(少なくとも全部一回目を通す)などを読んで勉強してください。http://www.geocities.jp/ky_webid/cpp/language/以後で出てくるvectorやvalarryというのは、C++言語の標準ライブラリ(STL)に含まれているデータコンテナクラスの名前です。C++/STLを知らない人はまず以下のwebなどを参考に、そちらを勉強してください。http://www.cppreference.com/wiki/stl/starthttp://www.cplusplus.com/reference/stl/http://www.sgi.com/tech/stl/cfitsioについては、山田くんが作ってくれたcfitsioによるFITSファイルの操作方法というページもあるので、C言語で操作したい場合はそちらも参照。cfitsioライブラリのインストールC言語からFITS形式を操作するためのライブラリです。cfitsioのページからソースコードをダウンロードしてください。ターミナルから、以下のコマンドを入力して、/usr/libと/usr/includeに、それぞれcfitioのライブラリとヘッダファイルをインストールしてください。CCFitsライブラリのインストールC++からFITS形式を扱うためのライブラリです。内部でcfitsioを利用する(つまりcfitsioに対するwrapperを提供している)ので、先にcfitsioをインストールしておいてください。APIリファレンスや、例題はCCFitsのドキュメントのページから見ることができます。Doxygenを使ってしっかりとドキュメンテーションがなされているので、cfitsioを生で使うよりも見通しよく、効率的に作業できるので、これからFITSライブラリを使うという人にはおすすめです。CCFitsのページからソースコードをダウンロードしてください。以下のようにしてビルド・インストールしてください。bremsstrahlungスペクトルをモデル化する式を使いました。Dwarfの質量Mだけです。rateという次元をもつROOT/TH2Dスペクトルを作成しました。以下のFITSへの変換コードをみるとわかりますが、massは0.01Msunグリッドで0.2Msunから1.4Msunまで、energyは0.01keVから100keVまでを10000分割して計算しています。bremssのemissivityはapecコードをZ=1で用いています。サイエンスの解析の内容がからむので、この部分の実際のコードは論文が出てから公開します。model形式への変換は、ほとんど決められた手順を間違えずにコード化するだけの話です。万が一(?)、他の方の参考になれば、と思って公開しておきます。基本的な作業の流れは、以下の4つのextensionをもつFITSファイルを作ることです。Modelsに書かれています。各パラメータに対応するスペクトルを格納するHDU(注)モデル全体をスケールするnormalizationパラメータは、xspecが自動的に追加してくれます。theApp.Run();}コードの解説プライマリHDUはImage形式であることがFITSの仕様で決められているので、Imageになっていますが、今回はImageの中身は意味を持ちません。1);などのようなメソッドで、fitsファイルインスタンスにtableを追加していきます。CCFitsの思想の問題で、tableをaddするまえに、どういうcolumnを持つかなどを指定するのが標準的なやり方になっているので、この行の前に、カラム名やカラムのformat(数値なのか文字列なのか、など)、カラムの単位をあらわすvectorをたくさん定義しています。スペクトルやパラメータグリッドをつめるcolumnは、1columnがfloatの配列を表すようなformatになっています。}}のようにして、あるmassの場合の一本のスペクトルをvalarrayに入れて、各massのvalarray群をvectorで管理しているようなイメージになります。1);などのように、Column::writeArray()メソッドを使用します。コンパイル以下のようなMakefileを用いてコンパイルしました。-lcfitsio実行(この例は、ROOTファイルがないと動作しませんが、ともかく)実行すると、ipbccool.fitsという名前のfitsファイルが生成されます。xspecでのフィッティング作成したテーブルモデルをxspecから使用するときは、modelとしてatable{ファイル名}という名前を与えます。他のかけ算モデルなどと合わせて使うこともできます。)と、normalizationを入力するよう促されます。fitを決めようとしてくれます。astrophysics.。