![]() |
ATLAS Offline Software
|
EM calorimeter \(\phi\) modulation corrections. More...
#include <CaloSwPhimod_v2.h>
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 &myctx, 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. | |
| 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 StatusCode | initialize () override |
| 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 | |
| list | CaloSw_sample_energies = [50*GeV, 100*GeV, 200*GeV] |
| list | phimod_v2_correction |
Protected Attributes | |
| SG::ReadCondHandleKey< CaloDetDescrManager > | m_caloMgrKey {this,"CaloDetDescrManager", "CaloDetDescrManager"} |
Private Member Functions | |
| const CaloClusterCorr::DDHelper & | ddhelper (const CaloDetDescrManager *dd_man) const |
| Retrieve the detector description helper, creating it if needed. | |
Private Attributes | |
| Constant< CxxUtils::Array< 3 > > | m_correction { this, "correction", "Tabulated arrays of function parameters." } |
| Calibration constant: tabulated arrays of function parameters. | |
| Constant< CxxUtils::Array< 1 > > | m_interp_barriers { this, "interp_barriers", "Allow breaking up the interpolation into independent regions." } |
| Calibration constant: allow breaking up the interpolation into independent regions. | |
| Constant< int > | m_degree { this, "degree", "Degree of the polynomial interpolation." } |
| Calibration constant: degree of the polynomial interpolation. | |
| Constant< float > | m_correction_coef { this, "correction_coef", "Coefficient by which to scale the entire correction." } |
| Calibration constant: coefficient by which to scale the entire correction. | |
| Constant< CxxUtils::Array< 2 > > | m_rfac { this, "rfac", "Correction factors for crude containment correction used internally for the energy interpolation." } |
| Constant< int > | m_rfac_degree { this, "rfac_degree", "Interpolation degree for crude containment correction used internally for the energy interpolation." } |
| Constant< CxxUtils::Array< 1 > > | m_energies { this, "energies", "Table of energies at which the correction was tabulated." } |
| Calibration constant: table of energies at which the correction was tabulated. | |
| Constant< int > | m_energy_degree { this, "energy_degree", "Degree of the polynomial interpolation in energy." } |
| Calibration constant: degree of the polynomial interpolation in energy. | |
| Constant< bool > | m_use_raw_eta { this, "use_raw_eta", "If true, tabulated values are in terms of raw (local) eta." } |
| Calibration constant: If true, tabulated values are in terms of raw (local) eta. | |
| Constant< int > | m_region { this, "region", "Calorimeter region" } |
| Calibration constant: The calorimeter region for which this correction is intended. | |
| CxxUtils::CachedUniquePtr< const CaloClusterCorr::DDHelper > | m_ddhelper |
| Helper for detector description lookup. | |
EM calorimeter \(\phi\) modulation corrections.
The energy response of the calorimeter varies slightly depending on the position of the particle impact in \(\phi\) relative to the accordion structure. We try to remove these modulations as best we can. This is a small correction (< 1%). We're further hampered in doing a good job by the fact that the wavelength of these modulations in \(\phi\) is on the order of a few mrad, which is similar to the \(\phi\) resolution. This leads to the modulations being washed out.
Nevertheless, we proceed by plotting the ratio \(E_{\rm meas}/E_{\rm true}\) vs. the \(\phi\) offset within an absorber, all binned in \(\eta\). (In order to get the modulations to show up, when making the profile plots, you need to plot the peaks from Gaussian fits to the distributions, not the means.) In each \(\eta\) bin, we then fit a 2-term Fourier series, parametrized like this:
\[ 1 + A\left[\alpha\cos(N\phi+C) + (1-\alpha)\cos(2N\phi+D)\right], \]
where \(\alpha = \tan^{-1} B/\pi + 1/2\) and \(N\) is the total number of absorbers in \(2\pi\) (either 1024 or 768).
The correction is tabulated at several different energies; we then do a final interpolation in energy to find the final correction. (Note, however, that the observed energy dependence seems to come mainly from the energy dependence of the \(\phi\) resolution. It would be better to separate out this effect in a future version.)
These corrections are presently done before the gross energy corrections, done later. But in order to get decent results out of the energy interpolation done here, we need to get a better estimate of the energy. So we have a crude response correction built-in here, which is used to correct the cluster energy for the purpose of energy interpolation. (This can hopefully be removed in a future version which does the corrections in a more logical order.)
Definition at line 88 of file CaloSwPhimod_v2.h.
|
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.
| CaloClusterCorrectionCommon::CaloClusterCorrectionCommon | ( | const std::string & | type, |
| const std::string & | name, | ||
| const IInterface * | parent ) |
|
privateinherited |
Retrieve the detector description helper, creating it if needed.
Definition at line 639 of file CaloClusterCorrectionCommon.cxx.
|
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.
| energy | The energy value for the interpolation. |
| builder | Helper to construct the interpolation table. |
| energies | The energy interpolation table. |
| energy_degree | The 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.
|
overrideinherited |
Definition at line 52 of file CaloClusterCorrection.cxx.
|
inherited |
Execute on an entire collection of clusters.
| collection | The container of clusters. |
This will iterate over all the clusters in collection and call execute on each one individually.
| collection | The container of clusters. |
| ctx | The 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.
|
overridevirtualinherited |
Reimplemented in CaloClusterBadChannelList, CaloDummyCorrection, CaloFillRectangularCluster, CaloSwDeadOTX_back, CaloSwDeadOTX_ps, CaloSwGap_g3, CaloSwGap_v2, CaloSwGap_v3, CaloTopoEMGap, and CaloTopoEMlayers.
Definition at line 46 of file CaloClusterCorrection.cxx.
|
overridevirtualinherited |
Perform the correction.
Called by the tool
| myctx | ToolWithConstants context. |
| cluster | The cluster to correct. It is updated in place. |
Called by the tool.
| myctx | ToolWithConstants context. |
| cluster | The cluster to correct. It is updated in place. |
Does the following:
makeTheCorrection.makeTheCorrection. Implements CaloClusterCorrection.
Definition at line 435 of file CaloClusterCorrectionCommon.cxx.
|
overridevirtual |
Virtual function for the correction-specific code.
| myctx | ToolWithConstants context. |
| cluster | The cluster to correct. It is updated in place. |
| elt | The detector description element corresponding to the cluster location. |
| eta | The \(\eta\) coordinate of the cluster, in this sampling. |
| adj_eta | The \(\eta\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.) |
| phi | The \(\phi\) coordinate of the cluster, in this sampling. |
| adj_phi | The \(\phi\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.) |
| samp | The 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. |
| ctx | The event context. |
| cluster | The cluster to correct. It is updated in place. |
| elt | The detector description element corresponding to the cluster location. |
| eta | The \(\eta\) coordinate of the cluster, in this sampling. |
| adj_eta | The \(\eta\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.) |
| phi | The \(\phi\) coordinate of the cluster, in this sampling. |
| adj_phi | The \(\phi\) adjusted for any shift between the actual and nominal coordinates. (This is shifted back to the nominal coordinate system.) |
| samp | The 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 69 of file CaloSwPhimod_v2.cxx.
|
virtualinherited |
Definition at line 93 of file CaloClusterCorrection.cxx.
|
virtualinherited |
Definition at line 73 of file CaloClusterCorrection.cxx.
Definition at line 32 of file CaloSwPhimod_v2.py.
|
protectedinherited |
Definition at line 83 of file CaloClusterCorrection.h.
|
private |
Calibration constant: tabulated arrays of function parameters.
Definition at line 172 of file CaloSwPhimod_v2.h.
|
private |
Calibration constant: coefficient by which to scale the entire correction.
Definition at line 186 of file CaloSwPhimod_v2.h.
|
privateinherited |
Helper for detector description lookup.
Definition at line 165 of file CaloClusterCorrectionCommon.h.
|
private |
Calibration constant: degree of the polynomial interpolation.
Definition at line 181 of file CaloSwPhimod_v2.h.
|
private |
Calibration constant: table of energies at which the correction was tabulated.
Definition at line 201 of file CaloSwPhimod_v2.h.
|
private |
Calibration constant: degree of the polynomial interpolation in energy.
Definition at line 205 of file CaloSwPhimod_v2.h.
|
private |
Calibration constant: allow breaking up the interpolation into independent regions.
Definition at line 177 of file CaloSwPhimod_v2.h.
|
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.
|
private |
Definition at line 191 of file CaloSwPhimod_v2.h.
|
private |
Definition at line 196 of file CaloSwPhimod_v2.h.
|
private |
Calibration constant: If true, tabulated values are in terms of raw (local) eta.
Definition at line 210 of file CaloSwPhimod_v2.h.
| list CaloSwPhimod_v2.phimod_v2_correction |
Definition at line 35 of file CaloSwPhimod_v2.py.