test
CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
iterativeTkConfig.py
Go to the documentation of this file.
1 # This file is the authoritative source of the order of tracking
2 # iterations. It is used in RECO, DQM, and VALIDATION. Note that here
3 # InitialStepPreSplitting is not counted as an iteration.
4 import FWCore.ParameterSet.Config as cms
5 
6 _defaultEraName = ""
7 _nonDefaultEraNames = ["trackingLowPU", "trackingPhase1", "trackingPhase1PU70", "trackingPhase2PU140"]
8 
9 # name, postfix, era
10 _defaultEra = (_defaultEraName, "", None)
11 _nonDefaultEras = [
12  (_name, "_"+_name, getattr(__import__('Configuration.Eras.Modifier_'+_name+'_cff',globals(),locals(),[_name],0),_name)) \
13  for _name in _nonDefaultEraNames
14 ]
15 
16 _allEras = [_defaultEra] + _nonDefaultEras
17 
18 
19 _iterations = [
20  "InitialStep",
21  "DetachedTripletStep",
22  "LowPtTripletStep",
23  "PixelPairStep",
24  "MixedTripletStep",
25  "PixelLessStep",
26  "TobTecStep",
27  "JetCoreRegionalStep",
28 ]
29 _iterations_trackingLowPU = [
30  "InitialStep",
31  "LowPtTripletStep",
32  "PixelPairStep",
33  "DetachedTripletStep",
34  "MixedTripletStep",
35  "PixelLessStep",
36  "TobTecStep",
37 ]
38 _iterations_trackingPhase1 = [
39  "InitialStep",
40  "LowPtQuadStep",
41  "HighPtTripletStep",
42  "LowPtTripletStep",
43  "DetachedQuadStep",
44  "DetachedTripletStep",
45  "MixedTripletStep",
46  "PixelLessStep",
47  "TobTecStep",
48  "JetCoreRegionalStep",
49 ]
50 _iterations_trackingPhase1PU70 = [
51  "InitialStep",
52  "HighPtTripletStep",
53  "LowPtQuadStep",
54  "LowPtTripletStep",
55  "DetachedQuadStep",
56  "MixedTripletStep",
57  "PixelPairStep",
58  "TobTecStep",
59 ]
60 _iterations_trackingPhase2PU140 = [
61  "InitialStep",
62  "HighPtTripletStep",
63  "LowPtQuadStep",
64  "LowPtTripletStep",
65  "DetachedQuadStep",
66 ]
67 _iterations_muonSeeded = [
68  "MuonSeededStepInOut",
69  "MuonSeededStepOutIn",
70 ]
71 #Phase2 : just muon Seed InOut is used in this moment
72 _iterations_muonSeeded_trackingPhase2PU140 = [
73  "MuonSeededStepInOut",
74 ]
75 _multipleSeedProducers = {
76  "MixedTripletStep": ["A", "B"],
77  "TobTecStep": ["Pair", "Tripl"],
78 }
79 _multipleSeedProducers_trackingLowPU = {
80  "MixedTripletStep": ["A", "B"],
81 }
82 _multipleSeedProducers_trackingPhase1 = _multipleSeedProducers
83 _multipleSeedProducers_trackingPhase1PU70 = _multipleSeedProducers_trackingLowPU
84 _multipleSeedProducers_trackingPhase2PU140 = {}
85 _oldStyleHasSelector = set([
86  "InitialStep",
87  "HighPtTripletStep",
88  "LowPtQuadStep",
89  "LowPtTripletStep",
90  "PixelPairStep",
91  "PixelLessStep",
92  "TobTecStep",
93 ])
94 
95 from RecoLocalTracker.SubCollectionProducers.trackClusterRemover_cfi import trackClusterRemover as _trackClusterRemover
96 _trackClusterRemoverBase = _trackClusterRemover.clone(
97  maxChi2 = 9.0,
98  pixelClusters = "siPixelClusters",
99  stripClusters = "siStripClusters",
100  TrackQuality = 'highPurity',
101  minNumberOfLayersWithMeasBeforeFiltering = 0,
102 )
103 
104 #Phase2 : configuring the phase2 track Cluster Remover
105 from RecoLocalTracker.SubCollectionProducers.phase2trackClusterRemover_cfi import phase2trackClusterRemover as _phase2trackClusterRemover
106 _trackClusterRemoverBase_trackingPhase2PU140 = _phase2trackClusterRemover.clone(
107  maxChi2 = 9.0,
108  phase2pixelClusters = "siPixelClusters",
109  phase2OTClusters = "siPhase2Clusters",
110  TrackQuality = 'highPurity',
111  minNumberOfLayersWithMeasBeforeFiltering = 0,
112 )
113 
114 def _modulePrefix(iteration):
115  return iteration[0].lower()+iteration[1:]
116 
117 def _clusterRemover(iteration):
118  return _modulePrefix(iteration)+"Clusters"
119 
120 def _tracks(iteration):
121  return _modulePrefix(iteration)+"Tracks"
122 
123 def _classifier(iteration, oldStyle=False, oldStyleQualityMasks=False):
124  pre = _modulePrefix(iteration)
125  if oldStyle:
126  if iteration in _oldStyleHasSelector:
127  return pre+"Selector:" + ("QualityMasks" if oldStyleQualityMasks else pre)
128  else:
129  return pre
130  else:
131  return pre+":QualityMasks"
132 
133 def allEras():
134  return _allEras
135 
137  return _nonDefaultEras
138 
139 def createEarlySequence(eraName, postfix, modDict):
140  seq = cms.Sequence()
141  for it in globals()["_iterations"+postfix]:
142  seq += modDict[it]
143  return seq
144 
145 def iterationAlgos(postfix, includeSequenceName=False):
146  muonVariable = "_iterations_muonSeeded"+postfix
147  iterations = globals()["_iterations"+postfix] + globals().get(muonVariable, _iterations_muonSeeded)
148 
149  if includeSequenceName:
150  return [(_modulePrefix(i), i) for i in iterations]
151  else:
152  return [_modulePrefix(i) for i in iterations]
153 
154 def _seedOrTrackProducers(postfix, typ):
155  ret = []
156  iters = globals()["_iterations"+postfix]
157  if typ == "Seeds":
158  multipleSeedProducers = globals()["_multipleSeedProducers"+postfix]
159  else:
160  multipleSeedProducers = None
161  for i in iters:
162  seeder = _modulePrefix(i)+typ
163  if multipleSeedProducers is not None and i in multipleSeedProducers:
164  ret.extend([seeder+m for m in multipleSeedProducers[i]])
165  else:
166  ret.append(seeder)
167 
168  for i in globals().get("_iterations_muonSeeded"+postfix, _iterations_muonSeeded):
169  ret.append(_modulePrefix(i).replace("Step", typ))
170 
171  return ret
172 
173 def seedProducers(postfix):
174  return _seedOrTrackProducers(postfix, "Seeds")
175 
176 def trackProducers(postfix):
177  return _seedOrTrackProducers(postfix, "Tracks")
178 
179 def clusterRemoverForIter(iteration, eraName="", postfix="", module=None):
180  if module is None:
181  module = _trackClusterRemoverBase.clone()
182  if eraName == "trackingPhase2PU140":
183  module = globals().get("_trackClusterRemoverBase"+postfix, _trackClusterRemoverBase)
184 
185  iters = globals()["_iterations"+postfix]
186  try:
187  ind = iters.index(iteration)
188  except ValueError:
189  # if the iteration is not active in era, just return the same
190  return module
191 
192  if ind == 0:
193  raise Exception("Iteration %s is the first iteration in era %s, asking cluster remover configuration does not make sense" % (iteration, eraName))
194  prevIter = iters[ind-1]
195 
196  customize = dict(
197  trajectories = _tracks(prevIter),
198  oldClusterRemovalInfo = _clusterRemover(prevIter) if ind >= 2 else "", # 1st iteration does not have cluster remover
199  )
200  if eraName in ["trackingPhase1PU70", "trackingPhase2PU140"]:
201  customize["overrideTrkQuals"] = _classifier(prevIter, oldStyle=True) # old-style selector
202  elif eraName == "trackingLowPU":
203  customize["overrideTrkQuals"] = _classifier(prevIter, oldStyle=True, oldStyleQualityMasks=True) # old-style selector with 'QualityMasks' instance label
204  else:
205  customize["trackClassifier"] = _classifier(prevIter)
206 
207  return module.clone(**customize)
T get(const Candidate &c)
Definition: component.h:55