]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - STEER/AliESDHeader.cxx
Increasing the class version number.
[u/mrichter/AliRoot.git] / STEER / AliESDHeader.cxx
... / ...
CommitLineData
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 "AliLog.h"
28
29ClassImp(AliESDHeader)
30
31//______________________________________________________________________________
32AliESDHeader::AliESDHeader() :
33 AliVHeader(),
34 fTriggerMask(0),
35 fOrbitNumber(0),
36 fTimeStamp(0),
37 fEventType(0),
38 fEventSpecie(0),
39 fPeriodNumber(0),
40 fEventNumberInFile(0),
41 fBunchCrossNumber(0),
42 fTriggerCluster(0),
43 fL0TriggerInputs(0),
44 fL1TriggerInputs(0),
45 fL2TriggerInputs(0),
46 fTriggerScalers(),
47 fTriggerInputsNames(kNTriggerInputs)
48{
49 // default constructor
50
51 SetName("AliESDHeader");
52 for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
53 fTriggerInputsNames.SetOwner(kTRUE);
54}
55AliESDHeader::~AliESDHeader()
56{
57 // destructor
58 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i])delete fIRArray[i];
59}
60
61
62AliESDHeader::AliESDHeader(const AliESDHeader &header) :
63 AliVHeader(header),
64 fTriggerMask(header.fTriggerMask),
65 fOrbitNumber(header.fOrbitNumber),
66 fTimeStamp(header.fTimeStamp),
67 fEventType(header.fEventType),
68 fEventSpecie(header.fEventSpecie),
69 fPeriodNumber(header.fPeriodNumber),
70 fEventNumberInFile(header.fEventNumberInFile),
71 fBunchCrossNumber(header.fBunchCrossNumber),
72 fTriggerCluster(header.fTriggerCluster),
73 fL0TriggerInputs(header.fL0TriggerInputs),
74 fL1TriggerInputs(header.fL1TriggerInputs),
75 fL2TriggerInputs(header.fL2TriggerInputs),
76 fTriggerScalers(header.fTriggerScalers),
77 fTriggerInputsNames(TObjArray(kNTriggerInputs))
78
79{
80 // copy constructor
81 SetName(header.fName);
82 SetTitle(header.fTitle);
83 for(Int_t i = 0; i<kNMaxIR ; i++) {
84 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
85 else fIRArray[i]=0;
86 }
87 for(Int_t i = 0; i < kNTriggerInputs; i++) {
88 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
89 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
90 }
91}
92
93AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
94{
95 // assigment operator
96 if(this!=&header) {
97 AliVHeader::operator=(header);
98 fTriggerMask = header.fTriggerMask;
99 fOrbitNumber = header.fOrbitNumber;
100 fTimeStamp = header.fTimeStamp;
101 fEventType = header.fEventType;
102 fEventSpecie = header.fEventSpecie;
103 fPeriodNumber = header.fPeriodNumber;
104 fEventNumberInFile = header.fEventNumberInFile;
105 fBunchCrossNumber = header.fBunchCrossNumber;
106 fTriggerCluster = header.fTriggerCluster;
107 fL0TriggerInputs = header.fL0TriggerInputs;
108 fL1TriggerInputs = header.fL1TriggerInputs;
109 fL2TriggerInputs = header.fL2TriggerInputs;
110 fTriggerScalers = header.fTriggerScalers;
111
112 fTriggerInputsNames.Clear();
113 for(Int_t i = 0; i < kNTriggerInputs; i++) {
114 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
115 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
116 }
117
118 for(Int_t i = 0; i<kNMaxIR ; i++) {
119 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
120 else fIRArray[i]=0;
121 }
122 SetName(header.fName);
123 SetTitle(header.fTitle);
124
125 }
126 return *this;
127}
128
129void AliESDHeader::Copy(TObject &obj) const
130{
131 // this overwrites the virtual TOBject::Copy()
132 // to allow run time copying without casting
133 // in AliESDEvent
134
135 if(this==&obj)return;
136 AliESDHeader *robj = dynamic_cast<AliESDHeader*>(&obj);
137 if(!robj)return; // not an AliESDHeader
138 *robj = *this;
139
140}
141//______________________________________________________________________________
142void AliESDHeader::Reset()
143{
144 // reset all data members
145 fTriggerMask = 0;
146 fOrbitNumber = 0;
147 fTimeStamp = 0;
148 fEventType = 0;
149 fEventSpecie = 0;
150 fPeriodNumber = 0;
151 fEventNumberInFile = 0;
152 fBunchCrossNumber = 0;
153 fTriggerCluster = 0;
154 fL0TriggerInputs = 0;
155 fL1TriggerInputs = 0;
156 fL2TriggerInputs = 0;
157 fTriggerScalers.Reset();
158 fTriggerInputsNames.Clear();
159 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
160 delete fIRArray[i];
161 fIRArray[i]=0;
162 }
163}
164//______________________________________________________________________________
165Bool_t AliESDHeader::AddTriggerIR(const AliTriggerIR* ir)
166{
167 // Adds trigger interaction record to array
168 for(Int_t i=0;i<kNMaxIR;i++){
169 if(!fIRArray[i]){
170 fIRArray[i]=new AliTriggerIR(*ir);
171 return 0;
172 }
173 }
174 //AliErrorClass("Attempt to add # of IRs > kNMaxIR \n");
175 return 1;
176}
177//______________________________________________________________________________
178void AliESDHeader::Print(const Option_t *) const
179{
180 // Print some data members
181 printf("Event # %d in file Bunch crossing # %d Orbit # %d Trigger %lld \n",
182 GetEventNumberInFile(),
183 GetBunchCrossNumber(),
184 GetOrbitNumber(),
185 GetTriggerMask());
186 printf("List of the active trigger inputs: ");
187 for(Int_t i = 0; i < kNTriggerInputs; i++) {
188 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
189 if (str) printf("%s ",str->GetName());
190 }
191 printf("\n");
192}
193
194
195//______________________________________________________________________________
196void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
197{
198 // Fill the active trigger inputs names
199 // into the corresponding fTriggerInputsNames (TObjArray of TNamed)
200 if (index >= kNTriggerInputs || index < 0) {
201 AliError(Form("Index (%d) is outside the allowed range (0,59)!",index));
202 return;
203 }
204
205 fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
206}
207//______________________________________________________________________________
208const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
209{
210 // Get the trigger input name
211 // at the specified position in the trigger mask and trigger level (0,1,2)
212 TNamed *trginput = 0;
213 if (trglevel == 0) trginput = (TNamed *)fTriggerInputsNames.At(index);
214 if (trglevel == 1) trginput = (TNamed *)fTriggerInputsNames.At(index+24);
215 if (trglevel == 2) trginput = (TNamed *)fTriggerInputsNames.At(index+48);
216 if (trginput) return trginput->GetName();
217 else return "";
218}
219//______________________________________________________________________________
220TString AliESDHeader::GetActiveTriggerInputs() const
221{
222 // Returns the list with the names of the active trigger inputs
223 TString trginputs;
224 for(Int_t i = 0; i < kNTriggerInputs; i++) {
225 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
226 if (str) {
227 trginputs += " ";
228 trginputs += str->GetName();
229 trginputs += " ";
230 }
231 }
232
233 return trginputs;
234}
235//______________________________________________________________________________
236TString AliESDHeader::GetFiredTriggerInputs() const
237{
238 // Returns the list with the names of the fired trigger inputs
239 TString trginputs;
240 for(Int_t i = 0; i < kNTriggerInputs; i++) {
241 TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
242 if (i < 24 && (fL0TriggerInputs & (1 << i))) {
243 if (str) {
244 trginputs += " ";
245 trginputs += str->GetName();
246 trginputs += " ";
247 }
248 }
249 if (i >= 24 && i < 48 && (fL1TriggerInputs & (1 << (i-24)))) {
250 if (str) {
251 trginputs += " ";
252 trginputs += str->GetName();
253 trginputs += " ";
254 }
255 }
256 if (i >= 48 && (fL2TriggerInputs & (1 << (i-48)))) {
257 if (str) {
258 trginputs += " ";
259 trginputs += str->GetName();
260 trginputs += " ";
261 }
262 }
263
264 }
265 return trginputs;
266}
267//______________________________________________________________________________
268Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
269{
270 // Checks if the trigger input is fired
271
272 TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
273 if (!trginput) return kFALSE;
274
275 Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
276 if (inputIndex < 0) return kFALSE;
277
278 if (fL0TriggerInputs & (1 << inputIndex)) return kTRUE;
279 else if (fL1TriggerInputs & (1 << (inputIndex-24))) return kTRUE;
280 else if (fL2TriggerInputs & (1 << (inputIndex-48))) return kTRUE;
281 else return kFALSE;
282}
283//_______________________________________________________________________________