]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/ESD/AliESDHeader.cxx
Pass the request of checking the runnumber for the geometry setting via the ctor...
[u/mrichter/AliRoot.git] / STEER / ESD / AliESDHeader.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 //-------------------------------------------------------------------------
17 //                      Implementation of   Class AliESDHeader
18 //   Header data
19 //   for the ESD   
20 //   Origin: Christian Klein-Boesing, CERN, Christian.Klein-Boesing@cern.ch 
21 //-------------------------------------------------------------------------
22
23 #include "AliESDHeader.h"
24 #include "AliTriggerScalersESD.h"
25 #include "AliTriggerScalersRecordESD.h"
26 #include "AliTriggerIR.h"
27 #include "AliTriggerConfiguration.h"
28 #include "AliLog.h" 
29
30 ClassImp(AliESDHeader)
31
32 //______________________________________________________________________________
33 AliESDHeader::AliESDHeader() :
34   AliVHeader(),
35   fTriggerMask(0),
36   fOrbitNumber(0),
37   fTimeStamp(0),
38   fEventType(0),
39   fEventSpecie(0),
40   fPeriodNumber(0),
41   fEventNumberInFile(0),
42   fBunchCrossNumber(0),
43   fTriggerCluster(0),
44   fL0TriggerInputs(0),
45   fL1TriggerInputs(0),
46   fL2TriggerInputs(0),
47   fTriggerScalers(),
48   fTriggerScalersDeltaEvent(),
49   fTriggerScalersDeltaRun(),
50   fTriggerInputsNames(kNTriggerInputs),
51   fCTPConfig(NULL),
52   fIRBufferArray()
53 {
54   // default constructor
55
56   SetName("AliESDHeader");
57   for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
58   fTriggerInputsNames.SetOwner(kTRUE);
59 }
60
61 AliESDHeader::~AliESDHeader() 
62 {
63   // destructor
64   for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i])delete fIRArray[i];
65   delete fCTPConfig;
66
67   fIRBufferArray.Delete();
68 }
69
70
71 AliESDHeader::AliESDHeader(const AliESDHeader &header) :
72   AliVHeader(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),
90   fIRBufferArray()
91 {
92   // copy constructor
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]);
97     else fIRArray[i]=0;
98   }
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);
102   }
103
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));
107   }
108 }
109
110 AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
111
112   // assigment operator
113   if(this!=&header) {
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;
131
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);
136     }
137     for(Int_t i = 0; i<kNMaxIR ; i++) {
138        if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
139        else fIRArray[i]=0;
140     }
141     SetName(header.fName);
142     SetTitle(header.fTitle);
143
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));
148     }
149   }
150   return *this;
151 }
152
153 void AliESDHeader::Copy(TObject &obj) const 
154 {  
155   // this overwrites the virtual TOBject::Copy()
156   // to allow run time copying without casting
157   // in AliESDEvent
158
159   if(this==&obj)return;
160   AliESDHeader *robj = dynamic_cast<AliESDHeader*>(&obj);
161   if(!robj)return; // not an AliESDHeader
162   *robj = *this;
163
164 }
165 //______________________________________________________________________________
166 void AliESDHeader::Reset()
167 {
168   // reset all data members
169   fTriggerMask       = 0;
170   fOrbitNumber       = 0;
171   fTimeStamp         = 0;
172   fEventType         = 0;
173   fEventSpecie       = 0;
174   fPeriodNumber      = 0;
175   fEventNumberInFile = 0;
176   fBunchCrossNumber  = 0;
177   fTriggerCluster    = 0;
178   fL0TriggerInputs   = 0;
179   fL1TriggerInputs   = 0;
180   fL2TriggerInputs   = 0;
181   fTriggerScalers.Reset();
182   fTriggerScalersDeltaEvent.Reset();
183   fTriggerScalersDeltaRun.Reset();
184   fTriggerInputsNames.Clear();
185   delete fCTPConfig;
186   fCTPConfig = 0;
187   for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
188    delete fIRArray[i];
189    fIRArray[i]=0;
190   }
191
192   fIRBufferArray.Delete();
193 }
194 //______________________________________________________________________________
195 Bool_t AliESDHeader::AddTriggerIR(const AliTriggerIR* ir)
196 {
197   // Add an IR object into the array
198   // of IRs in the ESD header
199
200  fIRBufferArray.Add(new AliTriggerIR(*ir));
201
202  return kTRUE;
203 }
204 //______________________________________________________________________________
205 void AliESDHeader::Print(const Option_t *) const
206 {
207   // Print some data members
208   printf("Event # %d in file Bunch crossing # %d Orbit # %d Trigger %lld \n",
209          GetEventNumberInFile(),
210          GetBunchCrossNumber(),
211          GetOrbitNumber(),
212          GetTriggerMask());
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());
217          }
218          printf("\n");
219 }
220
221 //______________________________________________________________________________
222 void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
223 {
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));
228     return;
229   }
230
231   fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
232 }
233 //______________________________________________________________________________
234 const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
235 {
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();
243   else return "";
244 }
245 //______________________________________________________________________________
246 TString AliESDHeader::GetActiveTriggerInputs() const
247 {
248   // Returns the list with the names of the active trigger inputs
249   TString trginputs;
250   for(Int_t i = 0; i < kNTriggerInputs; i++) {
251     TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
252     if (str) {
253       trginputs += " ";
254       trginputs += str->GetName();
255       trginputs += " ";
256     }
257   }
258
259   return trginputs;
260 }
261 //______________________________________________________________________________
262 TString AliESDHeader::GetFiredTriggerInputs() const
263 {
264   // Returns the list with the names of the fired trigger inputs
265   TString trginputs;
266   for(Int_t i = 0; i < kNTriggerInputs; i++) {
267       TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
268       if (i < 24 && (fL0TriggerInputs & (1 << i))) {
269         if (str) {
270           trginputs += " ";
271           trginputs += str->GetName();
272           trginputs += " ";
273         }
274       }
275       if (i >= 24 && i < 48 && (fL1TriggerInputs & (1 << (i-24)))) {
276         if (str) {
277           trginputs += " ";
278           trginputs += str->GetName();
279           trginputs += " ";
280         }
281       }
282       if (i >= 48 && (fL2TriggerInputs & (1 << (i-48)))) {
283         if (str) {
284           trginputs += " ";
285           trginputs += str->GetName();
286           trginputs += " ";
287         }
288       }
289
290   }
291   return trginputs;
292 }
293 //______________________________________________________________________________
294 Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
295 {
296   // Checks if the trigger input is fired 
297  
298   TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
299   if (!trginput) return kFALSE;
300
301   Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
302   if (inputIndex < 0) return kFALSE;
303   
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;
307   else return kFALSE;
308 }