]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowTasks/AliAnalysisTaskFittingQDistribution.cxx
implement integrated flow in scalar product method and subevents in flowevent
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowTasks / AliAnalysisTaskFittingQDistribution.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   *f
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  *    analysis task for fitting       * 
18  *         q-distribution             *
19  *                                    * 
20  * authors: Naomi van der Kolk        *
21  *           (kolk@nikhef.nl)         *  
22  *          Raimond Snellings         *
23  *           (snelling@nikhef.nl)     * 
24  *          Ante Bilandzic            *
25  *           (anteb@nikhef.nl)        * 
26  * ***********************************/
27  
28 #include "Riostream.h"
29 #include "TChain.h"
30 #include "TTree.h"
31 #include "TFile.h"
32 #include "TList.h"
33 #include "TH1.h"
34 #include "TProfile.h"
35
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisDataSlot.h"
38 #include "AliAnalysisDataContainer.h"
39 #include "AliAnalysisManager.h"
40
41 #include "AliFlowEventSimple.h"
42 #include "AliAnalysisTaskFittingQDistribution.h"
43 #include "AliFittingQDistribution.h"
44 #include "AliFlowCommonConstants.h"
45 #include "AliFlowCommonHistResults.h"
46 #include "AliFittingFunctionsForQDistribution.h"
47
48 ClassImp(AliAnalysisTaskFittingQDistribution)
49
50 //================================================================================================================
51
52 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights): 
53   AliAnalysisTask(name,""), 
54   fEvent(NULL),
55   fFQDA(NULL),//Fitting Q_Distribution Analysis (FQDA) object
56   fListHistos(NULL),
57   fUseWeights(useWeights),
58   fUsePhiWeights(kFALSE),
59   fListWeights(NULL)
60 {
61   //constructor
62   cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name)"<<endl;
63   
64   // Define input and output slots here
65   // Input slot #0 works with a TChain
66   DefineInput(0, AliFlowEventSimple::Class());
67   
68   // Input slot #1 is needed for the weights 
69   if(useWeights) {
70     DefineInput(1, TList::Class());   
71   }
72   
73   // Output slot #0 writes into a TList container
74   DefineOutput(0, TList::Class());  
75 }
76
77 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(): 
78   fEvent(NULL),
79   fFQDA(NULL),//Fitting q-distribution Analysis (FQDA) object
80   fListHistos(NULL),  
81   fUseWeights(kFALSE),
82   fUsePhiWeights(kFALSE),
83   fListWeights(NULL)
84 {
85  //dummy constructor
86  cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution()"<<endl;
87 }
88
89 //================================================================================================================
90
91 void AliAnalysisTaskFittingQDistribution::ConnectInputData(Option_t *) 
92 {
93  //connect ESD or AOD (called once)
94  cout<<"AliAnalysisTaskFittingQDistribution::ConnectInputData(Option_t *)"<<endl;
95
96 }
97
98 //================================================================================================================
99
100 void AliAnalysisTaskFittingQDistribution::CreateOutputObjects() 
101 {
102   //called at every worker node to initialize
103   cout<<"AliAnalysisTaskFittingQDistribution::CreateOutputObjects()"<<endl;
104   
105   
106   //analyser
107   fFQDA = new AliFittingQDistribution();
108   fFQDA->Init();
109   
110   //weights:
111   if(fUseWeights) {
112     //pass the flags to class:
113     if(fUsePhiWeights) fFQDA->SetUsePhiWeights(fUsePhiWeights);
114     //get data from input slot #1 which is used for weights:
115     if(GetNinputs()==2) {                   
116       fListWeights = (TList*)GetInputData(1); 
117     }
118     //pass the list with weights to class:
119     if(fListWeights) fFQDA->SetWeightsList(fListWeights);
120   }
121   
122   if(fFQDA->GetHistList()) {
123     fListHistos = fFQDA->GetHistList();
124     //fListHistos->Print();
125   }
126   else {
127     Printf("ERROR: Could not retrieve histogram list"); 
128   }
129   
130 }
131
132 //================================================================================================================
133
134 void AliAnalysisTaskFittingQDistribution::Exec(Option_t *) 
135 {
136   //main loop (called for each event)
137   fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
138
139   //fitting q-distribution 
140   if (fEvent) {
141     fFQDA->Make(fEvent);
142   }
143   else {
144     cout << "Warning no input data!!!" << endl;
145   }
146   PostData(0,fListHistos); 
147 }
148
149 //================================================================================================================
150
151 void AliAnalysisTaskFittingQDistribution::Terminate(Option_t *) 
152 {  
153   //accessing the output list
154   fListHistos = (TList*)GetOutputData(0);
155   //fListHistos->Print();
156   
157   if(fListHistos) {         
158     //final results (integrated flow)
159     TH1D *intFlowResults = dynamic_cast<TH1D*>(fListHistos->FindObject("fIntFlowResultsFQD")); 
160     
161     //sigma^2
162     TH1D *sigma2 = dynamic_cast<TH1D*>(fListHistos->FindObject("fSigma2")); 
163     
164     //common histograms to store the final results for the integrated flow
165     AliFlowCommonHistResults *commonHistRes = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResultsFQD"));
166     
167     //average selected multiplicity (for int. flow) 
168     TProfile *AvMult = dynamic_cast<TProfile*>(fListHistos->FindObject("fAvMultIntFlowFQD"));
169     
170     //q-distribution
171     TH1D *qDist = dynamic_cast<TH1D*>(fListHistos->FindObject("fQDistributionFQD"));
172     
173     //----------------------------------------------------
174     
175     fFQDA = new AliFittingQDistribution();
176     
177     fFQDA->SetIntFlowResults(intFlowResults);
178     fFQDA->SetSigma2(sigma2); 
179     fFQDA->SetCommonHistsResults(commonHistRes); 
180     
181     fFQDA->SetAverageMultiplicity(AvMult);
182     fFQDA->SetQDistribution(qDist); 
183     
184     fFQDA->Finish();  
185     
186     //----------------------------------------------------      
187   }
188   else {
189     cout<<"histogram list pointer is empty"<<endl;
190   }
191 }
192
193 //================================================================================================================
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212