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

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//
//  Class to define a Trigger Past Future Protection
//
//                              name      description         INT1  INT2
//    Ej:
//  AliTriggerPFProtection sc( "BARREL", "BARREL DET Pb-Pb",  "SC","PE" );
//  sc.SetINTa("PE");  // Peripheral
//  sc.SetINTb("SC");  // Semicentral
//  sc.SetINT("PE");
//  sc.SetNa1( 5 );
//  sc.SetNa2( 5 );
//  sc.SetTa( 88 );
//  sc.SetNb1( 1 );
//  sc.SetNb2( 0 );
//  sc.SetTb( 88 );
//
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>

#include <TObject.h>
#include <TString.h>
#include <TObjString.h>

#include "AliLog.h"
#include "AliTriggerPFProtection.h"

using std::endl;
using std::cout;
using std::hex;
using std::dec;
ClassImp( AliTriggerPFProtection )
//_____________________________________________________________________________
AliTriggerPFProtection::AliTriggerPFProtection() :
TNamed(), 
fINTa(), fINTb(),fINT(),
fNa1(0),fNa2(0),fTa(0),
fNb1(0),fNb2(0),fTb(0) 
{
for(Int_t i=0;i<12;i++)fPFdef[i]=0;
}
AliTriggerPFProtection::AliTriggerPFProtection( TString & name) :
TNamed(name, name), 
fINTa(), fINTb(),fINT(),
fNa1(0),fNa2(0),fTa(0),
fNb1(0),fNb2(0),fTb(0)
{
for(Int_t i=0;i<12;i++)fPFdef[i]=0;
}
AliTriggerPFProtection::AliTriggerPFProtection( TString & name,TString & inta, TString & intb, TString & interaction ) :
TNamed(name, name), 
fINTa(inta), fINTb(intb),fINT(interaction),
fNa1(0),fNa2(0),fTa(0),
fNb1(0),fNb2(0),fTb(0)
{
for(Int_t i=0;i<12;i++)fPFdef[i]=0;
}
AliTriggerPFProtection::AliTriggerPFProtection(TString& name,UInt_t* pfdef)
:TNamed(name,name),
fINTa(), fINTb(),fINT(),
fNa1(0),fNa2(0),fTa(0),
fNb1(0),fNb2(0),fTb(0)
{
for(Int_t i=0;i<12;i++)fPFdef[i]=pfdef[i];
}
//_____________________________________________________________________________
void AliTriggerPFProtection::Print( const Option_t* ) const
{
   // Print
  cout << "Trigger Past-Future Protection: " << endl;
  cout << "  Name:                          " << GetName() << endl;
  cout << "  Interaction_a:                 " << fINTa.Data() << endl;
  cout << "  Interaction_b:                 " << fINTb.Data() << endl;
  cout << "  Interaction:                   " << fINT.Data() << endl;
  cout << "  Na1: " << fNa1 << " Na2: " << fNa2 << " Ta: " << fTa << endl;
  cout << "  Nb1: " << fNb1 << " Nb2: " << fNb2 << " Tb: " << fTb << endl;
  cout << "PFdef: " << hex;
  for(Int_t i=0;i<12;i++)cout << " 0x" << fPFdef[i];
  cout << dec << endl;
}

//_____________________________________________________________________________
Bool_t AliTriggerPFProtection::CheckInteractions(TObjArray &interactions) const
{
  // Check if the interactions are valid
  {
    TString logic( GetINTa() );
    TObjArray* tokens = logic.Tokenize(" !&|()\t");

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

      if (!interactions.FindObject(iname->String().Data())) {
	AliError( Form( "The trigger interaction (%s) is not available for past-future protection (%s)",
			iname->String().Data(), GetName() ) );
	delete tokens;
	return kFALSE;
      }
    }
    delete tokens;
  }
  {
    TString logic( GetINTb() );
    TObjArray* tokens = logic.Tokenize(" !&|()\t");

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

      if (!interactions.FindObject(iname->String().Data())) {
	AliError( Form( "The trigger interaction (%s) is not available for past-future protection (%s)",
			iname->String().Data(), GetName() ) );
	delete tokens;
	return kFALSE;
      }
    }
    delete tokens;
  }
  {
    TString logic( GetINT() );
    TObjArray* tokens = logic.Tokenize(" !&|()\t");

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

      if (!interactions.FindObject(iname->String().Data())) {
	AliError( Form( "The trigger interaction (%s) is not available for past-future protection (%s)",
			iname->String().Data(), GetName() ) );
	delete tokens;
	return kFALSE;
      }
    }
    delete tokens;
  }
  return kTRUE;
}
 AliTriggerPFProtection.cxx:1
 AliTriggerPFProtection.cxx:2
 AliTriggerPFProtection.cxx:3
 AliTriggerPFProtection.cxx:4
 AliTriggerPFProtection.cxx:5
 AliTriggerPFProtection.cxx:6
 AliTriggerPFProtection.cxx:7
 AliTriggerPFProtection.cxx:8
 AliTriggerPFProtection.cxx:9
 AliTriggerPFProtection.cxx:10
 AliTriggerPFProtection.cxx:11
 AliTriggerPFProtection.cxx:12
 AliTriggerPFProtection.cxx:13
 AliTriggerPFProtection.cxx:14
 AliTriggerPFProtection.cxx:15
 AliTriggerPFProtection.cxx:16
 AliTriggerPFProtection.cxx:17
 AliTriggerPFProtection.cxx:18
 AliTriggerPFProtection.cxx:19
 AliTriggerPFProtection.cxx:20
 AliTriggerPFProtection.cxx:21
 AliTriggerPFProtection.cxx:22
 AliTriggerPFProtection.cxx:23
 AliTriggerPFProtection.cxx:24
 AliTriggerPFProtection.cxx:25
 AliTriggerPFProtection.cxx:26
 AliTriggerPFProtection.cxx:27
 AliTriggerPFProtection.cxx:28
 AliTriggerPFProtection.cxx:29
 AliTriggerPFProtection.cxx:30
 AliTriggerPFProtection.cxx:31
 AliTriggerPFProtection.cxx:32
 AliTriggerPFProtection.cxx:33
 AliTriggerPFProtection.cxx:34
 AliTriggerPFProtection.cxx:35
 AliTriggerPFProtection.cxx:36
 AliTriggerPFProtection.cxx:37
 AliTriggerPFProtection.cxx:38
 AliTriggerPFProtection.cxx:39
 AliTriggerPFProtection.cxx:40
 AliTriggerPFProtection.cxx:41
 AliTriggerPFProtection.cxx:42
 AliTriggerPFProtection.cxx:43
 AliTriggerPFProtection.cxx:44
 AliTriggerPFProtection.cxx:45
 AliTriggerPFProtection.cxx:46
 AliTriggerPFProtection.cxx:47
 AliTriggerPFProtection.cxx:48
 AliTriggerPFProtection.cxx:49
 AliTriggerPFProtection.cxx:50
 AliTriggerPFProtection.cxx:51
 AliTriggerPFProtection.cxx:52
 AliTriggerPFProtection.cxx:53
 AliTriggerPFProtection.cxx:54
 AliTriggerPFProtection.cxx:55
 AliTriggerPFProtection.cxx:56
 AliTriggerPFProtection.cxx:57
 AliTriggerPFProtection.cxx:58
 AliTriggerPFProtection.cxx:59
 AliTriggerPFProtection.cxx:60
 AliTriggerPFProtection.cxx:61
 AliTriggerPFProtection.cxx:62
 AliTriggerPFProtection.cxx:63
 AliTriggerPFProtection.cxx:64
 AliTriggerPFProtection.cxx:65
 AliTriggerPFProtection.cxx:66
 AliTriggerPFProtection.cxx:67
 AliTriggerPFProtection.cxx:68
 AliTriggerPFProtection.cxx:69
 AliTriggerPFProtection.cxx:70
 AliTriggerPFProtection.cxx:71
 AliTriggerPFProtection.cxx:72
 AliTriggerPFProtection.cxx:73
 AliTriggerPFProtection.cxx:74
 AliTriggerPFProtection.cxx:75
 AliTriggerPFProtection.cxx:76
 AliTriggerPFProtection.cxx:77
 AliTriggerPFProtection.cxx:78
 AliTriggerPFProtection.cxx:79
 AliTriggerPFProtection.cxx:80
 AliTriggerPFProtection.cxx:81
 AliTriggerPFProtection.cxx:82
 AliTriggerPFProtection.cxx:83
 AliTriggerPFProtection.cxx:84
 AliTriggerPFProtection.cxx:85
 AliTriggerPFProtection.cxx:86
 AliTriggerPFProtection.cxx:87
 AliTriggerPFProtection.cxx:88
 AliTriggerPFProtection.cxx:89
 AliTriggerPFProtection.cxx:90
 AliTriggerPFProtection.cxx:91
 AliTriggerPFProtection.cxx:92
 AliTriggerPFProtection.cxx:93
 AliTriggerPFProtection.cxx:94
 AliTriggerPFProtection.cxx:95
 AliTriggerPFProtection.cxx:96
 AliTriggerPFProtection.cxx:97
 AliTriggerPFProtection.cxx:98
 AliTriggerPFProtection.cxx:99
 AliTriggerPFProtection.cxx:100
 AliTriggerPFProtection.cxx:101
 AliTriggerPFProtection.cxx:102
 AliTriggerPFProtection.cxx:103
 AliTriggerPFProtection.cxx:104
 AliTriggerPFProtection.cxx:105
 AliTriggerPFProtection.cxx:106
 AliTriggerPFProtection.cxx:107
 AliTriggerPFProtection.cxx:108
 AliTriggerPFProtection.cxx:109
 AliTriggerPFProtection.cxx:110
 AliTriggerPFProtection.cxx:111
 AliTriggerPFProtection.cxx:112
 AliTriggerPFProtection.cxx:113
 AliTriggerPFProtection.cxx:114
 AliTriggerPFProtection.cxx:115
 AliTriggerPFProtection.cxx:116
 AliTriggerPFProtection.cxx:117
 AliTriggerPFProtection.cxx:118
 AliTriggerPFProtection.cxx:119
 AliTriggerPFProtection.cxx:120
 AliTriggerPFProtection.cxx:121
 AliTriggerPFProtection.cxx:122
 AliTriggerPFProtection.cxx:123
 AliTriggerPFProtection.cxx:124
 AliTriggerPFProtection.cxx:125
 AliTriggerPFProtection.cxx:126
 AliTriggerPFProtection.cxx:127
 AliTriggerPFProtection.cxx:128
 AliTriggerPFProtection.cxx:129
 AliTriggerPFProtection.cxx:130
 AliTriggerPFProtection.cxx:131
 AliTriggerPFProtection.cxx:132
 AliTriggerPFProtection.cxx:133
 AliTriggerPFProtection.cxx:134
 AliTriggerPFProtection.cxx:135
 AliTriggerPFProtection.cxx:136
 AliTriggerPFProtection.cxx:137
 AliTriggerPFProtection.cxx:138
 AliTriggerPFProtection.cxx:139
 AliTriggerPFProtection.cxx:140
 AliTriggerPFProtection.cxx:141
 AliTriggerPFProtection.cxx:142
 AliTriggerPFProtection.cxx:143
 AliTriggerPFProtection.cxx:144
 AliTriggerPFProtection.cxx:145
 AliTriggerPFProtection.cxx:146
 AliTriggerPFProtection.cxx:147
 AliTriggerPFProtection.cxx:148
 AliTriggerPFProtection.cxx:149
 AliTriggerPFProtection.cxx:150
 AliTriggerPFProtection.cxx:151
 AliTriggerPFProtection.cxx:152
 AliTriggerPFProtection.cxx:153
 AliTriggerPFProtection.cxx:154
 AliTriggerPFProtection.cxx:155
 AliTriggerPFProtection.cxx:156