Skip to content

Commit 9625369

Browse files
committed
added test scripts for the ini files and added f0(2200) resonance in the exotic list
1 parent 8b349c1 commit 9625369

11 files changed

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

0 commit comments

Comments
 (0)