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 #define AliFlowAnalysisWithLYZEventPlane_cxx
18 // AliFlowLYZEventPlane:
20 // Class to calculate the event plane and event weight from the LYZ method
21 // It needs input from the standard LYZ first and second run
22 // author: N. van der Kolk (kolk@nikhef.nl)
24 #include "Riostream.h"
30 #include "AliFlowVector.h"
31 #include "AliFlowLYZConstants.h"
32 #include "AliFlowEventSimple.h"
33 #include "AliFlowLYZEventPlane.h"
35 class AliFlowTrackSimple;
37 ClassImp(AliFlowLYZEventPlane)
39 //-----------------------------------------------------------------------
41 AliFlowLYZEventPlane::AliFlowLYZEventPlane():
52 //-----------------------------------------------------------------------
55 AliFlowLYZEventPlane::~AliFlowLYZEventPlane()
58 delete fSecondRunList;
62 //-----------------------------------------------------------------------
63 void AliFlowLYZEventPlane::Init()
65 //Declare histograms & get input files
66 cout<<"---Lee Yang Zeros Event Plane Method---"<<endl;
70 fSecondReDtheta = (TProfile*)fSecondRunList->FindObject("Second_FlowPro_ReDtheta_LYZSUM");
71 fSecondImDtheta = (TProfile*)fSecondRunList->FindObject("Second_FlowPro_ImDtheta_LYZSUM");
72 fFirstr0theta = (TProfile*)fSecondRunList->FindObject("First_FlowPro_r0theta_LYZSUM");
75 if (!fSecondReDtheta) {cout<<"fSecondReDtheta is NULL!"<<endl; }
76 if (!fSecondImDtheta) {cout<<"fSecondImDtheta is NULL!"<<endl; }
77 if (!fFirstr0theta) {cout<<"fFirstr0theta is NULL!"<<endl; }
83 //-----------------------------------------------------------------------
84 void AliFlowLYZEventPlane::CalculateRPandW(AliFlowVector aQ)
87 Int_t iNtheta = AliFlowLYZConstants::GetMaster()->GetNtheta();
88 Double_t dCosTerm = 0;
89 Double_t dSinTerm = 0;
93 if (aQ.Mod()==0.) { cout<<"Q vector is NULL"<<endl; }
95 for (Int_t theta=0;theta<iNtheta;theta++) {
96 Double_t dTheta = ((float)theta/iNtheta)*TMath::Pi()/2;
98 Double_t dQtheta = aQ.X()*cos(2*dTheta)+aQ.Y()*sin(2*dTheta); //get Qtheta from Q vector
101 Double_t dR0 = fFirstr0theta->GetBinContent(theta+1);
102 //cerr<<"dR0 = "<<dR0<<endl;
105 Double_t dReDtheta = fSecondReDtheta->GetBinContent(theta+1);
106 //cerr<<"dReDtheta = "<<dReDtheta<<endl;
107 Double_t dImDtheta = fSecondImDtheta->GetBinContent(theta+1);
108 //cerr<<"dImDtheta = "<<dImDtheta<<endl;
109 cDtheta(dReDtheta,dImDtheta);
111 TComplex cExpo(0.,dR0*dQtheta); //Complex number: 0 +(i r0 Qtheta)
112 if (cDtheta.Rho()!=0.) { cRatio =(TComplex::Exp(cExpo))/cDtheta; } //(e^(i r0 Qtheta))/Dtheta
113 else { cRatio(0.,0.); }
116 dCosTerm += cRatio.Re() * TMath::Cos(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } cos(2 theta)
117 dSinTerm += cRatio.Re() * TMath::Sin(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } sin(2 theta)
124 //cerr<<"cosTerm & sinTerm are: "<<dCosTerm<<" & "<<dSinTerm<<endl;
127 fWR = TMath::Sqrt(dCosTerm*dCosTerm + dSinTerm*dSinTerm);
130 fPsi = 0.5*TMath::ATan2(dSinTerm,dCosTerm); //takes care of the signs correctly!
131 if (fPsi < 0.) { fPsi += TMath::Pi(); } //to shift distribution from (-pi/2 to pi/2) to (0 to pi)