new functionality and new class added
[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
a8ac5525 78 TChain *chain = (TChain*)GetInputData(0);\r
79 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
80 if (!esdH) {\r
81 Printf("ERROR: Could not get ESDInputHandler");\r
82 return kFALSE;\r
83 } else {\r
a8ac5525 84 if(chain)\r
7f7dd416 85 Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName());\r
a8ac5525 86 }\r
a8ac5525 87\r
0aaa8b91 88return kTRUE;\r
89}\r
90\r
91//_____________________________________________________________________________\r
92void AlidNdPtTask::ConnectInputData(Option_t *) \r
93{\r
94// connect input data \r
95// called once\r
96\r
97 TTree *tree = dynamic_cast<TTree*> (GetInputData(0));\r
98 if (!tree) {\r
99 Printf("ERROR: Could not read chain from input slot 0");\r
100 return;\r
101 }\r
102\r
103 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
104\r
105 if (!esdH) {\r
106 Printf("ERROR: Could not get ESDInputHandler");\r
107 return;\r
108 } else {\r
109 fESD = esdH->GetEvent();\r
110\r
111 // Enable only the needed branches\r
112 //esdH->SetActiveBranches("AliESDHeader Vertex Tracks");\r
113 }\r
114\r
115 if (fUseMCInfo) {\r
116 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());\r
117 if (!eventHandler) {\r
118 Printf("ERROR: Could not retrieve MC event handler");\r
119 return;\r
120 } else { \r
121 fMC = eventHandler->MCEvent();\r
122 }\r
123 }\r
124}\r
125\r
126//_____________________________________________________________________________\r
127Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) \r
128{\r
129 // add analysis object to the list\r
130 if(pObj == 0) {\r
131 Printf("ERROR: Could not add comparison object");\r
132 return kFALSE;\r
133 }\r
134\r
135 // add object to the list\r
136 fCompList->AddLast(pObj);\r
137 \r
138return kTRUE;\r
139}\r
140\r
141//_____________________________________________________________________________\r
142void AlidNdPtTask::CreateOutputObjects()\r
143{\r
144 // Create histograms\r
145 // Called once\r
146\r
147 OpenFile(0, "RECREATE");\r
148\r
149 //\r
150 // create output list\r
151 //\r
152 fOutput = new TList;\r
153 fOutput->SetOwner();\r
154 fPitList = fOutput->MakeIterator();\r
155\r
156 // add dNdPt analysis objects to the output\r
157 AlidNdPt *pObj=0;\r
158 Int_t count=0;\r
159 TIterator *pitCompList = fCompList->MakeIterator();\r
160 pitCompList->Reset();\r
161 while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {\r
162 fOutput->Add(pObj);\r
163 count++;\r
164 }\r
165 Printf("CreateOutputObjects(): Number of output comparison objects: %d \n", count);\r
166}\r
167\r
168//_____________________________________________________________________________\r
169void AlidNdPtTask::Exec(Option_t *) \r
170{\r
171 // Called for each event\r
172 if (!fESD) {\r
173 Printf("ERROR: ESD event not available");\r
174 return;\r
175 }\r
176\r
177 // Process analysis\r
178 AlidNdPt *pObj = 0;\r
179 fPitList->Reset();\r
180 while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {\r
181 pObj->Process(fESD,fMC);\r
182 }\r
183\r
184 // Post output data.\r
185 PostData(0, fOutput);\r
186}\r
187\r
188//_____________________________________________________________________________\r
189void AlidNdPtTask::Terminate(Option_t *) \r
190{\r
191 // Called one at the end \r
192 \r
193 // check output data\r
194 fOutput = dynamic_cast<TList*> (GetOutputData(0));\r
195 if (!fOutput) {\r
196 Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
197 return;\r
198 }\r
199}\r