Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
import re, os, sys
import FWCore.ParameterSet.Config as cms
from Configuration.DataProcessing.GetScenario import getScenario

"""
Example configuration for online reconstruction meant for visualization clients.
"""

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

if unitTest:
    from DQM.Integration.config.unittestinputsource_cfi import options, runType, source
else:
    from DQM.Integration.config.inputsource_cfi import options, runType, source, set_BeamSplashRun_settings

# 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
#scenarios = {'pp_run': 'ppEra_Run2_2016','cosmic_run':'cosmicsEra_Run2_2016','hi_run':'HeavyIons'}
#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'}
scenarios = {'pp_run': 'ppEra_Run3','cosmic_run':'cosmicsEra_Run3','hi_run':'ppEra_Run3_pp_on_PbPb_approxSiStripClusters', 'commissioning_run':'cosmicsEra_Run3'}

if not runType.getRunTypeName() in scenarios.keys():
    msg = "Error getting the scenario out of the 'runkey', no mapping for: %s\n"%runType.getRunTypeName()
    raise RuntimeError(msg)

scenarioName = scenarios[runType.getRunTypeName()]

if not unitTest :
  if options.BeamSplashRun :
    scenarioName = 'ppEra_Run3'
    pass

print("Using scenario:",scenarioName)

try:
    scenario = getScenario(scenarioName)
except Exception as ex:
    msg = "Error getting Scenario implementation for %s\n" % (
        scenarioName,)
    msg += str(ex)
    raise RuntimeError(msg)

# A hack necessary to prevert scenario.visualizationProcessing
# from overriding the connect string
from DQM.Integration.config.FrontierCondition_GT_autoExpress_cfi import GlobalTag
kwds = {
   'globalTag': GlobalTag.globaltag.value(),
   'globalTagConnect': GlobalTag.connect.value(),
   'beamSplashRun' : ":localreco+hcalOnlyGlobalRecoSequence+caloTowersRec" if options.BeamSplashRun else "",
}

# explicitly select the input collection, since we get multiple in online
from EventFilter.RawDataCollector.rawDataMapperByLabel_cfi import rawDataMapperByLabel
rawDataMapperByLabel.rawCollectionList = ["rawDataRepacker"]


# example of how to add a filer IN FRONT of all the paths, eg for HLT selection
#kwds['preFilter'] = 'DQM/Integration/python/config/visualizationPreFilter.hltfilter'

process = scenario.visualizationProcessing(writeTiers=['FEVT'], **kwds)

if unitTest:
    process.__dict__['_Process__name'] = "RECONEW"

process.source = source

if not unitTest:
    process.source.inputFileTransitionsEachEvent = True
    process.source.skipFirstLumis                = True
    process.source.minEventsPerLumi              = 0
    process.source.nextLumiTimeoutMillis         = 10000
    if options.BeamSplashRun :
      set_BeamSplashRun_settings( process.source )

    m = re.search(r"\((\w+)\)", str(source.runNumber))
    runno = str(m.group(1))
    outDir= options.outputBaseDir+'/EvD/run'+runno+'/streamEvDOutput'
else:
    runno = options.runNumber
    outDir = "./upload"

#create output directory
try:
    os.makedirs(outDir)
except:
    pass

process.options = cms.untracked.PSet(
        Rethrow = cms.untracked.vstring('ProductNotFound'),
        wantSummary = cms.untracked.bool(True),
        numberOfThreads = cms.untracked.uint32(8),
        numberOfStreams = cms.untracked.uint32(8)
    )

process.maxEvents = cms.untracked.PSet(
        input = cms.untracked.int32(-1)
    )
oldo = process._Process__outputmodules["FEVToutput"]
del process._Process__outputmodules["FEVToutput"]

process.FEVToutput = cms.OutputModule("JsonWritingTimeoutPoolOutputModule",
    splitLevel = oldo.splitLevel,
    outputCommands = oldo.outputCommands,
    fileName = oldo.fileName,
    dataset = oldo.dataset,
    runNumber = cms.untracked.uint32(int(runno)),
    streamLabel = cms.untracked.string("streamEvDOutput_dqmcluster"),
    # output path must exist!
    outputPath = cms.untracked.string(outDir),
)

process.DQMMonitoringService = cms.Service("DQMMonitoringService")

dump = False
if dump:
    psetFile = open("RunVisualizationProcessingCfg.py", "w")
    psetFile.write(process.dumpPython())
    psetFile.close()
    cmsRun = "cmsRun -e RunVisualizationProcessingCfg.py"
    print("Now do:\n%s" % cmsRun)

print("Global Tag used:", process.GlobalTag.globaltag.value())
print("Final Source settings:", process.source)