]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowLYZHist1.cxx
gain set to 1 for all ch
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowLYZHist1.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, 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
17 //#include "Riostream.h"  //in case one wants to make print statements
18 #include "TProfile.h"
19 #include "TString.h" 
20 #include "TComplex.h" 
21 #include "TList.h"
22 #include "AliFlowLYZConstants.h" 
23 #include "AliFlowLYZHist1.h"
24
25 class TH1D; 
26
27 // Class to organize the histograms in the first run
28 // in the Lee Yang Zeros Flow analysis.
29 // Also contains methods to find the first minimum R0
30 // of the generating function.
31 // author: N. van der Kolk (kolk@nikhef.nl)
32
33 ClassImp(AliFlowLYZHist1)
34
35 //-----------------------------------------------------------------------
36
37   AliFlowLYZHist1::AliFlowLYZHist1():
38     TObject(),
39     fHistGtheta(0),
40     fHistProReGtheta(0),
41     fHistProImGtheta(0),
42     fHistList(NULL)
43 {
44   //default constructor
45
46
47 //-----------------------------------------------------------------------
48
49   AliFlowLYZHist1::AliFlowLYZHist1(Int_t theta):
50     TObject(),
51     fHistGtheta(0),
52     fHistProReGtheta(0),
53     fHistProImGtheta(0),
54     fHistList(NULL)
55 {
56
57   //constructor creating histograms 
58   Int_t iNbins = AliFlowLYZConstants::kNbins;
59   Double_t dMin = AliFlowLYZConstants::fgMin;
60   Double_t dMax = AliFlowLYZConstants::fgMax;
61   TString title, name;
62  
63   
64   //fHistGtheta
65   name = "First_Flow_Gtheta";
66   name +=theta;
67   name +="_LYZ";
68   title = "First_Flow_Gtheta";
69   title +=theta;
70   title +="_LYZ";
71   fHistGtheta = new TH1D(name.Data(),title.Data(),iNbins,dMin,dMax);  
72   fHistGtheta->SetXTitle("r");
73   fHistGtheta->SetYTitle("|G^{#theta}(ir)|^{2}");
74   
75   //fHistProReGtheta
76   name = "First_FlowPro_ReGtheta";
77   name +=theta;
78   name +="_LYZ";
79   title = "First_FlowPro_ReGtheta";
80   title +=theta;
81   title +="_LYZ";
82   fHistProReGtheta = new TProfile(name.Data(),title.Data(),iNbins,dMin,dMax);
83   fHistProReGtheta->SetXTitle("r");
84   fHistProReGtheta->SetYTitle("Re G^{#theta}(ir)");
85   
86   //fHistProImGtheta
87   name = "First_FlowPro_ImGtheta";
88   name +=theta;
89   name +="_LYZ";
90   title = "First_FlowPro_ImGtheta";
91   title +=theta;
92   title +="_LYZ";
93   fHistProImGtheta = new TProfile(name.Data(),title.Data(),iNbins,dMin,dMax);
94   fHistProImGtheta->SetXTitle("r");
95   fHistProImGtheta->SetYTitle("Im G^{#theta}(ir)");
96
97   //list of histograms
98   fHistList = new TList();
99   fHistList-> Add(fHistGtheta);
100   fHistList-> Add(fHistProReGtheta);
101   fHistList-> Add(fHistProImGtheta);
102       
103 }
104   
105 //----------------------------------------------------------------------- 
106
107 AliFlowLYZHist1::~AliFlowLYZHist1()
108 {
109   //deletes histograms
110   delete fHistGtheta;
111   delete fHistProReGtheta;
112   delete fHistProImGtheta;
113   delete fHistList;
114 }
115
116 //----------------------------------------------------------------------- 
117
118 void AliFlowLYZHist1::Fill(Double_t f, TComplex c)
119 {
120   //fill the histograms
121
122   fHistProReGtheta->Fill(f, c.Re());
123   fHistProImGtheta->Fill(f, c.Im());
124 }
125
126 //----------------------------------------------------------------------- 
127
128 TH1D* AliFlowLYZHist1::FillGtheta()
129 {
130   //fill the fHistGtheta histograms
131   Int_t iNbins = fHistGtheta->GetNbinsX();
132   for (Int_t bin=1;bin<=iNbins;bin++)
133         {
134           //get bincentre of bins in histogram
135           Double_t dBin = fHistGtheta->GetBinCenter(bin); 
136           Double_t dRe = fHistProReGtheta->GetBinContent(bin);
137           Double_t dIm = fHistProImGtheta->GetBinContent(bin);
138           TComplex cGtheta(dRe,dIm);
139           //fill fHistGtheta with the modulus squared of cGtheta
140           fHistGtheta->Fill(dBin,cGtheta.Rho2());
141         }
142
143   return fHistGtheta;
144 }
145
146 //----------------------------------------------------------------------- 
147
148 Double_t AliFlowLYZHist1::GetR0()
149 {
150   //find the first minimum of the square of the modulus of Gtheta 
151
152   Int_t iNbins = fHistGtheta->GetNbinsX();
153   Double_t dR0 = 0.; 
154
155   for (Int_t b=2;b<iNbins;b++)
156     {
157       Double_t dG0 = fHistGtheta->GetBinContent(b);
158       Double_t dGnext = fHistGtheta->GetBinContent(b+1);
159       Double_t dGnextnext = fHistGtheta->GetBinContent(b+2);
160       
161       if (dGnext > dG0 && dGnextnext > dG0)
162         {
163           Double_t dGlast = fHistGtheta->GetBinContent(b-1);
164           Double_t dXlast = fHistGtheta->GetBinCenter(b-1);
165           Double_t dX0 = fHistGtheta->GetBinCenter(b);
166           Double_t dXnext = fHistGtheta->GetBinCenter(b+1);
167
168           dR0 = dX0 - ((dX0-dXlast)*(dX0-dXlast)*(dG0-dGnext) - (dX0-dXnext)*(dX0-dXnext)*(dG0-dGlast))/
169             (2.*((dX0-dXlast)*(dG0-dGnext) - (dX0-dXnext)*(dG0-dGlast))); //interpolated minimum
170           
171           break; //stop loop if minimum is found
172         } //if
173
174     }//b
175
176       
177   return dR0;
178 }
179    
180 //----------------------------------------------------------------------- 
181 Double_t AliFlowLYZHist1::GetBinCenter(Int_t i)
182 {
183   //gets bincenter of histogram
184   Double_t dR = fHistGtheta->GetBinCenter(i);
185   return dR;
186 }
187
188 //----------------------------------------------------------------------- 
189
190 Int_t AliFlowLYZHist1::GetNBins()
191 {
192   //gets iNbins
193   Int_t iNbins = fHistGtheta->GetNbinsX();
194   return iNbins;
195 }
196
197 //----------------------------------------------------------------------- 
198  Double_t AliFlowLYZHist1::Merge(TCollection *aList)
199 {
200   //merge fuction
201   if (!aList) return 0;
202   if (aList->IsEmpty()) return 0; //no merging is needed
203
204   Int_t iCount = 0;
205   TIter next(aList); // list is supposed to contain only objects of the same type as this
206   AliFlowLYZHist1 *toMerge;
207   // make a temporary list
208   TList *pTemp = new TList();
209   while ((toMerge=(AliFlowLYZHist1*)next())) {
210     pTemp->Add(toMerge->GetHistList()); 
211     iCount++;
212   }
213   // Now call merge for fHistList providing temp list
214   fHistList->Merge(pTemp);
215   // Cleanup
216   delete pTemp;
217     
218   return (double)iCount;
219     
220 }
221