ATLAS Offline Software
Loading...
Searching...
No Matches
CaloSwPhimod.py
Go to the documentation of this file.
1# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
2
3#
4# File: CaloClusterCorrection/python/CaloSwPhimod.py
5# Created: Nov 2006, sss
6# Purpose: Steering module for phi modulation corrections.
7#
8# The response of the calorimeter varies slightly depending on the
9# position of the particle impact in phi relative to the accordion
10# absorber structure. This correction attempts to remove this variation.
11#
12# Note, however, that the inherent uncertainties in energy and phi
13# measurement --- including the phi smearing due to bremsstrahlung
14# and the 1/\sqrt{E} behavior of the energy resolution --- will tend
15# to smear this effect out, especially for lower energies. We can only
16# correct for the portion that's visible after the smearing.
17#
18# The correction is derived in the following way.
19# First the calorimeter is binned in eta, to separate regions of the
20# calorimeter that have different energy response behaviors.
21# In each of these bins, for each particle, we take the measured phi
22# position and convert it to an offset within the absorber structure,
23# phi_cell. (This is done by taking the modulus with respect to the phi size
24# of the absorbers, which is 2pi/1024 in the barrel and 2pi/768
25# in the endcap, corresponding to four and three absorbers per cell,
26# respectively.) If eta is negative, the sign of phi is flipped.
27# We then plot R = E_meas/E_true versus phi_cell.
28# This plot is binned in phi_cell. In each of these bins, we project
29# the R values to a 1-d histogram and fit a Gaussian. The range for
30# this fit is either 0.8 or 0.9 to 1.0, depending on the |eta| position.
31# Finally, the mean from this fit and its uncertainty are plotted versus
32# phi)cell to produce the phi-modulation plot.
33#
34# These plots are then fit with this functional form:
35#
36# 1 + A[alpha cos(N phi+C) + (1-alpha)cos(2N phi+D)],
37#
38# where alpha = atan B/pi + 1/2, and N is the total number of
39# absorbers in 2pi (either 1024 or 768, depending on |eta|).
40#
41
42
43from AthenaConfiguration.ComponentFactory import CompFactory
44from CaloClusterCorrection.constants import \
45 CALOCORR_COOL, CALOCORR_DEFAULT_KEY, CALOCORR_SW
46from CaloClusterCorrection.common import makecorr
47
48#
49# This table lists all available versions of this correction.
50# See common.py for a description of the contents.
51#
52from CaloClusterCorrection.constants import sw_valid_keys as keys
53cls_g3 = CompFactory.CaloSwPhimod_g3 # CaloClusterCorrection
54cls_v2 = CompFactory.CaloSwPhimod_v2 # CaloClusterCorrection
55CaloSwPhimod_versions = [
56
57 # The original G3-based correction, translated from the
58 # original fortran version.
59 ['g3', cls_g3, ['CaloSwPhimod_g3.CaloSwPhimod_g3_parms',
60 'caloswcorr_pool', CALOCORR_COOL], keys],
61
62 # DC2 simulation and 8.x.0 reconstruction.
63 # Electrons at 50, 100, and 200 GeV were used.
64 # Derived for 5x5 clusters only.
65 # This was added in LArClusterRec-02-05-25, in 9.0.3.
66 # This version runs before the gross energy corrections.
67 ['v2', cls_v2, ['CaloSwPhimod_v2.CaloSwPhimod_v2_parms',
68 'caloswcorr_pool', CALOCORR_COOL], keys],
69
70 # This is the same as v2, except that it runs after the
71 # gross energy corrections.
72 # It was added in CaloClusterCorrection-00-02-58, in 12.0.3.
73 ['v3', cls_v2, ['CaloSwPhimod_v2.CaloSwPhimod_v3_parms',
74 'caloswcorr_pool', CALOCORR_COOL], keys],
75
76 # This was derived using 12.0.3 simulation and reconstruction,
77 # for 5x5, 3x5, and 3x7 clusters, for both electrons and photons.
78 # It was added in CaloClusterCorrection-00-02-65, in 12.0.4.
79 ['v4', cls_v2, ['CaloSwPhimod_v4.CaloSwPhimod_v4_parms',
80 'caloswcorr_pool', CALOCORR_COOL], keys],
81
82 # Same as v4, but with the signs of the phase terms flipped in the barrel.
83 # This because the orientation of the accordions is backwards in the MC.
84 ['v4data', cls_v2, ['CaloSwPhimod_v4data.CaloSwPhimod_v4data_parms',
85 'caloswcorr_pool', CALOCORR_COOL], keys],
86 ]
87
88
89#
90# Create a new tool instance.
91# FLAGS is the configuration flags instance.
92# NAME is the base name for this tool. If defaulted, a name will
93# be constructed from the name of the correction, the version, and the key.
94# If SUFFIX is not None, it will be added onto the end of the tool name.
95# VERSION is a string specifying which of several versions of the correction
96# to choose. If defaulted, the latest version of the correction is chosen.
97# KEY is a string to specify the type of cluster to which the correction
98# applies. The convention is to use `ele55' for 5x5 electron clusters,
99# `gam35' for 3x5 photon clusters, and so on.
100# SOURCE tells from where we should read the calibration constants.
101# See common.py for a description of the possibilities.
102# None means to use the default.
103# CONFCLASS gives the Configurable class to use to create the tool.
104# It may (and usually should) be defaulted.
105#
106# Additional keyword arguments may be passed to override any tool
107# parameters/constants.
108#
110 name = None,
111 suffix = None,
112 version = None,
113 key = CALOCORR_DEFAULT_KEY,
114 source = None,
115 confclass = None,
116 **kw):
117 # Make the tool.
118 return makecorr (flags,
119 versions = CaloSwPhimod_versions,
120 name = name,
121 basename = 'phimod',
122 suffix = suffix,
123 version = version,
124 key = key,
125 sampling = None,
126 source = source,
127 confclass = confclass,
128 corrclass = CALOCORR_SW,
129 **kw)
130
make_CaloSwPhimod(flags, name=None, suffix=None, version=None, key=CALOCORR_DEFAULT_KEY, source=None, confclass=None, **kw)