1 import FWCore.ParameterSet.Config
as cms
5 process = cms.Process(
"READ")
8 process.load(
'Configuration.StandardSequences.Services_cff')
9 process.load(
'Configuration.EventContent.EventContent_cff')
10 process.load(
'Configuration.StandardSequences.GeometryRecoDB_cff')
11 process.load(
'Configuration.StandardSequences.MagneticField_AutoFromDBCurrent_cff')
12 process.load(
'Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
14 import FWCore.ParameterSet.VarParsing
as VarParsing
15 from Configuration.AlCa.GlobalTag
import GlobalTag
18 options.register(
'lumisPerRun',
20 VarParsing.VarParsing.multiplicity.singleton,
21 VarParsing.VarParsing.varType.int,
22 "the number of lumis to be processed per-run.")
23 options.register(
'firstRun',
25 VarParsing.VarParsing.multiplicity.singleton,
26 VarParsing.VarParsing.varType.int,
27 "the first run number be processed")
28 options.register(
'lastRun',
30 VarParsing.VarParsing.multiplicity.singleton,
31 VarParsing.VarParsing.varType.int,
32 "the run number to stop at")
33 options.register(
'config',
35 mult = VarParsing.VarParsing.multiplicity.singleton,
36 mytype = VarParsing.VarParsing.varType.string,
37 info =
'JSON config with information about the GT, Alignments, etc.')
38 options.register(
'unitTest',
40 VarParsing.VarParsing.multiplicity.singleton,
41 VarParsing.VarParsing.varType.bool,
44 defaultFirstRun = options.firstRun
45 defaultLastRun = options.lastRun
46 defaultLumisPerRun = options.lumisPerRun
48 options.parseArguments()
50 if(options.config
is None):
54 "globaltag":
"140X_dataRun3_Prompt_v4",
55 "conditions": {
"TrackerAlignmentRcd": {
"tag":
"TrackerAlignment_PCL_byRun_v2_express"}}
58 "conditions": {
"TrackerAlignmentRcd": {
"tag":
"TrackerAlignment_v24_offline"}}
61 "conditions": {
"TrackerAlignmentRcd": {
"tag":
"TrackerAlignment_v29_offline"}}
68 with open(options.config)
as f:
69 configuration = json.load(f)
75 if(options.firstRun != defaultFirstRun):
76 firstRun = options.firstRun
78 firstRun = configuration[
"validation"].get(
'firstRun', defaultFirstRun)
80 if(options.lastRun != defaultLastRun):
81 lastRun = options.lastRun
83 lastRun = configuration[
"validation"].get(
'lastRun', defaultLastRun)
85 if(options.lumisPerRun != defaultLumisPerRun):
86 lumisPerRun = options.lumisPerRun
88 lumisPerRun = configuration[
"validation"].get(
'lumisPerRun', defaultLumisPerRun)
90 process.load(
"FWCore.MessageService.MessageLogger_cfi")
93 if(lastRun < firstRun):
94 raise ValueError(
"The last run is smaller than the first")
96 process.MessageLogger.cerr.FwkReport.reportEvery = lumisPerRun*1000
101 numberOfRuns = lastRun - firstRun + 1
103 print(
"INFO: Runs: {:d} - {:d} --> number of runs: {:d}".
format(firstRun, lastRun, numberOfRuns))
105 process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(options.lumisPerRun*numberOfRuns) )
113 process.source = cms.Source(
"EmptySource",
114 firstRun = cms.untracked.uint32(firstRun),
115 firstLuminosityBlock = cms.untracked.uint32(1),
116 numberEventsInLuminosityBlock = cms.untracked.uint32(1),
117 numberEventsInRun = cms.untracked.uint32(lumisPerRun),
123 bcLabels_ = cms.untracked.vstring(
"")
124 bsLabels_ = cms.untracked.vstring(
"")
126 alignments = configuration.get(
'alignments',
None)
127 if alignments
is None:
128 align = configuration[
'alignment']
129 label = configuration[
'alignment'].get(
'label', align[
'title'].
split()[0])
130 alignments = {label: align}
132 for label, align
in alignments.items():
133 if(align.get(
'globaltag')):
134 if(len(process.GlobalTag.globaltag.value()) > 0):
135 if(process.GlobalTag.globaltag.value() != align[
'globaltag']):
136 print(
'ERROR: another GT has already been specified: "{}". Ignoring GT "{}" from alignment "{}"'.
format(
137 process.GlobalTag.globaltag.value(), align[
'globaltag'], label))
140 process.GlobalTag =
GlobalTag(process.GlobalTag, align[
'globaltag'])
141 print(
'INFO: GlobalTag:', process.GlobalTag.globaltag.value())
143 conditions = align.get(
'conditions')
144 if(conditions
is None):
145 print(
'INFO: No conditions specified for alignment "{}": skipping'.
format(label))
148 bcLabels_.append(label)
149 print(f
'TrackerAlignment: {label=} {align=}')
151 for record, condition
in conditions.items():
152 condition.setdefault(
'connect',
'frontier://FrontierProd/CMS_CONDITIONS')
153 if (record ==
'TrackerAlignmentRcd'):
154 condition.setdefault(
'tag',
'Alignments')
155 elif(record ==
'TrackerSurfaceDeformationRcd'):
156 condition.setdefault(
'tag',
'Deformations')
157 elif(record ==
'TrackerAlignmentErrorsExtendedRcd'):
158 condition.setdefault(
'tag',
'AlignmentErrors')
160 process.GlobalTag.toGet.append(
162 record = cms.string(record),
163 label = cms.untracked.string(label),
164 tag = cms.string(condition[
'tag']),
165 connect = cms.string(condition[
'connect'])
170 for label, beamspot
in configuration[
'validation'].get(
"beamspots", {}).
items() :
171 bsLabels_.append(label)
172 print(f
'BeamSpot : {label=} {beamspot=}')
174 process.GlobalTag.toGet.append(
176 record = cms.string(
"BeamSpotObjectsRcd"),
177 label = cms.untracked.string(label),
178 tag = cms.string(beamspot[
"tag"]),
179 connect = cms.string(beamspot.get(
"connect",
"frontier://FrontierProd/CMS_CONDITIONS"))
184 from Alignment.OfflineValidation.pixelBaryCentreAnalyzer_cfi
import pixelBaryCentreAnalyzer
as _pixelBaryCentreAnalyzer
186 process.PixelBaryCentreAnalyzer = _pixelBaryCentreAnalyzer.clone(
187 usePixelQuality =
False,
188 tkAlignLabels = bcLabels_,
189 beamSpotLabels = bsLabels_
192 process.PixelBaryCentreAnalyzerWithPixelQuality = _pixelBaryCentreAnalyzer.clone(
193 usePixelQuality =
True,
194 tkAlignLabels = bcLabels_,
195 beamSpotLabels = bsLabels_
201 outfile = os.path.join(configuration.get(
"output", os.getcwd()),
'PixelBaryCentre.root')
203 process.TFileService = cms.Service(
"TFileService",
204 fileName=cms.string(outfile)
206 print(
'INFO: output in', outfile)
209 process.p = cms.Path(process.PixelBaryCentreAnalyzer
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def split(sequence, size)
if(threadIdxLocalY==0 &&threadIdxLocalX==0)