1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////////
18 // This class which defines the trigger descriptor objects
21 ///////////////////////////////////////////////////////////////////////////////
23 #include <Riostream.h>
24 #include <TObjArray.h>
25 #include <TObjString.h>
28 #include "AliTriggerDescriptor.h"
29 #include "AliTriggerInput.h"
30 #include "AliTriggerInteraction.h"
34 ClassImp(AliTriggerDescriptor)
36 //_____________________________________________________________________________
37 AliTriggerDescriptor::AliTriggerDescriptor():
40 // Default constructor
43 //_____________________________________________________________________________
44 AliTriggerDescriptor::AliTriggerDescriptor( TString & name, TString &cond ):
49 //_____________________________________________________________________________
50 AliTriggerDescriptor::~AliTriggerDescriptor()
54 //_____________________________________________________________________________
55 AliTriggerDescriptor::AliTriggerDescriptor( const AliTriggerDescriptor& desc ):
61 //______________________________________________________________________________
62 AliTriggerDescriptor& AliTriggerDescriptor::operator=(const AliTriggerDescriptor& desc)
64 // AliTriggerDescriptor assignment operator.
67 TNamed::operator=(desc);
72 //_____________________________________________________________________________
73 Bool_t AliTriggerDescriptor::CheckInputsAndFunctions(const TObjArray &inputs, const TObjArray &functions) const
75 // Check the existance of trigger inputs and functions
76 // and the logic used.
77 // Return false in case of wrong interaction
80 TString condition( GetTitle() );
81 TObjArray* tokens = condition.Tokenize(" !&|()\t");
83 Bool_t IsInput = kFALSE;
85 Int_t ntokens = tokens->GetEntriesFast();
86 for( Int_t i=0; i<ntokens; i++ ) {
87 TObjString* iname = (TObjString*)tokens->At( i );
88 if (functions.FindObject(iname->String())) {
89 // Logical function of the first 4 inputs
91 AliError("Logical functions can not follow inputs, they are always declared first !");
98 if (inputs.FindObject(iname->String())) {
99 // already a trigger input
103 AliError(Form("Invalid trigger input or function (%s)",iname->String().Data()));
112 //_____________________________________________________________________________
113 Bool_t AliTriggerDescriptor::IsActive(const TObjArray &inputs, const TObjArray &functions) const
115 // Check if the trigger inputs and functions
117 // Return false in case one or more inputs
119 TString condition( GetTitle() );
120 TObjArray* tokens = condition.Tokenize(" !&|()\t");
122 Int_t ntokens = tokens->GetEntriesFast();
123 for( Int_t i=0; i<ntokens; i++ ) {
124 TObjString* iname = (TObjString*)tokens->At( i );
125 AliTriggerInteraction *interact = (AliTriggerInteraction *)functions.FindObject(iname->String());
127 if (!interact->IsActive(inputs)) {
128 AliWarning(Form("The descriptor (%s) will be disabled, because the function (%s) is disabled",
129 GetName(),iname->String().Data()));
135 AliTriggerInput *inp = (AliTriggerInput *)inputs.FindObject(iname->String());
137 if (!inp->IsActive()) {
138 AliWarning(Form("The descriptor (%s) will be disabled, because the input (%s) is disabled",
139 GetName(),iname->String().Data()));
145 AliError(Form("Desciptor (%s) contains invalid trigger input or function (%s)",
146 GetName(),iname->String().Data()));
156 //_____________________________________________________________________________
157 Bool_t AliTriggerDescriptor::Trigger( const TObjArray &inputs, const TObjArray &functions) const
159 // Check if the inputs and functions
160 // satify the descriptor conditions
162 TString condition( GetTitle() );
163 TObjArray* tokens = condition.Tokenize(" !&|()\t");
165 Int_t ntokens = tokens->GetEntriesFast();
166 for( Int_t i=0; i<ntokens; i++ ) {
167 TObjString* iname = (TObjString*)tokens->At( i );
168 AliTriggerInteraction *interact = (AliTriggerInteraction *)functions.FindObject(iname->String());
170 if (!interact->Trigger(inputs)) {
176 AliTriggerInput *inp = (AliTriggerInput *)inputs.FindObject(iname->String());
178 if (!inp->Status()) {
184 AliError(Form("Desciptor (%s) contains invalid trigger input or function (%s)",
185 GetName(),iname->String().Data()));
195 //_____________________________________________________________________________
196 void AliTriggerDescriptor::Print( const Option_t* ) const
199 cout << "Trigger Descriptor:" << endl;
200 cout << " Name: " << GetName() << endl;
201 cout << " Logic: " << GetTitle() << endl;