1 /*************************************************************************
2 * Copyright(c) 1998-2008, 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 *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 **************************************************************************/
16 /**************************************
17 * analysis task for fitting *
20 * authors: Naomi van der Kolk *
23 * (snelling@nikhef.nl) *
26 * ***********************************/
28 #include "Riostream.h"
36 #include "AliAnalysisTask.h"
37 #include "AliAnalysisDataSlot.h"
38 #include "AliAnalysisDataContainer.h"
39 #include "AliAnalysisManager.h"
41 #include "AliFlowEventSimple.h"
42 #include "AliAnalysisTaskFittingQDistribution.h"
43 #include "AliFittingQDistribution.h"
44 #include "AliFlowCommonConstants.h"
45 #include "AliFlowCommonHistResults.h"
46 #include "AliFittingFunctionsForQDistribution.h"
48 ClassImp(AliAnalysisTaskFittingQDistribution)
50 //================================================================================================================
52 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name, Bool_t useWeights):
53 AliAnalysisTask(name,""),
55 fFQDA(NULL),//Fitting Q_Distribution Analysis (FQDA) object
57 fUseWeights(useWeights),
58 fUsePhiWeights(kFALSE),
62 cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution(const char *name)"<<endl;
64 // Define input and output slots here
65 // Input slot #0 works with a TChain
66 DefineInput(0, AliFlowEventSimple::Class());
68 // Input slot #1 is needed for the weights
70 DefineInput(1, TList::Class());
73 // Output slot #0 writes into a TList container
74 DefineOutput(0, TList::Class());
77 AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution():
79 fFQDA(NULL),//Fitting q-distribution Analysis (FQDA) object
82 fUsePhiWeights(kFALSE),
86 cout<<"AliAnalysisTaskFittingQDistribution::AliAnalysisTaskFittingQDistribution()"<<endl;
89 //================================================================================================================
91 void AliAnalysisTaskFittingQDistribution::ConnectInputData(Option_t *)
93 //connect ESD or AOD (called once)
94 cout<<"AliAnalysisTaskFittingQDistribution::ConnectInputData(Option_t *)"<<endl;
98 //================================================================================================================
100 void AliAnalysisTaskFittingQDistribution::CreateOutputObjects()
102 //called at every worker node to initialize
103 cout<<"AliAnalysisTaskFittingQDistribution::CreateOutputObjects()"<<endl;
107 fFQDA = new AliFittingQDistribution();
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);
118 //pass the list with weights to class:
119 if(fListWeights) fFQDA->SetWeightsList(fListWeights);
122 if(fFQDA->GetHistList()) {
123 fListHistos = fFQDA->GetHistList();
124 //fListHistos->Print();
127 Printf("ERROR: Could not retrieve histogram list");
132 //================================================================================================================
134 void AliAnalysisTaskFittingQDistribution::Exec(Option_t *)
136 //main loop (called for each event)
137 fEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
139 //fitting q-distribution
144 cout << "Warning no input data!!!" << endl;
146 PostData(0,fListHistos);
149 //================================================================================================================
151 void AliAnalysisTaskFittingQDistribution::Terminate(Option_t *)
153 //accessing the output list
154 fListHistos = (TList*)GetOutputData(0);
155 //fListHistos->Print();
158 //final results (integrated flow)
159 TH1D *intFlowResults = dynamic_cast<TH1D*>(fListHistos->FindObject("fIntFlowResultsFQD"));
162 TH1D *sigma2 = dynamic_cast<TH1D*>(fListHistos->FindObject("fSigma2"));
164 //common histograms to store the final results for the integrated flow
165 AliFlowCommonHistResults *commonHistRes = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResultsFQD"));
167 //average selected multiplicity (for int. flow)
168 TProfile *AvMult = dynamic_cast<TProfile*>(fListHistos->FindObject("fAvMultIntFlowFQD"));
171 TH1D *qDist = dynamic_cast<TH1D*>(fListHistos->FindObject("fQDistributionFQD"));
173 //----------------------------------------------------
175 fFQDA = new AliFittingQDistribution();
177 fFQDA->SetIntFlowResults(intFlowResults);
178 fFQDA->SetSigma2(sigma2);
179 fFQDA->SetCommonHistsResults(commonHistRes);
181 fFQDA->SetAverageMultiplicity(AvMult);
182 fFQDA->SetQDistribution(qDist);
186 //----------------------------------------------------
189 cout<<"histogram list pointer is empty"<<endl;
193 //================================================================================================================