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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// This class for running the Central Trigger Processor                      //
//                                                                           //
//                                                                           //
//    Load Configuration                                                     //
//    Make a list the trigger detectors involved (from the classes)          //
//    For the each event                                                     //
//           Run the Trigger for the each detector                           //
//           Get the inputs                                                  //
//           Check the trigger classes                                       //
//           Create the class mask                                           //
//           Save result                                                     //
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>
#include <TStopwatch.h>
#include <TFile.h>
#include <TTree.h>

#include "AliLog.h"
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliLoader.h"
#include "AliModule.h"

#include "AliTriggerInput.h"
#include "AliTriggerDetector.h"
#include "AliTriggerConfiguration.h"
#include "AliTriggerClass.h"
#include "AliTriggerCluster.h"
#include "AliCentralTrigger.h"
#include "AliDetectorEventHeader.h"
#include "AliHeader.h"

#include "AliCDBManager.h"
#include "AliCDBPath.h"
#include "AliCDBEntry.h"

using std::endl;
using std::cout;
using std::hex;
using std::dec;
ClassImp( AliCentralTrigger )

//_____________________________________________________________________________
AliCentralTrigger::AliCentralTrigger() :
   TObject(),
   fClassMask(0),
   fClassMaskNext50(0),
   fClusterMask(0),
   fL0TriggerInputs(0),
   fL1TriggerInputs(0),
   fL2TriggerInputs(0),
   fConfiguration(NULL)
{
   // Default constructor
  SetOwner();
}

//_____________________________________________________________________________
AliCentralTrigger::AliCentralTrigger( TString & config ) :
   TObject(),
   fClassMask(0),
   fClassMaskNext50(0),
   fClusterMask(0),
   fL0TriggerInputs(0),
   fL1TriggerInputs(0),
   fL2TriggerInputs(0),
   fConfiguration(NULL)
{
   // Default constructor
   LoadConfiguration( config );
}

//_____________________________________________________________________________
AliCentralTrigger::~AliCentralTrigger()
{
  // Destructor
  DeleteConfiguration();
}

//_____________________________________________________________________________
void AliCentralTrigger::DeleteConfiguration()
{
  // Delete the active configuration
  fClassMask = 0;
  fClassMaskNext50 = 0;
  fClusterMask = 0;
  fL0TriggerInputs = 0;
  fL1TriggerInputs = 0;
  fL2TriggerInputs = 0;
  if (fConfiguration) {
    if (IsOwner()) delete fConfiguration;
    fConfiguration = 0x0;
  }
}

//_____________________________________________________________________________
void AliCentralTrigger::Reset()
{
   // Reset Class Mask and classes
   fClassMask = 0;
   fClassMaskNext50 = 0;
   fClusterMask = 0;
   fL0TriggerInputs = 0;
   fL1TriggerInputs = 0;
   fL2TriggerInputs = 0;

   if (fConfiguration) {
     const TObjArray& classesArray = fConfiguration->GetClasses();
     Int_t nclasses = classesArray.GetEntriesFast();
     for( Int_t j=0; j<nclasses; j++ ) {
       AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At( j );
       trclass->Reset();
     }
   }
}
//_____________________________________________________________________________
void AliCentralTrigger::MakeBranch( TString name, TTree * tree )
{
   // Make a branch to store only trigger class mask event by event
   // Run2 payload

   if( tree )  {
      AliDebug( 1, "Got Tree from folder." );
      TBranch* branch = tree->GetBranch( name );
      if( branch == 0x0 ) {
         //branch = tree->Branch( name, &(this->fClassMask), "fClassMask/l:fClusterMask/i:fL0TriggerInputs/i:fL1TriggerInputs/i:fL2TriggerInputs/s" );
         AliDebug( 1, "Creating new branch" );
         branch = tree->Branch( name, &(this->fClassMask), "fClassMask/l:fClassMaskNext50/l:fClusterMask/i:fL0TriggerInputs/i:fL1TriggerInputs/i:fL2TriggerInputs/s" );
         branch->SetAutoDelete( kFALSE );
      }
      else {
         AliDebug( 1, "Got Branch from Tree" );
         branch->SetAddress( &(this->fClassMask) );
      }
   }
}
//_____________________________________________________________________________
Bool_t AliCentralTrigger::LoadConfiguration( TString & config )
{
   // Load one and only one pre-created COnfiguration from database/file that match
   // with the input string 'config'
   // Ej: "p-p", "Pb-Pb" or "p-p-DIMUON CALIBRATION-CENTRAL-BARREL"

   // Delete the active configuration, if any
  DeleteConfiguration();

   // Load the selected configuration
  if (!config.IsNull() && !config.EqualTo("ocdb",TString::kIgnoreCase)) {
     fConfiguration = AliTriggerConfiguration::LoadConfiguration( config );
     SetOwner();
     if(fConfiguration)
       return kTRUE;
     else {
       AliError( Form( "Valid TriggerConfiguration (%s) is not found ! Disabling the trigger simulation !", config.Data() ) );
       return kFALSE;
     }
   }
   else {
     // Load one and only one trigger descriptor from CDB
     AliInfo( "Getting trigger configuration from OCDB!" );
 
     AliCDBPath path( "GRP", "CTP", "Config" );
	
     AliCDBEntry *entry=AliCDBManager::Instance()->Get(path.GetPath());
     SetOwner(kFALSE);
     if( !entry ) AliFatal( "Couldn't load trigger description data from CDB!" );

     fConfiguration = (AliTriggerConfiguration *)entry->GetObject();
     if(fConfiguration)
       return kTRUE;
     else {
       AliError( "No valid configuration is found in the CDB ! Disabling the trigger simulation !" );
       return kFALSE;
     }
   }
}

//_____________________________________________________________________________
TString AliCentralTrigger::GetDetectors()
{
   // return TString with the detectors (modules) to be used for triggering

   TString result;

   if (fConfiguration)
     result = fConfiguration->GetTriggeringModules();

   return result;
}

//_____________________________________________________________________________
Bool_t AliCentralTrigger::RunTrigger( AliRunLoader* runLoader, const char *detectors )
{
   // run the trigger

   if( !fConfiguration ) {
      AliError( "No trigger configuration loaded, skipping trigger" );
      return kFALSE;
   }

   TTree *tree = runLoader->TreeCT();
   if( !tree ) {
      AliError( "No folder with trigger loaded, skipping trigger" );
      return kFALSE;
   }

   TStopwatch stopwatch;
   stopwatch.Start();

   AliInfo( Form(" Triggering Detectors: %s \n", GetDetectors().Data() ) );
   AliInfo( Form(" Detectors with digits: %s \n", detectors ) );

   // Process each event
   for( Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++ ) {
      runLoader->GetEvent( iEvent );
      // Get detectors involve
      TString detStr = GetDetectors();
      TString detWithDigits = detectors;
      TObjArray* detArray = runLoader->GetAliRun()->Detectors();
      // Reset Mask
      fClassMask = 0;
      fClassMaskNext50 = 0;
      fClusterMask = 0;
      // Reset configuration object (inputs and classes)
      fConfiguration->Reset();
      TObjArray trgdetArray; // use as garbage collector
      for( Int_t iDet = 0; iDet < detArray->GetEntriesFast(); iDet++ ) {
         AliModule* det = (AliModule*) detArray->At( iDet );
         if( !det || !det->IsActive() ) continue;
         if( IsSelected(det->GetName(), detStr) &&
	     IsSelected(det->GetName(), detWithDigits) ) {

	    AliDebug(1,Form("Triggering from digits for %s", det->GetName() ) );
            AliTriggerDetector* trgdet = det->CreateTriggerDetector();
            trgdet->AssignInputs(fConfiguration->GetInputs());
            TStopwatch stopwatchDet;
            stopwatchDet.Start();
            trgdet->Trigger();
            AliDebug(1, Form("Execution time for %s: R:%.2fs C:%.2fs",
                     det->GetName(), stopwatchDet.RealTime(), stopwatchDet.CpuTime() ) );

            trgdetArray.AddLast( trgdet );

            // Write trigger detector in Event folder in Digits file
            TString loadername = det->GetName();
            loadername.Append( "Loader" );
            AliLoader * loader = runLoader->GetLoader( loadername );
            if( loader ) {
               AliDataLoader * dataLoader = loader->GetDigitsDataLoader();
               if( !dataLoader->IsFileOpen() ) {
                  if( dataLoader->OpenFile( "UPDATE" ) ) {
                     AliWarning( Form( "\n\nCan't write trigger for %s\n", det->GetName() ) );
                  }
               }
               dataLoader->Cd();
               if( gFile && !gFile->IsWritable() ) {
                  gFile->ReOpen( "UPDATE" );
                  dataLoader->Cd();
               }
               trgdet->Write( "Trigger", TObject::kOverwrite );
               dataLoader->CloseFile();
            }
            else  AliWarning( Form( "Not loader found for %s", det->GetName() ) );
         }
      }

      // Check trigger conditions and create the trigger class mask
      TriggerClasses();
      // Calculate trigger Input pattern
      TriggerInputs();

      // Clear trigger detectors
      trgdetArray.SetOwner();
      trgdetArray.Delete();

      if( (detStr.CompareTo( "ALL" ) != 0) && !detStr.IsNull() ) {
         AliError( Form("the following detectors were not found: %s",
                   detStr.Data()));
         //JF return kFALSE;
      }

      // Save trigger mask
      tree->Fill();
      AliDebug(1, Form("Event:%d  Class Mask:0x%llX 0x%llX", iEvent,fClassMask,fClassMaskNext50 ) );
   } // end event loop

   Reset();
//   cout << endl <<  " Print " << endl;
//   Print();

   // Write
   runLoader->WriteTrigger( "OVERWRITE" );

   return kTRUE;
}
//----------------------------------------------------------------------------
void AliCentralTrigger::TriggerInputs()
{
 // Find which inputs are in configuration
 // and calculate input pattern
 fL0TriggerInputs=0;
 fL1TriggerInputs=0;
 fL2TriggerInputs=0;
 if(fConfiguration){
    const TObjArray& inputsArray = fConfiguration->GetInputs();
    Int_t ninputs = inputsArray.GetEntriesFast();
    for( Int_t j=0; j<ninputs; j++ ) {
      AliTriggerInput* input = (AliTriggerInput*)inputsArray.At( j );
      if(input->GetValue()){
       UChar_t level=input->GetLevel();
            if(level == 0) fL0TriggerInputs |= (input->GetMask());
       else if(level == 1) fL1TriggerInputs |= (input->GetMask());
       else if(level == 2) fL2TriggerInputs |= (input->GetMask());
       else{
         AliError(Form("Unknown input level:%c:",level));
       }
      }
    }
 }
}
//_____________________________________________________________________________
ULong64_t  AliCentralTrigger::TriggerClasses()
{
  // Check trigger conditions and create the trigger class
  // and trigger cluster masks
  // Updated to 100 classes
  // It seems nobody uses return value
  fClassMask = 0;
  fClassMaskNext50 = 0;
  fClusterMask = 0;
  if (fConfiguration) {
    const TObjArray& classesArray = fConfiguration->GetClasses();
    Int_t nclasses = classesArray.GetEntriesFast();
    for( Int_t j=0; j<nclasses; j++ ) {
      AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At( j );
      trclass->Trigger( fConfiguration->GetInputs(), fConfiguration->GetFunctions() );
      fClassMask |= trclass->GetValue();
      fClassMaskNext50 |= trclass->GetValueNext50();
      if (trclass->GetStatus()) {
	AliTriggerCluster *trclust = trclass->GetCluster();
	fClusterMask |= AliDAQ::DetectorPattern(trclust->GetDetectorsInCluster());
      }
    }
  }
  return 0;
}
//_____________________________________________________________________________
TObjArray* AliCentralTrigger::GetFiredClasses() const
{
   // return only the true conditions

   TObjArray* result = new TObjArray();

   if (fConfiguration) {
     const TObjArray& classesArray = fConfiguration->GetClasses();
     Int_t nclasses = classesArray.GetEntriesFast();
     for( Int_t j=0; j<nclasses; j++ ) {
       AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At( j );
       if( trclass->GetStatus() ) result->AddLast( trclass );
     }
   }

   return result;
}

//_____________________________________________________________________________
void AliCentralTrigger::Print( const Option_t*  ) const
{
   // Print
   cout << "Central Trigger: " << endl;
   cout << "  Trigger Class Mask: 1..50 0x" << hex << fClassMask << " 51-100 0x"<< fClassMaskNext50 << dec << endl;
   if (fConfiguration) fConfiguration->Print();
   cout << endl;
}


//////////////////////////////////////////////////////////////////////////////
// Helper method

//_____________________________________________________________________________
Bool_t AliCentralTrigger::IsSelected( TString detName, TString& detectors ) const
{
   // check whether detName is contained in detectors
   // if yes, it is removed from detectors

   // check if all detectors are selected
   if( (detectors.CompareTo("ALL") == 0 ) ||
        detectors.BeginsWith("ALL ") ||
        detectors.EndsWith(" ALL") ||
        detectors.Contains(" ALL ") ) {
      detectors = "ALL";
      return kTRUE;
   }

   // search for the given detector
   Bool_t result = kFALSE;
   if( (detectors.CompareTo( detName ) == 0) ||
        detectors.BeginsWith( detName+" " ) ||
        detectors.EndsWith( " "+detName ) ||
        detectors.Contains( " "+detName+" " ) ) {
      detectors.ReplaceAll( detName, "" );
      result = kTRUE;
   }

   // clean up the detectors string
   while( detectors.Contains("  ") )  detectors.ReplaceAll( "  ", " " );
   while( detectors.BeginsWith(" ") ) detectors.Remove( 0, 1 );
   while( detectors.EndsWith(" ") )   detectors.Remove( detectors.Length()-1, 1 );

   return result;
}

//_____________________________________________________________________________
Bool_t AliCentralTrigger::CheckTriggeredDetectors() const
{
  // Check the trigger mask, finds which trigger classes
  // have been fired, load the corresponding trigger clusters and
  // finally makes a list of the detectors that have been readout
  // for each particular event. This list is then compared to the
  // one stored in fClusterMask. Return value:
  // true = two lists are equal
  // false = two lists are not equal meaning wrong trigger config
  // is loaded.

  if (!fConfiguration) {
    AliError("The trigger confiration has not yet been loaded! Cross-check is not possible!");
    return kFALSE;
  }
  else {

    // Make a cross-check so that to exclude wrong trigger configuration used
    // Loop over the trigger classes
    UInt_t clusterMask = 0;
    const TObjArray& classesArray = fConfiguration->GetClasses();
    Int_t nclasses = classesArray.GetEntriesFast();
    for( Int_t j=0; j<nclasses; j++ ) {
      AliTriggerClass* trclass = (AliTriggerClass*)classesArray.At( j );
      if (trclass->GetMask() & fClassMask) { // class was fired
	AliTriggerCluster *trclust = trclass->GetCluster();
	clusterMask |= AliDAQ::DetectorPattern(trclust->GetDetectorsInCluster());
      }
      if (trclass->GetMaskNext50() & fClassMaskNext50) { // class was fired
	AliTriggerCluster *trclust = trclass->GetCluster();
	clusterMask |= AliDAQ::DetectorPattern(trclust->GetDetectorsInCluster());
      }
    }
    // Compare the stored cluster mask with the one
    // that we get from trigger classes
    if (clusterMask != fClusterMask) {
      if ((clusterMask & fClusterMask) == clusterMask) {
	AliInfo(Form("Cluster mask from trigger classes (%x) and from data (%x) differ. Concurrent DAQ run(s) could be the reason.",
		     (UInt_t)clusterMask,(UInt_t)fClusterMask));
	return kTRUE;
      }
      else {
	AliError(Form("Wrong cluster mask from trigger classes (%x), expecting (%x)! Loaded trigger configuration is possibly wrong!",
		      (UInt_t)clusterMask,(UInt_t)fClusterMask));
	return kFALSE;
      }
    }
  }

  return kTRUE;
}
 AliCentralTrigger.cxx:1
 AliCentralTrigger.cxx:2
 AliCentralTrigger.cxx:3
 AliCentralTrigger.cxx:4
 AliCentralTrigger.cxx:5
 AliCentralTrigger.cxx:6
 AliCentralTrigger.cxx:7
 AliCentralTrigger.cxx:8
 AliCentralTrigger.cxx:9
 AliCentralTrigger.cxx:10
 AliCentralTrigger.cxx:11
 AliCentralTrigger.cxx:12
 AliCentralTrigger.cxx:13
 AliCentralTrigger.cxx:14
 AliCentralTrigger.cxx:15
 AliCentralTrigger.cxx:16
 AliCentralTrigger.cxx:17
 AliCentralTrigger.cxx:18
 AliCentralTrigger.cxx:19
 AliCentralTrigger.cxx:20
 AliCentralTrigger.cxx:21
 AliCentralTrigger.cxx:22
 AliCentralTrigger.cxx:23
 AliCentralTrigger.cxx:24
 AliCentralTrigger.cxx:25
 AliCentralTrigger.cxx:26
 AliCentralTrigger.cxx:27
 AliCentralTrigger.cxx:28
 AliCentralTrigger.cxx:29
 AliCentralTrigger.cxx:30
 AliCentralTrigger.cxx:31
 AliCentralTrigger.cxx:32
 AliCentralTrigger.cxx:33
 AliCentralTrigger.cxx:34
 AliCentralTrigger.cxx:35
 AliCentralTrigger.cxx:36
 AliCentralTrigger.cxx:37
 AliCentralTrigger.cxx:38
 AliCentralTrigger.cxx:39
 AliCentralTrigger.cxx:40
 AliCentralTrigger.cxx:41
 AliCentralTrigger.cxx:42
 AliCentralTrigger.cxx:43
 AliCentralTrigger.cxx:44
 AliCentralTrigger.cxx:45
 AliCentralTrigger.cxx:46
 AliCentralTrigger.cxx:47
 AliCentralTrigger.cxx:48
 AliCentralTrigger.cxx:49
 AliCentralTrigger.cxx:50
 AliCentralTrigger.cxx:51
 AliCentralTrigger.cxx:52
 AliCentralTrigger.cxx:53
 AliCentralTrigger.cxx:54
 AliCentralTrigger.cxx:55
 AliCentralTrigger.cxx:56
 AliCentralTrigger.cxx:57
 AliCentralTrigger.cxx:58
 AliCentralTrigger.cxx:59
 AliCentralTrigger.cxx:60
 AliCentralTrigger.cxx:61
 AliCentralTrigger.cxx:62
 AliCentralTrigger.cxx:63
 AliCentralTrigger.cxx:64
 AliCentralTrigger.cxx:65
 AliCentralTrigger.cxx:66
 AliCentralTrigger.cxx:67
 AliCentralTrigger.cxx:68
 AliCentralTrigger.cxx:69
 AliCentralTrigger.cxx:70
 AliCentralTrigger.cxx:71
 AliCentralTrigger.cxx:72
 AliCentralTrigger.cxx:73
 AliCentralTrigger.cxx:74
 AliCentralTrigger.cxx:75
 AliCentralTrigger.cxx:76
 AliCentralTrigger.cxx:77
 AliCentralTrigger.cxx:78
 AliCentralTrigger.cxx:79
 AliCentralTrigger.cxx:80
 AliCentralTrigger.cxx:81
 AliCentralTrigger.cxx:82
 AliCentralTrigger.cxx:83
 AliCentralTrigger.cxx:84
 AliCentralTrigger.cxx:85
 AliCentralTrigger.cxx:86
 AliCentralTrigger.cxx:87
 AliCentralTrigger.cxx:88
 AliCentralTrigger.cxx:89
 AliCentralTrigger.cxx:90
 AliCentralTrigger.cxx:91
 AliCentralTrigger.cxx:92
 AliCentralTrigger.cxx:93
 AliCentralTrigger.cxx:94
 AliCentralTrigger.cxx:95
 AliCentralTrigger.cxx:96
 AliCentralTrigger.cxx:97
 AliCentralTrigger.cxx:98
 AliCentralTrigger.cxx:99
 AliCentralTrigger.cxx:100
 AliCentralTrigger.cxx:101
 AliCentralTrigger.cxx:102
 AliCentralTrigger.cxx:103
 AliCentralTrigger.cxx:104
 AliCentralTrigger.cxx:105
 AliCentralTrigger.cxx:106
 AliCentralTrigger.cxx:107
 AliCentralTrigger.cxx:108
 AliCentralTrigger.cxx:109
 AliCentralTrigger.cxx:110
 AliCentralTrigger.cxx:111
 AliCentralTrigger.cxx:112
 AliCentralTrigger.cxx:113
 AliCentralTrigger.cxx:114
 AliCentralTrigger.cxx:115
 AliCentralTrigger.cxx:116
 AliCentralTrigger.cxx:117
 AliCentralTrigger.cxx:118
 AliCentralTrigger.cxx:119
 AliCentralTrigger.cxx:120
 AliCentralTrigger.cxx:121
 AliCentralTrigger.cxx:122
 AliCentralTrigger.cxx:123
 AliCentralTrigger.cxx:124
 AliCentralTrigger.cxx:125
 AliCentralTrigger.cxx:126
 AliCentralTrigger.cxx:127
 AliCentralTrigger.cxx:128
 AliCentralTrigger.cxx:129
 AliCentralTrigger.cxx:130
 AliCentralTrigger.cxx:131
 AliCentralTrigger.cxx:132
 AliCentralTrigger.cxx:133
 AliCentralTrigger.cxx:134
 AliCentralTrigger.cxx:135
 AliCentralTrigger.cxx:136
 AliCentralTrigger.cxx:137
 AliCentralTrigger.cxx:138
 AliCentralTrigger.cxx:139
 AliCentralTrigger.cxx:140
 AliCentralTrigger.cxx:141
 AliCentralTrigger.cxx:142
 AliCentralTrigger.cxx:143
 AliCentralTrigger.cxx:144
 AliCentralTrigger.cxx:145
 AliCentralTrigger.cxx:146
 AliCentralTrigger.cxx:147
 AliCentralTrigger.cxx:148
 AliCentralTrigger.cxx:149
 AliCentralTrigger.cxx:150
 AliCentralTrigger.cxx:151
 AliCentralTrigger.cxx:152
 AliCentralTrigger.cxx:153
 AliCentralTrigger.cxx:154
 AliCentralTrigger.cxx:155
 AliCentralTrigger.cxx:156
 AliCentralTrigger.cxx:157
 AliCentralTrigger.cxx:158
 AliCentralTrigger.cxx:159
 AliCentralTrigger.cxx:160
 AliCentralTrigger.cxx:161
 AliCentralTrigger.cxx:162
 AliCentralTrigger.cxx:163
 AliCentralTrigger.cxx:164
 AliCentralTrigger.cxx:165
 AliCentralTrigger.cxx:166
 AliCentralTrigger.cxx:167
 AliCentralTrigger.cxx:168
 AliCentralTrigger.cxx:169
 AliCentralTrigger.cxx:170
 AliCentralTrigger.cxx:171
 AliCentralTrigger.cxx:172
 AliCentralTrigger.cxx:173
 AliCentralTrigger.cxx:174
 AliCentralTrigger.cxx:175
 AliCentralTrigger.cxx:176
 AliCentralTrigger.cxx:177
 AliCentralTrigger.cxx:178
 AliCentralTrigger.cxx:179
 AliCentralTrigger.cxx:180
 AliCentralTrigger.cxx:181
 AliCentralTrigger.cxx:182
 AliCentralTrigger.cxx:183
 AliCentralTrigger.cxx:184
 AliCentralTrigger.cxx:185
 AliCentralTrigger.cxx:186
 AliCentralTrigger.cxx:187
 AliCentralTrigger.cxx:188
 AliCentralTrigger.cxx:189
 AliCentralTrigger.cxx:190
 AliCentralTrigger.cxx:191
 AliCentralTrigger.cxx:192
 AliCentralTrigger.cxx:193
 AliCentralTrigger.cxx:194
 AliCentralTrigger.cxx:195
 AliCentralTrigger.cxx:196
 AliCentralTrigger.cxx:197
 AliCentralTrigger.cxx:198
 AliCentralTrigger.cxx:199
 AliCentralTrigger.cxx:200
 AliCentralTrigger.cxx:201
 AliCentralTrigger.cxx:202
 AliCentralTrigger.cxx:203
 AliCentralTrigger.cxx:204
 AliCentralTrigger.cxx:205
 AliCentralTrigger.cxx:206
 AliCentralTrigger.cxx:207
 AliCentralTrigger.cxx:208
 AliCentralTrigger.cxx:209
 AliCentralTrigger.cxx:210
 AliCentralTrigger.cxx:211
 AliCentralTrigger.cxx:212
 AliCentralTrigger.cxx:213
 AliCentralTrigger.cxx:214
 AliCentralTrigger.cxx:215
 AliCentralTrigger.cxx:216
 AliCentralTrigger.cxx:217
 AliCentralTrigger.cxx:218
 AliCentralTrigger.cxx:219
 AliCentralTrigger.cxx:220
 AliCentralTrigger.cxx:221
 AliCentralTrigger.cxx:222
 AliCentralTrigger.cxx:223
 AliCentralTrigger.cxx:224
 AliCentralTrigger.cxx:225
 AliCentralTrigger.cxx:226
 AliCentralTrigger.cxx:227
 AliCentralTrigger.cxx:228
 AliCentralTrigger.cxx:229
 AliCentralTrigger.cxx:230
 AliCentralTrigger.cxx:231
 AliCentralTrigger.cxx:232
 AliCentralTrigger.cxx:233
 AliCentralTrigger.cxx:234
 AliCentralTrigger.cxx:235
 AliCentralTrigger.cxx:236
 AliCentralTrigger.cxx:237
 AliCentralTrigger.cxx:238
 AliCentralTrigger.cxx:239
 AliCentralTrigger.cxx:240
 AliCentralTrigger.cxx:241
 AliCentralTrigger.cxx:242
 AliCentralTrigger.cxx:243
 AliCentralTrigger.cxx:244
 AliCentralTrigger.cxx:245
 AliCentralTrigger.cxx:246
 AliCentralTrigger.cxx:247
 AliCentralTrigger.cxx:248
 AliCentralTrigger.cxx:249
 AliCentralTrigger.cxx:250
 AliCentralTrigger.cxx:251
 AliCentralTrigger.cxx:252
 AliCentralTrigger.cxx:253
 AliCentralTrigger.cxx:254
 AliCentralTrigger.cxx:255
 AliCentralTrigger.cxx:256
 AliCentralTrigger.cxx:257
 AliCentralTrigger.cxx:258
 AliCentralTrigger.cxx:259
 AliCentralTrigger.cxx:260
 AliCentralTrigger.cxx:261
 AliCentralTrigger.cxx:262
 AliCentralTrigger.cxx:263
 AliCentralTrigger.cxx:264
 AliCentralTrigger.cxx:265
 AliCentralTrigger.cxx:266
 AliCentralTrigger.cxx:267
 AliCentralTrigger.cxx:268
 AliCentralTrigger.cxx:269
 AliCentralTrigger.cxx:270
 AliCentralTrigger.cxx:271
 AliCentralTrigger.cxx:272
 AliCentralTrigger.cxx:273
 AliCentralTrigger.cxx:274
 AliCentralTrigger.cxx:275
 AliCentralTrigger.cxx:276
 AliCentralTrigger.cxx:277
 AliCentralTrigger.cxx:278
 AliCentralTrigger.cxx:279
 AliCentralTrigger.cxx:280
 AliCentralTrigger.cxx:281
 AliCentralTrigger.cxx:282
 AliCentralTrigger.cxx:283
 AliCentralTrigger.cxx:284
 AliCentralTrigger.cxx:285
 AliCentralTrigger.cxx:286
 AliCentralTrigger.cxx:287
 AliCentralTrigger.cxx:288
 AliCentralTrigger.cxx:289
 AliCentralTrigger.cxx:290
 AliCentralTrigger.cxx:291
 AliCentralTrigger.cxx:292
 AliCentralTrigger.cxx:293
 AliCentralTrigger.cxx:294
 AliCentralTrigger.cxx:295
 AliCentralTrigger.cxx:296
 AliCentralTrigger.cxx:297
 AliCentralTrigger.cxx:298
 AliCentralTrigger.cxx:299
 AliCentralTrigger.cxx:300
 AliCentralTrigger.cxx:301
 AliCentralTrigger.cxx:302
 AliCentralTrigger.cxx:303
 AliCentralTrigger.cxx:304
 AliCentralTrigger.cxx:305
 AliCentralTrigger.cxx:306
 AliCentralTrigger.cxx:307
 AliCentralTrigger.cxx:308
 AliCentralTrigger.cxx:309
 AliCentralTrigger.cxx:310
 AliCentralTrigger.cxx:311
 AliCentralTrigger.cxx:312
 AliCentralTrigger.cxx:313
 AliCentralTrigger.cxx:314
 AliCentralTrigger.cxx:315
 AliCentralTrigger.cxx:316
 AliCentralTrigger.cxx:317
 AliCentralTrigger.cxx:318
 AliCentralTrigger.cxx:319
 AliCentralTrigger.cxx:320
 AliCentralTrigger.cxx:321
 AliCentralTrigger.cxx:322
 AliCentralTrigger.cxx:323
 AliCentralTrigger.cxx:324
 AliCentralTrigger.cxx:325
 AliCentralTrigger.cxx:326
 AliCentralTrigger.cxx:327
 AliCentralTrigger.cxx:328
 AliCentralTrigger.cxx:329
 AliCentralTrigger.cxx:330
 AliCentralTrigger.cxx:331
 AliCentralTrigger.cxx:332
 AliCentralTrigger.cxx:333
 AliCentralTrigger.cxx:334
 AliCentralTrigger.cxx:335
 AliCentralTrigger.cxx:336
 AliCentralTrigger.cxx:337
 AliCentralTrigger.cxx:338
 AliCentralTrigger.cxx:339
 AliCentralTrigger.cxx:340
 AliCentralTrigger.cxx:341
 AliCentralTrigger.cxx:342
 AliCentralTrigger.cxx:343
 AliCentralTrigger.cxx:344
 AliCentralTrigger.cxx:345
 AliCentralTrigger.cxx:346
 AliCentralTrigger.cxx:347
 AliCentralTrigger.cxx:348
 AliCentralTrigger.cxx:349
 AliCentralTrigger.cxx:350
 AliCentralTrigger.cxx:351
 AliCentralTrigger.cxx:352
 AliCentralTrigger.cxx:353
 AliCentralTrigger.cxx:354
 AliCentralTrigger.cxx:355
 AliCentralTrigger.cxx:356
 AliCentralTrigger.cxx:357
 AliCentralTrigger.cxx:358
 AliCentralTrigger.cxx:359
 AliCentralTrigger.cxx:360
 AliCentralTrigger.cxx:361
 AliCentralTrigger.cxx:362
 AliCentralTrigger.cxx:363
 AliCentralTrigger.cxx:364
 AliCentralTrigger.cxx:365
 AliCentralTrigger.cxx:366
 AliCentralTrigger.cxx:367
 AliCentralTrigger.cxx:368
 AliCentralTrigger.cxx:369
 AliCentralTrigger.cxx:370
 AliCentralTrigger.cxx:371
 AliCentralTrigger.cxx:372
 AliCentralTrigger.cxx:373
 AliCentralTrigger.cxx:374
 AliCentralTrigger.cxx:375
 AliCentralTrigger.cxx:376
 AliCentralTrigger.cxx:377
 AliCentralTrigger.cxx:378
 AliCentralTrigger.cxx:379
 AliCentralTrigger.cxx:380
 AliCentralTrigger.cxx:381
 AliCentralTrigger.cxx:382
 AliCentralTrigger.cxx:383
 AliCentralTrigger.cxx:384
 AliCentralTrigger.cxx:385
 AliCentralTrigger.cxx:386
 AliCentralTrigger.cxx:387
 AliCentralTrigger.cxx:388
 AliCentralTrigger.cxx:389
 AliCentralTrigger.cxx:390
 AliCentralTrigger.cxx:391
 AliCentralTrigger.cxx:392
 AliCentralTrigger.cxx:393
 AliCentralTrigger.cxx:394
 AliCentralTrigger.cxx:395
 AliCentralTrigger.cxx:396
 AliCentralTrigger.cxx:397
 AliCentralTrigger.cxx:398
 AliCentralTrigger.cxx:399
 AliCentralTrigger.cxx:400
 AliCentralTrigger.cxx:401
 AliCentralTrigger.cxx:402
 AliCentralTrigger.cxx:403
 AliCentralTrigger.cxx:404
 AliCentralTrigger.cxx:405
 AliCentralTrigger.cxx:406
 AliCentralTrigger.cxx:407
 AliCentralTrigger.cxx:408
 AliCentralTrigger.cxx:409
 AliCentralTrigger.cxx:410
 AliCentralTrigger.cxx:411
 AliCentralTrigger.cxx:412
 AliCentralTrigger.cxx:413
 AliCentralTrigger.cxx:414
 AliCentralTrigger.cxx:415
 AliCentralTrigger.cxx:416
 AliCentralTrigger.cxx:417
 AliCentralTrigger.cxx:418
 AliCentralTrigger.cxx:419
 AliCentralTrigger.cxx:420
 AliCentralTrigger.cxx:421
 AliCentralTrigger.cxx:422
 AliCentralTrigger.cxx:423
 AliCentralTrigger.cxx:424
 AliCentralTrigger.cxx:425
 AliCentralTrigger.cxx:426
 AliCentralTrigger.cxx:427
 AliCentralTrigger.cxx:428
 AliCentralTrigger.cxx:429
 AliCentralTrigger.cxx:430
 AliCentralTrigger.cxx:431
 AliCentralTrigger.cxx:432
 AliCentralTrigger.cxx:433
 AliCentralTrigger.cxx:434
 AliCentralTrigger.cxx:435
 AliCentralTrigger.cxx:436
 AliCentralTrigger.cxx:437
 AliCentralTrigger.cxx:438
 AliCentralTrigger.cxx:439
 AliCentralTrigger.cxx:440
 AliCentralTrigger.cxx:441
 AliCentralTrigger.cxx:442
 AliCentralTrigger.cxx:443
 AliCentralTrigger.cxx:444
 AliCentralTrigger.cxx:445
 AliCentralTrigger.cxx:446
 AliCentralTrigger.cxx:447
 AliCentralTrigger.cxx:448
 AliCentralTrigger.cxx:449
 AliCentralTrigger.cxx:450
 AliCentralTrigger.cxx:451
 AliCentralTrigger.cxx:452
 AliCentralTrigger.cxx:453
 AliCentralTrigger.cxx:454
 AliCentralTrigger.cxx:455
 AliCentralTrigger.cxx:456
 AliCentralTrigger.cxx:457
 AliCentralTrigger.cxx:458
 AliCentralTrigger.cxx:459
 AliCentralTrigger.cxx:460
 AliCentralTrigger.cxx:461
 AliCentralTrigger.cxx:462
 AliCentralTrigger.cxx:463
 AliCentralTrigger.cxx:464
 AliCentralTrigger.cxx:465
 AliCentralTrigger.cxx:466
 AliCentralTrigger.cxx:467
 AliCentralTrigger.cxx:468
 AliCentralTrigger.cxx:469
 AliCentralTrigger.cxx:470
 AliCentralTrigger.cxx:471
 AliCentralTrigger.cxx:472
 AliCentralTrigger.cxx:473
 AliCentralTrigger.cxx:474
 AliCentralTrigger.cxx:475
 AliCentralTrigger.cxx:476
 AliCentralTrigger.cxx:477
 AliCentralTrigger.cxx:478
 AliCentralTrigger.cxx:479
 AliCentralTrigger.cxx:480
 AliCentralTrigger.cxx:481
 AliCentralTrigger.cxx:482
 AliCentralTrigger.cxx:483
 AliCentralTrigger.cxx:484
 AliCentralTrigger.cxx:485
 AliCentralTrigger.cxx:486
 AliCentralTrigger.cxx:487
 AliCentralTrigger.cxx:488