1 import FWCore.ParameterSet.Config
as cms
7 from Validation.RecoTrack.trajectorySeedTracks_cfi
import trajectorySeedTracks
as _trajectorySeedTracks
11 import cutsRecoTracks_cfi
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
20 import RecoTracker.IterativeTracking.iterativeTkConfig
as _cfg
21 from Configuration.Eras.Modifier_fastSim_cff
import fastSim
25 for _eraName, _postfix, _era
in _cfg.allEras():
26 _seedProd = [
"initialStepSeedsPreSplitting"]
27 _trackProd = [
"initialStepTracksPreSplitting"]
28 if _eraName
in [
"trackingLowPU",
"trackingPhase1PU70",
"trackingPhase2PU140"]:
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)
36 _removeForFastSimSeedProducers =[
"initialStepSeedsPreSplitting",
37 "jetCoreRegionalStepSeeds",
38 "muonSeededSeedsInOut",
39 "muonSeededSeedsOutIn"]
40 _seedProducers_fastSim = [ x
for x
in _seedProducers
if x
not in _removeForFastSimSeedProducers]
42 _removeForFastTrackProducers = [
"initialStepTracksPreSplitting",
43 "jetCoreRegionalStepTracks",
44 "muonSeededTracksInOut",
45 "muonSeededTracksOutIn"]
46 _trackProducers_fastSim = [ x
for x
in _trackProducers
if x
not in _removeForFastTrackProducers]
50 if algo !=
"generalTracks":
51 sel = algo[0].
upper()+algo[1:]
52 return "cutsRecoTracks"+sel
58 if algo ==
"generalTracks":
61 if modName
not in modDict:
62 mod = cutsRecoTracks_cfi.cutsRecoTracks.clone(algorithm=[algo])
63 modDict[modName] = mod
65 mod = modDict[modName]
74 modNameHp = modName+
"Hp"
75 if modNameHp
not in modDict:
76 if algo ==
"generalTracks":
77 mod = cutsRecoTracks_cfi.cutsRecoTracks.clone(quality=[
"highPurity"])
79 mod = modDict[modName].
clone(quality=[
"highPurity"])
80 modDict[modNameHp] = mod
82 mod = modDict[modNameHp]
83 names.append(modNameHp)
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
95 mod = modDict[modNameNew]
96 names.append(modNameNew)
102 for modName
in modules:
103 if modName[-2:] ==
"Hp":
104 modNameNew = modName[:-2] + midfix +
"Hp"
106 modNameNew = modName + midfix
107 if modNameNew
not in modDict:
108 mod = modDict[modName].
clone()
109 setattr(mod, algoParam, mod.algorithm.value())
111 modDict[modNameNew] = mod
113 mod = modDict[modNameNew]
114 names.append(modNameNew)
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
126 mod = modDict[modName]
127 names.append(modName)
131 _relevantEras = _cfg.allEras()
132 _relevantErasAndFastSim = _relevantEras + [(
"fastSim",
"_fastSim", fastSim)]
136 if isinstance(arg, list):
139 ret.append(modDict[arg+postfix])
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 _")
145 _eras = _relevantErasAndFastSim
if includeFastSim
else _relevantEras
146 for eraName, postfix, _era
in _eras:
148 _args.extend(plainArgs)
149 ret =
function(*_args, modDict=modDict)
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]
156 defaultSequenceName = sequence+_eras[0][0]
157 defaultSequence = modDict[defaultSequenceName]
158 modDict[defaultSequenceName[1:]] = defaultSequence
161 if modifySequence
is not None:
162 for eraName, postfix, _era
in _eras:
166 for _eraName, _postfix, _era
in _eras[1:]:
167 _era.toReplaceWith(defaultSequence, modDict[sequence+_postfix])
170 for key, value
in kwargs.iteritems():
171 setattr(module, key, value)
173 era.toModify(module, **kwargs)
179 def _findSeedingLayers(name):
180 prod = getattr(_iterativeTk_cff, name)
181 if hasattr(prod,
"triplets"):
182 if hasattr(prod,
"layerList"):
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()
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()
196 seedingLayersName = seedProd.OrderedHitsFactoryPSet.SeedingLayers.getModuleLabel()
197 elif hasattr(seedProd,
"seedingHitSets"):
198 seedingLayersName = _findSeedingLayers(seedProd.seedingHitSets.getModuleLabel())
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])
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)
228 typeName = mod._TypedParameterizable__type
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))
238 for _eraName, _postfix, _era
in _relevantEras:
242 _sequenceForEachEra(_addSelectorsByAlgo, args=[
"_algos"], names=
"_selectorsByAlgo", sequence=
"_tracksValidationSelectorsByAlgo", modDict=globals())
245 _sequenceForEachEra(_addSelectorsByHp, args=[
"_algos"], names=
"_selectorsByAlgoHp", sequence=
"_tracksValidationSelectorsByAlgoHp", modDict=globals())
247 for _eraName, _postfix, _era
in _relevantEras:
248 selectors = locals()[
"_selectorsByAlgoHp"+_postfix]
249 locals()[
"_generalTracksHp"+_postfix] = selectors[0]
250 locals()[
"_selectorsByAlgoHp"+_postfix] = selectors[1:]
253 import PhysicsTools.RecoAlgos.btvTracks_cfi
as btvTracks_cfi
254 cutsRecoTracksBtvLike = btvTracks_cfi.btvTrackRefs.clone()
258 ak4JetTracksAssociatorExplicitAll = ak4JTA_cff.ak4JetTracksAssociatorExplicit.clone(
262 import CommonTools.RecoAlgos.jetTracksAssociationToTrackRefs_cfi
as jetTracksAssociationToTrackRefs_cfi
263 cutsRecoTracksAK4PFJets = jetTracksAssociationToTrackRefs_cfi.jetTracksAssociationToTrackRefs.clone(
264 association =
"ak4JetTracksAssociatorExplicitAll",
271 trackingParticlesSignal = _trackingParticleRefSelector.clone(
282 generalTracksPt09 = cutsRecoTracks_cfi.cutsRecoTracks.clone(ptMin=0.9)
285 args=[[
"_generalTracksHp"]],
286 plainArgs=[
"Pt09",
"generalTracksPt09"],
287 names=
"_selectorsPt09", sequence=
"_tracksValidationSelectorsPt09",
288 modifySequence=
lambda seq:seq.insert(0, generalTracksPt09))
292 generalTracksFromPV = _trackWithVertexRefSelector.clone(
293 src =
"generalTracks",
298 vertexTag =
"offlinePrimaryVertices",
306 args=[[
"_generalTracksHp"]],
307 plainArgs=[
"FromPV",
"generalTracksFromPV"],
308 names=
"_selectorsFromPV", sequence=
"_tracksValidationSelectorsFromPV",
309 modifySequence=
lambda seq: seq.insert(0, generalTracksFromPV))
312 generalTracksFromPVPt09 = generalTracksPt09.clone(src=
"generalTracksFromPV")
315 args=[[
"_generalTracksHp"]],
316 plainArgs=[
"FromPVPt09",
"generalTracksFromPVPt09"],
317 names=
"_selectorsFromPVPt09", sequence=
"_tracksValidationSelectorsFromPVPt09",
318 modifySequence=
lambda seq: seq.insert(0, generalTracksFromPVPt09))
321 trackingParticlesConversion = _trackingParticleConversionRefSelector.clone()
324 trackingParticlesElectron = _trackingParticleRefSelector.clone(
335 trackValidator = Validation.RecoTrack.MultiTrackValidator_cfi.multiTrackValidator.clone(
336 useLogPt = cms.untracked.bool(
True),
338 doPVAssociationPlots =
True
343 fastSim.toModify(trackValidator,
346 for _eraName, _postfix, _era
in _relevantEras:
348 label = [
"generalTracks", locals()[
"_generalTracksHp"+_postfix]] +
349 locals()[
"_selectorsByAlgo"+_postfix] + locals()[
"_selectorsByAlgoHp"+_postfix] +
350 [
"generalTracksPt09"] + locals()[
"_selectorsPt09"+_postfix] +
352 "cutsRecoTracksBtvLike",
353 "cutsRecoTracksAK4PFJets"
356 _setForEra(trackValidator.histoProducerAlgoBlock, _eraName, _era, seedingLayerSets=locals()[
"_seedingLayerSets"+_postfix])
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,
370 for _eraName, _postfix, _era
in _relevantEras:
371 _setForEra(trackValidatorFromPV, _eraName, _era, label = [
"generalTracksFromPV"] + locals()[
"_selectorsFromPV"+_postfix] + [
"generalTracksFromPVPt09"] + locals()[
"_selectorsFromPVPt09"+_postfix])
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(),
383 doSimTrackPlots =
False,
387 trackValidatorAllTPEffic = trackValidator.clone(
388 dirName =
"Tracking/TrackAllTPEffic/",
389 label = [x
for x
in trackValidator.label.value()
if "Pt09" not in x],
391 doRecoTrackPlots =
False,
392 doPVAssociationPlots =
False,
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]])
404 trackValidatorConversion = trackValidator.clone(
405 dirName =
"Tracking/TrackConversion/",
408 "conversionStepTracks",
409 "ckfInOutTracksFromConversions",
410 "ckfOutInTracksFromConversions",
412 label_tp_effic =
"trackingParticlesConversion",
413 label_tp_effic_refvector =
True,
414 associators = [
"quickTrackAssociatorByHits"],
415 UseAssociators =
True,
418 doPVAssociationPlots =
False,
419 calculateDrSingleCollection =
False,
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()
428 trackValidatorGsfTracks = trackValidatorConversion.clone(
429 dirName =
"Tracking/TrackGsf/",
430 label = [
"electronGsfTracks"],
431 label_tp_effic =
"trackingParticlesElectron",
436 tracksValidationSelectors = cms.Sequence(
437 tracksValidationSelectorsByAlgo +
438 tracksValidationSelectorsByAlgoHp +
439 cutsRecoTracksBtvLike +
440 ak4JetTracksAssociatorExplicitAll +
441 cutsRecoTracksAK4PFJets
443 tracksValidationTruth = cms.Sequence(
445 quickTrackAssociatorByHits +
446 trackingParticleRecoTrackAsssociation +
447 VertexAssociatorByPositionAndTracks +
448 trackingParticleNumberOfLayersProducer
450 fastSim.toModify(tracksValidationTruth,
lambda x: x.remove(tpClusterProducer))
452 tracksPreValidation = cms.Sequence(
453 tracksValidationSelectors +
454 tracksValidationSelectorsPt09 +
455 tracksValidationSelectorsFromPV +
456 tracksValidationSelectorsFromPVPt09 +
457 tracksValidationTruth +
458 cms.ignore(trackingParticlesSignal) +
459 cms.ignore(trackingParticlesElectron) +
460 trackingParticlesConversion
462 fastSim.toReplaceWith(tracksPreValidation, tracksPreValidation.copyAndExclude([
463 trackingParticlesElectron,
464 trackingParticlesConversion
467 tracksValidation = cms.Sequence(
468 tracksPreValidation +
470 trackValidatorFromPV +
471 trackValidatorFromPVAllTP +
472 trackValidatorAllTPEffic +
473 trackValidatorConversion +
474 trackValidatorGsfTracks
476 fastSim.toReplaceWith(tracksValidation, tracksValidation.copyAndExclude([trackValidatorConversion, trackValidatorGsfTracks]))
481 for _eraName, _postfix, _era
in _relevantEras:
482 locals()[
"_selectorsByAlgoAndHp"+_postfix] = locals()[
"_selectorsByAlgo"+_postfix] + locals()[
"_selectorsByAlgoHp"+_postfix]
484 args = [
"_selectorsByAlgoAndHp"], plainArgs = [
"ByOriginalAlgo",
"originalAlgorithm"],
485 names =
"_selectorsByOriginalAlgo", sequence =
"_tracksValidationSelectorsByOriginalAlgoStandalone")
487 args = [
"_selectorsByAlgoAndHp"], plainArgs = [
"ByAlgoMask",
"algorithmMaskContains"],
488 names =
"_selectorsByAlgoMask", sequence =
"_tracksValidationSelectorsByAlgoMaskStandalone")
492 args = [
"_selectorsByAlgoAndHp"], plainArgs = [
"Pt09",
"generalTracksPt09"],
493 names =
"_selectorsPt09Standalone", sequence =
"_tracksValidationSelectorsPt09Standalone")
497 args = [
"_selectorsByAlgoAndHp"], plainArgs = [
"FromPV",
"generalTracksFromPV"],
498 names =
"_selectorsFromPVStandalone", sequence =
"_tracksValidationSelectorsFromPVStandalone")
502 args = [
"_selectorsByAlgoAndHp"], plainArgs = [
"FromPVPt09",
"generalTracksFromPVPt09"],
503 names =
"_selectorsFromPVPt09Standalone", sequence =
"_tracksValidationSelectorsFromPVPt09Standalone")
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])
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])
514 trackValidatorFromPVAllTPStandalone = trackValidatorFromPVAllTP.clone(
515 label = trackValidatorFromPVStandalone.label.value()
517 trackValidatorAllTPEfficStandalone = trackValidatorAllTPEffic.clone(
518 label = [ x
for x
in trackValidator.label.value()
if x
not in [
"cutsRecoTracksBtvLike",
"cutsRecoTracksAK4PFJets"]
and "Pt09" not in x]
521 trackValidatorConversionStandalone = trackValidatorConversion.clone( label = [x
for x
in trackValidatorConversion.label
if x !=
"convStepTracks"])
524 tracksValidationSelectorsStandalone = cms.Sequence(
525 tracksValidationSelectorsByOriginalAlgoStandalone +
526 tracksValidationSelectorsByAlgoMaskStandalone +
527 tracksValidationSelectorsPt09Standalone +
528 tracksValidationSelectorsFromPVStandalone +
529 tracksValidationSelectorsFromPVPt09Standalone
534 _trackValidatorsBase = cms.Sequence(
535 trackValidatorStandalone +
536 trackValidatorFromPVStandalone +
537 trackValidatorFromPVAllTPStandalone +
538 trackValidatorAllTPEfficStandalone +
539 trackValidatorConversionStandalone +
540 trackValidatorGsfTracks
542 trackValidatorsStandalone = _trackValidatorsBase.copy()
543 fastSim.toModify(trackValidatorsStandalone,
lambda x: x.remove(trackValidatorConversionStandalone) )
545 tracksValidationStandalone = cms.Sequence(
546 ak4PFL1FastL2L3CorrectorChain +
547 tracksPreValidation +
548 tracksValidationSelectorsStandalone +
549 trackValidatorsStandalone
555 tracksValidationSelectorsTrackingOnly = tracksValidationSelectors.copyAndExclude([ak4JetTracksAssociatorExplicitAll,cutsRecoTracksAK4PFJets])
556 _sequenceForEachEra(_addSeedToTrackProducers, args=[
"_seedProducers"], names=
"_seedSelectors", sequence=
"_tracksValidationSeedSelectorsTrackingOnly", includeFastSim=
True, modDict=globals())
559 trackValidatorTrackingOnly = trackValidatorStandalone.clone(label = [ x
for x
in trackValidatorStandalone.label
if x !=
"cutsRecoTracksAK4PFJets"] )
561 _trackValidatorSeedingBuildingTrackingOnly = trackValidatorTrackingOnly.clone(
562 associators = [
"quickTrackAssociatorByHits"],
563 UseAssociators =
True,
565 doPVAssociationPlots =
False,
568 trackValidatorBuildingTrackingOnly = _trackValidatorSeedingBuildingTrackingOnly.clone(
569 dirName =
"Tracking/TrackBuilding/",
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])
578 trackValidatorSeedingTrackingOnly = _trackValidatorSeedingBuildingTrackingOnly.clone(
579 dirName =
"Tracking/TrackSeeding/",
580 label = _seedSelectors,
583 for _eraName, _postfix, _era
in _relevantErasAndFastSim:
584 _setForEra(trackValidatorSeedingTrackingOnly, _eraName, _era, label = locals()[
"_seedSelectors"+_postfix])
587 trackValidatorConversionTrackingOnly = trackValidatorConversion.clone(label = [x
for x
in trackValidatorConversion.label
if x
not in [
"ckfInOutTracksFromConversions",
"ckfOutInTracksFromConversions"]])
590 tracksPreValidationTrackingOnly = tracksPreValidation.copy()
591 tracksPreValidationTrackingOnly.replace(tracksValidationSelectors, tracksValidationSelectorsTrackingOnly)
593 trackValidatorsTrackingOnly = _trackValidatorsBase.copy()
594 trackValidatorsTrackingOnly.replace(trackValidatorStandalone, trackValidatorTrackingOnly)
595 trackValidatorsTrackingOnly += (
596 trackValidatorSeedingTrackingOnly +
597 trackValidatorBuildingTrackingOnly
599 trackValidatorsTrackingOnly.replace(trackValidatorConversionStandalone, trackValidatorConversionTrackingOnly)
600 trackValidatorsTrackingOnly.remove(trackValidatorGsfTracks)
601 fastSim.toModify(trackValidatorsTrackingOnly,
lambda x: x.remove(trackValidatorConversionTrackingOnly))
604 tracksValidationTrackingOnly = cms.Sequence(
605 tracksPreValidationTrackingOnly +
606 tracksValidationSelectorsStandalone +
607 tracksValidationSeedSelectorsTrackingOnly +
608 trackValidatorsTrackingOnly
614 trackValidatorLite = trackValidator.clone(
615 label = [
"generalTracks",
"cutsRecoTracksHp"]
617 tracksValidationLite = cms.Sequence(
619 tracksValidationTruth +
def _addSelectorsByOriginalAlgoMask
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
def _addSeedToTrackProducers