CMS 3D CMS Logo

HighPtTripletStep_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg
3 
4 ### high-pT triplets ###
5 
6 # NEW CLUSTERS (remove previously used clusters)
7 highPtTripletStepClusters = _cfg.clusterRemoverForIter("HighPtTripletStep")
8 for _eraName, _postfix, _era in _cfg.nonDefaultEras():
9  _era.toReplaceWith(highPtTripletStepClusters, _cfg.clusterRemoverForIter("HighPtTripletStep", _eraName, _postfix))
10 
11 
12 # SEEDING LAYERS
13 import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi as _PixelLayerTriplets_cfi
14 highPtTripletStepSeedLayers = _PixelLayerTriplets_cfi.PixelLayerTriplets.clone(
15  layerList = [
16  'BPix1+BPix2+BPix3',
17  'BPix2+BPix3+BPix4',
18  'BPix1+BPix3+BPix4',
19  'BPix1+BPix2+BPix4',
20  'BPix2+BPix3+FPix1_pos', 'BPix2+BPix3+FPix1_neg',
21  'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg',
22  'BPix1+BPix3+FPix1_pos', 'BPix1+BPix3+FPix1_neg',
23  'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg',
24  'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg',
25  'BPix1+BPix2+FPix2_pos', 'BPix1+BPix2+FPix2_neg',
26  'FPix1_pos+FPix2_pos+FPix3_pos', 'FPix1_neg+FPix2_neg+FPix3_neg',
27  'BPix1+FPix2_pos+FPix3_pos', 'BPix1+FPix2_neg+FPix3_neg',
28  'BPix1+FPix1_pos+FPix3_pos', 'BPix1+FPix1_neg+FPix3_neg'
29  ],
30  BPix = dict(skipClusters = cms.InputTag('highPtTripletStepClusters')),
31  FPix = dict(skipClusters = cms.InputTag('highPtTripletStepClusters'))
32 )
33 
34 from Configuration.Eras.Modifier_trackingPhase2PU140_cff import trackingPhase2PU140
35 trackingPhase2PU140.toModify(highPtTripletStepSeedLayers,
36 # combination with gap removed as only source of fakes in current geometry (kept for doc)
37  layerList = ['BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4',
38  'BPix1+BPix3+BPix4', 'BPix1+BPix2+BPix4',
39  'BPix2+BPix3+FPix1_pos', 'BPix2+BPix3+FPix1_neg',
40  'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg',
41  'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg',
42  'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg',
43 # 'BPix1+BPix2+FPix2_pos', 'BPix1+BPix2+FPix2_neg',
44  'FPix1_pos+FPix2_pos+FPix3_pos', 'FPix1_neg+FPix2_neg+FPix3_neg',
45  'BPix1+FPix2_pos+FPix3_pos', 'BPix1+FPix2_neg+FPix3_neg',
46 # 'BPix1+FPix1_pos+FPix3_pos', 'BPix1+FPix1_neg+FPix3_neg',
47  'FPix2_pos+FPix3_pos+FPix4_pos', 'FPix2_neg+FPix3_neg+FPix4_neg',
48  'FPix3_pos+FPix4_pos+FPix5_pos', 'FPix3_neg+FPix4_neg+FPix5_neg',
49  'FPix4_pos+FPix5_pos+FPix6_pos', 'FPix4_neg+FPix5_neg+FPix6_neg',
50  'FPix5_pos+FPix6_pos+FPix7_pos', 'FPix5_neg+FPix6_neg+FPix7_neg',
51 # removed as redunant and covering effectively only eta>4 (here for documentation, to be optimized after TDR)
52 # 'FPix6_pos+FPix7_pos+FPix8_pos', 'FPix6_neg+FPix7_neg+FPix8_neg',
53 # 'FPix6_pos+FPix7_pos+FPix9_pos', 'FPix6_neg+FPix7_neg+FPix9_neg']
54  ]
55 )
56 # TrackingRegion
57 from RecoTracker.TkTrackingRegions.globalTrackingRegionFromBeamSpot_cfi import globalTrackingRegionFromBeamSpot as _globalTrackingRegionFromBeamSpot
58 highPtTripletStepTrackingRegions = _globalTrackingRegionFromBeamSpot.clone(RegionPSet = dict(
59  ptMin = 0.6,
60  originRadius = 0.02,
61  nSigmaZ = 4.0
62 ))
63 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1
64 trackingPhase1.toModify(highPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.55))
65 from Configuration.Eras.Modifier_trackingPhase1PU70_cff import trackingPhase1PU70
66 trackingPhase1PU70.toModify(highPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.7))
67 trackingPhase2PU140.toModify(highPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.9, originRadius = 0.03))
68 
69 # seeding
70 from RecoTracker.TkHitPairs.hitPairEDProducer_cfi import hitPairEDProducer as _hitPairEDProducer
71 highPtTripletStepHitDoublets = _hitPairEDProducer.clone(
72  seedingLayers = "highPtTripletStepSeedLayers",
73  trackingRegions = "highPtTripletStepTrackingRegions",
74  maxElement = 0,
75  produceIntermediateHitDoublets = True,
76 )
77 from RecoPixelVertexing.PixelTriplets.pixelTripletHLTEDProducer_cfi import pixelTripletHLTEDProducer as _pixelTripletHLTEDProducer
79 import RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi
80 highPtTripletStepHitTriplets = _pixelTripletHLTEDProducer.clone(
81  doublets = "highPtTripletStepHitDoublets",
82  produceSeedingHitSets = True,
83  SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone()
84 )
85 from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsEDProducer_cff import seedCreatorFromRegionConsecutiveHitsEDProducer as _seedCreatorFromRegionConsecutiveHitsEDProducer
86 highPtTripletStepSeeds = _seedCreatorFromRegionConsecutiveHitsEDProducer.clone(
87  seedingHitSets = "highPtTripletStepHitTriplets",
88 )
89 
90 from RecoPixelVertexing.PixelTriplets.caHitTripletEDProducer_cfi import caHitTripletEDProducer as _caHitTripletEDProducer
91 trackingPhase1.toModify(highPtTripletStepHitDoublets, layerPairs = [0,1]) # layer pairs (0,1), (1,2)
92 trackingPhase1.toReplaceWith(highPtTripletStepHitTriplets, _caHitTripletEDProducer.clone(
93  doublets = "highPtTripletStepHitDoublets",
94  extraHitRPhitolerance = highPtTripletStepHitTriplets.extraHitRPhitolerance,
95  SeedComparitorPSet = highPtTripletStepHitTriplets.SeedComparitorPSet,
96  maxChi2 = dict(
97  pt1 = 0.8, pt2 = 8,
98  value1 = 100, value2 = 6,
99  ),
100  useBendingCorrection = True,
101  CAThetaCut = 0.004,
102  CAPhiCut = 0.07,
103  CAHardPtCut = 0.3,
104 ))
105 
106 # QUALITY CUTS DURING TRACK BUILDING
107 import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff as _TrajectoryFilter_cff
108 _highPtTripletStepTrajectoryFilterBase = _TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone(
109  minimumNumberOfHits = 3,
110  minPt = 0.2,
111 )
112 highPtTripletStepTrajectoryFilterBase = _highPtTripletStepTrajectoryFilterBase.clone(
113  maxCCCLostHits = 0,
114  minGoodStripCharge = dict(refToPSet_ = 'SiStripClusterChargeCutLoose')
115 )
116 trackingPhase1PU70.toReplaceWith(highPtTripletStepTrajectoryFilterBase, _highPtTripletStepTrajectoryFilterBase)
117 trackingPhase2PU140.toReplaceWith(highPtTripletStepTrajectoryFilterBase, _highPtTripletStepTrajectoryFilterBase)
118 highPtTripletStepTrajectoryFilter = _TrajectoryFilter_cff.CompositeTrajectoryFilter_block.clone(
119  filters = [cms.PSet(refToPSet_ = cms.string('highPtTripletStepTrajectoryFilterBase'))]
120 )
121 
122 import RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi
123 highPtTripletStepChi2Est = RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi.Chi2ChargeMeasurementEstimator.clone(
124  ComponentName = 'highPtTripletStepChi2Est',
125  nSigma = 3.0,
126  MaxChi2 = 30.0,
127  clusterChargeCut = dict(refToPSet_ = 'SiStripClusterChargeCutLoose'),
128  pTChargeCutThreshold = 15.
129 )
130 trackingPhase1PU70.toModify(highPtTripletStepChi2Est,
131  clusterChargeCut = dict(refToPSet_ = "SiStripClusterChargeCutNone")
132 )
133 trackingPhase2PU140.toModify(highPtTripletStepChi2Est,
134  clusterChargeCut = dict(refToPSet_ = "SiStripClusterChargeCutNone"),
135  MaxChi2 = cms.double(25.0)
136 )
137 
138 
139 # TRACK BUILDING
140 import RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi as _GroupedCkfTrajectoryBuilder_cfi
141 highPtTripletStepTrajectoryBuilder = _GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone(
142  trajectoryFilter = dict(refToPSet_ = 'highPtTripletStepTrajectoryFilter'),
143  alwaysUseInvalidHits = True,
144  maxCand = 3,
145  estimator = 'highPtTripletStepChi2Est',
146  maxDPhiForLooperReconstruction = cms.double(2.0),
147  # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius
148  # of the outermost Tracker barrel layer (with B=3.8T)
149  maxPtForLooperReconstruction = cms.double(0.7)
150 )
151 trackingPhase1PU70.toModify(highPtTripletStepTrajectoryBuilder,
152  MeasurementTrackerName = '',
153  maxCand = 4,
154 )
155 trackingPhase2PU140.toModify(highPtTripletStepTrajectoryBuilder,
156  maxCand = 5,
157 )
158 
159 # MAKING OF TRACK CANDIDATES
160 import RecoTracker.CkfPattern.CkfTrackCandidates_cfi as _CkfTrackCandidates_cfi
161 highPtTripletStepTrackCandidates = _CkfTrackCandidates_cfi.ckfTrackCandidates.clone(
162  src = 'highPtTripletStepSeeds',
163  clustersToSkip = cms.InputTag('highPtTripletStepClusters'),
164  ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput
165  numHitsForSeedCleaner = cms.int32(50),
166  onlyPixelHitsForSeedCleaner = cms.bool(True),
167  TrajectoryBuilderPSet = dict(refToPSet_ = 'highPtTripletStepTrajectoryBuilder'),
168  doSeedingRegionRebuilding = True,
169  useHitsSplitting = True
170 )
171 
172 # For Phase1PU70 & Phase2PU140
173 from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits as _trajectoryCleanerBySharedHits
174 highPtTripletStepTrajectoryCleanerBySharedHits = _trajectoryCleanerBySharedHits.clone(
175  ComponentName = 'highPtTripletStepTrajectoryCleanerBySharedHits',
176  fractionShared = 0.16,
177  allowSharedFirstHit = True
178 )
179 trackingPhase1PU70.toModify(highPtTripletStepTrackCandidates, TrajectoryCleaner = 'highPtTripletStepTrajectoryCleanerBySharedHits')
180 trackingPhase2PU140.toModify(highPtTripletStepTrackCandidates,
181  TrajectoryCleaner = 'highPtTripletStepTrajectoryCleanerBySharedHits',
182  clustersToSkip = None,
183  phase2clustersToSkip = cms.InputTag("highPtTripletStepClusters")
184 )
185 
186 # TRACK FITTING
188 highPtTripletStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
189  src = 'highPtTripletStepTrackCandidates',
190  AlgorithmName = 'highPtTripletStep',
191  Fitter = 'FlexibleKFFittingSmoother',
192 )
193 
194 
195 # Final selection
197 from RecoTracker.FinalTrackSelectors.TrackCutClassifier_cfi import TrackCutClassifier
198 highPtTripletStep = TrackCutClassifier.clone(
199  src = "highPtTripletStepTracks",
200  vertices = "firstStepPrimaryVertices",
201  mva = dict(
202  minPixelHits = [1,1,1],
203  maxChi2 = [9999.,9999.,9999.],
204  maxChi2n = [2.0,1.0,0.7],
205  minLayers = [3,3,3],
206  min3DLayers = [3,3,3],
207  maxLostLayers = [3,2,2],
208  dz_par = dict(
209  dz_par1 = [0.8,0.7,0.7],
210  dz_par2 = [0.6,0.5,0.4],
211  dz_exp = [4,4,4]
212  ),
213  dr_par = dict(
214  dr_par1 = [0.7,0.6,0.5],
215  dr_par2 = [0.4,0.35,0.25],
216  dr_exp = [4,4,4],
217  d0err_par = [0.002,0.002,0.001]
218  )
219  )
220 )
221 
222 trackingPhase1.toReplaceWith(highPtTripletStep, TrackMVAClassifierPrompt.clone(
223  src = 'highPtTripletStepTracks',
224  GBRForestLabel = 'MVASelectorHighPtTripletStep_Phase1',
225  qualityCuts = [0.2,0.3,0.4],
226 ))
227 from Configuration.Eras.Modifier_trackingPhase1QuadProp_cff import trackingPhase1QuadProp
228 trackingPhase1QuadProp.toReplaceWith(highPtTripletStep, TrackMVAClassifierPrompt.clone(
229  src = 'highPtTripletStepTracks',
230  GBRForestLabel = 'MVASelectorHighPtTripletStep_Phase1',
231  qualityCuts = [0.2,0.3,0.4],
232 ))
233 
234 
235 # For Phase1PU70
236 import RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi
237 highPtTripletStepSelector = RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.multiTrackSelector.clone(
238  src = 'highPtTripletStepTracks',
239  trackSelectors = [
240  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
241  name = 'highPtTripletStepLoose',
242  chi2n_par = 2.0,
243  res_par = ( 0.003, 0.002 ),
244  minNumberLayers = 3,
245  maxNumberLostLayers = 3,
246  minNumber3DLayers = 3,
247  d0_par1 = ( 0.7, 4.0 ),
248  dz_par1 = ( 0.8, 4.0 ),
249  d0_par2 = ( 0.4, 4.0 ),
250  dz_par2 = ( 0.6, 4.0 )
251  ), #end of pset
252  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.tightMTS.clone(
253  name = 'highPtTripletStepTight',
254  preFilterName = 'highPtTripletStepLoose',
255  chi2n_par = 1.0,
256  res_par = ( 0.003, 0.002 ),
257  minNumberLayers = 3,
258  maxNumberLostLayers = 2,
259  minNumber3DLayers = 3,
260  d0_par1 = ( 0.6, 4.0 ),
261  dz_par1 = ( 0.7, 4.0 ),
262  d0_par2 = ( 0.35, 4.0 ),
263  dz_par2 = ( 0.5, 4.0 )
264  ),
265  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.highpurityMTS.clone(
266  name = 'highPtTripletStep',
267  preFilterName = 'highPtTripletStepTight',
268  chi2n_par = 0.7,
269  res_par = ( 0.003, 0.001 ),
270  minNumberLayers = 3,
271  maxNumberLostLayers = 2,
272  minNumber3DLayers = 3,
273  d0_par1 = ( 0.5, 4.0 ),
274  dz_par1 = ( 0.7, 4.0 ),
275  d0_par2 = ( 0.25, 4.0 ),
276  dz_par2 = ( 0.4, 4.0 )
277  ),
278  ]
279 ) #end of clone
280 
281 trackingPhase2PU140.toModify(highPtTripletStepSelector,
282  trackSelectors= cms.VPSet(
283  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
284  name = 'highPtTripletStepLoose',
285  chi2n_par = 2.0,
286  res_par = ( 0.003, 0.002 ),
287  minNumberLayers = 3,
288  maxNumberLostLayers = 3,
289  minNumber3DLayers = 3,
290  d0_par1 = ( 0.7, 4.0 ),
291  dz_par1 = ( 0.8, 4.0 ),
292  d0_par2 = ( 0.6, 4.0 ),
293  dz_par2 = ( 0.6, 4.0 )
294  ), #end of pset
295  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.tightMTS.clone(
296  name = 'highPtTripletStepTight',
297  preFilterName = 'highPtTripletStepLoose',
298  chi2n_par = 1.0,
299  res_par = ( 0.003, 0.002 ),
300  minNumberLayers = 3,
301  maxNumberLostLayers = 2,
302  minNumber3DLayers = 3,
303  d0_par1 = ( 0.6, 4.0 ),
304  dz_par1 = ( 0.7, 4.0 ),
305  d0_par2 = ( 0.5, 4.0 ),
306  dz_par2 = ( 0.5, 4.0 )
307  ),
308  #FIXME: the cuts on min_nhits and minNumber*Layers are introduced to mitigate
309  #the cluster shape filter cut not working properly yet. To be remove in the future.
310  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.highpurityMTS.clone(
311  name = 'highPtTripletStep',
312  preFilterName = 'highPtTripletStepTight',
313  chi2n_par = 0.6,
314  res_par = ( 0.003, 0.001 ),
315  min_nhits = 5,
316  minNumberLayers = 5,
317  maxNumberLostLayers = 2,
318  minNumber3DLayers = 5,
319  d0_par1 = ( 0.5, 4.0 ),
320  dz_par1 = ( 0.6, 4.0 ),
321  d0_par2 = ( 0.45, 4.0 ),
322  dz_par2 = ( 0.45, 4.0 )
323  ),
324  ), #end of vpset
325  vertices = "pixelVertices"
326 ) #end of clone
327 
328 # Final sequence
329 HighPtTripletStep = cms.Sequence(highPtTripletStepClusters*
330  highPtTripletStepSeedLayers*
331  highPtTripletStepTrackingRegions*
332  highPtTripletStepHitDoublets*
333  highPtTripletStepHitTriplets*
334  highPtTripletStepSeeds*
335  highPtTripletStepTrackCandidates*
336  highPtTripletStepTracks*
337 # highPtTripletStepClassifier1*highPtTripletStepClassifier2*highPtTripletStepClassifier3*
338  highPtTripletStep)
339 _HighPtTripletStep_Phase1PU70 = HighPtTripletStep.copy()
340 _HighPtTripletStep_Phase1PU70.replace(highPtTripletStep, highPtTripletStepSelector)
341 trackingPhase1PU70.toReplaceWith(HighPtTripletStep, _HighPtTripletStep_Phase1PU70)
342 trackingPhase2PU140.toReplaceWith(HighPtTripletStep, _HighPtTripletStep_Phase1PU70)