CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackValidation_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 
7 from Validation.RecoTrack.trajectorySeedTracks_cfi import trajectorySeedTracks as _trajectorySeedTracks
11 import cutsRecoTracks_cfi
12 
15 from CommonTools.RecoAlgos.trackingParticleRefSelector_cfi import trackingParticleRefSelector as _trackingParticleRefSelector
16 from CommonTools.RecoAlgos.trackingParticleConversionRefSelector_cfi import trackingParticleConversionRefSelector as _trackingParticleConversionRefSelector
18 from CommonTools.RecoAlgos.recoChargedRefCandidateToTrackRefProducer_cfi import recoChargedRefCandidateToTrackRefProducer as _recoChargedRefCandidateToTrackRefProducer
19 
20 import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg
21 from Configuration.Eras.Modifier_fastSim_cff import fastSim
22 
23 ### First define the stuff for the standard validation sequence
24 ## Track selectors
25 for _eraName, _postfix, _era in _cfg.allEras():
26  _seedProd = ["initialStepSeedsPreSplitting"]
27  _trackProd = ["initialStepTracksPreSplitting"]
28  if _eraName in ["trackingLowPU", "trackingPhase1PU70", "trackingPhase2PU140"]: # these don't have preSplitting
29  _seedProd = []
30  _trackProd = []
31 
32  locals()["_algos"+_postfix] = ["generalTracks"] + _cfg.iterationAlgos(_postfix) + ["duplicateMerge"]
33  locals()["_seedProducers"+_postfix] = _seedProd + _cfg.seedProducers(_postfix)
34  locals()["_trackProducers"+_postfix] = _trackProd + _cfg.trackProducers(_postfix)
35 
36 _removeForFastSimSeedProducers =["initialStepSeedsPreSplitting",
37  "jetCoreRegionalStepSeeds",
38  "muonSeededSeedsInOut",
39  "muonSeededSeedsOutIn"]
40 _seedProducers_fastSim = [ x for x in _seedProducers if x not in _removeForFastSimSeedProducers]
41 
42 _removeForFastTrackProducers = ["initialStepTracksPreSplitting",
43  "jetCoreRegionalStepTracks",
44  "muonSeededTracksInOut",
45  "muonSeededTracksOutIn"]
46 _trackProducers_fastSim = [ x for x in _trackProducers if x not in _removeForFastTrackProducers]
47 
48 def _algoToSelector(algo):
49  sel = ""
50  if algo != "generalTracks":
51  sel = algo[0].upper()+algo[1:]
52  return "cutsRecoTracks"+sel
53 
54 def _addSelectorsByAlgo(algos, modDict):
55  names = []
56  seq = cms.Sequence()
57  for algo in algos:
58  if algo == "generalTracks":
59  continue
60  modName = _algoToSelector(algo)
61  if modName not in modDict:
62  mod = cutsRecoTracks_cfi.cutsRecoTracks.clone(algorithm=[algo])
63  modDict[modName] = mod
64  else:
65  mod = modDict[modName]
66  names.append(modName)
67  seq += mod
68  return (names, seq)
69 def _addSelectorsByHp(algos, modDict):
70  seq = cms.Sequence()
71  names = []
72  for algo in algos:
73  modName = _algoToSelector(algo)
74  modNameHp = modName+"Hp"
75  if modNameHp not in modDict:
76  if algo == "generalTracks":
77  mod = cutsRecoTracks_cfi.cutsRecoTracks.clone(quality=["highPurity"])
78  else:
79  mod = modDict[modName].clone(quality=["highPurity"])
80  modDict[modNameHp] = mod
81  else:
82  mod = modDict[modNameHp]
83  names.append(modNameHp)
84  seq += mod
85  return (names, seq)
86 def _addSelectorsBySrc(modules, midfix, src, modDict):
87  seq = cms.Sequence()
88  names = []
89  for modName in modules:
90  modNameNew = modName.replace("cutsRecoTracks", "cutsRecoTracks"+midfix)
91  if modNameNew not in modDict:
92  mod = modDict[modName].clone(src=src)
93  modDict[modNameNew] = mod
94  else:
95  mod = modDict[modNameNew]
96  names.append(modNameNew)
97  seq += mod
98  return (names, seq)
99 def _addSelectorsByOriginalAlgoMask(modules, midfix, algoParam,modDict):
100  seq = cms.Sequence()
101  names = []
102  for modName in modules:
103  if modName[-2:] == "Hp":
104  modNameNew = modName[:-2] + midfix + "Hp"
105  else:
106  modNameNew = modName + midfix
107  if modNameNew not in modDict:
108  mod = modDict[modName].clone()
109  setattr(mod, algoParam, mod.algorithm.value())
110  mod.algorithm = []
111  modDict[modNameNew] = mod
112  else:
113  mod = modDict[modNameNew]
114  names.append(modNameNew)
115  seq += mod
116  return (names, seq)
117 def _addSeedToTrackProducers(seedProducers,modDict):
118  names = []
119  seq = cms.Sequence()
120  for seed in seedProducers:
121  modName = "seedTracks"+seed
122  if modName not in modDict:
123  mod = _trajectorySeedTracks.clone(src=seed)
124  modDict[modName] = mod
125  else:
126  mod = modDict[modName]
127  names.append(modName)
128  seq += mod
129  return (names, seq)
130 
131 _relevantEras = _cfg.allEras()
132 _relevantErasAndFastSim = _relevantEras + [("fastSim", "_fastSim", fastSim)]
133 def _translateArgs(args, postfix, modDict):
134  ret = []
135  for arg in args:
136  if isinstance(arg, list):
137  ret.append(_translateArgs(arg, postfix, modDict))
138  else:
139  ret.append(modDict[arg+postfix])
140  return ret
141 def _sequenceForEachEra(function, args, names, sequence, modDict, plainArgs=[], modifySequence=None, includeFastSim=False):
142  if sequence[0] != "_":
143  raise Exception("Sequence name is expected to begin with _")
144 
145  _eras = _relevantErasAndFastSim if includeFastSim else _relevantEras
146  for eraName, postfix, _era in _eras:
147  _args = _translateArgs(args, postfix, modDict)
148  _args.extend(plainArgs)
149  ret = function(*_args, modDict=modDict)
150  if len(ret) != 2:
151  raise Exception("_sequenceForEachEra is expected to return 2 values, but function returned %d" % len(ret))
152  modDict[names+postfix] = ret[0]
153  modDict[sequence+postfix] = ret[1]
154 
155  # The sequence of the first era will be the default one
156  defaultSequenceName = sequence+_eras[0][0]
157  defaultSequence = modDict[defaultSequenceName]
158  modDict[defaultSequenceName[1:]] = defaultSequence # remove leading underscore
159 
160  # Optionally modify sequences before applying the era
161  if modifySequence is not None:
162  for eraName, postfix, _era in _eras:
163  modifySequence(modDict[sequence+postfix])
164 
165  # Apply eras
166  for _eraName, _postfix, _era in _eras[1:]:
167  _era.toReplaceWith(defaultSequence, modDict[sequence+_postfix])
168 def _setForEra(module, eraName, era, **kwargs):
169  if eraName == "":
170  for key, value in kwargs.iteritems():
171  setattr(module, key, value)
172  else:
173  era.toModify(module, **kwargs)
174 
175 # Seeding layer sets
176 def _getSeedingLayers(seedProducers):
177  import RecoTracker.IterativeTracking.iterativeTk_cff as _iterativeTk_cff
178 
179  def _findSeedingLayers(name):
180  prod = getattr(_iterativeTk_cff, name)
181  if hasattr(prod, "triplets"):
182  if hasattr(prod, "layerList"): # merger
183  return prod.layerList.refToPSet_.value()
184  return _findSeedingLayers(prod.triplets.getModuleLabel())
185  elif hasattr(prod, "doublets"):
186  return _findSeedingLayers(prod.doublets.getModuleLabel())
187  return prod.seedingLayers.getModuleLabel()
188 
189  seedingLayersMerged = []
190  for seedName in seedProducers:
191  seedProd = getattr(_iterativeTk_cff, seedName)
192  if hasattr(seedProd, "OrderedHitsFactoryPSet"):
193  if hasattr(seedProd, "SeedMergerPSet"):
194  seedingLayersName = seedProd.SeedMergerPSet.layerList.refToPSet_.value()
195  else:
196  seedingLayersName = seedProd.OrderedHitsFactoryPSet.SeedingLayers.getModuleLabel()
197  elif hasattr(seedProd, "seedingHitSets"):
198  seedingLayersName = _findSeedingLayers(seedProd.seedingHitSets.getModuleLabel())
199  else:
200  continue
201 
202  seedingLayers = getattr(_iterativeTk_cff, seedingLayersName).layerList.value()
203  for layerSet in seedingLayers:
204  if layerSet not in seedingLayersMerged:
205  seedingLayersMerged.append(layerSet)
206  return seedingLayersMerged
207 for _eraName, _postfix, _era in _relevantEras:
208  locals()["_seedingLayerSets"+_postfix] = _getSeedingLayers(locals()["_seedProducers"+_postfix])
209 
210 # MVA selectors
211 def _getMVASelectors(postfix):
212  import RecoTracker.IterativeTracking.iterativeTk_cff as _iterativeTk_cff
213 
214  # assume naming convention that the iteration name (when first
215  # letter in lower case) is the selector name
216  pset = cms.untracked.PSet()
217  for iterName, seqName in _cfg.iterationAlgos(postfix, includeSequenceName=True):
218  if hasattr(_iterativeTk_cff, iterName):
219  mod = getattr(_iterativeTk_cff, iterName)
220  seq = getattr(_iterativeTk_cff, seqName)
221 
222  # Ignore iteration if the MVA selector module is not in the sequence
223  try:
224  seq.index(mod)
225  except:
226  continue
227 
228  typeName = mod._TypedParameterizable__type
229  classifiers = []
230  if typeName == "ClassifierMerger":
231  classifiers = mod.inputClassifiers.value()
232  elif "TrackMVAClassifier" in typeName:
233  classifiers = [iterName]
234  if len(classifiers) > 0:
235  setattr(pset, iterName+"Tracks", cms.untracked.vstring(classifiers))
236 
237  return pset
238 for _eraName, _postfix, _era in _relevantEras:
239  locals()["_mvaSelectors"+_postfix] = _getMVASelectors(_postfix)
240 
241 # Validation iterative steps
242 _sequenceForEachEra(_addSelectorsByAlgo, args=["_algos"], names="_selectorsByAlgo", sequence="_tracksValidationSelectorsByAlgo", modDict=globals())
243 
244 # high purity
245 _sequenceForEachEra(_addSelectorsByHp, args=["_algos"], names="_selectorsByAlgoHp", sequence="_tracksValidationSelectorsByAlgoHp", modDict=globals())
246 
247 for _eraName, _postfix, _era in _relevantEras:
248  selectors = locals()["_selectorsByAlgoHp"+_postfix]
249  locals()["_generalTracksHp"+_postfix] = selectors[0]
250  locals()["_selectorsByAlgoHp"+_postfix] = selectors[1:]
251 
252 # BTV-like selection
253 import PhysicsTools.RecoAlgos.btvTracks_cfi as btvTracks_cfi
254 cutsRecoTracksBtvLike = btvTracks_cfi.btvTrackRefs.clone()
255 
256 # Select tracks associated to AK4 jets
258 ak4JetTracksAssociatorExplicitAll = ak4JTA_cff.ak4JetTracksAssociatorExplicit.clone(
259  jets = "ak4PFJets"
260 )
262 import CommonTools.RecoAlgos.jetTracksAssociationToTrackRefs_cfi as jetTracksAssociationToTrackRefs_cfi
263 cutsRecoTracksAK4PFJets = jetTracksAssociationToTrackRefs_cfi.jetTracksAssociationToTrackRefs.clone(
264  association = "ak4JetTracksAssociatorExplicitAll",
265  jets = "ak4PFJets",
266  correctedPtMin = 10,
267 )
268 
269 
270 ## Select signal TrackingParticles, and do the corresponding associations
271 trackingParticlesSignal = _trackingParticleRefSelector.clone(
272  signalOnly = True,
273  chargedOnly = False,
274  tip = 1e5,
275  lip = 1e5,
276  minRapidity = -10,
277  maxRapidity = 10,
278  ptMin = 0,
279 )
280 
281 # select tracks with pT > 0.9 GeV (for upgrade fake rates)
282 generalTracksPt09 = cutsRecoTracks_cfi.cutsRecoTracks.clone(ptMin=0.9)
283 # and then the selectors
284 _sequenceForEachEra(_addSelectorsBySrc, modDict=globals(),
285  args=[["_generalTracksHp"]],
286  plainArgs=["Pt09", "generalTracksPt09"],
287  names="_selectorsPt09", sequence="_tracksValidationSelectorsPt09",
288  modifySequence=lambda seq:seq.insert(0, generalTracksPt09))
289 
290 # select tracks from the PV
291 from CommonTools.RecoAlgos.TrackWithVertexRefSelector_cfi import trackWithVertexRefSelector as _trackWithVertexRefSelector
292 generalTracksFromPV = _trackWithVertexRefSelector.clone(
293  src = "generalTracks",
294  ptMin = 0,
295  ptMax = 1e10,
296  ptErrorCut = 1e10,
297  quality = "loose",
298  vertexTag = "offlinePrimaryVertices",
299  nVertices = 1,
300  vtxFallback = False,
301  zetaVtx = 0.1, # 1 mm
302  rhoVtx = 1e10, # intentionally no dxy cut
303 )
304 # and then the selectors
305 _sequenceForEachEra(_addSelectorsBySrc, modDict=globals(),
306  args=[["_generalTracksHp"]],
307  plainArgs=["FromPV", "generalTracksFromPV"],
308  names="_selectorsFromPV", sequence="_tracksValidationSelectorsFromPV",
309  modifySequence=lambda seq: seq.insert(0, generalTracksFromPV))
310 
311 # select tracks with pT > 0.9 GeV from the PV
312 generalTracksFromPVPt09 = generalTracksPt09.clone(src="generalTracksFromPV")
313 # and then the selectors
314 _sequenceForEachEra(_addSelectorsBySrc, modDict=globals(),
315  args=[["_generalTracksHp"]],
316  plainArgs=["FromPVPt09", "generalTracksFromPVPt09"],
317  names="_selectorsFromPVPt09", sequence="_tracksValidationSelectorsFromPVPt09",
318  modifySequence=lambda seq: seq.insert(0, generalTracksFromPVPt09))
319 
320 ## Select conversion TrackingParticles, and define the corresponding associator
321 trackingParticlesConversion = _trackingParticleConversionRefSelector.clone()
322 
323 ## Select electron TPs
324 trackingParticlesElectron = _trackingParticleRefSelector.clone(
325  pdgId = [-11, 11],
326  signalOnly = False,
327  tip = 1e5,
328  lip = 1e5,
329  minRapidity = -10,
330  maxRapidity = 10,
331  ptMin = 0,
332 )
333 
334 ## MTV instances
335 trackValidator = Validation.RecoTrack.MultiTrackValidator_cfi.multiTrackValidator.clone(
336  useLogPt = cms.untracked.bool(True),
337  dodEdxPlots = True,
338  doPVAssociationPlots = True
339  #,minpT = cms.double(-1)
340  #,maxpT = cms.double(3)
341  #,nintpT = cms.int32(40)
342 )
343 fastSim.toModify(trackValidator,
344  dodEdxPlots = False)
345 
346 for _eraName, _postfix, _era in _relevantEras:
347  _setForEra(trackValidator, _eraName, _era,
348  label = ["generalTracks", locals()["_generalTracksHp"+_postfix]] +
349  locals()["_selectorsByAlgo"+_postfix] + locals()["_selectorsByAlgoHp"+_postfix] +
350  ["generalTracksPt09"] + locals()["_selectorsPt09"+_postfix] +
351  [
352  "cutsRecoTracksBtvLike",
353  "cutsRecoTracksAK4PFJets"
354  ]
355  )
356  _setForEra(trackValidator.histoProducerAlgoBlock, _eraName, _era, seedingLayerSets=locals()["_seedingLayerSets"+_postfix])
357 
358 # For efficiency of signal TPs vs. signal tracks, and fake rate of
359 # signal tracks vs. signal TPs
360 trackValidatorFromPV = trackValidator.clone(
361  dirName = "Tracking/TrackFromPV/",
362  label_tp_effic = "trackingParticlesSignal",
363  label_tp_fake = "trackingParticlesSignal",
364  label_tp_effic_refvector = True,
365  label_tp_fake_refvector = True,
366  trackCollectionForDrCalculation = "generalTracksFromPV",
367  doPlotsOnlyForTruePV = True,
368  doPVAssociationPlots = False,
369 )
370 for _eraName, _postfix, _era in _relevantEras:
371  _setForEra(trackValidatorFromPV, _eraName, _era, label = ["generalTracksFromPV"] + locals()["_selectorsFromPV"+_postfix] + ["generalTracksFromPVPt09"] + locals()["_selectorsFromPVPt09"+_postfix])
372 
373 # For fake rate of signal tracks vs. all TPs, and pileup rate of
374 # signal tracks vs. non-signal TPs
375 trackValidatorFromPVAllTP = trackValidatorFromPV.clone(
376  dirName = "Tracking/TrackFromPVAllTP/",
377  label_tp_effic = trackValidator.label_tp_effic.value(),
378  label_tp_fake = trackValidator.label_tp_fake.value(),
379  label_tp_effic_refvector = False,
380  label_tp_fake_refvector = False,
381  associators = trackValidator.associators.value(),
382  doSimPlots = False,
383  doSimTrackPlots = False,
384 )
385 
386 # For efficiency of all TPs vs. all tracks
387 trackValidatorAllTPEffic = trackValidator.clone(
388  dirName = "Tracking/TrackAllTPEffic/",
389  label = [x for x in trackValidator.label.value() if "Pt09" not in x],
390  doSimPlots = False,
391  doRecoTrackPlots = False, # Fake rate of all tracks vs. all TPs is already included in trackValidator
392  doPVAssociationPlots = False,
393 )
394 trackValidatorAllTPEffic.histoProducerAlgoBlock.generalTpSelector.signalOnly = False
395 trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsEta.signalOnly = False
396 trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsPhi.signalOnly = False
397 trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsPt.signalOnly = False
398 trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsVTXR.signalOnly = False
399 trackValidatorAllTPEffic.histoProducerAlgoBlock.TpSelectorForEfficiencyVsVTXZ.signalOnly = False
400 for _eraName, _postfix, _era in _relevantEras:
401  _setForEra(trackValidatorAllTPEffic, _eraName, _era, label = ["generalTracks", locals()["_generalTracksHp"+_postfix]])
402 
403 # For conversions
404 trackValidatorConversion = trackValidator.clone(
405  dirName = "Tracking/TrackConversion/",
406  label = [
407  "convStepTracks",
408  "conversionStepTracks",
409  "ckfInOutTracksFromConversions",
410  "ckfOutInTracksFromConversions",
411  ],
412  label_tp_effic = "trackingParticlesConversion",
413  label_tp_effic_refvector = True,
414  associators = ["quickTrackAssociatorByHits"],
415  UseAssociators = True,
416  doSimPlots = True,
417  dodEdxPlots = False,
418  doPVAssociationPlots = False,
419  calculateDrSingleCollection = False,
420 )
421 # relax lip and tip
422 for n in ["Eta", "Phi", "Pt", "VTXR", "VTXZ"]:
423  pset = getattr(trackValidatorConversion.histoProducerAlgoBlock, "TpSelectorForEfficiencyVs"+n)
424  pset.lip = trackValidatorConversion.lipTP.value()
425  pset.tip = trackValidatorConversion.tipTP.value()
426 
427 # For electrons
428 trackValidatorGsfTracks = trackValidatorConversion.clone(
429  dirName = "Tracking/TrackGsf/",
430  label = ["electronGsfTracks"],
431  label_tp_effic = "trackingParticlesElectron",
432 )
433 
434 
435 # the track selectors
436 tracksValidationSelectors = cms.Sequence(
437  tracksValidationSelectorsByAlgo +
438  tracksValidationSelectorsByAlgoHp +
439  cutsRecoTracksBtvLike +
440  ak4JetTracksAssociatorExplicitAll +
441  cutsRecoTracksAK4PFJets
442 )
443 tracksValidationTruth = cms.Sequence(
444  tpClusterProducer +
445  quickTrackAssociatorByHits +
446  trackingParticleRecoTrackAsssociation +
447  VertexAssociatorByPositionAndTracks +
448  trackingParticleNumberOfLayersProducer
449 )
450 fastSim.toModify(tracksValidationTruth, lambda x: x.remove(tpClusterProducer))
451 
452 tracksPreValidation = cms.Sequence(
453  tracksValidationSelectors +
454  tracksValidationSelectorsPt09 +
455  tracksValidationSelectorsFromPV +
456  tracksValidationSelectorsFromPVPt09 +
457  tracksValidationTruth +
458  cms.ignore(trackingParticlesSignal) +
459  cms.ignore(trackingParticlesElectron) +
460  trackingParticlesConversion
461 )
462 fastSim.toReplaceWith(tracksPreValidation, tracksPreValidation.copyAndExclude([
463  trackingParticlesElectron,
464  trackingParticlesConversion
465 ]))
466 
467 tracksValidation = cms.Sequence(
468  tracksPreValidation +
469  trackValidator +
470  trackValidatorFromPV +
471  trackValidatorFromPVAllTP +
472  trackValidatorAllTPEffic +
473  trackValidatorConversion +
474  trackValidatorGsfTracks
475 )
476 fastSim.toReplaceWith(tracksValidation, tracksValidation.copyAndExclude([trackValidatorConversion, trackValidatorGsfTracks]))
477 
478 ### Then define stuff for standalone mode (i.e. MTV with RECO+DIGI input)
479 
480 # Select by originalAlgo and algoMask
481 for _eraName, _postfix, _era in _relevantEras:
482  locals()["_selectorsByAlgoAndHp"+_postfix] = locals()["_selectorsByAlgo"+_postfix] + locals()["_selectorsByAlgoHp"+_postfix]
483 _sequenceForEachEra(_addSelectorsByOriginalAlgoMask, modDict = globals(),
484  args = ["_selectorsByAlgoAndHp"], plainArgs = ["ByOriginalAlgo", "originalAlgorithm"],
485  names = "_selectorsByOriginalAlgo", sequence = "_tracksValidationSelectorsByOriginalAlgoStandalone")
486 _sequenceForEachEra(_addSelectorsByOriginalAlgoMask, modDict = globals(),
487  args = ["_selectorsByAlgoAndHp"], plainArgs = ["ByAlgoMask", "algorithmMaskContains"],
488  names = "_selectorsByAlgoMask", sequence = "_tracksValidationSelectorsByAlgoMaskStandalone")
489 
490 # Select pT>0.9 by iteration
491 _sequenceForEachEra(_addSelectorsBySrc, modDict = globals(),
492  args = ["_selectorsByAlgoAndHp"], plainArgs = ["Pt09", "generalTracksPt09"],
493  names = "_selectorsPt09Standalone", sequence = "_tracksValidationSelectorsPt09Standalone")
494 
495 # Select fromPV by iteration
496 _sequenceForEachEra(_addSelectorsBySrc, modDict = globals(),
497  args = ["_selectorsByAlgoAndHp"], plainArgs = ["FromPV", "generalTracksFromPV"],
498  names = "_selectorsFromPVStandalone", sequence = "_tracksValidationSelectorsFromPVStandalone")
499 
500 # Select pt>0.9 and fromPV by iteration
501 _sequenceForEachEra(_addSelectorsBySrc, modDict = globals(),
502  args = ["_selectorsByAlgoAndHp"], plainArgs = ["FromPVPt09", "generalTracksFromPVPt09"],
503  names = "_selectorsFromPVPt09Standalone", sequence = "_tracksValidationSelectorsFromPVPt09Standalone")
504 
505 # MTV instances
506 trackValidatorStandalone = trackValidator.clone()
507 for _eraName, _postfix, _era in _relevantEras:
508  _setForEra(trackValidatorStandalone, _eraName, _era, label = trackValidator.label + locals()["_selectorsByOriginalAlgo"+_postfix] + locals()["_selectorsByAlgoMask"+_postfix] + locals()["_selectorsPt09Standalone"+_postfix])
509 
510 trackValidatorFromPVStandalone = trackValidatorFromPV.clone()
511 for _eraName, _postfix, _era in _relevantEras:
512  _setForEra(trackValidatorFromPVStandalone, _eraName, _era, label = trackValidatorFromPV.label + locals()["_selectorsFromPVStandalone"+_postfix] + locals()["_selectorsFromPVPt09Standalone"+_postfix])
513 
514 trackValidatorFromPVAllTPStandalone = trackValidatorFromPVAllTP.clone(
515  label = trackValidatorFromPVStandalone.label.value()
516 )
517 trackValidatorAllTPEfficStandalone = trackValidatorAllTPEffic.clone(
518  label = [ x for x in trackValidator.label.value() if x not in ["cutsRecoTracksBtvLike", "cutsRecoTracksAK4PFJets"] and "Pt09" not in x]
519 )
520 
521 trackValidatorConversionStandalone = trackValidatorConversion.clone( label = [x for x in trackValidatorConversion.label if x != "convStepTracks"])
522 
523 # sequences
524 tracksValidationSelectorsStandalone = cms.Sequence(
525  tracksValidationSelectorsByOriginalAlgoStandalone +
526  tracksValidationSelectorsByAlgoMaskStandalone +
527  tracksValidationSelectorsPt09Standalone +
528  tracksValidationSelectorsFromPVStandalone +
529  tracksValidationSelectorsFromPVPt09Standalone
530 )
531 
532 # we copy this for both Standalone and TrackingOnly
533 # and later make modifications from it which change based on era
534 _trackValidatorsBase = cms.Sequence(
535  trackValidatorStandalone +
536  trackValidatorFromPVStandalone +
537  trackValidatorFromPVAllTPStandalone +
538  trackValidatorAllTPEfficStandalone +
539  trackValidatorConversionStandalone +
540  trackValidatorGsfTracks
541 )
542 trackValidatorsStandalone = _trackValidatorsBase.copy()
543 fastSim.toModify(trackValidatorsStandalone, lambda x: x.remove(trackValidatorConversionStandalone) )
544 
545 tracksValidationStandalone = cms.Sequence(
546  ak4PFL1FastL2L3CorrectorChain +
547  tracksPreValidation +
548  tracksValidationSelectorsStandalone +
549  trackValidatorsStandalone
550 )
551 
552 ### TrackingOnly mode (i.e. MTV with DIGI input + tracking-only reconstruction)
553 
554 # selectors
555 tracksValidationSelectorsTrackingOnly = tracksValidationSelectors.copyAndExclude([ak4JetTracksAssociatorExplicitAll,cutsRecoTracksAK4PFJets]) # selectors using track information only (i.e. no PF)
556 _sequenceForEachEra(_addSeedToTrackProducers, args=["_seedProducers"], names="_seedSelectors", sequence="_tracksValidationSeedSelectorsTrackingOnly", includeFastSim=True, modDict=globals())
557 
558 # MTV instances
559 trackValidatorTrackingOnly = trackValidatorStandalone.clone(label = [ x for x in trackValidatorStandalone.label if x != "cutsRecoTracksAK4PFJets"] )
560 
561 _trackValidatorSeedingBuildingTrackingOnly = trackValidatorTrackingOnly.clone( # common for seeds and built tracks
562  associators = ["quickTrackAssociatorByHits"],
563  UseAssociators = True,
564  dodEdxPlots = False,
565  doPVAssociationPlots = False,
566  doSimPlots = False,
567 )
568 trackValidatorBuildingTrackingOnly = _trackValidatorSeedingBuildingTrackingOnly.clone(
569  dirName = "Tracking/TrackBuilding/",
570  doMVAPlots = True,
571 )
572 for _eraName, _postfix, _era in _relevantErasAndFastSim:
573  _setForEra(trackValidatorBuildingTrackingOnly, _eraName, _era, label = locals()["_trackProducers"+_postfix])
574 fastSim.toModify(trackValidatorBuildingTrackingOnly, doMVAPlots=False)
575 for _eraName, _postfix, _era in _relevantEras:
576  _setForEra(trackValidatorBuildingTrackingOnly, _eraName, _era, mvaLabels = locals()["_mvaSelectors"+_postfix])
577 
578 trackValidatorSeedingTrackingOnly = _trackValidatorSeedingBuildingTrackingOnly.clone(
579  dirName = "Tracking/TrackSeeding/",
580  label = _seedSelectors,
581  doSeedPlots = True,
582 )
583 for _eraName, _postfix, _era in _relevantErasAndFastSim:
584  _setForEra(trackValidatorSeedingTrackingOnly, _eraName, _era, label = locals()["_seedSelectors"+_postfix])
585 
586 
587 trackValidatorConversionTrackingOnly = trackValidatorConversion.clone(label = [x for x in trackValidatorConversion.label if x not in ["ckfInOutTracksFromConversions", "ckfOutInTracksFromConversions"]])
588 
589 # sequences
590 tracksPreValidationTrackingOnly = tracksPreValidation.copy()
591 tracksPreValidationTrackingOnly.replace(tracksValidationSelectors, tracksValidationSelectorsTrackingOnly)
592 
593 trackValidatorsTrackingOnly = _trackValidatorsBase.copy()
594 trackValidatorsTrackingOnly.replace(trackValidatorStandalone, trackValidatorTrackingOnly)
595 trackValidatorsTrackingOnly += (
596  trackValidatorSeedingTrackingOnly +
597  trackValidatorBuildingTrackingOnly
598 )
599 trackValidatorsTrackingOnly.replace(trackValidatorConversionStandalone, trackValidatorConversionTrackingOnly)
600 trackValidatorsTrackingOnly.remove(trackValidatorGsfTracks)
601 fastSim.toModify(trackValidatorsTrackingOnly, lambda x: x.remove(trackValidatorConversionTrackingOnly))
602 
603 
604 tracksValidationTrackingOnly = cms.Sequence(
605  tracksPreValidationTrackingOnly +
606  tracksValidationSelectorsStandalone +
607  tracksValidationSeedSelectorsTrackingOnly +
608  trackValidatorsTrackingOnly
609 )
610 
611 
612 
613 ### Lite mode (only generalTracks and HP)
614 trackValidatorLite = trackValidator.clone(
615  label = ["generalTracks", "cutsRecoTracksHp"]
616 )
617 tracksValidationLite = cms.Sequence(
618  cutsRecoTracksHp +
619  tracksValidationTruth +
620  trackValidatorLite
621 )
Definition: vlib.h:256
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135