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"
29 #include "AliFlowVector.h"
30 #include "AliFlowLYZConstants.h"
31 #include "AliFlowEventSimple.h"
32 #include "AliFlowLYZEventPlane.h"
34 class AliFlowTrackSimple;
36 ClassImp(AliFlowLYZEventPlane)
38 //-----------------------------------------------------------------------
40 AliFlowLYZEventPlane::AliFlowLYZEventPlane():
42 fSecondRunFileName("noname.ESD"),
52 //-----------------------------------------------------------------------
55 AliFlowLYZEventPlane::~AliFlowLYZEventPlane()
62 //-----------------------------------------------------------------------
63 void AliFlowLYZEventPlane::Init()
65 //Declare histograms & get input files
66 cout<<"---Lee Yang Zeros Event Plane Method---"<<endl;
69 if (fSecondRunFile->IsZombie()){ //check if file exists
70 cout << "Error opening file, run first regular LYZ second run" << endl;
72 } else if (fSecondRunFile->IsOpen()){
73 cout<<"----secondRunFile is open----"<<endl;
75 TList* list = (TList*)fSecondRunFile->Get("cobj1");
76 fSecondReDtheta = ( TProfile*)list->FindObject("Second_FlowPro_ReDtheta_LYZ");
77 fSecondImDtheta = ( TProfile*)list->FindObject("Second_FlowPro_ImDtheta_LYZ");
78 fFirstr0theta = ( TProfile*)list->FindObject("First_FlowPro_r0theta_LYZ");
83 //-----------------------------------------------------------------------
84 void AliFlowLYZEventPlane::CalculateRPandW(AliFlowVector aQ)
87 Int_t iNtheta = AliFlowLYZConstants::kTheta;
88 Double_t dCosTerm = 0;
89 Double_t dSinTerm = 0;
93 for (Int_t theta=0;theta<iNtheta;theta++) {
94 Double_t dTheta = ((float)theta/iNtheta)*TMath::Pi()/2;
96 Double_t dQtheta = aQ.X()*cos(2*dTheta)+aQ.Y()*sin(2*dTheta); //get Qtheta from Q vector
99 Double_t dR0 = fFirstr0theta->GetBinContent(theta+1);
100 //cerr<<"dR0 = "<<dR0<<endl;
103 Double_t dReDtheta = fSecondReDtheta->GetBinContent(theta+1);
104 //cerr<<"dReDtheta = "<<dReDtheta<<endl;
105 Double_t dImDtheta = fSecondImDtheta->GetBinContent(theta+1);
106 //cerr<<"dImDtheta = "<<dImDtheta<<endl;
107 cDtheta(dReDtheta,dImDtheta);
109 TComplex cExpo(0.,dR0*dQtheta); //Complex number: 0 +(i r0 Qtheta)
110 if (cDtheta.Rho()!=0.) { cRatio =(TComplex::Exp(cExpo))/cDtheta; } //(e^(i r0 Qtheta))/Dtheta
111 else { cRatio(0.,0.); }
114 dCosTerm += cRatio.Re() * TMath::Cos(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } cos(2 theta)
115 dSinTerm += cRatio.Re() * TMath::Sin(2*dTheta); //Re{(e^(i r0 Qtheta))/Dtheta } sin(2 theta)
122 //cerr<<"cosTerm & sinTerm are: "<<dCosTerm<<" & "<<dSinTerm<<endl;
125 fWR = TMath::Sqrt(dCosTerm*dCosTerm + dSinTerm*dSinTerm);
128 fPsi = 0.5*TMath::ATan2(dSinTerm,dCosTerm); //takes care of the signs correctly!
129 if (fPsi < 0.) { fPsi += TMath::Pi(); } //to shift distribution from (-pi/2 to pi/2) to (0 to pi)