Skip to content

Commit 3448606

Browse files
authored
New files for producing eventpool of undecayed XiC (#2056)
* New files for producing eventpool of undecayed XiC * add scripts for testing the new .ini files
1 parent a2d0f4e commit 3448606

18 files changed

+823
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredBeauty(1, -1.5, 1.5, -1.5, 1.5, {4332})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredBeauty(1, -1.5, 1.5, -1.5, 1.5, {4132})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_XiC_NoDecay.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredBeauty(1, -1.5, 1.5, -1.5, 1.5, {4132})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredBeauty(1, -1.5, 1.5, -1.5, 1.5, {4232})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredCharm(1, -1.5, 1.5, -1.5, 1.5, {4332})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredCharm(1, -1.5, 1.5, -1.5, 1.5, {4132})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_XiC_NoDecay.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredCharm(1, -1.5, 1.5, -1.5, 1.5, {4132})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
### The external generator derives from GeneratorPythia8.
2+
[GeneratorExternal]
3+
fileName=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/external/generator/generator_pythia8_gaptriggered_hf.C
4+
funcName=GeneratorPythia8GapTriggeredCharm(1, -1.5, 1.5, -1.5, 1.5, {4232})
5+
6+
[GeneratorPythia8]
7+
config=${O2DPG_MC_CONFIG_ROOT}/MC/config/PWGHF/pythia8/generator/pythia8_charmhadronic_NoDecay_Mode2_pp_ref.cfg
8+
includePartonEvent=true
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
int External() {
2+
std::string path{"o2sim_Kine.root"};
3+
4+
int checkPdgQuarkOne = 5;
5+
6+
int checkPdgHadron{4332};
7+
int checkHadronDecays{0};
8+
9+
TFile file(path.c_str(), "READ");
10+
if (file.IsZombie()) {
11+
std::cerr << "Cannot open ROOT file " << path << "\n";
12+
return 1;
13+
}
14+
15+
auto tree = (TTree *)file.Get("o2sim");
16+
std::vector<o2::MCTrack> *tracks{};
17+
tree->SetBranchAddress("MCTrack", &tracks);
18+
o2::dataformats::MCEventHeader *eventHeader = nullptr;
19+
tree->SetBranchAddress("MCEventHeader.", &eventHeader);
20+
21+
int nEventsInj{};
22+
int nQuarks{}, nSignals{};
23+
auto nEvents = tree->GetEntries();
24+
25+
for (int i = 0; i < nEvents; i++) {
26+
tree->GetEntry(i);
27+
28+
// check subgenerator information
29+
if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) {
30+
bool isValid = false;
31+
int subGeneratorId = eventHeader->getInfo<int>(o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid);
32+
if (subGeneratorId == checkPdgQuark) {
33+
nEventsInj++;
34+
}
35+
}
36+
37+
for (auto &track : *tracks) {
38+
auto pdg = track.GetPdgCode();
39+
if (std::abs(pdg) == checkPdgQuark) {
40+
nQuarks++;
41+
continue;
42+
}
43+
if (std::abs(pdg) == checkPdgHadron) { // found signal
44+
nSignals++; // count signal PDG
45+
46+
for (int j{track.getFirstDaughterTrackId()}; j <= track.getLastDaughterTrackId(); ++j) {
47+
if (j >= 0) {
48+
checkHadronDecays += 1;
49+
}
50+
}
51+
}
52+
}
53+
}
54+
55+
std::cout << "--------------------------------\n";
56+
std::cout << "# Events: " << nEvents << "\n";
57+
std::cout << Form("# events injected with %d quark pair: ", checkPdgQuark) << nEventsInj << "\n";
58+
std::cout << Form("# %d (anti)quarks: ", checkPdgQuark) << nQuarks << "\n";
59+
std::cout <<"# signal hadrons: " << nSignals << "\n";
60+
std::cout <<"# signal hadrons decaying : " << checkHadronDecays << "\n";
61+
62+
if (nEventsInj < nEvents) {
63+
std::cerr << "Number of generated events with triggered events different than expected\n";
64+
return 1;
65+
}
66+
67+
if (nQuarks < nEvents) { // we expect anyway more because the same quark is repeated several time, after each gluon radiation
68+
std::cerr << "Number of generated (anti)quarks " << checkPdgQuark << " lower than expected\n";
69+
return 1;
70+
}
71+
72+
if (nSignals < nEvents) {
73+
std::cerr << "Number of generated signals lower than expected\n";
74+
return 1;
75+
}
76+
77+
if (checkHadronDecays > 0) {
78+
std::cerr << "Decayed OmegaC, it should never decay\n";
79+
return 1;
80+
}
81+
82+
return 0;
83+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
int External() {
2+
std::string path{"o2sim_Kine.root"};
3+
4+
int checkPdgQuarkOne = 5;
5+
6+
int checkPdgHadron{4132};
7+
int checkHadronDecays{0};
8+
9+
TFile file(path.c_str(), "READ");
10+
if (file.IsZombie()) {
11+
std::cerr << "Cannot open ROOT file " << path << "\n";
12+
return 1;
13+
}
14+
15+
auto tree = (TTree *)file.Get("o2sim");
16+
std::vector<o2::MCTrack> *tracks{};
17+
tree->SetBranchAddress("MCTrack", &tracks);
18+
o2::dataformats::MCEventHeader *eventHeader = nullptr;
19+
tree->SetBranchAddress("MCEventHeader.", &eventHeader);
20+
21+
int nEventsInj{};
22+
int nQuarks{}, nSignals{};
23+
auto nEvents = tree->GetEntries();
24+
25+
for (int i = 0; i < nEvents; i++) {
26+
tree->GetEntry(i);
27+
28+
// check subgenerator information
29+
if (eventHeader->hasInfo(o2::mcgenid::GeneratorProperty::SUBGENERATORID)) {
30+
bool isValid = false;
31+
int subGeneratorId = eventHeader->getInfo<int>(o2::mcgenid::GeneratorProperty::SUBGENERATORID, isValid);
32+
if (subGeneratorId == checkPdgQuark) {
33+
nEventsInj++;
34+
}
35+
}
36+
37+
for (auto &track : *tracks) {
38+
auto pdg = track.GetPdgCode();
39+
if (std::abs(pdg) == checkPdgQuark) {
40+
nQuarks++;
41+
continue;
42+
}
43+
if (std::abs(pdg) == checkPdgHadron) { // found signal
44+
nSignals++; // count signal PDG
45+
46+
for (int j{track.getFirstDaughterTrackId()}; j <= track.getLastDaughterTrackId(); ++j) {
47+
if (j >= 0) {
48+
checkHadronDecays += 1;
49+
}
50+
}
51+
}
52+
}
53+
}
54+
55+
std::cout << "--------------------------------\n";
56+
std::cout << "# Events: " << nEvents << "\n";
57+
std::cout << Form("# events injected with %d quark pair: ", checkPdgQuark) << nEventsInj << "\n";
58+
std::cout << Form("# %d (anti)quarks: ", checkPdgQuark) << nQuarks << "\n";
59+
std::cout <<"# signal hadrons: " << nSignals << "\n";
60+
std::cout <<"# signal hadrons decaying : " << checkHadronDecays << "\n";
61+
62+
if (nEventsInj < nEvents) {
63+
std::cerr << "Number of generated events with triggered events different than expected\n";
64+
return 1;
65+
}
66+
67+
if (nQuarks < nEvents) { // we expect anyway more because the same quark is repeated several time, after each gluon radiation
68+
std::cerr << "Number of generated (anti)quarks " << checkPdgQuark << " lower than expected\n";
69+
return 1;
70+
}
71+
72+
if (nSignals < nEvents) {
73+
std::cerr << "Number of generated signals lower than expected\n";
74+
return 1;
75+
}
76+
77+
if (checkHadronDecays > 0) {
78+
std::cerr << "Decayed XiC, it should never decay\n";
79+
return 1;
80+
}
81+
82+
return 0;
83+
}

0 commit comments

Comments
 (0)