]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/ESD/AliTriggerInput.cxx
test
[u/mrichter/AliRoot.git] / STEER / ESD / 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 using std::endl;
46 using std::cout;
47 ClassImp( AliTriggerInput )
48
49 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};
50 const char* AliTriggerInput::fgkCTPDetectorName[AliDAQ::kNDetectors] = {
51   "SPD",
52   "SDD",
53   "SSD",
54   "TPC",
55   "TRD",
56   "TOF",
57   "HMPID",
58   "PHOS",
59   "CPV",
60   "PMD",
61   "MUON_TRK",
62   "MUON_TRG",
63   "FMD",
64   "T0",
65   "V0",
66   "ZDC",
67   "ACORDE",
68   "CTP",
69   "EMCal",
70   "DAQ_TEST",
71   "HLT"
72 };
73
74 //_____________________________________________________________________________
75   AliTriggerInput::AliTriggerInput( TString name, TString det, UChar_t level, Int_t signature, Char_t number ):
76     TNamed( name.Data(), det.Data() ),
77     fMask((number > 0) ? 1 << (number-1) : 0 ),
78     fValue(0),
79     fSignature(signature),
80     fLevel(level),
81     fDetectorId(-1),
82     fIsActive(kFALSE)
83 {
84    //  Standard constructor
85    //
86    //    The name must be globaly unique. Spaces are not allowed.
87    //    For valid detector names see AliDAQ::fgkDetectorName
88
89    // Check for valid detector name
90    Int_t iDet = 0;
91    for( iDet = 0; iDet < AliDAQ::kNDetectors; iDet++ ) {
92      if( !fgkIsTriggerDetector[iDet] ) continue;
93       if( det.CompareTo( fgkCTPDetectorName[iDet] ) == 0 ) {
94         fTitle = AliDAQ::DetectorName(iDet);
95         fDetectorId = iDet;
96         break;
97       }
98       if( det.CompareTo( AliDAQ::DetectorName(iDet) ) == 0 ) {
99         fDetectorId = iDet;
100         break;
101       }
102    }
103    if( iDet == AliDAQ::kNDetectors ) {
104       AliError( Form( "%s is not a valid trigger input, it must contain a valid trigger detector name instead of (%s)", name.Data(), det.Data() ) );
105    }
106 }
107
108 //_____________________________________________________________________________
109 void AliTriggerInput::Print( const Option_t* ) const
110 {
111    // Print
112    cout << "Trigger Input:" << endl; 
113    cout << "  Name:        " << GetName() << endl;
114    cout << "  Detector:    " << GetTitle() << "(Id=" << (Int_t)fDetectorId << ")" << endl;
115    cout << "  Level:       " << (Int_t)fLevel << endl;
116    cout << "  Signature:   " << fSignature << endl;
117    if(fMask)
118    cout << "  Number:      " << (Int_t)TMath::Log2(fMask) << endl;
119    else cout << " fMask:  " << fMask << endl;
120    if (IsActive())
121      cout << "   Input is active      " << endl;
122    else
123      cout << "   Input is not active  " << endl;
124    if (Status())
125      cout << "   Input is fired      " << endl;
126    else
127      cout << "   Input is not fired  " << endl;
128 }
129
130 //_____________________________________________________________________________
131 TString AliTriggerInput::GetModule() const
132 {
133   // Get the detector module name (in AliRoot simulation sense)
134   TString name = "";
135   if (fDetectorId >= 0 && fDetectorId < AliDAQ::kNDetectors)
136     name = AliDAQ::OfflineModuleName((Int_t)fDetectorId);
137   else
138     AliError(Form("Invalid detector Id (%d)",(Int_t)fDetectorId));
139
140   return name;
141 }