1 from __future__
import print_function
2 import FWCore.ParameterSet.Config
as cms
5 """Visitor that travels within a cms.Sequence, looks for a parameter and replace its value
6 It will climb down within PSets, VPSets and VInputTags to find its target"""
7 def __init__(self,paramSearch,paramReplace,verbose=False,moduleLabelOnly=False,skipLabelTest=False):
15 if isinstance(pset, cms._Parameterizable):
16 for name
in pset.parameterNames_():
19 value = getattr(pset,name)
20 if isinstance(value, cms.PSet)
or isinstance(value, cms.EDProducer)
or isinstance(value, cms.EDAlias):
22 self.
doIt(value,base+
"."+name)
23 elif value.isCompatibleCMSType(cms.VPSet):
24 for (i,ps)
in enumerate(value): self.
doIt(ps,
"%s.%s[%d]"%(base,name,i) )
25 elif value.isCompatibleCMSType(cms.VInputTag)
and value:
26 for (i,n)
in enumerate(value):
31 if not value.isTracked():
32 value[i] = cms.untracked.InputTag(self._paramReplace.getModuleLabel(),
33 self._paramReplace.getProductInstanceLabel(),
34 self._paramReplace.getProcessName())
37 elif self.
_moduleLabelOnly and n.moduleLabel == self._paramSearch.moduleLabel:
38 nrep = n; nrep.moduleLabel = self._paramReplace.moduleLabel
39 if self.
_verbose:
print(
"Replace %s.%s[%d] %s ==> %s " % (base, name, i, n, nrep))
41 elif value.isCompatibleCMSType(cms.InputTag)
and value:
44 from copy
import deepcopy
45 if not value.isTracked():
47 setattr(pset, name, cms.untracked.InputTag(self._paramReplace.getModuleLabel(),
48 self._paramReplace.getProductInstanceLabel(),
49 self._paramReplace.getProcessName()))
52 elif self.
_moduleLabelOnly and value.moduleLabel == self._paramSearch.moduleLabel:
53 from copy
import deepcopy
54 repl = deepcopy(getattr(pset, name))
55 repl.moduleLabel = self._paramReplace.moduleLabel
56 setattr(pset, name, repl)
57 if self.
_verbose:
print(
"Replace %s.%s %s ==> %s " % (base, name, value, repl))
62 ''' helper function to ensure that the InputTag is defined as cms.InputTag(str) and not as a plain str '''
63 if not isinstance(inputTag, cms.InputTag):
64 return cms.InputTag(inputTag)
70 if hasattr(visitee,
"hasLabel_")
and visitee.hasLabel_():
71 label = visitee.label_()
72 else: label =
'<Module not in a Process>'
74 label =
'<Module label not tested>'
75 self.
doIt(visitee, label)
80 """Replace InputTag oldInputTag with newInputTag, at any level of nesting within PSets, VPSets, VInputTags..."""
81 sequence.visit(MassSearchReplaceAnyInputTagVisitor(oldInputTag,newInputTag,verbose=verbose,moduleLabelOnly=moduleLabelOnly,skipLabelTest=skipLabelTest))
83 def massReplaceInputTag(process,old="rawDataCollector",new="rawDataRepacker",verbose=False,moduleLabelOnly=False,skipLabelTest=False):
84 for s
in process.paths_().
keys():
86 for s
in process.endpaths_().
keys():
88 if process.schedule_()
is not None:
89 for task
in process.schedule_()._tasks:
94 """Visitor that travels within a cms.Sequence, looks for a parameter and returns a list of modules that have it"""
102 self._modules.append(visitee)
109 """Visitor that travels within a cms.Sequence, looks for a parameter and replaces its value"""
110 def __init__(self,paramName,paramSearch,paramValue,verbose=False):
116 if isinstance(visitee, cms.SwitchProducer):
117 for modName
in visitee.parameterNames_():
118 self.
doIt(getattr(visitee, modName),
"%s.%s"%(
str(visitee), modName))
120 self.
doIt(visitee,
str(visitee))
130 sequence.visit(MassSearchReplaceParamVisitor(paramName,paramOldValue,paramValue,verbose))
133 for s
in process.paths_().
keys():
135 for s
in process.endpaths_().
keys():
137 if process.schedule_()
is not None:
138 for task
in process.schedule_()._tasks:
142 if __name__==
"__main__":
146 super(SwitchProducerTest,self).
__init__(
148 test1 =
lambda: (
True, -10),
149 test2 =
lambda: (
True, -9),
150 test3 =
lambda: (
True, -8),
151 test4 =
lambda: (
True, -7)
157 p = cms.Process(
"test")
158 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
159 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
160 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"), usrc=cms.untracked.InputTag(
"b"),
161 nested = cms.PSet(src = cms.InputTag(
"b"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"b")),
162 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"b")), cms.PSet(src = cms.InputTag(
"d"))),
163 unestedv = cms.untracked.VPSet(cms.untracked.PSet(src = cms.InputTag(
"b")), cms.untracked.PSet(src = cms.InputTag(
"d"))),
164 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d")),
165 uvec = cms.untracked.VInputTag(cms.untracked.InputTag(
"a"), cms.untracked.InputTag(
"b"), cms.untracked.InputTag(
"c"), cms.untracked.InputTag(
"d")),
168 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"b"),
169 nested = cms.PSet(src = cms.InputTag(
"b"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"b"))
171 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"c"),
172 nested = cms.PSet(src = cms.InputTag(
"b"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"b"))
175 p.op = cms.EDProducer(
"op", src = cms.optional.InputTag, unset = cms.optional.InputTag, vsrc = cms.optional.VInputTag, vunset = cms.optional.VInputTag)
177 p.op.vsrc=cms.VInputTag(
"b")
178 p.s = cms.Sequence(p.a*p.b*p.c*p.sp*p.op)
180 self.assertNotEqual(cms.InputTag(
"new"), p.b.src)
181 self.assertEqual(cms.InputTag(
"new"), p.c.src)
182 self.assertEqual(cms.InputTag(
"new"), p.c.usrc)
183 self.assertEqual(cms.InputTag(
"new"), p.c.nested.src)
184 self.assertEqual(cms.InputTag(
"new"), p.c.nested.usrc)
185 self.assertFalse(p.c.nested.usrc.isTracked())
186 self.assertNotEqual(cms.InputTag(
"new"), p.c.nested.src2)
187 self.assertEqual(cms.InputTag(
"new"), p.c.nestedv[0].src)
188 self.assertNotEqual(cms.InputTag(
"new"), p.c.nestedv[1].src)
189 self.assertEqual(cms.InputTag(
"new"), p.c.unestedv[0].src)
190 self.assertNotEqual(cms.InputTag(
"new"), p.c.unestedv[1].src)
191 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[0])
192 self.assertEqual(cms.InputTag(
"new"), p.c.vec[1])
193 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[2])
194 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[3])
195 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[0])
196 self.assertEqual(cms.InputTag(
"new"), p.c.uvec[1])
197 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[2])
198 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[3])
199 self.assertFalse(p.c.uvec[0].isTracked())
200 self.assertFalse(p.c.uvec[1].isTracked())
201 self.assertFalse(p.c.uvec[2].isTracked())
202 self.assertFalse(p.c.uvec[3].isTracked())
203 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.src)
204 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.nested.src)
205 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
206 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test1.nested.usrc)
207 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
208 self.assertEqual(cms.InputTag(
"new"), p.sp.test2.nested.src)
209 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
210 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test2.nested.usrc)
211 self.assertEqual(cms.InputTag(
"new"), p.op.src)
212 self.assertEqual(cms.InputTag(
"new"), p.op.vsrc[0])
215 process1 = cms.Process(
"test")
217 self.assertEqual(process1.dumpPython(), cms.Process(
'test').
dumpPython())
218 p = cms.Process(
"test")
219 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
220 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
221 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
222 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a")),
223 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
224 unestedv = cms.untracked.VPSet(cms.untracked.PSet(src = cms.InputTag(
"a")), cms.untracked.PSet(src = cms.InputTag(
"d"))),
225 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d")),
226 uvec = cms.untracked.VInputTag(cms.untracked.InputTag(
"a"), cms.untracked.InputTag(
"b"), cms.untracked.InputTag(
"c"), cms.InputTag(
"d")),
228 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
229 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
230 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
231 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
232 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
233 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
235 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
236 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
238 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"c"),
239 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
242 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
243 p.path1 = cms.Path(p.s1)
244 p.s2 = cms.Sequence(p.d)
245 p.path2 = cms.Path(p.e)
246 p.s3 = cms.Sequence(p.f)
247 p.endpath1 = cms.EndPath(p.s3)
248 p.endpath2 = cms.EndPath(p.g)
251 p.schedule = cms.Schedule()
252 p.schedule.associate(p.t1, p.t2)
254 self.assertEqual(cms.InputTag(
"b"), p.b.src)
255 self.assertEqual(cms.InputTag(
"b"), p.c.nested.src)
256 self.assertEqual(cms.InputTag(
"b"), p.c.nested.usrc)
257 self.assertFalse(p.c.nested.usrc.isTracked())
258 self.assertEqual(cms.InputTag(
"b"), p.c.nestedv[0].src)
259 self.assertEqual(cms.InputTag(
"b"), p.c.unestedv[0].src)
260 self.assertEqual(cms.InputTag(
"b"), p.c.vec[0])
261 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
262 self.assertEqual(cms.InputTag(
"b"), p.c.uvec[0])
263 self.assertEqual(cms.InputTag(
"c"), p.c.uvec[2])
264 self.assertFalse(p.c.uvec[0].isTracked())
265 self.assertFalse(p.c.uvec[1].isTracked())
266 self.assertFalse(p.c.uvec[2].isTracked())
267 self.assertEqual(cms.InputTag(
"a"), p.d.src)
268 self.assertEqual(cms.InputTag(
"b"), p.e.src)
269 self.assertEqual(cms.InputTag(
"b"), p.f.src)
270 self.assertEqual(cms.InputTag(
"b"), p.g.src)
271 self.assertEqual(cms.InputTag(
"b"), p.h.src)
272 self.assertEqual(cms.InputTag(
"b"), p.i.src)
273 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.src)
274 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.nested.src)
275 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
276 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test1.nested.usrc)
277 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
278 self.assertEqual(cms.InputTag(
"b"), p.sp.test2.nested.src)
279 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
280 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test2.nested.usrc)
283 p = cms.Process(
"test")
284 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
285 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
286 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
287 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
289 p.d = cms.EDProducer(
"ac", src=cms.untracked.InputTag(
"b"),
290 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
293 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"b"),
294 nested = cms.PSet(src = cms.InputTag(
"b"))
296 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"b")),
298 p.s = cms.Sequence(p.a*p.b*p.c*p.d*p.sp)
300 self.assertEqual(cms.InputTag(
"a"),p.c.src)
301 self.assertEqual(cms.InputTag(
"c"),p.c.nested.src)
302 self.assertEqual(cms.InputTag(
"b"),p.c.nested.src2)
303 self.assertEqual(cms.untracked.InputTag(
"a"),p.d.src)
304 self.assertEqual(cms.InputTag(
"c"),p.d.nested.src)
305 self.assertEqual(cms.InputTag(
"b"),p.d.nested.src2)
306 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.src)
307 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.nested.src)
308 self.assertEqual(cms.InputTag(
"a"),p.sp.test2.src)
311 process1 = cms.Process(
"test")
313 self.assertEqual(process1.dumpPython(), cms.Process(
"test").
dumpPython())
314 p = cms.Process(
"test")
315 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
316 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
317 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
318 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c")),
319 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
320 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d"))
322 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
323 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
324 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
325 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
326 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
327 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
328 p.j = cms.EDProducer(
"ab", src=cms.untracked.InputTag(
"a"))
330 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
331 nested = cms.PSet(src = cms.InputTag(
"a"))
333 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"a")),
335 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
336 p.path1 = cms.Path(p.s1)
337 p.s2 = cms.Sequence(p.d)
338 p.path2 = cms.Path(p.e)
339 p.s3 = cms.Sequence(p.f)
340 p.endpath1 = cms.EndPath(p.s3)
341 p.endpath2 = cms.EndPath(p.g)
343 p.t2 = cms.Task(p.i, p.j)
344 p.schedule = cms.Schedule()
345 p.schedule.associate(p.t1, p.t2)
347 self.assertEqual(cms.InputTag(
"gen"), p.a.src)
348 self.assertEqual(cms.InputTag(
"b"), p.b.src)
349 self.assertEqual(cms.InputTag(
"a"), p.c.vec[0])
350 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
351 self.assertEqual(cms.InputTag(
"a"), p.d.src)
352 self.assertEqual(cms.InputTag(
"b"), p.e.src)
353 self.assertEqual(cms.InputTag(
"b"), p.f.src)
354 self.assertEqual(cms.InputTag(
"b"), p.g.src)
355 self.assertEqual(cms.InputTag(
"b"), p.h.src)
356 self.assertEqual(cms.InputTag(
"b"), p.i.src)
357 self.assertEqual(cms.untracked.InputTag(
"b"), p.j.src)
358 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.src)
359 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.nested.src)
360 self.assertEqual(cms.InputTag(
"b"),p.sp.test2.src)
def massSearchReplaceParam
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def testMassReplaceInputTag
def massSearchReplaceAnyInputTag
def testMassSearchReplaceAnyInputTag
def testMassSearchReplaceParam