]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/FLOW/Tasks/AliAnalysisTaskFittingQDistribution.cxx
from Ante Bilandzic:
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / 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  *           (abilandzic@gmail.com)   * 
26  * ***********************************/
27  
28 class TFile;
29 class TString;
30 class TList;
31 class AliAnalysisTaskSE; 
32  
33 #include "Riostream.h"
34 #include "AliFlowEventSimple.h"
35 #include "AliAnalysisTaskFittingQDistribution.h"
36 #include "AliFlowAnalysisWithFittingQDistribution.h"
37 #include "TH2D.h"
38
39 using std::cout;
40 using std::endl;
41 ClassImp(AliAnalysisTaskFittingQDistribution)
42
43 //================================================================================================================
44
45 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights): 
46  AliAnalysisTaskSE(name), 
47  fEvent(NULL),
48  fFQD(NULL),
49  fListHistos(NULL),
50  fBookOnlyBasicCCH(kTRUE), 
51  fUseWeights(useWeights),
52  fUsePhiWeights(kFALSE),
53  fListWeights(NULL),
54  fHarmonic(2), 
55  fqMin(0.),
56  fqMax(100.),
57  fqNbins(10000),
58  fStoreqDistributionVsMult(kFALSE),
59  fqDistributionVsMult(NULL),
60  fMinMult(0.),
61  fMaxMult(10000.),
62  fnBinsMult(1000),
63  fDoFit(kTRUE),
64  fExactNoRPs(0),
65  fMultiplicityIs(AliFlowCommonConstants::kRP)  
66  {
67   //constructor
68   //cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights)"<<endl;
69   
70   // Define input and output slots here
71   // Input slot #0 works with an AliFlowEventSimple
72   DefineInput(0, AliFlowEventSimple::Class());
73   
74   // Input slot #1 is needed for the weights input files 
75   if(useWeights) 
76   {
77    DefineInput(1, TList::Class());   
78   }
79   // Output slot #0 is reserved
80   // Output slot #1 writes into a TList container
81   DefineOutput(1, TList::Class());  
82  }
83
84 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(): 
85  AliAnalysisTaskSE(),
86  fEvent(NULL),
87  fFQD(NULL),
88  fListHistos(NULL), 
89  fBookOnlyBasicCCH(kFALSE),   
90  fUseWeights(kFALSE),
91  fUsePhiWeights(kFALSE),
92  fListWeights(NULL),
93  fHarmonic(0), 
94  fqMin(0.),
95  fqMax(0.),
96  fqNbins(0),
97  fStoreqDistributionVsMult(kFALSE),
98  fqDistributionVsMult(NULL),
99  fMinMult(0.),
100  fMaxMult(0.),
101  fnBinsMult(0),
102  fDoFit(kTRUE),
103  fExactNoRPs(0),
104  fMultiplicityIs(AliFlowCommonConstants::kRP)  
105  {
106   // Dummy constructor
107   //cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution()"<<endl;
108  }
109
110 //================================================================================================================
111
112 void AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects() 
113 {
114   // Called at every worker node to initialize
115   cout<<"AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects()"<<endl;
116   
117   // Analyser:
118   fFQD = new AliFlowAnalysisWithFittingQDistribution();
119   
120   fFQD->SetBookOnlyBasicCCH(fBookOnlyBasicCCH);
121   // Particle weights:
122   if(fUseWeights) 
123   {
124    // Pass the flags to class:
125    if(fUsePhiWeights) fFQD->SetUsePhiWeights(fUsePhiWeights);
126    // Get data from input slot #1 which is used for weights:
127    if(GetNinputs()==2) 
128    {                   
129     fListWeights = (TList*)GetInputData(1); 
130    }
131    // Pass the list with weights to class:
132    if(fListWeights) fFQD->SetWeightsList(fListWeights);
133   }
134   fFQD->SetHarmonic(fHarmonic);
135   // Settings for q-distribution:
136   fFQD->SetqMin(fqMin);
137   fFQD->SetqMax(fqMax);
138   fFQD->SetqNbins(fqNbins); 
139   fFQD->SetStoreqDistributionVsMult(fStoreqDistributionVsMult);
140   fFQD->SetqDistributionVsMult(fqDistributionVsMult);
141   fFQD->SetMinMult(fMinMult);
142   fFQD->SetMaxMult(fMaxMult);
143   fFQD->SetnBinsMult(fnBinsMult);
144   fFQD->SetDoFit(fDoFit);
145   fFQD->SetExactNoRPs(fExactNoRPs);
146   fFQD->SetMultiplicityIs(fMultiplicityIs);
147
148   fFQD->Init();
149   
150   if(fFQD->GetHistList()) 
151   {
152    fListHistos = fFQD->GetHistList();
153    //fListHistos->Print();
154   } else 
155     {
156       Printf("ERROR: Could not retrieve histogram list (FQD, Task::UserCreateOutputObjects()) !!!!"); 
157     }
158
159  PostData(1,fListHistos);
160   
161 } // end of void AliAnalysisTaskFittingQDistribution::UserCreateOutputObjects()
162
163 //================================================================================================================
164
165 void AliAnalysisTaskFittingQDistribution::UserExec(Option_t *) 
166 {
167   // Main loop (called for each event):
168   fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
169
170   // Fitting q-distribution: 
171   if(fEvent) 
172   {
173    fFQD->Make(fEvent);
174   } else 
175     {
176      cout<<"WARNING: No input data (FQD, Task::UserExec()) !!!!"<<endl;
177     }
178   
179  PostData(1,fListHistos); 
180 }
181
182 //================================================================================================================
183
184 void AliAnalysisTaskFittingQDistribution::Terminate(Option_t *) 
185 {  
186   //accessing the output list
187   fListHistos = (TList*)GetOutputData(1);
188   
189   fFQD = new AliFlowAnalysisWithFittingQDistribution();
190   
191   if(fListHistos) 
192   {          
193    fFQD->GetOutputHistograms(fListHistos);
194    fFQD->Finish();  
195    PostData(1,fListHistos);
196   } else 
197     {
198      cout<<" WARNING: histogram list pointer is empty (FQD, Task::Terminate()) !!!!"<<endl;
199      cout<<endl;
200     }
201     
202 } // end of void AliAnalysisTaskFittingQDistribution::Terminate(Option_t *)
203
204 //================================================================================================================
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223