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