31{
33
34
35 int sampling = 2;
36
37 LArTT_Selector<LArCellCont>
sel;
39
40 double energyEta = 0.;
41 double energyPhi = 0.;
42
43
44 double energyNegPhi = 0.;
45 double energyNegPhiConv = 0.;
46 double energyPosPhi = 0.;
47
48
49
50
51
52
53
54
55
56
57 double seedEnergy = 0.;
58 double seedPhi = 999.;
59 double seedEta = 999.;
60 double hotPhi = 999.;
61 double hotEta = 999.;
62 int ncells = 0;
63
64 float etaL1 = rtrigEmCluster.
eta();
65 float phiL1 = rtrigEmCluster.
phi();
66
67 const LArEM_ID* emID =
m_larMgr->getEM_ID();
68 const LArCell* seedCell = nullptr;
69 const LArCell* hotCell = nullptr;
70 for (
const LArCell* larcell :
sel) {
71 if (larcell->energy() > seedEnergy) {
72 float deta = std::abs(etaL1 - larcell->eta());
74 float dphi = std::abs(phiL1 - larcell->phi());
75 dphi = std::abs(
M_PI - dphi);
76 dphi = std::abs(
M_PI - dphi);
78 seedEnergy = larcell->energy();
79 seedCell = larcell;
80 }
81 }
82 }
83 ncells++;
84 }
85 if (seedCell != nullptr) {
86 seedEta = seedCell->
eta();
87 seedPhi = seedCell->
phi();
88
89 caloDDE = (seedCell->
caloDDE());
90 hotCell = seedCell;
91 hotEta = hotCell->
eta();
92 hotPhi = hotCell->
phi();
93 }
94 else {
95 return StatusCode::SUCCESS;
96 }
97
98 std::map<const LArCell*, float>
windows;
99 for (
const LArCell* larcell :
sel) {
100 float deta = std::abs(seedEta - larcell->eta());
101 if (deta < 0.025 + 0.002) {
102
103 float dphi = std::abs(seedPhi - larcell->phi());
104 dphi = std::abs(
M_PI - dphi);
105 dphi = std::abs(
M_PI - dphi);
106 if (dphi < 0.025 + 0.002) {
108 }
109 }
110 ncells++;
111 }
112
113 for (
const LArCell* larcell :
sel) {
114 double etaCell = larcell->eta();
115 double phiCell = larcell->phi();
116 double energyCell = larcell->et();
117
118
119 float deta = std::abs(etaCell - seedEta);
120 if (deta > 0.05 + 0.002) continue;
121 for (
auto& [cell, energy] :
windows) {
122 float deta1 = std::abs(etaCell -
cell->eta());
123 float dphi = std::abs(phiCell -
cell->phi());
124 if (dphi >
M_PI) dphi = 2. *
M_PI - dphi;
125
126
127
128
129
130
131 double cellSizeEta;
132 double cellSizePhi;
136 }
137 else {
140 }
141
142
143 int nCellsEta = 3;
144 int nCellsPhi = 5;
145 if (deta1 <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
146 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
148 }
149 }
150 }
151
153 for (
auto const& [cell, energy] :
windows) {
157 }
158 }
159
160 if (seedCell != nullptr) {
161 seedEta = seedCell->
eta();
162 seedPhi = seedCell->
phi();
163
164 caloDDE = (seedCell->
caloDDE());
165 }
166 else {
167 return StatusCode::SUCCESS;
168 }
169
170 bool cluster_in_barrel = true;
172
173
174
175 double energy37Lay2 = 0.;
176 double energy37Lay2NegPhi = 0.;
177 double energy37Lay2PosPhi = 0.;
178 double energy77Lay2 = 0.;
179 double energy35Lay2 = 0.;
180 double energy33Lay2 = 0.;
181 double weightEta = 0.;
182 double weightEta2 = 0.;
183 double clusterWidth35 = 0.;
184 int nCellsEta = 0;
185 int nCellsPhi = 0;
186 double deta = 0.;
187 double dphi = 0.;
188
189 double totalEnergy = 0;
191
192 for (
const LArCell* larcell :
sel) {
193 double etaCell = larcell->eta();
194 double phiCell = larcell->phi();
195 double energyCell = larcell->energy();
196
197
198 deta = std::abs(etaCell - seedEta);
199 dphi = std::abs(phiCell - seedPhi);
200 if (dphi >
M_PI) dphi = 2. *
M_PI - dphi;
201
202 double detaH = std::abs(etaCell - hotEta);
203 double dphiH = std::abs(phiCell - hotPhi);
204 if (dphiH >
M_PI) dphiH = 2. *
M_PI - dphiH;
205
206
207
208
209
210
211 double cellSizeEta;
212 double cellSizePhi;
216 }
217 else {
220 }
221
222
223
224 nCellsEta = 7;
225 nCellsPhi = 7;
226 if (detaH <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
227 dphiH <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
228
229 nCellsEta = 3;
230 nCellsPhi = 7;
231 if (detaH <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
232 dphiH <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
233 energy37Lay2 += energyCell;
234 }
235 energy77Lay2 += energyCell;
236 }
237
238
239 nCellsEta = 7;
240 nCellsPhi = 7;
241 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.005 &&
242 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.005) {
243
244 nCellsEta = 3;
245 nCellsPhi = 7;
246 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.002 &&
247 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.002) {
248 energyEta += energyCell * etaCell;
249
250
251
252
253 if (phiCell > 0.) {
254 energyPosPhi +=
double(energyCell) * phiCell;
255 energy37Lay2PosPhi += energyCell;
256 }
257 else {
258 energyNegPhi +=
double(energyCell) * phiCell;
259 energyNegPhiConv +=
double(energyCell) * (phiCell + 2.0 *
M_PI);
260 energy37Lay2NegPhi += energyCell;
261 }
262
263 nCellsEta = 3;
264 nCellsPhi = 5;
265 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
266 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
267 weightEta += energyCell * etaCell;
268 weightEta2 += energyCell * etaCell * etaCell;
269 energy35Lay2 += energyCell;
270
271
272 nCellsPhi = 3;
273 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
274 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
275 energy33Lay2 += energyCell;
276 }
277 }
278
279 }
280
281
282 }
283
284 }
285
286
287
288 if ((energy37Lay2PosPhi + energy37Lay2NegPhi) > 0.) {
289
290 double AvgNegPhi = 0.;
291 double AvgPosPhi = 0.;
292
293 energyEta /= (energy37Lay2PosPhi + energy37Lay2NegPhi);
294
295 if (energy37Lay2NegPhi > 0.) {
296 AvgNegPhi = energyNegPhi / energy37Lay2NegPhi;
297 }
298 else {
299 AvgNegPhi = -999.0;
300 }
301
302 if (energy37Lay2PosPhi > 0.) {
303 AvgPosPhi = energyPosPhi / energy37Lay2PosPhi;
304 }
305 else {
306 AvgPosPhi = -999.0;
307 }
308
309 if (AvgPosPhi == -999.0) {
310 if (AvgNegPhi != -999.0) {
311 energyPhi = AvgNegPhi;
312 }
313 }
314
315 if (AvgNegPhi == -999.0) {
316 if (AvgPosPhi != -999.0) {
317 energyPhi = AvgPosPhi;
318 }
319 }
320
321 if (AvgNegPhi != -999.0 && AvgPosPhi != -999.0) {
322 if ((AvgNegPhi > (-
M_PI / 2.0)) && (AvgPosPhi < (
M_PI / 2.0))) {
323 energyPhi = (energyNegPhi + energyPosPhi) / (energy37Lay2NegPhi + energy37Lay2PosPhi);
324 }
325 else {
326 if ((AvgNegPhi < (-
M_PI / 2.0)) && (AvgPosPhi > (
M_PI / 2.0))) {
327 energyPhi = (energyNegPhiConv + energyPosPhi) / (energy37Lay2NegPhi + energy37Lay2PosPhi);
328 if (energyPhi >
M_PI) {
329 energyPhi = energyPhi - 2 *
M_PI;
330 }
331 }
332 }
333 }
334 }
335 else {
336 energyEta = 99.;
337 energyPhi = 0.;
338 }
339
340 for (
const LArCell* larcell :
sel) {
341 double etaCell = larcell->eta();
342 double phiCell = larcell->phi();
343 double energyCell = larcell->energy();
344
345
346 deta = std::abs(etaCell - energyEta);
347 dphi = std::abs(phiCell - energyPhi);
348 if (dphi >
M_PI) dphi = 2. *
M_PI - dphi;
349
350 double cellSizeEta;
351 double cellSizePhi;
355 }
356 else {
359 }
360
361 nCellsEta = 3;
362 nCellsPhi = 7;
363 if ((deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01) &&
364 (dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01)) {
365
366 if (cluster_in_barrel) {
367 totalEnergy += energyCell;
368
369 samp = larcell->caloDDE()->getSampling();
370 rtrigEmCluster.
setEnergy(samp, rtrigEmCluster.
energy(samp) + energyCell);
372 }
373 }
374
375 nCellsEta = 5;
376 nCellsPhi = 5;
377 if ((!cluster_in_barrel) && (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01) &&
378 (dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01)) {
379 totalEnergy += energyCell;
380
381 samp = larcell->caloDDE()->getSampling();
382 rtrigEmCluster.
setEnergy(samp, rtrigEmCluster.
energy(samp) + energyCell);
384 }
385
386 }
387
388
389
390 if (energy35Lay2 > 0.) {
391 const double inv_energy35Lay2 = 1. / energy35Lay2;
392 clusterWidth35 = (weightEta2 * inv_energy35Lay2) -
393 (weightEta * inv_energy35Lay2) * (weightEta * inv_energy35Lay2);
394 clusterWidth35 > 0. ? clusterWidth35 = sqrt(clusterWidth35) : clusterWidth35 = 99.;
395 }
396 else {
397 clusterWidth35 = 99.;
398 }
399
400
401
402
403 rtrigEmCluster.
setE233(energy33Lay2);
404 rtrigEmCluster.
setE237(energy37Lay2);
405 rtrigEmCluster.
setE277(energy77Lay2);
406 rtrigEmCluster.
setWeta2(clusterWidth35);
408 rtrigEmCluster.
setEta(energyEta);
409 rtrigEmCluster.
setPhi(energyPhi);
413
414 return StatusCode::SUCCESS;
415}
#define ATH_CHECK
Evaluate an expression and check for errors.
virtual double phi() const override final
get phi (through CaloDetDescrElement)
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
virtual double eta() const override final
get eta (through CaloDetDescrElement)
bool is_lar_em_barrel() const
cell belongs to EM barrel
Gaudi::Property< float > m_maxHotCellDphi
double phiSizeLArEMSamp2(const double eta, const int calo) const
Gaudi::Property< float > m_maxHotCellDeta
double etaSizeLArEMSamp2(const double eta, const int calo) const
bool is_em_barrel(const Identifier id) const
test if the id belongs to the EM barrel
void setNCells(int)
set number of cells used from RoI
float rawEnergy() const
get Raw Energy (no calibration)
void setRawPhi(float)
set Raw Phi (no calibration)
void setRawEnergy(float)
set Raw Energy (no calibration)
void setRawEta(float)
set Raw Eta (no calibration)
void setPhi(float)
set Phi (calibrated)
void setEta(float)
set Eta (calibrated)
float eta() const
get Eta (calibrated)
void setWeta2(float)
set cluster width (based on a 3x5 cluster - 2nd layer)
void setEnergy(float energy)
set Energy (calibrated)
float phi() const
get Phi (calibrated)
void setE237(float)
set Energy in a 3x7 cluster (no calibration) around hottest cell
void setE277(float)
set Energy in a 7x7 cluster (no calibration) around hottest cell
float energy() const
get Energy (calibrated)
void setE233(float)
set Energy in a 3x3 cluster (no calibration) around hottest cell
int windows(float distance, float eta_pivot, int thr, int sector)