◆ 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 140 of file CaloClusterCorrectionCommon.cxx.
141{
143}
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 307 of file CaloClusterCorrectionCommon.cxx.
311{
313 const CaloDetDescriptor*
descr =
316 if (!descr) return nullptr;
317 int ieta =
descr->eta_channel (
eta);
318 if (ieta == 0) {
319
320 int iphi =
descr->phi_channel (
phi);
321 if (iphi < 0) return nullptr;
322 unsigned int index = iphi;
326 return nullptr;
328 }
329 }
330
331 return nullptr;
332}
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 336 of file CaloClusterCorrectionCommon.cxx.
341{
342 const CaloDetDescrElement* elt1 =
find_dd_elt1 (dd_man,region, cluster,
344 if (!elt1) return nullptr;
345 const CaloDetDescrElement* elt2 =
find_dd_elt1 (dd_man,region, cluster,
347 if (!elt2) return nullptr;
349 return elt2;
350 return elt1;
351}
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 165 of file CaloClusterCorrectionCommon.cxx.
170{
171 const CaloDetDescrElement* elt = nullptr;
172 float eta_offs = 0;
173 float phi_offs = 0;
176
177 while (good != 2) {
180
181 if (!elt) {
183 if (elt) return elt;
185 return elt;
186 }
187
188
189
190
191
192
193
194
195 if (++n >= 2)
196 return elt;
197
198 float deta = elt->
deta();
199 float dphi = elt->
dphi();
200
202
203 if (
eta > elt->
eta() + deta/2)
204 eta_offs += deta/2;
206 eta_offs -= deta/2;
207 else
209
210
211 if (
phi > elt->
phi() + dphi/2)
212 phi_offs += dphi/2;
214 phi_offs -= dphi/2;
215 else
217
218 if (good != 2 && n == 1) {
220 if (elt) break;
221 }
222 }
223
224 return elt;
225}
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 239 of file CaloClusterCorrectionCommon.cxx.
244{
245 const CaloDetDescrElement* elt = nullptr;
246
247
248 switch (region) {
253
256 break;
257
260
261
262
263
264 {
265 const CaloDetDescrElement* elt_b = dd_man->
get_element
267 const CaloDetDescrElement* elt_e = dd_man->
get_element
269
270 if (elt_b == nullptr)
271 elt = elt_e;
272 else if (elt_e == nullptr)
273 elt = elt_b;
274 else if (cluster->
eSample (CaloSampling::EMB2) >
275 cluster->
eSample (CaloSampling::EME2))
276 elt = elt_b;
277 else
278 elt = elt_e;
279 }
280 break;
281 default:
282 abort();
283 }
284
285 return elt;
286}
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 357 of file CaloClusterCorrectionCommon.cxx.
358{
360 1, true, 0.05, 0);
361 if (descr) {
362 int nphi =
descr->n_phi();
364 for (int etasgn = 1; etasgn >= -1; etasgn -= 2) {
365 for (int iphi = 0; iphi < nphi; iphi++) {
366
367
368
370 Identifier cellId2 = cellid_mgr->
cell_id (
descr->identify(),
371 1, iphi);
372 IdentifierHash cellIdHash2 = cellid_mgr->
calo_cell_hash (cellId2);
373
374 if (cellid_mgr->
cell_id (cellIdHash2) != cellId2)
375 continue;
376 const CaloDetDescrElement* elt2 = dd_man->
get_element (cellIdHash2);
377 if (!elt2) continue;
378
379 auto elt = std::make_unique<DummyDetDescrElement>
380 (
descr->subcalo_hash(),
381 0,
382 0,
383 descr);
384
385
386 elt->set_cylindric_size (elt2->
deta(),
389 elt->set_cylindric (elt2->
eta() - etasgn * elt2->
deta(),
392 elt->set_cylindric_raw (elt2->
eta_raw() - etasgn * elt2->
deta(),
395
397 if (etasgn < 0)
index += nphi;
399 }
400 }
401 }
402}
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
| std::vector<std::unique_ptr<const CaloDetDescrElement> > CaloClusterCorr::DDHelper::m_dummy_elts |
|
private |
The documentation for this class was generated from the following file: