next up previous contents
Next: Acknowledgement Up: The Python API Previous: File support   Contents

Observation support

In order to fill the output file, observation have to be defined and written. This is done with the ClassObservation class:

obs = pyclassfiller.ClassObservation()

The sections present should first be declared, e.g.:

obs.head.presec[:]            = False  # Disable all sections except...
obs.head.presec[code.sec.gen] = True   # General
CLASS will accept to write observations which provide at least the General, Position, and Spectroscopy or Continuum Drift sections.

Each section has then to be filled, e.g. the Spectroscopic section:

obs.head.spe.line = "MYLINE"
obs.head.spe.restf = 123456.
obs.head.spe.nchan = nchan
obs.head.spe.rchan = 1.
obs.head.spe.fres = 1.
obs.head.spe.vres = -1.
obs.head.spe.voff = 0.
obs.head.spe.bad = -1000.
obs.head.spe.image = 98765.
obs.head.spe.vtype = code.velo.obs
obs.head.spe.vconv = code.conv.rad
obs.head.spe.doppler = 0.
All elements should be filled, Class does not support partially filled sections. At the time this document is written, only the sections General, Position, Spectroscopy, Frequency Switch, Calibration, and continuum Drift are supported. The content of these sections, as seen from Python, is strictly equivalent to the Sic variables in R%HEAD% (i.e. see HELP SET VARIABLE in the CLASS program for the sections details).

Some elements in the Class sections are arrays. They must be defined as numpy arrays, e.g.:

import numpy
obs.head.cal.count = numpy.array(range(3),dtype=numpy.float32)
The numpy array must be defined with the correct size and type: for efficiency purpose (which is often needed when writing CLASS files e.g. at the telescope), the module pyclassfiller does not provide implicit conversion to the appropriate type. You must foresee it when writing your scripts.

Also, some other elements are internal codes, e.g.

from pyclassfiller import code
obs.head.gen.kind = code.kind.spec
Again, these codes are equivalent to the same codes in the SIC structure SIC%CODE%. They should be used when relevant according to the SET VARIABLE help.

The data array (most likely the spectrum intensities) should be also provided as a single precision numpy array, e.g.:

obs.datay = numpy.array(range(nchan),dtype=numpy.float32)

Finally, once the sections and data are filled, the observation has to be written to the output file:

obs.write()
If obs.head.gen.num is 0, CLASS will automatically give the next available (unused) number in the file.

Once you are done with a ClassObservation object, you should delete it to release its memory.


next up previous contents
Next: Acknowledgement Up: The Python API Previous: File support   Contents
Gildas manager 2023-06-01