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 Cluster  
//
//  A Trigger Cluster is a group of detector to be trigger together
//
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>

#include <TObject.h>
#include <TClass.h>
#include <TString.h>
#include <TMath.h>

#include "AliLog.h"
#include "AliDAQ.h"
#include "AliTriggerCluster.h"
#include "AliTriggerInput.h"

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

//_____________________________________________________________________________
AliTriggerCluster::AliTriggerCluster(): 
  TNamed(),
  fClusterMask(0)
{
}

//_____________________________________________________________________________
AliTriggerCluster::AliTriggerCluster( TString & name, UChar_t index, TString & detectors ) :
  TNamed(name,detectors),
  fClusterMask((index <=6) ? 1 << (index-1) : 0)
{
  TString detClus;
  for( Int_t iDet = 0; iDet < AliDAQ::kNDetectors; iDet++ ) {
    if( IsSelected( AliTriggerInput::fgkCTPDetectorName[iDet], fTitle )) {
      // Add the detector
      detClus.Append( " " );
      detClus.Append( AliDAQ::DetectorName(iDet) );
    }
  }
  SetTitle(detClus.Data());
}

//_____________________________________________________________________________
AliTriggerCluster::AliTriggerCluster( const AliTriggerCluster &clus ):
  TNamed(clus),
  fClusterMask(clus.fClusterMask)
{
  // Copy constructor
}

//_____________________________________________________________________________
Bool_t AliTriggerCluster::IsDetectorInCluster( TString & detName )
{
   // search for the given detector
   Bool_t result = kFALSE;
   if( (fTitle.CompareTo( detName ) == 0) ||
        fTitle.BeginsWith( detName+" " ) ||
        fTitle.EndsWith( " "+detName ) ||
        fTitle.Contains( " "+detName+" " ) ) {
      result = kTRUE;
   }
   return result;
}


//_____________________________________________________________________________
void AliTriggerCluster::Print( const Option_t* ) const
{
   // Print
   cout << "Detector Cluster:" << endl;
   cout << "  Name:           " << GetName() << endl;
   cout << "  Cluster index:  " << (Int_t)TMath::Log2(fClusterMask) + 1 << endl;
   cout << "  Detectors:      " << GetDetectorsInCluster() << endl;
}


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

//_____________________________________________________________________________
Bool_t AliTriggerCluster::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;
}
 AliTriggerCluster.cxx:1
 AliTriggerCluster.cxx:2
 AliTriggerCluster.cxx:3
 AliTriggerCluster.cxx:4
 AliTriggerCluster.cxx:5
 AliTriggerCluster.cxx:6
 AliTriggerCluster.cxx:7
 AliTriggerCluster.cxx:8
 AliTriggerCluster.cxx:9
 AliTriggerCluster.cxx:10
 AliTriggerCluster.cxx:11
 AliTriggerCluster.cxx:12
 AliTriggerCluster.cxx:13
 AliTriggerCluster.cxx:14
 AliTriggerCluster.cxx:15
 AliTriggerCluster.cxx:16
 AliTriggerCluster.cxx:17
 AliTriggerCluster.cxx:18
 AliTriggerCluster.cxx:19
 AliTriggerCluster.cxx:20
 AliTriggerCluster.cxx:21
 AliTriggerCluster.cxx:22
 AliTriggerCluster.cxx:23
 AliTriggerCluster.cxx:24
 AliTriggerCluster.cxx:25
 AliTriggerCluster.cxx:26
 AliTriggerCluster.cxx:27
 AliTriggerCluster.cxx:28
 AliTriggerCluster.cxx:29
 AliTriggerCluster.cxx:30
 AliTriggerCluster.cxx:31
 AliTriggerCluster.cxx:32
 AliTriggerCluster.cxx:33
 AliTriggerCluster.cxx:34
 AliTriggerCluster.cxx:35
 AliTriggerCluster.cxx:36
 AliTriggerCluster.cxx:37
 AliTriggerCluster.cxx:38
 AliTriggerCluster.cxx:39
 AliTriggerCluster.cxx:40
 AliTriggerCluster.cxx:41
 AliTriggerCluster.cxx:42
 AliTriggerCluster.cxx:43
 AliTriggerCluster.cxx:44
 AliTriggerCluster.cxx:45
 AliTriggerCluster.cxx:46
 AliTriggerCluster.cxx:47
 AliTriggerCluster.cxx:48
 AliTriggerCluster.cxx:49
 AliTriggerCluster.cxx:50
 AliTriggerCluster.cxx:51
 AliTriggerCluster.cxx:52
 AliTriggerCluster.cxx:53
 AliTriggerCluster.cxx:54
 AliTriggerCluster.cxx:55
 AliTriggerCluster.cxx:56
 AliTriggerCluster.cxx:57
 AliTriggerCluster.cxx:58
 AliTriggerCluster.cxx:59
 AliTriggerCluster.cxx:60
 AliTriggerCluster.cxx:61
 AliTriggerCluster.cxx:62
 AliTriggerCluster.cxx:63
 AliTriggerCluster.cxx:64
 AliTriggerCluster.cxx:65
 AliTriggerCluster.cxx:66
 AliTriggerCluster.cxx:67
 AliTriggerCluster.cxx:68
 AliTriggerCluster.cxx:69
 AliTriggerCluster.cxx:70
 AliTriggerCluster.cxx:71
 AliTriggerCluster.cxx:72
 AliTriggerCluster.cxx:73
 AliTriggerCluster.cxx:74
 AliTriggerCluster.cxx:75
 AliTriggerCluster.cxx:76
 AliTriggerCluster.cxx:77
 AliTriggerCluster.cxx:78
 AliTriggerCluster.cxx:79
 AliTriggerCluster.cxx:80
 AliTriggerCluster.cxx:81
 AliTriggerCluster.cxx:82
 AliTriggerCluster.cxx:83
 AliTriggerCluster.cxx:84
 AliTriggerCluster.cxx:85
 AliTriggerCluster.cxx:86
 AliTriggerCluster.cxx:87
 AliTriggerCluster.cxx:88
 AliTriggerCluster.cxx:89
 AliTriggerCluster.cxx:90
 AliTriggerCluster.cxx:91
 AliTriggerCluster.cxx:92
 AliTriggerCluster.cxx:93
 AliTriggerCluster.cxx:94
 AliTriggerCluster.cxx:95
 AliTriggerCluster.cxx:96
 AliTriggerCluster.cxx:97
 AliTriggerCluster.cxx:98
 AliTriggerCluster.cxx:99
 AliTriggerCluster.cxx:100
 AliTriggerCluster.cxx:101
 AliTriggerCluster.cxx:102
 AliTriggerCluster.cxx:103
 AliTriggerCluster.cxx:104
 AliTriggerCluster.cxx:105
 AliTriggerCluster.cxx:106
 AliTriggerCluster.cxx:107
 AliTriggerCluster.cxx:108
 AliTriggerCluster.cxx:109
 AliTriggerCluster.cxx:110
 AliTriggerCluster.cxx:111
 AliTriggerCluster.cxx:112
 AliTriggerCluster.cxx:113
 AliTriggerCluster.cxx:114
 AliTriggerCluster.cxx:115
 AliTriggerCluster.cxx:116
 AliTriggerCluster.cxx:117
 AliTriggerCluster.cxx:118
 AliTriggerCluster.cxx:119
 AliTriggerCluster.cxx:120
 AliTriggerCluster.cxx:121
 AliTriggerCluster.cxx:122
 AliTriggerCluster.cxx:123
 AliTriggerCluster.cxx:124
 AliTriggerCluster.cxx:125
 AliTriggerCluster.cxx:126
 AliTriggerCluster.cxx:127
 AliTriggerCluster.cxx:128
 AliTriggerCluster.cxx:129
 AliTriggerCluster.cxx:130
 AliTriggerCluster.cxx:131
 AliTriggerCluster.cxx:132
 AliTriggerCluster.cxx:133