]>
Commit | Line | Data |
---|---|---|
1 | /************************************************************************* | |
2 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
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 | **************************************************************************/ | |
15 | ||
16 | #define AliFlowAnalysisWithLYZEventPlane_cxx | |
17 | ||
18 | // AliFlowLYZEventPlane: | |
19 | // | |
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) | |
23 | ||
24 | #include "Riostream.h" | |
25 | #include "TProfile.h" | |
26 | #include "TFile.h" | |
27 | #include "TComplex.h" | |
28 | #include "TList.h" | |
29 | ||
30 | #include "AliFlowVector.h" | |
31 | #include "AliFlowLYZConstants.h" | |
32 | #include "AliFlowEventSimple.h" | |
33 | #include "AliFlowLYZEventPlane.h" | |
34 | ||
35 | class AliFlowTrackSimple; | |
36 | ||
37 | ClassImp(AliFlowLYZEventPlane) | |
38 | ||
39 | //----------------------------------------------------------------------- | |
40 | ||
41 | AliFlowLYZEventPlane::AliFlowLYZEventPlane(): | |
42 | fSecondRunList(0), | |
43 | fWR(0), | |
44 | fPsi(0), | |
45 | fSecondReDtheta(0), | |
46 | fSecondImDtheta(0), | |
47 | fFirstr0theta(0) | |
48 | { | |
49 | // Constructor. | |
50 | ||
51 | } | |
52 | //----------------------------------------------------------------------- | |
53 | ||
54 | ||
55 | AliFlowLYZEventPlane::~AliFlowLYZEventPlane() | |
56 | { | |
57 | //destructor | |
58 | delete fSecondRunList; | |
59 | } | |
60 | ||
61 | ||
62 | //----------------------------------------------------------------------- | |
63 | void AliFlowLYZEventPlane::Init() | |
64 | { | |
65 | //Declare histograms & get input files | |
66 | cout<<"---Lee Yang Zeros Event Plane Method---"<<endl; | |
67 | ||
68 | //input histograms | |
69 | if (fSecondRunList) { | |
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"); | |
73 | ||
74 | //warnings | |
75 | if (!fSecondReDtheta) {cout<<"fSecondReDtheta is NULL!"<<endl; } | |
76 | if (!fSecondImDtheta) {cout<<"fSecondImDtheta is NULL!"<<endl; } | |
77 | if (!fFirstr0theta) {cout<<"fFirstr0theta is NULL!"<<endl; } | |
78 | } | |
79 | ||
80 | ||
81 | } | |
82 | ||
83 | //----------------------------------------------------------------------- | |
84 | void AliFlowLYZEventPlane::CalculateRPandW(AliFlowVector aQ) | |
85 | { | |
86 | //declare variables | |
87 | Int_t iNtheta = AliFlowLYZConstants::GetMaster()->GetNtheta(); | |
88 | Double_t dCosTerm = 0; | |
89 | Double_t dSinTerm = 0; | |
90 | TComplex cDtheta; | |
91 | TComplex cRatio; | |
92 | ||
93 | if (aQ.Mod()==0.) { cout<<"Q vector is NULL"<<endl; } | |
94 | else { | |
95 | for (Int_t theta=0;theta<iNtheta;theta++) { | |
96 | Double_t dTheta = ((float)theta/iNtheta)*TMath::Pi()/2; | |
97 | //Calculate Qtheta | |
98 | Double_t dQtheta = aQ.X()*cos(2*dTheta)+aQ.Y()*sin(2*dTheta); //get Qtheta from Q vector | |
99 | ||
100 | //get R0 | |
101 | Double_t dR0 = fFirstr0theta->GetBinContent(theta+1); | |
102 | //cerr<<"dR0 = "<<dR0<<endl; | |
103 | ||
104 | //get Dtheta | |
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); | |
110 | ||
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.); } | |
114 | ||
115 | //sum over theta | |
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) | |
118 | ||
119 | }//loop over theta | |
120 | ||
121 | //average over theta | |
122 | dCosTerm /= iNtheta; | |
123 | dSinTerm /= iNtheta; | |
124 | //cerr<<"cosTerm & sinTerm are: "<<dCosTerm<<" & "<<dSinTerm<<endl; | |
125 | ||
126 | //calculate fWR | |
127 | fWR = TMath::Sqrt(dCosTerm*dCosTerm + dSinTerm*dSinTerm); | |
128 | ||
129 | //calculate fRP | |
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) | |
132 | } | |
133 | ||
134 | } | |
135 |