PF HLT in Alpaka.
8 '''Customization to introduce Particle Flow Reconstruction in Alpaka 11 if not hasattr(process,
'hltParticleFlowClusterHBHE'):
17 process.hltESSPFRecHitHCALParamsRecord = cms.ESSource(
'EmptyESSource',
18 recordName = cms.string(
'PFRecHitHCALParamsRecord'),
19 iovIsRunNotTime = cms.bool(
True),
20 firstValid = cms.vuint32(1)
23 process.hltESSPFRecHitHCALTopologyRecord = cms.ESSource(
'EmptyESSource',
24 recordName = cms.string(
'PFRecHitHCALTopologyRecord'),
25 iovIsRunNotTime = cms.bool(
True),
26 firstValid = cms.vuint32(1)
29 process.hltESSJobConfigurationGPURecord = cms.ESSource(
'EmptyESSource',
30 recordName = cms.string(
'JobConfigurationGPURecord'),
31 iovIsRunNotTime = cms.bool(
True),
32 firstValid = cms.vuint32(1)
35 process.hltHbheRecHitSoA = cms.EDProducer(
"HCALRecHitSoAProducer@alpaka",
36 src = cms.InputTag(
"hltHbhereco"),
37 synchronise = cms.untracked.bool(
False),
39 alpaka = cms.untracked.PSet(
40 backend = cms.untracked.string(
'')
44 process.hltESPPFRecHitHCALTopology = cms.ESProducer(
'PFRecHitHCALTopologyESProducer@alpaka',
45 usePFThresholdsFromDB = cms.bool(
True),
46 appendToDataLabel = cms.string(
''),
48 alpaka = cms.untracked.PSet(
49 backend = cms.untracked.string(
'')
53 process.hltESPPFRecHitHCALParams = cms.ESProducer(
'PFRecHitHCALParamsESProducer@alpaka',
54 energyThresholdsHB = cms.vdouble(0.1, 0.2, 0.3, 0.3),
55 energyThresholdsHE = cms.vdouble(0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2),
56 appendToDataLabel = cms.string(
''),
58 alpaka = cms.untracked.PSet(
59 backend = cms.untracked.string(
'')
63 process.hltParticleFlowRecHitHBHESoA = cms.EDProducer(
"PFRecHitSoAProducerHCAL@alpaka",
64 producers = cms.VPSet(
66 src = cms.InputTag(
"hltHbheRecHitSoA"),
67 params = cms.ESInputTag(
"hltESPPFRecHitHCALParams:"),
70 topology = cms.ESInputTag(
"hltESPPFRecHitHCALTopology:"),
71 synchronise = cms.untracked.bool(
False),
73 alpaka = cms.untracked.PSet(
74 backend = cms.untracked.string(
'')
78 process.hltParticleFlowRecHitHBHE = cms.EDProducer(
"LegacyPFRecHitProducer",
79 src = cms.InputTag(
"hltParticleFlowRecHitHBHESoA")
82 process.hltESPPFClusterParams = cms.ESProducer(
"PFClusterParamsESProducer@alpaka",
83 seedFinder = cms.PSet(
84 nNeighbours = cms.int32(4),
85 thresholdsByDetector = cms.VPSet(
87 detector = cms.string(
'HCAL_BARREL1'),
88 seedingThreshold = cms.vdouble(0.125, 0.25, 0.35, 0.35),
89 seedingThresholdPt = cms.double(0)
92 detector = cms.string(
'HCAL_ENDCAP'),
93 seedingThreshold = cms.vdouble(0.1375, 0.275, 0.275, 0.275, 0.275, 0.275, 0.275),
94 seedingThresholdPt = cms.double(0)
98 initialClusteringStep = cms.PSet(
99 thresholdsByDetector = cms.VPSet(
101 detector = cms.string(
'HCAL_BARREL1'),
102 gatheringThreshold = cms.vdouble(0.1, 0.2, 0.3, 0.3)
105 detector = cms.string(
'HCAL_ENDCAP'),
106 gatheringThreshold = cms.vdouble(0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2)
110 pfClusterBuilder = cms.PSet(
111 maxIterations = cms.uint32(5),
112 minFracTot = cms.double(1e-20),
113 minFractionToKeep = cms.double(1e-07),
114 excludeOtherSeeds = cms.bool(
True),
115 showerSigma = cms.double(10),
116 stoppingTolerance = cms.double(1e-08),
117 recHitEnergyNorms = cms.VPSet(
119 detector = cms.string(
'HCAL_BARREL1'),
120 recHitEnergyNorm = cms.vdouble(0.1, 0.2, 0.3, 0.3)
123 detector = cms.string(
'HCAL_ENDCAP'),
124 recHitEnergyNorm = cms.vdouble(0.1, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2)
127 positionCalc = cms.PSet(
128 minFractionInCalc = cms.double(1e-09),
129 minAllowedNormalization = cms.double(1e-09)
131 timeResolutionCalcBarrel = cms.PSet(
132 corrTermLowE = cms.double(0),
133 threshLowE = cms.double(6),
134 noiseTerm = cms.double(21.86),
135 constantTermLowE = cms.double(4.24),
136 noiseTermLowE = cms.double(8),
137 threshHighE = cms.double(15),
138 constantTerm = cms.double(2.82)
140 timeResolutionCalcEndcap = cms.PSet(
141 corrTermLowE = cms.double(0),
142 threshLowE = cms.double(6),
143 noiseTerm = cms.double(21.86),
144 constantTermLowE = cms.double(4.24),
145 noiseTermLowE = cms.double(8),
146 threshHighE = cms.double(15),
147 constantTerm = cms.double(2.82)
151 alpaka = cms.untracked.PSet(
152 backend = cms.untracked.string(
'')
156 process.hltParticleFlowClusterHBHESoA = cms.EDProducer(
"PFClusterSoAProducer@alpaka",
157 pfRecHits = cms.InputTag(
"hltParticleFlowRecHitHBHESoA"),
158 topology = cms.ESInputTag(
"hltESPPFRecHitHCALTopology:"),
159 pfClusterParams = cms.ESInputTag(
"hltESPPFClusterParams:"),
160 synchronise = cms.bool(
False),
162 alpaka = cms.untracked.PSet(
163 backend = cms.untracked.string(
'')
167 process.hltParticleFlowClusterHBHE = cms.EDProducer(
"LegacyPFClusterProducer",
168 src = cms.InputTag(
"hltParticleFlowClusterHBHESoA"),
169 pfClusterBuilder = process.hltParticleFlowClusterHBHE.pfClusterBuilder,
170 usePFThresholdsFromDB = cms.bool(
True),
171 recHitsSource = cms.InputTag(
"hltParticleFlowRecHitHBHE"),
172 PFRecHitsLabelIn = cms.InputTag(
"hltParticleFlowRecHitHBHESoA")
175 process.HLTPFHcalClustering = cms.Sequence(
176 process.hltHbheRecHitSoA +
177 process.hltParticleFlowRecHitHBHESoA +
178 process.hltParticleFlowRecHitHBHE +
179 process.hltParticleFlowClusterHBHESoA +
180 process.hltParticleFlowClusterHBHE +
181 process.hltParticleFlowClusterHCAL
186 def replaceItemsInSequence(process, seqNames, itemsToReplace, replacingSequence):
187 for seqName
in seqNames:
188 if not hasattr(process, seqName):
190 seq = getattr(process, seqName)
191 for item
in itemsToReplace:
193 if (item != itemsToReplace[-1]):
197 seq.replace(item, replacingSequence)
200 process = replaceItemsInSequence(
202 'HLTParticleFlowSequence',
203 'HLTParticleFlowSequenceForTaus',
204 'HLTParticleFlowSequenceForDisplTaus',
205 'HLTParticleFlowSequencePPOnAA',
206 'HLTPixelOnlyParticleFlowSequence',
208 process.hltParticleFlowRecHitHBHE,
209 process.hltParticleFlowClusterHBHE,
210 process.hltParticleFlowClusterHCAL
212 process.HLTPFHcalClustering
215 process.hltHbheRecHitSoACPUSerial =
makeSerialClone(process.hltHbheRecHitSoA)
217 process.hltParticleFlowRecHitHBHESoACPUSerial =
makeSerialClone(process.hltParticleFlowRecHitHBHESoA)
218 process.hltParticleFlowRecHitHBHESoACPUSerial.producers[0].src =
'hltHbheRecHitSoACPUSerial' 220 process.hltParticleFlowRecHitHBHECPUOnly = process.hltParticleFlowRecHitHBHE.clone(
221 src =
'hltParticleFlowRecHitHBHESoACPUSerial',
224 process.hltParticleFlowClusterHBHESoACPUSerial =
makeSerialClone(process.hltParticleFlowClusterHBHESoA,
225 pfRecHits =
'hltParticleFlowRecHitHBHESoACPUSerial',
228 process.hltParticleFlowClusterHBHECPUOnly = process.hltParticleFlowClusterHBHE.clone(
229 src =
'hltParticleFlowClusterHBHESoACPUSerial',
230 recHitsSource =
'hltParticleFlowRecHitHBHECPUOnly',
231 PFRecHitsLabelIn =
'hltParticleFlowRecHitHBHESoACPUSerial',
234 process.HLTPFHcalClusteringCPUOnly = cms.Sequence(
235 process.hltHbheRecHitSoACPUSerial +
236 process.hltParticleFlowRecHitHBHESoACPUSerial +
237 process.hltParticleFlowRecHitHBHECPUOnly +
238 process.hltParticleFlowClusterHBHESoACPUSerial +
239 process.hltParticleFlowClusterHBHECPUOnly +
240 process.hltParticleFlowClusterHCALCPUOnly
243 process = replaceItemsInSequence(process, [
'HLTParticleFlowCPUOnlySequence'],
244 [process.hltParticleFlowRecHitHBHECPUOnly, process.hltParticleFlowClusterHBHECPUOnly, process.hltParticleFlowClusterHCALCPUOnly],
245 process.HLTPFHcalClusteringCPUOnly)
248 for hltOutModMatch
in [
'hltOutputDQMGPUvsCPU',
'hltOutputHIDQMGPUvsCPU']:
249 if hasattr(process, hltOutModMatch):
250 outMod = getattr(process, hltOutModMatch)
251 outMod.outputCommands.extend([
252 'keep *_hltParticleFlowClusterHBHESoA_*_*',
253 'keep *_hltParticleFlowClusterHBHESoACPUSerial_*_*',
257 for pathNameMatch
in [
'DQM_HcalReconstruction_v',
'DQM_HIHcalReconstruction_v']:
258 dqmHcalRecoPathName =
None 259 for pathName
in process.paths_():
260 if pathName.startswith(pathNameMatch):
261 dqmHcalRecoPathName = pathName
263 if dqmHcalRecoPathName ==
None:
265 dqmHcalPath = getattr(process, dqmHcalRecoPathName)
266 dqmHcalRecoPathIndex = dqmHcalPath.index(process.hltHcalConsumerGPU) + 1
267 dqmHcalPath.insert(dqmHcalRecoPathIndex, process.HLTPFHcalClusteringCPUOnly)
268 dqmHcalPath.insert(dqmHcalRecoPathIndex, process.HLTPFHcalClustering)
def producers_by_type(process, types)
def makeSerialClone(module, kwargs)
def customizeHLTforAlpakaParticleFlowClustering(process)
PF HLT in Alpaka.