- classes for pT spectra charged hadrons analysis added
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / ChargedHadrons / dNdPt / AlidNdPtTask.cxx
CommitLineData
0aaa8b91 1/**************************************************************************\r
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3* *\r
4* Author: The ALICE Off-line Project. *\r
5* Contributors are mentioned in the code where appropriate. *\r
6* *\r
7* Permission to use, copy, modify and distribute this software and its *\r
8* documentation strictly for non-commercial purposes is hereby granted *\r
9* without fee, provided that the above copyright notice appears in all *\r
10* copies and that both the copyright notice and this permission notice *\r
11* appear in the supporting documentation. The authors make no claims *\r
12* about the suitability of this software for any purpose. It is *\r
13* provided "as is" without express or implied warranty. *\r
14**************************************************************************/\r
15\r
16#include "iostream"\r
17\r
18#include "TChain.h"\r
19#include "TTree.h"\r
20#include "TH1F.h"\r
21#include "TCanvas.h"\r
22#include "TList.h"\r
23#include "TFile.h"\r
24\r
25#include "AliAnalysisTask.h"\r
26#include "AliAnalysisManager.h"\r
27#include "AliESDEvent.h"\r
28#include "AliESDInputHandler.h"\r
29#include "AliESDVertex.h"\r
30#include "AliTracker.h"\r
31#include "AliGeomManager.h"\r
32\r
b93ccf1c 33#include "AliCentrality.h"\r
0487c490 34#include "AliESDVZERO.h"\r
35#include "AliMultiplicity.h"\r
36\r
0aaa8b91 37#include "AliESDtrackCuts.h"\r
38#include "AliMCEventHandler.h"\r
bdd49ee6 39#include "AlidNdPt.h"\r
40#include "AlidNdPtEventCuts.h"\r
41#include "AlidNdPtAcceptanceCuts.h"\r
0aaa8b91 42\r
bdd49ee6 43#include "AlidNdPtTask.h"\r
0aaa8b91 44\r
45using namespace std;\r
46\r
47ClassImp(AlidNdPtTask)\r
48\r
49//_____________________________________________________________________________\r
50AlidNdPtTask::AlidNdPtTask(const char *name) \r
de93884d 51 : AliAnalysisTaskSE(name)\r
0aaa8b91 52 , fESD(0)\r
53 , fMC(0)\r
54 , fOutput(0)\r
55 , fPitList(0)\r
56 , fCompList(0)\r
57 , fUseMCInfo(kFALSE)\r
58{\r
59 // Constructor\r
60\r
61 // Define input and output slots here\r
de93884d 62 DefineOutput(1, TList::Class());\r
0aaa8b91 63\r
64 // create the list for comparison objects\r
65 fCompList = new TList;\r
66}\r
67\r
68//_____________________________________________________________________________\r
69AlidNdPtTask::~AlidNdPtTask()\r
70{\r
71 if(fOutput) delete fOutput; fOutput =0; \r
de93884d 72 if(fCompList) delete fCompList; fCompList =0; \r
0aaa8b91 73}\r
74\r
75//____________________________________________________________________________\r
76Bool_t AlidNdPtTask::Notify()\r
77{\r
78 static Int_t count = 0;\r
79 count++;\r
695facdf 80 //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName());\r
81 TTree *chain = (TChain*)GetInputData(0);\r
82 if(chain)\r
83 Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());\r
0aaa8b91 84\r
695facdf 85 /*\r
a8ac5525 86 TChain *chain = (TChain*)GetInputData(0);\r
87 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
88 if (!esdH) {\r
89 Printf("ERROR: Could not get ESDInputHandler");\r
90 return kFALSE;\r
91 } else {\r
a8ac5525 92 if(chain)\r
7f7dd416 93 Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName());\r
a8ac5525 94 }\r
695facdf 95 */\r
a8ac5525 96\r
0aaa8b91 97return kTRUE;\r
98}\r
99\r
0aaa8b91 100//_____________________________________________________________________________\r
101Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) \r
102{\r
103 // add analysis object to the list\r
104 if(pObj == 0) {\r
105 Printf("ERROR: Could not add comparison object");\r
106 return kFALSE;\r
107 }\r
108\r
109 // add object to the list\r
110 fCompList->AddLast(pObj);\r
111 \r
112return kTRUE;\r
113}\r
114\r
115//_____________________________________________________________________________\r
de93884d 116void AlidNdPtTask::UserCreateOutputObjects()\r
0aaa8b91 117{\r
118 // Create histograms\r
119 // Called once\r
120\r
de93884d 121 OpenFile(1, "RECREATE");\r
0aaa8b91 122\r
123 //\r
124 // create output list\r
125 //\r
126 fOutput = new TList;\r
127 fOutput->SetOwner();\r
128 fPitList = fOutput->MakeIterator();\r
129\r
130 // add dNdPt analysis objects to the output\r
131 AlidNdPt *pObj=0;\r
132 Int_t count=0;\r
133 TIterator *pitCompList = fCompList->MakeIterator();\r
134 pitCompList->Reset();\r
135 while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {\r
136 fOutput->Add(pObj);\r
137 count++;\r
138 }\r
de93884d 139 Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);\r
0487c490 140\r
17f2bf95 141 PostData(1, fOutput);\r
0aaa8b91 142}\r
143\r
144//_____________________________________________________________________________\r
de93884d 145void AlidNdPtTask::UserExec(Option_t *) \r
0aaa8b91 146{\r
de93884d 147 //\r
0aaa8b91 148 // Called for each event\r
de93884d 149 //\r
150\r
151 // ESD event\r
152 fESD = (AliESDEvent*) (InputEvent());\r
0aaa8b91 153 if (!fESD) {\r
154 Printf("ERROR: ESD event not available");\r
155 return;\r
156 }\r
157\r
de93884d 158 // MC event\r
159 if(fUseMCInfo) {\r
160 fMC = MCEvent();\r
161 if (!fMC) {\r
162 Printf("ERROR: MC event not available");\r
163 return;\r
164 }\r
165 }\r
166\r
0aaa8b91 167\r
0487c490 168 AlidNdPt *pObj = 0;\r
169 fPitList->Reset();\r
170 while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {\r
171 pObj->Process(fESD,fMC);\r
172 }\r
0487c490 173\r
174\r
0aaa8b91 175 // Post output data.\r
de93884d 176 PostData(1, fOutput);\r
0aaa8b91 177}\r
178\r
a26e43aa 179//_____________________________________________________________________________\r
180void AlidNdPtTask::FinishTaskOutput() \r
181{\r
182 //\r
183 // Called one at the end \r
184 // locally on working node\r
185 //\r
186 // check output data\r
187 fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
188 if (!fOutput) {\r
189 Printf("ERROR: AlidNdPtTask::FinishTaskOutput(): Output data not avaiable GetOutputData(1)==0x0 ..." );\r
190 return;\r
191 }\r
192\r
193 AlidNdPt* pObj=0;\r
194 TIterator* itOut = fOutput->MakeIterator();\r
195 itOut->Reset();\r
196 while(( pObj = dynamic_cast<AlidNdPt*>(itOut->Next())) != NULL) {\r
197 if(pObj->GetAnalyseOutput()) { \r
198 pObj->Analyse();\r
199 }\r
200 }\r
201\r
202 // Post output data.\r
203 PostData(1, fOutput);\r
204}\r
205\r
0aaa8b91 206//_____________________________________________________________________________\r
207void AlidNdPtTask::Terminate(Option_t *) \r
208{\r
209 // Called one at the end \r
210 \r
211 // check output data\r
de93884d 212 fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
0aaa8b91 213 if (!fOutput) {\r
214 Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
215 return;\r
216 }\r
217}\r