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),
53 // default constructor
55 SetName("AliESDHeader");
56 for(Int_t i = 0; i<kNMaxIR ; i++) fIRArray[i] = 0;
57 fTriggerInputsNames.SetOwner(kTRUE);
60 AliESDHeader::~AliESDHeader()
63 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i])delete fIRArray[i];
68 AliESDHeader::AliESDHeader(const AliESDHeader &header) :
70 fTriggerMask(header.fTriggerMask),
71 fOrbitNumber(header.fOrbitNumber),
72 fTimeStamp(header.fTimeStamp),
73 fEventType(header.fEventType),
74 fEventSpecie(header.fEventSpecie),
75 fPeriodNumber(header.fPeriodNumber),
76 fEventNumberInFile(header.fEventNumberInFile),
77 fBunchCrossNumber(header.fBunchCrossNumber),
78 fTriggerCluster(header.fTriggerCluster),
79 fL0TriggerInputs(header.fL0TriggerInputs),
80 fL1TriggerInputs(header.fL1TriggerInputs),
81 fL2TriggerInputs(header.fL2TriggerInputs),
82 fTriggerScalers(header.fTriggerScalers),
83 fTriggerScalersDeltaEvent(header.fTriggerScalersDeltaEvent),
84 fTriggerScalersDeltaRun(header.fTriggerScalersDeltaRun),
85 fTriggerInputsNames(TObjArray(kNTriggerInputs)),
86 fCTPConfig(header.fCTPConfig)
89 SetName(header.fName);
90 SetTitle(header.fTitle);
91 for(Int_t i = 0; i<kNMaxIR ; i++) {
92 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
95 for(Int_t i = 0; i < kNTriggerInputs; i++) {
96 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
97 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
101 AliESDHeader& AliESDHeader::operator=(const AliESDHeader &header)
103 // assigment operator
105 AliVHeader::operator=(header);
106 fTriggerMask = header.fTriggerMask;
107 fOrbitNumber = header.fOrbitNumber;
108 fTimeStamp = header.fTimeStamp;
109 fEventType = header.fEventType;
110 fEventSpecie = header.fEventSpecie;
111 fPeriodNumber = header.fPeriodNumber;
112 fEventNumberInFile = header.fEventNumberInFile;
113 fBunchCrossNumber = header.fBunchCrossNumber;
114 fTriggerCluster = header.fTriggerCluster;
115 fL0TriggerInputs = header.fL0TriggerInputs;
116 fL1TriggerInputs = header.fL1TriggerInputs;
117 fL2TriggerInputs = header.fL2TriggerInputs;
118 fTriggerScalers = header.fTriggerScalers;
119 fTriggerScalersDeltaEvent = header.fTriggerScalersDeltaEvent;
120 fTriggerScalersDeltaRun = header.fTriggerScalersDeltaRun;
121 fCTPConfig = header.fCTPConfig;
123 fTriggerInputsNames.Clear();
124 for(Int_t i = 0; i < kNTriggerInputs; i++) {
125 TNamed *str = (TNamed *)((header.fTriggerInputsNames).At(i));
126 if (str) fTriggerInputsNames.AddAt(new TNamed(*str),i);
128 for(Int_t i = 0; i<kNMaxIR ; i++) {
129 if(header.fIRArray[i])fIRArray[i] = new AliTriggerIR(*header.fIRArray[i]);
132 SetName(header.fName);
133 SetTitle(header.fTitle);
138 void AliESDHeader::Copy(TObject &obj) const
140 // this overwrites the virtual TOBject::Copy()
141 // to allow run time copying without casting
144 if(this==&obj)return;
145 AliESDHeader *robj = dynamic_cast<AliESDHeader*>(&obj);
146 if(!robj)return; // not an AliESDHeader
150 //______________________________________________________________________________
151 void AliESDHeader::Reset()
153 // reset all data members
160 fEventNumberInFile = 0;
161 fBunchCrossNumber = 0;
163 fL0TriggerInputs = 0;
164 fL1TriggerInputs = 0;
165 fL2TriggerInputs = 0;
166 fTriggerScalers.Reset();
167 fTriggerScalersDeltaEvent.Reset();
168 fTriggerScalersDeltaRun.Reset();
169 fTriggerInputsNames.Clear();
172 for(Int_t i=0;i<kNMaxIR;i++)if(fIRArray[i]){
177 //______________________________________________________________________________
178 Bool_t AliESDHeader::AddTriggerIR(const AliTriggerIR* ir)
180 // Adds trigger interaction record to array
181 for(Int_t i=0;i<kNMaxIR;i++){
183 fIRArray[i]=new AliTriggerIR(*ir);
187 //AliErrorClass("Attempt to add # of IRs > kNMaxIR \n");
190 //______________________________________________________________________________
191 void AliESDHeader::Print(const Option_t *) const
193 // Print some data members
194 printf("Event # %d in file Bunch crossing # %d Orbit # %d Trigger %lld \n",
195 GetEventNumberInFile(),
196 GetBunchCrossNumber(),
199 printf("List of the active trigger inputs: ");
200 for(Int_t i = 0; i < kNTriggerInputs; i++) {
201 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
202 if (str) printf("%s ",str->GetName());
207 //______________________________________________________________________________
208 void AliESDHeader::SetActiveTriggerInputs(const char*name, Int_t index)
210 // Fill the active trigger inputs names
211 // into the corresponding fTriggerInputsNames (TObjArray of TNamed)
212 if (index >= kNTriggerInputs || index < 0) {
213 AliError(Form("Index (%d) is outside the allowed range (0,59)!",index));
217 fTriggerInputsNames.AddAt(new TNamed(name,NULL),index);
219 //______________________________________________________________________________
220 const char* AliESDHeader::GetTriggerInputName(Int_t index, Int_t trglevel) const
222 // Get the trigger input name
223 // at the specified position in the trigger mask and trigger level (0,1,2)
224 TNamed *trginput = 0;
225 if (trglevel == 0) trginput = (TNamed *)fTriggerInputsNames.At(index);
226 if (trglevel == 1) trginput = (TNamed *)fTriggerInputsNames.At(index+24);
227 if (trglevel == 2) trginput = (TNamed *)fTriggerInputsNames.At(index+48);
228 if (trginput) return trginput->GetName();
231 //______________________________________________________________________________
232 TString AliESDHeader::GetActiveTriggerInputs() const
234 // Returns the list with the names of the active trigger inputs
236 for(Int_t i = 0; i < kNTriggerInputs; i++) {
237 TNamed *str = (TNamed *)((fTriggerInputsNames).At(i));
240 trginputs += str->GetName();
247 //______________________________________________________________________________
248 TString AliESDHeader::GetFiredTriggerInputs() const
250 // Returns the list with the names of the fired trigger inputs
252 for(Int_t i = 0; i < kNTriggerInputs; i++) {
253 TNamed *str = (TNamed *)((fTriggerInputsNames.At(i)));
254 if (i < 24 && (fL0TriggerInputs & (1 << i))) {
257 trginputs += str->GetName();
261 if (i >= 24 && i < 48 && (fL1TriggerInputs & (1 << (i-24)))) {
264 trginputs += str->GetName();
268 if (i >= 48 && (fL2TriggerInputs & (1 << (i-48)))) {
271 trginputs += str->GetName();
279 //______________________________________________________________________________
280 Bool_t AliESDHeader::IsTriggerInputFired(const char *name) const
282 // Checks if the trigger input is fired
284 TNamed *trginput = (TNamed *)fTriggerInputsNames.FindObject(name);
285 if (!trginput) return kFALSE;
287 Int_t inputIndex = fTriggerInputsNames.IndexOf(trginput);
288 if (inputIndex < 0) return kFALSE;
290 if (fL0TriggerInputs & (1 << inputIndex)) return kTRUE;
291 else if (fL1TriggerInputs & (1 << (inputIndex-24))) return kTRUE;
292 else if (fL2TriggerInputs & (1 << (inputIndex-48))) return kTRUE;