ATLAS Run-2データの解析
目次
説明
ATLAS実験で取得したデータは、検出器からの生データから粒子の情報を再構成してxAODと呼ばれる形式に変換される。ほとんどのデータ解析はxAOD形式のファイルを使って行えるはずである。 Tutorial on ATLAS TWiki
データ解析の環境整備
以下の作業はCVMFSのインストールされたLinuxマシンのターミナル上で行うことを前提とする。
解析環境を用意するために一度だけ行う
解析を行うディレクトリを作り、そこで以下のコマンドを実行する。
setupATLAS lsetup 'rcsetup Base,2.3.34' rc find_packages rc compile
これを実行するといくつかのディレクトリや環境変数が定義される。 最初のsetupATLASというコマンドは、ATLASでよく使うソフトウェアを使えるようにするためのものである。二つ目のコマンドはxAODデータの解析に必要な環境を整備するためのものであり、xAODファイルを解析する上で便利なフレームワーク(RootCore)の設定をしてくれる。2.3.34の部分は、RootCoreのバージョンで、おそらく最新のバージョンを使うべきである。Baseというのは、解析を行うグループごとに特別のソフトウェアを使っている場合があり、どのグループのソフトウェアを使うかを指定している。Baseは特定のグループに依らない一般的なソフトウェアという意味である。
xAODファイルはROOTファイルであるが、保存されているデータはATLASの衝突データをモデル化したクラスのオブジェクトたちである。データを解析するためにはRootCoreと呼ばれるフレームワークを使うことが推奨されている。利点は
- 事象データを読み込んで自動的にオブジェクトとしてメモリ上に展開してくれる。
- 複数のファイルを順番に読んでいくことができる。
- データ解析でよく使う実験全体で共通のコードをライブラリから利用できる。
- 他にもあると思う。
新しくセッションを始めた時、毎回行う
setupATLAS lsetup rcsetup
最初に環境を作った時のコマンドと似ているが、2つ目のコマンドでソフトウェアのバージョンを指定していない。最初に設定を行ったときに、設定情報を保存したファイルが作られていてそこから情報を読み込んでいるので必要ない。同じバージョンを指定しても問題はない。
RootCoreの使い方
RootCoreで管理するソフトウェアに対してコンパイル等の操作をするには、rcというコマンドを用いる。
rc help
のように、rcに続けて操作内容を指定する。rc helpとやると、どんな操作が可能かを表示してくれる。
解析コードを書く
パッケージの作成
RootCoreでは、ファイルから事象を一つずつ読み込んでいく機能は用意されており、解析する際に書く必要があるのは事象データを基に何を行うかということである。 ここでは、チュートリアルに従って新しくMyPackageというパッケージ(ライブラリのこと)を作って、その中にMyxAODAnalysisというクラスを作る。
rc make_skeleton MyPackage $ROOTCOREBIN/user_scripts/EventLoop/make_skeleton MyPackage MyxAODAnalysis
最初のコマンドを実行すると、RootCoreディレクトリの下にMyAnalysisというディレクトリが新たに作られ、その下にさらにいくつかのファイルやディレクトリができているはずである。2つ目のコマンドを実行すると、その中にMyPackage/MyxAODAnalysis.h、Root/MyxAODAnalysis.cxxというファイルができる。
MyPackageや!MyxAODAnalysisという名前は適切なものに変換して使う。
データ解析のためのアルゴリズム(C++クラス)の作成
事象解析の基本的な流れは次のようになる。
- 初期化 initialize()
- ヒストグラムの作成など
- ファイルにある事象をループ
- 事象データを基に何か処理を行う execute()
- 終了処理 finalize()
- ヒストグラム・出力ファイルの保存
EventLoopではファイルから事象データを順番に読み込むための仕組みが用意されている。ユーザーが書くべきコードは、ヒストグラムの作成、データ処理等の解析の内容に関連した部分だけでよい。これらのコードをクラスの決まった関数(initialize, execute, finalize)に記述することで、EventLoopが適切に呼び出してくれる。上の流れは実際に、もう少し細かいステップに分かれていて、ヒストグラムの作成はhistInitialize()という関数の中で行うとよい。
ATLASの事象データにアクセスするためには、TEventというクラスを利用する。これはMyxAODAnalysisクラスの関数からは
xAOD::TEvent* event = wk()->event();
として利用できる。ここから事象のデータを取ってくるにはretrieve(...)という関数を利用する。例えば、飛跡(Track)の情報を取ってくるには
const xAOD::TrackParticleContainer* tracks=0; if (!event->retrieve(tracks, "TrackParticles").isSuccess()) { // エラー } else { // データを処理 auto p_track = tracks->begin(); for (; p_track!=tracks->end(); ++p_track) { const TrackParticle* track = *p_track; // ..... } }
のようにして個々のTrackParticleオブジェクトにアクセスできる。
xAOD::TEventやxAOD::TrackParticle等のクラスは、それぞれxAODRootAccess、xAODTrackingというパッケージで定義されているので、MyPackageがこれらのパッケージに依存することを記述する必要がある。そのためにはMyPackage/cmt/Makefile.RootCoreの中の"_DEP = "の部分に"xAODRootAccess xAODTracking"を追加する。Makefile.RootCoreを編集した後には、もう一度rc find_packagesを実行する必要がある。その後、rc compileとやってコードをコンパイルする。
xAODファイルに入っている情報
xAODファイルにはATLAS測定器で測定した検出器の情報や、そこから事象を再構成した粒子の情報が保存されている。検出器のヒットや粒子は複数あるものなので、これらの情報のほとんどは、コンテナという形で保存されている。コンテナとはクラス・オブジェクトの配列のようなものである。xAODファイルに実際にどのようなデータが保存されているかを確認するには、checkxAOD.pyというプログラムを利用する。
checkxAOD.py xaod.root
とすると、ファイルに保存されているコンテナとそれに関連づけられたキーの一覧が出力される。
xAODに含まれる情報に関連するクラスがどのようなデータを保持しているかを調べるにはソースコードで確認するのが最も便利である。 xAODクラスのソースコード
内容 |
パッケージ |
主なクラス |
事象情報 |
xAODEventInfo |
EventInfo |
トリガー |
xAODTrigger |
TriggerMenu, TrigDecision, TrigNavigation |
Tracking |
xAODTracking |
TrackParticle |
カロリメータ |
xAODCaloEvent |
|
ミューオン |
xAODMuon |
Muon |
電子・光子 |
xAODEgamma |
Egamma, Electron, Photon |
ジェット |
xAODJet |
Jet |
メイン・プログラムの作成
EventLoopとMyxAODAnalysisを使って実際にxAODデータを解析するためには、これらを一つのプログラムとしてまとめ上げるために、もう少し準備が必要である。 MyPackage/util/にtestRun.cxxというファイルを作って、ここにmain関数を書く。