ROOT logo
#ifndef ALITRIGDEVICE_H
#define ALITRIGDEVICE_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
// Author: Andrei Gheata, 27/07/2009

//==============================================================================
//   AliTrigDevice - Base class for a generic device.
//==============================================================================

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif

class AliTrigEvent;
class AliTrigScheduler;
class AliTrigScheduledResponse;

class AliTrigDevice : public TNamed {

private:
  AliTrigDevice(const AliTrigDevice &other);
  AliTrigDevice &operator=(const AliTrigDevice &other);

public:
  AliTrigDevice();
  AliTrigDevice(const char *name, Int_t ninputs, Int_t noutputs);
  virtual ~AliTrigDevice();

  virtual void              AddDevice(AliTrigDevice *other);
  Int_t                     GetNcomponents() const;
  AliTrigDevice            *GetComponent(Int_t n);
  AliTrigScheduledResponse *GetResponseFunction(const char *name);
  AliTrigScheduler         *GetScheduler() const {return fScheduler;}
  
  //____________________________________________________________________________
  // Device creation method to be implemented by derived classes. The response
  // functions are registered here. Connections between component devices should
  // also be handled in this method.
  virtual Bool_t            CreateDevice() {return kTRUE;}
  //____________________________________________________________________________
  // Connectivity to other devices. The method will create a connector between
  // an output of this device to one input of the other.
  virtual Bool_t            Connect(Int_t /*output*/, AliTrigDevice */*other*/, Int_t /*at_input*/) {return kTRUE;}

  //____________________________________________________________________________
  // Response functions to be implemented by specific devices. Has to propagate
  // the response to all connected devices. Representing the output #n of the device.
  virtual Bool_t            Response(Int_t output = 0) = 0;

  //____________________________________________________________________________
  // Create the response functions of the device.
  // The delay argument is in arbitrary time units with respect to the startup
  // reference. Note that the created scheduled entry must be registered to the
  // device scheduler via: fDevice->AddScheduledEntry() method
  AliTrigScheduledResponse *RegisterResponseFunction(const char *name, Int_t output, Int_t delay);

  //____________________________________________________________________________
  // Setting the value for a given input for digital devices of general ones
  // that are handling generic signals.
  virtual const char       *GetOutputType(Int_t /*output*/) {return 0;}
  virtual Bool_t            SetInputType(Int_t input, const char *classname) = 0;
  virtual Bool_t            SetInputValue(Int_t input, Bool_t value) = 0;
  virtual Bool_t            SetInputValue(Int_t input, AliTrigEvent *event) = 0;

  //____________________________________________________________________________
  // Device-dependent inputs reset method
  virtual void              ResetInputs() = 0;

  void                      SetNinputs(Int_t ninputs)   {fNinputs = ninputs;}
  void                      SetNoutputs(Int_t noutputs) {fNoutputs = noutputs;}
  Int_t                     GetNinputs() const {return fNinputs;}
  Int_t                     GetNoutputs() const {return fNoutputs;}
   
protected:
  Int_t                     fNinputs;            // Number of inputs
  Int_t                     fNoutputs;           // Number of outputs
  AliTrigScheduler         *fScheduler;         // Device scheduler
  TObjArray                *fComponents;        // Component devices
  TObjArray                *fResponseFunctions; // List of response functions
   
  ClassDef(AliTrigDevice,1)  // Base class for trigger devices
};
#endif
 AliTrigDevice.h:1
 AliTrigDevice.h:2
 AliTrigDevice.h:3
 AliTrigDevice.h:4
 AliTrigDevice.h:5
 AliTrigDevice.h:6
 AliTrigDevice.h:7
 AliTrigDevice.h:8
 AliTrigDevice.h:9
 AliTrigDevice.h:10
 AliTrigDevice.h:11
 AliTrigDevice.h:12
 AliTrigDevice.h:13
 AliTrigDevice.h:14
 AliTrigDevice.h:15
 AliTrigDevice.h:16
 AliTrigDevice.h:17
 AliTrigDevice.h:18
 AliTrigDevice.h:19
 AliTrigDevice.h:20
 AliTrigDevice.h:21
 AliTrigDevice.h:22
 AliTrigDevice.h:23
 AliTrigDevice.h:24
 AliTrigDevice.h:25
 AliTrigDevice.h:26
 AliTrigDevice.h:27
 AliTrigDevice.h:28
 AliTrigDevice.h:29
 AliTrigDevice.h:30
 AliTrigDevice.h:31
 AliTrigDevice.h:32
 AliTrigDevice.h:33
 AliTrigDevice.h:34
 AliTrigDevice.h:35
 AliTrigDevice.h:36
 AliTrigDevice.h:37
 AliTrigDevice.h:38
 AliTrigDevice.h:39
 AliTrigDevice.h:40
 AliTrigDevice.h:41
 AliTrigDevice.h:42
 AliTrigDevice.h:43
 AliTrigDevice.h:44
 AliTrigDevice.h:45
 AliTrigDevice.h:46
 AliTrigDevice.h:47
 AliTrigDevice.h:48
 AliTrigDevice.h:49
 AliTrigDevice.h:50
 AliTrigDevice.h:51
 AliTrigDevice.h:52
 AliTrigDevice.h:53
 AliTrigDevice.h:54
 AliTrigDevice.h:55
 AliTrigDevice.h:56
 AliTrigDevice.h:57
 AliTrigDevice.h:58
 AliTrigDevice.h:59
 AliTrigDevice.h:60
 AliTrigDevice.h:61
 AliTrigDevice.h:62
 AliTrigDevice.h:63
 AliTrigDevice.h:64
 AliTrigDevice.h:65
 AliTrigDevice.h:66
 AliTrigDevice.h:67
 AliTrigDevice.h:68
 AliTrigDevice.h:69
 AliTrigDevice.h:70
 AliTrigDevice.h:71
 AliTrigDevice.h:72
 AliTrigDevice.h:73
 AliTrigDevice.h:74
 AliTrigDevice.h:75
 AliTrigDevice.h:76
 AliTrigDevice.h:77
 AliTrigDevice.h:78
 AliTrigDevice.h:79
 AliTrigDevice.h:80
 AliTrigDevice.h:81
 AliTrigDevice.h:82
 AliTrigDevice.h:83
 AliTrigDevice.h:84
 AliTrigDevice.h:85
 AliTrigDevice.h:86