예제 #1
0
def customizeHLTforMC(process, _fastSim=False):
    """adapt the HLT to run on MC, instead of data
  see Configuration/StandardSequences/Reconstruction_Data_cff.py
  which does the opposite, for RECO"""

    # PFRecHitProducerHCAL
    if 'hltParticleFlowRecHitHCAL' in process.__dict__:
        process.hltParticleFlowRecHitHCAL.ApplyPulseDPG = cms.bool(False)
        process.hltParticleFlowRecHitHCAL.LongShortFibre_Cut = cms.double(
            1000000000.0)

    # customise hltHbhereco to use the Method 3 time slew parametrization and response correction for Monte Carlo (PR #11091)
    if 'hltHbhereco' in process.__dict__:
        if process.hltHbhereco._TypedParameterizable__type == 'HcalHitReconstructor':
            # 2015-2016 Run 2
            process.hltHbhereco.pedestalSubtractionType = cms.int32(1)
            process.hltHbhereco.pedestalUpperLimit = cms.double(2.7)
            process.hltHbhereco.timeSlewParsType = cms.int32(3)
            # new time slew parametrisation
            process.hltHbhereco.timeSlewPars = cms.vdouble(
                12.2999, -2.19142, 0, 12.2999, -2.19142, 0, 12.2999, -2.19142,
                0)
            # old response correction, matching the 2015D 25ns data
            process.hltHbhereco.respCorrM3 = cms.double(1.0)
        else:
            # 2017 Phase I
            process.hltHbhereco.algorithm.respCorrM3 = cms.double(1.0)

    if _fastSim:

        fastsim = cms.ProcessFragment(process.name_())
        fastsim.load("FastSimulation.HighLevelTrigger.HLTSetup_cff")

        fastSimUnsupportedPaths = (

            # paths for which a recovery is not foreseen/possible
            "AlCa_*_v*",
            "DQM_*_v*",
            "HLT_*Calibration_v*",
            "HLT_DTErrors_v*",
            "HLT_Random_v*",
            "HLT_HcalNZS_v*",
            "HLT_HcalPhiSym_v*",
            "HLT_Activity_Ecal*_v*",
            "HLT_IsoTrackHB_v*",
            "HLT_IsoTrackHE_v*",
            "HLT_L1SingleMuOpen_AntiBPTX_v*",
            "HLT_JetE*_NoBPTX*_v*",
            "HLT_L2Mu*_NoBPTX*_v*",
            "HLT_Beam*_v*",
            #"HLT_L1Tech_*_v*",
            "HLT_HI*",
            "HLT_PA*",
            "HLT_GlobalRunHPDNoise_v*",
            "HLT_L1TrackerCosmics_v*",
            "HLT_HcalUTCA_v*",
            "HLT_L1FatEvents_v*",

            # TODO: paths not supported by FastSim, but for which a recovery should be attempted
            "HLT_DoubleMu33NoFiltersNoVtx_v*",
            "HLT_DoubleMu38NoFiltersNoVtx_v*",
            "HLT_Mu38NoFiltersNoVtx_Photon38_CaloIdL_v*",
            "HLT_Mu42NoFiltersNoVtx_Photon42_CaloIdL_v*",
            "HLT_DoubleMu23NoFiltersNoVtxDisplaced_v*",
            "HLT_DoubleMu28NoFiltersNoVtxDisplaced_v*",
            "HLT_Mu28NoFiltersNoVtxDisplaced_Photon28_CaloIdL_v*",
            "HLT_Mu33NoFiltersNoVtxDisplaced_Photon33_CaloIdL_v*",
            "HLT_HT350_DisplacedDijet80_Tight_DisplacedTrack_v*",
            "HLT_HT350_DisplacedDijet80_DisplacedTrack_v*",
            "HLT_HT500_DisplacedDijet40_Inclusive_v*",
            "HLT_HT350_DisplacedDijet40_DisplacedTrack_v*",
            "HLT_HT550_DisplacedDijet40_Inclusive_v*",
            "HLT_HT350_DisplacedDijet80_DisplacedTrack_v*",
            "HLT_HT400_DisplacedDijet40_Inclusive_v*",
            "HLT_HT250_DisplacedDijet40_DisplacedTrack_v*",
            "HLT_HT200_DisplacedDijet40_DisplacedTrack_v*",
            "HLT_HT350_DisplacedDijet40_Inclusive_v*",
            "HLT_TrkMu15_DoubleTrkMu5NoFiltersNoVtx_v*",
            "HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v*",
            "HLT_MET60_IsoTrk*",
            "HLT_MET75_IsoTrk50_v*",
            "HLT_MET90_IsoTrk50_v*",
            "HLT_VBF_DisplacedJet40_DisplacedTrack_v*",
            "HLT_VBF_DisplacedJet40_TightID_DisplacedTrack_v*",
            "HLT_VBF_DisplacedJet40_VTightID_DisplacedTrack_v*",
            "HLT_VBF_DisplacedJet40_VVTightID_DisplacedTrack_v*",
            "HLT_VBF_DisplacedJet40_Hadronic_2PromptTrack_v*",
            "HLT_VBF_DisplacedJet40_DisplacedTrack_2TrackIP2DSig5_v*",
            "HLT_Mu33NoFiltersNoVtxDisplaced_DisplacedJet50_Tight_v*",
            "HLT_Mu33NoFiltersNoVtxDisplaced_DisplacedJet50_Loose_v*",
            "HLT_Mu38NoFiltersNoVtxDisplaced_DisplacedJet60_Tight_v*",
            "HLT_Mu38NoFiltersNoVtxDisplaced_DisplacedJet60_Loose_v*",
            "HLT_Mu38NoFiltersNoVtx_DisplacedJet60_Loose_v*",
            "HLT_Mu28NoFiltersNoVtx_DisplacedJet40_Loose_v*",
            "HLT_Mu28NoFiltersNoVtx_CentralCaloJet40_v*",
            "HLT_Mu23NoFiltersNoVtx_Photon23_CaloIdL_v*",
            "HLT_DoubleMu18NoFiltersNoVtx_v*",
            "HLT_DoubleMuNoFiltersNoVtx_SaveObjects_v*",
            "MC_DoubleMuNoFiltersNoVtx_v*",
            "HLT_L1MuOpenNotHF2Pixel_SingleTrack*",
            "HLT_L1TOTEM0_RomanPotsAND_PixelClusters*",
        )

        ESModulesToRemove = (
            #      "CaloTowerGeometryFromDBEP",
            #      "CastorGeometryFromDBEP",
            #      "EcalBarrelGeometryFromDBEP",
            #      "EcalEndcapGeometryFromDBEP",
            #      "EcalPreshowerGeometryFromDBEP",
            #      "HcalGeometryFromDBEP",
            #      "ZdcGeometryFromDBEP",
            #      "XMLFromDBSource",
            #      "sistripconn",

            #      "navigationSchoolESProducer",
            #      "TransientTrackBuilderESProducer",
            #      "SteppingHelixPropagatorAny",
            #      "OppositeMaterialPropagator",
            #      "MaterialPropagator",
            #      "CaloTowerConstituentsMapBuilder",
            #      "CaloTopologyBuilder",
        )

        ModulesToRemove = (
            #   "hltL3MuonIsolations",
            "hltCkfL1SeededTrackCandidates",
            "hltCtfL1SeededithMaterialTracks",
            "hltCkf3HitL1SeededTrackCandidates",
            "hltCtf3HitL1SeededWithMaterialTracks",
            "hltCkf3HitActivityTrackCandidates",
            "hltCtf3HitActivityWithMaterialTracks",
            "hltActivityCkfTrackCandidatesForGSF",
            "hltL1SeededCkfTrackCandidatesForGSF",
            "hltMuCkfTrackCandidates",
            "hltMuCtfTracks",
            "hltTau3MuCkfTrackCandidates",
            "hltTau3MuCtfWithMaterialTracks",
            "hltMuTrackJpsiCkfTrackCandidates",
            "hltMuTrackJpsiCtfTracks",
            "hltMuTrackJpsiEffCkfTrackCandidates",
            "hltMuTrackJpsiEffCtfTracks",
            "hltJpsiTkPixelSeedFromL3Candidate",
            "hltCkfTrackCandidatesJpsiTk",
            "hltCtfWithMaterialTracksJpsiTk",
            "hltMuTrackCkfTrackCandidatesOnia",
            "hltMuTrackCtfTracksOnia",
            "hltFEDSelector",
            "hltL3TrackCandidateFromL2OIState",
            "hltL3TrackCandidateFromL2OIHit",
            "hltL3TrackCandidateFromL2IOHit",
            "hltL3TrackCandidateFromL2NoVtx",
            "hltHcalDigis",
            "hltHcalDigisL1EGSeeded",
            "hltHcalDigisL1EGUnseeded",
            "hltHoreco",
            "hltHfreco",
            "hltHbhereco",
            "hltHbherecoMethod2L1EGSeeded",
            "hltHbherecoMethod2L1EGUnseeded",
            "hltESRawToRecHitFacility",
            "hltEcalRecHitAll",
            "hltESRecHitAll",
            # === eGamma
            "hltEgammaCkfTrackCandidatesForGSF",
            "hltEgammaGsfTracks",
            "hltEgammaCkfTrackCandidatesForGSFUnseeded",
            "hltEgammaGsfTracksUnseeded",
            # === hltPF
            "hltPFJetCkfTrackCandidates",
            "hltPFJetCtfWithMaterialTracks",
            "hltPFlowTrackSelectionHighPurity",
            # === hltFastJet
            "hltDisplacedHT250L1FastJetRegionalPixelSeedGenerator",
            "hltDisplacedHT250L1FastJetRegionalCkfTrackCandidates",
            "hltDisplacedHT250L1FastJetRegionalCtfWithMaterialTracks",
            "hltDisplacedHT300L1FastJetRegionalPixelSeedGenerator",
            "hltDisplacedHT300L1FastJetRegionalCkfTrackCandidates",
            "hltDisplacedHT300L1FastJetRegionalCtfWithMaterialTracks",
            "hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJet",
            "hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJet",
            "hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJet",
            "hltBLifetimeRegionalPixelSeedGeneratorHbbVBF",
            "hltBLifetimeRegionalCkfTrackCandidatesHbbVBF",
            "hltBLifetimeRegionalCtfWithMaterialTracksHbbVBF",
            "hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet",
            "hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet",
            "hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet",
            # === hltBLifetimeRegional
            "hltBLifetimeRegionalPixelSeedGeneratorHbb",
            "hltBLifetimeRegionalCkfTrackCandidatesHbb",
            "hltBLifetimeRegionalCtfWithMaterialTracksHbb",
            "hltBLifetimeRegionalPixelSeedGeneratorbbPhi",
            "hltBLifetimeRegionalCkfTrackCandidatesbbPhi",
            "hltBLifetimeRegionalCtfWithMaterialTracksbbPhi",
            "hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb",
            "hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb",
            "hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb",
            "hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb",
            "hltBLifetimeFastRegionalPixelSeedGeneratorHbbVBF",
            "hltBLifetimeFastRegionalCkfTrackCandidatesHbbVBF",
            "hltBLifetimeFastRegionalCtfWithMaterialTracksHbbVBF",
            "hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJetFastPV",
            "hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJetFastPV",
            "hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV",
            "hltFastPixelBLifetimeRegionalPixelSeedGeneratorHbb",
            "hltFastPixelBLifetimeRegionalCkfTrackCandidatesHbb",
            "hltFastPixelBLifetimeRegionalCtfWithMaterialTracksHbb",
            "hltPixelTracksForMinBias",
            "hltPixelTracksForMinBias01",
            "hltPixelTracksForHighMult",
            "hltRegionalPixelTracks",
            "hltPixelTracksReg",
            "hltPixelTracksL3Muon",
            "hltPixelTracksGlbTrkMuon",
            "hltPixelTracksHighPtTkMuIso",
            "hltPixelTracksHybrid",
            "hltPixelTracksForPhotons",
            "hltPixelTracksForEgamma",
            "hltPixelTracksElectrons",
            "hltPixelTracksForHighPt",
            "hltHighPtPixelTracks",
            "hltPixelTracksForNoPU",
            "hltPixelTracksForSeedsTau3mu",
            "hltPixelTracksGlbDiTrkMuon",
            "hltPixelTracksHitTripletsForMinBias",
            "hltPixelTracksHitTripletsForMinBias01",
            "hltPixelTracksHitTripletsForHighMult",
            "hltRegionalPixelTracksHitTriplets",
            "hltPixelTracksHitTripletsReg",
            "hltPixelTracksHitTripletsL3Muon",
            "hltPixelTracksHitTripletsGlbTrkMuon",
            "hltPixelTracksHitTripletsHighPtTkMuIso",
            "hltPixelTracksHitTripletsHybrid",
            "hltPixelTracksHitTripletsForPhotons",
            "hltPixelTracksHitTripletsForEgamma",
            "hltPixelTracksHitTripletsElectrons",
            "hltPixelTracksHitTripletsForHighPt",
            "hltHighPtPixelTracksHitTriplets",
            "hltPixelTracksHitTripletsForNoPU",
            "hltPixelTracksHitTripletsForSeedsTau3mu",
            "hltPixelTracksHitTripletsGlbDiTrkMuon",
            "hltPixelTracksHitTriplets",
            "hltPixelTracksHitDoubletsForMinBias",
            "hltPixelTracksHitDoubletsForMinBias01",
            "hltPixelTracksHitDoubletsForHighMult",
            "hltRegionalPixelTracksHitDoublets",
            "hltPixelTracksHitDoubletsReg",
            "hltPixelTracksHitDoubletsL3Muon",
            "hltPixelTracksHitDoubletsGlbTrkMuon",
            "hltPixelTracksHitDoubletsHighPtTkMuIso",
            "hltPixelTracksHitDoubletsHybrid",
            "hltPixelTracksHitDoubletsForPhotons",
            "hltPixelTracksHitDoubletsForEgamma",
            "hltPixelTracksHitDoubletsElectrons",
            "hltPixelTracksHitDoubletsForHighPt",
            "hltHighPtPixelTracksHitDoublets",
            "hltPixelTracksHitDoubletsForNoPU",
            "hltPixelTracksHitDoubletsForSeedsTau3mu",
            "hltPixelTracksHitDoubletsGlbDiTrkMuon",
            "hltPixelTracksHitDoublets",
            "hltPixelTracksTrackingRegionsForMinBias",
            "hltPixelTracksTrackingRegionsForMinBias01",
            "hltPixelTracksTrackingRegionsForHighMult",
            "hltRegionalPixelTracksTrackingRegions",
            "hltPixelTracksTrackingRegionsReg",
            "hltPixelTracksTrackingRegionsL3Muon",
            "hltPixelTracksTrackingRegionsGlbTrkMuon",
            "hltPixelTracksTrackingRegionsHighPtTkMuIso",
            "hltPixelTracksTrackingRegionsHybrid",
            "hltPixelTracksTrackingRegionsForPhotons",
            "hltPixelTracksTrackingRegionsForEgamma",
            "hltPixelTracksTrackingRegionsElectrons",
            "hltPixelTracksTrackingRegionsForHighPt",
            "hltHighPtPixelTracksTrackingRegions",
            "hltPixelTracksTrackingRegionsForNoPU",
            "hltPixelTracksTrackingRegionsForSeedsTau3mu",
            "hltPixelTracksTrackingRegionsGlbDiTrkMuon",
            "hltPixelTracksTrackingRegions",
            "hltFastPixelHitsVertex",
            "hltFastPixelTracks",
            "hltFastPixelTracksRecover",
            "hltPixelLayerPairs",
            "hltPixelLayerTriplets",
            "hltPixelLayerTripletsReg",
            "hltPixelLayerTripletsHITHB",
            "hltPixelLayerTripletsHITHE",
            "hltPixelLayerTripletsAfterSplitting",
            "hltMixedLayerPairs",
            "hltFastPrimaryVertexbbPhi",
            "hltPixelTracksFastPVbbPhi",
            "hltPixelTracksRecoverbbPhi",
            "hltFastPixelHitsVertexVHbb",
            "hltFastPixelTracksVHbb",
            "hltFastPixelTracksRecoverVHbb",
            "hltFastPrimaryVertex",
            "hltFastPVPixelVertexFilter",
            "hltFastPVPixelTracks",
            "hltFastPVPixelTracksHitTriplets",
            "hltFastPVPixelTracksHitDoublets",
            "hltFastPVPixelTracksTrackingRegions",
            "hltFastPVPixelTracksRecover",
            "hltFastPVPixelTracksHitTripletsRecover",
            "hltFastPVPixelTracksHitDoubletsRecover",
            "hltFastPVPixelTracksTrackingRegionsRecover",
            "hltPAGoodHighPurityFullTracks",

            #   "hltPixelMatchElectronsActivity",
            "hltMuonCSCDigis",
            "hltMuonDTDigis",
            "hltMuonRPCDigis",
            #     "hltGtDigis",
            #     "hltL1GtTrigReport",
            #   "hltCsc2DRecHits",
            #   "hltDt1DRecHits",
            #   "hltRpcRecHits",
            "hltScalersRawToDigi",
            "hltEcalPreshowerDigis",
            "hltEcalDigis",
            "hltEcalDetIdToBeRecovered",
        )

        SequencesToRemove = (
            "HLTL1SeededEgammaRegionalRecoTrackerSequence",
            "HLTEcalActivityEgammaRegionalRecoTrackerSequence",
            "HLTPixelMatchElectronActivityTrackingSequence",
            "HLTDoLocalStripSequence",
            "HLTDoLocalPixelSequence",
            "HLTDoLocalPixelSequenceRegL2Tau",
            "HLTDoLocalStripSequenceReg",
            "HLTDoLocalPixelSequenceReg",
            "HLTDoLocalStripSequenceRegForBTag",
            "HLTDoLocalPixelSequenceRegForBTag",
            "HLTDoLocalPixelSequenceRegForNoPU",
            "HLTDoLocalPixelSequenceAfterSplitting",
            "HLTPADoLocalStripSequenceAfterSplitting",
            "HLTBeginSequence",
            "HLTBeginSequenceL1Fat",
            "HLTBeginSequenceNZS",
            "HLTBeginSequenceBPTX",
            "HLTBeginSequenceAntiBPTX",
            "HLTHBHENoiseSequence",
            "HLTIterativeTrackingIter04",
            "HLTIterativeTrackingIter02",
            "HLTIterativeTracking",
            "HLTIterativeTrackingForHighPt",
            "HLTIterativeTrackingTau3Mu",
            "HLTIterativeTrackingGlbDiTrkMuonIter02",
            "HLTIterativeTrackingReg",
            "HLTIterativeTrackingForPA",
            "HLTPAIterativeTracking",
            "HLTIterativeTrackingForElectronIter02",
            "HLTIterativeTrackingForPhotonsIter02",
            "HLTIterativeTrackingL3MuonIter02",
            "HLTIterativeTrackingGlbTrkMuonIter02",
            "HLTIterativeTrackingL3MuonRegIter02",
            "HLTIterativeTrackingHighPtTkMu",
            "HLTIterativeTrackingHighPtTkMuIsoIter02",
            "HLTIterativeTrackingForBTagIter02",
            "HLTIterativeTrackingForBTagIter12",
            "HLTIterativeTrackingForTauIter04",
            "HLTIterativeTrackingForTauIter02",
            "HLTIterativeTrackingDisplacedJpsiIter02",
            "HLTIterativeTrackingDisplacedPsiPrimeIter02",
            "HLTIterativeTrackingDisplacedNRMuMuIter02",
            "HLTIterativeTrackingDisplacedTau3muIter02",
            "HLTIterativeTrackingForBTagIteration0",
            "HLTIterativeTrackingIteration4DisplacedJets",
            "HLTRegionalCKFTracksForL3Isolation",
            "HLTHBHENoiseCleanerSequence",
        )

        # Removing ESmodules
        for label in ESModulesToRemove:
            if (hasattr(process, label)):
                delattr(process, label)

# Removing paths
        import fnmatch, re
        ExplicitList = []
        HLTSchedule = tuple(path.label_() for path in process.HLTSchedule)
        for path in HLTSchedule:
            getattr(process, path).insert(1, process.HLTL1UnpackerSequence)
        for black in fastSimUnsupportedPaths:
            compiled = re.compile(fnmatch.translate(black))
            for path in HLTSchedule:
                if compiled.search(path) is not None:
                    ExplicitList += [path]
        UniqueList = []
        for path in ExplicitList:
            if path not in UniqueList:
                UniqueList += [path]
        for path in UniqueList:
            process.schedule.remove(getattr(process, path))
        process.setSchedule_(process.schedule)
        process.prune()

        # Removing streams and datasets PSets
        if hasattr(process, 'streams'):
            delattr(process, 'streams')
        if hasattr(process, 'datasets'):
            delattr(process, 'datasets')

# Removing sequences, possibly to be taken from fastsim import
        for label in SequencesToRemove:
            if hasattr(process, label):
                if hasattr(fastsim, label):
                    setattr(process, label, getattr(fastsim, label))
                else:
                    object = getattr(process, label)
                    list = tuple(process.sequences_().keys())
                    for name in list:
                        sequence = getattr(process, name)
                        more = True
                        while more:
                            more = sequence.remove(object)
                    list = tuple(process.paths_().keys())
                    for name in list:
                        path = getattr(process, name)
                        more = True
                        while more:
                            more = path.remove(object)
                    delattr(process, label)

# Removing modules, possibly to be taken from fastsim import
        for label in ModulesToRemove:
            if hasattr(process, label):
                if hasattr(fastsim, label):
                    setattr(process, label, getattr(fastsim, label))
                else:
                    object = getattr(process, label)
                    # remove from sequences
                    list = tuple(process.sequences_().keys())
                    for name in list:
                        sequence = getattr(process, name)
                        more = True
                        while more:
                            more = sequence.remove(object)
                    # remove from paths
                    list = tuple(process.paths_().keys())
                    for name in list:
                        path = getattr(process, name)
                        more = True
                        while more:
                            more = path.remove(object)
                    # remove from end paths
                    list = tuple(process.endpaths_().keys())
                    for name in list:
                        path = getattr(process, name)
                        more = True
                        while more:
                            more = path.remove(object)
                    delattr(process, label)

# Special transformations:
        if hasattr(process, 'hltGetConditions') and hasattr(
                process, 'HLTriggerFirstPath'):
            process.hltDummyConditions = cms.EDFilter("HLTBool",
                                                      result=cms.bool(True))
            process.HLTriggerFirstPath.replace(process.hltGetConditions,
                                               process.hltDummyConditions)
        if hasattr(process, 'hltPixelVertices'):
            process.hltPixelVertices.beamSpot = cms.InputTag('offlineBeamSpot')
        specialModules = (
            'hltEcalRecHit',
            'hltEcalPreshowerRecHit',
        )
        for label in specialModules:
            if hasattr(process, label):
                setattr(fastsim, label, getattr(process, label))

# Use fastsim imports
        for label in fastsim.producers_().keys():
            if hasattr(process, label):
                setattr(process, label, getattr(fastsim, label))
        for label in fastsim.filters_().keys():
            if hasattr(process, label):
                setattr(process, label, getattr(fastsim, label))
        for label in fastsim.analyzers_().keys():
            if hasattr(process, label):
                setattr(process, label, getattr(fastsim, label))
        for label in fastsim.sequences_().keys():
            if hasattr(process, label):
                setattr(process, label, getattr(fastsim, label))

# Update InputTags

        InputTags = (
            #     ('hltGtDigis','gtDigis'),
            #     ('hltL1GtObjectMap','gtDigis'),
            ('hltEcalDigis:ebDigis', 'ecalDigis:ebDigis'),
            ('hltEcalDigis:eeDigis', 'ecalDigis:eeDigis'),
            ('hltMuonCSCDigis', 'muonCSCDigis'),
            ('hltMuonCSCDigis:MuonCSCStripDigi',
             'muonCSCDigis:MuonCSCStripDigi'),
            ('hltMuonCSCDigis:MuonCSCWireDigi',
             'muonCSCDigis:MuonCSCWireDigi'),
            ('hltMuonDTDigis', 'muonDTDigis'),
            ('hltMuonRPCDigis', 'muonRPCDigis'),
            ('hltEcalPreshowerDigis', 'ecalPreshowerDigis'),
            ('hltHbhereco', 'hbhereco'),
            ('hltHbherecoMethod2L1EGSeeded', 'hbhereco'),
            ('hltHbherecoMethod2L1EGUnseeded', 'hbhereco'),
            ('hltHoreco', 'horeco'),
            ('hltHfreco', 'hfreco'),
            ('hltIter2Merged', 'generalTracks'),
            ('hltIter2HighPtMerged', 'generalTracks'),
            ('hltIter2MergedForElectrons', 'generalTracks'),
            ('hltIter2MergedForPhotons', 'generalTracks'),
            ('hltIter2L3MuonMerged', 'generalTracks'),
            ('hltIter2MergedForBTag', 'generalTracks'),
            ('hltIter2MergedForTau', 'generalTracks'),
            ('hltIter2GlbTrkMuonMerged', 'generalTracks'),
            ('hltIter2HighPtTkMuMerged', 'generalTracks'),
            ('hltIter2HighPtTkMuIsoMerged', 'generalTracks'),
            ('hltIter2DisplacedJpsiMerged', 'generalTracks'),
            ('hltIter2DisplacedPsiPrimeMerged', 'generalTracks'),
            ('hltIter2DisplacedNRMuMuMerged', 'generalTracks'),
            ('hltIter2DisplacedTau3muMerged', 'generalTracks'),
            ('hltIter2GlbDiTrkMuonMerged', 'generalTracks'),
            ('hltIter0PFlowTrackSelectionHighPurityForBTag', 'generalTracks'),
            ('hltIter4HighPtMerged', 'generalTracks'),
            ('hltIterativeTrackingForPAMerged', 'generalTracks'),
            #('hltPAIterativeTrackingMerged', 'generalTracks'),
            ('hltPAIterativeTrackingMerged', 'generalTracks'),
            ('hltPAGoodHighPurityFullTracks', 'generalTracks'),
            ('hltFastPVPixelTracks', 'hltPixelTracks'),
            ('hltFastPVPixelTracksRecover', 'hltPixelTracks'),
            ('hltPixelTracksL3Muon', 'hltPixelTracks'),
            ('hltPixelTracksGlbTrkMuon', 'hltPixelTracks'),
            ('hltPixelTracksHighPtTkMuIso', 'hltPixelTracks'),
            ('hltPixelTracksHybrid', 'hltPixelTracks'),
            ('hltPixelTracksForPhotons', 'hltPixelTracks'),
            ('hltPixelTracksForEgamma', 'hltPixelTracks'),
            ('hltPixelTracksElectrons', 'hltPixelTracks'),
            ('hltPixelTracksForHighPt', 'hltPixelTracks'),
            ('hltHighPtPixelTracks', 'hltPixelTracks'),
            ('hltPixelTracksForNoPU', 'hltPixelTracks'),
            ('hltPixelTracksForSeedsTau3mu', 'hltPixelTracks'),
            ('hltPixelTracksGlbDiTrkMuon', 'hltPixelTracks'),
            ('hltL1extraParticles', 'l1extraParticles'),
            ('hltL1extraParticles:Central', 'l1extraParticles:Central'),
            ('hltL1extraParticles:Forward', 'l1extraParticles:Forward'),
            ('hltL1extraParticles:Isolated', 'l1extraParticles:Isolated'),
            ('hltL1extraParticles:NonIsolated',
             'l1extraParticles:NonIsolated'),
            ('hltL1extraParticles:Tau', 'l1extraParticles:Tau'),
            ('hltL1extraParticles:IsoTau', 'l1extraParticles:IsoTau'),
            ('hltOfflineBeamSpot', 'offlineBeamSpot'),
            ('hltOnlineBeamSpot', 'offlineBeamSpot'),
            ('hltSiStripClusters', 'MeasurementTrackerEvent'),
            ('hltSiStripClustersAfterSplitting', 'MeasurementTrackerEvent'),
        )
        from HLTrigger.Configuration.CustomConfigs import MassReplaceInputTag
        for pair in InputTags:
            process = MassReplaceInputTag(process, pair[0], pair[1])

# Update top-level named parameters
        NamedParameters = (
            #     ('GMTReadoutCollection',cms.InputTag('gtDigis'),cms.InputTag('gmtDigis')),
            ('killDeadChannels', cms.bool(True), cms.bool(False)),
            ('recoverEBFE', cms.bool(True), cms.bool(False)),
            ('recoverEEFE', cms.bool(True), cms.bool(False)),
            ('src', cms.InputTag('hltHcalTowerNoiseCleaner'),
             cms.InputTag('hltTowerMakerForAll')),
            ('src', cms.InputTag('hltHcalTowerNoiseCleanerWithrechit'),
             cms.InputTag('hltTowerMakerForAll')),
            ('initialSeeds', cms.InputTag('noSeedsHere'),
             cms.InputTag('hltPixelPairSeeds')),
            ('preFilteredSeeds', cms.bool(True), cms.bool(False)),
        )
        from HLTrigger.Configuration.CustomConfigs import MassReplaceParameter
        for thrice in NamedParameters:
            process = MassReplaceParameter(process, thrice[0], thrice[1],
                                           thrice[2])

# Update nested named parameters
        for label in (
                'hltEgammaElectronPixelSeeds',
                'hltEgammaElectronPixelSeedsUnseeded',
        ):
            if hasattr(process, label):
                getattr(process,
                        label).SeedConfiguration.initialSeeds = cms.InputTag(
                            'hltPixelPairSeeds')
                getattr(
                    process,
                    label).SeedConfiguration.preFilteredSeeds = cms.bool(False)


# Extending fastsim import
        fastsim.extend(process)
        fastsim.setSchedule_(fastsim.schedule)
        fastsim.prune()

        # muon seeds
        import FastSimulation.HighLevelTrigger.full2fast as full2fast
        if hasattr(fastsim, "hltL3TrajSeedOIHit"):
            full2fast.modify_hltL3TrajSeedOIHit(fastsim.hltL3TrajSeedOIHit)
        if hasattr(fastsim, "hltL3NoFiltersTrajSeedOIHit"):
            full2fast.modify_hltL3TrajSeedOIHit(
                fastsim.hltL3NoFiltersTrajSeedOIHit)
        if hasattr(fastsim, "hltL3TrajSeedIOHit"):
            full2fast.modify_hltL3TrajSeedIOHit(fastsim.hltL3TrajSeedIOHit)
        if hasattr(fastsim, "hltL3NoFiltersTrajSeedIOHit"):
            full2fast.modify_hltL3NoFiltersTrajSeedIOHit(
                fastsim.hltL3NoFiltersTrajSeedIOHit)

        return fastsim

    else:

        return process
예제 #2
0
def customizeHLTforMC(process,_fastSim=False):
  """adapt the HLT to run on MC, instead of data
  see Configuration/StandardSequences/Reconstruction_Data_cff.py
  which does the opposite, for RECO"""

  # PFRecHitProducerHCAL
  if 'hltParticleFlowRecHitHCAL' in process.__dict__:
    process.hltParticleFlowRecHitHCAL.ApplyPulseDPG      = cms.bool(False)
    process.hltParticleFlowRecHitHCAL.LongShortFibre_Cut = cms.double(1000000000.0)

  # customise hltHbhereco to use the Method 3 time slew parametrization and response correction for Monte Carlo (PR #11091)
  if 'hltHbhereco' in process.__dict__:
    process.hltHbhereco.pedestalSubtractionType = cms.int32( 1 )
    process.hltHbhereco.pedestalUpperLimit      = cms.double( 2.7 ) 
    process.hltHbhereco.timeSlewParsType        = cms.int32( 3 )
    # new time slew parametrisation
    process.hltHbhereco.timeSlewPars            = cms.vdouble( 12.2999, -2.19142, 0, 12.2999, -2.19142, 0, 12.2999, -2.19142, 0 )
    # old response correction, matching the 2015D 25ns data
    process.hltHbhereco.respCorrM3              = cms.double( 1.0 )


  if _fastSim:

    fastsim = cms.ProcessFragment( process.name_() )
    fastsim.load( "FastSimulation.HighLevelTrigger.HLTSetup_cff" )

    fastSimUnsupportedPaths = (

      # paths for which a recovery is not foreseen/possible
      "AlCa_*_v*",
      "DQM_*_v*",
      "HLT_*Calibration_v*",
      "HLT_DTErrors_v*",
      "HLT_Random_v*",
      "HLT_HcalNZS_v*",
      "HLT_HcalPhiSym_v*",
      "HLT_Activity_Ecal*_v*",
      "HLT_IsoTrackHB_v*",
      "HLT_IsoTrackHE_v*",
      "HLT_L1SingleMuOpen_AntiBPTX_v*",
      "HLT_JetE*_NoBPTX*_v*",
      "HLT_L2Mu*_NoBPTX*_v*",
      "HLT_Beam*_v*",
      #"HLT_L1Tech_*_v*",
      "HLT_HI*",
      "HLT_GlobalRunHPDNoise_v*",
      "HLT_L1TrackerCosmics_v*",
      "HLT_HcalUTCA_v*",
      "HLT_L1FatEvents_v*",

      # TODO: paths not supported by FastSim, but for which a recovery should be attempted
      "HLT_DoubleMu33NoFiltersNoVtx_v*",
      "HLT_DoubleMu38NoFiltersNoVtx_v*",
      "HLT_Mu38NoFiltersNoVtx_Photon38_CaloIdL_v*",
      "HLT_Mu42NoFiltersNoVtx_Photon42_CaloIdL_v*",
      "HLT_DoubleMu23NoFiltersNoVtxDisplaced_v*",
      "HLT_DoubleMu28NoFiltersNoVtxDisplaced_v*",
      "HLT_Mu28NoFiltersNoVtxDisplaced_Photon28_CaloIdL_v*",
      "HLT_Mu33NoFiltersNoVtxDisplaced_Photon33_CaloIdL_v*",
      "HLT_HT350_DisplacedDijet80_Tight_DisplacedTrack_v*",
      "HLT_HT350_DisplacedDijet80_DisplacedTrack_v*",
      "HLT_HT500_DisplacedDijet40_Inclusive_v*",
      "HLT_HT350_DisplacedDijet40_DisplacedTrack_v*",
      "HLT_HT550_DisplacedDijet40_Inclusive_v*",
      "HLT_HT350_DisplacedDijet80_DisplacedTrack_v*",
      "HLT_HT400_DisplacedDijet40_Inclusive_v*",
      "HLT_HT250_DisplacedDijet40_DisplacedTrack_v*",
      "HLT_HT200_DisplacedDijet40_DisplacedTrack_v*",
      "HLT_HT350_DisplacedDijet40_Inclusive_v*",
      "HLT_TrkMu15_DoubleTrkMu5NoFiltersNoVtx_v*",
      "HLT_TrkMu17_DoubleTrkMu8NoFiltersNoVtx_v*",
      "HLT_MET60_IsoTrk*",
      "HLT_MET75_IsoTrk50_v*",
      "HLT_MET90_IsoTrk50_v*",
      "HLT_VBF_DisplacedJet40_DisplacedTrack_v*",
      "HLT_VBF_DisplacedJet40_TightID_DisplacedTrack_v*",
      "HLT_VBF_DisplacedJet40_VTightID_DisplacedTrack_v*",
      "HLT_VBF_DisplacedJet40_VVTightID_DisplacedTrack_v*",
      "HLT_VBF_DisplacedJet40_Hadronic_2PromptTrack_v*",
      "HLT_VBF_DisplacedJet40_DisplacedTrack_2TrackIP2DSig5_v*",
      "HLT_Mu33NoFiltersNoVtxDisplaced_DisplacedJet50_Tight_v*",
      "HLT_Mu33NoFiltersNoVtxDisplaced_DisplacedJet50_Loose_v*",
      "HLT_Mu38NoFiltersNoVtxDisplaced_DisplacedJet60_Tight_v*",
      "HLT_Mu38NoFiltersNoVtxDisplaced_DisplacedJet60_Loose_v*",
      "HLT_Mu38NoFiltersNoVtx_DisplacedJet60_Loose_v*",
      "HLT_Mu28NoFiltersNoVtx_DisplacedJet40_Loose_v*",
      "HLT_Mu28NoFiltersNoVtx_CentralCaloJet40_v*",
      "HLT_Mu23NoFiltersNoVtx_Photon23_CaloIdL_v*",
      "HLT_DoubleMu18NoFiltersNoVtx_v*",
      "HLT_DoubleMuNoFiltersNoVtx_SaveObjects_v*",
      "MC_DoubleMuNoFiltersNoVtx_v*",
      "HLT_L1MuOpenNotHF2Pixel_SingleTrack*",
      "HLT_L1TOTEM0_RomanPotsAND_PixelClusters*",
      )

    ESModulesToRemove = (
#      "CaloTowerGeometryFromDBEP",
#      "CastorGeometryFromDBEP",
#      "EcalBarrelGeometryFromDBEP",
#      "EcalEndcapGeometryFromDBEP",
#      "EcalPreshowerGeometryFromDBEP",
#      "HcalGeometryFromDBEP",
#      "ZdcGeometryFromDBEP",
#      "XMLFromDBSource",
#      "sistripconn",

#      "navigationSchoolESProducer",
#      "TransientTrackBuilderESProducer",
#      "SteppingHelixPropagatorAny",
#      "OppositeMaterialPropagator",
#      "MaterialPropagator",
#      "CaloTowerConstituentsMapBuilder",
#      "CaloTopologyBuilder",
      )

    ModulesToRemove = (
      #   "hltL3MuonIsolations",
      "hltCkfL1SeededTrackCandidates",
      "hltCtfL1SeededithMaterialTracks",
      "hltCkf3HitL1SeededTrackCandidates",
      "hltCtf3HitL1SeededWithMaterialTracks",
      "hltCkf3HitActivityTrackCandidates",
      "hltCtf3HitActivityWithMaterialTracks",
      "hltActivityCkfTrackCandidatesForGSF",
      "hltL1SeededCkfTrackCandidatesForGSF",
      "hltMuCkfTrackCandidates",
      "hltMuCtfTracks",
      "hltTau3MuCkfTrackCandidates",
      "hltTau3MuCtfWithMaterialTracks",
      "hltMuTrackJpsiCkfTrackCandidates",
      "hltMuTrackJpsiCtfTracks",
      "hltMuTrackJpsiEffCkfTrackCandidates",
      "hltMuTrackJpsiEffCtfTracks",
      "hltJpsiTkPixelSeedFromL3Candidate",
      "hltCkfTrackCandidatesJpsiTk",
      "hltCtfWithMaterialTracksJpsiTk",
      "hltMuTrackCkfTrackCandidatesOnia",
      "hltMuTrackCtfTracksOnia",

      "hltFEDSelector",
      "hltL3TrackCandidateFromL2OIState",
      "hltL3TrackCandidateFromL2OIHit",
      "hltL3TrackCandidateFromL2IOHit",
      "hltL3TrackCandidateFromL2NoVtx",
      "hltHcalDigis",
      "hltHoreco",
      "hltHfreco",
      "hltHbhereco",
      "hltESRawToRecHitFacility",
      "hltEcalRecHitAll",
      "hltESRecHitAll",
      # === eGamma
      "hltEgammaCkfTrackCandidatesForGSF",
      "hltEgammaGsfTracks",
      "hltEgammaCkfTrackCandidatesForGSFUnseeded",
      "hltEgammaGsfTracksUnseeded",
      # === hltPF
      "hltPFJetCkfTrackCandidates",
      "hltPFJetCtfWithMaterialTracks",
      "hltPFlowTrackSelectionHighPurity",
      # === hltFastJet
      "hltDisplacedHT250L1FastJetRegionalPixelSeedGenerator",
      "hltDisplacedHT250L1FastJetRegionalCkfTrackCandidates",
      "hltDisplacedHT250L1FastJetRegionalCtfWithMaterialTracks",
      "hltDisplacedHT300L1FastJetRegionalPixelSeedGenerator",
      "hltDisplacedHT300L1FastJetRegionalCkfTrackCandidates",
      "hltDisplacedHT300L1FastJetRegionalCtfWithMaterialTracks",
      "hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJet",
      "hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJet",
      "hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJet",
      "hltBLifetimeRegionalPixelSeedGeneratorHbbVBF",
      "hltBLifetimeRegionalCkfTrackCandidatesHbbVBF",
      "hltBLifetimeRegionalCtfWithMaterialTracksHbbVBF",
      "hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet",
      "hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet",
      "hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20HbbL1FastJet",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20HbbL1FastJet",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20HbbL1FastJet",
      # === hltBLifetimeRegional
      "hltBLifetimeRegionalPixelSeedGeneratorHbb",
      "hltBLifetimeRegionalCkfTrackCandidatesHbb",
      "hltBLifetimeRegionalCtfWithMaterialTracksHbb",
      "hltBLifetimeRegionalPixelSeedGeneratorbbPhi",
      "hltBLifetimeRegionalCkfTrackCandidatesbbPhi",
      "hltBLifetimeRegionalCtfWithMaterialTracksbbPhi",
      "hltBLifetimeBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb",
      "hltBLifetimeBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb",
      "hltBLifetimeBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalPixelSeedGeneratorJet20Hbb",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalCkfTrackCandidatesJet20Hbb",
      "hltBLifetimeDiBTagIP3D1stTrkRegionalCtfWithMaterialTracksJet20Hbb",
      "hltBLifetimeFastRegionalPixelSeedGeneratorHbbVBF",
      "hltBLifetimeFastRegionalCkfTrackCandidatesHbbVBF",
      "hltBLifetimeFastRegionalCtfWithMaterialTracksHbbVBF",
      "hltBLifetimeRegionalPixelSeedGeneratorbbPhiL1FastJetFastPV",
      "hltBLifetimeRegionalCkfTrackCandidatesbbPhiL1FastJetFastPV",
      "hltBLifetimeRegionalCtfWithMaterialTracksbbPhiL1FastJetFastPV",
      "hltFastPixelBLifetimeRegionalPixelSeedGeneratorHbb",
      "hltFastPixelBLifetimeRegionalCkfTrackCandidatesHbb",
      "hltFastPixelBLifetimeRegionalCtfWithMaterialTracksHbb",

      "hltPixelTracksForMinBias",
      "hltPixelTracksForMinBias01",
      "hltPixelTracksForHighMult",
      "hltRegionalPixelTracks",
      "hltPixelTracksReg",
      "hltPixelTracksL3Muon",
      "hltPixelTracksGlbTrkMuon",
      "hltPixelTracksHighPtTkMuIso",
      "hltPixelTracksHybrid",
      "hltPixelTracksForPhotons",
      "hltPixelTracksForEgamma",
      "hltPixelTracksElectrons",
      "hltPixelTracksForHighPt",
      "hltHighPtPixelTracks",
      "hltPixelTracksForNoPU",
      "hltPixelTracksForSeedsTau3mu",

      "hltFastPixelHitsVertex",
      "hltFastPixelTracks",
      "hltFastPixelTracksRecover",

      "hltPixelLayerPairs",
      "hltPixelLayerTriplets",
      "hltPixelLayerTripletsReg",
      "hltPixelLayerTripletsHITHB",
      "hltPixelLayerTripletsHITHE",
      "hltMixedLayerPairs",

      "hltFastPrimaryVertexbbPhi",
      "hltPixelTracksFastPVbbPhi",
      "hltPixelTracksRecoverbbPhi",
      "hltFastPixelHitsVertexVHbb",
      "hltFastPixelTracksVHbb",
      "hltFastPixelTracksRecoverVHbb",

      "hltFastPrimaryVertex",
      "hltFastPVPixelVertexFilter",
      "hltFastPVPixelTracks",
      "hltFastPVPixelTracksRecover",

      #   "hltPixelMatchElectronsActivity",

      "hltMuonCSCDigis",
      "hltMuonDTDigis",
      "hltMuonRPCDigis",
#     "hltGtDigis",
#     "hltL1GtTrigReport",
      #   "hltCsc2DRecHits",
      #   "hltDt1DRecHits",
      #   "hltRpcRecHits",
      "hltScalersRawToDigi",
      "hltEcalPreshowerDigis",
      "hltEcalDigis",
      "hltEcalDetIdToBeRecovered",

      )

    SequencesToRemove = (
      "HLTL1SeededEgammaRegionalRecoTrackerSequence",
      "HLTEcalActivityEgammaRegionalRecoTrackerSequence",
      "HLTPixelMatchElectronActivityTrackingSequence",
      "HLTDoLocalStripSequence",
      "HLTDoLocalPixelSequence",
      "HLTDoLocalPixelSequenceRegL2Tau",
      "HLTDoLocalStripSequenceReg",
      "HLTDoLocalPixelSequenceReg",
      "HLTDoLocalStripSequenceRegForBTag",
      "HLTDoLocalPixelSequenceRegForBTag",
      "HLTDoLocalPixelSequenceRegForNoPU",
      "HLTBeginSequence",
      "HLTBeginSequenceL1Fat",
      "HLTBeginSequenceNZS",
      "HLTBeginSequenceBPTX",
      "HLTBeginSequenceAntiBPTX",
      "HLTHBHENoiseSequence",
      "HLTIterativeTrackingIter04",
      "HLTIterativeTrackingIter02",
      "HLTIterativeTracking",
      "HLTIterativeTrackingForHighPt",
      "HLTIterativeTrackingTau3Mu",
      "HLTIterativeTrackingReg",
      "HLTIterativeTrackingForPA",
      "HLTPAIterativeTracking",
      "HLTIterativeTrackingForElectronIter02",
      "HLTIterativeTrackingForPhotonsIter02",
      "HLTIterativeTrackingL3MuonIter02",
      "HLTIterativeTrackingGlbTrkMuonIter02",
      "HLTIterativeTrackingL3MuonRegIter02",
      "HLTIterativeTrackingHighPtTkMu",
      "HLTIterativeTrackingHighPtTkMuIsoIter02",
      "HLTIterativeTrackingForBTagIter02",
      "HLTIterativeTrackingForBTagIter12",
      "HLTIterativeTrackingForTauIter04",
      "HLTIterativeTrackingForTauIter02",
      "HLTIterativeTrackingDisplacedJpsiIter02",
      "HLTIterativeTrackingDisplacedPsiPrimeIter02",
      "HLTIterativeTrackingDisplacedNRMuMuIter02",
      "HLTIterativeTrackingDisplacedTau3muIter02",
      "HLTIterativeTrackingForBTagIteration0",
      "HLTIterativeTrackingIteration4DisplacedJets",
      "HLTRegionalCKFTracksForL3Isolation",
      "HLTHBHENoiseCleanerSequence",
      )

# Removing ESmodules
    for label in ESModulesToRemove:
      if (hasattr(process,label)):
        delattr(process,label)

# Removing paths
    import fnmatch,re
    ExplicitList = []
    HLTSchedule = tuple( path.label_() for path in process.HLTSchedule)
    for path in HLTSchedule:
      getattr(process,path).insert(1,process.HLTL1UnpackerSequence)
    for black in fastSimUnsupportedPaths:
      compiled = re.compile(fnmatch.translate(black))
      for path in HLTSchedule:
        if compiled.search(path) is not None:
          ExplicitList += [path]
    UniqueList = []
    for path in ExplicitList:
      if path not in UniqueList:
        UniqueList += [path]
    for path in UniqueList:
      process.schedule.remove(getattr(process,path))
    process.setSchedule_(process.schedule)
    process.prune()

# Removing streams and datasets PSets
    if hasattr(process,'streams'):
      delattr(process,'streams')
    if hasattr(process,'datasets'):
      delattr(process,'datasets')

# Removing sequences, possibly to be taken from fastsim import
    for label in SequencesToRemove:
      if hasattr(process,label):
        if hasattr(fastsim,label):
          setattr(process,label,getattr(fastsim,label))
        else:
          object = getattr(process,label)
          list = tuple(process.sequences_().keys())
          for name in list:
            sequence = getattr(process,name)
            more=True
            while more:
              more = sequence.remove(object)
          list = tuple(process.paths_().keys())
          for name in list:
            path = getattr(process,name)
            more=True
            while more:
              more = path.remove(object)
          delattr(process,label)

# Removing modules, possibly to be taken from fastsim import
    for label in ModulesToRemove:
      if hasattr(process,label):
        if hasattr(fastsim,label):
          setattr(process,label,getattr(fastsim,label))
        else:
          object = getattr(process,label)
          # remove from sequences
          list = tuple(process.sequences_().keys())
          for name in list:
            sequence = getattr(process,name)
            more=True
            while more:
              more = sequence.remove(object)
          # remove from paths
          list = tuple(process.paths_().keys())
          for name in list:
            path = getattr(process,name)
            more=True
            while more:
              more = path.remove(object)
          # remove from end paths
          list = tuple(process.endpaths_().keys())
          for name in list:
            path = getattr(process,name)
            more=True
            while more:
              more = path.remove(object)
          delattr(process,label)

# Special transformations:
    if hasattr(process,'hltGetConditions') and hasattr(process,'HLTriggerFirstPath'):
      process.hltDummyConditions = cms.EDFilter( "HLTBool", result = cms.bool( True ) )
      process.HLTriggerFirstPath.replace(process.hltGetConditions,process.hltDummyConditions)
    if hasattr(process,'hltPixelVertices'):
      process.hltPixelVertices.beamSpot = cms.InputTag('offlineBeamSpot')
    specialModules = ( 'hltEcalRecHit', 'hltEcalPreshowerRecHit', )
    for label in specialModules:
      if hasattr(process,label):
        setattr(fastsim,label,getattr(process,label))

# Use fastsim imports
    for label in fastsim.producers_().keys():
      if hasattr(process,label):
        setattr(process,label,getattr(fastsim,label))
    for label in fastsim.filters_().keys():
      if hasattr(process,label):
        setattr(process,label,getattr(fastsim,label))
    for label in fastsim.analyzers_().keys():
      if hasattr(process,label):
        setattr(process,label,getattr(fastsim,label))
    for label in fastsim.sequences_().keys():
      if hasattr(process,label):
        setattr(process,label,getattr(fastsim,label))

# Update InputTags

    InputTags = (
#     ('hltGtDigis','gtDigis'),
#     ('hltL1GtObjectMap','gtDigis'),
      ('hltEcalDigis:ebDigis','ecalDigis:ebDigis'),
      ('hltEcalDigis:eeDigis','ecalDigis:eeDigis'),
      ('hltMuonCSCDigis','muonCSCDigis'),
      ('hltMuonCSCDigis:MuonCSCStripDigi','muonCSCDigis:MuonCSCStripDigi'),
      ('hltMuonCSCDigis:MuonCSCWireDigi','muonCSCDigis:MuonCSCWireDigi'),
      ('hltMuonDTDigis','muonDTDigis'),
      ('hltMuonRPCDigis','muonRPCDigis'),
      ('hltEcalPreshowerDigis','ecalPreshowerDigis'),
      ('hltHbhereco', 'hbhereco'),
      ('hltHoreco', 'horeco'),
      ('hltHfreco', 'hfreco'),

      ('hltIter2Merged', 'generalTracks'),
      ('hltIter2HighPtMerged', 'generalTracks'),
      ('hltIter2MergedForElectrons', 'generalTracks'),
      ('hltIter2MergedForPhotons', 'generalTracks'),
      ('hltIter2L3MuonMerged', 'generalTracks'),
      ('hltIter2MergedForBTag', 'generalTracks'),
      ('hltIter2MergedForTau', 'generalTracks'),
      ('hltIter2GlbTrkMuonMerged', 'generalTracks'),
      ('hltIter2HighPtTkMuMerged', 'generalTracks'),
      ('hltIter2HighPtTkMuIsoMerged', 'generalTracks'),
      ('hltIter2DisplacedJpsiMerged', 'generalTracks'),
      ('hltIter2DisplacedPsiPrimeMerged', 'generalTracks'),
      ('hltIter2DisplacedNRMuMuMerged', 'generalTracks'),
      ('hltIter2DisplacedTau3muMerged', 'generalTracks'),
      ('hltIter0PFlowTrackSelectionHighPurityForBTag', 'generalTracks'),
      ('hltIter4HighPtMerged', 'generalTracks'),
      ('hltIterativeTrackingForPAMerged', 'generalTracks'),
      ('hltPAIterativeTrackingMerged', 'generalTracks'),

      ('hltFastPVPixelTracks','hltPixelTracks'),
      ('hltFastPVPixelTracksRecover','hltPixelTracks'),
      ('hltPixelTracksL3Muon','hltPixelTracks'),
      ('hltPixelTracksGlbTrkMuon','hltPixelTracks'),
      ('hltPixelTracksHighPtTkMuIso','hltPixelTracks'),
      ('hltPixelTracksHybrid','hltPixelTracks'),
      ('hltPixelTracksForPhotons','hltPixelTracks'),
      ('hltPixelTracksForEgamma','hltPixelTracks'),
      ('hltPixelTracksElectrons','hltPixelTracks'),
      ('hltPixelTracksForHighPt','hltPixelTracks'),
      ('hltHighPtPixelTracks','hltPixelTracks'),
      ('hltPixelTracksForNoPU','hltPixelTracks'),
      ('hltPixelTracksForSeedsTau3mu','hltPixelTracks'),

      ('hltL1extraParticles','l1extraParticles'),
      ('hltL1extraParticles:Central','l1extraParticles:Central'),
      ('hltL1extraParticles:Forward','l1extraParticles:Forward'),
      ('hltL1extraParticles:Isolated','l1extraParticles:Isolated'),
      ('hltL1extraParticles:NonIsolated','l1extraParticles:NonIsolated'),
      ('hltL1extraParticles:Tau','l1extraParticles:Tau'),
      ('hltL1extraParticles:IsoTau','l1extraParticles:IsoTau'),
      ('hltOfflineBeamSpot','offlineBeamSpot'),
      ('hltOnlineBeamSpot','offlineBeamSpot'),
      ('hltSiStripClusters','MeasurementTrackerEvent'),

      )
    from HLTrigger.Configuration.CustomConfigs import MassReplaceInputTag
    for pair in InputTags:
      process = MassReplaceInputTag(process,pair[0],pair[1])

# Update top-level named parameters
    NamedParameters = (
#     ('GMTReadoutCollection',cms.InputTag('gtDigis'),cms.InputTag('gmtDigis')),
      ('killDeadChannels',cms.bool(True),cms.bool(False)),
      ('recoverEBFE',cms.bool(True),cms.bool(False)),
      ('recoverEEFE',cms.bool(True),cms.bool(False)),
      ('src',cms.InputTag('hltHcalTowerNoiseCleaner'),cms.InputTag('hltTowerMakerForAll')),
      ('src',cms.InputTag('hltHcalTowerNoiseCleanerWithrechit'),cms.InputTag('hltTowerMakerForAll')),
      ('initialSeeds',cms.InputTag('noSeedsHere'),cms.InputTag('hltPixelPairSeeds')),
      ('preFilteredSeeds',cms.bool(True),cms.bool(False)),
      )
    from HLTrigger.Configuration.CustomConfigs import MassReplaceParameter
    for thrice in NamedParameters:
      process = MassReplaceParameter(process,thrice[0],thrice[1],thrice[2])

# Update nested named parameters
    for label in ('hltEgammaElectronPixelSeeds','hltEgammaElectronPixelSeedsUnseeded',):
      if hasattr(process,label):
        getattr(process,label).SeedConfiguration.initialSeeds = cms.InputTag('hltPixelPairSeeds')
        getattr(process,label).SeedConfiguration.preFilteredSeeds = cms.bool(False)

# Extending fastsim import
    fastsim.extend(process)
    fastsim.setSchedule_(fastsim.schedule)
    fastsim.prune()

# muon seeds
    import FastSimulation.HighLevelTrigger.full2fast as full2fast
    if hasattr(fastsim,"hltL3TrajSeedOIHit"):
      full2fast.modify_hltL3TrajSeedOIHit(fastsim.hltL3TrajSeedOIHit)
    if hasattr(fastsim,"hltL3NoFiltersTrajSeedOIHit"):
      full2fast.modify_hltL3TrajSeedOIHit(fastsim.hltL3NoFiltersTrajSeedOIHit)
    if hasattr(fastsim,"hltL3TrajSeedIOHit"):
      full2fast.modify_hltL3TrajSeedIOHit(fastsim.hltL3TrajSeedIOHit)
    if hasattr(fastsim,"hltL3NoFiltersTrajSeedIOHit"):
      full2fast.modify_hltL3NoFiltersTrajSeedIOHit(fastsim.hltL3NoFiltersTrajSeedIOHit)

    return fastsim

  else:

    return process