ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

// Author: Andrei Gheata, 28/07/2009

//==============================================================================
//   AliTrigModule - Base class for trigger devices handling generic events. 
//      A module has arbitrary number of inputs and outputs. Derived classes must 
//      implement CreateDevice() and Trigger() metods.
//==============================================================================

#include "AliTrigModule.h"

#include "TObjArray.h"
#include "AliTrigConnector.h"
#include "AliTrigEvent.h"

ClassImp(AliTrigModule)

//______________________________________________________________________________
AliTrigModule::~AliTrigModule()
{
// Destructor
  if (fInputs) {fInputs->Delete(); delete fInputs;}
  if (fOutputs) {fOutputs->Delete(); delete fOutputs;}
  if (fOutputConnectors) {fOutputConnectors->Delete(); delete fOutputConnectors;}
}  

//______________________________________________________________________________
Bool_t AliTrigModule::Connect(Int_t output, AliTrigDevice *other, Int_t at_input)
{
// Connect to an input of another device.
  if (!fOutputConnectors) fOutputConnectors = new TObjArray(fNoutputs);
  AliTrigConnector *connector = new AliTrigConnector(Form("wire_%s_%d", GetName(), output), (AliTrigDevice*)this, 0);
  connector->Connect(other, at_input);
  fOutputConnectors->AddAt(connector, output);
  return kTRUE;
}

//______________________________________________________________________________
void AliTrigModule::DefineInput(Int_t islot, AliTrigEvent *event)
{
// Define an input slot and provide an event derived from AliTrigEvent.
  if (!fInputs) fInputs = new TObjArray(fNinputs);
  fInputs->AddAt(event, islot);
}   

//______________________________________________________________________________
void AliTrigModule::DefineOutput(Int_t islot, AliTrigEvent *event)
{
// Define an output slot and provide an event derived from AliTrigEvent.
  if (!fOutputs) fOutputs = new TObjArray(fNoutputs);
  fOutputs->AddAt(event, islot);
}   

//______________________________________________________________________________
AliTrigEvent *AliTrigModule::GetInputValue(Int_t input) const
{
// Get current input value for a slot.
  if (!fInputs) return 0;
  return (AliTrigEvent*)fInputs->At(input);
}   

//______________________________________________________________________________
AliTrigEvent *AliTrigModule::GetOutputValue(Int_t output) const
{
// Get current input value for a slot.
  if (!fOutputs) return 0;
  return (AliTrigEvent*)fOutputs->At(output);
}   

//______________________________________________________________________________
Bool_t AliTrigModule::Response(Int_t ioutput)
{
// Response function of the digital circuit. Calling user-defined one.
  Bool_t response = Trigger(ioutput);
  AliTrigConnector *connector = (AliTrigConnector*)fOutputConnectors->At(ioutput);
  if (connector) connector->Transmit(GetOutputValue(ioutput));
  return response;
}   

//______________________________________________________________________________
void AliTrigModule::ResetInputs()
{
// Reset all inputs
}

//______________________________________________________________________________
Bool_t AliTrigModule::SetInputValue(Int_t input, AliTrigEvent *event)
{
// A way to set directly the input value.
  if (!fInputs) return kFALSE;
  AliTrigEvent *input_event = GetInputValue(input);
  if (!input_event) return kFALSE;
  input_event->ImportData(event);
  return kTRUE;
}
 AliTrigModule.cxx:1
 AliTrigModule.cxx:2
 AliTrigModule.cxx:3
 AliTrigModule.cxx:4
 AliTrigModule.cxx:5
 AliTrigModule.cxx:6
 AliTrigModule.cxx:7
 AliTrigModule.cxx:8
 AliTrigModule.cxx:9
 AliTrigModule.cxx:10
 AliTrigModule.cxx:11
 AliTrigModule.cxx:12
 AliTrigModule.cxx:13
 AliTrigModule.cxx:14
 AliTrigModule.cxx:15
 AliTrigModule.cxx:16
 AliTrigModule.cxx:17
 AliTrigModule.cxx:18
 AliTrigModule.cxx:19
 AliTrigModule.cxx:20
 AliTrigModule.cxx:21
 AliTrigModule.cxx:22
 AliTrigModule.cxx:23
 AliTrigModule.cxx:24
 AliTrigModule.cxx:25
 AliTrigModule.cxx:26
 AliTrigModule.cxx:27
 AliTrigModule.cxx:28
 AliTrigModule.cxx:29
 AliTrigModule.cxx:30
 AliTrigModule.cxx:31
 AliTrigModule.cxx:32
 AliTrigModule.cxx:33
 AliTrigModule.cxx:34
 AliTrigModule.cxx:35
 AliTrigModule.cxx:36
 AliTrigModule.cxx:37
 AliTrigModule.cxx:38
 AliTrigModule.cxx:39
 AliTrigModule.cxx:40
 AliTrigModule.cxx:41
 AliTrigModule.cxx:42
 AliTrigModule.cxx:43
 AliTrigModule.cxx:44
 AliTrigModule.cxx:45
 AliTrigModule.cxx:46
 AliTrigModule.cxx:47
 AliTrigModule.cxx:48
 AliTrigModule.cxx:49
 AliTrigModule.cxx:50
 AliTrigModule.cxx:51
 AliTrigModule.cxx:52
 AliTrigModule.cxx:53
 AliTrigModule.cxx:54
 AliTrigModule.cxx:55
 AliTrigModule.cxx:56
 AliTrigModule.cxx:57
 AliTrigModule.cxx:58
 AliTrigModule.cxx:59
 AliTrigModule.cxx:60
 AliTrigModule.cxx:61
 AliTrigModule.cxx:62
 AliTrigModule.cxx:63
 AliTrigModule.cxx:64
 AliTrigModule.cxx:65
 AliTrigModule.cxx:66
 AliTrigModule.cxx:67
 AliTrigModule.cxx:68
 AliTrigModule.cxx:69
 AliTrigModule.cxx:70
 AliTrigModule.cxx:71
 AliTrigModule.cxx:72
 AliTrigModule.cxx:73
 AliTrigModule.cxx:74
 AliTrigModule.cxx:75
 AliTrigModule.cxx:76
 AliTrigModule.cxx:77
 AliTrigModule.cxx:78
 AliTrigModule.cxx:79
 AliTrigModule.cxx:80
 AliTrigModule.cxx:81
 AliTrigModule.cxx:82
 AliTrigModule.cxx:83
 AliTrigModule.cxx:84
 AliTrigModule.cxx:85
 AliTrigModule.cxx:86
 AliTrigModule.cxx:87
 AliTrigModule.cxx:88
 AliTrigModule.cxx:89
 AliTrigModule.cxx:90
 AliTrigModule.cxx:91
 AliTrigModule.cxx:92
 AliTrigModule.cxx:93
 AliTrigModule.cxx:94
 AliTrigModule.cxx:95
 AliTrigModule.cxx:96
 AliTrigModule.cxx:97
 AliTrigModule.cxx:98
 AliTrigModule.cxx:99
 AliTrigModule.cxx:100
 AliTrigModule.cxx:101
 AliTrigModule.cxx:102
 AliTrigModule.cxx:103
 AliTrigModule.cxx:104
 AliTrigModule.cxx:105
 AliTrigModule.cxx:106
 AliTrigModule.cxx:107
 AliTrigModule.cxx:108
 AliTrigModule.cxx:109