New task for k-means clustering
[u/mrichter/AliRoot.git] / PWG0 / 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
33#include "AliESDtrackCuts.h"\r
34#include "AliMCEventHandler.h"\r
35#include "dNdPt/AlidNdPt.h"\r
36#include "dNdPt/AlidNdPtEventCuts.h"\r
37#include "dNdPt/AlidNdPtAcceptanceCuts.h"\r
38\r
39#include "dNdPt/AlidNdPtTask.h"\r
40\r
41using namespace std;\r
42\r
43ClassImp(AlidNdPtTask)\r
44\r
45//_____________________________________________________________________________\r
46AlidNdPtTask::AlidNdPtTask(const char *name) \r
47 : AliAnalysisTask(name, "dNdPt analysis")\r
48 , fESD(0)\r
49 , fMC(0)\r
50 , fOutput(0)\r
51 , fPitList(0)\r
52 , fCompList(0)\r
53 , fUseMCInfo(kFALSE)\r
54{\r
55 // Constructor\r
56\r
57 // Define input and output slots here\r
58 DefineInput(0, TChain::Class());\r
59 DefineOutput(0, TList::Class());\r
60\r
61 // create the list for comparison objects\r
62 fCompList = new TList;\r
63}\r
64\r
65//_____________________________________________________________________________\r
66AlidNdPtTask::~AlidNdPtTask()\r
67{\r
68 if(fOutput) delete fOutput; fOutput =0; \r
69}\r
70\r
71//____________________________________________________________________________\r
72Bool_t AlidNdPtTask::Notify()\r
73{\r
74 static Int_t count = 0;\r
75 count++;\r
76 Printf("Processing %d. file", count);\r
77\r
78return kTRUE;\r
79}\r
80\r
81//_____________________________________________________________________________\r
82void AlidNdPtTask::ConnectInputData(Option_t *) \r
83{\r
84// connect input data \r
85// called once\r
86\r
87 TTree *tree = dynamic_cast<TTree*> (GetInputData(0));\r
88 if (!tree) {\r
89 Printf("ERROR: Could not read chain from input slot 0");\r
90 return;\r
91 }\r
92\r
93 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
94\r
95 if (!esdH) {\r
96 Printf("ERROR: Could not get ESDInputHandler");\r
97 return;\r
98 } else {\r
99 fESD = esdH->GetEvent();\r
100\r
101 // Enable only the needed branches\r
102 //esdH->SetActiveBranches("AliESDHeader Vertex Tracks");\r
103 }\r
104\r
105 if (fUseMCInfo) {\r
106 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());\r
107 if (!eventHandler) {\r
108 Printf("ERROR: Could not retrieve MC event handler");\r
109 return;\r
110 } else { \r
111 fMC = eventHandler->MCEvent();\r
112 }\r
113 }\r
114}\r
115\r
116//_____________________________________________________________________________\r
117Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) \r
118{\r
119 // add analysis object to the list\r
120 if(pObj == 0) {\r
121 Printf("ERROR: Could not add comparison object");\r
122 return kFALSE;\r
123 }\r
124\r
125 // add object to the list\r
126 fCompList->AddLast(pObj);\r
127 \r
128return kTRUE;\r
129}\r
130\r
131//_____________________________________________________________________________\r
132void AlidNdPtTask::CreateOutputObjects()\r
133{\r
134 // Create histograms\r
135 // Called once\r
136\r
137 OpenFile(0, "RECREATE");\r
138\r
139 //\r
140 // create output list\r
141 //\r
142 fOutput = new TList;\r
143 fOutput->SetOwner();\r
144 fPitList = fOutput->MakeIterator();\r
145\r
146 // add dNdPt analysis objects to the output\r
147 AlidNdPt *pObj=0;\r
148 Int_t count=0;\r
149 TIterator *pitCompList = fCompList->MakeIterator();\r
150 pitCompList->Reset();\r
151 while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {\r
152 fOutput->Add(pObj);\r
153 count++;\r
154 }\r
155 Printf("CreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
156}\r
157\r
158//_____________________________________________________________________________\r
159void AlidNdPtTask::Exec(Option_t *) \r
160{\r
161 // Called for each event\r
162 if (!fESD) {\r
163 Printf("ERROR: ESD event not available");\r
164 return;\r
165 }\r
166\r
167 // Process analysis\r
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
173\r
174 // Post output data.\r
175 PostData(0, fOutput);\r
176}\r
177\r
178//_____________________________________________________________________________\r
179void AlidNdPtTask::Terminate(Option_t *) \r
180{\r
181 // Called one at the end \r
182 \r
183 // check output data\r
184 fOutput = dynamic_cast<TList*> (GetOutputData(0));\r
185 if (!fOutput) {\r
186 Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
187 return;\r
188 }\r
189}\r