Skip to content

Commit fa0a860

Browse files
author
Sawan Sawan
committed
Added DPG test script for corresponding ini file and corrected the a2(1320) particle
1 parent 0038a99 commit fa0a860

File tree

3 files changed

+174
-3
lines changed

3 files changed

+174
-3
lines changed

MC/config/PWGLF/ini/tests/GeneratorLF_Resonances_pp_exotic.C

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ int External()
77
int numberOfEventsProcessedWithoutInjection{0};
88
std::vector<int> injectedPDGs = {
99
9010221, // f_0(980)
10+
225, // f_2(1270)
11+
115, // a_2(1320)
1012
10221, // f_0(1370)
1113
9030221, // f_0(1500)
14+
335, // f_2(1525)
1215
10331, // f_0(1710)
1316
20223, // f_1(1285)
1417
20333, // f_1(1420)
1518
335, // f_2(1525)
16-
115, // a_2(1230)
1719
10323, // K1(1270)+
1820
-10323, // K1(1270)-bar
1921
123314, // Xi(1820)-
@@ -23,13 +25,15 @@ int External()
2325
};
2426
std::vector<std::vector<int>> decayDaughters = {
2527
{211, -211}, // f_0(980)
28+
{310, 310}, // f_2(1270)
29+
{310, 310}, // a_2(1320)
2630
{310, 310}, // f_0(1370)
2731
{310, 310}, // f_0(1500)
32+
{310, 310}, // f_2(1525)
2833
{310, 310}, // f_0(1710)
2934
{310, -321, 211}, // f_1(1285)
3035
{310, -321, 211}, // f_1(1420)
3136
{310, 310}, // f_2(1525)
32-
{310, 310}, // a_2(1230)
3337
{321, 211}, // K1(1270)+
3438
{-321, -211}, // K1(1270)-bar
3539
{2212, 211}, // Delta(1232)+
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
int External()
2+
{
3+
std::string path{"o2sim_Kine.root"};
4+
int numberOfInjectedSignalsPerEvent{1};
5+
int numberOfGapEvents{4};
6+
int numberOfEventsProcessed{0};
7+
int numberOfEventsProcessedWithoutInjection{0};
8+
std::vector<int> injectedPDGs = {
9+
9010221, // f_0(980)
10+
225, // f_2(1270)
11+
115, // a_2(1320)
12+
10221, // f_0(1370)
13+
9030221, // f_0(1500)
14+
335, // f_2(1525)
15+
10331, // f_0(1710)
16+
20223, // f_1(1285)
17+
20333, // f_1(1420)
18+
335, // f_2(1525)
19+
10323, // K1(1270)+
20+
-10323, // K1(1270)-bar
21+
123314, // Xi(1820)-
22+
-123314, // Xi(1820)+
23+
123324, // Xi(1820)0
24+
-123324 // Xi(1820)0bar
25+
};
26+
std::vector<std::vector<int>> decayDaughters = {
27+
{211, -211}, // f_0(980)
28+
{310, 310}, // f_2(1270)
29+
{310, 310}, // a_2(1320)
30+
{310, 310}, // f_0(1370)
31+
{310, 310}, // f_0(1500)
32+
{310, 310}, // f_2(1525)
33+
{310, 310}, // f_0(1710)
34+
{310, -321, 211}, // f_1(1285)
35+
{310, -321, 211}, // f_1(1420)
36+
{310, 310}, // f_2(1525)
37+
{321, 211}, // K1(1270)+
38+
{-321, -211}, // K1(1270)-bar
39+
{2212, 211}, // Delta(1232)+
40+
{3122, -311}, // Xi(1820)-
41+
{3122, 311}, // Xi(1820)+
42+
{3122, 310}, // Xi(1820)0
43+
{-3122, 310} // Xi(1820)0bar
44+
};
45+
46+
auto nInjection = injectedPDGs.size();
47+
48+
TFile file(path.c_str(), "READ");
49+
if (file.IsZombie())
50+
{
51+
std::cerr << "Cannot open ROOT file " << path << "\n";
52+
return 1;
53+
}
54+
55+
auto tree = (TTree *)file.Get("o2sim");
56+
if (!tree)
57+
{
58+
std::cerr << "Cannot find tree o2sim in file " << path << "\n";
59+
return 1;
60+
}
61+
std::vector<o2::MCTrack> *tracks{};
62+
tree->SetBranchAddress("MCTrack", &tracks);
63+
64+
std::vector<int> nSignal;
65+
for (int i = 0; i < nInjection; i++)
66+
{
67+
nSignal.push_back(0);
68+
}
69+
std::vector<std::vector<int>> nDecays;
70+
std::vector<int> nNotDecayed;
71+
for (int i = 0; i < nInjection; i++)
72+
{
73+
std::vector<int> nDecay;
74+
for (int j = 0; j < decayDaughters[i].size(); j++)
75+
{
76+
nDecay.push_back(0);
77+
}
78+
nDecays.push_back(nDecay);
79+
nNotDecayed.push_back(0);
80+
}
81+
auto nEvents = tree->GetEntries();
82+
bool hasInjection = false;
83+
for (int i = 0; i < nEvents; i++)
84+
{
85+
hasInjection = false;
86+
numberOfEventsProcessed++;
87+
auto check = tree->GetEntry(i);
88+
for (int idxMCTrack = 0; idxMCTrack < tracks->size(); ++idxMCTrack)
89+
{
90+
auto track = tracks->at(idxMCTrack);
91+
auto pdg = track.GetPdgCode();
92+
auto it = std::find(injectedPDGs.begin(), injectedPDGs.end(), pdg);
93+
int index = std::distance(injectedPDGs.begin(), it); // index of injected PDG
94+
if (it != injectedPDGs.end()) // found
95+
{
96+
// count signal PDG
97+
nSignal[index]++;
98+
if (track.getFirstDaughterTrackId() < 0)
99+
{
100+
nNotDecayed[index]++;
101+
continue;
102+
}
103+
for (int j{track.getFirstDaughterTrackId()}; j <= track.getLastDaughterTrackId(); ++j)
104+
{
105+
auto pdgDau = tracks->at(j).GetPdgCode();
106+
bool foundDau = false;
107+
// count decay PDGs
108+
for (int idxDaughter = 0; idxDaughter < decayDaughters[index].size(); ++idxDaughter)
109+
{
110+
if (pdgDau == decayDaughters[index][idxDaughter])
111+
{
112+
nDecays[index][idxDaughter]++;
113+
foundDau = true;
114+
hasInjection = true;
115+
break;
116+
}
117+
}
118+
if (!foundDau)
119+
{
120+
std::cerr << "Decay daughter not found: " << pdg << " -> " << pdgDau << "\n";
121+
}
122+
}
123+
}
124+
}
125+
if (!hasInjection)
126+
{
127+
numberOfEventsProcessedWithoutInjection++;
128+
}
129+
}
130+
std::cout << "--------------------------------\n";
131+
std::cout << "# Events: " << nEvents << "\n";
132+
for (int i = 0; i < nInjection; i++)
133+
{
134+
std::cout << "# Mother \n";
135+
std::cout << injectedPDGs[i] << " generated: " << nSignal[i] << ", " << nNotDecayed[i] << " did not decay\n";
136+
if (nSignal[i] == 0)
137+
{
138+
std::cerr << "No generated: " << injectedPDGs[i] << "\n";
139+
// return 1; // At least one of the injected particles should be generated
140+
}
141+
for (int j = 0; j < decayDaughters[i].size(); j++)
142+
{
143+
std::cout << "# Daughter " << decayDaughters[i][j] << ": " << nDecays[i][j] << "\n";
144+
}
145+
// if (nSignal[i] != nEvents * numberOfInjectedSignalsPerEvent)
146+
// {
147+
// std::cerr << "Number of generated: " << injectedPDGs[i] << ", lower than expected\n";
148+
// // return 1; // Don't need to return 1, since the number of generated particles is not the same for each event
149+
// }
150+
}
151+
std::cout << "--------------------------------\n";
152+
std::cout << "Number of events processed: " << numberOfEventsProcessed << "\n";
153+
std::cout << "Number of input for the gap events: " << numberOfGapEvents << "\n";
154+
std::cout << "Number of events processed without injection: " << numberOfEventsProcessedWithoutInjection << "\n";
155+
// injected event + numberOfGapEvents*gap events + injected event + numberOfGapEvents*gap events + ...
156+
// total fraction of the gap event: numberOfEventsProcessedWithoutInjection/numberOfEventsProcessed
157+
float ratioOfNormalEvents = numberOfEventsProcessedWithoutInjection / numberOfEventsProcessed;
158+
if (ratioOfNormalEvents > 0.75)
159+
{
160+
std::cout << "The number of injected event is loo low!!" << std::endl;
161+
return 1;
162+
}
163+
164+
return 0;
165+
}
166+
167+
void GeneratorLF_Resonances_pp1360_injection() { External(); }

MC/config/PWGLF/pythia8/generator/resonancelistgun_exotic.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
"rapidityMax": 1.2,
8888
"genDecayed": true
8989
},
90-
"a_2(1230)": {
90+
"a_2(1320)": {
9191
"pdg": 115,
9292
"n": 1,
9393
"ptMin": 0.0,

0 commit comments

Comments
 (0)