1 #ifndef ALITRIGDEVICE_H
2 #define ALITRIGDEVICE_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
7 // Author: Andrei Gheata, 27/07/2009
9 //==============================================================================
10 // AliTrigDevice - Base class for a generic device.
11 //==============================================================================
18 class AliTrigScheduler;
19 class AliTrigScheduledResponse;
21 class AliTrigDevice : public TNamed {
24 AliTrigDevice(const AliTrigDevice &other);
25 AliTrigDevice &operator=(const AliTrigDevice &other);
29 AliTrigDevice(const char *name, Int_t ninputs, Int_t noutputs);
30 virtual ~AliTrigDevice();
32 virtual void AddDevice(AliTrigDevice *other);
33 Int_t GetNcomponents() const;
34 AliTrigDevice *GetComponent(Int_t n);
35 AliTrigScheduledResponse *GetResponseFunction(const char *name);
36 AliTrigScheduler *GetScheduler() const {return fScheduler;}
38 //____________________________________________________________________________
39 // Device creation method to be implemented by derived classes. The response
40 // functions are registered here. Connections between component devices should
41 // also be handled in this method.
42 virtual Bool_t CreateDevice() {return kTRUE;}
43 //____________________________________________________________________________
44 // Connectivity to other devices. The method will create a connector between
45 // an output of this device to one input of the other.
46 virtual Bool_t Connect(Int_t /*output*/, AliTrigDevice */*other*/, Int_t /*at_input*/) {return kTRUE;}
48 //____________________________________________________________________________
49 // Response functions to be implemented by specific devices. Has to propagate
50 // the response to all connected devices. Representing the output #n of the device.
51 virtual Bool_t Response(Int_t output = 0) = 0;
53 //____________________________________________________________________________
54 // Create the response functions of the device.
55 // The delay argument is in arbitrary time units with respect to the startup
56 // reference. Note that the created scheduled entry must be registered to the
57 // device scheduler via: fDevice->AddScheduledEntry() method
58 AliTrigScheduledResponse *RegisterResponseFunction(const char *name, Int_t output, Int_t delay);
60 //____________________________________________________________________________
61 // Setting the value for a given input for digital devices of general ones
62 // that are handling generic signals.
63 virtual const char *GetOutputType(Int_t /*output*/) {return 0;}
64 virtual Bool_t SetInputType(Int_t input, const char *classname) = 0;
65 virtual Bool_t SetInputValue(Int_t input, Bool_t value) = 0;
66 virtual Bool_t SetInputValue(Int_t input, AliTrigEvent *event) = 0;
68 //____________________________________________________________________________
69 // Device-dependent inputs reset method
70 virtual void ResetInputs() = 0;
72 void SetNinputs(Int_t ninputs) {fNinputs = ninputs;}
73 void SetNoutputs(Int_t noutputs) {fNoutputs = noutputs;}
74 Int_t GetNinputs() const {return fNinputs;}
75 Int_t GetNoutputs() const {return fNoutputs;}
78 Int_t fNinputs; // Number of inputs
79 Int_t fNoutputs; // Number of outputs
80 AliTrigScheduler *fScheduler; // Device scheduler
81 TObjArray *fComponents; // Component devices
82 TObjArray *fResponseFunctions; // List of response functions
84 ClassDef(AliTrigDevice,1) // Base class for trigger devices