簡単な質問: 多くの (200 を超える) メンバー変数が必要な場合 (それぞれが、分析で関心のある物理量のプロットになります)。これらの変数を宣言するのに最適な場所はどこですか?
長い説明: 私が分析に使用するフレームワークは、イベントをループするクラスを作成します。
constructor()
initialize()
execute()
finalize()
ヘッダーでは、次のようなポインターを宣言します (これは明らかに、ROOT
使用する必要があるパッケージの要件です)。
std::vector<double> *m_jet_pt;
およびヒストグラム クラスへのポインター:
TH1F *h_jet_pt;
次にconstructor
、ポインターを特定のメモリアドレスに初期化する必要があります(これは後でファイルからデータを読み取るためであると理解している限り)
constructor()
{
// this is data, will be associated to a TTree later
m_jet_pt = 0;
// this is a histogram
h_jet_pt = new TH1F("name", "title", nbins, min_bin, max_bin);
}
次に、initialize
関数で、以前に保存されたデータを含むファイルを開き、ファイルに含まれるオブジェクトを指すようにクラスのメンバーのアドレスを設定します (これがどのように機能するか、または私のステートメントが正確かどうかはわかりません)。
TFile *file = new TFile("filename.root");
// The tree is where the data is (for some reason ROOT uses C style casts)
TTree *tree = (TTree*)file->Get("MyTree");
// this is how to set the address of the member class pointer
// to point to the data in the tree:
tree->SetBranchAddress("m_jet_pt", &jet_pt);
次に、execute
関数内でイベントごとに 1 回、ループで呼び出され、必要な物理演算の選択を行います。
execute()
{
// I omit here where the `i` index comes from as not relevant
if(m_jet_pt->at(i) > 30)
h_jet_pt->Fill();
}
そして最後に、finalize
関数では、選択が行われた後に各イベントで行う必要があるすべてのことを行います。たとえば、ヒストグラムを別のファイルに保存するなどです。
finalize()
{
h_jet_pt->Write();
}
ここで、 に対して 20 個、jets
に対して 30 個、 に対して 30electrons
個などの数量があると想像しmuons
てください。メンバー変数の数がどのように膨大になるかがわかります。すぐにコードがごちゃごちゃになってしまいましたが、専門のプログラマーはこのような状況にどのように対処しますか? これが十分に明確であることを願っています!