import FWCore.ParameterSet.Config as cms from Configuration.Eras.Modifier_tracker_apv_vfp30_2016_cff import tracker_apv_vfp30_2016 as _tracker_apv_vfp30_2016 ### STEP 0 ### # hit building from RecoLocalTracker.SiPixelRecHits.PixelCPEESProducers_cff import * from RecoTracker.TransientTrackingRecHit.TTRHBuilders_cff import * from RecoTracker.TkSeedGenerator.trackerClusterCheck_cfi import trackerClusterCheck as _trackerClusterCheck trackerClusterCheckPreSplitting = _trackerClusterCheck.clone( PixelClusterCollectionLabel='siPixelClustersPreSplitting') # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi import RecoTracker.TkSeedingLayers.PixelLayerQuadruplets_cfi initialStepSeedLayersPreSplitting = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone( ) initialStepSeedLayersPreSplitting.FPix.HitProducer = 'siPixelRecHitsPreSplitting' initialStepSeedLayersPreSplitting.BPix.HitProducer = 'siPixelRecHitsPreSplitting' from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 trackingPhase1.toModify( initialStepSeedLayersPreSplitting, layerList=RecoTracker.TkSeedingLayers.PixelLayerQuadruplets_cfi. PixelLayerQuadruplets.layerList.value()) from Configuration.Eras.Modifier_trackingPhase1QuadProp_cff import trackingPhase1QuadProp trackingPhase1QuadProp.toModify(
import FWCore.ParameterSet.Config as cms from RecoTracker.TkSeedGenerator.trackerClusterCheck_cfi import trackerClusterCheck as _trackerClusterCheck hiRegitMuClusterCheck = _trackerClusterCheck.clone( doClusterCheck = False # do not check for max number of clusters pixel or strips ) from RecoHI.HiMuonAlgos.HiRegitMuonInitialStep_cff import * from RecoHI.HiMuonAlgos.HiRegitMuonPixelPairStep_cff import * from RecoHI.HiMuonAlgos.HiRegitMuonDetachedTripletStep_cff import * from RecoHI.HiMuonAlgos.HiRegitMuonMixedTripletStep_cff import * from RecoHI.HiMuonAlgos.HiRegitMuonPixelLessStep_cff import * from RecoHI.HiMuonAlgos.HiRegitMuonSeededStep_cff import * import RecoTracker.FinalTrackSelectors.trackListMerger_cfi hiGeneralAndRegitMuTracks = RecoTracker.FinalTrackSelectors.trackListMerger_cfi.trackListMerger.clone( TrackProducers = (cms.InputTag('hiRegitMuInitialStepTracks'), cms.InputTag('hiRegitMuPixelPairStepTracks'), cms.InputTag('hiRegitMuMixedTripletStepTracks'), cms.InputTag('hiRegitMuPixelLessStepTracks'), cms.InputTag('hiRegitMuDetachedTripletStepTracks'), cms.InputTag('hiRegitMuonSeededTracksOutIn'), cms.InputTag('hiRegitMuonSeededTracksInOut') ), selectedTrackQuals = cms.VInputTag(cms.InputTag("hiRegitMuInitialStepSelector","hiRegitMuInitialStepLoose"), cms.InputTag("hiRegitMuPixelPairStepSelector","hiRegitMuPixelPairStep"), cms.InputTag("hiRegitMuMixedTripletStepSelector","hiRegitMuMixedTripletStep"), cms.InputTag("hiRegitMuPixelLessStepSelector","hiRegitMuPixelLessStep"), cms.InputTag("hiRegitMuDetachedTripletStepSelector","hiRegitMuDetachedTripletStep"), cms.InputTag("hiRegitMuonSeededTracksOutInSelector","hiRegitMuonSeededTracksOutInHighPurity"), cms.InputTag("hiRegitMuonSeededTracksInOutSelector","hiRegitMuonSeededTracksInOutHighPurity")
import FWCore.ParameterSet.Config as cms from Configuration.Eras.Modifier_tracker_apv_vfp30_2016_cff import tracker_apv_vfp30_2016 as _tracker_apv_vfp30_2016 ### STEP 0 ### # hit building from RecoLocalTracker.SiPixelRecHits.PixelCPEESProducers_cff import * from RecoTracker.TransientTrackingRecHit.TTRHBuilders_cff import * from RecoTracker.TkSeedGenerator.trackerClusterCheck_cfi import trackerClusterCheck as _trackerClusterCheck trackerClusterCheckPreSplitting = _trackerClusterCheck.clone( PixelClusterCollectionLabel = 'siPixelClustersPreSplitting' ) # SEEDING LAYERS import RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi import RecoPixelVertexing.PixelTriplets.quadrupletseedmerging_cff initialStepSeedLayersPreSplitting = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone() initialStepSeedLayersPreSplitting.FPix.HitProducer = 'siPixelRecHitsPreSplitting' initialStepSeedLayersPreSplitting.BPix.HitProducer = 'siPixelRecHitsPreSplitting' from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 trackingPhase1.toModify(initialStepSeedLayersPreSplitting, layerList = RecoPixelVertexing.PixelTriplets.quadrupletseedmerging_cff.PixelSeedMergerQuadruplets.layerList.value() ) from Configuration.Eras.Modifier_trackingPhase1QuadProp_cff import trackingPhase1QuadProp trackingPhase1QuadProp.toModify(initialStepSeedLayersPreSplitting, layerList = RecoPixelVertexing.PixelTriplets.quadrupletseedmerging_cff.PixelSeedMergerQuadruplets.layerList.value() ) # TrackingRegion from RecoTracker.TkTrackingRegions.globalTrackingRegionFromBeamSpot_cfi import globalTrackingRegionFromBeamSpot as _globalTrackingRegionFromBeamSpot
def customiseFor17170(process): from RecoTracker.TkTrackingRegions.globalTrackingRegionFromBeamSpot_cfi import globalTrackingRegionFromBeamSpot as _globalTrackingRegionFromBeamSpot from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cfi import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices from RecoTauTag.HLTProducers.tauRegionalPixelSeedTrackingRegions_cfi import tauRegionalPixelSeedTrackingRegions as _tauRegionalPixelSeedTrackingRegions from RecoTauTag.HLTProducers.seededTrackingRegionsFromBeamSpotFixedZLength_cfi import seededTrackingRegionsFromBeamSpotFixedZLength as _seededTrackingRegionsFromBeamSpotFixedZLength from RecoHI.HiTracking.hiTrackingRegionFromClusterVtx_cfi import hiTrackingRegionFromClusterVtx as _hiTrackingRegionFromClusterVtx from RecoTracker.TkSeedGenerator.trackerClusterCheck_cfi import trackerClusterCheck as _trackerClusterCheck from RecoTracker.TkHitPairs.hitPairEDProducer_cfi import hitPairEDProducer as _hitPairEDProducer from RecoPixelVertexing.PixelTriplets.pixelTripletHLTEDProducer_cfi import pixelTripletHLTEDProducer as _pixelTripletHLTEDProducer from RecoPixelVertexing.PixelTriplets.pixelTripletLargeTipEDProducer_cfi import pixelTripletLargeTipEDProducer as _pixelTripletLargeTipEDProducer from RecoTracker.TkSeedGenerator.multiHitFromChi2EDProducer_cfi import multiHitFromChi2EDProducer as _multiHitFromChi2EDProducer from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsEDProducer_cfi import seedCreatorFromRegionConsecutiveHitsEDProducer as _seedCreatorFromRegionConsecutiveHitsEDProducer from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer_cfi import seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer as _seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer def _copy(old, new, skip=[]): skipSet = set(skip) for key in old.parameterNames_(): if key not in skipSet: setattr(new, key, getattr(old, key)) def _regionHitSet(producer): # region regionProducer = { "GlobalRegionProducerFromBeamSpot": _globalTrackingRegionFromBeamSpot, "GlobalTrackingRegionWithVerticesProducer": _globalTrackingRegionWithVertices, "TauRegionalPixelSeedGenerator": _tauRegionalPixelSeedTrackingRegions, "CandidateSeededTrackingRegionsProducer": _seededTrackingRegionsFromBeamSpotFixedZLength, "HITrackingRegionForPrimaryVtxProducer": _hiTrackingRegionFromClusterVtx, }.get(producer.RegionFactoryPSet.ComponentName.value(), None) if regionProducer is None: # got a region not migrated yet raise Exception( "Encountered %s from module %s which is not yet migrated to the new seeding framework. Please migrate." % (producer.RegionFactoryPSet.ComponentName.value(), producer.label())) regionProducer = regionProducer.clone() # some instances of the following region producers have the # following parameters in the HLT configuration, while the # region producers themselves do not use these parameters skip = { "TauRegionalPixelSeedGenerator": [ "precise", "JetMaxEta", "JetMaxN", "JetMinPt", "beamSpot", "originZPos", "useFakeVertices", "useMultipleScattering", "deltaEta", "deltaPhi" ], "GlobalRegionProducerFromBeamSpot": ["useFakeVertices"], "GlobalTrackingRegionWithVerticesProducer": ["originHalfLength"], "CandidateSeededTrackingRegionsProducer": [ "useFakeVertices", "useMultipleScattering", "originZPos", "vertexSrc", "zErrorVertex", "fixedError", "nSigmaZ", "sigmaZVertex", "useFixedError", "useFoundVertices" ], }.get(producer.RegionFactoryPSet.ComponentName.value(), []) _copy(producer.RegionFactoryPSet.RegionPSet, regionProducer.RegionPSet, skip=skip) if producer.RegionFactoryPSet.ComponentName.value( ) == "GlobalRegionProducerFromBeamSpot": # to preserve old behaviour # if nSigmaZ/originHalfLength was missing, it was internally set to 0 if not hasattr(producer.RegionFactoryPSet.RegionPSet, "nSigmaZ"): regionProducer.RegionPSet.nSigmaZ = 0 if not hasattr(producer.RegionFactoryPSet.RegionPSet, "originHalfLength"): regionProducer.RegionPSet.originHalfLength = 0 # hit doublet generator doubletProducer = _hitPairEDProducer.clone( seedingLayers=producer.OrderedHitsFactoryPSet.SeedingLayers.value( ), trackingRegions=regionLabel, clusterCheck=clusterCheckLabel, ) # hit triplet generator tripletProducer = None skip = ["ComponentName"] if producer.OrderedHitsFactoryPSet.ComponentName.value( ) == "StandardHitPairGenerator": doubletProducer.produceSeedingHitSets = True doubletProducer.maxElement = producer.OrderedHitsFactoryPSet.maxElement.value( ) elif producer.OrderedHitsFactoryPSet.ComponentName.value( ) == "StandardHitTripletGenerator": doubletProducer.produceIntermediateHitDoublets = True tripletProducer = { "PixelTripletHLTGenerator": _pixelTripletHLTEDProducer, "PixelTripletLargeTipGenerator": _pixelTripletLargeTipEDProducer, }.get( producer.OrderedHitsFactoryPSet.GeneratorPSet.ComponentName. value(), None) if tripletProducer is None: # got a triplet generator not migrated yet raise Exception( "Encountered %s from module %s which is not yet migrated to the new seeding framework. Please migrate." % (producer.OrderedHitsFactoryPSet.GeneratorPSet. ComponentName.value(), producer.label())) tripletProducer = tripletProducer.clone( doublets=doubletLabel, produceSeedingHitSets=True, ) elif producer.OrderedHitsFactoryPSet.ComponentName.value( ) == "StandardMultiHitGenerator": doubletProducer.produceIntermediateHitDoublets = True if producer.OrderedHitsFactoryPSet.GeneratorPSet.ComponentName.value( ) != "MultiHitGeneratorFromChi2": raise Exception( "In %s, StandardMultiHitGenerator without MultiHitGeneratorFromChi2, but with %s" % label, producer.OrderedHitsFactoryPSet.GeneratorPSet. ComponentName.value()) tripletProducer = _multiHitFromChi2EDProducer.clone( doublets=doubletLabel, ) # some instances have "debug" parameter set while the producer does not use it skip.append("debug") else: # got a hit generator not migrated yet raise Exception( "Encountered %s from module %s which is not yet migrated to the new seeding framework. Please migrate." % (producer.OrderedHitsFactoryPSet.ComponentName.value(), producer.label())) if tripletProducer: _copy(producer.OrderedHitsFactoryPSet.GeneratorPSet, tripletProducer, skip=skip) doubletProducer.maxElement = 0 # this was the old behaviour when calling doublet generator from triplet generator return (regionProducer, doubletProducer, tripletProducer) # Bit of a hack to replace a module with another, but works # # In principle setattr(process) could work too, but it expands the # sequences and I don't want that modifier = cms.Modifier() modifier._setChosen() for producer in producers_by_type(process, "SeedGeneratorFromRegionHitsEDProducer"): label = producer.label() if "Seeds" in label: regionLabel = label.replace("Seeds", "TrackingRegions") clusterCheckLabel = label.replace("Seeds", "ClusterCheck") doubletLabel = label.replace("Seeds", "HitDoublets") tripletLabel = label.replace("Seeds", "HitTriplets") else: regionLabel = label + "TrackingRegions" clusterCheckLabel = label + "ClusterCheck" doubletLabel = label + "HitPairs" tripletLabel = label + "HitTriplets" ## Construct new producers # cluster check clusterCheckProducer = _trackerClusterCheck.clone() _copy(producer.ClusterCheckPSet, clusterCheckProducer) if not hasattr(producer.ClusterCheckPSet, "cut"): clusterCheckProducer.cut = "" # to preserve old behaviour # region and hit ntuplet (regionProducer, doubletProducer, tripletProducer) = _regionHitSet(producer) # seed creator seedCreatorPSet = producer.SeedCreatorPSet if hasattr(seedCreatorPSet, "refToPSet_"): seedCreatorPSet = getattr(process, seedCreatorPSet.refToPSet_.value()) seedProducer = { "SeedFromConsecutiveHitsCreator": _seedCreatorFromRegionConsecutiveHitsEDProducer, "SeedFromConsecutiveHitsTripletOnlyCreator": _seedCreatorFromRegionConsecutiveHitsTripletOnlyEDProducer, }.get(seedCreatorPSet.ComponentName.value(), None) if seedProducer is None: # got a seed creator not migrated yet raise Exception( "Encountered %s from module %s which is not yet migrated to the new seeding framework. Please migrate." % (producer.SeedCreatorPSet.ComponentName.value(), producer.label())) seedProducer = seedProducer.clone( seedingHitSets=tripletLabel if tripletProducer else doubletLabel) _copy( seedCreatorPSet, seedProducer, skip=[ "ComponentName", "maxseeds", # some HLT seed creators include maxseeds parameter which does nothing except with CosmicSeedCreator ]) seedProducer.SeedComparitorPSet = producer.SeedComparitorPSet # Set new producers to process setattr(process, regionLabel, regionProducer) setattr(process, clusterCheckLabel, clusterCheckProducer) setattr(process, doubletLabel, doubletProducer) if tripletProducer: setattr(process, tripletLabel, tripletProducer) modifier.toReplaceWith(producer, seedProducer) # Modify sequences (also paths to be sure, altough in practice # the seeding modules should be only in sequences in HLT?) for seqs in [process.sequences_(), process.paths_()]: for seqName, seq in seqs.iteritems(): # Is there really no simpler way to add # regionProducer+doubletProducer+tripletProducer # before producer in the sequence? # # cms.Sequence.replace() would look much simpler, but # it traverses the contained sequences too, leading to # multiple replaces as we already loop over all # sequences of a cms.Process, and also expands the # contained sequences if a replacement occurs there. try: index = seq.index(producer) except: continue # Inserted on reverse order, succeeding module will be # inserted before preceding one if tripletProducer: seq.insert(index, tripletProducer) seq.insert(index, doubletProducer) seq.insert(index, clusterCheckProducer) seq.insert(index, regionProducer) for producer in producers_by_type(process, "PixelTrackProducer"): label = producer.label() if "PixelTracks" in label: regionLabel = label.replace("PixelTracks", "PixelTracksTrackingRegions") doubletLabel = label.replace("PixelTracks", "PixelTracksHitDoublets") tripletLabel = label.replace("PixelTracks", "PixelTracksHitTriplets") else: regionLabel = label + "TrackingRegions" doubletLabel = label + "HitPairs" tripletLabel = label + "HitTriplets" ## Construct new producers # region and hit ntuplet (regionProducer, doubletProducer, tripletProducer) = _regionHitSet(producer) # Disable cluster check as in legacy PixelTrackProducer doubletProducer.clusterCheck = "" # Remove old PSets del producer.RegionFactoryPSet del producer.OrderedHitsFactoryPSet # Set ntuplet input producer.SeedingHitSets = cms.InputTag( tripletLabel if tripletProducer else doubletLabel) # Set new producers to process setattr(process, regionLabel, regionProducer) setattr(process, doubletLabel, doubletProducer) if tripletProducer: setattr(process, tripletLabel, tripletProducer) for seqs in [process.sequences_(), process.paths_()]: for seqName, seq in seqs.iteritems(): try: index = seq.index(producer) except: continue # Inserted on reverse order, succeeding module will be # inserted before preceding one if tripletProducer: seq.insert(index, tripletProducer) seq.insert(index, doubletProducer) seq.insert(index, regionProducer) return process