Chimera Advanced Usage

Chimera Concepts

These are terms commonly found within the software; they represent concepts that are important to understand in order to fully exploit Chimera‘s capabilities.

This is the python class that provides every other instance with the tools to be able to function within :program:chimera: initialization, life cycle management, distributed networking capabilities.
In order to facilitate the administration of objects, the Manager functionality among other utilities is encapsulated in a ChimeraObject class. Every object in chimera should subclass this one. More details are available in Chimera objects.

Every chimera object running somewhere is accessible via a URI style identifier that uniquely locates it in the distributed environment; it spells like: [host:port]/ClassName/instance_name[?param1=value1,...].

The host:port may be left out if the referred object is running in the localhost, and/or have been defined in the configuration file.

Advanced Chimera Configuration

Every ChimeraObject has a class attribute, a python dictionary that defines possible configuration options for the object, along with sensible defaults for each. This attribute, named __config__, can be referred to when looking for options to include in the configuration file. For example, the telescope interface default __config__:

    __config__ = {"device": "/dev/ttyS0",
                  "model": "Fake Telescopes Inc.",
                  "optics": ["Newtonian", "SCT", "RCT"],
                  "mount": "Mount type Inc.",
                  "aperture": 100.0,  # mm
                  "focal_length": 1000.0,  # mm unit (ex., 0.5 for a half length focal reducer)
                  "focal_reduction": 1.0,

can have attribute members overwritten and/or added from the plugin and from the configuration file and the others will keep their default values.

For example, on the meade plugin, besides the default options listed above, we add the configuration option on the instrument class:

__config__ = {'azimuth180Correct': True}

and, on the configuration, we can change the defaults to a different value:

# Meade telescope on serial port
    driver: Meade
    device:/dev/ttyS1      # Overwritten from the interface
    my_custom_option: 3.0  # Added on configuration file

Default configuration parameters by interface type

  • Site
    __config__ = dict(name="UFSC",
                      latitude=Coord.fromDMS("-23 00 00"),
  • Auto-focus
    __config__ = {"camera": "/Camera/0",
                  "filterwheel": "/FilterWheel/0",
                  "focuser": "/Focuser/0",
                  "max_tries": 3}
  • Autoguider
    __config__ = {"site": '/Site/0',            # Telescope Site.
                  "telescope": "/Telescope/0",  # Telescope instrument that will be guided by the autoguider.
                  "camera": "/Camera/0",        # Guider camera instrument.
                  "filterwheel": None,          # Filter wheel instrument, if there is one.
                  "focuser": None,              # Guider camera focuser, if there is one.
                  "autofocus": None,            # Autofocus controller, if there is one.
                  "scheduler": None,            # Scheduler controller, if there is one.
                  "max_acquire_tries": 3,       # Number of tries to find a guiding star.
                  "max_fit_tries": 3}           # Number of tries to acquire the guide star offset before being lost.

  • Camera
    __config__ = {"device": "Unknown",            # Bus address identifier for this camera. E.g. USB, LPT1, ...
                  "ccd": CCD.IMAGING,             # CCD to be used when multiple ccd camera. IMAGING or TRACKING.
                  "camera_model": "Unknown",      # Camera model string. To be used by metadata purposes
                  "ccd_model": "Unknown",         # CCD model string. To be used by metadata purposes
                  "ccd_saturation_level": None,   # CCD level at which arises saturation (in ADUs).
                                                  # Needed by SExtractor when doing auto-focus, autoguiding...

                  # WCS configuration parameters  #
                  "telescope_focal_length": None, # Telescope focal length (in millimeters)
                  "rotation": 0.                  # Angle between the North and the second axis of the image counted
                                                  # positive to the East (in degrees)
  • Dome
    __config__ = {"device": "/dev/ttyS1",
                  "telescope": "/Telescope/0",
                  "mode": Mode.Stand,

                  "model": "Fake Domes Inc.",
                  "style": Style.Classic,

                  'park_position': Coord.fromD(155),
                  'park_on_shutdown': False,
                  'close_on_shutdown': False,

                  "az_resolution": 2,  # dome position resolution in degrees
                  "slew_timeout": 120,
                  "abort_timeout": 60,
                  "init_timeout": 5,
                  "open_timeout": 20,
                  "close_timeout": 20}
  • Filter wheel
    __config__ = {"device": "/dev/ttyS0",
                  "filter_wheel_model": "Fake Filters Inc.",
                  "filters": "R G B LUNAR CLEAR"  # space separated filter names (in position order)

  • Focuser
                    FocuserAxis.V: FocuserFeature.CONTROLLABLE_V,
                    FocuserAxis.W: FocuserFeature.CONTROLLABLE_W,

class InvalidFocusPositionException(ChimeraException):
  • Point Verify
    __config__ = {"camera": "/Camera/0",            # Camera attached to the telescope.
                  "filterwheel": "/FilterWheel/0",  # Filterwheel, if exists.
                  "telescope": "/Telescope/0",      # Telescope to verify pointing.

                  "exptime":  10.0,                 # Exposure time.
                  "filter":  "R",                   # Filter to expose.
                  "max_fields": 100,                # Maximum number of Landlodt fields to use.
                  "max_tries": 5,                   # Maximum number of tries to point the telescope correctly.
                  "dec_tolerance": 0.0167,          # Maximum declination error tolerance (degrees).
  • Telescope
    __config__ = {"device": "/dev/ttyS0",
                  "model": "Fake Telescopes Inc.",
                  "optics": ["Newtonian", "SCT", "RCT"],
                  "mount": "Mount type Inc.",
                  "aperture": 100.0,  # mm
                  "focal_length": 1000.0,  # mm unit (ex., 0.5 for a half length focal reducer)
                  "focal_reduction": 1.0,
    __config__ = {"timeout": 30,  # s
                  "slew_rate": SlewRate.MAX,
                  "auto_align": True,
                  "align_mode": AlignMode.POLAR,
                  "slew_idle_time": 0.1,  # s
                  "max_slew_time": 90.0,  # s
                  "stabilization_time": 2.0,  # s
                  "position_sigma_delta": 60.0,  # arcseconds
                  "skip_init": False,
                  "min_altitude": 20}
    __config__ = {"default_park_position": Position.fromAltAz(90, 180)}
  • Weather Station
    __config__ = {"device": None,           # weather station device
                  "model": "unknown",     # weather station model

Fake Instruments default configuration parameters

  • Camera
    __config__ = {"use_dss": True,
                  "ccd_width": 512,
                  "ccd_height": 512}