Adding flexibility to submission macros
[u/mrichter/AliRoot.git] / PWG0 / dNdPt / AlidNdPtTask.cxx
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 "AliCentrality.h"\r
34 #include "AliESDVZERO.h"\r
35 #include "AliMultiplicity.h"\r
36 \r
37 #include "AliESDtrackCuts.h"\r
38 #include "AliMCEventHandler.h"\r
39 #include "dNdPt/AlidNdPt.h"\r
40 #include "dNdPt/AlidNdPtEventCuts.h"\r
41 #include "dNdPt/AlidNdPtAcceptanceCuts.h"\r
42 \r
43 #include "dNdPt/AlidNdPtTask.h"\r
44 \r
45 using namespace std;\r
46 \r
47 ClassImp(AlidNdPtTask)\r
48 \r
49 //_____________________________________________________________________________\r
50 AlidNdPtTask::AlidNdPtTask(const char *name) \r
51   : AliAnalysisTaskSE(name)\r
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   , fUseCentrality(0)    // default = off\r
59   , fUseCentralityBin(0)\r
60 {\r
61   // Constructor\r
62 \r
63   // Define input and output slots here\r
64   DefineOutput(1, TList::Class());\r
65 \r
66   // create the list for comparison objects\r
67   fCompList = new TList;\r
68 }\r
69 \r
70 //_____________________________________________________________________________\r
71 AlidNdPtTask::~AlidNdPtTask()\r
72 {\r
73   if(fOutput) delete fOutput;  fOutput =0; \r
74   if(fCompList) delete fCompList;  fCompList =0; \r
75 }\r
76 \r
77 //____________________________________________________________________________\r
78 Bool_t AlidNdPtTask::Notify()\r
79 {\r
80   static Int_t count = 0;\r
81   count++;\r
82   //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName());\r
83   TTree *chain = (TChain*)GetInputData(0);\r
84   if(chain)\r
85     Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());\r
86 \r
87   /*\r
88   TChain *chain = (TChain*)GetInputData(0);\r
89   AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());\r
90   if (!esdH) {\r
91     Printf("ERROR: Could not get ESDInputHandler");\r
92     return kFALSE;\r
93   } else {\r
94     if(chain)\r
95     Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName());\r
96   }\r
97   */\r
98 \r
99 return kTRUE;\r
100 }\r
101 \r
102 //_____________________________________________________________________________\r
103 Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj) \r
104 {\r
105   // add analysis object to the list\r
106   if(pObj == 0) {\r
107     Printf("ERROR: Could not add comparison object");\r
108     return kFALSE;\r
109   }\r
110 \r
111   // add object to the list\r
112   fCompList->AddLast(pObj);\r
113        \r
114 return kTRUE;\r
115 }\r
116 \r
117 //_____________________________________________________________________________\r
118 void AlidNdPtTask::UserCreateOutputObjects()\r
119 {\r
120   // Create histograms\r
121   // Called once\r
122 \r
123   OpenFile(1, "RECREATE");\r
124 \r
125   //\r
126   // create output list\r
127   //\r
128   fOutput = new TList;\r
129   fOutput->SetOwner();\r
130   fPitList = fOutput->MakeIterator();\r
131 \r
132   // add dNdPt analysis objects to the output\r
133   AlidNdPt *pObj=0;\r
134   Int_t count=0;\r
135   TIterator *pitCompList = fCompList->MakeIterator();\r
136   pitCompList->Reset();\r
137   while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {\r
138     fOutput->Add(pObj);\r
139     count++;\r
140   }\r
141   Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);\r
142 \r
143   if(fUseCentrality) {\r
144     Printf("Use Centrality - Bin %d", fUseCentralityBin);\r
145   }\r
146 \r
147   PostData(1, fOutput);\r
148 }\r
149 \r
150 //_____________________________________________________________________________\r
151 void AlidNdPtTask::UserExec(Option_t *) \r
152 {\r
153   //\r
154   // Called for each event\r
155   //\r
156 \r
157   // ESD event\r
158   fESD = (AliESDEvent*) (InputEvent());\r
159   if (!fESD) {\r
160     Printf("ERROR: ESD event not available");\r
161     return;\r
162   }\r
163 \r
164   // MC event\r
165   if(fUseMCInfo) {\r
166     fMC = MCEvent();\r
167     if (!fMC) {\r
168       Printf("ERROR: MC event not available");\r
169       return;\r
170     }\r
171   }\r
172 \r
173   // Process analysis\r
174   Bool_t process = kTRUE;\r
175 \r
176   // Check fo centrality\r
177   if (fUseCentrality) {\r
178     if ( CalculateCentralityBin() != fUseCentralityBin ) {\r
179       process = kFALSE;\r
180     }\r
181   }\r
182 \r
183   if (process) {\r
184     AlidNdPt *pObj = 0;\r
185     fPitList->Reset();\r
186     while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {\r
187       pObj->Process(fESD,fMC);\r
188     }\r
189   }\r
190 \r
191 \r
192   // Post output data.\r
193   PostData(1, fOutput);\r
194 }\r
195 \r
196 //_____________________________________________________________________________\r
197 void AlidNdPtTask::Terminate(Option_t *) \r
198 {\r
199   // Called one at the end \r
200   \r
201   // check output data\r
202   fOutput = dynamic_cast<TList*> (GetOutputData(1));\r
203   if (!fOutput) {\r
204     Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );\r
205     return;\r
206   }\r
207 }\r
208 \r
209 //________________________________________________________________________\r
210 Int_t AlidNdPtTask::CalculateCentralityBin(){\r
211   // Get Centrality bin\r
212 \r
213   Int_t centrality = -1;\r
214   Float_t centralityF = -1;\r
215 \r
216   if (fUseCentrality == 0)\r
217     return centrality;\r
218 \r
219   AliCentrality *esdCentrality = fESD->GetCentrality();\r
220     \r
221   // New : 2010-11-18 JMT \r
222   if ( fUseCentrality == 1 )\r
223     centralityF = esdCentrality->GetCentralityPercentile("V0M");\r
224   else if ( fUseCentrality == 2 )\r
225     centralityF = esdCentrality->GetCentralityPercentile("CL1");\r
226   else if ( fUseCentrality == 3 )\r
227     centralityF = esdCentrality->GetCentralityPercentile("TRK"); \r
228   if (centralityF == 0.)\r
229     centralityF = 100.;\r
230 \r
231   if      ( centralityF >=  0. && centralityF <   5.) centrality =  0;\r
232   else if ( centralityF >=  5. && centralityF <  10.) centrality =  5;\r
233   else if ( centralityF >= 10. && centralityF <  20.) centrality = 10;\r
234   else if ( centralityF >= 20. && centralityF <  30.) centrality = 20;\r
235   else if ( centralityF >= 30. && centralityF <  40.) centrality = 30;\r
236   else if ( centralityF >= 40. && centralityF <  50.) centrality = 40;\r
237   else if ( centralityF >= 50. && centralityF <  60.) centrality = 50;\r
238   else if ( centralityF >= 60. && centralityF <  70.) centrality = 60;\r
239   else if ( centralityF >= 70. && centralityF <  80.) centrality = 70;\r
240   else if ( centralityF >= 80. && centralityF <  90.) centrality = 80;\r
241   else if ( centralityF >= 90. && centralityF <=100.) centrality = 90;\r
242   \r
243   return centrality;\r
244 }\r