How to write an apparatus class for the C++ analyzer

Ole Hansen
Rev. 1.0, 14 June 2003

This document refers to version 0.55 or higher of the C++ analyzer.


An apparatus is a collection of detectors that work together and should be analyzed as a group. In the standard analyzer, detectors cannot be analyzed individually, they must be part of an apparatus.

Writing a class for a new apparatus can be relatively simple. If you want to create a completely new apparatus (i.e. one that does not resemble an existing one at all, like a new type of spectrometer), your new apparatus class should inherit from

In the first case (generic apparatus), you must Since THaApparatus::Reconstruct() is a pure virtual function, you will not be able to instantiate any objects of your class unless this method is implemented.

In the second case (spectrometer), you can take advantage of the infrastructure already implemented by the THaSpectrometer base class. In particular, THaSpectrometer provides a fairly generic Reconstruct() method (see standard analyzer). At the minimum, your spectrometer apparatus class must

Since THaSpectrometer::TrackCalc() and THaSpectrometer::FindVertices() are pure virtual functions, you will not be able to instantiate any objects of your class unless these methods are implemented.

Additionally, you can override any of the other virtual functions of THaApparatus and THaSpectrometer. Some obvious candidates are

If you want to modify an existing apparatus, for example to change an algorithm or the default detector configuration, the best approach probably is to write a new class that inherits from the existing apparatus class. This is especially useful in the case of the standard HRS spectrometers in Hall A.

Note that if you simply want to add a detector to an existing apparatus, you can do so using the AddDetector() method (see adding and removing detectors).


Last modified: Sat Jun 14 13:16:24 EDT 2003

Maintained by Ole Hansen