1 /**************************************************************************
2 * Copyright(c) 1998-1999, 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 **************************************************************************/
17 //#include "Riostream.h" //in case one wants to make print statements
22 #include "AliFlowLYZConstants.h"
23 #include "AliFlowLYZHist1.h"
28 // Class to organize the histograms in the first run
29 // in the Lee Yang Zeros Flow analysis.
30 // Also contains methods to find the first minimum R0
31 // of the generating function.
32 // author: N. van der Kolk (kolk@nikhef.nl)
34 ClassImp(AliFlowLYZHist1)
36 //-----------------------------------------------------------------------
38 AliFlowLYZHist1::AliFlowLYZHist1():
48 //-----------------------------------------------------------------------
50 AliFlowLYZHist1::AliFlowLYZHist1(Int_t theta, const char *anInput, Bool_t useSum):
51 TNamed(anInput,anInput),
58 //constructor creating histograms
59 Int_t iNbins = AliFlowLYZConstants::GetMaster()->GetNbins();
60 Double_t dMaxSUM = AliFlowLYZConstants::GetMaster()->GetMaxSUM();
61 Double_t dMaxPROD = AliFlowLYZConstants::GetMaster()->GetMaxPROD();
64 TString name, addlast;
66 if (useSum) { addlast = "LYZSUM"; }
67 else { addlast = "LYZPROD"; }
70 name = "First_Flow_Gtheta";
73 if (useSum) { fHistGtheta = new TH1D(name.Data(),name.Data(),iNbins,dMin,dMaxSUM); }
74 else { fHistGtheta = new TH1D(name.Data(),name.Data(),iNbins,dMin,dMaxPROD); }
75 fHistGtheta->SetXTitle("r");
76 fHistGtheta->SetYTitle("|G^{#theta}(ir)|^{2}");
79 name = "First_FlowPro_ReGtheta";
82 if (useSum) { fHistProReGtheta = new TProfile(name.Data(),name.Data(),iNbins,dMin,dMaxSUM); }
83 else { fHistProReGtheta = new TProfile(name.Data(),name.Data(),iNbins,dMin,dMaxPROD); }
84 fHistProReGtheta->SetXTitle("r");
85 fHistProReGtheta->SetYTitle("Re G^{#theta}(ir)");
88 name = "First_FlowPro_ImGtheta";
91 if (useSum) { fHistProImGtheta = new TProfile(name.Data(),name.Data(),iNbins,dMin,dMaxSUM); }
92 else { fHistProImGtheta = new TProfile(name.Data(),name.Data(),iNbins,dMin,dMaxPROD); }
93 fHistProImGtheta->SetXTitle("r");
94 fHistProImGtheta->SetYTitle("Im G^{#theta}(ir)");
97 fHistList = new TList();
98 fHistList-> Add(fHistGtheta);
99 fHistList-> Add(fHistProReGtheta);
100 fHistList-> Add(fHistProImGtheta);
104 //-----------------------------------------------------------------------
106 AliFlowLYZHist1::~AliFlowLYZHist1()
110 delete fHistProReGtheta;
111 delete fHistProImGtheta;
115 //-----------------------------------------------------------------------
117 void AliFlowLYZHist1::Fill(Double_t f, TComplex c)
119 //fill the histograms
121 fHistProReGtheta->Fill(f, c.Re());
122 fHistProImGtheta->Fill(f, c.Im());
125 //-----------------------------------------------------------------------
127 TH1D* AliFlowLYZHist1::FillGtheta()
129 //method called in Finish() of AliFlowAnalysisWithLeeYangZeroes
130 //fills the fHistGtheta histograms
132 Int_t iNbins = fHistGtheta->GetNbinsX();
133 for (Int_t bin=1;bin<=iNbins;bin++)
135 //get bincentre of bins in histogram
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 //to avoid errors when using a merged outputfile use SetBinContent() and not Fill()
141 fHistGtheta->SetBinContent(bin,cGtheta.Rho2());
142 fHistGtheta->SetBinError(bin,0.0);
148 //-----------------------------------------------------------------------
150 Double_t AliFlowLYZHist1::GetR0()
152 //find the first minimum of the square of the modulus of Gtheta
154 Int_t iNbins = fHistGtheta->GetNbinsX();
157 for (Int_t b=2;b<iNbins;b++)
159 Double_t dG0 = fHistGtheta->GetBinContent(b);
160 Double_t dGnext = fHistGtheta->GetBinContent(b+1);
161 Double_t dGnextnext = fHistGtheta->GetBinContent(b+2);
163 if (dGnext > dG0 && dGnextnext > dG0)
165 Double_t dGlast = fHistGtheta->GetBinContent(b-1);
166 Double_t dXlast = fHistGtheta->GetBinCenter(b-1);
167 Double_t dX0 = fHistGtheta->GetBinCenter(b);
168 Double_t dXnext = fHistGtheta->GetBinCenter(b+1);
170 dR0 = dX0 - ((dX0-dXlast)*(dX0-dXlast)*(dG0-dGnext) - (dX0-dXnext)*(dX0-dXnext)*(dG0-dGlast))/
171 (2.*((dX0-dXlast)*(dG0-dGnext) - (dX0-dXnext)*(dG0-dGlast))); //parabolic interpolated minimum
173 break; //stop loop if minimum is found
182 //-----------------------------------------------------------------------
183 Double_t AliFlowLYZHist1::GetBinCenter(Int_t i)
185 //gets bincenter of histogram
186 Double_t dR = fHistGtheta->GetBinCenter(i);
190 //-----------------------------------------------------------------------
192 Int_t AliFlowLYZHist1::GetNBins()
195 Int_t iNbins = fHistGtheta->GetNbinsX();
199 //-----------------------------------------------------------------------
200 Double_t AliFlowLYZHist1::Merge(TCollection *aList)
203 if (!aList) return 0;
204 if (aList->IsEmpty()) return 0; //no merging is needed
207 TIter next(aList); // list is supposed to contain only objects of the same type as this
208 AliFlowLYZHist1 *toMerge;
209 // make a temporary list
210 TList *pTemp = new TList();
211 while ((toMerge=(AliFlowLYZHist1*)next())) {
212 pTemp->Add(toMerge->GetHistList());
215 // Now call merge for fHistList providing temp list
216 fHistList->Merge(pTemp);
220 return (double)iCount;
224 //-----------------------------------------------------------------------
225 void AliFlowLYZHist1::Print(Option_t *option) const
227 // -*-*-*-*-*Print some global quantities for this histogram collection class *-*-*-*-*-*-*-*
228 // ===============================================
229 // printf( "TH1.Print Name = %s, Entries= %d, Total sum= %g\n",GetName(),Int_t(fEntries),GetSumOfWeights());
230 printf( "Class.Print Name = %s, Histogram list:\n",GetName());
233 fHistList->Print(option);
237 printf( "Empty histogram list \n");
241 //-----------------------------------------------------------------------
242 void AliFlowLYZHist1::Browse(TBrowser *b)
246 if (fHistList) b->Add(fHistList,"AliFlowLYZHist1List");