# Container¶

class ctapipe.core.Container(**fields)[source]

Bases: object

Generic class that can hold and accumulate data to be passed between Components.

The purpose of this class is to provide a flexible data structure that works a bit like a dict or blank Python class, but prevents the user from accessing members that have not been defined a priori (more like a C struct), and also keeps metadata information such as a description, defaults, and units for each item in the container.

Containers can transform the data into a dict using the  Container.as_dict() method. This allows them to be written to an output table for example, where each Field defines a column. The dict conversion can be made recursively and even flattened so that a nested set of Containers can be translated into a set of columns in a flat table without naming conflicts (the name of the parent Field is pre-pended).

Only members of instance Field will be used as output. For hierarchical data structures, Field can use Container subclasses or a Map as the default value.

>>>    class MyContainer(Container):
>>>        x = Field(100,"The X value")
>>>        energy = Field(-1, "Energy measurement", unit=u.TeV)
>>>
>>>    cont = MyContainer()
>>>    print(cont.x)
>>>    cont.meta['KEY'] = value


Fields inside Containers can contain instances of other Containers, to allow for a hierarchy of containers, and can also contain a Map for the case where one wants e.g. a set of sub-classes indexed by a value like the telescope_id. Examples of this can be found in ctapipe.containers

Containers work by shadowing all class variables (which must be instances of Field) with instance variables of the same name the hold the value expected. If Container.reset() is called, all instance variables are reset to their default values as defined in the class.

Finally, Containers can have associated metadata via their meta attribute, which is a dict of keywords to values.

Attributes Summary

Attributes Documentation

meta
prefix