CMS 3D CMS Logo

particleFlowClusterHBHE_cfi.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 from RecoParticleFlow.PFClusterProducer.particleFlowCaloResolution_cfi import _timeResolutionHCALMaxSample
3 
4 _thresholdsHB = cms.vdouble(0.8, 0.8, 0.8, 0.8)
5 _thresholdsHE = cms.vdouble(0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8)
6 _thresholdsHBphase1 = cms.vdouble(0.1, 0.2, 0.3, 0.3)
7 _thresholdsHEphase1 = cms.vdouble(0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2)
8 _seedingThresholdsHB = cms.vdouble(1.0, 1.0, 1.0, 1.0)
9 _seedingThresholdsHE = cms.vdouble(1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1)
10 _seedingThresholdsHBphase1 = cms.vdouble(0.125, 0.25, 0.35, 0.35)
11 _seedingThresholdsHEphase1 = cms.vdouble(0.1375, 0.275, 0.275, 0.275, 0.275, 0.275, 0.275)
12 #updated HB RecHit threshold for 2023
13 _thresholdsHBphase1_2023 = cms.vdouble(0.4, 0.3, 0.3, 0.3)
14 #updated HB seeding threshold for 2023
15 _seedingThresholdsHBphase1_2023 = cms.vdouble(0.6, 0.5, 0.5, 0.5)
16 
17 
18 
19 particleFlowClusterHBHE = cms.EDProducer(
20  "PFClusterProducer",
21  recHitsSource = cms.InputTag("particleFlowRecHitHBHE"),
22  usePFThresholdsFromDB = cms.bool(False),
23  recHitCleaners = cms.VPSet(),
24  seedCleaners = cms.VPSet(),
25  seedFinder = cms.PSet(
26  algoName = cms.string("LocalMaximumSeedFinder"),
27  thresholdsByDetector = cms.VPSet(
28  cms.PSet( detector = cms.string("HCAL_BARREL1"),
29  depths = cms.vint32(1, 2, 3, 4),
30  seedingThreshold = _seedingThresholdsHB,
31  seedingThresholdPt = cms.vdouble(0.0, 0.0, 0.0, 0.0)
32  ),
33  cms.PSet( detector = cms.string("HCAL_ENDCAP"),
34  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
35  seedingThreshold = _seedingThresholdsHE,
36  seedingThresholdPt = cms.vdouble(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
37  )
38  ),
39  nNeighbours = cms.int32(4),
40  ),
41  initialClusteringStep = cms.PSet(
42  algoName = cms.string("Basic2DGenericTopoClusterizer"),
43  thresholdsByDetector = cms.VPSet(
44  cms.PSet( detector = cms.string("HCAL_BARREL1"),
45  depths = cms.vint32(1, 2, 3, 4),
46  gatheringThreshold = _thresholdsHB,
47  gatheringThresholdPt = cms.vdouble(0.0, 0.0, 0.0, 0.0)
48  ),
49  cms.PSet( detector = cms.string("HCAL_ENDCAP"),
50  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
51  gatheringThreshold = _thresholdsHE,
52  gatheringThresholdPt = cms.vdouble(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
53  )
54  ),
55  useCornerCells = cms.bool(True)
56  ),
57 
58  pfClusterBuilder = cms.PSet(
59  algoName = cms.string("Basic2DGenericPFlowClusterizer"),
60  #pf clustering parameters
61  minFractionToKeep = cms.double(1e-7),
62  positionCalc = cms.PSet(
63  algoName = cms.string("Basic2DGenericPFlowPositionCalc"),
64  minFractionInCalc = cms.double(1e-9),
65  posCalcNCrystals = cms.int32(5),
66  logWeightDenominatorByDetector = cms.VPSet(
67  cms.PSet( detector = cms.string("HCAL_BARREL1"),
68  depths = cms.vint32(1, 2, 3, 4),
69  logWeightDenominator = _thresholdsHB,
70  ),
71  cms.PSet( detector = cms.string("HCAL_ENDCAP"),
72  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
73  logWeightDenominator = _thresholdsHE,
74  )
75  ),
76  minAllowedNormalization = cms.double(1e-9)
77  ),
78  allCellsPositionCalc =cms.PSet(
79  algoName = cms.string("Basic2DGenericPFlowPositionCalc"),
80  minFractionInCalc = cms.double(1e-9),
81  posCalcNCrystals = cms.int32(-1),
82  logWeightDenominatorByDetector = cms.VPSet(
83  cms.PSet( detector = cms.string("HCAL_BARREL1"),
84  depths = cms.vint32(1, 2, 3, 4),
85  logWeightDenominator = _thresholdsHB,
86  ),
87  cms.PSet( detector = cms.string("HCAL_ENDCAP"),
88  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
89  logWeightDenominator = _thresholdsHE,
90  )
91  ),
92  minAllowedNormalization = cms.double(1e-9)
93  ),
94 
95 
96  timeSigmaEB = cms.double(10.),
97  timeSigmaEE = cms.double(10.),
98  maxNSigmaTime = cms.double(10.),
99  minChi2Prob = cms.double(0.),
100  clusterTimeResFromSeed = cms.bool(False),
101  timeResolutionCalcBarrel = _timeResolutionHCALMaxSample,
102  timeResolutionCalcEndcap = _timeResolutionHCALMaxSample,
103  showerSigma = cms.double(10.0),
104  stoppingTolerance = cms.double(1e-8),
105  maxIterations = cms.uint32(50),
106  excludeOtherSeeds = cms.bool(True),
107  minFracTot = cms.double(1e-20),
108  recHitEnergyNorms = cms.VPSet(
109  cms.PSet( detector = cms.string("HCAL_BARREL1"),
110  depths = cms.vint32(1, 2, 3, 4),
111  recHitEnergyNorm = _thresholdsHB,
112  ),
113  cms.PSet( detector = cms.string("HCAL_ENDCAP"),
114  depths = cms.vint32(1, 2, 3, 4, 5, 6, 7),
115  recHitEnergyNorm = _thresholdsHE,
116  )
117  )
118  ),
119  positionReCalc = cms.PSet(),
120  energyCorrector = cms.PSet()
121 )
122 
123 
124 
125 # offline 2018 -- uncollapsed
126 from Configuration.Eras.Modifier_run2_HE_2018_cff import run2_HE_2018
127 from Configuration.ProcessModifiers.run2_HECollapse_2018_cff import run2_HECollapse_2018
128 (run2_HE_2018 & ~run2_HECollapse_2018).toModify(particleFlowClusterHBHE,
129  seedFinder = dict(thresholdsByDetector = {1 : dict(seedingThreshold = _seedingThresholdsHEphase1) } ),
130  initialClusteringStep = dict(thresholdsByDetector = {1 : dict(gatheringThreshold = _thresholdsHEphase1) } ),
131  pfClusterBuilder = dict(
132  recHitEnergyNorms = {1 : dict(recHitEnergyNorm = _thresholdsHEphase1) },
133  positionCalc = dict(logWeightDenominatorByDetector = {1 : dict(logWeightDenominator = _thresholdsHEphase1) } ),
134  allCellsPositionCalc = dict(logWeightDenominatorByDetector = {1 : dict(logWeightDenominator = _thresholdsHEphase1) } ),
135  ),
136 )
137 
138 # offline 2019
139 from Configuration.Eras.Modifier_run3_HB_cff import run3_HB
140 run3_HB.toModify(particleFlowClusterHBHE,
141  seedFinder = dict(thresholdsByDetector = {0 : dict(seedingThreshold = _seedingThresholdsHBphase1) } ),
142  initialClusteringStep = dict(thresholdsByDetector = {0 : dict(gatheringThreshold = _thresholdsHBphase1) } ),
143  pfClusterBuilder = dict(
144  recHitEnergyNorms = {0 : dict(recHitEnergyNorm = _thresholdsHBphase1) },
145  positionCalc = dict(logWeightDenominatorByDetector = {0 : dict(logWeightDenominator = _thresholdsHBphase1) } ),
146  allCellsPositionCalc = dict(logWeightDenominatorByDetector = {0 : dict(logWeightDenominator = _thresholdsHBphase1) } ),
147  ),
148 )
149 
150 # offline 2023
151 from Configuration.Eras.Modifier_run3_egamma_2023_cff import run3_egamma_2023
152 run3_egamma_2023.toModify(particleFlowClusterHBHE,
153  seedFinder = dict(thresholdsByDetector = {0 : dict(seedingThreshold = _seedingThresholdsHBphase1_2023) } ),
154  initialClusteringStep = dict(thresholdsByDetector = {0 : dict(gatheringThreshold = _thresholdsHBphase1_2023) } ),
155  pfClusterBuilder = dict(
156  recHitEnergyNorms = {0 : dict(recHitEnergyNorm = _thresholdsHBphase1_2023) },
157  positionCalc = dict(logWeightDenominatorByDetector = {0 : dict(logWeightDenominator = _thresholdsHBphase1_2023) } ),
158  allCellsPositionCalc = dict(logWeightDenominatorByDetector = {0 : dict(logWeightDenominator = _thresholdsHBphase1_2023) } ),
159  ),
160 )
161 
162 
163 # HCALonly WF
164 particleFlowClusterHBHEOnly = particleFlowClusterHBHE.clone(
165  recHitsSource = "particleFlowRecHitHBHEOnly"
166 )
167 
168 #--- Use DB conditions for cuts&seeds for Run3 and phase2
169 from Configuration.Eras.Modifier_hcalPfCutsFromDB_cff import hcalPfCutsFromDB
170 hcalPfCutsFromDB.toModify( particleFlowClusterHBHE,
171  usePFThresholdsFromDB = True)