CbmRoot
Loading...
Searching...
No Matches
CbmAnaTreeContainer.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023-2023 Warsaw University of Technology, Warsaw
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Daniel Wielanek [committer] */
5
6#include "AnalysisTree/Matching.hpp"
7#include "HalCbmSource.h"
8
9#include <TChain.h>
10#include <TFile.h>
11
12#include <AnalysisTree/Configuration.hpp>
13#include <vector>
14
15#include <Hal/Cout.h>
16#include <Hal/InputDataInfo.h>
17#include <Hal/RootIOManager.h>
18
19void CbmAnaTreeRecoContainer::LoadFields(std::vector<TString> files)
20{
21 Bool_t found;
22 AnalysisTree::BranchConfig conf = GetBranchConf(files, "VtxTracks", found);
23 if (!found) return;
24 GetFieldIds().vtx_px = conf.GetFieldId("px");
25 GetFieldIds().vtx_py = conf.GetFieldId("py");
26 GetFieldIds().vtx_pz = conf.GetFieldId("pz");
27 GetFieldIds().vtx_dcax = conf.GetFieldId("dcax");
28 GetFieldIds().vtx_dcay = conf.GetFieldId("dcay");
29 GetFieldIds().vtx_dcaz = conf.GetFieldId("dcaz");
30
31 GetFieldIds().vtx_chi2 = conf.GetFieldId("chi2");
32 GetFieldIds().vtx_vtxchi2 = conf.GetFieldId("vtx_chi2");
33 GetFieldIds().vtx_q = conf.GetFieldId("q");
34 GetFieldIds().vtx_nhits = conf.GetFieldId("nhits");
35 GetFieldIds().vtx_mvdhits = conf.GetFieldId("nhits_mvd");
36
37 GetFieldIds().vtx_x = conf.GetFieldId("x");
38 GetFieldIds().vtx_cx0 = conf.GetFieldId("cx0");
39 GetFieldIds().vtx_cov1 = conf.GetFieldId("cov1");
40 conf = GetBranchConf(files, "TofHits", found);
41 if (!found) return;
42 GetFieldIds().tof_mass2 = conf.GetFieldId("mass2");
43}
44
45void CbmAnaTreeMcContainer::LoadFields(std::vector<TString> files)
46{
47
48 Bool_t found;
49 AnalysisTree::BranchConfig conf = GetBranchConf(files, "SimParticles", found);
50 if (!found) return;
51
52 GetFieldIds().px = conf.GetFieldId("px");
53 GetFieldIds().py = conf.GetFieldId("py");
54 GetFieldIds().pz = conf.GetFieldId("pz");
55 GetFieldIds().mass = conf.GetFieldId("mass");
56 GetFieldIds().pdg = conf.GetFieldId("pid");
57 GetFieldIds().motherId = conf.GetFieldId("mother_id");
58
59 GetFieldIds().freezX = conf.GetFieldId("xfreez");
60 GetFieldIds().freezY = conf.GetFieldId("yfreez");
61 GetFieldIds().freezZ = conf.GetFieldId("zfreez");
62 GetFieldIds().freezT = conf.GetFieldId("tfreez");
63
64 conf = GetBranchConf(files, "SimEventHeader", found);
65 if (!found) return;
66
67 GetFieldIds().event_b = conf.GetFieldId("b");
68 GetFieldIds().event_psi = conf.GetFieldId("psi_RP");
69}
70
71AnalysisTree::BranchConfig CbmAnaTreeContainer::GetBranchConf(std::vector<TString> files, TString patternToFind,
72 Bool_t& found) const
73{
74 TFile* oldFile = gFile;
75 TDirectory* oldDir = gDirectory;
76 for (auto file : files) {
77 TFile* f = new TFile(file);
78 AnalysisTree::Configuration* conf = (AnalysisTree::Configuration*) f->Get("Configuration");
79 auto branches = conf->GetListOfBranches();
80 for (auto branch : branches) {
81 if (patternToFind.EqualTo(branch)) {
82 found = kTRUE;
83 f->Close();
84 gFile = oldFile;
85 gDirectory = oldDir;
86 return conf->GetBranchConfig(patternToFind.Data());
87 }
88 }
89 f->Close();
90 }
91 gFile = oldFile;
92 gDirectory = oldDir;
93 found = kFALSE;
94 return AnalysisTree::BranchConfig();
95}
96
98{
99
100 fEvent = new AnalysisTree::EventHeader();
101 fVtxTracks = new AnalysisTree::TrackDetector();
102 fTofHits = new AnalysisTree::HitDetector();
103 fVtx2Tof = new AnalysisTree::Matching();
104 fVtx2Mc = nullptr;
105 if (tree->GetBranch("VtxTracks.") == nullptr) {
106 Hal::Cout::PrintInfo("Lack of VtxTracks in AT", Hal::EInfo::kError);
107 return kFALSE;
108 }
109 if (tree->GetBranch("RecEventHeader.") == nullptr) {
110 Hal::Cout::PrintInfo("Lack of RecEventHeader in AT", Hal::EInfo::kError);
111 return kFALSE;
112 }
113 if (tree->GetBranch("TofHits.") == nullptr) {
114 Hal::Cout::PrintInfo("Lack of TofHits in AT", Hal::EInfo::kError);
115 return kFALSE;
116 }
117 if (tree->GetBranch("VtxTracks2TofHits.") == nullptr) {
118 Hal::Cout::PrintInfo("Lack of VtxTracks2TofHits tracks in AT", Hal::EInfo::kError);
119 return kFALSE;
120 }
121 tree->SetBranchAddress("VtxTracks.", &fVtxTracks);
122 tree->SetBranchAddress("RecEventHeader.", &fEvent);
123 tree->SetBranchAddress("TofHits.", &fTofHits);
124 tree->SetBranchAddress("VtxTracks2TofHits.", &fVtx2Tof);
125 tree->SetBranchStatus("VtxTracks.", 1);
126 tree->SetBranchStatus("RecEventHeader.", 1);
127 tree->SetBranchStatus("TofHits.", 1);
128 tree->SetBranchStatus("VtxTracks2TofHits.", 1);
129 if (tree->GetBranch("VtxTracks2SimParticles.")) {
130 tree->SetBranchAddress("VtxTracks2SimParticles.", &fVtx2Mc);
131 tree->SetBranchStatus("VtxTracks2SimParticles.", 1);
132 }
133
134 return kTRUE;
135}
136
138{
139 fEvent = new AnalysisTree::EventHeader();
140 fParticles = new AnalysisTree::Particles();
141 if (tree->GetBranch("SimEventHeader.") == nullptr) return kFALSE;
142 if (tree->GetBranch("SimParticles.") == nullptr) return kFALSE;
143 tree->SetBranchAddress("SimEventHeader.", &fEvent);
144 tree->SetBranchAddress("SimParticles.", &fParticles);
145 tree->SetBranchStatus("SimEventHeader.", 1);
146 tree->SetBranchStatus("SimParticles.", 1);
147 return kTRUE;
148}
149
150void CbmAnaTreeV0Container::LoadFields(std::vector<TString> list)
151{
152 Bool_t found;
153 AnalysisTree::BranchConfig conf = GetBranchConf(list, "Candidates", found);
154 if (!found) return;
155 GetFieldIds().chi2geo = conf.GetFieldId("chi2_geo");
156 GetFieldIds().chi2_prim_first = conf.GetFieldId("chi2_prim_first");
157 GetFieldIds().chi2_prim_second = conf.GetFieldId("chi2_prim_second");
158 GetFieldIds().chi2_topo = conf.GetFieldId("chi2_topo");
159 GetFieldIds().cosine_first = conf.GetFieldId("cosine_first");
160 GetFieldIds().cosine_second = conf.GetFieldId("cosine_second");
161
162
163 GetFieldIds().cosine_topo = conf.GetFieldId("cosine_topo");
164 GetFieldIds().distance = conf.GetFieldId("distance");
165
166 GetFieldIds().l = conf.GetFieldId("l");
167 GetFieldIds().l_over_dl = conf.GetFieldId("l_over_dl");
168 GetFieldIds().px = conf.GetFieldId("px");
169 GetFieldIds().py = conf.GetFieldId("py");
170 GetFieldIds().pz = conf.GetFieldId("pz");
171 GetFieldIds().x = conf.GetFieldId("x");
172 GetFieldIds().y = conf.GetFieldId("y");
173 GetFieldIds().z = conf.GetFieldId("z");
174 GetFieldIds().dau1id = conf.GetFieldId("daughter1_id");
175 GetFieldIds().dau2id = conf.GetFieldId("daughter2_id");
176 GetFieldIds().mass = conf.GetFieldId("mass");
177
178#ifdef DEBUG_EXTR
179 GetFieldIds().dau1px = conf.GetFieldId("dau1px");
180 GetFieldIds().dau1py = conf.GetFieldId("dau1py");
181 GetFieldIds().dau1pz = conf.GetFieldId("dau1pz");
182 GetFieldIds().dau1x = conf.GetFieldId("dau1x");
183 GetFieldIds().dau1y = conf.GetFieldId("dau1y");
184 GetFieldIds().dau1z = conf.GetFieldId("dau1z");
185
186 GetFieldIds().dau2px = conf.GetFieldId("dau2px");
187 GetFieldIds().dau2py = conf.GetFieldId("dau2py");
188 GetFieldIds().dau2pz = conf.GetFieldId("dau2pz");
189 GetFieldIds().dau2x = conf.GetFieldId("dau2x");
190 GetFieldIds().dau2y = conf.GetFieldId("dau2y");
191 GetFieldIds().dau2z = conf.GetFieldId("dau2z");
192
193#endif
194
195
196 GetFieldIds().id = conf.GetFieldId("id");
197 GetFieldIds().pdg = conf.GetFieldId("pid");
198 // if (!found) return;
199 // GetFieldIds().mass = conf.GetFieldId("dcaz");
200}
201
203{
204 fParticles = new AnalysisTree::Particles();
205 fParticlesMc = new AnalysisTree::Particles();
206
207 auto vec = Hal::RootIOManager::GetListOfBranches(tree, true);
208 bool found = false;
209 for (auto brName : vec) {
210 brName.EqualTo("Candidates.");
211 found = true;
212 }
213 if (!found) return kFALSE;
214 tree->SetBranchAddress("Candidates.", &fParticles);
215 tree->SetBranchAddress("Simulated.", &fParticlesMc);
216 tree->SetBranchAddress("Candidates2Simulated.", &fV02Mc);
217
218 tree->SetBranchStatus("Candidates.", 1);
219 tree->SetBranchStatus("Simulated.", 1);
220 tree->SetBranchStatus("Candidates2Simulated.", 1);
221 return kTRUE;
222}
223
224void CbmAnaTreeContainers::LoadConf(Hal::InputDataInfo* info)
225{
226 auto listRow = info->GetListOfFiles();
227 std::vector<TString> rec1;
228 for (auto lev : listRow) {
229 rec1.push_back(lev[0]);
230 }
231 for (int i = 0; i < GetSize(); i++) {
232 fContainers[i]->LoadFields(rec1);
233 }
234}
235
242
244{
245 switch (type) {
246 case EContainerType::kMc: {
247 return fContainers[0];
248 } break;
250 return fContainers[1];
251 } break;
252 case EContainerType::kV0: {
253 return fContainers[2];
254 } break;
255 }
256 return nullptr;
257}
258
259std::vector<TString> CbmAnaTreeContainers::GetNames()
260{
261 std::vector<TString> res;
262 res.push_back("mc");
263 res.push_back("reco");
264 res.push_back("v0");
265 return res;
266}
bool Bool_t
AnalysisTree::BranchConfig GetBranchConf(std::vector< TString > files, TString patternToFind, Bool_t &found) const
CbmAnaTreeContainer * fContainers[3]
CbmAnaTreeContainer * GetContainer(EContainerType type)
static std::vector< TString > GetNames()
void LoadConf(Hal::InputDataInfo *info)
Bool_t ConnectToTree(TChain *chains)
AnalysisTree::Particles * fParticles
AnalysisTree::EventHeader * fEvent
AnaTreeMcIds & GetFieldIds()
void LoadFields(std::vector< TString > list)
AnalysisTree::EventHeader * fEvent
AnalysisTree::TrackDetector * fVtxTracks
AnalysisTree::Matching * fVtx2Tof
Bool_t ConnectToTree(TChain *chains)
AnaTreeRecoIds & GetFieldIds()
AnalysisTree::Matching * fVtx2Mc
AnalysisTree::HitDetector * fTofHits
void LoadFields(std::vector< TString > list)
AnalysisTree::Particles * fParticlesMc
void LoadFields(std::vector< TString > list)
AnalysisTree::Particles * fParticles
AnalysisTree::Matching * fV02Mc
Bool_t ConnectToTree(TChain *chains)