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)
|