A module is a fragment of executable code that has a well-defined interface and performs a well-defined service. Each module inherits from an abstract parent class. Generally modules are totally independent of each other, operating purely on the basis of their own internal configuration, and run specific information such as calibration constants and the input event data. A module may generate new event data or might perform a filter function based on the event characteristics or might perform some statistical operation. Each module will provide an interface to AC++ that includes a unique name and functions that will be called at the beginning of the job, at the beginning and end of each data taking run (i.e. when the run number changes) and a per event function. Each module also has a unique name and a descriptive text. The complete description of the module interface is given in a later section on writing a module.