Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions MC/config/PWGLF/ini/generatorLF_Resonances_flat_mass.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[GeneratorExternal]
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator_pythia8_LF_flat_mass.C
funcName=generateLFRapidity("${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/flatMCgun.json", true, 0, false, true, "${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/pythia8_inel_136tev.cfg", "")

[GeneratorPythia8] # Background event config
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/pythia8_inel_136tev.cfg

[DecayerPythia8] # Transport decayer config
config[0]=${O2DPG_MC_CONFIG_ROOT}/MC/config/common/pythia8/decayer/base.cfg
config[1]=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGLF/pythia8/generator/resonances.cfg
118 changes: 118 additions & 0 deletions MC/config/PWGLF/ini/tests/generatorLF_Resonances_flat_mass.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
int External()
{
std::string path{"o2sim_Kine.root"};

//Kept only target single resonance (e.g. PDG 10331 -> K0S K0S)
std::vector<int> injectedPDGs = {10331};
std::vector<std::vector<int>> decayDaughters = {{310, 310}};

int numberOfInjectedSignalsPerEvent = 5;
int numberOfEventsProcessed = 0;
int numberOfEventsProcessedWithoutInjection = 0;

auto nInjection = injectedPDGs.size();

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);

std::vector<int> nSignal(nInjection, 0);
std::vector<std::vector<int>> nDecays;
std::vector<int> nNotDecayed(nInjection, 0);

for (size_t i = 0; i < nInjection; i++)
{
std::vector<int> nDecay(decayDaughters[i].size(), 0);
nDecays.push_back(nDecay);
}

auto nEvents = tree->GetEntries();
bool hasInjection = false;

for (int i = 0; i < nEvents; i++)
{
hasInjection = false;
numberOfEventsProcessed++;
tree->GetEntry(i);

for (size_t idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack)
{
auto track = tracks->at(idxMCTrack);
auto pdg = track.GetPdgCode();
auto it = std::find(injectedPDGs.begin(), injectedPDGs.end(), pdg);

if (it != injectedPDGs.end()) // Found injected mother particle
{
int index = std::distance(injectedPDGs.begin(), it);
nSignal[index]++;

if (track.getFirstDaughterTrackId() < 0)
{
nNotDecayed[index]++;
continue;
}

for (int j{track.getFirstDaughterTrackId()}; j <= track.getLastDaughterTrackId(); ++j)
{
auto pdgDau = tracks->at(j).GetPdgCode();
bool foundDau = false;

for (size_t idxDaughter = 0; idxDaughter < decayDaughters[index].size(); ++idxDaughter)
{
if (pdgDau == decayDaughters[index][idxDaughter])
{
nDecays[index][idxDaughter]++;
foundDau = true;
hasInjection = true;
break;
}
}
if (!foundDau)
{
std::cerr << "Decay daughter not found: " << pdg << " -> " << pdgDau << "\n";
}
}
}
}
if (!hasInjection)
{
numberOfEventsProcessedWithoutInjection++;
}
}

std::cout << "--------------------------------\n";
std::cout << "# Events: " << nEvents << "\n";
for (size_t i = 0; i < nInjection; i++)
{
std::cout << "# Mother PDG: " << injectedPDGs[i] << "\n";
std::cout << " Generated: " << nSignal[i] << ", " << nNotDecayed[i] << " did not decay\n";

if (nSignal[i] == 0)
{
std::cerr << "No generated signal found for PDG: " << injectedPDGs[i] << "\n";
}
for (size_t j = 0; j < decayDaughters[i].size(); j++)
{
std::cout << " Daughter PDG " << decayDaughters[i][j] << ": " << nDecays[i][j] << "\n";
}
}
std::cout << "--------------------------------\n";
std::cout << "Number of events processed: " << numberOfEventsProcessed << "\n";
std::cout << "Number of events without injection: " << numberOfEventsProcessedWithoutInjection << "\n";

return 0;
}

void generatorLF_Resonances_flat_mass() { External(); }
13 changes: 13 additions & 0 deletions MC/config/PWGLF/pythia8/generator/flatMCgun.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"f0(1710)" : {
"pdg": 10331,
"n": 100,
"ptMin": 0.0,
"ptMax": 30,
"rapidityMin": -1.0,
"rapidityMax": 1.0,
"massMin": 1.0,
"massMax": 3.0,
"genDecayed": true
}
}
Loading
Loading