]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AOD/AliAODHeader.h
Merge branch 'master' into TPCdev
[u/mrichter/AliRoot.git] / STEER / AOD / AliAODHeader.h
1 #ifndef ALIAODHEADER_H
2 #define ALIAODHEADER_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------------------------
9 //     AOD event header class
10 //     Author: Markus Oldenburg, CERN
11 //-------------------------------------------------------------------------
12
13 #include <TVector2.h>
14
15 #include "AliVHeader.h"
16 #include "AliVAODHeader.h"
17 #include "AliAODVertex.h"
18 #include <TString.h>
19 #include <TBits.h>
20 #include "AliCentrality.h"
21 #include "AliEventplane.h"
22
23 class TGeoHMatrix;
24 class TString;
25
26
27 class AliAODHeader : public AliVAODHeader {
28
29  public :
30   AliAODHeader();
31  
32   AliAODHeader(Int_t nRun, UShort_t nBunchX, UInt_t nOrbit, UInt_t nPeriod, const Char_t *title="");
33   AliAODHeader(Int_t nRun, 
34                UShort_t nBunchX,
35                UInt_t nOrbit,
36                UInt_t nPeriod,
37                Int_t refMult,
38                Int_t refMultPos,
39                Int_t refMultNeg,
40                Int_t refMultComb05,
41                Int_t refMultComb08,
42                Double_t magField,
43                Double_t muonMagFieldScale,
44                Double_t cent,
45                Double_t eventplane,
46                Double_t n1Energy,
47                Double_t p1Energy,
48                Double_t n2Energy,
49                Double_t p2Energy,
50                Double_t *emEnergy,
51                ULong64_t fTriggerMask,
52                UChar_t   fTriggerCluster,
53                UInt_t    fEventType,
54                const Float_t *vzeroEqFactors,
55                const Char_t *title="",
56                Int_t nMuons=0,
57                Int_t nDimuons=0,
58                Int_t nGlobalMuons=0,             // AU
59                Int_t nGlobalDimuons=0);          // AU
60   
61   virtual ~AliAODHeader();
62   AliAODHeader(const AliAODHeader& evt); 
63   AliAODHeader& operator=(const AliAODHeader& evt);
64   Bool_t    InitMagneticField() const;
65
66   Int_t     GetRunNumber()          const { return fRunNumber;}
67   Int_t     GetEventNumberESDFile() const { return fEventNumberESDFile;}
68   Int_t     GetNumberOfESDTracks()    const { return fNumberESDTracks;}
69   UShort_t  GetBunchCrossNumber()   const { return fBunchCrossNumber; }
70   UInt_t    GetOrbitNumber()        const { return fOrbitNumber; }
71   UInt_t    GetPeriodNumber()       const { return fPeriodNumber; }
72   ULong64_t GetTriggerMask()        const { return fTriggerMask; }
73   UChar_t   GetTriggerCluster()     const { return fTriggerCluster; }
74   TString   GetFiredTriggerClasses()const { return fFiredTriggers;}
75   UInt_t    GetEventType()          const { return fEventType; }
76   Double_t  GetMagneticField()      const { return fMagneticField; }
77   Double_t  GetMuonMagFieldScale()  const { return fMuonMagFieldScale; }
78   
79   Double_t  GetCentrality()         const { return fCentrality; }
80   Double_t  GetEventplane()         const { return fEventplane; }
81   Double_t  GetEventplaneMag()      const { return fEventplaneMag; }
82   Double_t  GetEventplaneQx()       const { return fEventplaneQx; }
83   Double_t  GetEventplaneQy()       const { return fEventplaneQy; }
84   Double_t  GetZDCN1Energy()        const { return fZDCN1Energy; }
85   Double_t  GetZDCP1Energy()        const { return fZDCP1Energy; }
86   Double_t  GetZDCN2Energy()        const { return fZDCN2Energy; }
87   Double_t  GetZDCP2Energy()        const { return fZDCP2Energy; }
88   Double_t  GetZDCEMEnergy(Int_t i) const { return fZDCEMEnergy[i]; }
89   Int_t     GetRefMultiplicity()    const { return fRefMult; }
90   Int_t     GetRefMultiplicityPos() const { return fRefMultPos; }
91   Int_t     GetRefMultiplicityNeg() const { return fRefMultNeg; }
92   Int_t     GetNumberOfMuons()      const { return fNMuons; }
93   Int_t     GetNumberOfDimuons()    const { return fNDimuons; }
94   Int_t     GetNumberOfGlobalMuons()   const { return fNGlobalMuons; }      // AU
95   Int_t     GetNumberOfGlobalDimuons() const { return fNGlobalDimuons; }    // AU
96   Int_t     GetRefMultiplicityComb05() const { return fRefMultComb05; }
97   Int_t     GetRefMultiplicityComb08() const { return fRefMultComb08; }
98
99   Double_t  GetQTheta(UInt_t i) const;
100   UInt_t    GetNQTheta() const { return (UInt_t)fNQTheta; }
101
102   Double_t GetDiamondX() const {return fDiamondXY[0];}
103   Double_t GetDiamondY() const {return fDiamondXY[1];}
104   Double_t GetDiamondZ() const {return fDiamondZ;}
105   Double_t GetSigma2DiamondX() const {return fDiamondCovXY[0];}
106   Double_t GetSigma2DiamondY() const {return fDiamondCovXY[2];}
107   Double_t GetSigma2DiamondZ() const {return fDiamondSig2Z;}
108   void GetDiamondCovXY(Float_t cov[3]) const {
109     for(Int_t i=0;i<3;i++) cov[i]=fDiamondCovXY[i]; return;
110   }
111   UInt_t   GetL0TriggerInputs() const {return fL0TriggerInputs;}  
112   UInt_t   GetL1TriggerInputs() const {return fL1TriggerInputs;} 
113   UShort_t GetL2TriggerInputs() const {return fL2TriggerInputs;} 
114   AliCentrality* GetCentralityP()  const { return fCentralityP; }
115   AliEventplane* GetEventplaneP()  const { return fEventplaneP; }
116
117   
118   void SetRunNumber(Int_t nRun)                { fRunNumber = nRun; }
119   void SetEventNumberESDFile(Int_t n)          { fEventNumberESDFile=n; }
120   void SetNumberOfESDTracks(Int_t n)           { fNumberESDTracks=n; }
121   void SetBunchCrossNumber(UShort_t nBx)       { fBunchCrossNumber = nBx; }
122   void SetOrbitNumber(UInt_t nOr)              { fOrbitNumber = nOr; }
123   void SetPeriodNumber(UInt_t nPer)            { fPeriodNumber = nPer; }
124   void SetTriggerMask(ULong64_t trigMsk)       { fTriggerMask = trigMsk; }
125   void SetFiredTriggerClasses(TString trig)    { fFiredTriggers = trig;}
126   void SetTriggerCluster(UChar_t trigClus)     { fTriggerCluster = trigClus; }
127   void SetEventType(UInt_t evttype)            { fEventType = evttype; }
128   void SetMagneticField(Double_t magFld)       { fMagneticField = magFld; }
129   void SetMuonMagFieldScale(Double_t magFldScl){ fMuonMagFieldScale = magFldScl; }
130   void SetCentrality(const AliCentrality* cent);
131   void SetEventplane(AliEventplane* eventplane);
132   void SetZDCN1Energy(Double_t n1Energy)       { fZDCN1Energy = n1Energy; }
133   void SetZDCP1Energy(Double_t p1Energy)       { fZDCP1Energy = p1Energy; }
134   void SetZDCN2Energy(Double_t n2Energy)       { fZDCN2Energy = n2Energy; }
135   void SetZDCP2Energy(Double_t p2Energy)       { fZDCP2Energy = p2Energy; }
136   void SetZDCEMEnergy(Double_t emEnergy1, Double_t emEnergy2)      
137         { fZDCEMEnergy[0] = emEnergy1; fZDCEMEnergy[1] = emEnergy2;}
138   void SetRefMultiplicity(Int_t refMult)       { fRefMult = refMult; }
139   void SetRefMultiplicityPos(Int_t refMultPos) { fRefMultPos = refMultPos; }
140   void SetRefMultiplicityNeg(Int_t refMultNeg) { fRefMultNeg = refMultNeg; }
141   void SetNumberOfMuons(Int_t nMuons) { fNMuons = nMuons; }
142   void SetNumberOfDimuons(Int_t nDimuons) { fNDimuons = nDimuons; }
143   void SetNumberOfGlobalMuons(Int_t nGlobalMuons) { fNGlobalMuons = nGlobalMuons; }            // AU
144   void SetNumberOfGlobalDimuons(Int_t nGlobalDimuons) { fNGlobalDimuons = nGlobalDimuons; }    // AU
145   void SetRefMultiplicityComb05(Int_t refMult)   { fRefMultComb05 = refMult; }
146   void SetRefMultiplicityComb08(Int_t refMult)   { fRefMultComb08 = refMult; }  
147
148   void SetQTheta(Double_t *QTheta, UInt_t size = 5);  
149   void RemoveQTheta();
150
151   void ResetEventplanePointer();
152   
153   void SetDiamond(Float_t xy[2],Float_t cov[3]) { 
154     for(Int_t i=0;i<3;i++) {fDiamondCovXY[i] = cov[i];}
155     for(Int_t i=0;i<2;i++) {fDiamondXY[i]    = xy[i] ;}
156   }
157   void SetDiamondZ(Float_t z, Float_t sig2z){
158     fDiamondZ=z; fDiamondSig2Z=sig2z;
159   }
160   void SetL0TriggerInputs(UInt_t n)   {fL0TriggerInputs=n;}
161   void SetL1TriggerInputs(UInt_t n)   {fL1TriggerInputs=n;}
162   void SetL2TriggerInputs(UShort_t n) {fL2TriggerInputs=n;}
163   void SetESDFileName(TString name)   {fESDFileName = name;}
164   void Print(Option_t* option = "") const;
165
166   void    SetPHOSMatrix(TGeoHMatrix*matrix, Int_t i) {
167       if ((i >= 0) && (i < kNPHOSMatrix)) fPHOSMatrix[i] = matrix;
168   }
169   const TGeoHMatrix* GetPHOSMatrix(Int_t i) const {
170       return ((i >= 0) && (i < kNPHOSMatrix)) ? fPHOSMatrix[i] : NULL;
171   }
172   
173   void    SetEMCALMatrix(TGeoHMatrix*matrix, Int_t i) {
174       if ((i >= 0) && (i < kNEMCALMatrix)) fEMCALMatrix[i] = matrix;
175   }
176   const TGeoHMatrix* GetEMCALMatrix(Int_t i) const {
177       return ((i >= 0) && (i < kNEMCALMatrix)) ? fEMCALMatrix[i] : NULL;
178   }
179   
180   UInt_t GetOfflineTrigger() { return fOfflineTrigger; }
181   void   SetOfflineTrigger(UInt_t trigger) { fOfflineTrigger = trigger; }
182   UInt_t GetNumberOfITSClusters(Int_t ilay) const {return fITSClusters[ilay];}
183   void   SetITSClusters(Int_t ilay, UInt_t nclus);
184   Int_t  GetTPConlyRefMultiplicity() const {return fTPConlyRefMult;}
185   void   SetTPConlyRefMultiplicity(Int_t mult) {fTPConlyRefMult = mult;} 
186   
187   TString GetESDFileName() const  {return fESDFileName;}
188   void Clear(Option_t* = "");
189   enum {kNPHOSMatrix = 5};
190   enum {kNEMCALMatrix = 22}; 
191   enum {kT0SpreadSize = 4};
192
193   void           SetVZEROEqFactors(const Float_t* factors) {
194     if (factors)
195       for (Int_t i = 0; i < 64; ++i) fVZEROEqFactors[i] = factors[i];}
196   const Float_t* GetVZEROEqFactors() const {return fVZEROEqFactors;}
197   Float_t        GetVZEROEqFactors(Int_t i) const {return fVZEROEqFactors[i];}
198   Float_t    GetT0spread(Int_t i) const {
199     return ((i >= 0)  && (i<kT0SpreadSize)) ? fT0spread[i] : 0;}
200   void       SetT0spread(Int_t i, Float_t t) {
201     if ((i>=0)&&(i<kT0SpreadSize)) fT0spread[i]=t;}
202
203   Int_t  FindIRIntInteractionsBXMap(Int_t difference) const;
204   void   SetIRInt2InteractionMap(TBits bits) { fIRInt2InteractionsMap = bits; }
205   void   SetIRInt1InteractionMap(TBits bits) { fIRInt1InteractionsMap = bits; }
206   TBits  GetIRInt2InteractionMap() const { return fIRInt2InteractionsMap; }
207   TBits  GetIRInt1InteractionMap() const { return fIRInt1InteractionsMap; }
208   Int_t  GetIRInt2ClosestInteractionMap() const;
209   Int_t  GetIRInt1ClosestInteractionMap(Int_t gap = 3) const;
210   Int_t  GetIRInt2LastInteractionMap() const;
211   
212  private :
213   
214   Double32_t  fMagneticField;       // Solenoid Magnetic Field in kG
215   Double32_t  fMuonMagFieldScale;   // magnetic field scale of muon arm magnet
216   Double32_t  fCentrality;          // Centrality
217   Double32_t  fEventplane;          // Event plane angle
218   Double32_t  fEventplaneMag;       // Length of Q vector from TPC event plance
219   Double32_t  fEventplaneQx;        // Q vector component x from TPC event plance
220   Double32_t  fEventplaneQy;        // Q vector component y from TPC event plance
221   Double32_t  fZDCN1Energy;         // reconstructed energy in the neutron1 ZDC
222   Double32_t  fZDCP1Energy;         // reconstructed energy in the proton1 ZDC
223   Double32_t  fZDCN2Energy;         // reconstructed energy in the neutron2 ZDC
224   Double32_t  fZDCP2Energy;         // reconstructed energy in the proton2 ZDC
225   Double32_t  fZDCEMEnergy[2];      // reconstructed energy in the electromagnetic ZDCs
226   Int_t       fNQTheta;             // number of QTheta elements
227   Double32_t *fQTheta;              // [fNQTheta] values to store Lee-Yang-Zeros
228   ULong64_t   fTriggerMask;         // Trigger Type (mask)
229   TString     fFiredTriggers;       // String with fired triggers
230   Int_t       fRunNumber;           // Run Number
231   Int_t       fRefMult;             // reference multiplicity
232   Int_t       fRefMultPos;          // reference multiplicity of positive particles
233   Int_t       fRefMultNeg;          // reference multiplicity of negative particles
234   Int_t       fNMuons;              // number of muons in the forward spectrometer
235   Int_t       fNDimuons;            // number of dimuons in the forward spectrometer
236   Int_t       fNGlobalMuons;        // number of muons in the forward spectrometer + MFT       // AU
237   Int_t       fNGlobalDimuons;      // number of dimuons in the forward spectrometer + MFT     // AU
238   UInt_t      fEventType;           // Type of Event
239   UInt_t      fOrbitNumber;         // Orbit Number
240   UInt_t      fPeriodNumber;        // Period Number
241   UShort_t    fBunchCrossNumber;    // BunchCrossingNumber
242   Short_t     fRefMultComb05;       // combined reference multiplicity (tracklets + ITSTPC) in |eta|<0.5
243   Short_t     fRefMultComb08;       // combined reference multiplicity (tracklets + ITSTPC) in |eta|<0.8
244   UChar_t     fTriggerCluster;      // Trigger cluster (mask)
245   Double32_t      fDiamondXY[2];    // Interaction diamond (x,y) in RUN
246   Double32_t      fDiamondCovXY[3]; // Interaction diamond covariance (x,y) in RUN
247   Double32_t      fDiamondZ;        // Interaction diamond (z) in RUN
248   Double32_t      fDiamondSig2Z;    // Interaction diamond sigma^2 (z) in RUN
249   TGeoHMatrix*    fPHOSMatrix[kNPHOSMatrix];   //PHOS module position and orientation matrices
250   TGeoHMatrix*    fEMCALMatrix[kNEMCALMatrix]; //EMCAL supermodule position and orientation matrices
251   UInt_t      fOfflineTrigger;      // fired offline triggers for this event
252   TString     fESDFileName;         // ESD file name to which this event belongs
253   Int_t       fEventNumberESDFile;  // Event number in ESD file
254   Int_t       fNumberESDTracks;     // Number of tracks in origingal ESD event
255   UInt_t      fL0TriggerInputs;     // L0 Trigger Inputs (mask)
256   UInt_t      fL1TriggerInputs;     // L1 Trigger Inputs (mask)
257   UShort_t    fL2TriggerInputs;     // L2 Trigger Inputs (mask)
258   UInt_t      fITSClusters[6];      // Number of ITS cluster per layer
259   Int_t       fTPConlyRefMult;      // Reference multiplicty for standard TPC only tracks
260   AliCentrality* fCentralityP;      // Pointer to full centrality information
261   AliEventplane* fEventplaneP;      // Pointer to full event plane information
262   Float_t     fVZEROEqFactors[64];  // V0 channel equalization factors for event-plane reconstruction
263   Float_t     fT0spread[kT0SpreadSize]; // spread of time distributions: (TOA+T0C/2), T0A, T0C, (T0A-T0C)/2
264   TBits   fIRInt2InteractionsMap;  // map of the Int2 events (normally 0TVX) near the event, that's Int2Id-EventId in a -90 to 90 window
265   TBits   fIRInt1InteractionsMap;  // map of the Int1 events (normally V0A&V0C) near the event, that's Int1Id-EventId in a -90 to 90 window
266   ClassDef(AliAODHeader, 25);
267 };
268 inline
269 void AliAODHeader::SetCentrality(const AliCentrality* cent)      { 
270     if(cent){
271         if(fCentralityP)*fCentralityP = *cent;
272         else fCentralityP = new AliCentrality(*cent);
273         fCentrality = cent->GetCentralityPercentile("V0M");
274     }
275     else{
276         fCentrality = -999;
277     }
278 }
279 inline
280 void AliAODHeader::SetEventplane(AliEventplane* eventplane)      { 
281     if(eventplane){
282         if(fEventplaneP)*fEventplaneP = *eventplane;
283         else fEventplaneP = new AliEventplane(*eventplane);
284         fEventplane = eventplane->GetEventplane("Q");
285         const TVector2* qvect=eventplane->GetQVector();
286         fEventplaneMag = -999;
287         fEventplaneQx = -999;
288         fEventplaneQy = -999;
289         if (qvect) {
290           fEventplaneMag=qvect->Mod();
291           fEventplaneQx=qvect->X();
292           fEventplaneQy=qvect->Y();
293         }
294     }
295     else{
296         fEventplane = -999;
297         fEventplaneMag = -999;
298         fEventplaneQx = -999;
299         fEventplaneQy = -999;
300     }
301 }
302 inline
303 void AliAODHeader::ResetEventplanePointer()      {
304   delete fEventplaneP;
305   fEventplaneP = 0x0;
306 }
307
308 inline
309 void AliAODHeader::SetITSClusters(Int_t ilay, UInt_t nclus)
310 {
311     if (ilay >= 0 && ilay < 6) fITSClusters[ilay] = nclus;
312 }
313
314
315 #endif