]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliTriggerInput.cxx
Corrected protection.
[u/mrichter/AliRoot.git] / STEER / AliTriggerInput.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //
20 //  Class to define a Trigger Input from an specific detector                                                                                           //
21 //
22 //
23 //                        name         description     id mask
24 //    Ej:
25 //      AliTriggerInput( "V0_MB_L0", "VO minimum bias", 0x01 );
26 //      AliTriggerInput( "V0_SC_L0", "VO semi central", 0x02 );
27 //      AliTriggerInput( "V0_C_L0",  "VO central",      0x04 );
28 //
29 //    The name must be globaly unique. Spaces are not allowed.
30 //    As convention should start with detector name then an id
31 //    and the trigger level (L0, L1, L2) separated by "_"
32 //    for valid detector names see AliTriggerCluster::fgkDetectorName
33 //
34 //    A maximun of 60 inputs trigger are allow.
35 //    So, the id mask should set only bit from the position 1 to 60.
36 //
37 ///////////////////////////////////////////////////////////////////////////////
38
39 #include <Riostream.h>
40 #include <TMath.h>
41
42 #include "AliLog.h"
43 #include "AliTriggerInput.h"
44
45 ClassImp( AliTriggerInput )
46
47 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};
48 const char* AliTriggerInput::fgkCTPDetectorName[AliDAQ::kNDetectors] = {
49   "SPD",
50   "SDD",
51   "SSD",
52   "TPC",
53   "TRD",
54   "TOF",
55   "HMPID",
56   "PHOS",
57   "CPV",
58   "PMD",
59   "MUON_TRK",
60   "MUON_TRG",
61   "FMD",
62   "T0",
63   "V0",
64   "ZDC",
65   "ACORDE",
66   "CTP",
67   "EMCal",
68   "DAQ_TEST",
69   "HLT"
70 };
71
72 //_____________________________________________________________________________
73   AliTriggerInput::AliTriggerInput( TString name, TString det, UChar_t level, Int_t signature, Char_t number ):
74     TNamed( name.Data(), det.Data() ),
75     fMask((number > 0) ? 1 << (number-1) : 0 ),
76     fValue(0),
77     fSignature(signature),
78     fLevel(level),
79     fDetectorId(-1),
80     fIsActive(kFALSE)
81 {
82    //  Standard constructor
83    //
84    //    The name must be globaly unique. Spaces are not allowed.
85    //    For valid detector names see AliDAQ::fgkDetectorName
86
87    // Check for valid detector name
88    Int_t iDet = 0;
89    for( iDet = 0; iDet < AliDAQ::kNDetectors; iDet++ ) {
90      if( !fgkIsTriggerDetector[iDet] ) continue;
91       if( det.CompareTo( fgkCTPDetectorName[iDet] ) == 0 ) {
92         fTitle = AliDAQ::DetectorName(iDet);
93         fDetectorId = iDet;
94         break;
95       }
96       if( det.CompareTo( AliDAQ::DetectorName(iDet) ) == 0 ) {
97         fDetectorId = iDet;
98         break;
99       }
100    }
101    if( iDet == AliDAQ::kNDetectors ) {
102       AliError( Form( "%s is not a valid trigger input, it must contain a valid trigger detector name instead of (%s)", name.Data(), det.Data() ) );
103    }
104 }
105
106 //_____________________________________________________________________________
107 void AliTriggerInput::Print( const Option_t* ) const
108 {
109    // Print
110    cout << "Trigger Input:" << endl; 
111    cout << "  Name:        " << GetName() << endl;
112    cout << "  Detector:    " << GetTitle() << "(Id=" << (Int_t)fDetectorId << ")" << endl;
113    cout << "  Level:       " << (Int_t)fLevel << endl;
114    cout << "  Signature:   " << fSignature << endl;
115    cout << "  Number:      " << (Int_t)TMath::Log2(fMask) << endl;
116    if (IsActive())
117      cout << "   Input is active      " << endl;
118    else
119      cout << "   Input is not active  " << endl;
120    if (Status())
121      cout << "   Input is fired      " << endl;
122    else
123      cout << "   Input is not fired  " << endl;
124 }
125
126 //_____________________________________________________________________________
127 TString AliTriggerInput::GetModule() const
128 {
129   // Get the detector module name (in AliRoot simulation sense)
130   TString name = "";
131   if (fDetectorId >= 0 && fDetectorId < AliDAQ::kNDetectors)
132     name = AliDAQ::OfflineModuleName((Int_t)fDetectorId);
133   else
134     AliError(Form("Invalid detector Id (%d)",(Int_t)fDetectorId));
135
136   return name;
137 }