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.                  *
 **************************************************************************/

///////////////////////////////////////////////////////////////////////////////
//
// This class which defines the trigger interaction objects
//
//
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <TObjArray.h>
#include <TObjString.h>

#include "AliTriggerInteraction.h"
#include "AliTriggerInput.h"
#include "AliExpression.h"
#include "AliLog.h"

using std::endl;
using std::cout;
ClassImp(AliTriggerInteraction)

//_____________________________________________________________________________
AliTriggerInteraction::AliTriggerInteraction():
  TNamed()
{
  // Default constructor
}

//_____________________________________________________________________________
AliTriggerInteraction::AliTriggerInteraction( TString & name, TString &logic ):
  TNamed( name, logic )
{
  // Constructor
}
//_____________________________________________________________________________
AliTriggerInteraction::~AliTriggerInteraction() 
{ 
  // Destructor
}
//_____________________________________________________________________________
AliTriggerInteraction::AliTriggerInteraction( const AliTriggerInteraction& interact ):
  TNamed( interact )
{
   // Copy constructor
}

//______________________________________________________________________________
AliTriggerInteraction& AliTriggerInteraction::operator=(const AliTriggerInteraction& interact)
{
   // AliTriggerInteraction assignment operator.

   if (this != &interact) {
      TNamed::operator=(interact);
   }
   return *this;
}

//_____________________________________________________________________________
Bool_t AliTriggerInteraction::CheckInputs(const TObjArray &inputs) const
{
  // Check the existance of trigger inputs
  // and the logic used.
  // Return false in case of wrong interaction
  // definition.

  TString logic( GetTitle() );
  TObjArray* tokens = logic.Tokenize(" !&|()\t");

  Int_t ntokens = tokens->GetEntriesFast();
  for( Int_t i=0; i<ntokens; i++ ) {
    TObjString* iname = (TObjString*)tokens->At( i );

    AliTriggerInput *inp = (AliTriggerInput*)inputs.FindObject(iname->String().Data());
    if (!inp) {
      AliError( Form( "The trigger input (%s) is not available for Interaction (%s)",
		      iname->String().Data(), GetName() ) );
      delete tokens;
      return kFALSE;
    }
    if (inp->GetMask() == 0 || inp->GetMask() > (1<<24)) { // New l0f can use all inputs
      AliError( Form( "The trigger input (%s) is not among the first 4 trigger inputs used to create interactions. Interaction (%s) is invalid",
		      iname->String().Data(), GetName() ) ); 
      delete tokens;
      return kFALSE;
    }
  }

  delete tokens;
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliTriggerInteraction::IsActive(const TObjArray &inputs) const
{
  // Check if the trigger inputs
  // are active
  // Return false in one or more inputs
  // are disabled

  TString logic( GetTitle() );
  TObjArray* tokens = logic.Tokenize(" !&|()\t");

  Int_t ntokens = tokens->GetEntriesFast();
  for( Int_t i=0; i<ntokens; i++ ) {
    TObjString* iname = (TObjString*)tokens->At( i );

    AliTriggerInput *inp = (AliTriggerInput *)inputs.FindObject(iname->String());
    if (!inp) {
      AliError( Form( "The trigger input (%s) is not available for Interaction (%s)",
		      iname->String().Data(), GetName() ) );
      delete tokens;
      return kFALSE;
    }
    else {
      if (!inp->IsActive()) {
	AliWarning(Form("The interaction/function (%s) will be disabled, because the input (%s) is disabled",
			GetName(),iname->String().Data()));
	delete tokens;
	return kFALSE;
      }
    }
  }

  delete tokens;
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t AliTriggerInteraction::Trigger(const TObjArray& inputs ) const
{
  // Check if the inputs satify the interaction expression condition 
  AliExpression* exp = new AliExpression( GetTitle() );
  Bool_t status = exp->Value( inputs );
  delete exp;
  return status;
}

//_____________________________________________________________________________
void AliTriggerInteraction::Print( const Option_t* ) const
{
   // Print
  cout << "Trigger Interaction:" << endl;
  cout << "  Name:              " << GetName() << endl;
  cout << "  Logic:             " << GetTitle() << endl;
}
 AliTriggerInteraction.cxx:1
 AliTriggerInteraction.cxx:2
 AliTriggerInteraction.cxx:3
 AliTriggerInteraction.cxx:4
 AliTriggerInteraction.cxx:5
 AliTriggerInteraction.cxx:6
 AliTriggerInteraction.cxx:7
 AliTriggerInteraction.cxx:8
 AliTriggerInteraction.cxx:9
 AliTriggerInteraction.cxx:10
 AliTriggerInteraction.cxx:11
 AliTriggerInteraction.cxx:12
 AliTriggerInteraction.cxx:13
 AliTriggerInteraction.cxx:14
 AliTriggerInteraction.cxx:15
 AliTriggerInteraction.cxx:16
 AliTriggerInteraction.cxx:17
 AliTriggerInteraction.cxx:18
 AliTriggerInteraction.cxx:19
 AliTriggerInteraction.cxx:20
 AliTriggerInteraction.cxx:21
 AliTriggerInteraction.cxx:22
 AliTriggerInteraction.cxx:23
 AliTriggerInteraction.cxx:24
 AliTriggerInteraction.cxx:25
 AliTriggerInteraction.cxx:26
 AliTriggerInteraction.cxx:27
 AliTriggerInteraction.cxx:28
 AliTriggerInteraction.cxx:29
 AliTriggerInteraction.cxx:30
 AliTriggerInteraction.cxx:31
 AliTriggerInteraction.cxx:32
 AliTriggerInteraction.cxx:33
 AliTriggerInteraction.cxx:34
 AliTriggerInteraction.cxx:35
 AliTriggerInteraction.cxx:36
 AliTriggerInteraction.cxx:37
 AliTriggerInteraction.cxx:38
 AliTriggerInteraction.cxx:39
 AliTriggerInteraction.cxx:40
 AliTriggerInteraction.cxx:41
 AliTriggerInteraction.cxx:42
 AliTriggerInteraction.cxx:43
 AliTriggerInteraction.cxx:44
 AliTriggerInteraction.cxx:45
 AliTriggerInteraction.cxx:46
 AliTriggerInteraction.cxx:47
 AliTriggerInteraction.cxx:48
 AliTriggerInteraction.cxx:49
 AliTriggerInteraction.cxx:50
 AliTriggerInteraction.cxx:51
 AliTriggerInteraction.cxx:52
 AliTriggerInteraction.cxx:53
 AliTriggerInteraction.cxx:54
 AliTriggerInteraction.cxx:55
 AliTriggerInteraction.cxx:56
 AliTriggerInteraction.cxx:57
 AliTriggerInteraction.cxx:58
 AliTriggerInteraction.cxx:59
 AliTriggerInteraction.cxx:60
 AliTriggerInteraction.cxx:61
 AliTriggerInteraction.cxx:62
 AliTriggerInteraction.cxx:63
 AliTriggerInteraction.cxx:64
 AliTriggerInteraction.cxx:65
 AliTriggerInteraction.cxx:66
 AliTriggerInteraction.cxx:67
 AliTriggerInteraction.cxx:68
 AliTriggerInteraction.cxx:69
 AliTriggerInteraction.cxx:70
 AliTriggerInteraction.cxx:71
 AliTriggerInteraction.cxx:72
 AliTriggerInteraction.cxx:73
 AliTriggerInteraction.cxx:74
 AliTriggerInteraction.cxx:75
 AliTriggerInteraction.cxx:76
 AliTriggerInteraction.cxx:77
 AliTriggerInteraction.cxx:78
 AliTriggerInteraction.cxx:79
 AliTriggerInteraction.cxx:80
 AliTriggerInteraction.cxx:81
 AliTriggerInteraction.cxx:82
 AliTriggerInteraction.cxx:83
 AliTriggerInteraction.cxx:84
 AliTriggerInteraction.cxx:85
 AliTriggerInteraction.cxx:86
 AliTriggerInteraction.cxx:87
 AliTriggerInteraction.cxx:88
 AliTriggerInteraction.cxx:89
 AliTriggerInteraction.cxx:90
 AliTriggerInteraction.cxx:91
 AliTriggerInteraction.cxx:92
 AliTriggerInteraction.cxx:93
 AliTriggerInteraction.cxx:94
 AliTriggerInteraction.cxx:95
 AliTriggerInteraction.cxx:96
 AliTriggerInteraction.cxx:97
 AliTriggerInteraction.cxx:98
 AliTriggerInteraction.cxx:99
 AliTriggerInteraction.cxx:100
 AliTriggerInteraction.cxx:101
 AliTriggerInteraction.cxx:102
 AliTriggerInteraction.cxx:103
 AliTriggerInteraction.cxx:104
 AliTriggerInteraction.cxx:105
 AliTriggerInteraction.cxx:106
 AliTriggerInteraction.cxx:107
 AliTriggerInteraction.cxx:108
 AliTriggerInteraction.cxx:109
 AliTriggerInteraction.cxx:110
 AliTriggerInteraction.cxx:111
 AliTriggerInteraction.cxx:112
 AliTriggerInteraction.cxx:113
 AliTriggerInteraction.cxx:114
 AliTriggerInteraction.cxx:115
 AliTriggerInteraction.cxx:116
 AliTriggerInteraction.cxx:117
 AliTriggerInteraction.cxx:118
 AliTriggerInteraction.cxx:119
 AliTriggerInteraction.cxx:120
 AliTriggerInteraction.cxx:121
 AliTriggerInteraction.cxx:122
 AliTriggerInteraction.cxx:123
 AliTriggerInteraction.cxx:124
 AliTriggerInteraction.cxx:125
 AliTriggerInteraction.cxx:126
 AliTriggerInteraction.cxx:127
 AliTriggerInteraction.cxx:128
 AliTriggerInteraction.cxx:129
 AliTriggerInteraction.cxx:130
 AliTriggerInteraction.cxx:131
 AliTriggerInteraction.cxx:132
 AliTriggerInteraction.cxx:133
 AliTriggerInteraction.cxx:134
 AliTriggerInteraction.cxx:135
 AliTriggerInteraction.cxx:136
 AliTriggerInteraction.cxx:137
 AliTriggerInteraction.cxx:138
 AliTriggerInteraction.cxx:139
 AliTriggerInteraction.cxx:140
 AliTriggerInteraction.cxx:141
 AliTriggerInteraction.cxx:142
 AliTriggerInteraction.cxx:143
 AliTriggerInteraction.cxx:144
 AliTriggerInteraction.cxx:145
 AliTriggerInteraction.cxx:146
 AliTriggerInteraction.cxx:147
 AliTriggerInteraction.cxx:148
 AliTriggerInteraction.cxx:149
 AliTriggerInteraction.cxx:150
 AliTriggerInteraction.cxx:151
 AliTriggerInteraction.cxx:152
 AliTriggerInteraction.cxx:153
 AliTriggerInteraction.cxx:154
 AliTriggerInteraction.cxx:155
 AliTriggerInteraction.cxx:156
 AliTriggerInteraction.cxx:157
 AliTriggerInteraction.cxx:158
 AliTriggerInteraction.cxx:159