Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-06-14 02:53:34

0001 #!/usr/bin/env python
0002 from __future__ import print_function
0003 import sys
0004 
0005 """
0006 Description: script used for offline validation of the Global Trigger firmware and emulator agreement                                 
0007 (Contacts: Richard Cavanaugh, Elisa Fontanesi)                                                                                
0008 -----------------------------------------------------------------------------------------------------                      
0009 The parameters can be changed by adding command line arguments of the form:                                               
0010     runGlobalFakeInputProducer.py nevents=-1                                                                                      
0011 The latter can be used to change parameters in crab.                                                     
0012 Running on 3564 events (=one orbit) is recommended for test vector production for GT firmware validation.    
0013 """  
0014 
0015 job = 0 #job number
0016 njob = 1 #number of jobs
0017 nevents = 3564 #number of events
0018 rootout = False #whether to produce root file
0019 dump = False #dump python
0020 newXML = False #whether running with the new Grammar
0021 
0022 # ----------------                                                              
0023 # Argument parsing                                                                           
0024 # ----------------
0025 if len(sys.argv) == 2 and ':' in sys.argv[1]:
0026     argv = sys.argv[1].split(':')
0027 else:
0028     argv = sys.argv[1:]
0029 
0030 for arg in argv:
0031     (k, v) = map(str.strip, arg.split('='))
0032     if k not in globals():
0033         raise "Unknown argument '%s'!" % (k,)
0034     if isinstance(globals()[k], bool):
0035         globals()[k] = v.lower() in ('y', 'yes', 'true', 't', '1')
0036     elif isinstance(globals()[k], int):
0037         globals()[k] = int(v)
0038     else:
0039         globals()[k] = v
0040 
0041 neventsPerJob = int(nevents/njob)
0042 skip = job * neventsPerJob
0043 
0044 if skip>4:
0045     skip = skip-4
0046     neventsPerJob = neventsPerJob+4
0047 
0048 import FWCore.ParameterSet.Config as cms
0049 
0050 process = cms.Process('L1TEMULATION')
0051 
0052 process.load('Configuration.StandardSequences.Services_cff')
0053 process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff')
0054 
0055 # ------------------------------------------------------                                                                                                        
0056 # Message Logger output:                                                                   
0057 # Select the Message Logger output you would like to see
0058 # ------------------------------------------------------
0059 process.load('FWCore.MessageService.MessageLogger_cfi')
0060 #process.load('L1Trigger/L1TGlobal/debug_messages_cfi')
0061 
0062 # DEBUG                                                                                                                         
0063 process.MessageLogger.debugModules = ["simGtStage2Digis"]                                                                        
0064 process.MessageLogger.debugModules = ["l1t|Global"]                                                             
0065 process.MessageLogger.cerr = cms.untracked.PSet(                                                                       
0066     threshold = cms.untracked.string('DEBUG')                                                                                     
0067     )
0068 
0069 # DEBUG                                                                                
0070 process.MessageLogger.l1t_debug = cms.untracked.PSet()                                                                           
0071 process.MessageLogger.l1t = cms.untracked.PSet(                                                                               
0072     limit = cms.untracked.int32(100000),                                                          
0073 )
0074 
0075 # ------------                                                          
0076 # Input source                                                               
0077 # ------------
0078 # Set the number of events
0079 process.maxEvents = cms.untracked.PSet(
0080     input = cms.untracked.int32(neventsPerJob)
0081     )
0082 
0083 process.source = cms.Source("PoolSource",
0084     secondaryFileNames = cms.untracked.vstring(),
0085     fileNames = cms.untracked.vstring(
0086         # TTbar CMSSW_14X samples
0087         "/store/relval/CMSSW_14_0_1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/140X_mcRun3_2024_realistic_v4_PU_AlpakaVal_AlpakaDeviceVSHost-v14/50000/34ae12a4-2d90-4d5d-b243-e949af0952ae.root",
0088         "/store/relval/CMSSW_14_0_1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/140X_mcRun3_2024_realistic_v4_PU_AlpakaVal_AlpakaDeviceVSHost-v14/50000/5c08de0e-0571-4792-aa37-1b7d1915dbda.root",
0089         "/store/relval/CMSSW_14_0_1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/140X_mcRun3_2024_realistic_v4_PU_AlpakaVal_AlpakaDeviceVSHost-v14/50000/1aed742b-2f48-4cc3-8758-24153c38c79b.root",
0090         "/store/relval/CMSSW_14_0_1/RelValTTbar_14TeV/GEN-SIM-DIGI-RAW/140X_mcRun3_2024_realistic_v4_PU_AlpakaVal_AlpakaDeviceVSHost-v14/50000/096ba83b-620d-449d-a408-ebb209b54d76.root"
0091     ),
0092     skipEvents = cms.untracked.uint32(skip)
0093     )
0094 
0095 process.output =cms.OutputModule("PoolOutputModule",
0096         outputCommands = cms.untracked.vstring('keep *'),
0097     fileName = cms.untracked.string('testGlobalMCInputProducer_'+repr(job)+'.root')
0098     )
0099 
0100 process.options = cms.untracked.PSet(
0101     wantSummary = cms.bool(True)
0102 )
0103 
0104 # -----------------------------------------------
0105 # Additional output definition: TTree output file
0106 # -----------------------------------------------
0107 process.load("CommonTools.UtilAlgos.TFileService_cfi")
0108 process.TFileService.fileName = cms.string('l1t_histos.root')
0109 
0110 # ----------
0111 # Global Tag
0112 # ----------
0113 from Configuration.AlCa.GlobalTag import GlobalTag
0114 process.GlobalTag = GlobalTag(process.GlobalTag, '123X_mcRun3_2021_realistic_v13', '')
0115 
0116 # ----------------                                                                                     
0117 # Load the L1 menu                                                                   
0118 # ----------------
0119 process.load('L1Trigger.L1TGlobal.GlobalParameters_cff')
0120 process.load("L1Trigger.L1TGlobal.TriggerMenu_cff")
0121 xmlMenu="L1Menu_Collisions2024_v1_1_0.xml"
0122 process.TriggerMenu.L1TriggerMenuFile = cms.string(xmlMenu)
0123 process.ESPreferL1TXML = cms.ESPrefer("L1TUtmTriggerMenuESProducer","TriggerMenu")
0124 
0125 # DEBUG: Information about names and types of algos parsed by the emulator from the menu
0126 #process.menuDumper = cms.EDAnalyzer("L1TUtmTriggerMenuDumper") 
0127 process.dumpMenu = cms.EDAnalyzer("L1MenuViewer")
0128 
0129 # Flag to switch between using MC particles and injecting individual particles
0130 useMCtoGT = True
0131 
0132 process.dumpGT = cms.EDAnalyzer("l1t::GtInputDump",
0133                 egInputTag    = cms.InputTag("gtInput"),
0134         muInputTag    = cms.InputTag("gtInput"),
0135         muShowerInputTag = cms.InputTag("gtInput"),
0136         tauInputTag   = cms.InputTag("gtInput"),
0137         jetInputTag   = cms.InputTag("gtInput"),
0138         etsumInputTag = cms.InputTag("gtInput"),
0139         minBx         = cms.int32(0),
0140         maxBx         = cms.int32(0)
0141          )
0142 process.dumpED = cms.EDAnalyzer("EventContentAnalyzer")
0143 process.dumpES = cms.EDAnalyzer("PrintEventSetupContent")
0144 
0145 process.mcL1GTinput = cms.EDProducer("l1t::GenToInputProducer",
0146                                      bxFirst = cms.int32(-2),
0147                                      bxLast = cms.int32(2),
0148                      maxMuCand = cms.int32(8),
0149                      maxMuShowerCand = cms.int32(8),
0150                      maxJetCand = cms.int32(12),
0151                      maxEGCand  = cms.int32(12),
0152                      maxTauCand = cms.int32(8),
0153                                      jetEtThreshold = cms.double(1),
0154                                      tauEtThreshold = cms.double(1),
0155                                      egEtThreshold  = cms.double(1),
0156                                      muEtThreshold  = cms.double(1),
0157                      emptyBxTrailer = cms.int32(5),
0158                      emptyBxEvt = cms.int32(neventsPerJob)
0159                                      )
0160 
0161 process.mcL1GTinput.maxMuCand = cms.int32(8)
0162 process.mcL1GTinput.maxMuShowerCand = cms.int32(8)
0163 process.mcL1GTinput.maxJetCand = cms.int32(12)
0164 process.mcL1GTinput.maxEGCand  = cms.int32(12)
0165 process.mcL1GTinput.maxTauCand = cms.int32(8)
0166 
0167 # --------------
0168 # Fake the input
0169 # --------------
0170 process.fakeL1GTinput = cms.EDProducer("l1t::FakeInputProducer",
0171 
0172 # Note: There is no error checking on these parameters...you are responsible.
0173                        egParams = cms.untracked.PSet(
0174                    egBx    = cms.untracked.vint32(-2, -1,  0,  0,  1,  2),
0175                egHwPt  = cms.untracked.vint32(10, 20, 30, 61, 40, 50),
0176                egHwPhi = cms.untracked.vint32(11, 21, 31, 61, 41, 51),
0177                egHwEta = cms.untracked.vint32(12, 22, 32, 62, 42, 52),
0178                egIso   = cms.untracked.vint32( 0,  0,  1,  1,  0,  0)
0179                ),
0180 
0181                        muParams = cms.untracked.PSet(
0182                    muBx    = cms.untracked.vint32(-2, -1,  0,  0,  1,  2),
0183                muHwPt  = cms.untracked.vint32(5, 20, 30, 61, 40, 50),
0184                muHwPhi = cms.untracked.vint32(11, 21, 31, 61, 41, 51),
0185                muHwEta = cms.untracked.vint32(12, 22, 32, 62, 42, 52),
0186                muIso   = cms.untracked.vint32( 0,  0,  1,  1,  0,  0)
0187                ),
0188 
0189                        tauParams = cms.untracked.PSet(
0190                    tauBx    = cms.untracked.vint32(),
0191                tauHwPt  = cms.untracked.vint32(),
0192                tauHwPhi = cms.untracked.vint32(),
0193                tauHwEta = cms.untracked.vint32(),
0194                tauIso   = cms.untracked.vint32()
0195                ),
0196 
0197                        jetParams = cms.untracked.PSet(
0198                    jetBx    = cms.untracked.vint32(  0,   0,   2,   1,   1,   2),
0199                jetHwPt  = cms.untracked.vint32(100, 200, 130, 170,  85, 145),
0200                jetHwPhi = cms.untracked.vint32(  2,  67,  10,   3,  78,  10),
0201                jetHwEta = cms.untracked.vint32(  110,  -99,  11,   0,  17,  11)
0202                ),
0203 
0204                        etsumParams = cms.untracked.PSet(
0205                    etsumBx    = cms.untracked.vint32( -2, -1,   0,  1,  2),
0206                etsumHwPt  = cms.untracked.vint32(  2,  1, 204,  3,  4),
0207                etsumHwPhi = cms.untracked.vint32(  2,  1,  20,  3,  4)
0208                )
0209                     )
0210 
0211 # ------------------------
0212 # Fill External conditions
0213 # ------------------------
0214 process.load('L1Trigger.L1TGlobal.simGtExtFakeProd_cfi')
0215 process.simGtExtFakeProd.bxFirst = cms.int32(-2)
0216 process.simGtExtFakeProd.bxLast = cms.int32(2)
0217 process.simGtExtFakeProd.setBptxAND   = cms.bool(True)
0218 process.simGtExtFakeProd.setBptxPlus  = cms.bool(True)
0219 process.simGtExtFakeProd.setBptxMinus = cms.bool(True)
0220 process.simGtExtFakeProd.setBptxOR    = cms.bool(True)
0221 
0222 # ----------------------------
0223 # Run the Stage 2 uGT emulator
0224 # ----------------------------
0225 process.load('L1Trigger.L1TGlobal.simGtStage2Digis_cfi')
0226 process.simGtStage2Digis.useMuonShowers = cms.bool(True)
0227 process.simGtStage2Digis.PrescaleSet = cms.uint32(1)
0228 process.simGtStage2Digis.ExtInputTag = cms.InputTag("simGtExtFakeProd")
0229 process.simGtStage2Digis.MuonInputTag = cms.InputTag("gtInput")
0230 process.simGtStage2Digis.MuonShowerInputTag  = cms.InputTag("gtInput")
0231 process.simGtStage2Digis.EGammaInputTag = cms.InputTag("gtInput")
0232 process.simGtStage2Digis.TauInputTag = cms.InputTag("gtInput")
0233 process.simGtStage2Digis.JetInputTag = cms.InputTag("gtInput")
0234 process.simGtStage2Digis.EtSumInputTag = cms.InputTag("gtInput")
0235 process.simGtStage2Digis.EmulateBxInEvent = cms.int32(1)
0236 #process.simGtStage2Digis.Verbosity = cms.untracked.int32(1)
0237 #process.simGtStage2Digis.AlgorithmTriggersUnprescaled = cms.bool(True)
0238 #process.simGtStage2Digis.AlgorithmTriggersUnmasked = cms.bool(True)
0239 
0240 process.dumpGTRecord = cms.EDAnalyzer("l1t::GtRecordDump",
0241                 egInputTag    = cms.InputTag("gtInput"),
0242         muInputTag    = cms.InputTag("gtInput"),
0243         muShowerInputTag = cms.InputTag("gtInput"),
0244         tauInputTag   = cms.InputTag("gtInput"),
0245         jetInputTag   = cms.InputTag("gtInput"),
0246         etsumInputTag = cms.InputTag("gtInput"),
0247         uGtAlgInputTag = cms.InputTag("simGtStage2Digis"),
0248         uGtExtInputTag = cms.InputTag("simGtExtFakeProd"),
0249         uGtObjectMapInputTag = cms.InputTag("simGtStage2Digis"),
0250         bxOffset       = cms.int32(skip),
0251         minBx          = cms.int32(-2),
0252         maxBx          = cms.int32(2),
0253         minBxVec       = cms.int32(0),
0254         maxBxVec       = cms.int32(0),
0255         dumpGTRecord   = cms.bool(True),
0256         dumpGTObjectMap= cms.bool(False),
0257                 dumpTrigResults= cms.bool(False),
0258         dumpVectors    = cms.bool(True),
0259         tvFileName     = cms.string( ("TestVector_ttBar_%03d.txt") % job ),
0260         tvVersion      = cms.int32(3),
0261                 ReadPrescalesFromFile = cms.bool(True),
0262                 psFileName     = cms.string( "prescale_L1TGlobal.csv" ),
0263                 psColumn       = cms.int32(1),
0264         unprescaleL1Algos = cms.bool(False),
0265                 unmaskL1Algos     = cms.bool(False)
0266          )
0267 
0268 process.load("L1Trigger.GlobalTriggerAnalyzer.l1GtTrigReport_cfi")
0269 process.l1GtTrigReport.L1GtRecordInputTag = "simGtStage2Digis"
0270 process.l1GtTrigReport.PrintVerbosity = 2
0271 process.report = cms.Path(process.l1GtTrigReport)
0272 
0273 process.MessageLogger.debugModules = ["MuCondition"]                                                             
0274 
0275 if useMCtoGT:
0276     process.gtInput = process.mcL1GTinput.clone()
0277 else:
0278     process.gtInput = process.fakeL1GTinput.clone()
0279 
0280 # -------------------------
0281 # Setup Digi to Raw to Digi
0282 # -------------------------
0283 process.load('EventFilter.L1TRawToDigi.gtStage2Raw_cfi')
0284 process.gtStage2Raw.GtInputTag = cms.InputTag("simGtStage2Digis")
0285 process.gtStage2Raw.ExtInputTag = cms.InputTag("simGtExtFakeProd")
0286 process.gtStage2Raw.EGammaInputTag = cms.InputTag("gtInput")
0287 process.gtStage2Raw.TauInputTag = cms.InputTag("gtInput")
0288 process.gtStage2Raw.JetInputTag = cms.InputTag("gtInput")
0289 process.gtStage2Raw.EtSumInputTag = cms.InputTag("gtInput")
0290 process.gtStage2Raw.MuonInputTag = cms.InputTag("gtInput")
0291 process.gtStage2Raw.MuonShowerInputTag = cms.InputTag("gtInput")
0292 
0293 process.load('EventFilter.L1TRawToDigi.gtStage2Digis_cfi')
0294 process.newGtStage2Digis = process.gtStage2Digis.clone()
0295 process.newGtStage2Digis.InputLabel = cms.InputTag('gtStage2Raw')
0296 # DEBUG 
0297 #process.newGtStage2Digis.debug = cms.untracked.bool(True) 
0298 
0299 process.dumpRaw = cms.EDAnalyzer(
0300     "DumpFEDRawDataProduct",
0301     label = cms.untracked.string("gtStage2Raw"),
0302     feds = cms.untracked.vint32 ( 1404 ),
0303     dumpPayload = cms.untracked.bool ( True )
0304 )
0305 
0306 process.newDumpGTRecord = cms.EDAnalyzer("l1t::GtRecordDump",
0307                 egInputTag    = cms.InputTag("newGtStage2Digis","EGamma"),
0308                 muInputTag    = cms.InputTag("newGtStage2Digis","Muon"),
0309                 muShowerInputTag = cms.InputTag("newGtStage2Digis", "MuonShower"),
0310         tauInputTag   = cms.InputTag("newGtStage2Digis","Tau"),
0311         jetInputTag   = cms.InputTag("newGtStage2Digis","Jet"),
0312         etsumInputTag = cms.InputTag("newGtStage2Digis","EtSum"),
0313         uGtAlgInputTag = cms.InputTag("newGtStage2Digis"),
0314         uGtExtInputTag = cms.InputTag("newGtStage2Digis"),
0315         uGtObjectMapInputTag = cms.InputTag("simGtStage2Digis"),
0316         bxOffset       = cms.int32(skip),
0317         minBx          = cms.int32(0),
0318         maxBx          = cms.int32(0),
0319         minBxVec       = cms.int32(0),
0320         maxBxVec       = cms.int32(0),
0321         dumpGTRecord   = cms.bool(True),
0322         dumpGTObjectMap= cms.bool(True),
0323                 dumpTrigResults= cms.bool(False),
0324         dumpVectors    = cms.bool(False),
0325         tvFileName     = cms.string( ("TestVector_%03d.txt") % job ),
0326                 ReadPrescalesFromFile = cms.bool(False),
0327                 psFileName     = cms.string( "prescale_L1TGlobal.csv" ),
0328                 psColumn       = cms.int32(1)
0329          )
0330 
0331 # -----------
0332 # GT analyzer
0333 # -----------
0334 process.l1tGlobalAnalyzer = cms.EDAnalyzer('L1TGlobalAnalyzer',
0335     doText = cms.untracked.bool(False),
0336     gmuToken = cms.InputTag("None"),
0337     dmxEGToken = cms.InputTag("None"),
0338     dmxTauToken = cms.InputTag("None"),
0339     dmxJetToken = cms.InputTag("None"),
0340     dmxEtSumToken = cms.InputTag("None"),
0341     muToken = cms.InputTag("gtInput"),
0342     egToken = cms.InputTag("gtInput"),
0343     tauToken = cms.InputTag("gtInput"),
0344     jetToken = cms.InputTag("gtInput"),
0345     etSumToken = cms.InputTag("gtInput"),
0346     gtAlgToken = cms.InputTag("simGtStage2Digis"),
0347     emulDxAlgToken = cms.InputTag("None"),
0348     emulGtAlgToken = cms.InputTag("simGtStage2Digis")
0349 )
0350 
0351 
0352 # ------------------                                                                                                    
0353 # Process definition                                                               
0354 # ------------------ 
0355 process.p1 = cms.Path(
0356 
0357 ## Generate input, emulate, dump results
0358     process.dumpMenu
0359     *process.gtInput
0360 #    *process.dumpGT
0361     *process.simGtExtFakeProd
0362     *process.simGtStage2Digis
0363     *process.dumpGTRecord
0364 
0365 ## Sequence for packing and unpacking uGT data
0366 #    +process.gtStage2Raw
0367 #    +process.dumpRaw
0368 #    +process.newGtStage2Digis
0369 #    +process.newDumpGTRecord
0370 
0371 ## Analysis/Dumping
0372     *process.l1tGlobalAnalyzer
0373 #    *process.menuDumper # DEBUG -> to activate the menuDumper
0374 #    *process.debug
0375 #    *process.dumpED
0376 #    *process.dumpES
0377     )
0378 
0379 # -------------------                                                                  
0380 # Schedule definition                                                                                                     
0381 # -------------------
0382 process.schedule = cms.Schedule(
0383     process.p1
0384     )
0385 #process.schedule.append(process.report)
0386 if rootout:
0387     process.outpath = cms.EndPath(process.output)
0388     process.schedule.append(process.outpath)
0389 
0390 # Final summary of the efficiency
0391 process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(True))
0392 
0393 # Options for multithreading
0394 #process.options.numberOfThreads = cms.untracked.uint32( 2 )
0395 #process.options.numberOfStreams = cms.untracked.uint32( 0 )
0396 
0397 if dump:
0398     outfile = open('dump_runGlobalFakeInputProducer_'+repr(job)+'.py','w')
0399     print(process.dumpPython(), file=outfile)
0400     outfile.close()