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 isinstance(value, cms.VPSet):
24 for (i,ps)
in enumerate(value): self.
doIt(ps,
"%s.%s[%d]"%(base,name,i) )
25 elif isinstance(value, cms.VInputTag):
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 isinstance(value, cms.InputTag):
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.s = cms.Sequence(p.a*p.b*p.c*p.sp)
177 self.assertNotEqual(cms.InputTag(
"new"), p.b.src)
178 self.assertEqual(cms.InputTag(
"new"), p.c.src)
179 self.assertEqual(cms.InputTag(
"new"), p.c.usrc)
180 self.assertEqual(cms.InputTag(
"new"), p.c.nested.src)
181 self.assertEqual(cms.InputTag(
"new"), p.c.nested.usrc)
182 self.assertFalse(p.c.nested.usrc.isTracked())
183 self.assertNotEqual(cms.InputTag(
"new"), p.c.nested.src2)
184 self.assertEqual(cms.InputTag(
"new"), p.c.nestedv[0].src)
185 self.assertNotEqual(cms.InputTag(
"new"), p.c.nestedv[1].src)
186 self.assertEqual(cms.InputTag(
"new"), p.c.unestedv[0].src)
187 self.assertNotEqual(cms.InputTag(
"new"), p.c.unestedv[1].src)
188 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[0])
189 self.assertEqual(cms.InputTag(
"new"), p.c.vec[1])
190 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[2])
191 self.assertNotEqual(cms.InputTag(
"new"), p.c.vec[3])
192 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[0])
193 self.assertEqual(cms.InputTag(
"new"), p.c.uvec[1])
194 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[2])
195 self.assertNotEqual(cms.InputTag(
"new"), p.c.uvec[3])
196 self.assertFalse(p.c.uvec[0].isTracked())
197 self.assertFalse(p.c.uvec[1].isTracked())
198 self.assertFalse(p.c.uvec[2].isTracked())
199 self.assertFalse(p.c.uvec[3].isTracked())
200 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.src)
201 self.assertEqual(cms.InputTag(
"new"), p.sp.test1.nested.src)
202 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
203 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test1.nested.usrc)
204 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
205 self.assertEqual(cms.InputTag(
"new"), p.sp.test2.nested.src)
206 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
207 self.assertEqual(cms.untracked.InputTag(
"new"), p.sp.test2.nested.usrc)
210 process1 = cms.Process(
"test")
212 self.assertEqual(process1.dumpPython(), cms.Process(
'test').
dumpPython())
213 p = cms.Process(
"test")
214 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
215 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
216 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
217 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a")),
218 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
219 unestedv = cms.untracked.VPSet(cms.untracked.PSet(src = cms.InputTag(
"a")), cms.untracked.PSet(src = cms.InputTag(
"d"))),
220 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d")),
221 uvec = cms.untracked.VInputTag(cms.untracked.InputTag(
"a"), cms.untracked.InputTag(
"b"), cms.untracked.InputTag(
"c"), cms.InputTag(
"d")),
223 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
224 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
225 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
226 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
227 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
228 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
230 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
231 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
233 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"c"),
234 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c"), usrc = cms.untracked.InputTag(
"a"))
237 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
238 p.path1 = cms.Path(p.s1)
239 p.s2 = cms.Sequence(p.d)
240 p.path2 = cms.Path(p.e)
241 p.s3 = cms.Sequence(p.f)
242 p.endpath1 = cms.EndPath(p.s3)
243 p.endpath2 = cms.EndPath(p.g)
246 p.schedule = cms.Schedule()
247 p.schedule.associate(p.t1, p.t2)
249 self.assertEqual(cms.InputTag(
"b"), p.b.src)
250 self.assertEqual(cms.InputTag(
"b"), p.c.nested.src)
251 self.assertEqual(cms.InputTag(
"b"), p.c.nested.usrc)
252 self.assertFalse(p.c.nested.usrc.isTracked())
253 self.assertEqual(cms.InputTag(
"b"), p.c.nestedv[0].src)
254 self.assertEqual(cms.InputTag(
"b"), p.c.unestedv[0].src)
255 self.assertEqual(cms.InputTag(
"b"), p.c.vec[0])
256 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
257 self.assertEqual(cms.InputTag(
"b"), p.c.uvec[0])
258 self.assertEqual(cms.InputTag(
"c"), p.c.uvec[2])
259 self.assertFalse(p.c.uvec[0].isTracked())
260 self.assertFalse(p.c.uvec[1].isTracked())
261 self.assertFalse(p.c.uvec[2].isTracked())
262 self.assertEqual(cms.InputTag(
"a"), p.d.src)
263 self.assertEqual(cms.InputTag(
"b"), p.e.src)
264 self.assertEqual(cms.InputTag(
"b"), p.f.src)
265 self.assertEqual(cms.InputTag(
"b"), p.g.src)
266 self.assertEqual(cms.InputTag(
"b"), p.h.src)
267 self.assertEqual(cms.InputTag(
"b"), p.i.src)
268 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.src)
269 self.assertEqual(cms.InputTag(
"b"), p.sp.test1.nested.src)
270 self.assertEqual(cms.InputTag(
"c"), p.sp.test1.nested.src2)
271 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test1.nested.usrc)
272 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.src)
273 self.assertEqual(cms.InputTag(
"b"), p.sp.test2.nested.src)
274 self.assertEqual(cms.InputTag(
"c"), p.sp.test2.nested.src2)
275 self.assertEqual(cms.untracked.InputTag(
"b"), p.sp.test2.nested.usrc)
278 p = cms.Process(
"test")
279 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
280 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
281 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
282 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
284 p.d = cms.EDProducer(
"ac", src=cms.untracked.InputTag(
"b"),
285 nested = cms.PSet(src = cms.InputTag(
"c"), src2 = cms.InputTag(
"b"))
288 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"b"),
289 nested = cms.PSet(src = cms.InputTag(
"b"))
291 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"b")),
293 p.s = cms.Sequence(p.a*p.b*p.c*p.d*p.sp)
295 self.assertEqual(cms.InputTag(
"a"),p.c.src)
296 self.assertEqual(cms.InputTag(
"c"),p.c.nested.src)
297 self.assertEqual(cms.InputTag(
"b"),p.c.nested.src2)
298 self.assertEqual(cms.untracked.InputTag(
"a"),p.d.src)
299 self.assertEqual(cms.InputTag(
"c"),p.d.nested.src)
300 self.assertEqual(cms.InputTag(
"b"),p.d.nested.src2)
301 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.src)
302 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.nested.src)
303 self.assertEqual(cms.InputTag(
"a"),p.sp.test2.src)
306 process1 = cms.Process(
"test")
308 self.assertEqual(process1.dumpPython(), cms.Process(
"test").
dumpPython())
309 p = cms.Process(
"test")
310 p.a = cms.EDProducer(
"a", src=cms.InputTag(
"gen"))
311 p.b = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
312 p.c = cms.EDProducer(
"ac", src=cms.InputTag(
"b"),
313 nested = cms.PSet(src = cms.InputTag(
"a"), src2 = cms.InputTag(
"c")),
314 nestedv = cms.VPSet(cms.PSet(src = cms.InputTag(
"a")), cms.PSet(src = cms.InputTag(
"d"))),
315 vec = cms.VInputTag(cms.InputTag(
"a"), cms.InputTag(
"b"), cms.InputTag(
"c"), cms.InputTag(
"d"))
317 p.d = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
318 p.e = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
319 p.f = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
320 p.g = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
321 p.h = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
322 p.i = cms.EDProducer(
"ab", src=cms.InputTag(
"a"))
323 p.j = cms.EDProducer(
"ab", src=cms.untracked.InputTag(
"a"))
325 test1 = cms.EDProducer(
"a", src = cms.InputTag(
"a"),
326 nested = cms.PSet(src = cms.InputTag(
"a"))
328 test2 = cms.EDProducer(
"b", src = cms.InputTag(
"a")),
330 p.s1 = cms.Sequence(p.a*p.b*p.c*p.sp)
331 p.path1 = cms.Path(p.s1)
332 p.s2 = cms.Sequence(p.d)
333 p.path2 = cms.Path(p.e)
334 p.s3 = cms.Sequence(p.f)
335 p.endpath1 = cms.EndPath(p.s3)
336 p.endpath2 = cms.EndPath(p.g)
338 p.t2 = cms.Task(p.i, p.j)
339 p.schedule = cms.Schedule()
340 p.schedule.associate(p.t1, p.t2)
342 self.assertEqual(cms.InputTag(
"gen"), p.a.src)
343 self.assertEqual(cms.InputTag(
"b"), p.b.src)
344 self.assertEqual(cms.InputTag(
"a"), p.c.vec[0])
345 self.assertEqual(cms.InputTag(
"c"), p.c.vec[2])
346 self.assertEqual(cms.InputTag(
"a"), p.d.src)
347 self.assertEqual(cms.InputTag(
"b"), p.e.src)
348 self.assertEqual(cms.InputTag(
"b"), p.f.src)
349 self.assertEqual(cms.InputTag(
"b"), p.g.src)
350 self.assertEqual(cms.InputTag(
"b"), p.h.src)
351 self.assertEqual(cms.InputTag(
"b"), p.i.src)
352 self.assertEqual(cms.untracked.InputTag(
"b"), p.j.src)
353 self.assertEqual(cms.InputTag(
"b"),p.sp.test1.src)
354 self.assertEqual(cms.InputTag(
"a"),p.sp.test1.nested.src)
355 self.assertEqual(cms.InputTag(
"b"),p.sp.test2.src)