CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_1/src/HLTrigger/Configuration/python/customizeHLTforL1Emulator.py

Go to the documentation of this file.
00001 import FWCore.ParameterSet.Config as cms
00002 import sys, string
00003 
00004 def switchToL1Emulator(process,
00005   # default settings given are such that only the GT is re-emulated
00006   newGmtSetting    = False,
00007   MergeMethodPtBrl = 'minPt',
00008   MergeMethodPtFwd = 'minPt',
00009   newCSCTFLUTs     = False,
00010   newGctSetting    = False,
00011   newECALLUTs      = False,
00012   newHCALLUTs      = False):
00013   """patch the process to run the RawToDigi and SimL1Emulator sequences instead of unpacking the hltGctDigis and hltGtDigis"""
00014 
00015   # redefine the HLTL1UnpackerSequence
00016   HLTL1UnpackerSequence = cms.Sequence( process.RawToDigi + process.SimL1Emulator + process.hltL1GtObjectMap + process.hltL1extraParticles )
00017 
00018   for iterable in process.sequences.itervalues():
00019       iterable.replace( process.HLTL1UnpackerSequence, HLTL1UnpackerSequence)
00020 
00021   for iterable in process.paths.itervalues():
00022       iterable.replace( process.HLTL1UnpackerSequence, HLTL1UnpackerSequence)
00023 
00024   for iterable in process.endpaths.itervalues():
00025       iterable.replace( process.HLTL1UnpackerSequence, HLTL1UnpackerSequence)
00026 
00027   process.HLTL1UnpackerSequence = HLTL1UnpackerSequence
00028 
00029   # redefine the single hltGtDigis module, for paths that do not use the HLTL1UnpackerSequence
00030   process.HLTL1GtDigisSequence = cms.Sequence( process.RawToDigi + process.SimL1Emulator )
00031 
00032   for iterable in process.sequences.itervalues():
00033       iterable.replace( process.hltGtDigis, process.HLTL1GtDigisSequence)
00034 
00035   for iterable in process.paths.itervalues():
00036       iterable.replace( process.hltGtDigis, process.HLTL1GtDigisSequence)
00037 
00038   for iterable in process.endpaths.itervalues():
00039       iterable.replace( process.hltGtDigis, process.HLTL1GtDigisSequence)
00040 
00041   # GMT re-emulation
00042   if newGmtSetting:
00043     process.load('L1TriggerConfig.GMTConfigProducers.L1MuGMTParameters_cfi')
00044 
00045     # configure muon rank algo for GMT re-emulation
00046     process.L1MuGMTParameters.MergeMethodPtBrl = cms.string(MergeMethodPtBrl)
00047     process.L1MuGMTParameters.MergeMethodPtFwd = cms.string(MergeMethodPtFwd)
00048 
00049     process.L1MuGMTParameters.VersionSortRankEtaQLUT = cms.uint32(275)
00050 
00051     import L1Trigger.CSCTrackFinder.csctfDigis_cfi as csctfDigisGMT
00052 
00053     process.csctfReEmulDigis =  csctfDigisGMT.csctfDigis.clone()
00054     process.csctfReEmulDigis.CSCTrackProducer = cms.untracked.InputTag("csctfReEmulTracks")
00055 
00056     import L1Trigger.CSCTrackFinder.csctfTrackDigis_cfi as csctfTrackDigis
00057 
00058     process.csctfReEmulTracks = csctfTrackDigis.csctfTrackDigis.clone()
00059     process.csctfReEmulTracks.readDtDirect                       = True
00060     process.csctfReEmulTracks.SectorReceiverInput                = cms.untracked.InputTag("csctfDigis")
00061     process.csctfReEmulTracks.DtDirectProd                       = cms.untracked.InputTag("csctfDigis", "DT")
00062     process.csctfReEmulTracks.SectorProcessor.initializeFromPSet = True
00063 
00064     process.load("L1Trigger.RPCTrigger.rpcTriggerDigis_cfi")
00065     process.rpcReEmulDigis = process.rpcTriggerDigis.clone()
00066 
00067     process.load("L1Trigger.GlobalMuonTrigger.gmtDigis_cfi")
00068     process.gmtReEmulDigis = process.gmtDigis.clone()
00069     process.gmtReEmulDigis.DTCandidates = cms.InputTag("gtDigis","DT")
00070     process.gmtReEmulDigis.RPCbCandidates = cms.InputTag("gtDigis","RPCb")
00071 
00072     # switch GMT input to use new re-emulated CSCTF input
00073     if newCSCTFLUTs:
00074       process.gmtReEmulDigis.CSCCandidates = cms.InputTag("csctfReEmulDigis","CSC")
00075     else:
00076       process.gmtReEmulDigis.CSCCandidates = cms.InputTag("gtDigis","CSC")
00077 
00078     process.gmtReEmulDigis.RPCfCandidates = cms.InputTag("gtDigis","RPCf")
00079     process.gmtReEmulDigis.MipIsoData = cms.InputTag("none")
00080 
00081     HLTL1MuonTriggerSequence = cms.Sequence( process.csctfReEmulTracks + process.csctfReEmulDigis + process.gmtReEmulDigis )
00082 
00083     # configure GT re-emulation to use new re-emulated GMT input
00084     process.simGtDigis.GmtInputTag = 'gmtReEmulDigis'
00085     process.HLTL1MuonTriggerSequence = HLTL1MuonTriggerSequence
00086     process.HLTL1UnpackerSequence.replace( process.simGtDigis, process.HLTL1MuonTriggerSequence + process.simGtDigis)
00087 
00088   # GCT re-emulation
00089   if newGctSetting:
00090     process.load('SimCalorimetry.EcalTrigPrimProducers.ecalTriggerPrimitiveDigis_cff')
00091     process.load('SimCalorimetry.HcalTrigPrimProducers.hcaltpdigi_cff')
00092 
00093     # settings for using new ECAL LUTs
00094     if newECALLUTs:
00095       process.ecalReEmulDigis = process.simEcalTriggerPrimitiveDigis.clone()
00096       process.ecalReEmulDigis.Label = 'ecalDigis'
00097       process.ecalReEmulDigis.InstanceEB = 'ebDigis'
00098       process.ecalReEmulDigis.InstanceEE = 'eeDigis'
00099       process.ecalReEmulDigis.BarrelOnly = False
00100 
00101     # settings for using new HCAL LUTs
00102     if newHCALLUTs:
00103       process.hcalReEmulDigis = process.simHcalTriggerPrimitiveDigis.clone()
00104       process.hcalReEmulDigis.inputLabel = cms.VInputTag(cms.InputTag('hcalDigis'), cms.InputTag('hcalDigis'))
00105       process.HcalTPGCoderULUT.LUTGenerationMode = cms.bool(False)
00106 
00107     # configure RCT re-emulation
00108     import L1Trigger.RegionalCaloTrigger.rctDigis_cfi
00109     process.rctReEmulDigis = L1Trigger.RegionalCaloTrigger.rctDigis_cfi.rctDigis.clone()
00110 
00111     if newECALLUTs:
00112       process.rctReEmulDigis.ecalDigis = cms.VInputTag( cms.InputTag( 'ecalReEmulDigis' ) )
00113     else:
00114       process.rctReEmulDigis.ecalDigis = cms.VInputTag( cms.InputTag( 'ecalDigis:EcalTriggerPrimitives' ) )
00115 
00116     if newHCALLUTs:
00117       process.rctReEmulDigis.hcalDigis = cms.VInputTag( cms.InputTag( 'hcalReEmulDigis' ) )
00118     else:
00119       process.rctReEmulDigis.hcalDigis = cms.VInputTag( cms.InputTag( 'hcalDigis' ) )
00120 
00121     # configure GCT re-emulation
00122     import L1Trigger.GlobalCaloTrigger.gctDigis_cfi
00123     process.gctReEmulDigis = L1Trigger.GlobalCaloTrigger.gctDigis_cfi.gctDigis.clone()
00124     process.gctReEmulDigis.inputLabel = 'rctReEmulDigis'
00125 
00126     if newECALLUTs and newHCALLUTs:
00127       HLTL1CaloTriggerSequence = cms.Sequence( process.ecalReEmulDigis + process.hcalReEmulDigis + process.rctReEmulDigis + process.gctReEmulDigis )
00128     elif newECALLUTs:
00129       HLTL1CaloTriggerSequence = cms.Sequence( process.ecalReEmulDigis + process.rctReEmulDigis + process.gctReEmulDigis )
00130     elif newHCALLUTs:
00131       HLTL1CaloTriggerSequence = cms.Sequence( process.hcalReEmulDigis + process.rctReEmulDigis + process.gctReEmulDigis )
00132     else:
00133       HLTL1CaloTriggerSequence = cms.Sequence( process.rctReEmulDigis + process.gctReEmulDigis )
00134 
00135     # configure GT re-emulation to use new re-emulated GCT input
00136     process.simGtDigis.GctInputTag = 'gctReEmulDigis'
00137     process.HLTL1CaloTriggerSequence = HLTL1CaloTriggerSequence
00138     process.HLTL1UnpackerSequence.replace( process.simGtDigis, process.HLTL1CaloTriggerSequence + process.simGtDigis)
00139 
00140   return process
00141 
00142 
00143 def switchToCustomL1Digis(process, customGmt, customGct, customGt):
00144   """patch the process to use custom GMT, GCT and GT results"""
00145 
00146   # explicit replacements to use "simGtDigis", "simGmtDigis" and "simGctDigis" instead of "hltGtDigis" or "hltGctDigis"
00147   if 'hltL1GtObjectMap' in process.__dict__:
00148     process.hltL1GtObjectMap.GmtInputTag = cms.InputTag( customGmt )
00149     process.hltL1GtObjectMap.GctInputTag = cms.InputTag( customGct )
00150   if 'hltL1extraParticles' in process.__dict__:
00151     process.hltL1extraParticles.muonSource          = cms.InputTag( customGmt )
00152     process.hltL1extraParticles.isolatedEmSource    = cms.InputTag( customGct, 'isoEm' )
00153     process.hltL1extraParticles.nonIsolatedEmSource = cms.InputTag( customGct, 'nonIsoEm' )
00154     process.hltL1extraParticles.centralJetSource    = cms.InputTag( customGct, 'cenJets' )
00155     process.hltL1extraParticles.forwardJetSource    = cms.InputTag( customGct, 'forJets' )
00156     process.hltL1extraParticles.tauJetSource        = cms.InputTag( customGct, 'tauJets' )
00157     process.hltL1extraParticles.etTotalSource       = cms.InputTag( customGct )
00158     process.hltL1extraParticles.etHadSource         = cms.InputTag( customGct )
00159     process.hltL1extraParticles.etMissSource        = cms.InputTag( customGct )
00160   if 'hltL2MuonSeeds' in process.__dict__:
00161     process.hltL2MuonSeeds.GMTReadoutCollection = cms.InputTag( customGmt )
00162 
00163   # automatic replacements to use "simGtDigis" and "simGctDigis" instead of "hltGtDigis" or "hltGctDigis"
00164   for module in process.__dict__.itervalues():
00165     if isinstance(module, cms._Module):
00166       for parameter in module.__dict__.itervalues():
00167         if isinstance(parameter, cms.InputTag):
00168           if parameter.moduleLabel == 'hltGtDigis':
00169             parameter.moduleLabel = customGt
00170           elif parameter.moduleLabel == 'hltGctDigis':
00171             parameter.moduleLabel = customGct
00172 
00173   # check if "hltGtDigis" and "hltGctDigis" are defined
00174   hasGtDigis  = 'hltGtDigis'  in process.producers
00175   hasGctDigis = 'hltGctDigis' in process.producers
00176 
00177   # remove "hltGtDigis" and "hltGctDigis" from all paths, endpaths and sequences
00178   for iterable in process.sequences.itervalues():
00179     if hasGtDigis:  iterable.remove( process.hltGtDigis )
00180     if hasGctDigis: iterable.remove( process.hltGctDigis )
00181 
00182   for iterable in process.paths.itervalues():
00183     if hasGtDigis:  iterable.remove( process.hltGtDigis )
00184     if hasGctDigis: iterable.remove( process.hltGctDigis )
00185 
00186   for iterable in process.endpaths.itervalues():
00187     if hasGtDigis:  iterable.remove( process.hltGtDigis )
00188     if hasGctDigis: iterable.remove( process.hltGctDigis )
00189 
00190   return process
00191 
00192 
00193 def switchToSimGtDigis(process):
00194   """patch the process to use newly emulated GT results"""
00195   return switchToCustomL1Digis(process, 'gtDigis', 'gctDigis', 'simGtDigis')
00196 
00197 def switchToSimGmtGctGtDigis(process):
00198   """patch the process to use newly emulated GMT, GCT and GT results"""
00199   return switchToCustomL1Digis(process, 'simGmtDigis', 'simGctDigis', 'simGtDigis')
00200 
00201 def switchToSimGctGtDigis(process):
00202   """patch the process to use gtDigis for GMT results, and newly emulated GCT and GT results"""
00203   return switchToCustomL1Digis(process, 'gtDigis', 'simGctDigis', 'simGtDigis')
00204 
00205 def switchToSimGmtGtDigis(process):
00206   """patch the process to use gctDigis for GCT results, and newly emulated GMT and GT results"""
00207   return switchToCustomL1Digis(process, 'simGmtDigis', 'gctDigis', 'simGtDigis')
00208 
00209 def switchToSimGtReEmulGmtGctDigis(process):
00210   """patch the process to use newly emulated GMT, GCT and GT results starting from new Muon and Calo LUTs (eventually)"""
00211   return switchToCustomL1Digis(process, 'gmtReEmulDigis', 'gctReEmulDigis', 'simGtDigis')
00212 
00213 def switchToSimGtReEmulGmtDigis(process):
00214   """patch the process to use newly emulated GMT and GT results starting from new Muon LUTs (eventually)"""
00215   return switchToCustomL1Digis(process, 'gmtReEmulDigis', 'gctDigis', 'simGtDigis')
00216 
00217 def switchToSimGtReEmulGctDigis(process):
00218   """patch the process to use newly emulated GCT and GT results starting from new Calo LUTs (eventually)"""
00219   return switchToCustomL1Digis(process, 'gtDigis', 'gctReEmulDigis', 'simGtDigis')
00220