4 """Denotes a class that can be used by the Processes class"""
20 """base class for classes which are used as the 'parameters' for a ParameterSet"""
22 self.__dict__[
"_isFrozen"] =
False
31 return type(self).__name__
32 return 'untracked '+type(self).__name__
35 return 'cms.'+type(self).__name__
36 return 'cms.untracked.'+type(self).__name__
51 """base class for parameter classes which only hold a single value"""
53 super(_SimpleParameterTypeBase,self).
__init__()
55 if not self._isValid(value):
56 raise ValueError(str(value)+
" is not a valid "+str(type(self)))
60 if not self._isValid(value):
61 raise ValueError(str(value)+
" is not a valid "+str(type(self)))
70 if isinstance(other,_SimpleParameterTypeBase):
71 return self.
_value == other._value
72 return self.
_value == other
74 if isinstance(other,_SimpleParameterTypeBase):
75 return self.
_value != other._value
76 return self.
_value != other
80 """For injection purposes, pretend this is a new parameter type
81 then have a post process step which strips these out
83 def __init__(self,value, s='', loc=0, file=''):
84 super(UsingBlock,self).
__init__(value)
91 return isinstance(value,str)
93 """only used for cfg-parsing"""
100 parameterSet.addString(self.
isTracked(), myname, value)
103 return "process."+self.
value()
109 """Base class for classes which allow addition of _ParameterTypeBase data"""
111 self.__dict__[
'_Parameterizable__parameterNames'] = []
112 self.__dict__[
"_isFrozen"] =
False
113 """The named arguments are the 'parameters' which are added as 'python attributes' to the object"""
117 if type(block).__name__ !=
"PSet":
118 raise ValueError(
"Only PSets can be passed as unnamed argument blocks. This is a "+type(block).__name__)
124 """Returns the name of the parameters"""
125 return self.__parameterNames[:]
130 param = self.__dict__[name]
131 if isinstance(param, _Parameterizable)
and param.isModified():
140 check that pset provided has the attribute chain
143 Eg, if params is [ 'attr1', 'attr2', 'attr3' ]
144 check for pset.attr1.attr2.attr3
146 returns True if parameter exists, False if not
154 Retrieve the specified parameter from the PSet Provided
155 given the attribute chain
157 returns None if not found
161 if type(params).__name__ ==
'str':
162 return getattr(self, params,
None)
164 lastParam = getattr(lastParam, param,
None)
166 if lastParam ==
None:
171 """Returns a dictionary of copies of the user-set parameters"""
175 result[name]=copy.deepcopy(self.__dict__[name])
179 if not isinstance(value,_ParameterTypeBase):
181 if name
in self.__dict__:
182 message =
"Duplicate insert of member " + name
183 message +=
"\nThe original parameters are:\n"
185 raise ValueError(message)
186 self.__dict__[name]=value
187 self.__parameterNames.append(name)
191 for name,value
in parameters.iteritems():
197 if self.
isFrozen()
and not (name
in [
"_Labelable__label",
"_isFrozen"]
or name.startswith(
'_')):
198 message =
"Object already added to a process. It is read only now\n"
199 message +=
" %s = %s" %(name, value)
200 message +=
"\nThe original parameters are:\n"
202 raise ValueError(message)
205 super(_Parameterizable,self).
__setattr__(name,value)
206 elif not name
in self.__dict__:
211 if isinstance(value,_ParameterTypeBase):
212 self.__dict__[name] = value
225 raise ValueError(
"Object already added to a process. It is read only now")
227 self.__parameterNames.remove(name)
230 raise TypeError(name+
" does not already exist, so it can only be set to a CMS python configuration type")
233 if len(sortedNames) > 200:
242 for name
in sortedNames:
243 param = self.__dict__[name]
245 name2 = name.replace(
'-',
'_')
248 if name.startswith(
"using_"):
249 usings.append(options.indentation()+param.dumpPython(options))
251 others.append((name2, param.dumpPython(options)))
254 resultList =
',\n'.
join(usings)
255 longOthers = options.indentation()+
"**dict(\n"
257 longOthers += options.indentation()+
"[\n"
262 if entriesInList > 200:
265 longOthers += options.indentation()+
"] +\n"+options.indentation()+
"[\n"
268 longOthers += options.indentation()+
'("'+n+
'" , '+v+
' ),\n'
270 longOthers += options.indentation()+
"]\n"
272 longOthers +=options.indentation()+
")\n"
276 ret.append(resultList)
278 ret.append(longOthers)
279 return ",\n".
join(ret)
283 for name
in sortedNames:
284 param = self.__dict__[name]
286 name2 = name.replace(
'-',
'_')
289 if name.startswith(
"using_"):
290 usings.append(options.indentation()+param.dumpPython(options))
292 others.append(options.indentation()+name2+
' = '+param.dumpPython(options))
296 resultList.extend(others)
297 return ',\n'.
join(resultList)+
'\n'
302 param = getattr(self,name)
303 param.insertInto(parameterSet, name)
307 """Base class for classes which are Parameterizable and have a 'type' assigned"""
309 self.__dict__[
'_TypedParameterizable__type'] = type_
315 arg = tuple([x
for x
in arg
if x !=
None])
316 super(_TypedParameterizable,self).
__init__(*arg,**kargs)
319 self._placeImpl(name,proc)
321 """returns the type of the object, e.g. 'FooProducer'"""
324 returnValue =_TypedParameterizable.__new__(type(self))
329 returnValue.__init__(self.__type,*args,
334 """Copies the object and allows one to modify the parameters of the clone.
335 New parameters may be added by specify the exact type
336 Modifying existing parameters can be done by just specifying the new
337 value without having to specify the type.
339 returnValue =_TypedParameterizable.__new__(type(self))
341 if len(myparams) == 0
and len(params)
and len(args):
345 for key,value
in params.iteritems():
347 if isinstance(value,_ParameterTypeBase):
352 if isinstance(value,_ParameterTypeBase):
355 self._Parameterizable__raiseBadSetAttr(key)
357 returnValue.__init__(self.__type,*args,
359 returnValue._isModified =
False
360 returnValue._isFrozen =
False
371 choices.extend(glob.glob(d+
'/*/*/'+label+
'.py'))
381 mod = __import__(name)
382 components = name.split(
'.')
383 for comp
in components[1:]:
384 mod = getattr(mod,comp)
385 if hasattr(mod,label):
386 default = getattr(mod,label)
387 if isinstance(default,_TypedParameterizable):
388 if(default.type_() == type):
390 for name
in default.parameterNames_():
391 params[name] = getattr(default,name)
396 config = self.__type +
' { \n'
398 param = self.__dict__[name]
400 config+=options.indentation()+param.configTypeName()+
' '+name+
' = '+param.configValue(options)+
'\n'
402 config += options.indentation()+
'}\n'
406 result =
"cms."+str(type(self).__name__)+
'("'+self.
type_()+
'"'
411 result +=
",\n"+_Parameterizable.dumpPython(self,options)+options.indentation() +
")\n"
415 """ dumps the object with all attributes declared after the constructor"""
418 param = self.__dict__[name]
419 result += options.indentation() + myname +
"." + name +
" = " + param.dumpPython(options) +
"\n"
427 newpset = parameterSet.newPSet()
428 newpset.addString(
True,
"@module_label", self.
moduleLabel_(myname))
429 newpset.addString(
True,
"@module_type", self.
type_())
430 newpset.addString(
True,
"@module_edm_type", type(self).__name__)
437 """A 'mixin' used to denote that the class can be paired with a label (e.g. an EDProducer)"""
439 if not hasattr(self,
"_Labelable__label"):
440 raise RuntimeError(
"module has no label. Perhaps it wasn't inserted into the process?")
443 return hasattr(self,
"_Labelable__label")
and self.
__label is not None
446 if self.
label_() != label
and label
is not None :
447 msg100 =
"Attempting to change the label of a Labelable object, possibly an attribute of the Process\n"
448 msg101 =
"Old label = "+self.
label_()+
" New label = "+label+
"\n"
449 msg102 =
"Type = "+str(type(self))+
"\n"
450 msg103 =
"Some possible solutions:\n"
451 msg104 =
" 1. Clone modules instead of using simple assignment. Cloning is\n"
452 msg105 =
" also preferred for other types when possible.\n"
453 msg106 =
" 2. Declare new names starting with an underscore if they are\n"
454 msg107 =
" for temporaries you do not want propagated into the Process. The\n"
455 msg108 =
" underscore tells \"from x import *\" and process.load not to import\n"
456 msg109 =
" the name.\n"
457 msg110 =
" 3. Reorganize so the assigment is not necessary. Giving a second\n"
458 msg111 =
" name to the same object usually causes confusion and problems.\n"
459 msg112 =
" 4. Compose Sequences: newName = cms.Sequence(oldName)\n"
460 raise ValueError(msg100+msg101+msg102+msg103+msg104+msg105+msg106+msg107+msg108+msg109+msg110+msg111+msg112)
473 return 'process.'+str(self.
__label)
476 myDeps=knownDeps.get(self.
label_(),
None)
478 if presentDeps != myDeps:
479 raise RuntimeError(
"the module "+self.
label_()+
" has two dependencies \n"
480 +str(presentDeps)+
"\n"
482 +
"Please modify sequences to rectify this inconsistency")
484 myDeps=set(presentDeps)
485 knownDeps[self.
label_()]=myDeps
486 presentDeps.add(self.
label_())
490 """A 'mixin' used to denote that the class can be used without a label (e.g. a Service)"""
493 class _ValidatingListBase(
list):
494 """Base class for a list which enforces that its entries pass a 'validity' test"""
496 super(_ValidatingListBase,self).
__init__(arg)
498 raise SyntaxError(
"named arguments ("+
','.
join([x
for x
in args])+
") passsed to "+str(type(self)))
500 raise TypeError(
"wrong types ("+
','.
join([str(type(value))
for value
in iter(self)])+
501 ") added to "+str(type(self)))
503 if isinstance(key,slice):
505 raise TypeError(
"wrong type being inserted into this container "+self.
_labelIfAny())
507 if not self._itemIsValid(value):
508 raise TypeError(
"can not insert the type "+str(type(value))+
" in container "+self.
_labelIfAny())
509 super(_ValidatingListBase,self).
__setitem__(key,value)
512 if isinstance(seq, str):
515 if not self._itemIsValid(item):
519 if not self._itemIsValid(x):
520 raise TypeError(
"wrong type being appended to container "+self.
_labelIfAny())
521 super(_ValidatingListBase,self).
append(x)
524 raise TypeError(
"wrong type being extended to container "+self.
_labelIfAny())
525 super(_ValidatingListBase,self).
extend(x)
528 raise TypeError(
"wrong type being added to container "+self.
_labelIfAny())
530 value = copy.copy(self)
534 if not self._itemIsValid(x):
535 raise TypeError(
"wrong type being inserted to container "+self.
_labelIfAny())
536 super(_ValidatingListBase,self).
insert(i,x)
538 result = type(self).__name__
539 if hasattr(self,
'__label'):
540 result +=
' ' + self.__label
545 _ParameterTypeBase.__init__(self)
546 if len (arg) == 1
and not isinstance(arg[0],str):
551 super(_ValidatingParameterListBase,self).
__init__(*arg,**args)
561 for value
in iter(self):
563 config += options.indentation()
569 config += options.indentation()+
'}\n'
584 for i, v
in enumerate(self):
586 if hasattr(self,
"_nPerLine"):
587 nPerLine = self._nPerLine
595 if i % nPerLine == 0:
596 result +=
'\n'+options.indentation()
611 frame = inspect.getframeinfo(inspect.currentframe(level+1))
615 obj._filename = frame[0]
616 obj._lineNumber = frame[1]
618 if __name__ ==
"__main__":
627 self.assertEqual(t,[1])
629 self.assertEqual(t,[1])
631 self.assertEqual(t,[
"one"])
633 self.assertEqual(t,[1])
635 self.assertEqual(t,[1])
638 self.assertEqual(t,[1,2])
640 self.assertEqual(t,[1,2])
642 self.assertEqual(t,[
"one",
"two"])
644 self.assertEqual(t,[
"one",
"two"])
646 self.assertEqual(t,[1,2])
648 self.assertEqual(t,[1,2])
650 self.assertEqual(t,[1,2])
656 args = [i
for i
in xrange(0,300)]
659 pdump= t.dumpPython()
663 pythonized = eval( pdump, globals(),{
'cms':
cms()} )
664 self.assertEqual(t,pythonized)
667 self.assert_(isinstance(a, _ParameterTypeBase))
672 def _isValid(self,value):
674 a = __Test(
"MyType",t=__TestType(1), u=__TestType(2))
676 self.assertEqual(b.t.value(),1)
677 self.assertEqual(b.u.value(),2)
682 def _isValid(self,value):
684 a = __Test(
"MyType",t=__TestType(1), u=__TestType(2))
685 b = a.clone(t=3, v=__TestType(4))
686 self.assertEqual(a.t.value(),1)
687 self.assertEqual(a.u.value(),2)
688 self.assertEqual(b.t.value(),3)
689 self.assertEqual(b.u.value(),2)
690 self.assertEqual(b.v.value(),4)
691 self.assertRaises(TypeError,a.clone,
None,**{
"v":1})
694 def _isValid(self,value):
697 self.assertEqual(a.isModified(),
False)
699 self.assertEqual(a.isModified(),
False)
701 self.assertEqual(a.isModified(),
True)
703 self.assertEqual(a.isModified(),
False)
708 def _isValid(self,value):
710 class __DummyModule(
object):
716 self.assertEqual(p.dumpPython(), eval(p.dumpPython(),{
"cms": __DummyModule()}).
dumpPython())
bool setValue(Container &, const reco::JetBaseRef &, const JetExtendedData &)
associate jet with value. Returns false and associate nothing if jet is already associated ...
static std::string join(char **cmd)
def testLargeParameterizable
if(conf.exists("allCellsPositionCalc"))
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run