雛型プログラム - ヒストグラム
次の5つのファイルをダウンロードしてください。(code02)
main.cxx
ZZ.h
ZZ.cxx
Makefile
signal.script
とりあえず実行してみましょう。
gmake
csh系なら
./ZZ < signal.script >& log
sh系なら
./ZZ < signal.script > log 2>&1
ここでROOTの出番です。ROOTを起動してTBrowserでresult.rootを覗いてみてください。
例えば Event Counter;1 は0ビンが高さ1000になっているはずです。
ではプログラムの中を見てみましょう。
main.cxxとMakefileは全く変わっていません。
ZZ.hには次の3つの内容が追加されています。
private:
TFile * m_rootFile;
TH1D * h_eventCounter[1];
TH1D * h_check[5];
m_rootFileは解析結果等を保存するためのROOTファイル用のTFileポインタです。
このROOTファイルの中に保存するヒストグラムをh_eventCounterとh_checkで準備しています。
ZZ.cxxにはたくさんの内容が追加されています。
#include
#include "ZZ.h"
// Particleクラスのヘッダーを追加する。
#include "particle/Particle.h"
void Userana::Initialization()
{
//std::cerr << "Initialization" << std::endl;
// Must call initPtypeClass for its initialzation
// signal.scriptの中で user_ptypeinit で渡した値をstd::stringで受け取る。
std::string ptypeinit = GetParam("ptypeinit");
// 必ず Ptype を初期化する。Particle Typeのデータを読み込むため。
Ptype dummy;
dummy.initPtypeClass(ptypeinit.c_str());
// ROOT file for histgrams
// signal.scriptの中で user_rootfile で渡した値をstd::stringで受け取る。
std::string filename = GetParam("rootfile");
// ROOTファイルを作成する。
m_rootFile = new TFile(filename.c_str(),"recreate");
// Which data are used?
// 必要なデータだけをロードするためのおまじない。
// ここでは、Atlfast関係のデータだけをロードするようにした。
DeactivateAll();
ActivateAtlfast();
// ヒストグラムの定義
h_eventCounter[0] = new TH1D("Event Counter", "Info", 3, -1.5, 1.5);
h_check[0] = new TH1D("AllMuonEta", "Muon", 50, -5.0, 5.0);
h_check[1] = new TH1D("AllMuonPhi", "Muon", 50, -3.15, 3.15);
h_check[2] = new TH1D("AllMuonPt", "Muon", 50, 0., 300.);
h_check[3] = new TH1D("AllMuonMass", "Muon", 50, -20., 20.);
h_check[4] = new TH1D("AllMuonP", "Muon", 50, 0., 300.);
}
void Userana::Doit()
{
//std::cerr << "Doit" << std::endl;
// イベント数を数えるためのヒストグラム
h_eventCounter[0]->Fill(0.);
// Muonの情報をFillしている。
// GetMuonList()というメンバ関数でMuonのリストにアクセスできる。
// すでにParticle Classとして保存されているために便利。
for (unsigned i=0;i<GetMuonListAtlfast().size();++i) {
// ポインターをconstな参照に。
const Particle &p = *(GetMuonListAtlfast()[i]);
h_check[0]->Fill(p.eta()); // eta
h_check[1]->Fill(p.phi()); // phi
h_check[2]->Fill(p.pt()); // pt
h_check[3]->Fill(p.mass()); // mass
h_check[4]->Fill(p.p().vect().mag()); // p
}
}
void Userana::Finalization()
{
//std::cerr << "Finalization" << std::endl;
// ファイルに保存する。
m_rootFile->Write();
// 最後なのでnewしたヒストグラムに関しては気にしていない。
// 良くない...?
}
signal.scriptにはuser_rootfile、user_ptypeinit、input_data_unit mevが追加されている。
user_ptypeinitの引数はとりあえずここに書いてあるものをそのまま使ってください。
もし自分でデータを増やすのであれば、そちらを利用しても構いません。
treename CBNT/t3333
input_data_unit mev
input /home/atljphys/datafiles/dc2/atlj/atlfast808/000009/CBNT/atlj.000009.gghzz4l_mh200.atlfast._00001.root
user_rootfile result.root
user_ptypeinit /atlas/atlasj/atlas_japan/pro/share/dat/particle/pdg_particles.dat
to 999
process
注意1: user_ptypeinitにはpro版のpdg_particles.datを利用していますがこれで十分です。
Go to the next page
Go to the previous page
Go to the index page
jtanaka