]>
Commit | Line | Data |
---|---|---|
a5a091ce | 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 | |
51f6d619 | 31 | // and the trigger level (L0, L1, L2) separated by "_" |
32 | // for valid detector names see AliTriggerCluster::fgkDetectorName | |
a5a091ce | 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> | |
51f6d619 | 40 | #include <TMath.h> |
a5a091ce | 41 | |
51f6d619 | 42 | #include "AliLog.h" |
a5a091ce | 43 | #include "AliTriggerInput.h" |
44 | ||
45 | ClassImp( AliTriggerInput ) | |
46 | ||
7034c7a7 | 47 | Bool_t AliTriggerInput::fgkIsTriggerDetector[AliDAQ::kNDetectors] = {1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,0}; |
51f6d619 | 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", | |
7034c7a7 | 68 | "DAQ_TEST", |
51f6d619 | 69 | "HLT" |
70 | }; | |
71 | ||
72 | const char* AliTriggerInput::fgkOfflineModuleName[AliDAQ::kNDetectors] = { | |
73 | "ITS", | |
74 | "ITS", | |
75 | "ITS", | |
76 | "TPC", | |
77 | "TRD", | |
78 | "TOF", | |
79 | "HMPID", | |
80 | "PHOS", | |
81 | "CPV", | |
82 | "PMD", | |
83 | "MUON", | |
84 | "MUON", | |
85 | "FMD", | |
86 | "T0", | |
87 | "VZERO", | |
88 | "ZDC", | |
89 | "ACORDE", | |
90 | "CTP", | |
91 | "EMCAL", | |
7034c7a7 | 92 | "", |
51f6d619 | 93 | "HLT" |
94 | }; | |
95 | ||
96 | //_____________________________________________________________________________ | |
97 | AliTriggerInput::AliTriggerInput( TString name, TString det, UChar_t level, Int_t signature, Char_t number ): | |
98 | TNamed( name.Data(), det.Data() ), | |
99 | fMask((number >= 0) ? 1 << number : 0 ), | |
100 | fValue(0), | |
101 | fSignature(signature), | |
102 | fLevel(level), | |
103 | fDetectorId(-1), | |
104 | fIsActive(kFALSE) | |
105 | { | |
106 | // Standard constructor | |
107 | // | |
108 | // The name must be globaly unique. Spaces are not allowed. | |
109 | // For valid detector names see AliDAQ::fgkDetectorName | |
110 | ||
111 | // Check for valid detector name | |
112 | Int_t iDet = 0; | |
113 | for( iDet = 0; iDet < AliDAQ::kNDetectors; iDet++ ) { | |
114 | if( !fgkIsTriggerDetector[iDet] ) continue; | |
115 | if( det.CompareTo( fgkCTPDetectorName[iDet] ) == 0 ) { | |
116 | fTitle = AliDAQ::DetectorName(iDet); | |
117 | fDetectorId = iDet; | |
118 | break; | |
119 | } | |
120 | if( det.CompareTo( AliDAQ::DetectorName(iDet) ) == 0 ) { | |
121 | fDetectorId = iDet; | |
122 | break; | |
123 | } | |
124 | } | |
125 | if( iDet == AliDAQ::kNDetectors ) { | |
126 | AliError( Form( "%s is not a valid trigger input, it must contain a valid trigger detector name instead of (%s)", name.Data(), det.Data() ) ); | |
127 | } | |
128 | } | |
129 | ||
a5a091ce | 130 | //_____________________________________________________________________________ |
131 | void AliTriggerInput::Print( const Option_t* ) const | |
132 | { | |
133 | ||
134 | cout << "Trigger Input:" << endl; | |
135 | cout << " Name: " << GetName() << endl; | |
51f6d619 | 136 | cout << " Detector: " << GetTitle() << "(Id=" << (Int_t)fDetectorId << ")" << endl; |
137 | cout << " Level: " << fLevel << endl; | |
138 | cout << " Signature: " << fSignature << endl; | |
139 | cout << " Number: " << (Int_t)TMath::Log2(fMask) << endl; | |
140 | if (IsActive()) | |
141 | cout << " Input is active " << endl; | |
142 | else | |
143 | cout << " Input is not active " << endl; | |
144 | if (Status()) | |
145 | cout << " Input is fired " << endl; | |
146 | else | |
147 | cout << " Input is not fired " << endl; | |
148 | } | |
149 | ||
150 | //_____________________________________________________________________________ | |
151 | TString AliTriggerInput::GetModule() const | |
152 | { | |
153 | // Get the detector module name (in AliRoot simulation sense) | |
154 | TString name = ""; | |
155 | if (fDetectorId >= 0 && fDetectorId < AliDAQ::kNDetectors) | |
156 | name = fgkOfflineModuleName[(Int_t)fDetectorId]; | |
157 | else | |
158 | AliError(Form("Invalid detector Id (%d)",(Int_t)fDetectorId)); | |
159 | ||
160 | return name; | |
a5a091ce | 161 | } |