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(),
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(),
53 from copy
import deepcopy
54 repl = deepcopy(getattr(pset, name))
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""" 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)
176 p.op2 = cms.EDProducer(
"op2", src = cms.optional.InputTag, unset = cms.optional.InputTag, vsrc = cms.optional.VInputTag, vunset = cms.optional.VInputTag)
179 p.op2.src=cms.InputTag(
"b")
180 p.op2.vsrc = cms.VInputTag(
"b")
181 p.s = cms.Sequence(p.a*p.b*p.c*p.sp*p.op*p.op2)
183 self.assertNotEqual(cms.InputTag(
"new"), p.b.src)
184 self.assertEqual(cms.InputTag(
"new"), p.c.src)
185 self.assertEqual(cms.InputTag(
"new"), p.c.usrc)
186 self.assertEqual(cms.InputTag(
"new"), p.c.nested.src)
187 self.assertEqual(cms.InputTag(
"new"), p.c.nested.usrc)
188 self.assertFalse(p.c.nested.usrc.isTracked())
189 self.assertNotEqual(cms.InputTag(
"new"), p.c.nested.src2)
190 self.assertEqual(cms.InputTag(
"new"), p.c.nestedv[0].src)
191 self.assertNotEqual(cms.InputTag(
"new"), p.c.nestedv[1].src)
192 self.assertEqual(cms.InputTag(
"new"), p.c.unestedv[0].src)
193 self.assertNotEqual(cms.InputTag(
"new"), p.c.unestedv[1].src)
194 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[0])
195 self.assertEqual(cms.InputTag(
"new"), p.c.vec[1])
196 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[2])
197 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[3])
198 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[0])
199 self.assertEqual(cms.InputTag(
"new"), p.c.uvec[1])
200 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[2])
201 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[3])
202 self.assertFalse(p.c.uvec[0].isTracked())
203 self.assertFalse(p.c.uvec[1].isTracked())
204 self.assertFalse(p.c.uvec[2].isTracked())
205 self.assertFalse(p.c.uvec[3].isTracked())
206 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.src)
207 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.nested.src)
208 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
209 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test1.nested.usrc)
210 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
211 self.assertEqual(cms.InputTag(
"new"), p.sp.test2.nested.src)
212 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
213 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test2.nested.usrc)
214 self.assertEqual(cms.InputTag(
"new"), p.op.src)
215 self.assertEqual(cms.InputTag(
"new"), p.op.vsrc[0])
216 self.assertEqual(cms.InputTag(
"new"), p.op2.src)
217 self.assertEqual(cms.InputTag(
"new"), p.op2.vsrc[0])
220 process1 = cms.Process(
"test")
222 self.assertEqual(process1.dumpPython(), cms.Process(
'test').
dumpPython())
223 p = cms.Process(
"test")
224 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
225 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
226 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
227 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a")),
228 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
229 unestedv = cms.untracked.VPSet(cms.untracked.PSet(src = cms.InputTag(
"a")), cms.untracked.PSet(src = cms.InputTag(
"d"))),
230 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d")),
231 uvec = cms.untracked.VInputTag(cms.untracked.InputTag(
"a"), cms.untracked.InputTag(
"b"), cms.untracked.InputTag(
"c"), cms.InputTag(
"d")),
233 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
234 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
235 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
236 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
237 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
238 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
240 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
241 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
243 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"c"),
244 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
247 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
248 p.path1 = cms.Path(p.s1)
249 p.s2 = cms.Sequence(p.d)
250 p.path2 = cms.Path(p.e)
251 p.s3 = cms.Sequence(p.f)
252 p.endpath1 = cms.EndPath(p.s3)
253 p.endpath2 = cms.EndPath(p.g)
256 p.schedule = cms.Schedule()
257 p.schedule.associate(p.t1, p.t2)
259 self.assertEqual(cms.InputTag(
"b"), p.b.src)
260 self.assertEqual(cms.InputTag(
"b"), p.c.nested.src)
261 self.assertEqual(cms.InputTag(
"b"), p.c.nested.usrc)
262 self.assertFalse(p.c.nested.usrc.isTracked())
263 self.assertEqual(cms.InputTag(
"b"), p.c.nestedv[0].src)
264 self.assertEqual(cms.InputTag(
"b"), p.c.unestedv[0].src)
265 self.assertEqual(cms.InputTag(
"b"), p.c.vec[0])
266 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
267 self.assertEqual(cms.InputTag(
"b"), p.c.uvec[0])
268 self.assertEqual(cms.InputTag(
"c"), p.c.uvec[2])
269 self.assertFalse(p.c.uvec[0].isTracked())
270 self.assertFalse(p.c.uvec[1].isTracked())
271 self.assertFalse(p.c.uvec[2].isTracked())
272 self.assertEqual(cms.InputTag(
"a"), p.d.src)
273 self.assertEqual(cms.InputTag(
"b"), p.e.src)
274 self.assertEqual(cms.InputTag(
"b"), p.f.src)
275 self.assertEqual(cms.InputTag(
"b"), p.g.src)
276 self.assertEqual(cms.InputTag(
"b"), p.h.src)
277 self.assertEqual(cms.InputTag(
"b"), p.i.src)
278 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.src)
279 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.nested.src)
280 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
281 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test1.nested.usrc)
282 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
283 self.assertEqual(cms.InputTag(
"b"), p.sp.test2.nested.src)
284 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
285 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test2.nested.usrc)
288 p = cms.Process(
"test")
289 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
290 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
291 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
292 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
294 p.d = cms.EDProducer(
"ac", src=cms.untracked.InputTag(
"b"),
295 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
298 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"b"),
299 nested = cms.PSet(src = cms.InputTag(
"b"))
301 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"b")),
303 p.s = cms.Sequence(p.a*p.b*p.c*p.d*p.sp)
305 self.assertEqual(cms.InputTag(
"a"),p.c.src)
306 self.assertEqual(cms.InputTag(
"c"),p.c.nested.src)
307 self.assertEqual(cms.InputTag(
"b"),p.c.nested.src2)
308 self.assertEqual(cms.untracked.InputTag(
"a"),p.d.src)
309 self.assertEqual(cms.InputTag(
"c"),p.d.nested.src)
310 self.assertEqual(cms.InputTag(
"b"),p.d.nested.src2)
311 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.src)
312 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.nested.src)
313 self.assertEqual(cms.InputTag(
"a"),p.sp.test2.src)
316 process1 = cms.Process(
"test")
318 self.assertEqual(process1.dumpPython(), cms.Process(
"test").
dumpPython())
319 p = cms.Process(
"test")
320 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
321 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
322 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
323 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c")),
324 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
325 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d"))
327 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
328 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
329 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
330 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
331 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
332 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
333 p.j = cms.EDProducer(
"ab", src=cms.untracked.InputTag(
"a"))
335 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
336 nested = cms.PSet(src = cms.InputTag(
"a"))
338 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"a")),
340 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
341 p.path1 = cms.Path(p.s1)
342 p.s2 = cms.Sequence(p.d)
343 p.path2 = cms.Path(p.e)
344 p.s3 = cms.Sequence(p.f)
345 p.endpath1 = cms.EndPath(p.s3)
346 p.endpath2 = cms.EndPath(p.g)
348 p.t2 = cms.Task(p.i, p.j)
349 p.schedule = cms.Schedule()
350 p.schedule.associate(p.t1, p.t2)
352 self.assertEqual(cms.InputTag(
"gen"), p.a.src)
353 self.assertEqual(cms.InputTag(
"b"), p.b.src)
354 self.assertEqual(cms.InputTag(
"a"), p.c.vec[0])
355 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
356 self.assertEqual(cms.InputTag(
"a"), p.d.src)
357 self.assertEqual(cms.InputTag(
"b"), p.e.src)
358 self.assertEqual(cms.InputTag(
"b"), p.f.src)
359 self.assertEqual(cms.InputTag(
"b"), p.g.src)
360 self.assertEqual(cms.InputTag(
"b"), p.h.src)
361 self.assertEqual(cms.InputTag(
"b"), p.i.src)
362 self.assertEqual(cms.untracked.InputTag(
"b"), p.j.src)
363 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.src)
364 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.nested.src)
365 self.assertEqual(cms.InputTag(
"b"),p.sp.test2.src)
def __init__(self, paramName, paramSearch, paramValue, verbose=False)
def __init__(self, kargs)
def massSearchReplaceAnyInputTag(sequence, oldInputTag, newInputTag, verbose=False, moduleLabelOnly=False, skipLabelTest=False)
def doIt(self, mod, name)
def massSearchReplaceParam(sequence, paramName, paramOldValue, paramValue, verbose=False)
def testMassSearchReplaceParam(self)
def testMassSearchReplaceAnyInputTag(self)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
def massReplaceInputTag(process, old="rawDataCollector", new="rawDataRepacker", verbose=False, moduleLabelOnly=False, skipLabelTest=False)
def __init__(self, paramName, paramSearch)
def testMassReplaceInputTag(self)
def getProcessName(pdgGen, requiredNumberOfGeneratedObjects)
def testMassReplaceParam(self)
def dumpPython(process, name)
def massReplaceParameter(process, name="label", old="rawDataCollector", new="rawDataRepacker", verbose=False)