◆ DDHelper() [1/2]
| CaloClusterCorr::DDHelper::DDHelper |
( |
| ) |
|
|
delete |
delte default Constructor
◆ DDHelper() [2/2]
Constructor with CaloDetDescManger as parameter.
Constructor.
- Parameters
-
| dd_man | The detector descriptor manager. |
Definition at line 139 of file CaloClusterCorrectionCommon.cxx.
140{
142}
void make_dummy_elts(const CaloDetDescrManager *dd_man)
Construct dummy DDEs used to work around innermost strip problem.
◆ dd_inner_strip_fixup()
Work around innermost strip problem.
- Parameters
-
| region | A region code, as defined in the header. |
| dd_man | Detector descriptor manager. |
| eta | The \(\eta\) coordinate to find. |
| phi | The \(\phi\) coordinate to find. |
| dummy_elts | Vector of dummy elements for the innermost strip. |
The innermost strip in sampling 1 in the barrel is disconnected. However, CaloDetDescr doesn't really know about that. If you ask for a cell in that region, it will instead return you a cell for some completely different calorimeter region! We call this in the case that we're unable to find a good det descr element. Here we check to see if we're actually asking for a location in this innermost strip. If so, then we cons up a new dummy element and return that.
Definition at line 306 of file CaloClusterCorrectionCommon.cxx.
310{
312 const CaloDetDescriptor*
descr =
315 if (!descr) return nullptr;
316 int ieta =
descr->eta_channel (
eta);
317 if (ieta == 0) {
318
319 int iphi =
descr->phi_channel (
phi);
320 if (iphi < 0) return nullptr;
321 unsigned int index = iphi;
325 return nullptr;
327 }
328 }
329
330 return nullptr;
331}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
std::vector< std::unique_ptr< const CaloDetDescrElement > > m_dummy_elts
Collection of dummy elements.
const CaloDetDescriptor * get_descriptor(const Identifier ®ionId) const
get descriptor by region identifier
◆ dd_try_gap()
Definition at line 335 of file CaloClusterCorrectionCommon.cxx.
340{
341 const CaloDetDescrElement* elt1 =
find_dd_elt1 (dd_man,region, cluster,
343 if (!elt1) return nullptr;
344 const CaloDetDescrElement* elt2 =
find_dd_elt1 (dd_man,region, cluster,
346 if (!elt2) return nullptr;
348 return elt2;
349 return elt1;
350}
static const CaloDetDescrElement * find_dd_elt1(const CaloDetDescrManager *dd_mgr, int region, const CaloCluster *cluster, float eta, float phi)
Find the detector descriptor element for a given position.
◆ find_dd_elt()
Find the detector descriptor element for a given position, correcting for DD edge bugs.
- Parameters
-
| region | A region code, as defined in the header. |
| cluster | The cluster being corrected. |
| eta | The \(\eta\) coordinate to find. |
| phi | The \(\phi\) coordinate to find. |
Looks up the DD element containing eta, phi in the region specified by region. Returns 0 if there's no such cell.
Sometimes when you look up a position near the edge of a cell, DD can erroneously return an adjacent cell. This routine attempts to work around this bug. After we get an element, we test to see if it in fact contains the position requested. If not, we shift the request by half a cell and try again.
Definition at line 164 of file CaloClusterCorrectionCommon.cxx.
169{
170 const CaloDetDescrElement* elt = nullptr;
171 float eta_offs = 0;
172 float phi_offs = 0;
175
176 while (good != 2) {
179
180 if (!elt) {
182 if (elt) return elt;
184 return elt;
185 }
186
187
188
189
190
191
192
193
194 if (++n >= 2)
195 return elt;
196
197 float deta = elt->
deta();
198 float dphi = elt->
dphi();
199
201
202 if (
eta > elt->
eta() + deta/2)
203 eta_offs += deta/2;
205 eta_offs -= deta/2;
206 else
208
209
210 if (
phi > elt->
phi() + dphi/2)
211 phi_offs += dphi/2;
213 phi_offs -= dphi/2;
214 else
216
217 if (good != 2 && n == 1) {
219 if (elt) break;
220 }
221 }
222
223 return elt;
224}
const CaloDetDescrElement * dd_inner_strip_fixup(const CaloDetDescrManager *dd_man, int region, float eta, float phi) const
Work around innermost strip problem.
static const CaloDetDescrElement * dd_try_gap(const CaloDetDescrManager *dd_man, int region, const CaloCluster *cluster, float eta, float phi)
float dphi() const
cell dphi
float eta() const
cell eta
float phi() const
cell phi
float deta() const
cell deta
static double fix(double phi)
◆ find_dd_elt1()
Find the detector descriptor element for a given position.
- Parameters
-
| region | A region code, as defined in the header. |
| cluster | The cluster being corrected. |
| eta | The \(\eta\) coordinate to find. |
| phi | The \(\phi\) coordinate to find. |
Looks up the DD element containing eta, phi in the region specified by region. Returns 0 if there's no such cell.
Definition at line 238 of file CaloClusterCorrectionCommon.cxx.
243{
244 const CaloDetDescrElement* elt = nullptr;
245
246
247 switch (region) {
252
255 break;
256
259
260
261
262
263 {
264 const CaloDetDescrElement* elt_b = dd_man->
get_element
266 const CaloDetDescrElement* elt_e = dd_man->
get_element
268
269 if (elt_b == nullptr)
270 elt = elt_e;
271 else if (elt_e == nullptr)
272 elt = elt_b;
273 else if (cluster->
eSample (CaloSampling::EMB2) >
274 cluster->
eSample (CaloSampling::EME2))
275 elt = elt_b;
276 else
277 elt = elt_e;
278 }
279 break;
280 default:
281 abort();
282 }
283
284 return elt;
285}
double eSample(sampling_type sampling) const
Retrieve energy in a given sampling.
const CaloDetDescrElement * get_element(const Identifier &cellId) const
get element by its identifier
◆ make_dummy_elts()
Construct dummy DDEs used to work around innermost strip problem.
Definition at line 356 of file CaloClusterCorrectionCommon.cxx.
357{
359 1, true, 0.05, 0);
360 if (descr) {
361 int nphi =
descr->n_phi();
363 for (int etasgn = 1; etasgn >= -1; etasgn -= 2) {
364 for (int iphi = 0; iphi < nphi; iphi++) {
365
366
367
369 Identifier cellId2 = cellid_mgr->
cell_id (
descr->identify(),
370 1, iphi);
371 IdentifierHash cellIdHash2 = cellid_mgr->
calo_cell_hash (cellId2);
372
373 if (cellid_mgr->
cell_id (cellIdHash2) != cellId2)
374 continue;
375 const CaloDetDescrElement* elt2 = dd_man->
get_element (cellIdHash2);
376 if (!elt2) continue;
377
378 auto elt = std::make_unique<DummyDetDescrElement>
379 (
descr->subcalo_hash(),
380 0,
381 0,
382 descr);
383
384
385 elt->set_cylindric_size (elt2->
deta(),
388 elt->set_cylindric (elt2->
eta() - etasgn * elt2->
deta(),
391 elt->set_cylindric_raw (elt2->
eta_raw() - etasgn * elt2->
deta(),
394
396 if (etasgn < 0)
index += nphi;
398 }
399 }
400 }
401}
IdentifierHash calo_cell_hash(const Identifier cellId) const
create hash id from 'global' cell id
Identifier cell_id(const int subCalo, const int barec_or_posneg, const int sampling_or_fcalmodule, const int region_or_dummy, const int eta, const int phi) const
Make a cell (== channel) ID from constituting fields and subCalo index; for (Mini)FCAL,...
float r_raw() const
cell r_raw
float eta_raw() const
cell eta_raw
float phi_raw() const
cell phi_raw
const CaloCell_ID * getCaloCell_ID() const
get calo cell ID helper
◆ m_dummy_elts
The documentation for this class was generated from the following file: