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
125
126
127
128
129
130
131
132
133
134
|
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 = 'unitTest=True' in sys.argv
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/config/visualizationPreFilter.hltfilter'
# The following filter was used during 2018 high pile up (HPU) run.
#kwds['preFilter'] = 'DQM/Integration/config/visualizationPreFilter.pixelClusterFilter'
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 )
# stream label
if runType.getRunType() == runType.hi_run:
process.source.streamLabel = "streamHIDQMEventDisplay"
else:
process.source.streamLabel = "streamDQMEventDisplay"
m = re.search(r"\((\w+)\)", str(source.runNumber))
runno = str(m.group(1))
outDir= options.outputBaseDir+'/EvD/run'+runno+'/streamEvDOutput2'
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("streamEvDOutput2_dqmcluster"),
# output path must exist!
outputPath = cms.untracked.string(outDir),
)
if hasattr(oldo, 'SelectEvents'):
process.FEVToutput.SelectEvents = oldo.SelectEvents
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)
|