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