Skip to content

Commit 16fb365

Browse files
committed
Added ini and test file
1 parent ebbcd85 commit 16fb365

3 files changed

Lines changed: 130 additions & 1 deletion

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[GeneratorExternal]
2+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator_pythia8_LF_flat_mass.C
3+
funcName=generateLFRapidity("${PWD}/gun.json", true, 0, false, true, "${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/pythia8_inel_136tev.cfg", "")
4+
5+
[GeneratorPythia8] # Background event config
6+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/pythia8_inel_136tev.cfg
7+
8+
[DecayerPythia8] # Transport decayer config
9+
config[0]=${O2DPG_MC_CONFIG_ROOT}/MC/config/common/pythia8/decayer/base.cfg
10+
config[1]=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/resonances.cfg
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
int External()
2+
{
3+
std::string path{"o2sim_Kine.root"};
4+
5+
//Kept only target single resonance (e.g. PDG 10331 -> K0S K0S)
6+
std::vector<int> injectedPDGs = {10331};
7+
std::vector<std::vector<int>> decayDaughters = {{310, 310}};
8+
9+
int numberOfInjectedSignalsPerEvent = 5;
10+
int numberOfEventsProcessed = 0;
11+
int numberOfEventsProcessedWithoutInjection = 0;
12+
13+
auto nInjection = injectedPDGs.size();
14+
15+
TFile file(path.c_str(), "READ");
16+
if (file.IsZombie())
17+
{
18+
std::cerr << "Cannot open ROOT file " << path << "\n";
19+
return 1;
20+
}
21+
22+
auto tree = (TTree *)file.Get("o2sim");
23+
if (!tree)
24+
{
25+
std::cerr << "Cannot find tree o2sim in file " << path << "\n";
26+
return 1;
27+
}
28+
std::vector<o2::MCTrack> *tracks{};
29+
tree->SetBranchAddress("MCTrack", &tracks);
30+
31+
std::vector<int> nSignal(nInjection, 0);
32+
std::vector<std::vector<int>> nDecays;
33+
std::vector<int> nNotDecayed(nInjection, 0);
34+
35+
for (size_t i = 0; i < nInjection; i++)
36+
{
37+
std::vector<int> nDecay(decayDaughters[i].size(), 0);
38+
nDecays.push_back(nDecay);
39+
}
40+
41+
auto nEvents = tree->GetEntries();
42+
bool hasInjection = false;
43+
44+
for (int i = 0; i < nEvents; i++)
45+
{
46+
hasInjection = false;
47+
numberOfEventsProcessed++;
48+
tree->GetEntry(i);
49+
50+
for (size_t idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack)
51+
{
52+
auto track = tracks->at(idxMCTrack);
53+
auto pdg = track.GetPdgCode();
54+
auto it = std::find(injectedPDGs.begin(), injectedPDGs.end(), pdg);
55+
56+
if (it != injectedPDGs.end()) // Found injected mother particle
57+
{
58+
int index = std::distance(injectedPDGs.begin(), it);
59+
nSignal[index]++;
60+
61+
if (track.getFirstDaughterTrackId() < 0)
62+
{
63+
nNotDecayed[index]++;
64+
continue;
65+
}
66+
67+
for (int j{track.getFirstDaughterTrackId()}; j <= track.getLastDaughterTrackId(); ++j)
68+
{
69+
auto pdgDau = tracks->at(j).GetPdgCode();
70+
bool foundDau = false;
71+
72+
for (size_t idxDaughter = 0; idxDaughter < decayDaughters[index].size(); ++idxDaughter)
73+
{
74+
if (pdgDau == decayDaughters[index][idxDaughter])
75+
{
76+
nDecays[index][idxDaughter]++;
77+
foundDau = true;
78+
hasInjection = true;
79+
break;
80+
}
81+
}
82+
if (!foundDau)
83+
{
84+
std::cerr << "Decay daughter not found: " << pdg << " -> " << pdgDau << "\n";
85+
}
86+
}
87+
}
88+
}
89+
if (!hasInjection)
90+
{
91+
numberOfEventsProcessedWithoutInjection++;
92+
}
93+
}
94+
95+
std::cout << "--------------------------------\n";
96+
std::cout << "# Events: " << nEvents << "\n";
97+
for (size_t i = 0; i < nInjection; i++)
98+
{
99+
std::cout << "# Mother PDG: " << injectedPDGs[i] << "\n";
100+
std::cout << " Generated: " << nSignal[i] << ", " << nNotDecayed[i] << " did not decay\n";
101+
102+
if (nSignal[i] == 0)
103+
{
104+
std::cerr << "No generated signal found for PDG: " << injectedPDGs[i] << "\n";
105+
}
106+
for (size_t j = 0; j < decayDaughters[i].size(); j++)
107+
{
108+
std::cout << " Daughter PDG " << decayDaughters[i][j] << ": " << nDecays[i][j] << "\n";
109+
}
110+
}
111+
std::cout << "--------------------------------\n";
112+
std::cout << "Number of events processed: " << numberOfEventsProcessed << "\n";
113+
std::cout << "Number of events without injection: " << numberOfEventsProcessedWithoutInjection << "\n";
114+
115+
return 0;
116+
}
117+
118+
void generatorLF_Resonances_flat_mass() { External(); }

MC/config/PWGLF/pythia8/generator_pythia8_LF_flat_mass.C

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/// \file generator_pythia8_LF_flat_mass.C
2+
/// \author Sawan sawan.sawan@cern.ch
23
/// \brief Modified LF Gun Generator for Flat Mass PHSP PWA Acceptance/Efficiency MC.
3-
/// Derived directly from generator_pythia8_LF_rapidity_width.C
4+
/// Adapted from generator_pythia8_LF_rapidity_width.C
45

56
#if !defined(__CLING__) || defined(__ROOTCLING__)
67
#include "FairGenerator.h"

0 commit comments

Comments
 (0)