CMS 3D CMS Logo

dedxEstimators_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
3 dedxHitInfo = cms.EDProducer("DeDxHitInfoProducer",
4  tracks = cms.InputTag("generalTracks"),
5 
6  minTrackHits = cms.uint32(0),
7  minTrackPt = cms.double(10),
8  minTrackPtPrescale = cms.double(0.5), # minimal pT for prescaled low pT tracks
9  maxTrackEta = cms.double(5.0),
10 
11  useStrip = cms.bool(True),
12  usePixel = cms.bool(True),
13  MeVperADCStrip = cms.double(3.61e-06*265),
14  MeVperADCPixel = cms.double(3.61e-06),
15 
16  useCalibration = cms.bool(False),
17  calibrationPath = cms.string("file:Gains.root"),
18  shapeTest = cms.bool(True),
19  clusterShapeCache = cms.InputTag("siPixelClusterShapeCache"),
20  storeMomentumAtHit = cms.bool(False),
21 
22  lowPtTracksPrescalePass = cms.uint32(100), # prescale factor for low pt tracks above the dEdx cut
23  lowPtTracksPrescaleFail = cms.uint32(2000), # prescale factor for low pt tracks below the dEdx cut
24  lowPtTracksEstimatorParameters = cms.PSet( # generalized truncated average
25  fraction = cms.double(-0.15), # negative = throw away the 15% with lowest charge
26  exponent = cms.double(-2.0),
27  truncate = cms.bool(True),
28  ),
29  lowPtTracksDeDxThreshold = cms.double(3.5), # threshold on tracks
30  usePixelForPrescales = cms.bool(True)
31 )
32 
33 import RecoTracker.DeDx.DeDxEstimatorProducer_cfi as _mod
34 
35 dedxHarmonic2 = _mod.DeDxEstimatorProducer.clone(
36  estimator = 'generic',
37  fraction = 0.4, #Used only if estimator='truncated'
38  exponent = -2.0, #Used only if estimator='generic'
39 
40  Record = "SiStripDeDxMip_3D_Rcd", #used only for discriminators : estimators='productDiscrim' or 'btagDiscrim' or 'smirnovDiscrim' or 'asmirnovDiscrim'
41  ProbabilityMode = "Accumulation", #used only for discriminators : estimators='productDiscrim' or 'btagDiscrim' or 'smirnovDiscrim' or 'asmirnovDiscrim'
42 )
43 
44 from Configuration.Eras.Modifier_fastSim_cff import fastSim
45 
46 # explicit python dependency
47 import FastSimulation.SimplifiedGeometryPropagator.FastTrackDeDxProducer_cfi
48 
49 # do this before defining dedxPixelHarmonic2 so it automatically comes out right
50 fastSim.toReplaceWith(dedxHarmonic2,
51  FastSimulation.SimplifiedGeometryPropagator.FastTrackDeDxProducer_cfi.FastTrackDeDxProducer.clone(
52  ShapeTest = False,
53  simHit2RecHitMap = "fastMatchedTrackerRecHits:simHit2RecHitMap",
54  simHits = "fastSimProducer:TrackerHits",
55  )
56 )
57 
58 dedxPixelHarmonic2 = dedxHarmonic2.clone(UseStrip = False, UsePixel = True)
59 
60 dedxPixelAndStripHarmonic2T085 = dedxHarmonic2.clone(
61  UseStrip = True, UsePixel = True,
62  estimator = 'genericTruncated',
63  fraction = -0.15, # Drop the lowest 15% of hits
64  exponent = -2.0, # Harmonic02
65 )
66 
67 dedxTruncated40 = dedxHarmonic2.clone(estimator = 'truncated')
68 
69 dedxMedian = dedxHarmonic2.clone(estimator = 'median')
70 
71 dedxUnbinned = dedxHarmonic2.clone(estimator = 'unbinnedFit')
72 
73 dedxDiscrimProd = dedxHarmonic2.clone(estimator = 'productDiscrim')
74 
75 dedxDiscrimBTag = dedxHarmonic2.clone(estimator = 'btagDiscrim')
76 
77 dedxDiscrimSmi = dedxHarmonic2.clone(estimator = 'smirnovDiscrim')
78 
79 dedxDiscrimASmi = dedxHarmonic2.clone(estimator = 'asmirnovDiscrim')
80 
81 doAlldEdXEstimatorsTask = cms.Task(dedxTruncated40 , dedxHarmonic2 , dedxPixelHarmonic2 , dedxPixelAndStripHarmonic2T085 , dedxHitInfo)
82 doAlldEdXEstimators = cms.Sequence(doAlldEdXEstimatorsTask)
83 
84 fastSim.toReplaceWith(doAlldEdXEstimatorsTask, cms.Task(dedxHarmonic2, dedxPixelHarmonic2))
85 
86 # use only the strips for Run-3
87 from Configuration.Eras.Modifier_run3_common_cff import run3_common
88 run3_common.toModify(dedxHitInfo,
89  lowPtTracksEstimatorParameters = dict(fraction = 0., exponent = -2.0,truncate = False),
90  usePixelForPrescales = False
91 )
92 
93 # dEdx for Run-3 UPC
94 from Configuration.Eras.Modifier_run3_upc_cff import run3_upc
95 run3_upc.toModify(dedxHitInfo, minTrackPt = 0, storeMomentumAtHit = True)
96 
97 from RecoTracker.DeDx.dedxHitCalibrator_cfi import dedxHitCalibrator as _dedxHitCalibrator
98 from SimGeneral.MixingModule.SiStripSimParameters_cfi import SiStripSimBlock as _SiStripSimBlock
99 from RecoLocalTracker.SiPixelClusterizer.SiPixelClusterizer_cfi import siPixelClusters as _siPixelClusters
100 dedxHitCalibrator = _dedxHitCalibrator.clone(
101  MeVPerElectron = 1000*_SiStripSimBlock.GevPerElectron.value(),
102  VCaltoElectronGain = _siPixelClusters.VCaltoElectronGain,
103  VCaltoElectronGain_L1 = _siPixelClusters.VCaltoElectronGain_L1,
104  VCaltoElectronOffset = _siPixelClusters.VCaltoElectronOffset,
105  VCaltoElectronOffset_L1 = _siPixelClusters.VCaltoElectronOffset_L1
106 )
107 
108 dedxAllLikelihood = _mod.DeDxEstimatorProducer.clone(
109  UseStrip = True, UsePixel = True,
110  estimator = 'likelihoodFit',
111  UseDeDxHits = True,
112  pixelDeDxHits = 'dedxHitCalibrator:PixelHits',
113  stripDeDxHits = 'dedxHitCalibrator:StripHits'
114 )
115 dedxPixelLikelihood = dedxAllLikelihood.clone(UseStrip = False, UsePixel = True)
116 dedxStripLikelihood = dedxAllLikelihood.clone(UseStrip = True, UsePixel = False)
117 
118 from Configuration.Eras.Modifier_run3_egamma_2023_cff import run3_egamma_2023
119 (run3_upc & ~run3_egamma_2023).toReplaceWith(doAlldEdXEstimatorsTask, cms.Task(doAlldEdXEstimatorsTask.copy(), dedxHitCalibrator, dedxStripLikelihood, dedxPixelLikelihood, dedxAllLikelihood))