]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/muondep/AliAnalysisTaskMuonTrackingEff.cxx
Fixing conding violations (Matthieu)
[u/mrichter/AliRoot.git] / PWG3 / muondep / AliAnalysisTaskMuonTrackingEff.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //Class to calculate the intrinsic efficiency of the detection elements of the
17 //MUON tracking chambers in function of the position in the detection element.
18 //Author:  Nicolas LE BRIS - SUBATECH Nantes
19
20
21 //ROOT includes
22 #include <TChain.h>
23 #include <TFile.h>
24 #include <TClonesArray.h>
25 #include <TH2F.h>
26
27 //ANALYSIS includes
28 #include "AliAnalysisManager.h"
29
30 //STEER includes
31 #include "AliESDEvent.h"
32 #include "AliESDMuonTrack.h"
33 #include "AliESDInputHandler.h"
34 #include "AliMagF.h"
35 #include "AliTracker.h"
36 #include "AliAnalysisManager.h"
37 #include "AliGeomManager.h"
38
39
40 //PWG3/muondep includes
41 #include "AliAnalysisTaskMuonTrackingEff.h"
42 #include "AliCheckMuonDetEltResponse.h"
43
44 //MUON includes
45 #include "AliMUONTrackExtrap.h"
46 #include "AliMUONGeometryTransformer.h"
47
48 ClassImp(AliAnalysisTaskMuonTrackingEff)
49
50 const Int_t AliAnalysisTaskMuonTrackingEff::fgkTotNbrOfDetectionElt  = 156;
51 const Int_t AliAnalysisTaskMuonTrackingEff::fgkTotNbrOfChamber  = 10;
52
53 //________________________________________________________________________
54 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff()
55   :
56   AliAnalysisTask(),
57   fESD(0x0),
58   fTransformer(0x0),
59   fDetEltEffHistList(0x0),
60   fDetEltTDHistList(0x0),
61   fDetEltTTHistList(0x0),
62   fChamberEffHistList(0x0),
63   fChamberTDHistList(0x0),
64   fChamberTTHistList(0x0),
65   fChamberEff(0x0),
66   fIsCosmicData(kFALSE)
67 {
68 /// Default constructor
69 }
70 //________________________________________________________________________
71 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const AliAnalysisTaskMuonTrackingEff& src)
72   :
73   AliAnalysisTask(src),
74   fESD(0x0),
75   fTransformer(0x0),
76   fDetEltEffHistList(0x0),
77   fDetEltTDHistList(0x0),
78   fDetEltTTHistList(0x0),
79   fChamberEffHistList(0x0),
80   fChamberTDHistList(0x0),
81   fChamberTTHistList(0x0),
82   fChamberEff(0x0),
83   fIsCosmicData(kFALSE)
84 {
85   /// copy ctor
86   src.Copy(*this);
87 }
88 //________________________________________________________________________
89 AliAnalysisTaskMuonTrackingEff& AliAnalysisTaskMuonTrackingEff::operator=(const AliAnalysisTaskMuonTrackingEff& src)
90 {
91   /// assignement operator
92   if ( this != &src ) 
93   {
94     src.Copy(*this);
95   }
96   return *this;
97 }
98
99 //________________________________________________________________________
100 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const char* name,
101                                                                Bool_t isCosmic)
102   :
103   AliAnalysisTask(name, "AnalysisTaskESD"),
104   fESD(0x0),
105   fTransformer(0x0),
106   fDetEltEffHistList(0x0),
107   fDetEltTDHistList(0x0),
108   fDetEltTTHistList(0x0),
109   fChamberEffHistList(0x0),
110   fChamberTDHistList(0x0),
111   fChamberTTHistList(0x0),
112   fChamberEff(0x0),
113   fIsCosmicData(kFALSE)
114 {
115 //Constructor
116 //-----------
117   
118   fIsCosmicData = isCosmic;  
119
120 //Load the geometry
121   if (!AliGeomManager::GetGeometry())
122     AliGeomManager::LoadGeometry();
123   fTransformer = new AliMUONGeometryTransformer();
124   fTransformer->LoadGeometryData();  
125
126
127 //Define detection element efficiency histograms
128 //----------------------------------------------
129
130     fDetEltEffHistList = new TClonesArray("TH2F",fgkTotNbrOfDetectionElt + 3); //!<+3 for: 1.the total efficiency chamber by chamber histogram.
131                                                                 //!<        2.the total number of tracks detected by the tracking system.
132                                                                 //!<        3.the number of track used for the efficiency calculation chamber by chamber
133     fDetEltTDHistList  = new TClonesArray("TH2F",fgkTotNbrOfDetectionElt + 1);
134     fDetEltTTHistList  = new TClonesArray("TH2F",fgkTotNbrOfDetectionElt + 1);
135
136
137     fChamberEffHistList = new TClonesArray("TH1F", fgkTotNbrOfChamber + 3);
138     fChamberTDHistList = new TClonesArray("TH1F", fgkTotNbrOfChamber + 1);
139     fChamberTTHistList = new TClonesArray("TH1F", fgkTotNbrOfChamber + 1);
140  
141
142
143     for (Int_t i = 0; i<fgkTotNbrOfDetectionElt; ++i)
144     {
145       Int_t iDetElt = 0;
146       if      (i<16) iDetElt = 100*(i/4+1)       + i -  int(i/4)*4;
147       else if (i<52) iDetElt = 100*((i-16)/18+5) + i - (int((i-16)/18)*18 + 16);
148       if      (i>51) iDetElt = 100*((i-52)/26+7) + i - (int((i-52)/26)*26 + 52); 
149
150       Char_t histName[255]; 
151       Char_t histTitle[255];
152
153       sprintf(histName,"Eff_detEltNbr%d",iDetElt);
154       sprintf(histTitle,"detEltNbr %d",iDetElt);
155       if(i<16) new((*fDetEltEffHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110);//!<Stations 1 & 2.
156       else     new((*fDetEltEffHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40); //!<Stations 3 -> 5.
157       
158       sprintf(histName,"TD_detEltNbr%d",iDetElt);
159       if(i<16) new((*fDetEltTDHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110);//!<Stations 1 & 2.
160       else     new((*fDetEltTDHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40); //!<Stations 3 -> 5.
161
162       sprintf(histName,"TT_detEltNbr%d",iDetElt);
163       if(i<16) new((*fDetEltTTHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110); //!<Stations 1 & 2.
164       else     new((*fDetEltTTHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40);  //!<Stations 3 -> 5.
165       
166       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetXaxis() -> SetTitle("X (cm)");
167       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetYaxis() -> SetTitle("Y (cm)");
168       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetZaxis() -> SetTitle("Efficiency (%)");  
169       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetXaxis() -> SetTitleOffset(1.8);
170       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetYaxis() -> SetTitleOffset(1.8); 
171       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetZaxis() -> SetTitleOffset(1.2); 
172       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> SetOption("LEGO");
173     }
174
175     for (Int_t j = 0; j < fgkTotNbrOfChamber; j++)
176       {
177         Char_t histName[255]; 
178         Char_t histTitle[255];
179
180
181         sprintf(histName,"Eff_ChamberNbr%d",j+1);
182         sprintf(histTitle,"ChamberNbr %d",j+1);
183         if (j<4) new ((*fChamberEffHistList)[j]) TH1F(histName, histTitle, 4, 0.0, 4.0);
184         else if (j<6) new ((*fChamberEffHistList)[j]) TH1F(histName, histTitle, 18, 0.0, 18.0);
185         if (j>=6) new ((*fChamberEffHistList)[j]) TH1F(histName, histTitle, 26, 0.0, 26.0);
186
187         sprintf(histName,"TD_ChamberNbr%d",j+1);
188         if (j<4) new ((*fChamberTDHistList)[j]) TH1F(histName, histTitle, 4, 0.0, 4.0);
189         else if (j<6) new ((*fChamberTDHistList)[j]) TH1F(histName, histTitle, 18, 0.0, 18.0);
190         if (j>=6) new ((*fChamberTDHistList)[j]) TH1F(histName, histTitle, 26, 0.0, 26.0);
191
192         sprintf(histName,"TT_ChamberNbr%d",j+1);
193         if (j<4) new ((*fChamberTTHistList)[j]) TH1F(histName, histTitle, 4, 0.0, 4.0);
194         else if (j<6) new ((*fChamberTTHistList)[j]) TH1F(histName, histTitle, 18, 0.0, 18.0);
195         if (j>=6) new ((*fChamberTTHistList)[j]) TH1F(histName, histTitle, 26, 0.0, 26.0);
196
197         ((TH1F*) fChamberEffHistList->UncheckedAt(j)) -> GetXaxis() -> SetTitle("DetElement");
198         ((TH1F*) fChamberEffHistList->UncheckedAt(j)) -> GetYaxis() -> SetTitle("Efficiency (%)");
199         ((TH1F*) fChamberEffHistList->UncheckedAt(j)) -> GetXaxis() -> SetTitleOffset(1.8);
200         ((TH1F*) fChamberEffHistList->UncheckedAt(j)) -> GetYaxis() -> SetTitleOffset(1.8); 
201         ((TH1F*) fChamberEffHistList->UncheckedAt(j)) -> Sumw2();       
202       }
203
204     new((*fDetEltTDHistList )[fgkTotNbrOfDetectionElt]) TH2F("TD_Chamber" ,"TD_Chamber" ,10,0,10,1,0,1); //!<Detected tracks.
205     new((*fDetEltTTHistList )[fgkTotNbrOfDetectionElt]) TH2F("TT_Chamber" ,"TT_Chamber" ,10,0,10,1,0,1); //!<Tracks total number.
206     new((*fDetEltEffHistList)[fgkTotNbrOfDetectionElt]) TH2F("fChamberEff","fChamberEff",10,0,10,1,0,1); //!<Chamber efficiency.
207
208     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetXaxis() -> SetTitle("Chamber number");
209     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetYaxis() -> SetTitle("");
210     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetZaxis() -> SetTitle("Efficiency (%)");  
211     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetXaxis() -> SetTitleOffset(1.8);
212     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetYaxis() -> SetTitleOffset(1.8); 
213     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> GetZaxis() -> SetTitleOffset(1.2); 
214     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt)) -> SetOption("LEGO");
215   
216     new((*fDetEltEffHistList)[157]) TH2F("TT_Chamber" ,"TT_Chamber" ,10,0,10,1,0,1); //!<Tracks total number by chamber.
217
218     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetXaxis() -> SetTitle("Chamber number");
219     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetYaxis() -> SetTitle("");
220     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetZaxis() -> SetTitle("Number of tracks");  
221     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetXaxis() -> SetTitleOffset(1.8);
222     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetYaxis() -> SetTitleOffset(1.8); 
223     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> GetZaxis() -> SetTitleOffset(1.2); 
224     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 1)) -> SetOption("LEGO");
225
226     new((*fDetEltEffHistList)[158]) TH2F("Total_Number_of_Tracks" ,"Total_Number_of_Tracks" ,1,0,1,1,0,1); //!<Tracks total number.
227
228     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetXaxis() -> SetTitle("");
229     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetYaxis() -> SetTitle("");
230     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetZaxis() -> SetTitle("Number of tracks");  
231     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetXaxis() -> SetTitleOffset(1.8);
232     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetYaxis() -> SetTitleOffset(1.8); 
233     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> GetZaxis() -> SetTitleOffset(1.2); 
234     ((TH2F*) fDetEltEffHistList->UncheckedAt(fgkTotNbrOfDetectionElt + 2)) -> SetOption("LEGO");    
235
236
237     new((*fChamberTDHistList )[fgkTotNbrOfChamber]) TH1F("TD_Chamber_2" ,"TD_Chamber_2" ,10,0,10); //!<Detected tracks.
238     new((*fChamberTTHistList )[fgkTotNbrOfChamber]) TH1F("TT_Chamber_2" ,"TT_Chamber_2" ,10,0,10); //!<Tracks total number.
239     new((*fChamberEffHistList)[fgkTotNbrOfChamber]) TH1F("fChamberEff_2","fChamberEff_2",10,0,10); //!<Chamber efficiency.
240
241     ((TH1F*) fChamberTDHistList->UncheckedAt(fgkTotNbrOfChamber)) -> Sumw2();
242     ((TH1F*) fChamberTTHistList->UncheckedAt(fgkTotNbrOfChamber)) -> Sumw2();
243
244     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> GetXaxis() -> SetTitle("Chamber number");
245     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> GetYaxis() -> SetTitle("");
246     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> GetXaxis() -> SetTitleOffset(1.8);
247     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> GetYaxis() -> SetTitleOffset(1.8); 
248     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> Sumw2();
249     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber)) -> SetOption("");
250   
251     new((*fChamberEffHistList)[11]) TH1F("TT_Chamber_2" ,"TT_Chamber_2" ,10,0,10); //!<Tracks total number by chamber.
252
253     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> GetXaxis() -> SetTitle("Chamber number");
254     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> GetYaxis() -> SetTitle("");
255     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> GetXaxis() -> SetTitleOffset(1.8);
256     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> GetYaxis() -> SetTitleOffset(1.8); 
257     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> Sumw2();
258     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 1)) -> SetOption("");
259
260     new((*fChamberEffHistList)[12]) TH1F("Total_Number_of_Tracks_2" ,"Total_Number_of_Tracks_2" ,1,0,1); //!<Tracks total number.
261
262     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> GetXaxis() -> SetTitle("");
263     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> GetYaxis() -> SetTitle("");
264     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> GetXaxis() -> SetTitleOffset(1.8);
265     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> GetYaxis() -> SetTitleOffset(1.8); 
266     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> Sumw2();    
267     ((TH1F*) fChamberEffHistList->UncheckedAt(fgkTotNbrOfChamber + 2)) -> SetOption("");    
268
269
270
271
272  
273 //Define input & output
274 //---------------------
275
276 // -Input slot 0 works with a TChain:
277     DefineInput(0, TChain::Class());
278
279 // -Output slots 0 to 5 writes into a TClonesArray:
280     DefineOutput(0, TClonesArray::Class());
281     DefineOutput(1, TClonesArray::Class());
282     DefineOutput(2, TClonesArray::Class());
283     DefineOutput(3, TClonesArray::Class());
284     DefineOutput(4, TClonesArray::Class());
285     DefineOutput(5, TClonesArray::Class());
286 }
287
288
289
290 //______________________________________________________________________________
291 AliAnalysisTaskMuonTrackingEff::~AliAnalysisTaskMuonTrackingEff()
292 {
293 // Destructor.
294   delete fTransformer;
295   delete fDetEltEffHistList;
296   delete fDetEltTDHistList;
297   delete fDetEltTTHistList;
298   delete fChamberEffHistList;
299   delete fChamberTDHistList;
300   delete fChamberTTHistList;
301   delete fChamberEff;
302 }
303
304
305
306 //________________________________________________________________________
307 void AliAnalysisTaskMuonTrackingEff::CreateOutputObjects()
308 {
309     OpenFile(0);
310 }
311
312
313
314 //________________________________________________________________________
315 void AliAnalysisTaskMuonTrackingEff::ConnectInputData(Option_t */*option*/)
316
317 {
318   //Set Field Map for track extrapolation
319   AliMUONTrackExtrap::SetField();
320
321   //Connect input
322     AliESDInputHandler* esdHandler = (AliESDInputHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
323     if (!esdHandler)
324     {
325       Printf("ERROR: Could not get ESDInputHandler");
326     } 
327     else fESD = esdHandler->GetEvent();
328 }
329
330
331 //________________________________________________________________________
332 void AliAnalysisTaskMuonTrackingEff::Exec(Option_t */*option*/)
333 {
334 //Execute analysis for current event
335   if (fChamberEff == 0x0)
336     fChamberEff = new AliCheckMuonDetEltResponse(fTransformer, fESD, fDetEltTDHistList, fDetEltTTHistList, fChamberTDHistList, fChamberTTHistList);
337   fChamberEff->CheckDetEltResponse();
338
339     for( Int_t i = 0; i<156; ++i)
340     {
341       ((TH2F*) fDetEltEffHistList->UncheckedAt(i))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(i),
342                                                              (TH2F*) fDetEltTTHistList->UncheckedAt(i), 100., 1.); 
343     }
344
345     for (Int_t j = 0; j < 10; j++)
346       {
347         ((TH1F*) fChamberEffHistList->UncheckedAt(j))-> Divide( (TH1F*) fChamberTDHistList->UncheckedAt(j),
348                                                                 (TH1F*) fChamberTTHistList->UncheckedAt(j), 100., 1.);  
349       }
350
351
352     ((TH2F*) fDetEltEffHistList->UncheckedAt(156))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(156),
353                                                              (TH2F*) fDetEltTTHistList->UncheckedAt(156), 100., 1.); 
354
355
356     ((TH2F*) fDetEltEffHistList->UncheckedAt(157))-> Add   ( (TH2F*) fDetEltTTHistList ->UncheckedAt(156),
357                                                              (TH2F*) fDetEltEffHistList->UncheckedAt(157), 1., 0.); 
358
359
360     ((TH2F*) fDetEltEffHistList->UncheckedAt(158))-> Fill(0., 0., ((Double_t)fESD -> GetNumberOfMuonTracks()));
361
362
363     ((TH1F*) fChamberEffHistList->UncheckedAt(10))-> Divide( (TH1F*) fChamberTDHistList->UncheckedAt(10),
364                                                              (TH1F*) fChamberTTHistList->UncheckedAt(10), 100., 1.); 
365
366
367     ((TH1F*) fChamberEffHistList->UncheckedAt(11))-> Add   ( (TH1F*) fChamberTTHistList ->UncheckedAt(10),
368                                                              (TH1F*) fChamberEffHistList->UncheckedAt(11), 1., 0.); 
369
370
371     ((TH1F*) fChamberEffHistList->UncheckedAt(12))-> Fill(0., ((Double_t)fChamberEff -> GetNbrUsableTracks()));
372     fChamberEff->SetNbrUsableTracks(0);
373     //((TH1F*) fChamberEffHistList->UncheckedAt(12))-> Fill(0., ((Double_t)fESD -> GetNumberOfMuonTracks()));
374
375     ComputeErrors();
376
377 //Post the output data:
378     PostData(0, fDetEltTDHistList);  
379     PostData(1, fDetEltTTHistList);  
380     PostData(2, fDetEltEffHistList);  
381     PostData(3, fChamberTDHistList);
382     PostData(4, fChamberTTHistList);
383     PostData(5, fChamberEffHistList);
384 }
385
386
387
388 //________________________________________________________________________
389 void AliAnalysisTaskMuonTrackingEff::Terminate(Option_t */*option*/)
390 {
391 //Terminate analysis
392
393 }
394
395
396 //________________________________________________________________________
397 void AliAnalysisTaskMuonTrackingEff::ComputeErrors()
398 {
399   // Compute error on the efficiency
400   // eff = Ntd/Ntt
401   // error = max {1/Ntt, sqrt(eff*(1-eff)/Ntt)}
402
403   for (Int_t ii = 0; ii <= 10; ii++)
404     {
405       Int_t NumberOfBins = ((TH1F*) fChamberEffHistList->UncheckedAt(ii))->GetNbinsX();
406       for (Int_t jj = 1; jj <= NumberOfBins; jj++)
407         {
408           Double_t Ntd = ((TH1F*) fChamberTDHistList->UncheckedAt(ii))->GetBinContent(jj);
409           Double_t Ntt = ((TH1F*) fChamberTTHistList->UncheckedAt(ii))->GetBinContent(jj);
410
411           if (Ntt > 0.0 && Ntd > 0.0)
412             {
413               Double_t eff = ((TH1F*) fChamberEffHistList->UncheckedAt(ii))->GetBinContent(jj)/100.0;
414               Double_t err1 = 1.0/Ntt;
415               Double_t err2 = TMath::Sqrt(eff*(1.0 - eff)/Ntt);
416               Double_t error = TMath::Max(err1, err2);
417
418               ((TH1F*) fChamberEffHistList->UncheckedAt(ii))->SetBinError(jj, error*100.0);
419             }
420         }
421     }
422 }