1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\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
21 #include "TCanvas.h"
\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
33 #include "AliESDVZERO.h"
\r
34 #include "AliMultiplicity.h"
\r
36 #include "AliESDtrackCuts.h"
\r
37 #include "AliMCEventHandler.h"
\r
38 #include "dNdPt/AlidNdPt.h"
\r
39 #include "dNdPt/AlidNdPtEventCuts.h"
\r
40 #include "dNdPt/AlidNdPtAcceptanceCuts.h"
\r
42 #include "dNdPt/AlidNdPtTask.h"
\r
44 using namespace std;
\r
46 ClassImp(AlidNdPtTask)
\r
48 //_____________________________________________________________________________
\r
49 AlidNdPtTask::AlidNdPtTask(const char *name)
\r
50 : AliAnalysisTaskSE(name)
\r
56 , fUseMCInfo(kFALSE)
\r
57 , fUseCentrality(0) // default = off
\r
58 , fUseCentralityBin(0)
\r
62 // Define input and output slots here
\r
63 DefineOutput(1, TList::Class());
\r
65 // create the list for comparison objects
\r
66 fCompList = new TList;
\r
69 //_____________________________________________________________________________
\r
70 AlidNdPtTask::~AlidNdPtTask()
\r
72 if(fOutput) delete fOutput; fOutput =0;
\r
73 if(fCompList) delete fCompList; fCompList =0;
\r
76 //____________________________________________________________________________
\r
77 Bool_t AlidNdPtTask::Notify()
\r
79 static Int_t count = 0;
\r
81 //Printf("Processing %d. file: %s", count, ((TTree*) GetInputData(0))->GetCurrentFile()->GetName());
\r
82 TTree *chain = (TChain*)GetInputData(0);
\r
84 Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());
\r
87 TChain *chain = (TChain*)GetInputData(0);
\r
88 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
\r
90 Printf("ERROR: Could not get ESDInputHandler");
\r
94 Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName());
\r
101 //_____________________________________________________________________________
\r
102 Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj)
\r
104 // add analysis object to the list
\r
106 Printf("ERROR: Could not add comparison object");
\r
110 // add object to the list
\r
111 fCompList->AddLast(pObj);
\r
116 //_____________________________________________________________________________
\r
117 void AlidNdPtTask::UserCreateOutputObjects()
\r
119 // Create histograms
\r
122 OpenFile(1, "RECREATE");
\r
125 // create output list
\r
127 fOutput = new TList;
\r
128 fOutput->SetOwner();
\r
129 fPitList = fOutput->MakeIterator();
\r
131 // add dNdPt analysis objects to the output
\r
134 TIterator *pitCompList = fCompList->MakeIterator();
\r
135 pitCompList->Reset();
\r
136 while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {
\r
137 fOutput->Add(pObj);
\r
140 Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);
\r
142 if(fUseCentrality) {
\r
143 Printf("Use Centrality - Bin %d", fUseCentralityBin);
\r
147 //_____________________________________________________________________________
\r
148 void AlidNdPtTask::UserExec(Option_t *)
\r
151 // Called for each event
\r
155 fESD = (AliESDEvent*) (InputEvent());
\r
157 Printf("ERROR: ESD event not available");
\r
165 Printf("ERROR: MC event not available");
\r
170 // track cuts from Jochen
\r
171 const AliESDVertex* vtxESDTPC = fESD->GetPrimaryVertexTPC();
\r
172 if( vtxESDTPC->GetNContributors() < 1 ) {
\r
176 const AliMultiplicity* multESD = fESD->GetMultiplicity();
\r
177 if( vtxESDTPC->GetNContributors() < (-10.+0.25*multESD->GetNumberOfITSClusters(0)) ) {
\r
182 // Process analysis
\r
184 Bool_t process = kTRUE;
\r
186 // Check fo centrality
\r
187 if (fUseCentrality) {
\r
188 if ( CalculateCentralityBin() != fUseCentralityBin ) {
\r
194 AlidNdPt *pObj = 0;
\r
196 while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {
\r
197 pObj->Process(fESD,fMC);
\r
202 // Post output data.
\r
203 PostData(1, fOutput);
\r
206 //_____________________________________________________________________________
\r
207 void AlidNdPtTask::Terminate(Option_t *)
\r
209 // Called one at the end
\r
211 // check output data
\r
212 fOutput = dynamic_cast<TList*> (GetOutputData(1));
\r
214 Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );
\r
219 //________________________________________________________________________
\r
220 Int_t AlidNdPtTask::CalculateCentralityBin(){
\r
221 // Get Centrality bin
\r
223 Int_t centrality = -1;
\r
225 if (fUseCentrality == 0)
\r
228 AliESDVZERO* esdV0 = fESD->GetVZEROData();
\r
229 Float_t multV0 = esdV0->GetMTotV0A() + esdV0->GetMTotV0C();
\r
231 Float_t nClusters[6];
\r
233 const AliMultiplicity *mult = fESD->GetMultiplicity();
\r
234 for(Int_t ilay = 0; ilay < 6; ilay++){
\r
235 nClusters[ilay] = mult->GetNumberOfITSClusters(ilay);
\r
238 if ( fUseCentrality == 1 ) {
\r
239 // -- centrality cuts V0
\r
241 // 2010-11-10 - now old cuts
\r
242 if ( multV0 >= 0. && multV0 <= 106.75 ) centrality = 90;
\r
243 else if ( multV0 > 106.75 && multV0 <= 277.55 ) centrality = 80;
\r
244 else if ( multV0 > 277.55 && multV0 <= 661.85 ) centrality = 70;
\r
245 else if ( multV0 > 661.85 && multV0 <= 1345.05 ) centrality = 60;
\r
246 else if ( multV0 > 1345.05 && multV0 <= 2412.55 ) centrality = 50;
\r
247 else if ( multV0 > 2412.55 && multV0 <= 3907.05 ) centrality = 40;
\r
248 else if ( multV0 > 3907.05 && multV0 <= 6042.05 ) centrality = 30;
\r
249 else if ( multV0 > 6042.05 && multV0 <= 8902.95 ) centrality = 20;
\r
250 else if ( multV0 > 8902.95 && multV0 <= 12788.6 ) centrality = 10;
\r
251 else if ( multV0 > 12788.6 && multV0 <= 15222.5 ) centrality = 5;
\r
252 else if ( multV0 > 15222.5 && multV0 <= 19449.8 ) centrality = 0;
\r
255 if ( multV0 >= 0. && multV0 <= 124.5 ) centrality = 90;
\r
256 else if ( multV0 > 124.5 && multV0 <= 274.5 ) centrality = 80;
\r
257 else if ( multV0 > 274.5 && multV0 <= 574.5 ) centrality = 70;
\r
258 else if ( multV0 > 574.5 && multV0 <= 1224.5 ) centrality = 60;
\r
259 else if ( multV0 > 1224.5 && multV0 <= 2174.5 ) centrality = 50;
\r
260 else if ( multV0 > 2174.5 && multV0 <= 3624.5 ) centrality = 40;
\r
261 else if ( multV0 > 3624.5 && multV0 <= 5574.5 ) centrality = 30;
\r
262 else if ( multV0 > 5574.5 && multV0 <= 8274.5 ) centrality = 20;
\r
263 else if ( multV0 > 8274.5 && multV0 <= 12024.5 ) centrality = 10;
\r
264 else if ( multV0 > 12024.5 && multV0 <= 14674.5 ) centrality = 5;
\r
265 else if ( multV0 > 14674.5 && multV0 <= 19449.5 ) centrality = 0;
\r
268 else if ( fUseCentrality == 2 ) {
\r
270 // 2010-11-10 - now old cuts
\r
271 if ( nClusters[1] >= 0. && nClusters[1] <= 7.18 ) centrality = 100;
\r
272 else if ( nClusters[1] > 7.18 && nClusters[1] <= 35.9 ) centrality = 90;
\r
273 else if ( nClusters[1] > 35.9 && nClusters[1] <= 93.34 ) centrality = 80;
\r
274 else if ( nClusters[1] > 93.34 && nClusters[1] <= 222.58 ) centrality = 70;
\r
275 else if ( nClusters[1] > 222.58 && nClusters[1] <= 437.98 ) centrality = 60;
\r
276 else if ( nClusters[1] > 437.98 && nClusters[1] <= 768.26 ) centrality = 50;
\r
277 else if ( nClusters[1] > 768.26 && nClusters[1] <= 1242.14 ) centrality = 40;
\r
278 else if ( nClusters[1] > 1242.14 && nClusters[1] <= 1888.34 ) centrality = 30;
\r
279 else if ( nClusters[1] > 1888.34 && nClusters[1] <= 2735.58 ) centrality = 20;
\r
280 else if ( nClusters[1] > 2735.58 && nClusters[1] <= 3884.38 ) centrality = 10;
\r
281 else if ( nClusters[1] > 3884.38 && nClusters[1] <= 4573.66 ) centrality = 5;
\r
282 else if ( nClusters[1] > 4573.66 && nClusters[1] <= 6540.98 ) centrality = 0;
\r
285 if ( nClusters[1] > 0. && nClusters[1] <= 29.5 ) centrality = 90;
\r
286 else if ( nClusters[1] > 29.5 && nClusters[1] <= 69.5 ) centrality = 80;
\r
287 else if ( nClusters[1] > 69.5 && nClusters[1] <= 149.5 ) centrality = 70;
\r
288 else if ( nClusters[1] > 149.5 && nClusters[1] <= 309.5 ) centrality = 60;
\r
289 else if ( nClusters[1] > 309.5 && nClusters[1] <= 589.5 ) centrality = 50;
\r
290 else if ( nClusters[1] > 589.5 && nClusters[1] <= 989.5 ) centrality = 40;
\r
291 else if ( nClusters[1] > 989.5 && nClusters[1] <= 1569.5 ) centrality = 30;
\r
292 else if ( nClusters[1] > 1569.5 && nClusters[1] <= 2369.5 ) centrality = 20;
\r
293 else if ( nClusters[1] > 2369.5 && nClusters[1] <= 3509.5 ) centrality = 10;
\r
294 else if ( nClusters[1] > 3509.5 && nClusters[1] <= 4349.5 ) centrality = 5;
\r
295 else if ( nClusters[1] > 4349.5 && nClusters[1] <= 6540.5 ) centrality = 0;
\r