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 //-------------------------------------------------------------------------
17 // Implementation of Class AliESDHeader
20 // Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch
21 //-------------------------------------------------------------------------
23 #include "AliESDHeader.h"
24 #include "AliTriggerScalersESD.h"
25 #include "AliTriggerScalersRecordESD.h"
26 #include "AliTriggerIR.h"
27 #include "AliTriggerConfiguration.h"
30 ClassImp(AliESDHeader)
32 //______________________________________________________________________________
33 AliESDHeader::AliESDHeader() :
41 fEventNumberInFile(0),
48 fTriggerScalersDeltaEvent(),
49 fTriggerScalersDeltaRun(),
50 fTriggerInputsNames(kNTriggerInputs),
54 // default constructor
56 SetName("AliESDHeader");
57 for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
58 fTriggerInputsNames.SetOwner(kTRUE);
61 AliESDHeader::~AliESDHeader()
64 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i])delete fIRArray[i];
67 fIRBufferArray.Delete();
71 AliESDHeader::AliESDHeader(const AliESDHeader &header) :
73 fTriggerMask(header.fTriggerMask),
74 fOrbitNumber(header.fOrbitNumber),
75 fTimeStamp(header.fTimeStamp),
76 fEventType(header.fEventType),
77 fEventSpecie(header.fEventSpecie),
78 fPeriodNumber(header.fPeriodNumber),
79 fEventNumberInFile(header.fEventNumberInFile),
80 fBunchCrossNumber(header.fBunchCrossNumber),
81 fTriggerCluster(header.fTriggerCluster),
82 fL0TriggerInputs(header.fL0TriggerInputs),
83 fL1TriggerInputs(header.fL1TriggerInputs),
84 fL2TriggerInputs(header.fL2TriggerInputs),
85 fTriggerScalers(header.fTriggerScalers),
86 fTriggerScalersDeltaEvent(header.fTriggerScalersDeltaEvent),
87 fTriggerScalersDeltaRun(header.fTriggerScalersDeltaRun),
88 fTriggerInputsNames(TObjArray(kNTriggerInputs)),
89 fCTPConfig(header.fCTPConfig),
93 SetName(header.fName);
94 SetTitle(header.fTitle);
95 for(Int_t i = 0; i<kNMaxIR ; i++) {
96 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
99 for(Int_t i = 0; i < kNTriggerInputs; i++) {
100 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
101 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
104 for(Int_t i = 0; i < (header.fIRBufferArray).GetEntries(); ++i) {
105 AliTriggerIR *ir = (AliTriggerIR*)((header.fIRBufferArray).At(i));
106 if (ir) fIRBufferArray.Add(new AliTriggerIR(*ir));
110 AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
112 // assigment operator
114 AliVHeader::operator=(header);
115 fTriggerMask = header.fTriggerMask;
116 fOrbitNumber = header.fOrbitNumber;
117 fTimeStamp = header.fTimeStamp;
118 fEventType = header.fEventType;
119 fEventSpecie = header.fEventSpecie;
120 fPeriodNumber = header.fPeriodNumber;
121 fEventNumberInFile = header.fEventNumberInFile;
122 fBunchCrossNumber = header.fBunchCrossNumber;
123 fTriggerCluster = header.fTriggerCluster;
124 fL0TriggerInputs = header.fL0TriggerInputs;
125 fL1TriggerInputs = header.fL1TriggerInputs;
126 fL2TriggerInputs = header.fL2TriggerInputs;
127 fTriggerScalers = header.fTriggerScalers;
128 fTriggerScalersDeltaEvent = header.fTriggerScalersDeltaEvent;
129 fTriggerScalersDeltaRun = header.fTriggerScalersDeltaRun;
130 fCTPConfig = header.fCTPConfig;
132 fTriggerInputsNames.Clear();
133 for(Int_t i = 0; i < kNTriggerInputs; i++) {
134 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
135 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
137 for(Int_t i = 0; i<kNMaxIR ; i++) {
138 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
141 SetName(header.fName);
142 SetTitle(header.fTitle);
144 fIRBufferArray.Delete();
145 for(Int_t i = 0; i < (header.fIRBufferArray).GetEntries(); ++i) {
146 AliTriggerIR *ir = (AliTriggerIR*)((header.fIRBufferArray).At(i));
147 if (ir) fIRBufferArray.Add(new AliTriggerIR(*ir));
153 void AliESDHeader::Copy(TObject &obj) const
155 // this overwrites the virtual TOBject::Copy()
156 // to allow run time copying without casting
159 if(this==&obj)return;
160 AliESDHeader *robj = dynamic_cast<AliESDHeader*>(&obj);
161 if(!robj)return; // not an AliESDHeader
165 //______________________________________________________________________________
166 void AliESDHeader::Reset()
168 // reset all data members
175 fEventNumberInFile = 0;
176 fBunchCrossNumber = 0;
178 fL0TriggerInputs = 0;
179 fL1TriggerInputs = 0;
180 fL2TriggerInputs = 0;
181 fTriggerScalers.Reset();
182 fTriggerScalersDeltaEvent.Reset();
183 fTriggerScalersDeltaRun.Reset();
184 fTriggerInputsNames.Clear();
187 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
192 fIRBufferArray.Delete();
194 //______________________________________________________________________________
195 Bool_t AliESDHeader::AddTriggerIR(const AliTriggerIR* ir)
197 // Add an IR object into the array
198 // of IRs in the ESD header
200 fIRBufferArray.Add(new AliTriggerIR(*ir));
204 //______________________________________________________________________________
205 void AliESDHeader::Print(const Option_t *) const
207 // Print some data members
208 printf("Event # %d in file Bunch crossing # %d Orbit # %d Trigger %lld \n",
209 GetEventNumberInFile(),
210 GetBunchCrossNumber(),
213 printf("List of the active trigger inputs: ");
214 for(Int_t i = 0; i < kNTriggerInputs; i++) {
215 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
216 if (str) printf("%s ",str->GetName());
221 //______________________________________________________________________________
222 void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
224 // Fill the active trigger inputs names
225 // into the corresponding fTriggerInputsNames (TObjArray of TNamed)
226 if (index >= kNTriggerInputs || index < 0) {
227 AliError(Form("Index (%d) is outside the allowed range (0,59)!",index));
231 fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
233 //______________________________________________________________________________
234 const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
236 // Get the trigger input name
237 // at the specified position in the trigger mask and trigger level (0,1,2)
238 TNamed *trginput = 0;
239 if (trglevel == 0) trginput = (TNamed *)fTriggerInputsNames.At(index);
240 if (trglevel == 1) trginput = (TNamed *)fTriggerInputsNames.At(index+24);
241 if (trglevel == 2) trginput = (TNamed *)fTriggerInputsNames.At(index+48);
242 if (trginput) return trginput->GetName();
245 //______________________________________________________________________________
246 TString AliESDHeader::GetActiveTriggerInputs() const
248 // Returns the list with the names of the active trigger inputs
250 for(Int_t i = 0; i < kNTriggerInputs; i++) {
251 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
254 trginputs += str->GetName();
261 //______________________________________________________________________________
262 TString AliESDHeader::GetFiredTriggerInputs() const
264 // Returns the list with the names of the fired trigger inputs
266 for(Int_t i = 0; i < kNTriggerInputs; i++) {
267 TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
268 if (i < 24 && (fL0TriggerInputs & (1 << i))) {
271 trginputs += str->GetName();
275 if (i >= 24 && i < 48 && (fL1TriggerInputs & (1 << (i-24)))) {
278 trginputs += str->GetName();
282 if (i >= 48 && (fL2TriggerInputs & (1 << (i-48)))) {
285 trginputs += str->GetName();
293 //______________________________________________________________________________
294 Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
296 // Checks if the trigger input is fired
298 TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
299 if (!trginput) return kFALSE;
301 Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
302 if (inputIndex < 0) return kFALSE;
304 if (fL0TriggerInputs & (1 << inputIndex)) return kTRUE;
305 else if (fL1TriggerInputs & (1 << (inputIndex-24))) return kTRUE;
306 else if (fL2TriggerInputs & (1 << (inputIndex-48))) return kTRUE;