Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-11-27 03:17:54

0001 #
0002 #  reEmul.py  configurable test of L1T re-emulation
0003 #
0004 #  Example Usage:
0005 #
0006 #     cmsRun reEmul.py                 : stage-2 re-emulation on 2015 zero-bias data
0007 #
0008 #     cmsRun reEmul.py era=stage1      : stage-1 re-emulation on 2015 zero-bias data
0009 #
0010 #     cmsRun reEmul.py era=stage2 output=mu_stage2.root input=/store/data/Run2015D/DoubleMuon/RAW/v1/000/260/627/00000/004EF961-6082-E511-BFB0-02163E011BC4.root max=10
0011 #                                      : stage-2 re-emulation on 2015 double muon data
0012 #
0013 #  Limitations:
0014 #
0015 #     - stage-1 re-emulation will complain about DT digi unpacking... harmless.  Will go away when we use GT for data + overrides for stage-1 emulation.
0016 #
0017 #     - stage-1 re-emulation does not put muons into the ntuple... will be fixed when legacy->upgrade converter is provided for muons.
0018 #
0019 
0020 import FWCore.ParameterSet.Config as cms
0021 import FWCore.ParameterSet.VarParsing as VarParsing
0022 from Configuration.Eras.Era_Run2_25ns_cff import Run2_25ns
0023 from Configuration.Eras.Era_Run2_2016_cff import Run2_2016
0024 from Configuration.Eras.Modifier_stage1L1Trigger_cff import stage1L1Trigger
0025 from Configuration.Eras.Modifier_stage2L1Trigger_cff import stage2L1Trigger
0026 import os
0027 import sys
0028 
0029 options = VarParsing.VarParsing ('analysis')
0030 
0031 options.register ('era',    'stage2',  VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string,  "The data taking Era: stage1 or stage2")
0032 options.register ('output', 'DEFAULT', VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string,  "The output file name")
0033 options.register ('input',  '',        VarParsing.VarParsing.multiplicity.list,      VarParsing.VarParsing.varType.string,  "The input files")
0034 options.register ('max',    '',        VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int,     "The maximum number of events to process")
0035 options.register ('skip',   '',        VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.int,     "The number of events to skip initially")
0036 
0037 ## options.input = '/store/data/Run2015D/ZeroBias/RAW/v1/000/260/627/00000/00A76FFA-0C82-E511-B441-02163E01450F.root'
0038 options.input = '/store/data/Run2015D/ZeroBias1/RAW/v1/000/256/843/00000/FE8AD1BB-D05E-E511-B3A7-02163E01276B.root'
0039 options.max  = 100 
0040 options.skip = 0 
0041 
0042 options.parseArguments()
0043 
0044 if (options.era == 'stage1'):
0045     print("INFO: runnings L1T Stage-1 (2015) Re-Emulation")
0046     process = cms.Process("L1TReEmulation", Run2_25ns)
0047 elif (options.era == 'stage2'):
0048     print("INFO: runnings L1T Stage-2 (2016) Re-Emulation")    
0049     process = cms.Process("L1TReEmulation", Run2_2016)
0050 else:
0051     print("ERROR: unknown era:  ", options.era, "\n")
0052     exit(0)
0053 
0054 if (options.output == 'DEFAULT'):
0055     tmp = cms.PSet(output = cms.string(""))
0056     stage1L1Trigger.toModify(tmp, output ='l1t_stage1.root')
0057     stage2L1Trigger.toModify(tmp, output ='l1t_stage2.root')
0058     options.output = tmp.output.value()
0059 print("INFO: output:  ", options.output)
0060 
0061 print("INFO: input:  ", options.input)
0062 print("INFO: max:  ", options.max)
0063 
0064 process.load("FWCore.MessageLogger.MessageLogger_cfi")
0065 process.MessageLogger.cerr.FwkReport.reportEvery = cms.untracked.int32(50)
0066 process.options = cms.untracked.PSet(wantSummary = cms.untracked.bool(False))
0067 
0068 
0069 process.source = cms.Source(
0070     'PoolSource',
0071     fileNames = cms.untracked.vstring(options.input)
0072 )
0073 if options.skip > 0:
0074     process.source.skipEvents = cms.untracked.uint32(options.skip)
0075 
0076 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.max))
0077 
0078 # PostLS1 geometry used
0079 process.load('Configuration.Geometry.GeometryExtended2015Reco_cff')
0080 process.load('Configuration.Geometry.GeometryExtended2015_cff')
0081 ############################
0082 process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
0083 from Configuration.AlCa.GlobalTag import GlobalTag
0084 
0085 #   For stage-1, we are re-emulating L1T based on the conditions in the GT, so
0086 #   best for now to use MC GT, even when running over a data file, and just
0087 #   ignore the main DT TP emulator warnings...  (In future we'll override only
0088 #   L1T emulator related conditions, so you can use a data GT)
0089 process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '')
0090 # Note:  For stage-2, all conditions are overriden by local config file.  Use data tag: 
0091 
0092 stage2L1Trigger.toReplaceWith(process.GlobalTag,
0093     #GlobalTag(process.GlobalTag, 'auto:run2_mc', '')
0094     GlobalTag(process.GlobalTag, 'auto:run2_data', '').clone(
0095     toGet = cms.VPSet(
0096         cms.PSet(record = cms.string("DTCCBConfigRcd"),
0097                  tag = cms.string("DTCCBConfig_NOSingleL_V05_mc"),
0098                  connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0099                  ),
0100 #        cms.PSet(record = cms.string("DTKeyedConfigListRcd"),
0101 #                 tag = cms.string("DTKeyedConfigContainer_NOSingleL_V05_mc"),
0102 #                 connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0103 #                 ),
0104         cms.PSet(record = cms.string("DTT0Rcd"),
0105                  tag = cms.string("DTt0_STARTUP_V02_mc"),
0106                  connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0107                  ),
0108         cms.PSet(record = cms.string("DTTPGParametersRcd"),
0109                  tag = cms.string("DTTPGParameters_V01_mc"),
0110                  connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS")
0111                  ),
0112         )
0113 ))
0114 
0115 #### Sim L1 Emulator Sequence:
0116 process.load('Configuration.StandardSequences.RawToDigi_cff')
0117 #process.load('Configuration.StandardSequences.SimL1Emulator_cff')
0118 process.load('L1Trigger.Configuration.L1TReEmulateFromRAW_cff')
0119 process.dumpED = cms.EDAnalyzer("EventContentAnalyzer")
0120 process.dumpES = cms.EDAnalyzer("PrintEventSetupContent")
0121 
0122 
0123 
0124 
0125 
0126 import L1Trigger.L1TCommon.l1tSummaryStage1Digis_cfi
0127 import L1Trigger.L1TCommon.l1tSummaryStage2Digis_cf
0128 process.l1tSummaryA = L1Trigger.L1TCommon.l1tSummaryStage1Digis_cfi.l1tSummaryStage1Digis.clone()
0129 stage2L1Trigger.toReplaceWith(process.l1tSummaryA, L1Trigger.L1TCommon.l1tSummaryStage2Digis_cfi.l1tSummaryStage2Digis.clone())
0130 
0131 import L1Trigger.L1TCommon.l1tSummaryStage1SimDigis_cfi
0132 import L1Trigger.L1TCommon.l1tSummaryStage2SimDigis_cfi
0133 process.l1tSummaryB = L1Trigger.L1TCommon.l1tSummaryStage1SimDigis_cfi.l1tSummaryStage1SimDigis.clone()
0134 stage2L1Trigger.toReplaceWith(process.l1tSummaryB, L1Trigger.L1TCommon.l1tSummaryStage2SimDigis_cfi.l1tSummaryStage2SimDigis.clone())
0135 
0136 # Additional output definition
0137 # TTree output file
0138 process.load("CommonTools.UtilAlgos.TFileService_cfi")
0139 process.TFileService.fileName = cms.string(options.output)
0140 
0141 
0142 # enable debug message logging for our modules
0143 process.MessageLogger.L1TCaloEvents=dict()
0144 process.MessageLogger.L1TGlobalEvents=dict()
0145 process.MessageLogger.l1t=dict()
0146 process.MessageLogger.Global=dict()
0147 process.MessageLogger.suppressInfo = cms.untracked.vstring('Geometry', 'AfterSource')
0148 
0149 # gt analyzer
0150 process.l1tGlobalAnalyzer = cms.EDAnalyzer('L1TGlobalAnalyzer',
0151     doText = cms.untracked.bool(True),
0152     dmxEGToken = cms.InputTag("None"),
0153     dmxTauToken = cms.InputTag("None"),
0154     dmxJetToken = cms.InputTag("None"),
0155     dmxEtSumToken = cms.InputTag("None"),
0156     muToken = cms.InputTag("simGmtStage2Digis"),
0157     egToken = cms.InputTag("simCaloStage2Digis"),
0158     tauToken = cms.InputTag("simCaloStage2Digis"),
0159     jetToken = cms.InputTag("simCaloStage2Digis"),
0160     etSumToken = cms.InputTag("simCaloStage2Digis"),
0161     gtAlgToken = cms.InputTag("None"),
0162     emulDxAlgToken = cms.InputTag("simGlobalStage2Digis"),
0163     emulGtAlgToken = cms.InputTag("simGlobalStage2Digis")
0164 )
0165 
0166 process.l1EventTree = cms.EDAnalyzer("L1EventTreeProducer",
0167                                      hltSource            = cms.InputTag("TriggerResults::HLT"),
0168                                      puMCFile             = cms.untracked.string(""),
0169                                      puDataFile           = cms.untracked.string(""),
0170                                      puMCHist             = cms.untracked.string(""),
0171                                      puDataHist           = cms.untracked.string(""),
0172                                      
0173                                      useAvgVtx            = cms.untracked.bool(True),
0174                                      maxAllowedWeight     = cms.untracked.double(-1)                                     
0175 )
0176 
0177 # Stage-1 Ntuple will not contain muons, and might (investigating) miss some Taus.  (Work underway)
0178 process.l1UpgradeTree = cms.EDAnalyzer("L1UpgradeTreeProducer",
0179     egToken      = cms.untracked.InputTag("simCaloStage1FinalDigis"),
0180     tauTokens    = cms.untracked.VInputTag("simCaloStage1FinalDigis:rlxTaus","simCaloStage1FinalDigis:isoTaus"),
0181     jetToken     = cms.untracked.InputTag("simCaloStage1FinalDigis"),
0182     muonToken    = cms.untracked.InputTag("None"),
0183     sumToken     = cms.untracked.InputTag("simCaloStage1FinalDigis",""),
0184     maxL1Upgrade = cms.uint32(60)
0185 )
0186 stage2L1Trigger.toModify(process.l1UpgradeTree,
0187     egToken      = "simCaloStage2Digis",
0188     tauTokens    = ["simCaloStage2Digis"],
0189     jetToken     = "simCaloStage2Digis",
0190     muonToken    = "simGmtStage2Digis",
0191     sumToken     = "simCaloStage2Digis"
0192 )
0193 
0194 
0195 process.L1TSeq = cms.Sequence(   process.RawToDigi        
0196                                    + process.L1TReEmulateFromRAW
0197 #                                   + process.dumpED
0198 #                                   + process.dumpES
0199 #                                   + process.l1tSummaryA
0200 # Comment this next module to silence per event dump of L1T objects:
0201                                    + process.l1tSummaryB
0202 #                                   + process.l1tGlobalAnalyzer
0203                                    + process.l1UpgradeTree
0204                                    + process.l1EventTree                                 
0205 )
0206 
0207 process.L1TPath = cms.Path(process.L1TSeq)
0208 
0209 process.schedule = cms.Schedule(process.L1TPath)
0210 
0211 # Re-emulating, so don't unpack L1T output, might not even exist...
0212 # Also, remove uneeded unpackers for speed.
0213 stage2L1Trigger.toReplaceWith(process.L1TSeq, process.L1TSeq.copyAndExclude([
0214     process.gmtStage2Digis,
0215     process.caloStage2Digis,
0216     process.gtStage2Digis,
0217     process.siPixelDigis,
0218     process.siStripDigis,
0219     process.castorDigis,
0220     process.scalersRawToDigi,
0221     process.tcdsDigis
0222 ]))
0223 stage1L1Trigger.toReplaceWith(process.L1TSeq, process.L1TSeq.copyAndExclude([
0224     process.caloStage1Digis,
0225     process.caloStage1FinalDigis,
0226     process.gtDigis,
0227     process.siPixelDigis,
0228     process.siStripDigis,
0229     process.castorDigis,
0230     process.scalersRawToDigi,
0231     process.tcdsDigis
0232 ]))
0233 
0234 print(process.L1TSeq)
0235 print(process.L1TReEmulateFromRAW)
0236 #processDumpFile = open('config.dump', 'w')
0237 #print >> processDumpFile, process.dumpPython()
0238 
0239 
0240 #process.out = cms.OutputModule("PoolOutputModule", 
0241 #   fileName = cms.untracked.string("l1tbmtf.root")
0242 #)
0243 #process.output_step = cms.EndPath(process.out)
0244 #process.schedule.extend([process.output_step])