ATLAS Offline Software
CaloTopoEMLongWeights.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /********************************************************************
6 
7 NAME: CaloTopoEMLongWeights.cxx
8 PACKAGE: offline/Calorimter/CaloSwLongWeights
9 
10 AUTHORS: N. Kerschen
11 CREATED: Nov 8, 2006
12 
13 PURPOSE: Longitudinal weights for topoEM cluster (thresholds:633)
14 
15 ********************************************************************/
16 #include "CaloTopoEMLongWeights.h"
18 
19 
20 using xAOD::CaloCluster;
22 
23 
45  (const Context& myctx,
46  CaloCluster* cluster,
47  const CaloDetDescrElement* /*elt*/,
48  float eta,
49  float adj_eta,
50  float /*phi*/,
51  float /*adj_phi*/,
52  CaloSampling::CaloSample /*samp*/) const
53 {
54  // ??? In principle, we should use adj_eta for the interpolation
55  // and range checks. However, the v2 corrections were derived
56  // using regular eta instead.
57  float the_aeta;
58  if (m_use_raw_eta(myctx))
59  the_aeta = std::abs (adj_eta);
60  else
61  the_aeta = std::abs (eta);
62 
63  const float etamax = m_etamax (myctx);
64  if (the_aeta >= etamax) return;
65 
66  const float eta_start_crack = m_eta_start_crack (myctx);
67  const float eta_end_crack = m_eta_end_crack (myctx);
68 
69  int si;
70  if (the_aeta < eta_start_crack)
71  si = 0;
72  else if (the_aeta > eta_end_crack)
73  si = 1;
74  else {
75  // No corrections are applied for the crack region.
76  return;
77  }
78 
80 
81  unsigned int shape[] = {2};
82  CaloRec::WritableArrayData<1> interp_barriers (shape);
83  interp_barriers[0] = eta_start_crack;
84  interp_barriers[1] = eta_end_crack;
85 
86  float pars[6];
87  int ibin = static_cast<int> (the_aeta / etamax * correction.size());
88  pars[0] = correction[ibin][1];
89  pars[1] = correction[ibin][2];
90  pars[2] = correction[ibin][3];
91  pars[3] = correction[ibin][4];
92  pars[4] = correction[ibin][5];
93  pars[5] = correction[ibin][6];
94 
95  // for (int i=0; i<6; i++)
96  // pars[i] = interpolate (correction,
97  // the_aeta,
98  // degree,
99  // i+1,
100  // interp_barriers);
101 
102  static const
103  CaloSampling::CaloSample samps[2][4] = {
112  };
113 
114  float b = 0;
115  if (pars[0] != 0) {
116  float a = cluster->e()*exp(-pars[4])/pars[0];
117  if (a>1) b = pars[0]*log(a) + pars[0];
118  }
119 
120  cluster->setEnergy (samps[si][0], cluster->eSample (samps[si][0]) * pars[1]);
121  cluster->setEnergy (samps[si][3], cluster->eSample (samps[si][3]) * pars[2]);
122 
123  double total = 0;
124  for (int sampling=0; sampling<4; ++sampling)
125  total += cluster->eSample (samps[si][sampling]);
126 
127  cluster->setE (pars[3] * (b + pars[5] + total));
128 }
129 
130 
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
CaloCluster::eSample
double eSample(sampling_type sampling) const
Retrieve energy in a given sampling.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:975
CaloTopoEMLongWeights::m_correction
Constant< CxxUtils::Array< 2 > > m_correction
Definition: CaloTopoEMLongWeights.h:73
constants.EMB1
int EMB1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:53
CaloTopoEMLongWeights::makeTheCorrection
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
Virtual function for the correction-specific code.
Definition: CaloTopoEMLongWeights.cxx:45
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
CaloDetDescrElement
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
Definition: Calorimeter/CaloDetDescr/CaloDetDescr/CaloDetDescrElement.h:66
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
xAOD::CaloCluster
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
Definition: Event/xAOD/xAODCaloEvent/xAODCaloEvent/CaloCluster.h:19
tools.zlumi_mc_cf.correction
def correction(mu, runmode, campaign, run=None)
Definition: zlumi_mc_cf.py:4
constants.EMB2
int EMB2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:54
CaloSampling::CaloSample
CaloSample
Definition: Calorimeter/CaloGeoHelpers/CaloGeoHelpers/CaloSampling.h:22
CxxUtils::Array< 2 >
constants.EME1
int EME1
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:55
CxxUtils::WritableArrayData
Definition: Control/CxxUtils/CxxUtils/Array.h:778
CaloCluster
Principal data class for CaloCell clusters.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:79
CaloTopoEMLongWeights::m_eta_end_crack
Constant< float > m_eta_end_crack
Definition: CaloTopoEMLongWeights.h:75
CaloCell_ID_FCS::EME3
@ EME3
Definition: FastCaloSim_CaloCell_ID.h:26
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
CaloCluster::setE
virtual void setE(double e)
Set energy.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:767
a
TList * a
Definition: liststreamerinfos.cxx:10
CaloTopoEMLongWeights::m_eta_start_crack
Constant< float > m_eta_start_crack
Definition: CaloTopoEMLongWeights.h:74
CaloCell_ID_FCS::PreSamplerE
@ PreSamplerE
Definition: FastCaloSim_CaloCell_ID.h:23
CaloCell_ID_FCS::PreSamplerB
@ PreSamplerB
Definition: FastCaloSim_CaloCell_ID.h:19
CaloClusterCorr::interpolate
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.
Definition: interpolate.cxx:75
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
CaloCluster::e
virtual double e() const
Retrieve energy independent of signal state.
Definition: Calorimeter/CaloEvent/CaloEvent/CaloCluster.h:753
CaloUtils::ToolConstantsContext
Context object for retrieving ToolConstant values.
Definition: ToolWithConstants.h:61
CaloTopoEMLongWeights::m_use_raw_eta
Constant< bool > m_use_raw_eta
Definition: CaloTopoEMLongWeights.h:78
CaloTopoEMLongWeights::m_etamax
Constant< float > m_etamax
Definition: CaloTopoEMLongWeights.h:76
interpolate.h
Polynomial interpolation in a table.
CaloCell_ID_FCS::EMB3
@ EMB3
Definition: FastCaloSim_CaloCell_ID.h:22
constants.EME2
int EME2
Definition: Calorimeter/CaloClusterCorrection/python/constants.py:56
CaloTopoEMLongWeights.h