#include <Riostream.h>
#include <TObjArray.h>
#include <TObjString.h>
#include "AliLog.h"
#include "AliTriggerDescriptor.h"
#include "AliTriggerInput.h"
#include "AliTriggerInteraction.h"
using std::endl;
using std::cout;
ClassImp(AliTriggerDescriptor)
AliTriggerDescriptor::AliTriggerDescriptor():
TNamed()
{
}
AliTriggerDescriptor::AliTriggerDescriptor( TString & name, TString &cond ):
TNamed( name, cond )
{
}
AliTriggerDescriptor::~AliTriggerDescriptor()
{
}
AliTriggerDescriptor::AliTriggerDescriptor( const AliTriggerDescriptor& desc ):
TNamed( desc )
{
}
AliTriggerDescriptor& AliTriggerDescriptor::operator=(const AliTriggerDescriptor& desc)
{
if (this != &desc) {
TNamed::operator=(desc);
}
return *this;
}
Bool_t AliTriggerDescriptor::CheckInputsAndFunctions(const TObjArray &inputs, const TObjArray &functions) const
{
TString condition( GetTitle() );
TObjArray* tokens = condition.Tokenize(" !&|()\t");
Bool_t IsInput = kFALSE;
Int_t ntokens = tokens->GetEntriesFast();
for( Int_t i=0; i<ntokens; i++ ) {
TObjString* iname = (TObjString*)tokens->At( i );
if (functions.FindObject(iname->String())) {
if (IsInput) {
AliError("Logical functions can not follow inputs, they are always declared first !");
delete tokens;
return kFALSE;
}
IsInput = kFALSE;
continue;
}
if (inputs.FindObject(iname->String())) {
IsInput = kTRUE;
continue;
}
AliError(Form("Invalid trigger input or function (%s)",iname->String().Data()));
delete tokens;
return kFALSE;
}
delete tokens;
return kTRUE;
}
Bool_t AliTriggerDescriptor::IsActive(const TObjArray &inputs, const TObjArray &functions) const
{
TString condition( GetTitle() );
TObjArray* tokens = condition.Tokenize(" !&|()\t");
Int_t ntokens = tokens->GetEntriesFast();
for( Int_t i=0; i<ntokens; i++ ) {
TObjString* iname = (TObjString*)tokens->At( i );
AliTriggerInteraction *interact = (AliTriggerInteraction *)functions.FindObject(iname->String());
if (interact) {
if (!interact->IsActive(inputs)) {
AliWarning(Form("The descriptor (%s) will be disabled, because the function (%s) is disabled",
GetName(),iname->String().Data()));
delete tokens;
return kFALSE;
}
continue;
}
AliTriggerInput *inp = (AliTriggerInput *)inputs.FindObject(iname->String());
if (inp) {
if (!inp->IsActive()) {
AliWarning(Form("The descriptor (%s) will be disabled, because the input (%s) is disabled",
GetName(),iname->String().Data()));
delete tokens;
return kFALSE;
}
continue;
}
AliError(Form("Desciptor (%s) contains invalid trigger input or function (%s)",
GetName(),iname->String().Data()));
delete tokens;
return kFALSE;
}
delete tokens;
return kTRUE;
}
Bool_t AliTriggerDescriptor::Trigger( const TObjArray &inputs, const TObjArray &functions) const
{
TString condition( GetTitle() );
TObjArray* tokens = condition.Tokenize(" !&|()\t");
Int_t ntokens = tokens->GetEntriesFast();
for( Int_t i=0; i<ntokens; i++ ) {
TObjString* iname = (TObjString*)tokens->At( i );
AliTriggerInteraction *interact = (AliTriggerInteraction *)functions.FindObject(iname->String());
if (interact) {
if (!interact->Trigger(inputs)) {
delete tokens;
return kFALSE;
}
continue;
}
AliTriggerInput *inp = (AliTriggerInput *)inputs.FindObject(iname->String());
if (inp) {
if (!inp->Status()) {
delete tokens;
return kFALSE;
}
continue;
}
AliError(Form("Desciptor (%s) contains invalid trigger input or function (%s)",
GetName(),iname->String().Data()));
delete tokens;
return kFALSE;
}
delete tokens;
return kTRUE;
}
void AliTriggerDescriptor::Print( const Option_t* ) const
{
cout << "Trigger Descriptor:" << endl;
cout << " Name: " << GetName() << endl;
cout << " Logic: " << GetTitle() << endl;
}
AliTriggerDescriptor.cxx:1 AliTriggerDescriptor.cxx:2 AliTriggerDescriptor.cxx:3 AliTriggerDescriptor.cxx:4 AliTriggerDescriptor.cxx:5 AliTriggerDescriptor.cxx:6 AliTriggerDescriptor.cxx:7 AliTriggerDescriptor.cxx:8 AliTriggerDescriptor.cxx:9 AliTriggerDescriptor.cxx:10 AliTriggerDescriptor.cxx:11 AliTriggerDescriptor.cxx:12 AliTriggerDescriptor.cxx:13 AliTriggerDescriptor.cxx:14 AliTriggerDescriptor.cxx:15 AliTriggerDescriptor.cxx:16 AliTriggerDescriptor.cxx:17 AliTriggerDescriptor.cxx:18 AliTriggerDescriptor.cxx:19 AliTriggerDescriptor.cxx:20 AliTriggerDescriptor.cxx:21 AliTriggerDescriptor.cxx:22 AliTriggerDescriptor.cxx:23 AliTriggerDescriptor.cxx:24 AliTriggerDescriptor.cxx:25 AliTriggerDescriptor.cxx:26 AliTriggerDescriptor.cxx:27 AliTriggerDescriptor.cxx:28 AliTriggerDescriptor.cxx:29 AliTriggerDescriptor.cxx:30 AliTriggerDescriptor.cxx:31 AliTriggerDescriptor.cxx:32 AliTriggerDescriptor.cxx:33 AliTriggerDescriptor.cxx:34 AliTriggerDescriptor.cxx:35 AliTriggerDescriptor.cxx:36 AliTriggerDescriptor.cxx:37 AliTriggerDescriptor.cxx:38 AliTriggerDescriptor.cxx:39 AliTriggerDescriptor.cxx:40 AliTriggerDescriptor.cxx:41 AliTriggerDescriptor.cxx:42 AliTriggerDescriptor.cxx:43 AliTriggerDescriptor.cxx:44 AliTriggerDescriptor.cxx:45 AliTriggerDescriptor.cxx:46 AliTriggerDescriptor.cxx:47 AliTriggerDescriptor.cxx:48 AliTriggerDescriptor.cxx:49 AliTriggerDescriptor.cxx:50 AliTriggerDescriptor.cxx:51 AliTriggerDescriptor.cxx:52 AliTriggerDescriptor.cxx:53 AliTriggerDescriptor.cxx:54 AliTriggerDescriptor.cxx:55 AliTriggerDescriptor.cxx:56 AliTriggerDescriptor.cxx:57 AliTriggerDescriptor.cxx:58 AliTriggerDescriptor.cxx:59 AliTriggerDescriptor.cxx:60 AliTriggerDescriptor.cxx:61 AliTriggerDescriptor.cxx:62 AliTriggerDescriptor.cxx:63 AliTriggerDescriptor.cxx:64 AliTriggerDescriptor.cxx:65 AliTriggerDescriptor.cxx:66 AliTriggerDescriptor.cxx:67 AliTriggerDescriptor.cxx:68 AliTriggerDescriptor.cxx:69 AliTriggerDescriptor.cxx:70 AliTriggerDescriptor.cxx:71 AliTriggerDescriptor.cxx:72 AliTriggerDescriptor.cxx:73 AliTriggerDescriptor.cxx:74 AliTriggerDescriptor.cxx:75 AliTriggerDescriptor.cxx:76 AliTriggerDescriptor.cxx:77 AliTriggerDescriptor.cxx:78 AliTriggerDescriptor.cxx:79 AliTriggerDescriptor.cxx:80 AliTriggerDescriptor.cxx:81 AliTriggerDescriptor.cxx:82 AliTriggerDescriptor.cxx:83 AliTriggerDescriptor.cxx:84 AliTriggerDescriptor.cxx:85 AliTriggerDescriptor.cxx:86 AliTriggerDescriptor.cxx:87 AliTriggerDescriptor.cxx:88 AliTriggerDescriptor.cxx:89 AliTriggerDescriptor.cxx:90 AliTriggerDescriptor.cxx:91 AliTriggerDescriptor.cxx:92 AliTriggerDescriptor.cxx:93 AliTriggerDescriptor.cxx:94 AliTriggerDescriptor.cxx:95 AliTriggerDescriptor.cxx:96 AliTriggerDescriptor.cxx:97 AliTriggerDescriptor.cxx:98 AliTriggerDescriptor.cxx:99 AliTriggerDescriptor.cxx:100 AliTriggerDescriptor.cxx:101 AliTriggerDescriptor.cxx:102 AliTriggerDescriptor.cxx:103 AliTriggerDescriptor.cxx:104 AliTriggerDescriptor.cxx:105 AliTriggerDescriptor.cxx:106 AliTriggerDescriptor.cxx:107 AliTriggerDescriptor.cxx:108 AliTriggerDescriptor.cxx:109 AliTriggerDescriptor.cxx:110 AliTriggerDescriptor.cxx:111 AliTriggerDescriptor.cxx:112 AliTriggerDescriptor.cxx:113 AliTriggerDescriptor.cxx:114 AliTriggerDescriptor.cxx:115 AliTriggerDescriptor.cxx:116 AliTriggerDescriptor.cxx:117 AliTriggerDescriptor.cxx:118 AliTriggerDescriptor.cxx:119 AliTriggerDescriptor.cxx:120 AliTriggerDescriptor.cxx:121 AliTriggerDescriptor.cxx:122 AliTriggerDescriptor.cxx:123 AliTriggerDescriptor.cxx:124 AliTriggerDescriptor.cxx:125 AliTriggerDescriptor.cxx:126 AliTriggerDescriptor.cxx:127 AliTriggerDescriptor.cxx:128 AliTriggerDescriptor.cxx:129 AliTriggerDescriptor.cxx:130 AliTriggerDescriptor.cxx:131 AliTriggerDescriptor.cxx:132 AliTriggerDescriptor.cxx:133 AliTriggerDescriptor.cxx:134 AliTriggerDescriptor.cxx:135 AliTriggerDescriptor.cxx:136 AliTriggerDescriptor.cxx:137 AliTriggerDescriptor.cxx:138 AliTriggerDescriptor.cxx:139 AliTriggerDescriptor.cxx:140 AliTriggerDescriptor.cxx:141 AliTriggerDescriptor.cxx:142 AliTriggerDescriptor.cxx:143 AliTriggerDescriptor.cxx:144 AliTriggerDescriptor.cxx:145 AliTriggerDescriptor.cxx:146 AliTriggerDescriptor.cxx:147 AliTriggerDescriptor.cxx:148 AliTriggerDescriptor.cxx:149 AliTriggerDescriptor.cxx:150 AliTriggerDescriptor.cxx:151 AliTriggerDescriptor.cxx:152 AliTriggerDescriptor.cxx:153 AliTriggerDescriptor.cxx:154 AliTriggerDescriptor.cxx:155 AliTriggerDescriptor.cxx:156 AliTriggerDescriptor.cxx:157 AliTriggerDescriptor.cxx:158 AliTriggerDescriptor.cxx:159 AliTriggerDescriptor.cxx:160 AliTriggerDescriptor.cxx:161 AliTriggerDescriptor.cxx:162 AliTriggerDescriptor.cxx:163 AliTriggerDescriptor.cxx:164 AliTriggerDescriptor.cxx:165 AliTriggerDescriptor.cxx:166 AliTriggerDescriptor.cxx:167 AliTriggerDescriptor.cxx:168 AliTriggerDescriptor.cxx:169 AliTriggerDescriptor.cxx:170 AliTriggerDescriptor.cxx:171 AliTriggerDescriptor.cxx:172 AliTriggerDescriptor.cxx:173 AliTriggerDescriptor.cxx:174 AliTriggerDescriptor.cxx:175 AliTriggerDescriptor.cxx:176 AliTriggerDescriptor.cxx:177 AliTriggerDescriptor.cxx:178 AliTriggerDescriptor.cxx:179 AliTriggerDescriptor.cxx:180 AliTriggerDescriptor.cxx:181 AliTriggerDescriptor.cxx:182 AliTriggerDescriptor.cxx:183 AliTriggerDescriptor.cxx:184 AliTriggerDescriptor.cxx:185 AliTriggerDescriptor.cxx:186 AliTriggerDescriptor.cxx:187 AliTriggerDescriptor.cxx:188 AliTriggerDescriptor.cxx:189 AliTriggerDescriptor.cxx:190 AliTriggerDescriptor.cxx:191 AliTriggerDescriptor.cxx:192 AliTriggerDescriptor.cxx:193 AliTriggerDescriptor.cxx:194 AliTriggerDescriptor.cxx:195 AliTriggerDescriptor.cxx:196 AliTriggerDescriptor.cxx:197 AliTriggerDescriptor.cxx:198 AliTriggerDescriptor.cxx:199 AliTriggerDescriptor.cxx:200 AliTriggerDescriptor.cxx:201 AliTriggerDescriptor.cxx:202