Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:28:10

0001 # This file is the authoritative source of the order of tracking
0002 # iterations. It is used in RECO, DQM, and VALIDATION. Note that here
0003 # InitialStepPreSplitting is not counted as an iteration.
0004 import FWCore.ParameterSet.Config as cms
0005 
0006 _defaultEraName = ""
0007 _nonDefaultEraNames = ["trackingLowPU", "trackingPhase1", "trackingPhase2PU140"]
0008 
0009 # name, postfix, era
0010 _defaultEra = (_defaultEraName, "", None)
0011 _nonDefaultEras = [
0012     (_name, "_"+_name, getattr(__import__('Configuration.Eras.Modifier_'+_name+'_cff',globals(),locals(),[_name],0),_name)) \
0013     for _name in _nonDefaultEraNames
0014 ]
0015 
0016 _allEras = [_defaultEra] + _nonDefaultEras
0017 
0018 
0019 _iterations = [
0020     "InitialStep",
0021     "DetachedTripletStep",
0022     "LowPtTripletStep",
0023     "PixelPairStep",
0024     "MixedTripletStep",
0025     "PixelLessStep",
0026     "TobTecStep",
0027     "JetCoreRegionalStep",
0028 ]
0029 _iterations_trackingLowPU = [
0030     "InitialStep",
0031     "LowPtTripletStep",
0032     "PixelPairStep",
0033     "DetachedTripletStep",
0034     "MixedTripletStep",
0035     "PixelLessStep",
0036     "TobTecStep",
0037 ]
0038 _iterations_trackingPhase1 = [
0039     "InitialStep",
0040     "LowPtQuadStep",
0041     "HighPtTripletStep",
0042     "LowPtTripletStep",
0043     "DetachedQuadStep",
0044     "DetachedTripletStep",
0045     "PixelPairStep",
0046     "MixedTripletStep",
0047     "PixelLessStep",
0048     "TobTecStep",
0049 ]
0050 
0051 from Configuration.ProcessModifiers.displacedTracking_cff import displacedTracking
0052 displacedTracking.toModify(_iterations_trackingPhase1, func=lambda x: x.append('DisplacedGeneralStep'))
0053 
0054 _iterations_trackingPhase1.append('JetCoreRegionalStep')
0055 
0056 _iterations_trackingPhase2PU140 = [
0057     "InitialStep",
0058     "HighPtTripletStep",
0059     "LowPtQuadStep",
0060     "LowPtTripletStep",
0061     "DetachedQuadStep",
0062     "PixelPairStep",
0063 ]
0064 from Configuration.ProcessModifiers.vectorHits_cff import vectorHits
0065 vectorHits.toModify(_iterations_trackingPhase2PU140, func=lambda x: x.append('PixelLessStep'))
0066 _iterations_muonSeeded = [
0067     "MuonSeededStepInOut",
0068     "MuonSeededStepOutIn",
0069 ]
0070 _iterations_muonSeeded_trackingPhase1 = [
0071     "MuonSeededStepInOut",
0072     "MuonSeededStepOutIn",
0073 ]
0074 #Phase2
0075 _iterations_muonSeeded_trackingPhase2PU140 = [
0076     "MuonSeededStepInOut",
0077     "MuonSeededStepOutIn",
0078 ]
0079 _multipleSeedProducers = {
0080     "MixedTripletStep": ["A", "B"],
0081     "TobTecStep": ["Pair", "Tripl"],
0082 }
0083 _multipleSeedProducers_trackingLowPU = {
0084     "MixedTripletStep": ["A", "B"],
0085 }
0086 _multipleSeedProducers_trackingPhase1 = {
0087     "PixelPairStep": ["A", "B"],
0088     "MixedTripletStep": ["A", "B"],
0089     "TobTecStep": ["Pair", "Tripl"],
0090 }
0091 from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore
0092 seedingDeepCore.toModify(_multipleSeedProducers_trackingPhase1, func=lambda x: x.update({"JetCoreRegionalStep": ["Barrel","Endcap"]}))
0093 
0094 
0095 _multipleSeedProducers_trackingPhase2PU140 = {}
0096 _oldStyleHasSelector = set([
0097     "InitialStep",
0098     "HighPtTripletStep",
0099     "LowPtQuadStep",
0100     "LowPtTripletStep",
0101     "PixelPairStep",
0102     "PixelLessStep",
0103     "TobTecStep",
0104 ])
0105 
0106 from Configuration.ProcessModifiers.displacedRegionalTracking_cff import displacedRegionalTracking
0107 displacedRegionalTracking.toModify(_iterations_muonSeeded_trackingPhase1, func=lambda x: x.append('DisplacedRegionalStep'))
0108 displacedRegionalTracking.toModify(_multipleSeedProducers_trackingPhase1, func=lambda x: x.update({'DisplacedRegionalStep': ['Pair', 'Tripl']}))
0109 
0110 from RecoLocalTracker.SubCollectionProducers.trackClusterRemover_cfi import trackClusterRemover as _trackClusterRemover
0111 _trackClusterRemoverBase = _trackClusterRemover.clone(
0112     maxChi2                                  = 9.0,
0113     pixelClusters                            = "siPixelClusters",
0114     stripClusters                            = "siStripClusters",
0115     TrackQuality                             = 'highPurity',
0116     minNumberOfLayersWithMeasBeforeFiltering = 0,
0117 )
0118 
0119 from Configuration.ProcessModifiers.pp_on_AA_cff import pp_on_AA
0120 from Configuration.ProcessModifiers.trackdnn_cff import trackdnn
0121 (pp_on_AA & (~trackdnn) ).toModify(_trackClusterRemoverBase, TrackQuality = 'tight')
0122 
0123 #Phase2 : configuring the phase2 track Cluster Remover
0124 from RecoLocalTracker.SubCollectionProducers.phase2trackClusterRemover_cfi import phase2trackClusterRemover as _phase2trackClusterRemover
0125 _trackClusterRemoverBase_trackingPhase2PU140 = _phase2trackClusterRemover.clone(
0126     maxChi2                                  = 9.0,
0127     phase2pixelClusters                      = "siPixelClusters",
0128     phase2OTClusters                         = "siPhase2Clusters",
0129     TrackQuality                             = 'highPurity',
0130     minNumberOfLayersWithMeasBeforeFiltering = 0,
0131 )
0132 
0133 def _modulePrefix(iteration):
0134     return iteration[0].lower()+iteration[1:]
0135 
0136 def _clusterRemover(iteration):
0137     return _modulePrefix(iteration)+"Clusters"
0138 
0139 def _tracks(iteration):
0140     return _modulePrefix(iteration)+"Tracks"
0141 
0142 def _classifier(iteration, oldStyle=False, oldStyleQualityMasks=False):
0143     pre = _modulePrefix(iteration)
0144     if oldStyle:
0145         if iteration in _oldStyleHasSelector:
0146             return pre+"Selector:" + ("QualityMasks" if oldStyleQualityMasks else pre)
0147         else:
0148             return pre
0149     else:
0150         return pre+":QualityMasks"
0151 
0152 def allEras():
0153     return _allEras
0154 
0155 def nonDefaultEras():
0156     return _nonDefaultEras
0157 
0158 def createEarlyTask(eraName, postfix, modDict):
0159     task = cms.Task()
0160     for it in globals()["_iterations"+postfix]:
0161         task.add(modDict[it+'Task'])
0162     return task
0163 
0164 def iterationAlgos(postfix, includeSequenceName=False):
0165     muonVariable = "_iterations_muonSeeded"+postfix
0166     iterations = globals()["_iterations"+postfix] + globals().get(muonVariable, _iterations_muonSeeded)
0167 
0168     if includeSequenceName:
0169         return [(_modulePrefix(i), i) for i in iterations]
0170     else:
0171         return [_modulePrefix(i) for i in iterations]
0172 
0173 def _seedOrTrackProducers(postfix, typ):
0174     ret = []
0175     iters = globals()["_iterations"+postfix]
0176     if typ == "Seeds":
0177         multipleSeedProducers = globals()["_multipleSeedProducers"+postfix]
0178     else:
0179         multipleSeedProducers = None
0180     for i in iters:
0181         seeder = _modulePrefix(i)+typ
0182         if multipleSeedProducers is not None and i in multipleSeedProducers:
0183             ret.extend([seeder+m for m in multipleSeedProducers[i]])
0184         else:
0185             ret.append(seeder)
0186 
0187     for i in globals().get("_iterations_muonSeeded"+postfix, _iterations_muonSeeded):
0188         if _modulePrefix(i).endswith("Step"):
0189             ret.append(_modulePrefix(i)+typ)
0190         else:
0191             ret.append(_modulePrefix(i).replace("Step", typ))
0192 
0193     return ret
0194 
0195 def seedProducers(postfix):
0196     return _seedOrTrackProducers(postfix, "Seeds")
0197 
0198 def trackProducers(postfix):
0199     return _seedOrTrackProducers(postfix, "Tracks")
0200 
0201 def clusterRemoverForIter(iteration, eraName="", postfix="", module=None):
0202     if module is None:
0203         module = _trackClusterRemoverBase.clone()
0204     if eraName == "trackingPhase2PU140":
0205         module = globals().get("_trackClusterRemoverBase"+postfix, _trackClusterRemoverBase)
0206 
0207     iters = globals()["_iterations"+postfix]
0208     try:
0209         # DisplacedRegionalStep is a special case because it comes after the
0210         # usual muon-seeded steps
0211         ind = iters.index(iteration) if iteration != "DisplacedRegionalStep" else len(iters)
0212     except ValueError:
0213         # if the iteration is not active in era, just return the same
0214         return module
0215 
0216     if ind == 0:
0217         raise Exception("Iteration %s is the first iteration in era %s, asking cluster remover configuration does not make sense" % (iteration, eraName))
0218     prevIter = iters[ind-1]
0219     # JetCoreRegionalStep uses all clusters, so if that is the previous
0220     # iteration, use the one before that for cluster removal
0221     if prevIter == "JetCoreRegionalStep":
0222         prevIter = iters[ind-2]
0223 
0224     customize = dict(
0225         trajectories          = _tracks(prevIter),
0226         oldClusterRemovalInfo = _clusterRemover(prevIter) if ind >= 2 else "", # 1st iteration does not have cluster remover
0227     )
0228     if eraName in ["trackingPhase2PU140"]:
0229         customize["overrideTrkQuals"] = _classifier(prevIter, oldStyle=True) # old-style selector
0230     elif eraName == "trackingLowPU":
0231         customize["overrideTrkQuals"] = _classifier(prevIter, oldStyle=True, oldStyleQualityMasks=True) # old-style selector with 'QualityMasks' instance label
0232     else:
0233         customize["trackClassifier"] = _classifier(prevIter)
0234 
0235     return module.clone(**customize)