ATLAS Offline Software
Loading...
Searching...
No Matches
CaloSwDeadOTX_back Class Reference

#include <CaloSwDeadOTX_back.h>

Inheritance diagram for CaloSwDeadOTX_back:
Collaboration diagram for CaloSwDeadOTX_back:

Public Types

enum  {
  EMB1 = 0 , EMB2 = 1 , EME1 = 2 , EME2 = 3 ,
  COMBINED2 = 4 , CLUSTER = 5 , NREGIONS = 6
}
 Region codes for m_region below. More...

Public Member Functions

virtual void makeTheCorrection (const Context &muctx, xAOD::CaloCluster *cluster, const CaloDetDescrElement *elt, float eta, float adj_eta, float phi, float adj_phi, CaloSampling::CaloSample samp) const override
 Virtual function for the correction-specific code.
virtual StatusCode initialize () override
 CaloClusterCorrectionCommon (const std::string &type, const std::string &name, const IInterface *parent)
 Inherit constructor.
virtual void makeCorrection (const Context &myctx, xAOD::CaloCluster *cluster) const override
 Perform the correction.
virtual void setsample (xAOD::CaloCluster *cluster, CaloSampling::CaloSample sampling, float em, float etam, float phim, float emax, float etamax, float phimax, float etas, float phis) const
virtual void setenergy (xAOD::CaloCluster *cluster, float energy) const
StatusCode execute (const EventContext &ctx, xAOD::CaloCluster *cluster) const override
virtual StatusCode execute (const EventContext &ctx, xAOD::CaloClusterContainer *collection) const
 Execute on an entire collection of clusters.

Static Public Member Functions

static float energy_interpolation (float energy, const TableBuilder &builder, const CaloRec::Array< 1 > &energies, int energy_degree)
 Many of the corrections use the same method for doing the final interpolation in energy.

Public Attributes

 cls = CompFactory.CaloSwDeadOTX_back
list CaloSwDeadOTX_back_versions

Protected Attributes

SG::ReadCondHandleKey< CaloDetDescrManagerm_caloMgrKey {this,"CaloDetDescrManager", "CaloDetDescrManager"}

Private Member Functions

const CaloClusterCorr::DDHelperddhelper (const CaloDetDescrManager *dd_man) const
 Retrieve the detector description helper, creating it if needed.

Private Attributes

SG::ReadCondHandleKey< CaloAffectedRegionInfoVecm_affKey
ToolHandle< ICaloAffectedToolm_affectedTool {this, "AffectedTool", "CaloAffectedTool", "affected tool instance"}
Constant< CxxUtils::Array< 3 > > m_correction { this, "correction", "" }
Constant< CxxUtils::Array< 2 > > m_sampling_depth { this, "sampling_depth", ""}
Constant< float > m_eta_start_crack { this, "eta_start_crack",""}
Constant< float > m_eta_end_crack { this, "eta_end_crack", "" }
Constant< float > m_etamax { this, "etamax", "" }
Constant< bool > m_use_raw_eta { this, "use_raw_eta", "" }
Constant< int > m_region { this, "region", "Calorimeter region" }
 Calibration constant: The calorimeter region for which this correction is intended.
CxxUtils::CachedUniquePtr< const CaloClusterCorr::DDHelperm_ddhelper
 Helper for detector description lookup.

Detailed Description

Definition at line 20 of file CaloSwDeadOTX_back.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
inherited

Region codes for m_region below.

This is used to decide how to report the position of the cluster. Note: This numbering is also used in the job options files.

Enumerator
EMB1 
EMB2 
EME1 
EME2 
COMBINED2 
CLUSTER 
NREGIONS 

Definition at line 100 of file CaloClusterCorrectionCommon.h.

100 {
101 // Barrel, sampling 1.
102 EMB1 = 0,
103
104 // Barrel, sampling 2.
105 EMB2 = 1,
106
107 // Endcap, sampling 1.
108 EME1 = 2,
109
110 // Endcap, sampling 2.
111 EME2 = 3,
112
113 // Average of barrel and endcap in sampling 2.
114 COMBINED2 = 4,
115
116 // Overall cluster position.
117 CLUSTER = 5,
118
119 // Number of different region codes.
120 NREGIONS = 6
121 };

Member Function Documentation

◆ CaloClusterCorrectionCommon()

CaloClusterCorrectionCommon::CaloClusterCorrectionCommon ( const std::string & type,
const std::string & name,
const IInterface * parent )

Inherit constructor.

Definition at line 46 of file CaloClusterCorrectionCommon.cxx.

◆ ddhelper()

const CaloClusterCorr::DDHelper & CaloClusterCorrectionCommon::ddhelper ( const CaloDetDescrManager * dd_man) const
privateinherited

Retrieve the detector description helper, creating it if needed.

Definition at line 639 of file CaloClusterCorrectionCommon.cxx.

640{
641 const CaloClusterCorr::DDHelper* ddhelper = m_ddhelper.get();
642 if (!ddhelper) {
643 auto newhelper = std::make_unique<const CaloClusterCorr::DDHelper> (dd_man);
644 ddhelper = m_ddhelper.set (std::move (newhelper));
645 }
646 return *ddhelper;
647}
CxxUtils::CachedUniquePtr< const CaloClusterCorr::DDHelper > m_ddhelper
Helper for detector description lookup.
const CaloClusterCorr::DDHelper & ddhelper(const CaloDetDescrManager *dd_man) const
Retrieve the detector description helper, creating it if needed.

◆ energy_interpolation()

float CaloClusterCorrectionCommon::energy_interpolation ( float energy,
const TableBuilder & builder,
const CaloRec::Array< 1 > & energies,
int energy_degree )
staticinherited

Many of the corrections use the same method for doing the final interpolation in energy.

Perform energy interpolation.

We factor out this common code here. builder is used to construct the interpolation table; energy is the energy value for the interpolation. energies is the list of energies at which we have tabulated values, and energy_degree is the degree of the polynomial interpolation in energy.

Parameters
energyThe energy value for the interpolation.
builderHelper to construct the interpolation table.
energiesThe energy interpolation table.
energy_degreeThe polynomial interpolation degree for the energy interpolation.

Many of the corrections use the same method for doing the final interpolation in energy. We factor out this common code here.

Definition at line 574 of file CaloClusterCorrectionCommon.cxx.

580{
581 // Calculate the correction for each energy.
582 unsigned int n_energies = energies.size();
583 unsigned int shape[] = {n_energies, 2};
584 CaloRec::WritableArrayData<2> corrtab (shape);
585
586 // If we're outside the range of the table, we'll just be using the
587 // value at the end (no extrapolation). We only need to calculate
588 // that one point in that case.
589 unsigned int beg = 0;
590 unsigned int end = n_energies;
591 if (energy <= energies[0])
592 end = 1;
593 else if (energy >= energies[n_energies-1])
594 beg = n_energies-1;
595
596 // Build the table.
597 int n_good = 0;
598 for (unsigned int i=beg; i<end; i++)
599 docalc (i, builder, energies, corrtab, n_good);
600
601 // If we only evaluated one point, but it wasn't good, keep
602 // searching until we find a good one.
603 while (n_good == 0 && beg > 0) {
604 --beg;
605 docalc (beg, builder, energies, corrtab, n_good);
606 }
607 while (n_good == 0 && end < n_energies) {
608 docalc (end, builder, energies, corrtab, n_good);
609 ++end;
610 }
611
612 // Now interpolate in energy.
613 // But if we're outside of the range of the table, just use the value
614 // at the end (don't extrapolate).
615 if (n_good == 0) {
616 // No good energies --- return a null correction.
617 return 0;
618 }
619 else if (n_good == 1) {
620 // Only one good energy --- nothing to do but to use it.
621 return corrtab[0][1];
622 }
623 else if (energy <= corrtab[0][0]) {
624 // Off the low end of the table --- return the first value.
625 return corrtab[0][1];
626 }
627 else if (energy >= corrtab[n_good-1][0]) {
628 // Off the high end of the table --- return the last value.
629 return corrtab[n_good-1][1];
630 }
631
632 // Do the interpolation.
633 return interpolate (corrtab, energy, energy_degree,
634 1, CaloRec::Array<1>(), n_good);
635}
unsigned int size(unsigned int dim=0) const
Return the size of the array along one dimension.
float interpolate(const CaloRec::Array< 2 > &a, float x, unsigned int degree, unsigned int ycol=1, const CaloRec::Array< 1 > &regions=CaloRec::Array< 1 >(), int n_points=-1, bool fixZero=false)
Polynomial interpolation in a table.

◆ execute() [1/2]

StatusCode CaloClusterCorrection::execute ( const EventContext & ctx,
xAOD::CaloCluster * cluster ) const
overrideinherited

Definition at line 52 of file CaloClusterCorrection.cxx.

54{
55 this->makeCorrection (context(ctx), cluster);
56
57#if 0
58 ATH_MSG_DEBUG( " ...... e, et " << cluster->e() << " " << cluster->et() << endmsg);
59 ATH_MSG_DEBUG( " ...... eta, etaBE, etaSmp " << cluster->eta() << " " << cluster->etaBE(2)
60 << " " << cluster->etaSample(CaloSampling::EMB1)
61 << " " << cluster->etaSample(CaloSampling::EMB2)
62 << " " << cluster->etaSample(CaloSampling::EMB3) << endmsg);
63 ATH_MSG_DEBUG( " ...... phi, phiBE, phiSmp " << cluster->phi() << " " << cluster->phiBE(2)
64 << " " << cluster->phiSample(CaloSampling::EMB1)
65 << " " << cluster->phiSample(CaloSampling::EMB2)
66 << " " << cluster->phiSample(CaloSampling::EMB3) << endmsg);
67#endif
68
69 return StatusCode::SUCCESS;
70}
#define endmsg
#define ATH_MSG_DEBUG(x)
virtual void makeCorrection(const Context &myctx, xAOD::CaloCluster *) const =0
float phiBE(const unsigned layer) const
Get the phi in one layer of the EM Calo.
float phiSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
virtual double eta() const
The pseudorapidity ( ) of the particle.
virtual double e() const
The total energy of the particle.
virtual double phi() const
The azimuthal angle ( ) of the particle.
float etaSample(const CaloSample sampling) const
Retrieve barycenter in a given sample.
float etaBE(const unsigned layer) const
Get the eta in one layer of the EM Calo.

◆ execute() [2/2]

StatusCode CaloClusterProcessor::execute ( const EventContext & ctx,
xAOD::CaloClusterContainer * collection ) const
inherited

Execute on an entire collection of clusters.

Parameters
collectionThe container of clusters.

This will iterate over all the clusters in collection and call execute on each one individually.

Parameters
collectionThe container of clusters.
ctxThe event context.

This will iterate over all the clusters in collection and call execute on each one individually.

Definition at line 65 of file CaloClusterProcessor.cxx.

46{
47 for (xAOD::CaloCluster* clu : *collection) {
48 ATH_CHECK( execute (ctx, clu) );
49 }
50 return StatusCode::SUCCESS;
51}
#define ATH_CHECK
Evaluate an expression and check for errors.
StatusCode execute(const EventContext &ctx, xAOD::CaloCluster *cluster) const override
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.

◆ initialize()

StatusCode CaloSwDeadOTX_back::initialize ( )
overridevirtual

Reimplemented from CaloClusterCorrection.

Definition at line 29 of file CaloSwDeadOTX_back.cxx.

30{
32
33 // Need the explicit std::string here to avoid matching
34 // the template in AlgTool.
35 // CHECK( setProperty ("isDummy", std::string("1")) );
36
37 ATH_CHECK(m_affKey.initialize());
38
39 ATH_MSG_DEBUG( " --------------->>>>> CaloSwDeadOTX_back :: retrieving affectedTool" << endmsg);
40
41 if (m_affectedTool.retrieve().isFailure()){
42 ATH_MSG_DEBUG( " --------------->>>>> CaloSwDeadOTX_back :: failure retrieving affectedTool !! " << endmsg);
43 return StatusCode::FAILURE;
44 }
45
46 ATH_MSG_DEBUG( " --------------->>>>> CaloSwDeadOTX_back :: affectedTool successfully retrieved" << endmsg);
47
48 return StatusCode::SUCCESS;
49}
#define CHECK(...)
Evaluate an expression and check for errors.
virtual StatusCode initialize() override
StatusCode initialize(bool used=true)

◆ makeCorrection()

void CaloClusterCorrectionCommon::makeCorrection ( const Context & myctx,
xAOD::CaloCluster * cluster ) const
overridevirtualinherited

Perform the correction.

Called by the tool

Parameters
myctxToolWithConstants context.
clusterThe cluster to correct. It is updated in place.

Called by the tool.

Parameters
myctxToolWithConstants context.
clusterThe cluster to correct. It is updated in place.

Does the following:

  • Checks whether the cluster is present in the given calorimeter and sampling. If not, do nothing.
  • Computes quantities to pass to makeTheCorrection.
  • Calls makeTheCorrection.

Implements CaloClusterCorrection.

Definition at line 435 of file CaloClusterCorrectionCommon.cxx.

437{
438 int region = m_region (myctx);
439
440 SG::ReadCondHandle<CaloDetDescrManager> caloMgrHandle{m_caloMgrKey, myctx.ctx()};
441 const CaloDetDescrManager* dd_man = *caloMgrHandle;
442
443 // This causes a lot of overhead (mostly from the MsgStream ctor).
444 // Comment out when not needed.
445 //MsgStream log( msgSvc(), name() );
446 //log << MSG::DEBUG << "Entering makeCorrection" << endmsg;
447 //log << MSG::DEBUG << "e, eta, phi, etasize, phisize" << " " << cluster->e() << " " << cluster->eta() << " " << cluster->phi()
448 // << " " << cluster->etasize(CaloSampling::EMB2) << " " << cluster->phisize(CaloSampling::EMB2) << endmsg;
449 //log << MSG::DEBUG << "B / E " << cluster->inBarrel() << " " << cluster->inEndcap() << endmsg;
450 //log << MSG::DEBUG << "region " << region << endmsg;
451
452 float eta;
453 float phi;
454 CaloSampling::CaloSample samp = CaloSampling::Unknown;
455
456 // Find the proper @f$\eta@f$ and @f$\phi@f$ measures of the cluster.
457 // Also set up the sampling code @c samp.
458 switch (region) {
459 case EMB1:
460 case EMB2:
461 case EME1:
462 case EME2:
463 // Return immediately if we can tell we're in the wrong region.
464 if (barrel_p (region)) {
465 if (!cluster->inBarrel()) return;
466 }
467 else {
468 if (!cluster->inEndcap()) return;
469 }
470
471 switch (region) {
472 case EMB1:
473 samp = CaloSampling::EMB1;
474 break;
475 case EMB2:
476 samp = CaloSampling::EMB2;
477 break;
478 case EME1:
479 samp = CaloSampling::EME1;
480 break;
481 case EME2:
482 samp = CaloSampling::EME2;
483 break;
484 }
485
486 eta = cluster->etaSample (samp);
487 phi = cluster->phiSample (samp);
488 break;
489
490 case COMBINED2:
491 eta = cluster->etaBE (2);
492 phi = cluster->phiBE (2);
493 break;
494
495 case CLUSTER:
496 eta = cluster->eta();
497 phi = cluster->phi();
498 break;
499
500 default:
501 abort();
502 }
503
504 // Give up if one of them is an error flag.
505 if (std::abs (phi) > 900 || std::abs (eta) > 900)
506 return;
507
508 // Sometimes unnormalized @f$\phi@f$ values still come through.
509 // Make sure this is in the proper range before calling the correction.
511
512 // Look up the DD element.
513 // Give up if we can't find one.
514 const CaloDetDescrElement* elt = ddhelper(dd_man).find_dd_elt (dd_man,
515 region,
516 cluster,
517 eta, phi);
518 if (!elt)
519 return;
520
521 // Compute the adjusted eta and phi --- the coordinates shifted
522 // from the actual to the nominal coordinate system.
523 float adj_eta = eta - elt->eta() + elt->eta_raw();
524 float adj_phi = CaloPhiRange::fix (phi - elt->phi() + elt->phi_raw());
525
526 // Call the actual correction.
527 makeTheCorrection (myctx, cluster, elt, eta, adj_eta, phi, adj_phi, samp);
528}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
const CaloDetDescrElement * find_dd_elt(const CaloDetDescrManager *dd_mgr, int region, const xAOD::CaloCluster *cluster, float eta, float phi) const
Find the detector descriptor element for a given position, correcting for DD edge bugs.
virtual void makeTheCorrection(const Context &myctx, xAOD::CaloCluster *cluster, const CaloDetDescrElement *elt, float eta, float adj_eta, float phi, float adj_phi, CaloSampling::CaloSample samp) const =0
Virtual function for the correction-specific code.
Constant< int > m_region
Calibration constant: The calorimeter region for which this correction is intended.
SG::ReadCondHandleKey< CaloDetDescrManager > m_caloMgrKey
static double fix(double phi)
bool inBarrel() const
Returns true if at least one clustered cell in the barrel.
bool inEndcap() const
Returns true if at least one clustered cell in the endcap.

◆ makeTheCorrection()

void CaloSwDeadOTX_back::makeTheCorrection ( const Context & muctx,
xAOD::CaloCluster * cluster,
const CaloDetDescrElement * elt,
float eta,
float adj_eta,
float phi,
float adj_phi,
CaloSampling::CaloSample samp ) const
overridevirtual

Virtual function for the correction-specific code.

Parameters
myctxToolWithConstants context.
clusterThe cluster to correct. It is updated in place.
eltThe detector description element corresponding to the cluster location.
etaThe \(\eta\) coordinate of the cluster, in this sampling.
adj_etaThe \(\eta\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.)
phiThe \(\phi\) coordinate of the cluster, in this sampling.
adj_phiThe \(\phi\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.)
sampThe calorimeter sampling we're examining. This is a sampling code as defined by CaloSampling::CaloSample; i.e., it has both the calorimeter region and sampling encoded.

Implements CaloClusterCorrectionCommon.

Definition at line 51 of file CaloSwDeadOTX_back.cxx.

60{
61// ??? In principle, we should use adj_eta for the interpolation
62// and range checks. However, the v2 corrections were derived
63// using regular eta instead.
64//
65 //Get affected info for this event
66 SG::ReadCondHandle<CaloAffectedRegionInfoVec> affHdl{m_affKey, myctx.ctx()};
67 const CaloAffectedRegionInfoVec* affCont=*affHdl;
68 if(!affCont) {
69 ATH_MSG_WARNING("Do not have affected regions info, is this expected ?");
70 }
71
72 float the_aeta;
73 if (m_use_raw_eta(myctx))
74 the_aeta = std::abs (adj_eta);
75 else
76 the_aeta = std::abs (eta);
77
78 const float etamax = m_etamax (myctx);
79 if (the_aeta >= etamax) return;
80
81 int si;
82 if (the_aeta < m_eta_start_crack(myctx))
83 si = 0;
84 else if (the_aeta > m_eta_end_crack(myctx))
85 si = 1;
86 else {
87 // No corrections are applied for the crack region.
88 return;
89 }
90
91 const CxxUtils::Array<3> correction = m_correction (myctx);
92
93 ATH_MSG_DEBUG( "************************************************************************************************" << endmsg);
94 ATH_MSG_DEBUG( " USING CALIBHITS CALIBRATION : apply correction for dead OTX in the back" << endmsg);
95 ATH_MSG_DEBUG( " Tool Name " << name() << endmsg);
96 ATH_MSG_DEBUG( "************************************************************************************************" << endmsg);
97
98// -------------------------------------------------------------
99// check if the cluster is in an affected region
100// -------------------------------------------------------------
101
102 static const CaloSampling::CaloSample samps[2][4] = {
103 { CaloSampling::PreSamplerB,
104 CaloSampling::EMB1,
105 CaloSampling::EMB2,
106 CaloSampling::EMB3 },
107 { CaloSampling::PreSamplerE,
108 CaloSampling::EME1,
109 CaloSampling::EME2,
110 CaloSampling::EME3 }
111 };
112
113// Keep memory of the energy stored in the back
114
115 float eneBackold = cluster->eSample (samps[si][3]) ;
116
117// Set the safety margin around the dead region
118 float deta = 0.025;
119 float dphi = 0.025;
120
121 int layer = si * 4 + 3 ;
122 bool check = m_affectedTool->isAffected(cluster, affCont, deta , dphi ,layer,layer,0) ; // check dead OTX in barrel PS
123
124
125// if a cluster is in an affected region set the back energy to zero else return
126
127 if (check) {
128 ATH_MSG_DEBUG( "The cluster is in an affected region, apply corrections" << endmsg);
129 cluster->setEnergy (samps[si][3], 0 );
130 } else {
131 ATH_MSG_DEBUG( "The cluster is NOT in an affected region, skip correction" << endmsg);
132 return;
133 }
134
135// -------------------------------------------------------------
136// If the cluster is in an affected region load the corrections
137// -------------------------------------------------------------
138
139// Determine the eta bin for the correction
140 int ibin = (static_cast<int> (the_aeta / etamax * 100)) ;
141
142// Load the correction coefficients
143 CaloRec::Array<1> lleak = correction[0][ibin];
144
145// -------------------------------------------------------------
146// Compute longitudinal barycenter: this is a very old and approximate
147// parametrization that needs to be updated.
148// -------------------------------------------------------------
149
150 double raw_energy =0;
151 double shower_lbary_raw =0;
152 for (int nl = 0 ; nl< 4 ; nl++){
153 raw_energy += cluster->eSample (samps[si][nl]);
154 shower_lbary_raw += (m_sampling_depth(myctx)[ibin][nl+1] * cluster->eSample (samps[si][nl])) ;
155 }
156
157 if (raw_energy == 0) return;
158 double shower_lbary = shower_lbary_raw / raw_energy;
159
160 ATH_MSG_DEBUG( "Shower longitudinal barycenter ---->> " << shower_lbary << endmsg);
161
162 double depth_max = 20. + raw_energy*(3./TeV) ;
163
164 if ( shower_lbary > depth_max || shower_lbary < 0.) {
165 shower_lbary = 15.;
166 ATH_MSG_DEBUG( " replace pathological depth by 15 X0 "
167 << endmsg);
168 }
169
170
171 raw_energy = raw_energy * 1e-3;
172
173// -------------------------------------------------------------
174// Estimate the energy deposited in the back sampling and the
175// longitudinal leakage based on the longitudinal barycenter
176// -------------------------------------------------------------
177
178 double e_acc_reco = 0;
179 for (int nl = 1 ; nl< 4 ; nl++){
180 e_acc_reco += cluster->eSample (samps[si][nl]);
181 }
182
183 ATH_MSG_DEBUG( "Leakage : " << lleak[0] <<" " << lleak[1]
184 << " " << lleak[2] << " " << lleak[3] << endmsg);
185
186 double e_leak_perc = lleak[3] + lleak[1] * shower_lbary + lleak[2] * exp(shower_lbary);
187
188 ATH_MSG_DEBUG( "LongLeakage correction --> " << e_leak_perc << endmsg);
189
190 if (e_leak_perc < 0 ) e_leak_perc = 0.;
191 if (e_leak_perc > 100.) e_leak_perc = 100.;
192
193 double e_leak_reco = e_leak_perc * (e_acc_reco)*0.01;
194
195// If something goes wrong keep the old energy
196 if (e_leak_reco<0.) e_leak_reco= eneBackold;
197
198// -------------------------------------------------------------
199// Now set the energies of the cluster
200// -------------------------------------------------------------
201
202// set the energy of the presampler
203 cluster->setEnergy (samps[si][3], e_leak_reco );
204
205// take the cluster energy, subtract the old PS energy and add the new one
206
207 ATH_MSG_DEBUG( "CaloSwDeadOTX_back:: cluster energy before correction --> " << cluster->e() << endmsg);
208 ATH_MSG_DEBUG( "subtracting back energy -->> " << eneBackold << endmsg);
209 ATH_MSG_DEBUG( "adding new back energy -->> " << e_leak_reco << endmsg);
210
211 float e_temp = cluster->e() - eneBackold + e_leak_reco ;
212
213// set the energy of the cluster
214 cluster->setE (e_temp);
215
216 ATH_MSG_DEBUG( "CaloSwDeadOTX_back::Energy after correction --> " << cluster->e() << endmsg);
217
218}
#define ATH_MSG_WARNING(x)
std::vector< CaloAffectedRegionInfo > CaloAffectedRegionInfoVec
Constant< CxxUtils::Array< 2 > > m_correction
Calibration constant: tabulated arrays of function parameters.
static const double TeV
Constant< CxxUtils::Array< 2 > > m_sampling_depth
Constant< bool > m_use_raw_eta
Constant< float > m_etamax
ToolHandle< ICaloAffectedTool > m_affectedTool
Constant< float > m_eta_end_crack
Constant< float > m_eta_start_crack
float eSample(const CaloSample sampling) const
bool setEnergy(const CaloSample sampling, const float e)
Set energy for a given sampling. Returns false if the sample isn't part of the cluster.
@ layer
Definition HitInfo.h:79
correction(mu, runmode, campaign, run=None)
Definition zlumi_mc_cf.py:4

◆ setenergy()

void CaloClusterCorrection::setenergy ( xAOD::CaloCluster * cluster,
float energy ) const
virtualinherited

Definition at line 93 of file CaloClusterCorrection.cxx.

94{
95 if (cluster->e() == 0) {
96 if (energy != 0)
97 REPORT_MESSAGE (MSG::WARNING)
98 << "Attempt to rescale zero-energy cluster to energy " << energy
99 << " ignored.";
100 return;
101 }
102
103 float correction = energy/cluster->e();
104 cluster->setE(energy);
105
106 // also correct individual sampling energies:
107
108 for (int iSample=CaloSampling::PreSamplerB;
109 iSample < CaloSampling::Unknown;
110 ++iSample)
111 {
112 CaloSampling::CaloSample sampling=static_cast<CaloSampling::CaloSample>(iSample);
113 if (cluster->hasSampling (sampling)) {
114 double e = cluster->eSample(sampling);
115 cluster->setEnergy(sampling,e*correction) ;
116 }
117 }
118}
#define REPORT_MESSAGE(LVL)
Report a message.
bool hasSampling(const CaloSample s) const
Checks if certain smapling contributes to cluster.

◆ setsample()

void CaloClusterCorrection::setsample ( xAOD::CaloCluster * cluster,
CaloSampling::CaloSample sampling,
float em,
float etam,
float phim,
float emax,
float etamax,
float phimax,
float etas,
float phis ) const
virtualinherited

Definition at line 73 of file CaloClusterCorrection.cxx.

78{
79 cluster->setEnergy(sampling, em);
80 cluster->setEta(sampling, etam);
81 cluster->setPhi(sampling, phim);
82
83 cluster->setEmax(sampling,emax);
84 cluster->setEtamax(sampling,etamax);
85 cluster->setPhimax(sampling,phimax);
86
87 cluster->setEtasize(sampling, etas);
88 cluster->setPhisize(sampling, phis);
89}
bool setPhi(const CaloSample sampling, const float phi)
Set in a given sampling. Returns false if the sample isn't part of the cluster.
bool setEtasize(const CaloSample sampling, const float etaSize)
Set the cluster size in for a given sampling.
bool setPhisize(const CaloSample sampling, const float phiSize)
Set the cluster size in for a given sampling.
bool setPhimax(const CaloSample sampling, const float phiMax)
Set the phi of the cell with the highest energy in a particular sampling.
bool setEta(const CaloSample sampling, const float eta)
Set in a given sampling. Returns false if the sample isn't part of the cluster.
bool setEmax(const CaloSample sampling, const float eMax)
Set the Energy of the cell with the highest energy in a particular sampling.
bool setEtamax(const CaloSample sampling, const float etaMax)
Set the eta of the cell with the highest energy in a particular sampling.

Member Data Documentation

◆ CaloSwDeadOTX_back_versions

list CaloSwDeadOTX_back.CaloSwDeadOTX_back_versions
Initial value:
= [
#
['v1', cls, ['CaloSwDeadOTX_back_v1.' +
'CaloSwDeadOTX_back_v1_parms',
'caloswcorr_pool', CALOCORR_COOL,
],
['ele55', 'ele35', 'ele37',
'gam55_conv', 'gam35_conv', 'gam37_conv',
'gam55_unconv', 'gam35_unconv', 'gam37_unconv',
'ele33', 'ele57', 'ele77',
'gam33_conv', 'gam57_conv', 'gam77_conv',
'gam33_unconv', 'gam57_unconv', 'gam77_unconv'] ]
]

Definition at line 19 of file CaloSwDeadOTX_back.py.

◆ cls

CaloSwDeadOTX_back.cls = CompFactory.CaloSwDeadOTX_back

Definition at line 18 of file CaloSwDeadOTX_back.py.

◆ m_affectedTool

ToolHandle<ICaloAffectedTool> CaloSwDeadOTX_back::m_affectedTool {this, "AffectedTool", "CaloAffectedTool", "affected tool instance"}
private

Definition at line 63 of file CaloSwDeadOTX_back.h.

63{this, "AffectedTool", "CaloAffectedTool", "affected tool instance"};

◆ m_affKey

SG::ReadCondHandleKey<CaloAffectedRegionInfoVec> CaloSwDeadOTX_back::m_affKey
private
Initial value:
{this,
"LArAffectedRegionKey", "LArAffectedRegionInfo", "SG key for affected regions cond object"}

Definition at line 60 of file CaloSwDeadOTX_back.h.

60 {this,
61 "LArAffectedRegionKey", "LArAffectedRegionInfo", "SG key for affected regions cond object"};

◆ m_caloMgrKey

SG::ReadCondHandleKey<CaloDetDescrManager> CaloClusterCorrection::m_caloMgrKey {this,"CaloDetDescrManager", "CaloDetDescrManager"}
protectedinherited

Definition at line 83 of file CaloClusterCorrection.h.

83{this,"CaloDetDescrManager", "CaloDetDescrManager"};

◆ m_correction

Constant<CxxUtils::Array<3> > CaloSwDeadOTX_back::m_correction { this, "correction", "" }
private

Definition at line 65 of file CaloSwDeadOTX_back.h.

65{ this, "correction", "" };

◆ m_ddhelper

CxxUtils::CachedUniquePtr<const CaloClusterCorr::DDHelper> CaloClusterCorrectionCommon::m_ddhelper
privateinherited

Helper for detector description lookup.

Definition at line 165 of file CaloClusterCorrectionCommon.h.

◆ m_eta_end_crack

Constant<float> CaloSwDeadOTX_back::m_eta_end_crack { this, "eta_end_crack", "" }
private

Definition at line 68 of file CaloSwDeadOTX_back.h.

68{ this, "eta_end_crack", "" };

◆ m_eta_start_crack

Constant<float> CaloSwDeadOTX_back::m_eta_start_crack { this, "eta_start_crack",""}
private

Definition at line 67 of file CaloSwDeadOTX_back.h.

67{ this, "eta_start_crack",""};

◆ m_etamax

Constant<float> CaloSwDeadOTX_back::m_etamax { this, "etamax", "" }
private

Definition at line 69 of file CaloSwDeadOTX_back.h.

69{ this, "etamax", "" };

◆ m_region

Constant<int> CaloClusterCorrectionCommon::m_region { this, "region", "Calorimeter region" }
privateinherited

Calibration constant: The calorimeter region for which this correction is intended.

This should be one of the constants above. This affects the meaning of the eta and phi arguments passed to makeTheCorrection, as well as the samp argument.

Definition at line 161 of file CaloClusterCorrectionCommon.h.

162{ this, "region", "Calorimeter region" };

◆ m_sampling_depth

Constant<CxxUtils::Array<2> > CaloSwDeadOTX_back::m_sampling_depth { this, "sampling_depth", ""}
private

Definition at line 66 of file CaloSwDeadOTX_back.h.

66{ this, "sampling_depth", ""};

◆ m_use_raw_eta

Constant<bool> CaloSwDeadOTX_back::m_use_raw_eta { this, "use_raw_eta", "" }
private

Definition at line 70 of file CaloSwDeadOTX_back.h.

70{ this, "use_raw_eta", "" };

The documentation for this class was generated from the following files: