Skip to content

Commit

Permalink
Enabling the DQM workflow to check GT mismatches
Browse files Browse the repository at this point in the history
  • Loading branch information
elfontan committed Feb 15, 2023
1 parent 9cb5dd1 commit cca05a2
Show file tree
Hide file tree
Showing 8 changed files with 307 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
import FWCore.ParameterSet.Config as cms

import sys
from Configuration.Eras.Era_Run3_cff import Run3
process = cms.Process("L1TStage2DQM", Run3)

unitTest = False
if 'unitTest=True' in sys.argv:
unitTest=True

#--------------------------------------------------
# Event Source and Condition

if unitTest:
process.load("DQM.Integration.config.unittestinputsource_cfi")
from DQM.Integration.config.unittestinputsource_cfi import options
else:
# Live Online DQM in P5
#process.load("DQM.Integration.config.inputsource_cfi")
#from DQM.Integration.config.inputsource_cfi import options

# Testing in lxplus
process.load("DQM.Integration.config.fileinputsource_lxplustest_cfi")
#process.load("DQM.Integration.config.fileinputsource_streamer_lxplustest_cfi") #ERROR
#process.load("DQM.Integration.config.fileinputsource_cfi") #ORIGINAL
from DQM.Integration.config.fileinputsource_cfi import options
# process.load("FWCore.MessageLogger.MessageLogger_cfi")
# process.MessageLogger.cerr.FwkReport.reportEvery = 1

# Required to load Global Tag
process.load("DQM.Integration.config.FrontierCondition_GT_cfi")

# # Condition for lxplus: change and possibly customise the GT
# from Configuration.AlCa.GlobalTag import GlobalTag as gtCustomise
# process.GlobalTag = gtCustomise(process.GlobalTag, 'auto:run3_data', '')

# Required to load EcalMappingRecord
process.load("Configuration.StandardSequences.GeometryRecoDB_cff")

#--------------------------------------------------
# DQM Environment
process.load("DQM.Integration.config.environment_cfi")

process.dqmEnv.subSystemFolder = "L1T"
process.dqmSaver.tag = "L1T"
process.dqmSaver.runNumber = options.runNumber
process.dqmSaverPB.tag = "L1T"
process.dqmSaverPB.runNumber = options.runNumber

process.dqmEndPath = cms.EndPath(process.dqmEnv * process.dqmSaver * process.dqmSaverPB)

#--------------------------------------------------
# Standard Unpacking Path

process.load("Configuration.StandardSequences.RawToDigi_Data_cff")

# remove unneeded unpackers
process.RawToDigi.remove(process.ecalPreshowerDigis)
#process.RawToDigi.remove(process.muonCSCDigis)
process.RawToDigi.remove(process.muonDTDigis)
process.RawToDigi.remove(process.muonRPCDigis)
process.RawToDigi.remove(process.siPixelDigis)
process.RawToDigi.remove(process.siStripDigis)
process.RawToDigi.remove(process.castorDigis)
process.RawToDigi.remove(process.scalersRawToDigi)
process.RawToDigi.remove(process.tcdsDigis)
process.RawToDigi.remove(process.totemRPRawToDigi)
process.RawToDigi.remove(process.ctppsDiamondRawToDigi)
process.RawToDigi.remove(process.ctppsPixelDigis)

process.rawToDigiPath = cms.Path(process.RawToDigi)

#--------------------------------------------------
# Stage2 Unpacker and DQM Path

# Filter fat events
from HLTrigger.HLTfilters.hltHighLevel_cfi import hltHighLevel
process.hltFatEventFilter = hltHighLevel.clone(
throw = False,
# HLT_Physics now has the event % 107 filter as well as L1FatEvents
HLTPaths = ['HLT_L1FatEvents_v*', 'HLT_Physics_v*']
)

# This can be used if HLT filter not available in a run
process.selfFatEventFilter = cms.EDFilter("HLTL1NumberFilter",
invert = cms.bool(False),
period = cms.uint32(107),
rawInput = cms.InputTag("rawDataCollector"),
fedId = cms.int32(1024)
)

process.load("DQM.L1TMonitor.L1TStage2_cff")

process.l1tMonitorPath = cms.Path(
process.l1tStage2OnlineDQM +
process.hltFatEventFilter +
# process.selfFatEventFilter +
process.l1tStage2OnlineDQMValidationEvents
)

# Remove DQM Modules
#process.l1tStage2OnlineDQM.remove(process.l1tStage2CaloLayer1)
#process.l1tStage2OnlineDQM.remove(process.l1tStage2CaloLayer2)
#process.l1tStage2OnlineDQM.remove(process.l1tStage2Bmtf)
#process.l1tStage2OnlineDQM.remove(process.l1tStage2Emtf)
#process.l1tStage2OnlineDQM.remove(process.l1tStage2uGMT)
#process.l1tStage2OnlineDQM.remove(process.l1tStage2uGt)

#--------------------------------------------------
# Stage2 Quality Tests
process.load("DQM.L1TMonitorClient.L1TStage2MonitorClient_cff")
process.l1tStage2MonitorClientPath = cms.Path(process.l1tStage2MonitorClient)

#--------------------------------------------------
# Customize for other type of runs

# Cosmic run
if (process.runType.getRunType() == process.runType.cosmic_run):
# Remove Quality Tests for L1T Muon Subsystems since they are not optimized yet for cosmics
process.l1tStage2MonitorClient.remove(process.l1TStage2uGMTQualityTests)
process.l1tStage2MonitorClient.remove(process.l1TStage2EMTFQualityTests)
#process.l1tStage2MonitorClient.remove(process.l1TStage2OMTFQualityTests)
process.l1tStage2MonitorClient.remove(process.l1TStage2BMTFQualityTests)
process.l1tStage2MonitorClient.remove(process.l1TStage2MuonQualityTestsCollisions)
process.l1tStage2EventInfoClient.DisableL1Systems = ["EMTF", "OMTF", "BMTF", "uGMT"]

# Heavy-Ion run
if (process.runType.getRunType() == process.runType.hi_run):
process.onlineMetaDataDigis.onlineMetaDataInputLabel = "rawDataRepacker"
process.onlineMetaDataRawToDigi.onlineMetaDataInputLabel = "rawDataRepacker"
process.castorDigis.InputLabel = "rawDataRepacker"
process.ctppsDiamondRawToDigi.rawDataTag = "rawDataRepacker"
process.ctppsPixelDigis.inputLabel = "rawDataRepacker"
process.ecalDigis.cpu.InputLabel = "rawDataRepacker"
process.ecalPreshowerDigis.sourceTag = "rawDataRepacker"
process.hcalDigis.InputLabel = "rawDataRepacker"
process.muonCSCDigis.InputObjects = "rawDataRepacker"
process.muonDTDigis.inputLabel = "rawDataRepacker"
process.muonRPCDigis.InputLabel = "rawDataRepacker"
process.muonGEMDigis.InputLabel = "rawDataRepacker"
process.scalersRawToDigi.scalersInputTag = "rawDataRepacker"
process.siPixelDigis.cpu.InputLabel = "rawDataRepacker"
process.siStripDigis.ProductLabel = "rawDataRepacker"
process.tcdsDigis.InputLabel = "rawDataRepacker"
process.tcdsRawToDigi.InputLabel = "rawDataRepacker"
process.totemRPRawToDigi.rawDataTag = "rawDataRepacker"
process.totemTimingRawToDigi.rawDataTag = "rawDataRepacker"
process.csctfDigis.producer = "rawDataRepacker"
process.dttfDigis.DTTF_FED_Source = "rawDataRepacker"
process.gctDigis.inputLabel = "rawDataRepacker"
process.gtDigis.DaqGtInputTag = "rawDataRepacker"
process.twinMuxStage2Digis.DTTM7_FED_Source = "rawDataRepacker"
process.bmtfDigis.InputLabel = "rawDataRepacker"
process.omtfStage2Digis.inputLabel = "rawDataRepacker"
process.emtfStage2Digis.InputLabel = "rawDataRepacker"
process.gmtStage2Digis.InputLabel = "rawDataRepacker"
process.caloLayer1Digis.InputLabel = "rawDataRepacker"
process.caloStage1Digis.InputLabel = "rawDataRepacker"
process.caloStage2Digis.InputLabel = "rawDataRepacker"
process.gtStage2Digis.InputLabel = "rawDataRepacker"
process.l1tStage2CaloLayer1.fedRawDataLabel = "rawDataRepacker"
process.l1tStage2BmtfZeroSupp.rawData = "rawDataRepacker"
process.l1tStage2BmtfZeroSuppFatEvts.rawData = "rawDataRepacker"
process.selfFatEventFilter.rawInput = "rawDataRepacker"
process.rpcTwinMuxRawToDigi.inputTag = "rawDataRepacker"
process.rpcCPPFRawToDigi.inputTag = "rawDataRepacker"

#--------------------------------------------------
# L1T Online DQM Schedule

process.schedule = cms.Schedule(
process.rawToDigiPath,
process.l1tMonitorPath,
process.l1tStage2MonitorClientPath,
# process.l1tMonitorEndPath,
process.dqmEndPath
)

#--------------------------------------------------
# Process Customizations

from DQM.Integration.config.online_customizations_cfi import *
process = customise(process)
print("Final Source settings:", process.source)
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@
#--------------------------------------------------
# Event Source and Condition

if unitTest:
process.load("DQM.Integration.config.unittestinputsource_cfi")
from DQM.Integration.config.unittestinputsource_cfi import options
else:
#if unitTest:
# process.load("DQM.Integration.config.unittestinputsource_cfi")
# from DQM.Integration.config.unittestinputsource_cfi import options
#else:
# Live Online DQM in P5
process.load("DQM.Integration.config.inputsource_cfi")
from DQM.Integration.config.inputsource_cfi import options
#process.load("DQM.Integration.config.inputsource_cfi")
#from DQM.Integration.config.inputsource_cfi import options

# Testing in lxplus
#process.load("DQM.Integration.config.fileinputsource_cfi")
#from DQM.Integration.config.fileinputsource_cfi import options
process.load("DQM.Integration.config.fileinputsource_lxplustest_cfi")
from DQM.Integration.config.fileinputsource_lxplustest_cfi import options

# Required to load Global Tag
process.load("DQM.Integration.config.FrontierCondition_GT_cfi")
Expand Down Expand Up @@ -92,11 +92,11 @@

process.l1tEmulatorMonitorPath = cms.Path(
process.Stage2L1HardwareValidation +
process.l1tStage2EmulatorOnlineDQM +
process.hltFatEventFilter +
process.l1tStage2EmulatorOnlineDQM
# process.hltFatEventFilter +
# process.selfFatEventFilter +
process.Stage2L1HardwareValidationForValidationEvents +
process.l1tStage2EmulatorOnlineDQMValidationEvents
# process.Stage2L1HardwareValidationForValidationEvents +
# process.l1tStage2EmulatorOnlineDQMValidationEvents
)

# To get L1 conditions that are not in GlobalTag / O2O yet
Expand Down
85 changes: 85 additions & 0 deletions DQM/Integration/python/config/fileinputsource_lxplustest_cfi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
from __future__ import print_function
from __future__ import absolute_import
from builtins import range
import FWCore.ParameterSet.Config as cms

# Parameters for runType
import FWCore.ParameterSet.VarParsing as VarParsing
import sys
import fnmatch
from .dqmPythonTypes import *

# part of the runTheMatrix magic
from Configuration.Applications.ConfigBuilder import filesFromDASQuery

options = VarParsing.VarParsing("analysis")

options.register(
"runkey",
"pp_run",
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"Run Keys of CMS"
)

# Parameter for frontierKey
options.register('runUniqueKey',
'InValid',
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"Unique run key from RCMS for Frontier")

options.register('runNumber',
362720,
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.int,
"Run number. This run number has to be present in the dataset configured with the dataset option.")

options.register('maxLumi',
2000,
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.int,
"Only lumisections up to maxLumi are processed.")

options.register('minLumi',
1,
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.int,
"Only lumisections starting from minLumi are processed.")

options.register('lumiPattern',
'*0',
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"Only lumisections with numbers matching lumiPattern are processed.")

options.register('dataset',
'auto',
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
"Dataset name like '/ExpressPhysicsPA/PARun2016D-Express-v1/FEVT', or 'auto' to guess it with a DAS query. A dataset_cfi.py that defines 'readFiles' and 'secFiles' (like a DAS Python snippet) will override this, to avoid DAS queries.")

options.register('noDB',
True, # default value
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.bool,
"Don't upload the BeamSpot conditions to the DB")

options.parseArguments()

source = cms.Source ("PoolSource",fileNames = cms.untracked.vstring("/store/data/Run2022G/EphemeralHLTPhysics0/RAW/v1/000/362/720/00000/36f350d4-8e8a-4e38-b399-77ad9bf351dc.root"))
#source = cms.Source ("PoolSource",fileNames = readFiles, secondaryFileNames = secFiles, lumisToProcess = lumirange)
maxEvents = cms.untracked.PSet(
input = cms.untracked.int32(1000)
#input = cms.untracked.int32(-1)
)

# Fix to allow scram to compile
#if len(sys.argv) > 1:
# options.parseArguments()

runType = RunType()
if not options.runkey.strip():
options.runkey = "pp_run"

runType.setRunType(options.runkey.strip())
2 changes: 1 addition & 1 deletion DQM/Integration/python/config/online_customizations_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ def customise(process):
if not hasattr(process, "options"):
process.options = cms.untracked.PSet()

process.options.numberOfThreads = 1
process.options.numberOfThreads = 8
process.options.numberOfStreams = 1

return(process)
22 changes: 11 additions & 11 deletions DQM/L1TMonitor/python/L1TStage2Emulator_cff.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
valGtStage2Digis = simGtStage2Digis.clone(
ExtInputTag = "gtStage2Digis",
MuonInputTag = "gtStage2Digis:Muon",
MuonShowerInputTag = "gmtStage2Digis:MuonShower",
EGammaInputTag = "gtStage2Digis:EGamma",
TauInputTag = "gtStage2Digis:Tau",
JetInputTag = "gtStage2Digis:Jet",
Expand Down Expand Up @@ -206,26 +207,25 @@
from DQM.L1TMonitor.L1TdeStage2uGT_cfi import *

#-------------------------------------------------
# Stage2 Emulator and Emulator DQM Sequences

# Stage2 Emulator and Emulator DQM Sequence
# sequence to run for every event
l1tStage2EmulatorOnlineDQM = cms.Sequence(
l1tdeStage2Bmtf +
l1tdeStage2BmtfSecond +
l1tdeStage2Omtf +
l1tdeCSCTPG +
l1tdeStage2CppfOnlineDQMSeq +
l1tdeStage2EmtfOnlineDQMSeq +
l1tStage2uGMTEmulatorOnlineDQMSeq +
#l1tdeStage2Bmtf +
#l1tdeStage2BmtfSecond +
#l1tdeStage2Omtf +
#l1tdeCSCTPG +
#l1tdeStage2CppfOnlineDQMSeq +
#l1tdeStage2EmtfOnlineDQMSeq +
#l1tStage2uGMTEmulatorOnlineDQMSeq +
l1tdeStage2uGT +
l1tStage2uGtEmul
)

_run3_l1tStage2EmulatorOnlineDQM = l1tStage2EmulatorOnlineDQM.copy()
_run3_l1tStage2EmulatorOnlineDQM += l1tdeGEMTPG

from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM
run3_GEM.toReplaceWith( l1tStage2EmulatorOnlineDQM, _run3_l1tStage2EmulatorOnlineDQM )
#from Configuration.Eras.Modifier_run3_GEM_cff import run3_GEM
#run3_GEM.toReplaceWith( l1tStage2EmulatorOnlineDQM, _run3_l1tStage2EmulatorOnlineDQM )

_run3shower_l1tStage2EmulatorOnlineDQM = l1tStage2EmulatorOnlineDQM.copy()
run3_GEM.toReplaceWith( l1tStage2EmulatorOnlineDQM, cms.Sequence(_run3shower_l1tStage2EmulatorOnlineDQM + l1tdeCSCTPGShower) )
Expand Down
2 changes: 1 addition & 1 deletion DQM/L1TMonitor/python/L1TStage2uGTEmul_cfi.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@
l1tStage2uGtEmul = DQMEDAnalyzer('L1TStage2uGT',
l1tStage2uGtSource = cms.InputTag("valGtStage2Digis"),
monitorDir = cms.untracked.string("L1TEMU/L1TStage2uGTEmul"),
verbose = cms.untracked.bool(False)
verbose = cms.untracked.bool(True)
)
1 change: 0 additions & 1 deletion DQM/L1TMonitor/src/L1TStage2uGT.cc
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,6 @@ void L1TStage2uGT::analyze(const edm::Event& evt, const edm::EventSetup& evtSetu
//algoBits_->Fill(-1.); // fill underflow to normalize // FIXME: needed?
for (int ibx = uGtAlgs->getFirstBX(); ibx <= uGtAlgs->getLastBX(); ++ibx) {
for (auto itr = uGtAlgs->begin(ibx); itr != uGtAlgs->end(ibx); ++itr) { // FIXME: redundant loop?

// Fills prescale factor set histogram
prescaleFactorSet_->Fill(lumi, itr->getPreScColumn());

Expand Down
Loading

0 comments on commit cca05a2

Please sign in to comment.