forked from AliceO2Group/O2DPG
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGeneratorEPOS4PbPb.C
More file actions
60 lines (59 loc) · 1.75 KB
/
GeneratorEPOS4PbPb.C
File metadata and controls
60 lines (59 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
int External()
{
std::string path{"o2sim_Kine.root"};
// Check that file exists, can be opened and has the correct tree
TFile file(path.c_str(), "READ");
if (file.IsZombie())
{
std::cerr << "Cannot open ROOT file " << path << "\n";
return 1;
}
auto tree = (TTree *)file.Get("o2sim");
if (!tree)
{
std::cerr << "Cannot find tree o2sim in file " << path << "\n";
return 1;
}
std::vector<o2::MCTrack> *tracks{};
tree->SetBranchAddress("MCTrack", &tracks);
// Check if all events are filled
auto nEvents = tree->GetEntries();
for (Long64_t i = 0; i < nEvents; ++i)
{
tree->GetEntry(i);
if (tracks->empty())
{
std::cerr << "Empty entry found at event " << i << "\n";
return 1;
}
}
// Check if there is 1 event, as customly set in the ini file
// Lead-Lead collisions with hydro and hadronic cascade are very slow to simulate
if (nEvents != 1)
{
std::cerr << "Expected 1 event, got " << nEvents << "\n";
return 1;
}
// check if each event has two lead ions with 557440 (208*5360) GeV of energy
for (int i = 0; i < nEvents; i++)
{
auto check = tree->GetEntry(i);
int count = 0;
for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack)
{
auto track = tracks->at(idxMCTrack);
double energy = track.GetEnergy();
// Check if lead ion track energy is approximately equal to 557440 GeV (a tolerance of 50 MeV is considered, straight equality does not work due to floating point precision)
if (std::abs(energy - 557440) < 5e-2 && track.GetPdgCode() == 1000822080)
{
count++;
}
}
if (count < 2)
{
std::cerr << "Event " << i << " has less than 2 lead ions at 557440 GeV\n";
return 1;
}
}
return 0;
}