1 /**************************************************************************
2 * Copyright(c) 1998-2008, 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 // Class AliEventplane
18 // author: Alberica Toia, Johanna Gramling
19 //*****************************************************
20 /// A container for the event plane stored in AOD in ESD
23 #include "AliEventplane.h"
25 #include "AliVTrack.h"
26 #include "TObjArray.h"
28 #include "AliVEvent.h"
29 #include "AliVVZERO.h"
31 ClassImp(AliEventplane)
33 AliEventplane::AliEventplane() : TNamed("Eventplane", "Eventplane"),
37 fQContributionXsub1(0),
38 fQContributionYsub1(0),
39 fQContributionXsub2(0),
40 fQContributionYsub2(0),
47 fQContributionX = new TArrayF(0);
48 fQContributionY = new TArrayF(0);
49 fQContributionXsub1 = new TArrayF(0);
50 fQContributionYsub1 = new TArrayF(0);
51 fQContributionXsub2 = new TArrayF(0);
52 fQContributionYsub2 = new TArrayF(0);
55 AliEventplane::AliEventplane(const AliEventplane& ep) :
60 fQContributionXsub1(0),
61 fQContributionYsub1(0),
62 fQContributionXsub2(0),
63 fQContributionYsub2(0),
70 ((AliEventplane &) ep).CopyEP(*this);
73 AliEventplane& AliEventplane::operator=(const AliEventplane& ep)
75 /// Assignment operator
77 ((AliEventplane &) ep).CopyEP(*this);
82 void AliEventplane::CopyEP(AliEventplane& ep) const
85 AliEventplane& target = (AliEventplane &) ep;
87 target.fQContributionX = fQContributionX;
89 target.fQContributionY = fQContributionY;
90 if (fQContributionXsub1)
91 target.fQContributionXsub1 = fQContributionXsub1;
92 if (fQContributionYsub1)
93 target.fQContributionYsub1 = fQContributionYsub1;
94 if (fQContributionXsub2)
95 target.fQContributionXsub2 = fQContributionXsub2;
96 if (fQContributionYsub2)
97 target.fQContributionYsub2 = fQContributionYsub2;
99 target.fEventplaneQ = fEventplaneQ;
101 target.fQVector = dynamic_cast<TVector2*> (fQVector->Clone());
103 target.fQsub1 = dynamic_cast<TVector2*> (fQsub1->Clone());
105 target.fQsub2 = dynamic_cast<TVector2*> (fQsub2->Clone());
107 target.fQsubRes = fQsubRes;
110 AliEventplane::~AliEventplane()
113 if (fQContributionX){
114 delete fQContributionX;
117 if (fQContributionY){
118 delete fQContributionY;
121 if (fQContributionXsub1){
122 delete fQContributionXsub1;
123 fQContributionXsub1 = 0;
125 if (fQContributionYsub1){
126 delete fQContributionYsub1;
127 fQContributionYsub1 = 0;
129 if (fQContributionXsub2){
130 delete fQContributionXsub2;
131 fQContributionXsub2 = 0;
133 if (fQContributionYsub2){
134 delete fQContributionYsub2;
135 fQContributionYsub2 = 0;
151 TVector2* AliEventplane::GetQVector()
156 Double_t AliEventplane::GetEventplane(const char *x, const AliVEvent *event, Int_t harmonic) const
159 if(method.CompareTo("Q")==0) return fEventplaneQ;
160 else if(method.CompareTo("V0A")==0) return CalculateVZEROEventPlane(event, 4, 7, harmonic);
161 else if(method.CompareTo("V0C")==0) return CalculateVZEROEventPlane(event, 0, 3, harmonic);
162 else if(method.CompareTo("V0")==0) return CalculateVZEROEventPlane(event, 0, 7, harmonic);
167 Double_t AliEventplane::CalculateVZEROEventPlane(const AliVEvent * event, Int_t firstRing, Int_t lastRing, Int_t harmonic) const
170 AliError("No Event received");
173 AliVVZERO *vzeroData = event->GetVZEROData();
175 AliError("Enable to get VZERO Data");
179 AliError("Required harmonic is less or equal to 0");
183 Double_t qx=0., qy=0.;
184 for(Int_t iCh = firstRing*8; iCh < (lastRing+1)*8; ++iCh) {
185 Double_t phi = TMath::Pi()/8. + (iCh%8) * TMath::Pi()/4.;
187 Double_t mult = event->GetVZEROEqMultiplicity(iCh);
189 qx += mult*TMath::Cos(harmonic*phi);
190 qy += mult*TMath::Sin(harmonic*phi);
192 return (TMath::ATan2(qy,qx)/harmonic);
196 TVector2* AliEventplane::GetQsub1()
201 TVector2* AliEventplane::GetQsub2()
206 Double_t AliEventplane::GetQsubRes()
211 Bool_t AliEventplane::IsEventInEventplaneClass(Double_t a, Double_t b, const char *x)
214 if ((method.CompareTo("Q")==0) && (fEventplaneQ >=a && fEventplaneQ < b)) return kTRUE;
218 Double_t AliEventplane::GetQContributionX(AliVTrack* track)
220 return fQContributionX->GetAt(track->GetID());
223 Double_t AliEventplane::GetQContributionY(AliVTrack* track)
225 return fQContributionY->GetAt(track->GetID());
228 Double_t AliEventplane::GetQContributionXsub1(AliVTrack* track)
230 return fQContributionXsub1->GetAt(track->GetID());
233 Double_t AliEventplane::GetQContributionYsub1(AliVTrack* track)
235 return fQContributionYsub1->GetAt(track->GetID());
238 Double_t AliEventplane::GetQContributionXsub2(AliVTrack* track)
240 return fQContributionXsub2->GetAt(track->GetID());
243 Double_t AliEventplane::GetQContributionYsub2(AliVTrack* track)
245 return fQContributionYsub2->GetAt(track->GetID());
248 void AliEventplane::Reset()
250 delete fQVector; fQVector=0;
251 fQContributionX->Reset();
252 fQContributionY->Reset();
253 fQContributionXsub1->Reset();
254 fQContributionYsub1->Reset();
255 fQContributionXsub2->Reset();
256 fQContributionYsub2->Reset();
258 delete fQsub1; fQsub1=0;
259 delete fQsub2; fQsub2=0;