Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:07:42

0001 from __future__ import print_function
0002 import re, os, sys
0003 import FWCore.ParameterSet.Config as cms
0004 from Configuration.DataProcessing.GetScenario import getScenario
0005 
0006 """
0007 Example configuration for online reconstruction meant for visualization clients.
0008 """
0009 
0010 unitTest = 'unitTest=True' in sys.argv
0011 
0012 if unitTest:
0013     from DQM.Integration.config.unittestinputsource_cfi import options, runType, source
0014 else:
0015     from DQM.Integration.config.inputsource_cfi import options, runType, source, set_BeamSplashRun_settings
0016 
0017 # this is needed to map the names of the run-types chosen by DQM to the scenarios, ideally we could converge to the same names
0018 #scenarios = {'pp_run': 'ppEra_Run2_2016','cosmic_run':'cosmicsEra_Run2_2016','hi_run':'HeavyIons'}
0019 #scenarios = {'pp_run': 'ppEra_Run2_2016','pp_run_stage1': 'ppEra_Run2_2016','cosmic_run':'cosmicsEra_Run2_2016','cosmic_run_stage1':'cosmicsEra_Run2_2016','hi_run':'HeavyIonsEra_Run2_HI'}
0020 scenarios = {'pp_run': 'ppEra_Run3','cosmic_run':'cosmicsEra_Run3','hi_run':'ppEra_Run3_pp_on_PbPb_approxSiStripClusters', 'commissioning_run':'cosmicsEra_Run3'}
0021 
0022 if not runType.getRunTypeName() in scenarios.keys():
0023     msg = "Error getting the scenario out of the 'runkey', no mapping for: %s\n"%runType.getRunTypeName()
0024     raise RuntimeError(msg)
0025 
0026 scenarioName = scenarios[runType.getRunTypeName()]
0027 
0028 if not unitTest :
0029   if options.BeamSplashRun :
0030     scenarioName = 'ppEra_Run3'
0031     pass
0032 
0033 print("Using scenario:",scenarioName)
0034 
0035 try:
0036     scenario = getScenario(scenarioName)
0037 except Exception as ex:
0038     msg = "Error getting Scenario implementation for %s\n" % (
0039         scenarioName,)
0040     msg += str(ex)
0041     raise RuntimeError(msg)
0042 
0043 # A hack necessary to prevert scenario.visualizationProcessing
0044 # from overriding the connect string
0045 from DQM.Integration.config.FrontierCondition_GT_autoExpress_cfi import GlobalTag
0046 kwds = {
0047    'globalTag': GlobalTag.globaltag.value(),
0048    'globalTagConnect': GlobalTag.connect.value(),
0049    'beamSplashRun' : ":localreco+hcalOnlyGlobalRecoSequence+caloTowersRec" if options.BeamSplashRun else "",
0050 }
0051 
0052 # explicitly select the input collection, since we get multiple in online
0053 from EventFilter.RawDataCollector.rawDataMapperByLabel_cfi import rawDataMapperByLabel
0054 rawDataMapperByLabel.rawCollectionList = ["rawDataRepacker"]
0055 
0056 # example of how to add a filer IN FRONT of all the paths, eg for HLT selection
0057 #kwds['preFilter'] = 'DQM/Integration/config/visualizationPreFilter.hltfilter'
0058 
0059 # The following filter was used during 2018 high pile up (HPU) run.
0060 #kwds['preFilter'] = 'DQM/Integration/config/visualizationPreFilter.pixelClusterFilter'
0061 
0062 process = scenario.visualizationProcessing(writeTiers=['FEVT'], **kwds)
0063 
0064 if unitTest:
0065     process.__dict__['_Process__name'] = "RECONEW"
0066 
0067 process.source = source
0068 
0069 if not unitTest:
0070     process.source.inputFileTransitionsEachEvent = True
0071     process.source.skipFirstLumis                = True
0072     process.source.minEventsPerLumi              = 0
0073     process.source.nextLumiTimeoutMillis         = 10000
0074 
0075     if options.BeamSplashRun:
0076         set_BeamSplashRun_settings( process.source )
0077 
0078     # stream label
0079     if runType.getRunType() == runType.hi_run:
0080         process.source.streamLabel = "streamHIDQMEventDisplay"
0081     else:
0082         process.source.streamLabel = "streamDQMEventDisplay"
0083 
0084     m = re.search(r"\((\w+)\)", str(source.runNumber))
0085     runno = str(m.group(1))
0086     outDir= options.outputBaseDir+'/EvD/run'+runno+'/streamEvDOutput2'
0087 else:
0088     runno = options.runNumber
0089     outDir = "./upload"
0090 
0091 #create output directory
0092 try:
0093     os.makedirs(outDir)
0094 except:
0095     pass
0096 
0097 process.options = cms.untracked.PSet(
0098         Rethrow = cms.untracked.vstring('ProductNotFound'),
0099         wantSummary = cms.untracked.bool(True),
0100         numberOfThreads = cms.untracked.uint32(8),
0101         numberOfStreams = cms.untracked.uint32(8)
0102     )
0103 
0104 process.maxEvents = cms.untracked.PSet(
0105         input = cms.untracked.int32(-1)
0106     )
0107 oldo = process._Process__outputmodules["FEVToutput"]
0108 del process._Process__outputmodules["FEVToutput"]
0109 
0110 process.FEVToutput = cms.OutputModule("JsonWritingTimeoutPoolOutputModule",
0111     splitLevel = oldo.splitLevel,
0112     outputCommands = oldo.outputCommands,
0113     fileName = oldo.fileName,
0114     dataset = oldo.dataset,
0115     runNumber = cms.untracked.uint32(int(runno)),
0116     streamLabel = cms.untracked.string("streamEvDOutput2_dqmcluster"),
0117     # output path must exist!
0118     outputPath = cms.untracked.string(outDir),
0119 )
0120 
0121 if hasattr(oldo, 'SelectEvents'):
0122     process.FEVToutput.SelectEvents = oldo.SelectEvents
0123 
0124 process.DQMMonitoringService = cms.Service("DQMMonitoringService")
0125 
0126 dump = False
0127 if dump:
0128     psetFile = open("RunVisualizationProcessingCfg.py", "w")
0129     psetFile.write(process.dumpPython())
0130     psetFile.close()
0131     cmsRun = "cmsRun -e RunVisualizationProcessingCfg.py"
0132     print("Now do:\n%s" % cmsRun)
0133 print("Final Source settings:", process.source)