1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////////
18 // This class which defines the trigger classes objects
21 ///////////////////////////////////////////////////////////////////////////////
22 #include <Riostream.h>
26 #include "AliTriggerClass.h"
27 #include "AliTriggerConfiguration.h"
28 #include "AliTriggerDescriptor.h"
29 #include "AliTriggerCluster.h"
30 #include "AliTriggerPFProtection.h"
31 #include "AliTriggerBCMask.h"
33 ClassImp(AliTriggerClass)
35 //_____________________________________________________________________________
36 AliTriggerClass::AliTriggerClass():
49 // Default constructor
50 for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0;
53 //_____________________________________________________________________________
54 AliTriggerClass::AliTriggerClass( TString & name, UChar_t index,
55 AliTriggerDescriptor *desc, AliTriggerCluster *clus,
56 AliTriggerPFProtection *pfp, AliTriggerBCMask *mask,
57 UInt_t prescaler, Bool_t allrare) :
59 fClassMask( 1ull << ULong64_t(index-1)),
64 fPrescaler( prescaler ),
71 // This should be used with old version of config
72 for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0;
76 //_____________________________________________________________________________
77 AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config,
78 TString & name, UChar_t index,
79 TString &desc, TString &clus,
80 TString &pfp, TString &mask,
81 UInt_t prescaler, Bool_t allrare) :
83 fClassMask( 1ull << ULong64_t(index-1)),
87 fPFProtection( NULL ),
88 fPrescaler( prescaler ),
94 // This should be used with old version of config
95 fDescriptor = (AliTriggerDescriptor*)config->GetDescriptors().FindObject(desc);
96 fCluster = (AliTriggerCluster*)config->GetClusters().FindObject(clus);
97 pfp.ReplaceAll("{","");
98 pfp.ReplaceAll("}","");
99 fPFProtection = (AliTriggerPFProtection*)config->GetPFProtections().FindObject(pfp);
101 for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0;
102 mask.ReplaceAll("{","");
103 mask.ReplaceAll("}","");
104 fMask[0] = (AliTriggerBCMask*)config->GetMasks().FindObject(mask);
106 //_____________________________________________________________________________
107 AliTriggerClass::AliTriggerClass( AliTriggerConfiguration *config,
108 TString & name, UChar_t index,
109 TString &desc, TString &clus,
111 UInt_t prescaler, Bool_t allrare,
112 UInt_t timegroup,UInt_t timewindow) :
113 TNamed( name, name ),
114 fClassMask( 1ull << ULong64_t(index-1)),
118 fPFProtection( NULL ),
119 fPrescaler( prescaler ),
122 fTimeGroup(timegroup),
123 fTimeWindow(timewindow)
125 fDescriptor = (AliTriggerDescriptor*)config->GetDescriptors().FindObject(desc);
126 fCluster = (AliTriggerCluster*)config->GetClusters().FindObject(clus);
127 pfp.ReplaceAll("{","");
128 pfp.ReplaceAll("}","");
129 fPFProtection = (AliTriggerPFProtection*)config->GetPFProtections().FindObject(pfp);
130 // masks are added by seter
131 for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=0;
133 //_____________________________________________________________________________
134 AliTriggerClass::~AliTriggerClass()
138 //_____________________________________________________________________________
139 AliTriggerClass::AliTriggerClass( const AliTriggerClass& trclass ):
141 fClassMask(trclass.fClassMask),
142 fIndex(trclass.fIndex),
143 fDescriptor(trclass.fDescriptor),
144 fCluster(trclass.fCluster),
145 fPFProtection(trclass.fPFProtection),
146 fPrescaler(trclass.fPrescaler),
147 fAllRare(trclass.fAllRare),
148 fStatus(trclass.fStatus),
149 fTimeGroup(trclass.fTimeGroup),
150 fTimeWindow(trclass.fTimeWindow)
153 for(Int_t i = 0; i < kNMaxMasks; i++)fMask[i]=trclass.fMask[i];
155 //______________________________________________________________________________
156 AliTriggerClass& AliTriggerClass::operator=(const AliTriggerClass& trclass)
158 // AliTriggerClass assignment operator.
160 if (this != &trclass) {
161 TNamed::operator=(trclass);
162 fClassMask = trclass.fClassMask;
163 fIndex=trclass.fIndex;
164 fDescriptor = trclass.fDescriptor;
165 fCluster = trclass.fCluster;
166 fPFProtection = trclass.fPFProtection;
167 for(Int_t i=0; i< kNMaxMasks; i++)fMask[i]=trclass.fMask[i];
168 fPrescaler = trclass.fPrescaler;
169 fAllRare = trclass.fAllRare;
170 fStatus = trclass.fStatus;
171 fTimeGroup = trclass.fTimeGroup;
172 fTimeWindow = trclass.fTimeWindow;
176 //_____________________________________________________________________________
177 Bool_t AliTriggerClass::SetMasks(AliTriggerConfiguration* config,TString& masks)
179 masks.ReplaceAll("{","");
180 masks.ReplaceAll("}","");
181 masks.ReplaceAll(" ","");
182 masks.ReplaceAll("\t","");
183 TObjArray *tokens = masks.Tokenize(",");
184 Int_t ntokens = tokens->GetEntriesFast();
187 AliError(Form("The class (%s) has invalid mask pattern: (%s)",GetName(),masks.Data()));
191 while(fMask[nmask])nmask++;
192 if(nmask+ntokens>=kNMaxMasks){
194 AliError(Form("The class (%s) exceeds %i masks",GetName(),kNMaxMasks));
197 for(Int_t i=nmask; i<nmask+ntokens; i++){
198 fMask[i] = (AliTriggerBCMask*)config->GetMasks().FindObject(((TObjString*)tokens->At(i-nmask))->String());
200 AliError(Form("The class (%s) unknown mask %s",GetName(),(((TObjString*)tokens->At(i-nmask))->String().Data())));
207 //_____________________________________________________________________________
208 Bool_t AliTriggerClass::CheckClass(AliTriggerConfiguration* config) const
210 // Check the existance of trigger inputs and functions
211 // and the logic used.
212 // Return false in case of wrong class
216 AliError(Form("The class (%s) has invalid mask pattern !",GetName()));
220 // check comsistency of index and mask
222 if (!config->GetDescriptors().FindObject(fDescriptor)) {
223 AliError(Form("The class (%s) contains invalid descriptor !",GetName()));
227 if (!(fDescriptor->CheckInputsAndFunctions(config->GetInputs(),config->GetFunctions()))) {
228 AliError(Form("The class (%s) contains bad descriptor !",GetName()));
233 if (!config->GetClusters().FindObject(fCluster)) {
234 AliError(Form("The class (%s) contains invalid cluster !",GetName()));
238 if (!config->GetPFProtections().FindObject(fPFProtection)) {
239 AliError(Form("The class (%s) contains invalid past-future protection !",GetName()));
243 for(Int_t i=0; i< kNMaxMasks; i++){
245 if (!config->GetMasks().FindObject(fMask[i])) {
246 AliError(Form("The class (%s) contains invalid BC mask !",GetName()));
254 //_____________________________________________________________________________
255 void AliTriggerClass::Trigger( const TObjArray& inputs , const TObjArray& functions)
257 // Check if the inputs satify the trigger class conditions
258 fStatus = fDescriptor->Trigger(inputs,functions);
261 //_____________________________________________________________________________
262 Bool_t AliTriggerClass::IsActive( const TObjArray& inputs, const TObjArray& functions) const
264 // Check if the inputs satify the trigger class conditions
266 return fDescriptor->IsActive(inputs,functions);
271 //_____________________________________________________________________________
272 void AliTriggerClass::Print( const Option_t* ) const
275 cout << "Trigger Class:" << endl;
276 cout << " Name: " << GetName() << endl;
277 cout << " ClassBit: 0x" << hex << fClassMask << dec << endl;
278 cout << " Index: " << (UInt_t)fIndex << endl;
279 cout << " Descriptor: " << fDescriptor->GetName() << endl;
280 cout << " Cluster: " << fCluster->GetName() << endl;
281 cout << " PF Protection:" << fPFProtection->GetName() << endl;
282 cout << " BC Mask: " ;
283 for(Int_t i=0; i< kNMaxMasks; i++)if(fMask[i])cout << fMask[i]->GetName() << " ";
285 cout << " Prescaler: " << fPrescaler << endl;
286 cout << " AllRare: " << fAllRare << endl;
287 cout << " Time Group: " << fTimeGroup << endl;
288 cout << " Time Window: " << fTimeWindow << endl;
290 cout << " Class is fired " << endl;
292 cout << " Class is not fired " << endl;