1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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
27 #include <TClonesArray.h>
31 #include "AliAnalysisManager.h"
32 #include "AliAnalysisTask.h"
35 #include "AliESDEvent.h"
36 #include "AliESDMuonTrack.h"
37 #include "AliESDInputHandler.h"
38 #include "AliMagFMaps.h"
39 #include "AliTracker.h"
40 #include "AliAnalysisManager.h"
43 #include "AliAnalysisTaskMuonTrackingEff.h"
44 #include "AliCheckMuonDetEltResponse.h"
47 #include "AliMUONGeometryTransformer.h"
48 #include "AliMUONTrackExtrap.h"
50 ClassImp(AliAnalysisTaskMuonTrackingEff)
52 const Int_t AliAnalysisTaskMuonTrackingEff::fTotNbrOfDetectionElt = 156;
54 //________________________________________________________________________
55 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff()
60 fDetEltEffHistList(0x0),
61 fDetEltTDHistList(0x0),
62 fDetEltTTHistList(0x0)
64 /// Default constructor
66 //________________________________________________________________________
67 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const AliAnalysisTaskMuonTrackingEff& src)
72 fDetEltEffHistList(0x0),
73 fDetEltTDHistList(0x0),
74 fDetEltTTHistList(0x0)
79 //________________________________________________________________________
80 AliAnalysisTaskMuonTrackingEff& AliAnalysisTaskMuonTrackingEff::operator=(const AliAnalysisTaskMuonTrackingEff& src)
82 /// assignement operator
90 //________________________________________________________________________
91 AliAnalysisTaskMuonTrackingEff::AliAnalysisTaskMuonTrackingEff(const char* name,
92 const AliMUONGeometryTransformer* transformer)
94 AliAnalysisTask(name, "AnalysisTaskESD"),
95 fTransformer(transformer),
97 fDetEltEffHistList(0x0),
98 fDetEltTDHistList(0x0),
99 fDetEltTTHistList(0x0)
104 //Define detection element efficiency histograms
105 //----------------------------------------------
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);
113 for (Int_t i = 0; i<fTotNbrOfDetectionElt; ++i)
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);
120 Char_t histName[255];
121 Char_t histTitle[255];
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.
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.
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.
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");
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.
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");
157 new((*fDetEltEffHistList)[157]) TH2F("TT_Chamber" ,"TT_Chamber" ,10,0,10,1,0,1); //!<Tracks total number by chamber.
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");
167 new((*fDetEltEffHistList)[158]) TH2F("Total_Number_of_Tracks" ,"Total_Number_of_Tracks" ,1,0,1,1,0,1); //!<Tracks total number.
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");
177 //Define input & output
178 //---------------------
180 // -Input slot 0 works with a TChain:
181 DefineInput(0, TChain::Class());
183 // -Output slot 0 writes into a TClonesArray:
184 DefineOutput(0, TClonesArray::Class());
189 //______________________________________________________________________________
190 AliAnalysisTaskMuonTrackingEff::~AliAnalysisTaskMuonTrackingEff()
193 delete fDetEltEffHistList;
194 delete fDetEltTDHistList;
195 delete fDetEltTTHistList;
200 //________________________________________________________________________
201 void AliAnalysisTaskMuonTrackingEff::CreateOutputObjects()
208 //________________________________________________________________________
209 void AliAnalysisTaskMuonTrackingEff::ConnectInputData(Option_t */*option*/)
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);
217 //Set Field Map for track extrapolation
218 //-------------------------------------
219 AliMUONTrackExtrap::SetField(AliTracker::GetFieldMap());
222 AliESDInputHandler* esdHandler = (AliESDInputHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
225 Printf("ERROR: Could not get ESDInputHandler");
227 else fESD = esdHandler->GetEvent();
231 //________________________________________________________________________
232 void AliAnalysisTaskMuonTrackingEff::Exec(Option_t */*option*/)
234 //Execute analysis for current event
237 AliCheckMuonDetEltResponse* chamberEff;
238 chamberEff = new AliCheckMuonDetEltResponse(fTransformer, fESD, fDetEltTDHistList, fDetEltTTHistList);
239 chamberEff->CheckDetEltResponse();
242 for( Int_t i = 0; i<156; ++i)
244 ((TH2F*) fDetEltEffHistList->UncheckedAt(i))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(i),
245 (TH2F*) fDetEltTTHistList->UncheckedAt(i), 100., 1.);
248 ((TH2F*) fDetEltEffHistList->UncheckedAt(156))-> Divide( (TH2F*) fDetEltTDHistList->UncheckedAt(156),
249 (TH2F*) fDetEltTTHistList->UncheckedAt(156), 100., 1.);
252 ((TH2F*) fDetEltEffHistList->UncheckedAt(157))-> Add ( (TH2F*) fDetEltTTHistList ->UncheckedAt(156),
253 (TH2F*) fDetEltEffHistList->UncheckedAt(157), 1., 0.);
256 ((TH2F*) fDetEltEffHistList->UncheckedAt(158))-> Fill(0., 0., ((Double_t)fESD -> GetNumberOfMuonTracks()));
259 //Post the output data:
260 PostData(0, fDetEltEffHistList);
265 //________________________________________________________________________
266 void AliAnalysisTaskMuonTrackingEff::Terminate(Option_t */*option*/)