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;
39 ClassImp(AliFlowLYZEventPlane)
41 //-----------------------------------------------------------------------
43 AliFlowLYZEventPlane::AliFlowLYZEventPlane():
54 //-----------------------------------------------------------------------
57 AliFlowLYZEventPlane::~AliFlowLYZEventPlane()
60 delete fSecondRunList;
64 //-----------------------------------------------------------------------
65 void AliFlowLYZEventPlane::Init()
67 //Declare histograms & get input files
68 cout<<"---Lee Yang Zeros Event Plane Method---"<<endl;
72 fSecondReDtheta = (TProfile*)fSecondRunList->FindObject("Second_FlowPro_ReDtheta_LYZSUM");
73 fSecondImDtheta = (TProfile*)fSecondRunList->FindObject("Second_FlowPro_ImDtheta_LYZSUM");
74 fFirstr0theta = (TProfile*)fSecondRunList->FindObject("First_FlowPro_r0theta_LYZSUM");
77 if (!fSecondReDtheta) {cout<<"fSecondReDtheta is NULL!"<<endl; }
78 if (!fSecondImDtheta) {cout<<"fSecondImDtheta is NULL!"<<endl; }
79 if (!fFirstr0theta) {cout<<"fFirstr0theta is NULL!"<<endl; }
85 //-----------------------------------------------------------------------
86 void AliFlowLYZEventPlane::CalculateRPandW(AliFlowVector aQ)
89 Int_t iNtheta = AliFlowLYZConstants::GetMaster()->GetNtheta();
90 Double_t dCosTerm = 0;
91 Double_t dSinTerm = 0;
95 if (aQ.Mod()==0.) { cout<<"Q vector is NULL"<<endl; }
97 for (Int_t theta=0;theta<iNtheta;theta++) {
98 Double_t dTheta = ((float)theta/iNtheta)*TMath::Pi()/2;
100 Double_t dQtheta = aQ.X()*cos(2*dTheta)+aQ.Y()*sin(2*dTheta); //get Qtheta from Q vector
103 Double_t dR0 = fFirstr0theta->GetBinContent(theta+1);
104 //cerr<<"dR0 = "<<dR0<<endl;
107 Double_t dReDtheta = fSecondReDtheta->GetBinContent(theta+1);
108 //cerr<<"dReDtheta = "<<dReDtheta<<endl;
109 Double_t dImDtheta = fSecondImDtheta->GetBinContent(theta+1);
110 //cerr<<"dImDtheta = "<<dImDtheta<<endl;
111 cDtheta(dReDtheta,dImDtheta);
113 TComplex cExpo(0.,dR0*dQtheta); //Complex number: 0 +(i r0 Qtheta)
114 if (cDtheta.Rho()!=0.) { cRatio =(TComplex::Exp(cExpo))/cDtheta; } //(e^(i r0 Qtheta))/Dtheta
115 else { cRatio(0.,0.); }
118 dCosTerm += cRatio.Re() * TMath::Cos(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } cos(2 theta)
119 dSinTerm += cRatio.Re() * TMath::Sin(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } sin(2 theta)
126 //cerr<<"cosTerm & sinTerm are: "<<dCosTerm<<" & "<<dSinTerm<<endl;
129 fWR = TMath::Sqrt(dCosTerm*dCosTerm + dSinTerm*dSinTerm);
132 fPsi = 0.5*TMath::ATan2(dSinTerm,dCosTerm); //takes care of the signs correctly!
133 if (fPsi < 0.) { fPsi += TMath::Pi(); } //to shift distribution from (-pi/2 to pi/2) to (0 to pi)