937aed88069644196e565f7ac2ed914284ad3998
[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
30 //ANALYSIS includes
31 #include "AliAnalysisManager.h"
32 #include "AliAnalysisTask.h"
33
34 //STEER includes
35 #include "AliESDEvent.h"
36 #include "AliESDMuonTrack.h"
37 #include "AliESDInputHandler.h"
38 #include "AliMagFMaps.h"
39 #include "AliTracker.h"
40 #include "AliAnalysisManager.h"
41
42 //PWG3/muon includes
43 #include "AliAnalysisTaskMuonTrackingEff.h"
44 #include "AliCheckMuonDetEltResponse.h"
45
46 //MUON includes
47 #include "AliMUONGeometryTransformer.h"
48 #include "AliMUONTrackExtrap.h"
49
50 ClassImp(AliAnalysisTaskMuonTrackingEff)
51
52 const Int_t AliAnalysisTaskMuonTrackingEff::fTotNbrOfDetectionElt  = 156;
53
54 //________________________________________________________________________
55 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff()
56     :
57     AliAnalysisTask(),
58     fTransformer(0x0),
59     fESD(0x0),
60     fDetEltEffHistList(0x0),
61     fDetEltTDHistList(0x0),
62     fDetEltTTHistList(0x0)
63 {
64 /// Default constructor
65 }
66 //________________________________________________________________________
67 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const AliAnalysisTaskMuonTrackingEff& src)
68     :
69     AliAnalysisTask(src),
70     fTransformer(0x0),
71     fESD(0x0),
72     fDetEltEffHistList(0x0),
73     fDetEltTDHistList(0x0),
74     fDetEltTTHistList(0x0)
75 {
76   /// copy ctor
77   src.Copy(*this);
78 }
79 //________________________________________________________________________
80 AliAnalysisTaskMuonTrackingEff& AliAnalysisTaskMuonTrackingEff::operator=(const AliAnalysisTaskMuonTrackingEff& src)
81 {
82   /// assignement operator
83   if ( this != &src ) 
84   {
85     src.Copy(*this);
86   }
87   return *this;
88 }
89
90 //________________________________________________________________________
91 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const char* name,
92                                        const AliMUONGeometryTransformer* transformer)
93     :
94     AliAnalysisTask(name, "AnalysisTaskESD"),
95     fTransformer(transformer),
96     fESD(0x0),
97     fDetEltEffHistList(0x0),
98     fDetEltTDHistList(0x0),
99     fDetEltTTHistList(0x0)
100 {
101 //Constructor
102 //-----------
103     
104 //Define detection element efficiency histograms
105 //----------------------------------------------
106
107     fDetEltEffHistList = new TClonesArray("TH2F",fTotNbrOfDetectionElt + 3); //!<+3 for: 1.the total efficiency chamber by chamber histogram.
108                                                                 //!<        2.the total number of tracks detected by the tracking system.
109                                                                 //!<        3.the number of track used for the efficiency calculation chamber by chamber
110     fDetEltTDHistList  = new TClonesArray("TH2F",fTotNbrOfDetectionElt + 1);
111     fDetEltTTHistList  = new TClonesArray("TH2F",fTotNbrOfDetectionElt + 1);
112
113     for (Int_t i = 0; i<fTotNbrOfDetectionElt; ++i)
114     {
115       Int_t iDetElt = 0;
116       if      (i<16) iDetElt = 100*(i/4+1)       + i -  int(i/4)*4;
117       else if (i<52) iDetElt = 100*((i-16)/18+5) + i - (int((i-16)/18)*18 + 16);
118       if      (i>51) iDetElt = 100*((i-52)/26+7) + i - (int((i-52)/26)*26 + 52); 
119
120       Char_t histName[255]; 
121       Char_t histTitle[255];
122
123       sprintf(histName,"Eff_detEltNbr%d",iDetElt);
124       sprintf(histTitle,"detEltNbr %d",iDetElt);
125       if(i<16) new((*fDetEltEffHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110);//!<Stations 1 & 2.
126       else     new((*fDetEltEffHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40); //!<Stations 3 -> 5.
127       
128       sprintf(histName,"TD_detEltNbr%d",iDetElt);
129       if(i<16) new((*fDetEltTDHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110);//!<Stations 1 & 2.
130       else     new((*fDetEltTDHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40); //!<Stations 3 -> 5.
131
132       sprintf(histName,"TT_detEltNbr%d",iDetElt);
133       if(i<16) new((*fDetEltTTHistList)[i]) TH2F(histName,histTitle,12,-10,110,12,-10,110); //!<Stations 1 & 2.
134       else     new((*fDetEltTTHistList)[i]) TH2F(histName,histTitle,28,-140,140,8,-40,40);  //!<Stations 3 -> 5.
135       
136       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetXaxis() -> SetTitle("X (cm)");
137       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetYaxis() -> SetTitle("Y (cm)");
138       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetZaxis() -> SetTitle("Efficiency (%)");  
139       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetXaxis() -> SetTitleOffset(1.8);
140       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetYaxis() -> SetTitleOffset(1.8); 
141       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> GetZaxis() -> SetTitleOffset(1.2); 
142       ((TH2F*) fDetEltEffHistList->UncheckedAt(i)) -> SetOption("LEGO");
143     }
144
145     new((*fDetEltTDHistList )[fTotNbrOfDetectionElt]) TH2F("TD_Chamber" ,"TD_Chamber" ,10,0,10,1,0,1); //!<Detected tracks.
146     new((*fDetEltTTHistList )[fTotNbrOfDetectionElt]) TH2F("TT_Chamber" ,"TT_Chamber" ,10,0,10,1,0,1); //!<Tracks total number.
147     new((*fDetEltEffHistList)[fTotNbrOfDetectionElt]) TH2F("fChamberEff","fChamberEff",10,0,10,1,0,1); //!<Chamber efficiency.
148
149     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetXaxis() -> SetTitle("Chamber number");
150     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetYaxis() -> SetTitle("");
151     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetZaxis() -> SetTitle("Efficiency (%)");  
152     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetXaxis() -> SetTitleOffset(1.8);
153     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetYaxis() -> SetTitleOffset(1.8); 
154     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> GetZaxis() -> SetTitleOffset(1.2); 
155     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt)) -> SetOption("LEGO");
156   
157     new((*fDetEltEffHistList)[157]) TH2F("TT_Chamber" ,"TT_Chamber" ,10,0,10,1,0,1); //!<Tracks total number by chamber.
158
159     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetXaxis() -> SetTitle("Chamber number");
160     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetYaxis() -> SetTitle("");
161     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetZaxis() -> SetTitle("Number of tracks");  
162     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetXaxis() -> SetTitleOffset(1.8);
163     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetYaxis() -> SetTitleOffset(1.8); 
164     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> GetZaxis() -> SetTitleOffset(1.2); 
165     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 1)) -> SetOption("LEGO");
166
167     new((*fDetEltEffHistList)[158]) TH2F("Total_Number_of_Tracks" ,"Total_Number_of_Tracks" ,1,0,1,1,0,1); //!<Tracks total number.
168
169     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetXaxis() -> SetTitle("");
170     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetYaxis() -> SetTitle("");
171     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetZaxis() -> SetTitle("Number of tracks");  
172     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetXaxis() -> SetTitleOffset(1.8);
173     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetYaxis() -> SetTitleOffset(1.8); 
174     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> GetZaxis() -> SetTitleOffset(1.2); 
175     ((TH2F*) fDetEltEffHistList->UncheckedAt(fTotNbrOfDetectionElt + 2)) -> SetOption("LEGO");    
176
177 //Define input & output
178 //---------------------
179
180 // -Input slot 0 works with a TChain:
181     DefineInput(0, TChain::Class());
182
183 // -Output slot 0 writes into a TClonesArray:
184     DefineOutput(0, TClonesArray::Class());
185 }
186
187
188
189 //______________________________________________________________________________
190 AliAnalysisTaskMuonTrackingEff::~AliAnalysisTaskMuonTrackingEff()
191 {
192 // Destructor.
193     delete fDetEltEffHistList;
194     delete fDetEltTDHistList;
195     delete fDetEltTTHistList;
196 }
197
198
199
200 //________________________________________________________________________
201 void AliAnalysisTaskMuonTrackingEff::CreateOutputObjects()
202 {
203     OpenFile(0);
204 }
205
206
207
208 //________________________________________________________________________
209 void AliAnalysisTaskMuonTrackingEff::ConnectInputData(Option_t */*option*/)
210
211 {
212 //Set mag field; waiting for mag field in CDB 
213 //-------------------------------------------
214     AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
215     AliTracker::SetFieldMap(field, kFALSE);
216     
217 //Set Field Map for track extrapolation
218 //-------------------------------------
219     AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
220
221 //Connect input
222     AliESDInputHandler* esdHandler = (AliESDInputHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
223     if (!esdHandler)
224     {
225       Printf("ERROR: Could not get ESDInputHandler");
226     } 
227     else fESD = esdHandler->GetEvent();
228 }
229
230
231 //________________________________________________________________________
232 void AliAnalysisTaskMuonTrackingEff::Exec(Option_t */*option*/)
233 {
234 //Execute analysis for current event
235     
236    
237     AliCheckMuonDetEltResponse* chamberEff;
238     chamberEff = new AliCheckMuonDetEltResponse(fTransformer, fESD, fDetEltTDHistList, fDetEltTTHistList);
239     chamberEff->CheckDetEltResponse();
240
241
242     for( Int_t i = 0; i<156; ++i)
243     {
244       ((TH2F*) fDetEltEffHistList->UncheckedAt(i))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(i),
245                                                              (TH2F*) fDetEltTTHistList->UncheckedAt(i), 100., 1.); 
246     }
247
248     ((TH2F*) fDetEltEffHistList->UncheckedAt(156))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(156),
249                                                              (TH2F*) fDetEltTTHistList->UncheckedAt(156), 100., 1.); 
250
251
252     ((TH2F*) fDetEltEffHistList->UncheckedAt(157))-> Add   ( (TH2F*) fDetEltTTHistList ->UncheckedAt(156),
253                                                              (TH2F*) fDetEltEffHistList->UncheckedAt(157), 1., 0.); 
254
255
256     ((TH2F*) fDetEltEffHistList->UncheckedAt(158))-> Fill(0., 0., ((Double_t)fESD -> GetNumberOfMuonTracks()));
257
258
259 //Post the output data:
260     PostData(0, fDetEltEffHistList);  
261 }
262
263
264
265 //________________________________________________________________________
266 void AliAnalysisTaskMuonTrackingEff::Terminate(Option_t */*option*/)
267 {
268 //Terminate analysis
269
270 }