Skip to content

Commit b76bdaf

Browse files
authored
[ALICE3] make the LUT collection writeable to file
1 parent fc05c96 commit b76bdaf

File tree

1 file changed

+113
-197
lines changed

1 file changed

+113
-197
lines changed

ALICE3/Core/DelphesO2TrackSmearer.h

Lines changed: 113 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
///
1313
/// @file DelphesO2TrackSmearer.h
1414
/// @brief Porting to O2Physics of DelphesO2 code.
15-
/// Minimal changes have been made to the original code for adaptation purposes, formatting and commented parts have been considered.
1615
/// Relevant sources:
1716
/// DelphesO2/src/lutCovm.hh https://github.com/AliceO2Group/DelphesO2/blob/master/src/lutCovm.hh
1817
/// DelphesO2/src/TrackSmearer.cc https://github.com/AliceO2Group/DelphesO2/blob/master/src/TrackSmearer.cc
@@ -29,155 +28,127 @@
2928

3029
#include <TRandom.h>
3130

32-
#include <cstdio>
3331
#include <fstream>
34-
#include <iostream>
3532
#include <map>
3633
#include <string>
3734

38-
///////////////////////////////
39-
/// DelphesO2/src/lutCovm.hh //
40-
///////////////////////////////
41-
42-
/// @author: Roberto Preghenella
43-
/// @email: preghenella@bo.infn.it
44-
45-
// #pragma // once
46-
#define LUTCOVM_VERSION 20210801
47-
48-
struct map_t {
49-
int nbins = 1;
50-
float min = 0.;
51-
float max = 1.e6;
52-
bool log = false;
53-
float eval(int bin)
54-
{
55-
float width = (max - min) / nbins;
56-
float val = min + (bin + 0.5) * width;
57-
if (log)
58-
return pow(10., val);
59-
return val;
60-
}
61-
// function needed to interpolate some dimensions
62-
float fracPositionWithinBin(float val)
63-
{
64-
float width = (max - min) / nbins;
65-
int bin;
66-
float returnVal = 0.5f;
67-
if (log) {
68-
bin = static_cast<int>((log10(val) - min) / width);
69-
returnVal = ((log10(val) - min) / width) - bin;
70-
} else {
71-
bin = static_cast<int>((val - min) / width);
72-
returnVal = val / width - bin;
73-
}
74-
return returnVal;
75-
}
76-
77-
int find(float val)
78-
{
79-
float width = (max - min) / nbins;
80-
int bin;
81-
if (log)
82-
bin = static_cast<int>((log10(val) - min) / width); // Changed due to MegaLinter error.
83-
// bin = (int)((log10(val) - min) / width); // Original line.
84-
else
85-
bin = static_cast<int>((val - min) / width); // Changed due to MegaLinter error.
86-
// bin = (int)((val - min) / width); // Original line.
87-
if (bin < 0)
88-
return 0;
89-
if (bin > nbins - 1)
90-
return nbins - 1;
91-
return bin;
92-
} //;
93-
void print() { printf("nbins = %d, min = %f, max = %f, log = %s \n", nbins, min, max, log ? "on" : "off"); } //;
94-
};
95-
96-
struct lutHeader_t {
97-
int version = LUTCOVM_VERSION;
98-
int pdg = 0;
99-
float mass = 0.;
100-
float field = 0.;
101-
map_t nchmap;
102-
map_t radmap;
103-
map_t etamap;
104-
map_t ptmap;
105-
bool check_version()
106-
{
107-
return (version == LUTCOVM_VERSION);
108-
} //;
109-
void print()
110-
{
111-
printf(" version: %d \n", version);
112-
printf(" pdg: %d \n", pdg);
113-
printf(" field: %f \n", field);
114-
printf(" nchmap: ");
115-
nchmap.print();
116-
printf(" radmap: ");
117-
radmap.print();
118-
printf(" etamap: ");
119-
etamap.print();
120-
printf(" ptmap: ");
121-
ptmap.print();
122-
} //;
123-
};
124-
125-
struct lutEntry_t {
126-
float nch = 0.;
127-
float eta = 0.;
128-
float pt = 0.;
129-
bool valid = false;
130-
float eff = 0.;
131-
float eff2 = 0.;
132-
float itof = 0.;
133-
float otof = 0.;
134-
float covm[15] = {0.};
135-
float eigval[5] = {0.};
136-
float eigvec[5][5] = {{0.}};
137-
float eiginv[5][5] = {{0.}};
138-
void print()
139-
{
140-
printf(" --- lutEntry: pt = %f, eta = %f (%s)\n", pt, eta, valid ? "valid" : "not valid");
141-
printf(" efficiency: %f\n", eff);
142-
printf(" covMatix: ");
143-
int k = 0;
144-
for (int i = 0; i < 5; ++i) {
145-
for (int j = 0; j < i + 1; ++j)
146-
printf("% e ", covm[k++]);
147-
printf("\n ");
148-
}
149-
printf("\n");
150-
}
151-
};
152-
153-
////////////////////////////////////
154-
/// DelphesO2/src/TrackSmearer.hh //
155-
////////////////////////////////////
156-
157-
/// @author: Roberto Preghenella
158-
/// @email: preghenella@bo.infn.it
159-
160-
// #ifndef _DelphesO2_TrackSmearer_h_
161-
// #define _DelphesO2_TrackSmearer_h_
162-
163-
// #include "ReconstructionDataFormats/Track.h"
164-
// #include "classes/DelphesClasses.h"
165-
// #include "lutCovm.hh"
166-
// #include <map>
167-
168-
using O2Track = o2::track::TrackParCov;
169-
17035
namespace o2
17136
{
17237
namespace delphes
17338
{
17439

175-
class TrackSmearer
40+
class DelphesO2TrackSmearer : public TNamed
17641
{
17742

17843
public:
179-
TrackSmearer() = default;
180-
~TrackSmearer() = default;
44+
#define LUTCOVM_VERSION 20210801
45+
struct map_t {
46+
int nbins = 1;
47+
float min = 0.;
48+
float max = 1.e6;
49+
bool log = false;
50+
float eval(int bin)
51+
{
52+
float width = (max - min) / nbins;
53+
float val = min + (bin + 0.5) * width;
54+
if (log)
55+
return pow(10., val);
56+
return val;
57+
}
58+
// function needed to interpolate some dimensions
59+
float fracPositionWithinBin(float val)
60+
{
61+
float width = (max - min) / nbins;
62+
int bin;
63+
float returnVal = 0.5f;
64+
if (log) {
65+
bin = static_cast<int>((log10(val) - min) / width);
66+
returnVal = ((log10(val) - min) / width) - bin;
67+
} else {
68+
bin = static_cast<int>((val - min) / width);
69+
returnVal = val / width - bin;
70+
}
71+
return returnVal;
72+
}
73+
74+
int find(float val)
75+
{
76+
float width = (max - min) / nbins;
77+
int bin;
78+
if (log)
79+
bin = static_cast<int>((log10(val) - min) / width); // Changed due to MegaLinter error.
80+
// bin = (int)((log10(val) - min) / width); // Original line.
81+
else
82+
bin = static_cast<int>((val - min) / width); // Changed due to MegaLinter error.
83+
// bin = (int)((val - min) / width); // Original line.
84+
if (bin < 0)
85+
return 0;
86+
if (bin > nbins - 1)
87+
return nbins - 1;
88+
return bin;
89+
} //;
90+
void print() { printf("nbins = %d, min = %f, max = %f, log = %s \n", nbins, min, max, log ? "on" : "off"); } //;
91+
};
92+
93+
struct lutHeader_t {
94+
int version = LUTCOVM_VERSION;
95+
int pdg = 0;
96+
float mass = 0.;
97+
float field = 0.;
98+
map_t nchmap;
99+
map_t radmap;
100+
map_t etamap;
101+
map_t ptmap;
102+
bool check_version()
103+
{
104+
return (version == LUTCOVM_VERSION);
105+
} //;
106+
void print()
107+
{
108+
printf(" version: %d \n", version);
109+
printf(" pdg: %d \n", pdg);
110+
printf(" field: %f \n", field);
111+
printf(" nchmap: ");
112+
nchmap.print();
113+
printf(" radmap: ");
114+
radmap.print();
115+
printf(" etamap: ");
116+
etamap.print();
117+
printf(" ptmap: ");
118+
ptmap.print();
119+
} //;
120+
};
121+
122+
struct lutEntry_t {
123+
float nch = 0.;
124+
float eta = 0.;
125+
float pt = 0.;
126+
bool valid = false;
127+
float eff = 0.;
128+
float eff2 = 0.;
129+
float itof = 0.;
130+
float otof = 0.;
131+
float covm[15] = {0.};
132+
float eigval[5] = {0.};
133+
float eigvec[5][5] = {{0.}};
134+
float eiginv[5][5] = {{0.}};
135+
void print()
136+
{
137+
printf(" --- lutEntry: pt = %f, eta = %f (%s)\n", pt, eta, valid ? "valid" : "not valid");
138+
printf(" efficiency: %f\n", eff);
139+
printf(" covMatix: ");
140+
int k = 0;
141+
for (int i = 0; i < 5; ++i) {
142+
for (int j = 0; j < i + 1; ++j)
143+
printf("% e ", covm[k++]);
144+
printf("\n ");
145+
}
146+
printf("\n");
147+
}
148+
};
149+
150+
DelphesO2TrackSmearer() = default;
151+
~DelphesO2TrackSmearer() = default;
181152

182153
/** LUT methods **/
183154
bool loadTable(int pdg, const char* filename, bool forceReload = false);
@@ -189,66 +160,17 @@ class TrackSmearer
189160
lutHeader_t* getLUTHeader(int pdg) { return mLUTHeader[getIndexPDG(pdg)]; } //;
190161
lutEntry_t* getLUTEntry(const int pdg, const float nch, const float radius, const float eta, const float pt, float& interpolatedEff);
191162

192-
bool smearTrack(O2Track& o2track, lutEntry_t* lutEntry, float interpolatedEff);
193-
bool smearTrack(O2Track& o2track, int pdg, float nch);
163+
bool smearTrack(o2::track::TrackParCov& o2track, lutEntry_t* lutEntry, float interpolatedEff);
164+
bool smearTrack(o2::track::TrackParCov& o2track, int pdg, float nch);
194165
// bool smearTrack(Track& track, bool atDCA = true); // Only in DelphesO2
195166
double getPtRes(const int pdg, const float nch, const float eta, const float pt);
196167
double getEtaRes(const int pdg, const float nch, const float eta, const float pt);
197168
double getAbsPtRes(const int pdg, const float nch, const float eta, const float pt);
198169
double getAbsEtaRes(const int pdg, const float nch, const float eta, const float pt);
199170
double getEfficiency(const int pdg, const float nch, const float eta, const float pt);
200171

201-
int getIndexPDG(const int pdg)
202-
{
203-
switch (abs(pdg)) {
204-
case 11:
205-
return 0; // Electron
206-
case 13:
207-
return 1; // Muon
208-
case 211:
209-
return 2; // Pion
210-
case 321:
211-
return 3; // Kaon
212-
case 2212:
213-
return 4; // Proton
214-
case 1000010020:
215-
return 5; // Deuteron
216-
case 1000010030:
217-
return 6; // Triton
218-
case 1000020030:
219-
return 7; // Helium3
220-
case 1000020040:
221-
return 8; // Alphas
222-
default:
223-
return 2; // Default: pion
224-
}
225-
}
226-
227-
const char* getParticleName(int pdg)
228-
{
229-
switch (abs(pdg)) {
230-
case 11:
231-
return "electron";
232-
case 13:
233-
return "muon";
234-
case 211:
235-
return "pion";
236-
case 321:
237-
return "kaon";
238-
case 2212:
239-
return "proton";
240-
case 1000010020:
241-
return "deuteron";
242-
case 1000010030:
243-
return "triton";
244-
case 1000020030:
245-
return "helium3";
246-
case 1000020040:
247-
return "alpha";
248-
default:
249-
return "pion"; // Default: pion
250-
}
251-
}
172+
static int getIndexPDG(const int pdg);
173+
const char* getParticleName(int pdg);
252174
void setdNdEta(float val) { mdNdEta = val; } //;
253175
void setCcdbManager(o2::ccdb::BasicCCDBManager* mgr) { mCcdbManager = mgr; } //;
254176

@@ -269,10 +191,4 @@ class TrackSmearer
269191
} // namespace delphes
270192
} // namespace o2
271193

272-
// #endif /** _DelphesO2_TrackSmearer_h_ **/
273-
274-
namespace o2::delphes
275-
{
276-
using DelphesO2TrackSmearer = TrackSmearer;
277-
}
278194
#endif // ALICE3_CORE_DELPHESO2TRACKSMEARER_H_

0 commit comments

Comments
 (0)