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 if (cluster_in_barrel) {
252 samp = larcell->caloDDE()->getSampling();
253 }
254
255 if (phiCell > 0.) {
256 energyPosPhi +=
double(energyCell) * phiCell;
257 energy37Lay2PosPhi += energyCell;
258 }
259 else {
260 energyNegPhi +=
double(energyCell) * phiCell;
261 energyNegPhiConv +=
double(energyCell) * (phiCell + 2.0 *
M_PI);
262 energy37Lay2NegPhi += energyCell;
263 }
264
265 nCellsEta = 3;
266 nCellsPhi = 5;
267 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
268 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
269 weightEta += energyCell * etaCell;
270 weightEta2 += energyCell * etaCell * etaCell;
271 energy35Lay2 += energyCell;
272
273
274 nCellsPhi = 3;
275 if (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01 &&
276 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01) {
277 energy33Lay2 += energyCell;
278 }
279 }
280
281 }
282
283 nCellsEta = 5;
284 nCellsPhi = 5;
285 if ((!cluster_in_barrel) && deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.005 &&
286 dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.005) {
287 samp = larcell->caloDDE()->getSampling();
288 }
289 }
290
291 }
292
293
294
295 if ((energy37Lay2PosPhi + energy37Lay2NegPhi) > 0.) {
296
297 double AvgNegPhi = 0.;
298 double AvgPosPhi = 0.;
299
300 energyEta /= (energy37Lay2PosPhi + energy37Lay2NegPhi);
301
302 if (energy37Lay2NegPhi > 0.) {
303 AvgNegPhi = energyNegPhi / energy37Lay2NegPhi;
304 }
305 else {
306 AvgNegPhi = -999.0;
307 }
308
309 if (energy37Lay2PosPhi > 0.) {
310 AvgPosPhi = energyPosPhi / energy37Lay2PosPhi;
311 }
312 else {
313 AvgPosPhi = -999.0;
314 }
315
316 if (AvgPosPhi == -999.0) {
317 if (AvgNegPhi != -999.0) {
318 energyPhi = AvgNegPhi;
319 }
320 }
321
322 if (AvgNegPhi == -999.0) {
323 if (AvgPosPhi != -999.0) {
324 energyPhi = AvgPosPhi;
325 }
326 }
327
328 if (AvgNegPhi != -999.0 && AvgPosPhi != -999.0) {
329 if ((AvgNegPhi > (-
M_PI / 2.0)) && (AvgPosPhi < (
M_PI / 2.0))) {
330 energyPhi = (energyNegPhi + energyPosPhi) / (energy37Lay2NegPhi + energy37Lay2PosPhi);
331 }
332 else {
333 if ((AvgNegPhi < (-
M_PI / 2.0)) && (AvgPosPhi > (
M_PI / 2.0))) {
334 energyPhi = (energyNegPhiConv + energyPosPhi) / (energy37Lay2NegPhi + energy37Lay2PosPhi);
335 if (energyPhi >
M_PI) {
336 energyPhi = energyPhi - 2 *
M_PI;
337 }
338 }
339 }
340 }
341 }
342 else {
343 energyEta = 99.;
344 energyPhi = 0.;
345 }
346
347 for (
const LArCell* larcell :
sel) {
348 double etaCell = larcell->eta();
349 double phiCell = larcell->phi();
350 double energyCell = larcell->energy();
351
352
353 deta = std::abs(etaCell - energyEta);
354 dphi = std::abs(phiCell - energyPhi);
355 if (dphi >
M_PI) dphi = 2. *
M_PI - dphi;
356
357 double cellSizeEta;
358 double cellSizePhi;
362 }
363 else {
366 }
367
368 nCellsEta = 3;
369 nCellsPhi = 7;
370 if ((deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01) &&
371 (dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01)) {
372
373 if (cluster_in_barrel) {
374 totalEnergy += energyCell;
375
376 samp = larcell->caloDDE()->getSampling();
377 rtrigEmCluster.
setEnergy(samp, rtrigEmCluster.
energy(samp) + energyCell);
379 }
380 }
381
382 nCellsEta = 5;
383 nCellsPhi = 5;
384 if ((!cluster_in_barrel) && (deta <= 0.5 * double(nCellsEta - 1) * cellSizeEta + 0.01) &&
385 (dphi <= 0.5 * double(nCellsPhi - 1) * cellSizePhi + 0.01)) {
386 totalEnergy += energyCell;
387
388 samp = larcell->caloDDE()->getSampling();
389 rtrigEmCluster.
setEnergy(samp, rtrigEmCluster.
energy(samp) + energyCell);
391 }
392
393 }
394
395
396
397 if (energy35Lay2 > 0.) {
398 const double inv_energy35Lay2 = 1. / energy35Lay2;
399 clusterWidth35 = (weightEta2 * inv_energy35Lay2) -
400 (weightEta * inv_energy35Lay2) * (weightEta * inv_energy35Lay2);
401 clusterWidth35 > 0. ? clusterWidth35 = sqrt(clusterWidth35) : clusterWidth35 = 99.;
402 }
403 else {
404 clusterWidth35 = 99.;
405 }
406
407
408
409
410 rtrigEmCluster.
setE233(energy33Lay2);
411 rtrigEmCluster.
setE237(energy37Lay2);
412 rtrigEmCluster.
setE277(energy77Lay2);
413 rtrigEmCluster.
setWeta2(clusterWidth35);
415 rtrigEmCluster.
setEta(energyEta);
416 rtrigEmCluster.
setPhi(energyPhi);
420
421 return StatusCode::SUCCESS;
422}
#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)