054a1ff0ccaf26c55dbd6e3993baec7b9a5d3c55
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFittingQDistribution.cxx
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 /******************************** 
17  * integrated flow estimate by  *
18  *   fitting q-distribution     * 
19  *                              *
20  * author: Ante Bilandzic       * 
21  *          (anteb@nikhef.nl)   *
22  *******************************/ 
23
24 #define AliFittingQDistribution_cxx
25
26 #include "Riostream.h"
27 #include "AliFlowCommonConstants.h"
28 #include "AliFlowCommonHist.h"
29 #include "AliFlowCommonHistResults.h"
30 #include "TChain.h"
31 #include "TFile.h"
32 #include "TList.h" 
33 #include "TParticle.h"
34 #include "TProfile.h"
35 #include "AliFlowEventSimple.h"
36 #include "AliFlowTrackSimple.h"
37 #include "AliFittingQDistribution.h"
38 #include "AliFittingFunctionsForQDistribution.h"
39
40 class TH1;
41 class TGraph;
42 class TPave;
43 class TLatex;
44 class TMarker;
45 class TObjArray;
46 class TList;
47 class TCanvas;
48 class TSystem;
49 class TROOT;
50 class AliFlowVector;
51 class TVector;
52
53 //================================================================================================================
54
55 ClassImp(AliFittingQDistribution)
56
57 AliFittingQDistribution::AliFittingQDistribution():  
58  fTrack(NULL),
59  fHistList(NULL),
60  fAvMultIntFlowFQD(NULL),
61  fIntFlowResultsFQD(NULL),
62  fSigma2(NULL),
63  fCommonHists(NULL),
64  fCommonHistsResults(NULL),
65  fQDistributionFQD(NULL)
66 {
67  //constructor 
68  fHistList = new TList(); 
69 }
70
71 AliFittingQDistribution::~AliFittingQDistribution()
72 {
73  //desctructor
74  delete fHistList; 
75 }
76
77 //================================================================================================================
78
79 void AliFittingQDistribution::CreateOutputObjects()
80 {
81  //various output histograms
82  
83  //avarage multiplicity 
84  fAvMultIntFlowFQD = new TProfile("fAvMultIntFlowFQD","Average Multiplicity",1,0,1,"s");
85  fAvMultIntFlowFQD->SetXTitle("");
86  fAvMultIntFlowFQD->SetYTitle("");
87  fAvMultIntFlowFQD->SetLabelSize(0.06);
88  fAvMultIntFlowFQD->SetMarkerStyle(25);
89  fAvMultIntFlowFQD->SetLabelOffset(0.02);
90  (fAvMultIntFlowFQD->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
91  fHistList->Add(fAvMultIntFlowFQD);
92  
93  //final result for integrated flow 
94  fIntFlowResultsFQD = new TH1D("fIntFlowResultsFQD","Integrated Flow By Fitting q-distribution",1,0,1);
95  fIntFlowResultsFQD->SetXTitle("");
96  fIntFlowResultsFQD->SetYTitle("");
97  fIntFlowResultsFQD->SetMarkerStyle(25);
98  fIntFlowResultsFQD->SetLabelSize(0.06);
99  fIntFlowResultsFQD->SetLabelOffset(0.02);
100  (fIntFlowResultsFQD->GetXaxis())->SetBinLabel(1,"v_{n}{FQD}");
101  fHistList->Add(fIntFlowResultsFQD);
102  
103  //sigma^2
104  fSigma2 = new TH1D("fSigma2","#sigma^{2}",1,0,1);
105  fSigma2->SetXTitle("");
106  fSigma2->SetYTitle("");
107  fSigma2->SetMarkerStyle(25);
108  fSigma2->SetLabelSize(0.06);
109  fSigma2->SetLabelOffset(0.02);
110  (fSigma2->GetXaxis())->SetBinLabel(1,"#sigma^{2}");
111  fHistList->Add(fSigma2);
112  
113  //q-distribution 
114  fQDistributionFQD = new TH1D("fQDistributionFQD","q-distribution",100,0,10);
115  fQDistributionFQD->SetXTitle("q_{n}=Q_{n}/#sqrt{M}");
116  fQDistributionFQD->SetYTitle("Counts");
117  fHistList->Add(fQDistributionFQD);
118   
119  //common control histograms
120  fCommonHists = new AliFlowCommonHist("AliFlowCommonHistFQD");
121  fHistList->Add(fCommonHists);  
122  
123  //common histograms for final results (2nd order)
124  fCommonHistsResults= new AliFlowCommonHistResults("AliFlowCommonHistResultsFQD");
125  fHistList->Add(fCommonHistsResults); 
126  
127 }//end of CreateOutputObjects()
128
129 //================================================================================================================
130
131 void AliFittingQDistribution::Make(AliFlowEventSimple* anEvent)
132 {
133  
134  //Int_t nPrim = anEvent->NumberOfTracks();//total multiplicity
135   
136  Int_t n=2;//harmonic (to be improved)  
137    
138  //fill the common control histograms
139  fCommonHists->FillControlHistograms(anEvent);   
140
141  //calculating Q-vector of event
142  AliFlowVector fQVector;
143  fQVector.Set(0.,0.);
144  fQVector.SetMult(0);
145  fQVector=anEvent->GetQ(n);                                                                                  
146                                                                                                                                                                       
147  //multiplicity
148  fAvMultIntFlowFQD->Fill(0.,fQVector.GetMult(),1.);
149  
150  //q = Q/sqrt(M)
151  Double_t q=0.;
152  
153  if(fQVector.GetMult()!=0)
154  {
155   q = fQVector.Mod()/sqrt(fQVector.GetMult());
156   fQDistributionFQD->Fill(q,1.);
157  }  
158 }//end of Make()
159
160 //================================================================================================================
161
162 void AliFittingQDistribution::Finish()
163 {
164  //calculate the final results
165  AliFittingFunctionsForQDistribution finalFitting(fAvMultIntFlowFQD,fQDistributionFQD,fIntFlowResultsFQD,fSigma2,fCommonHistsResults);
166          
167  finalFitting.Calculate();            
168 }
169
170 //================================================================================================================
171
172 void AliFittingQDistribution::WriteHistograms(TString* outputFileName)
173 {
174  //store the final results in output .root file
175  TFile *output = new TFile(outputFileName->Data(),"RECREATE");
176  output->WriteObject(fHistList, "cobjFQD","SingleKey");
177  delete output;
178 }
179
180 //================================================================================================================
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198