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
|
# Example config to produce a merged bad components payload, e.g.
# cmsRun makeMergeBadComponentPayload_example_cfg.py globalTag=auto:run3_data_prompt runNumber=319176 dqmFile=/eos/cms/store/group/comm_dqm/DQMGUI_data/Run2018/ZeroBias/R0003191xx/DQM_V0001_R000319176__ZeroBias__Run2018B-PromptReco-v2__DQMIO.root runStartTime=6574046031825076224
import FWCore.ParameterSet.Config as cms
from FWCore.ParameterSet.VarParsing import VarParsing as VP
process = cms.Process("BadChannelMerge")
opts = VP("python")
opts.register("globalTag", "DONOTEXIST", VP.multiplicity.singleton, VP.varType.string, "GlobalTag")
opts.register("dqmFile", "", VP.multiplicity.singleton, VP.varType.string, "DQM root file")
opts.register("runNumber", 0, VP.multiplicity.singleton, VP.varType.int, "run number")
opts.register("runStartTime", 0, VP.multiplicity.singleton, VP.varType.int, "run start time")
opts.register("dbfile", "merged.db", VP.multiplicity.singleton, VP.varType.string, "SQLite output file")
opts.register("outputTag", "SiStripBadComponents_merged_v0", VP.multiplicity.singleton, VP.varType.string, "Output tag name")
opts.parseArguments()
notAllSet = False
if opts.globalTag == "DONOTEXIST":
print("ERROR: Global tag must be set")
notAllSet = True
if opts.runStartTime == 0:
print("ERROR: Run start time must be set (use the getRunStartTime.py script to get it)")
notAllSet = True
if opts.runNumber == 0:
print("ERROR: Run number must be set")
if opts.dqmFile == "":
print("WARNING: no DQM file set, bad components from FED errors will not be included")
notAllSet = True
if notAllSet:
raise RuntimeError("Not all required arguments have been passed, need globalTag, dqmFile, runNumber and runStartTime")
process.MessageLogger = cms.Service("MessageLogger",
destinations = cms.untracked.vstring("cout", "cerr", "MergedBadComponents"),
cerr=cms.untracked.PSet(
threshold=cms.untracked.string("ERROR")),
cout=cms.untracked.PSet(
threshold=cms.untracked.string("INFO"),
default=cms.untracked.PSet(limit=cms.untracked.int32(0))
),
MergedBadComponents=cms.untracked.PSet(
threshold=cms.untracked.string("INFO"),
default=cms.untracked.PSet(limit=cms.untracked.int32(0)),
SiStripQualityStatistics=cms.untracked.PSet(limit=cms.untracked.int32(100000)),
),
categories = cms.untracked.vstring(
"SiStripQualityStatistics",
"SiStripQuality"
),
debugModules = cms.untracked.vstring(
"SiStripQualityESProducer",
"siStripBadStripFromQualityDBWriter"
),
)
process.load("Configuration.Geometry.GeometryRecoDB_cff")
process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
from Configuration.AlCa.GlobalTag import GlobalTag
process.GlobalTag = GlobalTag(process.GlobalTag, opts.globalTag, "")
process.source = cms.Source("EmptySource",
firstRun = cms.untracked.uint32(opts.runNumber),
numberEventsInRun = cms.untracked.uint32(1),
numberEventsInLuminosityBlock = cms.untracked.uint32(1),
firstTime = cms.untracked.uint64(opts.runStartTime),
timeBetweenEvents = cms.untracked.uint64(1)
)
process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(1))
process.siStripQualityESProducer.ListOfRecordToMerge = cms.VPSet(
cms.PSet(record=cms.string("SiStripDetVOffRcd"), tag=cms.string("")), # DCS information
cms.PSet(record=cms.string("SiStripDetCablingRcd"), tag=cms.string("")), # Use Detector cabling information to exclude detectors not connected
cms.PSet(record=cms.string("SiStripBadChannelRcd"), tag=cms.string("")), # Online Bad components
cms.PSet(record=cms.string("RunInfoRcd"), tag=cms.string("")), # List of FEDs exluded during data taking
cms.PSet(record=cms.string("SiStripBadFiberRcd"), tag=cms.string("")), # Bad Channel list from the selected IOV as done at PCL
)
process.siStripQualityESProducer.ReduceGranularity = cms.bool(False)
process.siStripQualityESProducer.ThresholdForReducedGranularity = cms.double(0.3)
process.siStripQualityESProducer.PrintDebugOutput = True
# common config for adding bad components from FED errors
from CalibTracker.SiStripQuality.siStripQualityStatistics_cfi import siStripQualityStatistics
badCompFromFedErrors = siStripQualityStatistics.BadComponentsFromFedErrors.clone(
Add=cms.bool(True),
LegacyDQMFile=cms.string(opts.dqmFile),
FileRunNumber=cms.uint32(opts.runNumber)
)
# Print list of Bad modules and create Tracker Map indicating Bad modules
process.load("DQM.SiStripCommon.TkHistoMap_cff") # to produce a tracker map
process.stat = siStripQualityStatistics.clone(
TkMapFileName=cms.untracked.string("TkMap_Jul04_2018_319176.png"), #available filetypes: .pdf .png .jpg .svg
BadComponentsFromFedErrors=badCompFromFedErrors
)
# Write Information into DB
process.load("CalibTracker.SiStripQuality.siStripBadStripFromQualityDBWriter_cfi")
#process.siStripBadStripFromQualityDBWriter.OpenIovAt = cms.untracked.string("currentTime")
process.siStripBadStripFromQualityDBWriter.OpenIovAt = cms.untracked.string("beginTime")
process.siStripBadStripFromQualityDBWriter.BadComponentsFromFedErrors = badCompFromFedErrors
process.PoolDBOutputService = cms.Service("PoolDBOutputService",
BlobStreamerName=cms.untracked.string("TBufferBlobStreamingService"),
DBParameters=cms.PSet(
authenticationPath=cms.untracked.string("/afs/cern.ch/cms/DB/conddb")
),
timetype=cms.untracked.string("runnumber"),
connect=cms.string("sqlite_file:"+opts.dbfile),
toPut=cms.VPSet(cms.PSet(
record=cms.string("SiStripBadModuleRcd"),
tag=cms.string(opts.outputTag)
)))
process.siStripBadStripFromQualityDBWriter.record = process.PoolDBOutputService.toPut[0].record
process.p = cms.Path(process.stat*process.siStripBadStripFromQualityDBWriter)
|