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 Input from an specific detector                                                                                           //
//
//
//                        name         description     id mask
//    Ej:
//      AliTriggerInput( "V0_MB_L0", "VO minimum bias", 0x01 );
//      AliTriggerInput( "V0_SC_L0", "VO semi central", 0x02 );
//      AliTriggerInput( "V0_C_L0",  "VO central",      0x04 );
//
//    The name must be globaly unique. Spaces are not allowed.
//    As convention should start with detector name then an id
//    and the trigger level (L0, L1, L2) separated by "_"
//    for valid detector names see AliTriggerCluster::fgkDetectorName
//
//    A maximun of 60 inputs trigger are allow.
//    So, the id mask should set only bit from the position 1 to 60.
//
///////////////////////////////////////////////////////////////////////////////

#include <Riostream.h>
#include <TMath.h>

#include "AliLog.h"
#include "AliTriggerInput.h"

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

Bool_t AliTriggerInput::fgkIsTriggerDetector[AliDAQ::kNDetectors] = {1,0,0,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,0};
const char* AliTriggerInput::fgkCTPDetectorName[AliDAQ::kNDetectors] = {
  "SPD",
  "SDD",
  "SSD",
  "TPC",
  "TRD",
  "TOF",
  "HMPID",
  "PHOS",
  "CPV",
  "PMD",
  "MUON_TRK",
  "MUON_TRG",
  "FMD",
  "T0",
  "V0",
  "ZDC",
  "ACORDE",
  "CTP",
  "EMCal",
  "DAQ_TEST",
  "HLT"
};

//_____________________________________________________________________________
  AliTriggerInput::AliTriggerInput( TString name, TString det, UChar_t level, Int_t signature, Char_t number ):
    TNamed( name.Data(), det.Data() ),
    fMask((number > 0) ? 1 << (number-1) : 0 ),
    fValue(0),
    fSignature(signature),
    fLevel(level),
    fDetectorId(-1),
    fIsActive(kFALSE)
{
   //  Standard constructor
   //
   //    The name must be globaly unique. Spaces are not allowed.
   //    For valid detector names see AliDAQ::fgkDetectorName

   // Check for valid detector name
   Int_t iDet = 0;
   for( iDet = 0; iDet < AliDAQ::kNDetectors; iDet++ ) {
     if( !fgkIsTriggerDetector[iDet] ) continue;
      if( det.CompareTo( fgkCTPDetectorName[iDet] ) == 0 ) {
	fTitle = AliDAQ::DetectorName(iDet);
	fDetectorId = iDet;
	break;
      }
      if( det.CompareTo( AliDAQ::DetectorName(iDet) ) == 0 ) {
	fDetectorId = iDet;
	break;
      }
   }
   if( iDet == AliDAQ::kNDetectors ) {
      AliError( Form( "%s is not a valid trigger input, it must contain a valid trigger detector name instead of (%s)", name.Data(), det.Data() ) );
   }
}

//_____________________________________________________________________________
void AliTriggerInput::Print( const Option_t* ) const
{
   // Print
   cout << "Trigger Input:" << endl; 
   cout << "  Name:        " << GetName() << endl;
   cout << "  Detector:    " << GetTitle() << "(Id=" << (Int_t)fDetectorId << ")" << endl;
   cout << "  Level:       " << (Int_t)fLevel << endl;
   cout << "  Signature:   " << fSignature << endl;
   if(fMask)
   cout << "  Number:      " << (Int_t)TMath::Log2(fMask) << endl;
   else cout << " fMask:  " << fMask << endl;
   if (IsActive())
     cout << "   Input is active      " << endl;
   else
     cout << "   Input is not active  " << endl;
   if (Status())
     cout << "   Input is fired      " << endl;
   else
     cout << "   Input is not fired  " << endl;
}

//_____________________________________________________________________________
TString AliTriggerInput::GetModule() const
{
  // Get the detector module name (in AliRoot simulation sense)
  TString name = "";
  if (fDetectorId >= 0 && fDetectorId < AliDAQ::kNDetectors)
    name = AliDAQ::OfflineModuleName((Int_t)fDetectorId);
  else
    AliError(Form("Invalid detector Id (%d)",(Int_t)fDetectorId));

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