ATLAS Offline Software
Loading...
Searching...
No Matches
python.D3PDObject.D3PDObject Class Reference
Collaboration diagram for python.D3PDObject.D3PDObject:

Public Member Functions

 __init__ (self, maker, default_prefix='', default_object_name='', default_name=None, allow_args=[], **kw)
 defineBlock (self, lod, name, func, prefix=None, **kw)
 removeBlock (self, name, allowMissing=False)
 defineHook (self, hook)
 allBlocknames (self)
 __call__ (self, level, name=None, prefix=None, name_prefix='', parent_prefix='', object_name=None, include=[], exclude=[], blockargs={}, parent_hookargs=None, *args, **kw)
 blockFillers (self, level, parent_name, parent_prefix='', include=[], exclude=[], blockargs={}, hookargs={})
 copy (self, default_prefix=None, default_object_name=None, default_name=None, **kw_in)

Static Public Member Functions

 runHooks (c, flags, acc)

Protected Member Functions

 _add_blockname (self, n, warnonly=False)
 _remove_blockname (self, n)
 _makeBlockFillers (self, c, level, parent_prefix, include, exclude, blockargs, hookargs)

Protected Attributes

 _maker = maker
 _default_object_name = default_object_name
list _blocks = []
list _hooks = []
dict _all_blocknames = {}
 _default_prefix = default_prefix
 _default_name = default_name
 _hookArgs = kw
 _parent = None
 _allow_args = allow_args

Static Protected Attributes

dict _hookArgsStore = {}

Detailed Description

D3PD object creator class.

For each type of object written to the D3PD, create
an instance of this class.  The arguments to the constructor
are a function to create the Configurable for the object filler
tool and a default value for the variable name prefix
for this block.

After creating the instance, one calls defineBlock to define
the blocks of variables that can be written for this object.

Finally, one calls the object in order to create the
configurable.

So, a typical usage might look like this.

  def makeElectronD3PDObject (name, prefix,
                              getter = None,
                              sgkey = 'ElectronAODCollection')
      if not getter:
          getter = CompFactory.D3PD.SGDataVectorGetterTool \
                   (name + '_Getter',
                    TypeName = 'ElectronContainer',
                    SGKey = sgkey)

      return CompFactory.D3PD.VectorFillerTool (name,
                                                Prefix = prefix,
                                                Getter = getter)

  ElectronD3PDObject = D3PDObject (makeElectronD3PDObject, 'el_')

  ElectronD3PDObject.defineBlock (0, 'Kinematics',
                                  EventCommonD3PDMaker.FourMomFillerTool)

  alg = ...
  alg += ElectronD3PDObject (level)

Definition at line 99 of file D3PDObject.py.

Constructor & Destructor Documentation

◆ __init__()

python.D3PDObject.D3PDObject.__init__ ( self,
maker,
default_prefix = '',
default_object_name = '',
default_name = None,
allow_args = [],
** kw )
Constructor.

Arguments:
  maker: A function to create the IObjFillerTool Configurable
         for this object.  It is called with two fixed arguments,
         the tool name and the variable name prefix.  Any other
         arguments provided to the call will be passed through.
  default_prefix: Default variable name prefix for objects
                  of this type.
  default_object_name: Default D3PDObject name, something like
                       'EventInfoD3PDObject'
  default_name: If specified, the default tool name to use
                for these objects.
  allow_args: Additional arguments that may be passed in when
              instantiating the D3PDObject, but which are not
              to be passed to the maker function.  This can be
              used to allow for additional arguments to hook
              or level-of-detail functions.

  Any additional arguments are passed into any hook functions.

Definition at line 141 of file D3PDObject.py.

142 default_name = None, allow_args = [], **kw):
143 """Constructor.
144
145 Arguments:
146 maker: A function to create the IObjFillerTool Configurable
147 for this object. It is called with two fixed arguments,
148 the tool name and the variable name prefix. Any other
149 arguments provided to the call will be passed through.
150 default_prefix: Default variable name prefix for objects
151 of this type.
152 default_object_name: Default D3PDObject name, something like
153 'EventInfoD3PDObject'
154 default_name: If specified, the default tool name to use
155 for these objects.
156 allow_args: Additional arguments that may be passed in when
157 instantiating the D3PDObject, but which are not
158 to be passed to the maker function. This can be
159 used to allow for additional arguments to hook
160 or level-of-detail functions.
161
162 Any additional arguments are passed into any hook functions.
163
164"""
165 self._maker = maker
166 self._default_object_name = default_object_name
167 self._blocks = []
168 self._hooks = []
169 self._all_blocknames = {}
170 self._default_prefix = default_prefix
171 self._default_name = default_name
172 self._hookArgs = kw
173 self._parent = None
174 self._allow_args = allow_args
175 return
176
177

Member Function Documentation

◆ __call__()

python.D3PDObject.D3PDObject.__call__ ( self,
level,
name = None,
prefix = None,
name_prefix = '',
parent_prefix = '',
object_name = None,
include = [],
exclude = [],
blockargs = {},
parent_hookargs = None,
* args,
** kw )
Create a Configurable to fill an object of this type.

Arguments:
  level: Requested level of detail for this object.  An integer.
  name: Tool name.  If omitted, one will be constructed.
  prefix: Variable name prefix for this object.
  name_prefix: If name wasn't specified, this is a prefix
               to add to the tool name.
  parent_prefix: Variable name prefix for any parent tool.
  object_name: Name of the D3PDObject, like 'EventInfoD3PDObject'
  include: List of block names to include, regardless
           of level of detail.
  exclude: List of block names to exclude, regardless
           of level of detail.
  blockargs: Extra arguments to pass to block filler tools.
             The keys are block names.
             Values are dictionaries of keyword arguments.
             These override anything specified in defineBlock.
  parent_hookargs: [Not to be used by user code.]
                   Dictionary of hook args from the parent,
                   to be merged into our hook arg dictionary.
  args, kw: Additional arguments to pass to the maker function.
            However, any entries in KW that have the form
            BLOCK_parm, where BLOCK is a known block name,
            will instead be interpreted as arguments to pass
            to a block filler tool.  These override entries
            in BLOCKARGS.

Definition at line 316 of file D3PDObject.py.

327 *args, **kw):
328 """Create a Configurable to fill an object of this type.
329
330 Arguments:
331 level: Requested level of detail for this object. An integer.
332 name: Tool name. If omitted, one will be constructed.
333 prefix: Variable name prefix for this object.
334 name_prefix: If name wasn't specified, this is a prefix
335 to add to the tool name.
336 parent_prefix: Variable name prefix for any parent tool.
337 object_name: Name of the D3PDObject, like 'EventInfoD3PDObject'
338 include: List of block names to include, regardless
339 of level of detail.
340 exclude: List of block names to exclude, regardless
341 of level of detail.
342 blockargs: Extra arguments to pass to block filler tools.
343 The keys are block names.
344 Values are dictionaries of keyword arguments.
345 These override anything specified in defineBlock.
346 parent_hookargs: [Not to be used by user code.]
347 Dictionary of hook args from the parent,
348 to be merged into our hook arg dictionary.
349 args, kw: Additional arguments to pass to the maker function.
350 However, any entries in KW that have the form
351 BLOCK_parm, where BLOCK is a known block name,
352 will instead be interpreted as arguments to pass
353 to a block filler tool. These override entries
354 in BLOCKARGS.
355"""
356
357 # Prefix defaults to that given to the constructor.
358 if prefix is None:
359 prefix = self._default_prefix
360
361 # Object name defaults to that given in the constructor
362 if object_name is None:
363 object_name = self._default_object_name
364
365 # The tool name.
366 if name is None:
367 name = self._default_name
368 name = _make_name (name, prefix, name_prefix, parent_prefix,
369 self._default_prefix)
370
371 # Copy blockargs and kw.
372 blockargs = dict ([(k, v.copy()) for (k, v) in blockargs.items()])
373 kw = kw.copy()
374
375 # Move any block filler args from kw to blockargs.
376 for k in list (kw.keys()):
377 # It is possible for block names themselves to contain
378 # underscores. So in the case we have more than one underscore
379 # in the name, try all prefixes we can make, stopping at
380 # the first (shortest) match.
381 kk = k.split('_')
382 for i in range(1, len(kk)):
383 this_key = '_'.join (kk[:i])
384 if this_key in self._all_blocknames:
385 this_var = '_'.join (kk[i:])
386 blockargs.setdefault(this_key,{})[this_var] = kw[k]
387 del kw[k]
388 break
389
390 # Don't pass extra args listed in allow_args to the maker function.
391 kw2 = kw.copy()
392 for k in self._allow_args:
393 if k in kw2: del kw2[k]
394
395 # Call the maker function.
396 try:
397 c = self._maker (name=name, prefix=prefix, object_name=object_name,
398 *args, **kw2) # noqa: B026 (star-arg unpacking after keyword OK here
399 # because we are handling failures below)
400 except TypeError as exc:
401 if (len(exc.args) > 0 and
402 exc.args[0].find ("unexpected keyword argument 'object_name'") >= 0):
403 log = logging.getLogger ('D3PDObject')
404 log.warn ("Maker function missing `object_name' formal arg: %s", self._maker)
405 c = self._maker (name=name, prefix=prefix, *args, **kw2) # noqa: B026 (see above)
406 else:
407 raise
408
409 # Construct arguments to pass to hooks.
410 # Use a StackedDict: that allows any additions that a LOD function
411 # makes to hookargs to be visible in the rest of the D3PDObject.
412 if parent_hookargs is None:
413 parent_hookargs = {}
414 local_hookargs = {}
415 hookargs = StackedDict (local_hookargs, kw,
416 self._hookArgs, parent_hookargs)
417 local_hookargs['level'] = level
418 local_hookargs['name'] = name
419 local_hookargs['prefix'] = prefix
420 local_hookargs['name_prefix'] = name_prefix
421 local_hookargs['parent_prefix'] = parent_prefix
422 local_hookargs['include'] = include
423 local_hookargs['exclude'] = exclude
424 local_hookargs['blockargs'] = blockargs
425 local_hookargs['d3pdo'] = self
426
427 # Create block filler tools.
428 self._makeBlockFillers (c, level, parent_prefix + prefix,
429 include, exclude, blockargs, hookargs)
430
431 # We used to run the hooks from here.
432 # But in that case, we don't have access to the containing
433 # algorithm --- too early for that.
434 # So we break out the running of the hooks to a separate method
435 # that gets called after the tool gets added to the algorithm.
436 # A catch, though, is that we have to remember the arguments
437 # that we pass to the hook functions. We can't attach it
438 # to the configurable, since it doesn't have a dictionary.
439 # Instead, we need to keep a dictionary here of the tools
440 # and the corresponding hook args.
441 D3PDObject._hookArgsStore[c.getName()] = (self._hooks, args, hookargs)
442 return c
443
444

◆ _add_blockname()

python.D3PDObject.D3PDObject._add_blockname ( self,
n,
warnonly = False )
protected
Add a new block name N to the list of all names.
Raises an exception if a block name is duplicated.

Definition at line 276 of file D3PDObject.py.

276 def _add_blockname (self, n, warnonly = False):
277 """Add a new block name N to the list of all names.
278 Raises an exception if a block name is duplicated.
279"""
280 if n in self._all_blocknames:
281 if warnonly:
282 log = logging.getLogger ('D3PDObject')
283 log.warn ('Duplicate block name: %s (%s %s %s)',
284 n,
285 self._default_prefix,
286 self._default_name,
287 self._default_object_name)
288 else:
289 raise ValueError ('Duplicate block name: %s (%s %s %s)' %
290 (n,
291 self._default_prefix,
292 self._default_name,
293 self._default_object_name))
294 self._all_blocknames[n] = 1
295 if self._parent:
296 self._parent._add_blockname (n, True)
297 return
298
299

◆ _makeBlockFillers()

python.D3PDObject.D3PDObject._makeBlockFillers ( self,
c,
level,
parent_prefix,
include,
exclude,
blockargs,
hookargs )
protected
Create block filler tools for object C, for the specified
level of detail.

Arguments:
  c: Object for which to create the block fillers.
  level: Requested level of detail for this object.  An integer.
  parent_prefix: Variable name prefix for any parent tool.
  include: List of block names to include, regardless
           of level of detail.
  exclude: List of block names to exclude, regardless
           of level of detail.
  blockargs: Extra arguments to pass to block filler tools.
             The keys are block names.
             Values are dictionaries of keyword arguments.
             These override anything specified in defineBlock.
  hookargs: Arguments passed to the D3PD object, to be passed
            on to LOD functions.

Definition at line 540 of file D3PDObject.py.

547 hookargs):
548 """Create block filler tools for object C, for the specified
549 level of detail.
550
551 Arguments:
552 c: Object for which to create the block fillers.
553 level: Requested level of detail for this object. An integer.
554 parent_prefix: Variable name prefix for any parent tool.
555 include: List of block names to include, regardless
556 of level of detail.
557 exclude: List of block names to exclude, regardless
558 of level of detail.
559 blockargs: Extra arguments to pass to block filler tools.
560 The keys are block names.
561 Values are dictionaries of keyword arguments.
562 These override anything specified in defineBlock.
563 hookargs: Arguments passed to the D3PD object, to be passed
564 on to LOD functions.
565"""
566 for bf in self.blockFillers (level, c.getName(), parent_prefix,
567 include, exclude, blockargs,
568 hookargs):
569 c.BlockFillers += [bf]
570 return
571
572
573

◆ _remove_blockname()

python.D3PDObject.D3PDObject._remove_blockname ( self,
n )
protected
Remove block name N.

Definition at line 300 of file D3PDObject.py.

300 def _remove_blockname (self, n):
301 """Remove block name N."""
302 del self._all_blocknames[n]
303 if self._parent:
304 self._parent._remove_blockname (n)
305 return
306
307

◆ allBlocknames()

python.D3PDObject.D3PDObject.allBlocknames ( self)
Return a dictionary the keys of which are the names of all blocks
defined for this object.  This list will include any blocks defined
recursively.

Definition at line 308 of file D3PDObject.py.

308 def allBlocknames (self):
309 """Return a dictionary the keys of which are the names of all blocks
310 defined for this object. This list will include any blocks defined
311 recursively.
312"""
313 return self._all_blocknames
314
315

◆ blockFillers()

python.D3PDObject.D3PDObject.blockFillers ( self,
level,
parent_name,
parent_prefix = '',
include = [],
exclude = [],
blockargs = {},
hookargs = {} )
Return a list of block filler tool configurables.

Arguments:
  level: Requested level of detail for this object.  An integer.
  parent_name: Name of the parent component.
  parent_prefix: Variable name prefix for any parent tool.
  include: List of block names to include, regardless
           of level of detail.
  exclude: List of block names to exclude, regardless
           of level of detail.
  blockargs: Extra arguments to pass to block filler tools.
             The keys are block names.
             Values are dictionaries of keyword arguments.
             These override anything specified in defineBlock.
  hookargs: Arguments passed to the D3PD object, to be passed
            on to LOD functions.

Definition at line 464 of file D3PDObject.py.

471 hookargs = {}):
472 """Return a list of block filler tool configurables.
473
474 Arguments:
475 level: Requested level of detail for this object. An integer.
476 parent_name: Name of the parent component.
477 parent_prefix: Variable name prefix for any parent tool.
478 include: List of block names to include, regardless
479 of level of detail.
480 exclude: List of block names to exclude, regardless
481 of level of detail.
482 blockargs: Extra arguments to pass to block filler tools.
483 The keys are block names.
484 Values are dictionaries of keyword arguments.
485 These override anything specified in defineBlock.
486 hookargs: Arguments passed to the D3PD object, to be passed
487 on to LOD functions.
488 """
489 out = []
490 for b in self._blocks:
491 # Find the requested level.
492 if b.name in include:
493 # Always request inclusion.
494 reqlev = 999
495 elif b.name in exclude:
496 # Always request exclusion.
497 reqlev = -999
498 else:
499 # Request level passed in.
500 reqlev = level
501
502 # Block filler arguments.
503 args = b.kw.copy()
504 args.update (blockargs.get (b.name, {}))
505
506 # Need to copy lists in arguments; otherwise, += operations
507 # can modify the saved value.
508 # Also evaluate deferred arguments here: need to do it before
509 # calling the LOD function, as that should have the final
510 # say about any changes in the argument list.
511 for k, v in args.items():
512 if isinstance(v, list):
513 args[k] = v[:]
514 if isinstance(v, DeferArg):
515 args[k] = v(hookargs)
516
517 if _testLOD (b.lod, reqlev, args, hookargs):
518 fillername = parent_name + '_' + b.name
519 if isinstance (b.func, D3PDObject): # ugly!
520 for k in self._allow_args:
521 if k in hookargs:
522 args[k] = hookargs[k]
523 bf = b.func (level, fillername,
524 parent_prefix = parent_prefix,
525 include = include,
526 exclude = exclude,
527 blockargs = blockargs,
528 parent_hookargs = hookargs,
529 **args)
530 else:
531 bf = b.func (fillername, **args)
532
533 out += [bf]
534 if b._hooks:
535 D3PDObject._hookArgsStore[bf.getName()] = (b._hooks, args, hookargs)
536
537 return out
538
539

◆ copy()

python.D3PDObject.D3PDObject.copy ( self,
default_prefix = None,
default_object_name = None,
default_name = None,
** kw_in )
Return a copy of this D3PD object, possibly changing parameters.

Definition at line 574 of file D3PDObject.py.

578 **kw_in):
579 """Return a copy of this D3PD object, possibly changing parameters."""
580 if default_prefix is None:
581 default_prefix = self._default_prefix
582 if default_object_name is None:
583 default_object_name = self._default_object_name
584 if default_name is None:
585 default_name = self._default_name
586 kw = self._hookArgs.copy()
587 kw.update (kw_in)
588
589 c = D3PDObject (self._maker,
590 default_prefix,
591 default_object_name,
592 default_name,
593 **kw)
594
595 #def defineBlock (self, lod, name, func, prefix = None, **kw):
596 for b in self._blocks:
597 func = b.func
598 if isinstance (func, D3PDObject):
599 func = func.copy()
600 c.defineBlock (b.lod, b.name, func, **b.kw)
601
602 for h in self._hooks:
603 c.defineHook (h)
604
605 return c
606
607

◆ defineBlock()

python.D3PDObject.D3PDObject.defineBlock ( self,
lod,
name,
func,
prefix = None,
** kw )
Define a new block of variables for this object type.

Arguments:
lod: Level of detail of this block.  See below.
name: Name of this block.
func:   Function to create the block Configurable.
prefix: Variable name prefix for this block.
kw: Arguments to pass to the creation function.

The creation function will be called like this:

b.func (name, BlockName = blockname, **b.kw)

where name is the name for the tool.

However, if b.func is a class deriving from D3PDObject, then the creation
function will instead be called like this:

b.func (level, name, parent_prefix, **b.kw)

LOD is used to control whether this block should be included.

In the simple case, this is an integer, and the block is included
if the block's level of detail is less than or equal to the
requested level of detail (unless the block was explicitly
included or excluded).

In the general case, LOD may be a function.  The first two arguments
passed to the function will be the requested level of detail
and the block filler
arguments.  The requested level of detail will be an integer;
it will be 999 if the block was explicitly included, and -999
if the block was explicitly excluded.  The block filler arguments
is a dictionary of keyword arguments.  The LOD function should
return a boolean value saying whether or not the block should
be included.  It may also alter the dictionary of arguments
(this overrides all other argument settings).
The LOD function may optionally take a third argument; if present,
this is a dictionary of the arguments passed to the D3PDObject
(the same arguments that are passed to hook functions).

Definition at line 178 of file D3PDObject.py.

178 def defineBlock (self, lod, name, func, prefix = None, **kw):
179 """Define a new block of variables for this object type.
180
181 Arguments:
182 lod: Level of detail of this block. See below.
183 name: Name of this block.
184 func: Function to create the block Configurable.
185 prefix: Variable name prefix for this block.
186 kw: Arguments to pass to the creation function.
187
188 The creation function will be called like this:
189
190 b.func (name, BlockName = blockname, **b.kw)
191
192 where name is the name for the tool.
193
194 However, if b.func is a class deriving from D3PDObject, then the creation
195 function will instead be called like this:
196
197 b.func (level, name, parent_prefix, **b.kw)
198
199 LOD is used to control whether this block should be included.
200
201 In the simple case, this is an integer, and the block is included
202 if the block's level of detail is less than or equal to the
203 requested level of detail (unless the block was explicitly
204 included or excluded).
205
206 In the general case, LOD may be a function. The first two arguments
207 passed to the function will be the requested level of detail
208 and the block filler
209 arguments. The requested level of detail will be an integer;
210 it will be 999 if the block was explicitly included, and -999
211 if the block was explicitly excluded. The block filler arguments
212 is a dictionary of keyword arguments. The LOD function should
213 return a boolean value saying whether or not the block should
214 be included. It may also alter the dictionary of arguments
215 (this overrides all other argument settings).
216 The LOD function may optionally take a third argument; if present,
217 this is a dictionary of the arguments passed to the D3PDObject
218 (the same arguments that are passed to hook functions).
219"""
220 if prefix is not None:
221 kw = kw.copy()
222 kw['Prefix'] = prefix
223
224 # Record this block name.
225 # Also recursively record any blocks that it contains.
226 # This will check that the names are unique.
227 self._add_blockname (name)
228 if isinstance (func, D3PDObject):
229 for n in func.allBlocknames():
230 self._add_blockname (n)
231 func._parent = self
232 func._allow_args = self._allow_args
233
234 self._blocks.append (Block (name, lod, func, kw))
235 return self._blocks[-1]
236
237

◆ defineHook()

python.D3PDObject.D3PDObject.defineHook ( self,
hook )
Define a new hook function for this D3PD object.

HOOK is a function that will be called for each instance
of this D3PD object after all block filler tools have been
added.

The arguments to the hook function are the object filler tool,
followed by the arguments that were passed to __call__.

Definition at line 263 of file D3PDObject.py.

263 def defineHook (self, hook):
264 """Define a new hook function for this D3PD object.
265
266 HOOK is a function that will be called for each instance
267 of this D3PD object after all block filler tools have been
268 added.
269
270 The arguments to the hook function are the object filler tool,
271 followed by the arguments that were passed to __call__.
272"""
273 self._hooks.append (hook)
274
275

◆ removeBlock()

python.D3PDObject.D3PDObject.removeBlock ( self,
name,
allowMissing = False )
Remove the block NAME from this object.

Definition at line 238 of file D3PDObject.py.

238 def removeBlock (self, name, allowMissing = False):
239 """Remove the block NAME from this object."""
240 bb = None
241 for b in self._blocks:
242 if isinstance (b.func, D3PDObject):
243 if b.func.removeBlock (name, True):
244 return True
245 if b.name == name:
246 bb = b
247 break
248
249 if not bb:
250 if allowMissing:
251 return False
252 raise ValueError ('Unknown block name: ', name)
253
254 self._blocks.remove (bb)
255 self._remove_blockname (name)
256 if isinstance (bb.func, D3PDObject):
257 for n in bb.func.allBlocknames():
258 self._remove_blockname (n)
259
260 return True
261
262

◆ runHooks()

python.D3PDObject.D3PDObject.runHooks ( c,
flags,
acc )
static
Run creation hooks for configurable C.

Should be run by the D3PD maker algorithm; not for general use.

Definition at line 446 of file D3PDObject.py.

446 def runHooks (c, flags, acc):
447 """Run creation hooks for configurable C.
448
449Should be run by the D3PD maker algorithm; not for general use.
450"""
451 info = D3PDObject._hookArgsStore.get (c.getName())
452 if info:
453 (hooks, args, hookargs) = info
454 for h in hooks:
455 h (c,
456 flags,
457 acc,
458 *args,
459 **dict(hookargs)
460 )
461 return
462
463

Member Data Documentation

◆ _all_blocknames

dict python.D3PDObject.D3PDObject._all_blocknames = {}
protected

Definition at line 169 of file D3PDObject.py.

◆ _allow_args

python.D3PDObject.D3PDObject._allow_args = allow_args
protected

Definition at line 174 of file D3PDObject.py.

◆ _blocks

list python.D3PDObject.D3PDObject._blocks = []
protected

Definition at line 167 of file D3PDObject.py.

◆ _default_name

python.D3PDObject.D3PDObject._default_name = default_name
protected

Definition at line 171 of file D3PDObject.py.

◆ _default_object_name

python.D3PDObject.D3PDObject._default_object_name = default_object_name
protected

Definition at line 166 of file D3PDObject.py.

◆ _default_prefix

python.D3PDObject.D3PDObject._default_prefix = default_prefix
protected

Definition at line 170 of file D3PDObject.py.

◆ _hookArgs

python.D3PDObject.D3PDObject._hookArgs = kw
protected

Definition at line 172 of file D3PDObject.py.

◆ _hookArgsStore

dict python.D3PDObject.D3PDObject._hookArgsStore = {}
staticprotected

Definition at line 138 of file D3PDObject.py.

◆ _hooks

list python.D3PDObject.D3PDObject._hooks = []
protected

Definition at line 168 of file D3PDObject.py.

◆ _maker

python.D3PDObject.D3PDObject._maker = maker
protected

Definition at line 165 of file D3PDObject.py.

◆ _parent

python.D3PDObject.D3PDObject._parent = None
protected

Definition at line 173 of file D3PDObject.py.


The documentation for this class was generated from the following file: