ROOT logo
#ifndef ALITRIGDIGITALCIRCUIT_H
#define ALITRIGDIGITALCIRCUIT_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

//==============================================================================
//   AliTrigDigitalCircuit - Base class for digital circuits having N Boolean 
//      inputs and one Boolean output. Derived classes must implement the pure 
//      virtual method Trigger() that will return the Boolean response 
//      of the circuit as function of the inputs.
//==============================================================================

#ifndef ALITRIGDEVICE_H
#include "AliTrigDevice.h"
#endif

#ifndef ROOT_TBits
#include "TBits.h"
#endif

class AliTrigEvent;
class AliTrigConnector;

class AliTrigDigitalCircuit : public AliTrigDevice {

public:
  AliTrigDigitalCircuit() : AliTrigDevice(), fLastOutput(kFALSE), fConnector(0), fInputs() {}
  AliTrigDigitalCircuit(const char *name, UInt_t ninputs) : AliTrigDevice(name, ninputs, 1), fLastOutput(kFALSE), fConnector(0), fInputs(ninputs) {}
  virtual ~AliTrigDigitalCircuit();

  virtual Bool_t            Connect(Int_t output, AliTrigDevice *other, Int_t at_input);
  virtual Bool_t            Response(Int_t output);
  // Get/Set inputs
  Bool_t                    GetInputValue(Int_t input) const {return fInputs.TestBitNumber(input);}
  virtual void              ResetInputs() {fInputs.ResetAllBits();}
  virtual Bool_t            SetInputType(Int_t /*input*/, const char */*classname*/) {return kFALSE;}
  virtual Bool_t            SetInputValue(Int_t input, Bool_t value) {fInputs.SetBitNumber(input,value); return kTRUE;}
  virtual Bool_t            SetInputValue(Int_t /*input*/, AliTrigEvent */*signal*/) {return  kFALSE;}
private:
   // Circuit response function. 
  AliTrigDigitalCircuit(const AliTrigDigitalCircuit &other);
  AliTrigDigitalCircuit &operator=(const AliTrigDigitalCircuit &other);
  virtual Bool_t            Trigger() = 0;
   
protected:
  Bool_t                    fLastOutput; // Output recorded after the last Response() call.
  AliTrigConnector         *fConnector;  // Connector for the circuit output
  TBits                     fInputs;
   
  ClassDef(AliTrigDigitalCircuit,1)  // Base class for digital circuits
};
#endif
 AliTrigDigitalCircuit.h:1
 AliTrigDigitalCircuit.h:2
 AliTrigDigitalCircuit.h:3
 AliTrigDigitalCircuit.h:4
 AliTrigDigitalCircuit.h:5
 AliTrigDigitalCircuit.h:6
 AliTrigDigitalCircuit.h:7
 AliTrigDigitalCircuit.h:8
 AliTrigDigitalCircuit.h:9
 AliTrigDigitalCircuit.h:10
 AliTrigDigitalCircuit.h:11
 AliTrigDigitalCircuit.h:12
 AliTrigDigitalCircuit.h:13
 AliTrigDigitalCircuit.h:14
 AliTrigDigitalCircuit.h:15
 AliTrigDigitalCircuit.h:16
 AliTrigDigitalCircuit.h:17
 AliTrigDigitalCircuit.h:18
 AliTrigDigitalCircuit.h:19
 AliTrigDigitalCircuit.h:20
 AliTrigDigitalCircuit.h:21
 AliTrigDigitalCircuit.h:22
 AliTrigDigitalCircuit.h:23
 AliTrigDigitalCircuit.h:24
 AliTrigDigitalCircuit.h:25
 AliTrigDigitalCircuit.h:26
 AliTrigDigitalCircuit.h:27
 AliTrigDigitalCircuit.h:28
 AliTrigDigitalCircuit.h:29
 AliTrigDigitalCircuit.h:30
 AliTrigDigitalCircuit.h:31
 AliTrigDigitalCircuit.h:32
 AliTrigDigitalCircuit.h:33
 AliTrigDigitalCircuit.h:34
 AliTrigDigitalCircuit.h:35
 AliTrigDigitalCircuit.h:36
 AliTrigDigitalCircuit.h:37
 AliTrigDigitalCircuit.h:38
 AliTrigDigitalCircuit.h:39
 AliTrigDigitalCircuit.h:40
 AliTrigDigitalCircuit.h:41
 AliTrigDigitalCircuit.h:42
 AliTrigDigitalCircuit.h:43
 AliTrigDigitalCircuit.h:44
 AliTrigDigitalCircuit.h:45
 AliTrigDigitalCircuit.h:46
 AliTrigDigitalCircuit.h:47
 AliTrigDigitalCircuit.h:48
 AliTrigDigitalCircuit.h:49
 AliTrigDigitalCircuit.h:50
 AliTrigDigitalCircuit.h:51
 AliTrigDigitalCircuit.h:52
 AliTrigDigitalCircuit.h:53
 AliTrigDigitalCircuit.h:54
 AliTrigDigitalCircuit.h:55