Fixing an error in the computation of the efficiency of a whole chamber (Matthieu)
[u/mrichter/AliRoot.git] / PWG3 / muondep / AliCheckMuonDetEltResponse.cxx
CommitLineData
128a8042 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 check the response of the detection elements of the MUON tracking chambers
17//in function of the position in the detection element.
18//Author: Nicolas LE BRIS - SUBATECH Nantes
19
20//PWG3/muon:
21#include "AliAnalysisTaskMuonTrackingEff.h"
22#include "AliCheckMuonDetEltResponse.h"
23
24//include STEER:
25#include "AliLog.h"
26#include "AliESDEvent.h"
27#include "AliTracker.h"
28#include "AliESDMuonTrack.h"
29
30//include MUON:
31#include "AliMUONTrack.h"
32#include "AliMUONTrackParam.h"
33#include "AliMUONTrackExtrap.h"
34#include "AliMUONVCluster.h"
35#include "AliMUONConstants.h"
36#include "AliMUONGeometryTransformer.h"
37#include "AliMUONESDInterface.h"
38
39//include MUON/mapping:
40#include "mapping/AliMpDEManager.h"
0246246b 41#include "mapping/AliMpSegmentation.h"
42#include "mapping/AliMpSlat.h"
43#include "mapping/AliMpSlatSegmentation.h"
44#include "mapping/AliMpSector.h"
45#include "mapping/AliMpSectorSegmentation.h"
46#include "mapping/AliMpPad.h"
128a8042 47
48//include ROOT:
49#include <Riostream.h>
50#include <TMath.h>
51#include <TROOT.h>
52#include <TSystem.h>
53#include <TH2F.h>
0246246b 54#include <TH1F.h>
128a8042 55#include <TClonesArray.h>
56#include <TPaveLabel.h>
57#include <TList.h>
58
59/// \cond CLASSIMP
60ClassImp(AliCheckMuonDetEltResponse)
61/// \endcond
62
63const Int_t AliCheckMuonDetEltResponse::fNbrOfChamber = 10;
64const Int_t AliCheckMuonDetEltResponse::fNbrOfStation = 5;
65const Int_t AliCheckMuonDetEltResponse::fNbrOfDetectionElt[10] = {4, 4, 4, 4, 18, 18, 26, 26, 26, 26};
66const Int_t AliCheckMuonDetEltResponse::fFirstDetectionElt[10] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
67const Int_t AliCheckMuonDetEltResponse::fOffset = 100;
68const Int_t AliCheckMuonDetEltResponse::fOverlapSize = 15;
0246246b 69const Int_t AliCheckMuonDetEltResponse::fYSlatSize = 20;
128a8042 70
71//_____________________________________________________________________________
72AliCheckMuonDetEltResponse::AliCheckMuonDetEltResponse()
128a8042 73: TObject(),
665701ae 74 fNCh(0),
75 fNSt(0),
76 fNDE(0),
128a8042 77 fTransformer(0x0),
665701ae 78 fESD(0x0),
128a8042 79 fTracksTotalNbr(0x0),
22b42448 80 fIsCosmicData(kFALSE),
128a8042 81 fTrackParams(0x0),
82 fTrackParam(0x0),
83 fCluster(0x0),
84 fDetEltTDHistList(0x0),
0246246b 85 fDetEltTTHistList(0x0),
86 fChamberTDHistList(0x0),
87 fChamberTTHistList(0x0)
128a8042 88{
89/// Default constructor
90
91 fNCh = AliCheckMuonDetEltResponse::fNbrOfChamber;
92 fNSt = AliCheckMuonDetEltResponse::fNbrOfStation;
93 fNDE = AliAnalysisTaskMuonTrackingEff::fTotNbrOfDetectionElt;
94
95 for (Int_t iCluster = 0; iCluster<fNCh; ++iCluster)
128a8042 96 fNbrClustersCh[iCluster] = 0;
128a8042 97
128a8042 98 for (Int_t i=0; i<fNCh; ++i)
128a8042 99 fTrackFilter[i] = 0;
128a8042 100}
101
665701ae 102//_____________________________________________________________________________
103AliCheckMuonDetEltResponse::AliCheckMuonDetEltResponse(const AliCheckMuonDetEltResponse& src)
104: TObject(src),
105 fNCh(0),
106 fNSt(0),
107 fNDE(0),
108 fTransformer(0x0),
109 fESD(0x0),
110 fTracksTotalNbr(0x0),
22b42448 111 fIsCosmicData(kFALSE),
665701ae 112 fTrackParams(0x0),
113 fTrackParam(0x0),
114 fCluster(0x0),
115 fDetEltTDHistList(0x0),
0246246b 116 fDetEltTTHistList(0x0),
117 fChamberTDHistList(0x0),
118 fChamberTTHistList(0x0)
665701ae 119{
120 src.Copy(*this);
121}
122//_____________________________________________________________________________
123AliCheckMuonDetEltResponse& AliCheckMuonDetEltResponse::operator=(const AliCheckMuonDetEltResponse& src)
124{
125 /// assignement operator
126 if ( this != &src )
127 {
128 src.Copy(*this);
129 }
130 return *this;
131}
128a8042 132
133//_____________________________________________________________________________
134AliCheckMuonDetEltResponse::AliCheckMuonDetEltResponse(const AliMUONGeometryTransformer* transformer,
135 AliESDEvent* esd,
136 TClonesArray* detEltTDHistList,
0246246b 137 TClonesArray* detEltTTHistList,
138 TClonesArray* chamberTDHistList,
139 TClonesArray* chamberTTHistList,
140 Bool_t isCosmic)
128a8042 141: TObject(),
665701ae 142 fNCh(0),
143 fNSt(0),
144 fNDE(0),
128a8042 145 fTransformer(transformer),
146 fESD(esd),
147 fTracksTotalNbr(0),
22b42448 148 fIsCosmicData(kFALSE),
128a8042 149 fTrackParams(0x0),
150 fTrackParam(0),
0246246b 151 fCluster(0),
128a8042 152 fDetEltTDHistList(detEltTDHistList),
0246246b 153 fDetEltTTHistList(detEltTTHistList),
154 fChamberTDHistList(chamberTDHistList),
155 fChamberTTHistList(chamberTTHistList)
128a8042 156{
157/// Constructor
158
159 fNCh = AliCheckMuonDetEltResponse::fNbrOfChamber;
160 fNSt = AliCheckMuonDetEltResponse::fNbrOfStation;
161 fNDE = AliAnalysisTaskMuonTrackingEff::fTotNbrOfDetectionElt;
0246246b 162 fIsCosmicData = isCosmic;
128a8042 163
164 for (Int_t iCluster = 0; iCluster<fNCh; ++iCluster)
128a8042 165 fNbrClustersCh[iCluster] = 0;
0246246b 166
128a8042 167 for (Int_t i=0; i<fNCh; ++i)
128a8042 168 fTrackFilter[i] = 0;
0246246b 169
128a8042 170}
171
172
173//_____________________________________________________________________________
174AliCheckMuonDetEltResponse::~AliCheckMuonDetEltResponse()
175
176{
177/// Destructor
178 delete fTrackParams;
179}
180
181
182
183//_____________________________________________________________________________
184void AliCheckMuonDetEltResponse::CheckDetEltResponse()
185{
186//
187//Cataloging positions (X,Y) of the clusters detected in the detection elements
188//(fDetEltTDHistList), and positions of crossing points between all the
189//tracks and the detection elements (fDetEltTTHistList).
190//Efficiency = 100 * fDetEltTDHistList / fDetEltTTHistList.
191
192//Loop on tracks
193//--------------
194 TrackLoop();
195}
196
197
198
199//_____________________________________________________________________________
200void AliCheckMuonDetEltResponse::TrackLoop()
201{
202 AliESDMuonTrack* esdTrack;
203 AliMUONTrack track;
204 Int_t nTracks, iTrack;
205
206 nTracks = (Int_t)fESD -> GetNumberOfMuonTracks();
207 fTrackParams = new TClonesArray();
208 ///Begininig of the loop:
209 for (iTrack = 0; iTrack < nTracks; iTrack++)
210 {
211 esdTrack = fESD -> GetMuonTrack(iTrack);
212
0246246b 213 if( esdTrack->ContainTrackerData() && esdTrack->GetMatchTrigger() > 0)
214 {
215 if (fIsCosmicData)
216 {
217 // Beginnig of long stuff to check the number of trigger hit (to only keep muon trigger and cut cosmic showers)
218 Int_t nTriggerHit = 0;
219 Int_t nTriggerHitStrip[8] = {0, 0, 0, 0,
220 0, 0, 0, 0};
221 UShort_t triggerPattern[8] = {esdTrack->GetTriggerX1Pattern(), esdTrack->GetTriggerX2Pattern(), esdTrack->GetTriggerX3Pattern(), esdTrack->GetTriggerX4Pattern(),
222 esdTrack->GetTriggerY1Pattern(), esdTrack->GetTriggerY2Pattern(), esdTrack->GetTriggerY3Pattern(), esdTrack->GetTriggerY4Pattern()};
223
224 for (Int_t ii = 0; ii < 8; ii++)
225 {
226 UShort_t pattern = triggerPattern[ii];
227 Int_t binaryValue[16] = {0, 0, 0, 0,
228 0, 0, 0, 0,
229 0, 0, 0, 0,
230 0, 0, 0, 0};
231
232 for (Int_t jj = 15; jj >= 0; jj--)
233 {
234 Int_t base = 1;
235 for (Int_t bb = 0; bb < jj; bb++)
236 base *= 2;
237
238 if (pattern/base == 1)
239 {
240 binaryValue[jj] = 1;
241 pattern = pattern - base;
242 }
243 }
244 }
245
246 for (Int_t ii = 0; ii < 8; ii++)
247 nTriggerHit += nTriggerHitStrip[ii];
248 // End of long stuff
249
250
251 // Important part
252 if (nTriggerHit < 10)
253 {
254 AliMUONESDInterface::ESDToMUON(*esdTrack, track);
255 fTrackParams = track.GetTrackParamAtCluster();
256 TrackParamLoop(); //!<Loop on trackParam.
257 }
258 }
259
260 // No trigger cut is required for non-cosmic data
261 else
262 {
263 AliMUONESDInterface::ESDToMUON(*esdTrack, track);
264 fTrackParams = track.GetTrackParamAtCluster();
265 TrackParamLoop(); //!<Loop on trackParam.
266 }
267 }
128a8042 268 }
269}
270
271
272
273//_____________________________________________________________________________
274void AliCheckMuonDetEltResponse::TrackParamLoop()
275{
0246246b 276 Int_t nTrackParams = (Int_t) fTrackParams->GetEntriesFast(); //!<Number of trackParams in the track.
277 Int_t iTrackParam = 0; //!<Number of the trackParam of the track.
278 Int_t oldChamber = -1, newChamber = 0; //!<To check if there is 0, 1 or 2 (overlap cases) clusters in the same chamber for a track.
279 Int_t detElt; //!<Detection element Id.
128a8042 280
0246246b 281 for (Int_t ch = 0; ch < fNCh; ++ch)
9a7a0b91 282 fTrackFilter[ch] = 0;
283
128a8042 284
0246246b 285 Double_t posXL, posYL, posZL; //!<Local positions.
286 Double_t posXG, posYG, posZG; //!<Global. positions.
287 Int_t chamberResponse [10] = {0}; //!<1 if the chamber has responded; 0 if not
288
289 for (iTrackParam = 0; iTrackParam < nTrackParams; ++iTrackParam)
128a8042 290 {
291 fTrackParam = (AliMUONTrackParam*) fTrackParams->At(iTrackParam);
292 fCluster = (AliMUONVCluster* ) fTrackParam ->GetClusterPtr();
293 fTrackFilter [fCluster->GetChamberId()] = 1;
294 chamberResponse[fCluster->GetChamberId()] = 1;
295 }
128a8042 296
9a7a0b91 297 for (Int_t station = 0; station < fNSt-1; ++station)
128a8042 298 {
9a7a0b91 299 Int_t filter; //<!
300 Int_t ch1, ch2, ch3, ch4; //<!
301 ch1 = 2*station; //<!
302 ch2 = 2*station + 1; //<!
303 ch3 = 2*station + 2; //<!
304 ch4 = 2*station + 3; //<!
305 //<!For the efficiency calculation the tracks
306 if (station < 3 ) //<!reconstructed must have responded to the
307 { //<!criteria of the tracking.
308 filter = fTrackFilter[ch1]; //<!And that's why the tracks usable for the
309 fTrackFilter[ch1] = fTrackFilter[ch2]; //<!intrinsic efficiency calculation are
310 fTrackFilter[ch2] = filter; //<!the tracks which have one or two clusters
311 } //<!in each station. So the case where a track
312 //<!hasn't a cluster in a station is not
313 else //<!taking into account.
314 { //<!This part solves the problem. See the ALICE
315 if (chamberResponse[ch3]*chamberResponse[ch4] != 0) //<!note of Diego STOCCO on the trigger efficiency
316 { //<!
317 filter = fTrackFilter[ch1]; //<!
318 fTrackFilter[ch1] = fTrackFilter[ch2]; //<!
319 fTrackFilter[ch2] = filter; //<!
320 } //<!
321 else //<!
322 { //<!
323 fTrackFilter[ch1] = 0; //<!
324 fTrackFilter[ch2] = 0; //<!
325 } //<!
326
327 if (chamberResponse[ch1]*chamberResponse[ch2] != 0)
0246246b 328 {
9a7a0b91 329 filter = fTrackFilter[ch3];
330 fTrackFilter[ch3] = fTrackFilter[ch4];
331 fTrackFilter[ch4] = filter;
332 }
333 else
334 {
335 fTrackFilter[ch3] = 0;
336 fTrackFilter[ch4] = 0;
0246246b 337 }
0246246b 338 }
9a7a0b91 339 }
0246246b 340
9a7a0b91 341
0246246b 342 ///Begining of the loop:
343 for (iTrackParam = 0; iTrackParam < nTrackParams; ++iTrackParam)
128a8042 344 {
345 fTrackParam = (AliMUONTrackParam*) fTrackParams->At(iTrackParam);
346 fCluster = (AliMUONVCluster* ) fTrackParam ->GetClusterPtr();
347
348 newChamber = fCluster->GetChamberId();
349 detElt = fCluster->GetDetElemId();
350
0246246b 351 ///Global and local positions calculation:
128a8042 352 posXG = fTrackParam->GetNonBendingCoor();
353 posYG = fTrackParam->GetBendingCoor();
354 posZG = fTrackParam->GetZ();
0246246b 355
128a8042 356 fTransformer->Global2Local(detElt, posXG, posYG, posZG, posXL, posYL, posZL); //!<Transfomation from global to local positions.
0246246b 357
358 ///Filling histograms of the cluster positions on the detection element of the TRACKS DETECTED (TD):
359 FillTDHistos(newChamber, detElt, posXL, posYL);
360
361 ///Filling histograms of the cluster positions on the detection element of ALL THE TRACKS (TT):
362 FillTTHistos(newChamber, detElt, posXL, posYL);
128a8042 363
364 if (newChamber != oldChamber)
128a8042 365 {
0246246b 366 if (newChamber > oldChamber + 1) //!<Check if it doesn't miss a chamber.
367 {
368 Int_t nbrMissChamber = newChamber - (oldChamber + 1);
369 FindAndFillMissedDetElt(fTrackParam, oldChamber+1, nbrMissChamber); //!<Calculation of the parameters of the missing cluster(s).
370 }
371
372 if ( iTrackParam == nTrackParams - 1 && newChamber != fNCh-1) //!<Check if the last chamber, chamber 9 (from 0 to 9) has responded.
9a7a0b91 373 FindAndFillMissedDetElt(fTrackParam, fNCh-1, 1); //!<Calculation of the parameters of the missing cluster(s) in the last chamber.
374
128a8042 375 }
128a8042 376 oldChamber = newChamber;
0246246b 377 }
128a8042 378}
379
380
381
382//_____________________________________________________________________________
0246246b 383void AliCheckMuonDetEltResponse::FillTDHistos(Int_t chamber,
384 Int_t detElt,
385 Double_t posXL,
386 Double_t posYL)
128a8042 387{
0246246b 388 if(fTrackFilter[chamber]== 1)
128a8042 389 {
390 Int_t iDet = 0; //!<Position of the detection element in the histograms' list.
391 iDet = FromDetElt2iDet(chamber, detElt);
392 ((TH2F*) fDetEltTDHistList->UncheckedAt(iDet))->Fill(posXL, posYL);
9a7a0b91 393 ((TH2F*) fDetEltTDHistList->UncheckedAt(fNDE))->Fill(chamber, 0);
394
0246246b 395 Int_t detEltLocalId = 0; //!<Id of the detection element in the station
396 detEltLocalId = FromDetElt2LocalId(chamber, detElt);
397 ((TH1F*) fChamberTDHistList->UncheckedAt(chamber))->Fill(detEltLocalId);
9a7a0b91 398 ((TH1F*) fChamberTDHistList->UncheckedAt(10))->Fill(chamber);
399 }
128a8042 400}
401
402
403
0246246b 404
128a8042 405//_____________________________________________________________________________
0246246b 406void AliCheckMuonDetEltResponse::FillTTHistos(Int_t chamber,
407 Int_t detElt,
408 Double_t posXL,
409 Double_t posYL)
128a8042 410{
0246246b 411 if(fTrackFilter[chamber] == 1)
128a8042 412 {
413 Int_t iDet = 0; //!<Position of the detection element in the histograms' list.
414 iDet = FromDetElt2iDet(chamber, detElt);
0246246b 415 ((TH2F*) fDetEltTTHistList->UncheckedAt(iDet)) -> Fill(posXL, posYL);
9a7a0b91 416 ((TH2F*) fDetEltTTHistList->UncheckedAt(fNDE))->Fill(chamber, 0);
417
0246246b 418 Int_t detEltLocalId = 0; //!<Id of the detection element in the station
419 detEltLocalId = FromDetElt2LocalId(chamber, detElt);
420 ((TH1F*) fChamberTTHistList->UncheckedAt(chamber))->Fill(detEltLocalId);
9a7a0b91 421 ((TH1F*) fChamberTTHistList->UncheckedAt(10))->Fill(chamber);
128a8042 422 }
423}
424
425
426
128a8042 427
428
429//_____________________________________________________________________________
430Int_t AliCheckMuonDetEltResponse::FromDetElt2iDet(Int_t chamber,
431 Int_t detElt)
432{
433///
434///Connexion between the detection element X and its position in the list of histograms iX.
435///
436
437 Int_t iDet = 0; //!<Position of the detection element (detElt) in the histograms' list.
438
439 if (chamber<4) iDet = detElt-fOffset*(chamber+1)+ 4* chamber ;
a6e0ebfe 440 if (chamber>3 && chamber<6) iDet = detElt-fOffset*(chamber+1)+18*(chamber-4)+16;
128a8042 441 if (chamber>5) iDet = detElt-fOffset*(chamber+1)+26*(chamber-6)+52;
442
443 return iDet;
444}
445
446
447
448//_____________________________________________________________________________
0246246b 449Int_t AliCheckMuonDetEltResponse::FromDetElt2LocalId(Int_t chamber,
450 Int_t detElt)
128a8042 451{
452///
0246246b 453///Connexion between the detection element X and its number in the station.
128a8042 454///
455
0246246b 456 Int_t localId = 0; //!<Position of the detection element (detElt) in the histograms' list.
457 localId = detElt - (chamber+1) * 100;
128a8042 458
0246246b 459 return localId;
460}
128a8042 461
128a8042 462
128a8042 463
0246246b 464//_____________________________________________________________________________
465void AliCheckMuonDetEltResponse::FindAndFillMissedDetElt(AliMUONTrackParam* extrapTrackParam,
466 Int_t firstMissCh,
467 Int_t nbrMissCh)
468{
469///
470///Find which detection elements should have been hit but were missed,
471///and fill the TT histos appropriately
472///
473 for (Int_t iCh = 0; iCh < nbrMissCh; ++iCh)
128a8042 474 {
0246246b 475 Int_t chamber = firstMissCh + iCh;
476 Int_t nbrOfDetElt = AliMpDEManager::GetNofDEInChamber(chamber, kTRUE); //!<Number of detection elements in the chamber.
477
478 Double_t pos1[6] = {0, 0, 0, 0, 0, 0}; //!<First point used to compute the extrapolated point (first 3 for global coordinates, last 3 for local).
479 Double_t pos2[6] = {0, 0, 0, 0, 0, 0}; //!<Second point used to compute the extrapolated point (first 3 for global coordinates, last 3 for local).
480 Double_t posMiss[2] = {0, 0}; //!<(X, Y) local coordinates of the missing cluster.
481
482 pos1[2] = AliMUONConstants::DefaultChamberZ(chamber); //!<Z of point 1, defined by being the Z of the chamber in "perfect" position.
483 AliMUONTrackExtrap::ExtrapToZ(extrapTrackParam, pos1[2]);
484 pos1[0] = extrapTrackParam->GetNonBendingCoor(); //!<X of point 1, extrapolated by following the Track.
485 pos1[1] = extrapTrackParam->GetBendingCoor(); //!<Y of point 1, extrapolated by following the Track.
486
487 pos2[2] = AliMUONConstants::DefaultChamberZ(chamber) + AliMUONConstants::DzCh(); //!<Z of point 2, defined by being the Z of the chamber in "perfect" position
488 AliMUONTrackExtrap::ExtrapToZ(extrapTrackParam, pos2[2]); //!< + plus a small shift (the distance between two stations in a same chamber).
489 pos2[0] = extrapTrackParam->GetNonBendingCoor(); //!<X of point 2, extrapolated by following the Track.
490 pos2[1] = extrapTrackParam->GetBendingCoor(); //!<Y of point 2, extrapolated by following the Track.
491
492
493
494 for (Int_t iDE = 0; iDE < nbrOfDetElt; iDE++) //!<Loop on all the detection element of the chamber
495 {
496 Int_t deId = (chamber + 1)*fOffset + iDE; //!<detection element Id
497
498 fTransformer->Global2Local(deId, pos1[0], pos1[1], pos1[2], pos1[3], pos1[4], pos1[5]); //!<convesrion of point 1 and 2 in the local coordinates
499 fTransformer->Global2Local(deId, pos2[0], pos2[1], pos2[2], pos2[3], pos2[4], pos2[5]);
500
501 CoordinatesOfMissingCluster(pos1[3], pos1[4], pos1[5], pos2[3], pos2[4], pos2[5], posMiss[0], posMiss[1]);
502
9a7a0b91 503 Bool_t isMissed = kFALSE;
0246246b 504 if (chamber < 4)
9a7a0b91 505 isMissed = CoordinatesInDetEltSt12(deId, posMiss[0], posMiss[1]);
0246246b 506 else
9a7a0b91 507 isMissed = CoordinatesInDetEltSt345(deId, posMiss[0], posMiss[1]);
0246246b 508
9a7a0b91 509 if (isMissed)
0246246b 510 FillTTHistos(chamber, deId, posMiss[0], posMiss[1]);
0246246b 511 }
128a8042 512 }
513}
0246246b 514
515
516
517//_____________________________________________________________________________
518void AliCheckMuonDetEltResponse::CoordinatesOfMissingCluster(Double_t x1, Double_t y1, Double_t z1,
519 Double_t x2, Double_t y2, Double_t z2,
520 Double_t& x, Double_t& y)
521{
522 //
523 //Compute the coordinates of the missing cluster.
524 //There are defined by the intersection between the straigth line joining two extrapolated points (1 and 2) and the detection element plane.
525 //In the local coordinates, this means Z=0 in the parametric equation of the line.
526 //
527
528 Double_t t = 0;
529 t = - z1 / (z2 - z1);
530
531 x = t * (x2 - x1) + x1;
532 y = t * (y2 - y1) + y1;
533}
534
535
536//_____________________________________________________________________________
537Bool_t AliCheckMuonDetEltResponse::CoordinatesInDetEltSt345(Int_t DeId, Double_t x, Double_t y)
538{
539 //
540 //Return kTRUE if the coordinates are in the Detection Element, for station 3, 4 and 5.
541 //This is done by checking if a pad correspond to the (x, y) position.
542 //
543
544 AliMpPad pad1;
545 AliMpPad pad2;
546
547 AliMpSlatSegmentation *segm1 = new AliMpSlatSegmentation(AliMpSegmentation::Instance(kFALSE)->GetSlat(DeId, AliMp::kCath0));
548 AliMpSlatSegmentation *segm2 = new AliMpSlatSegmentation(AliMpSegmentation::Instance(kFALSE)->GetSlat(DeId, AliMp::kCath1));
549 pad1 = segm1->PadByPosition(x, y, kFALSE);
550 pad2 = segm2->PadByPosition(x, y, kFALSE);
551
9a7a0b91 552 if (pad1.IsValid() && pad2.IsValid())
0246246b 553 return kTRUE;
554 else
555 return kFALSE;
556}
557
558
559//_____________________________________________________________________________
560Bool_t AliCheckMuonDetEltResponse::CoordinatesInDetEltSt12(Int_t DeId, Double_t x, Double_t y)
561{
562 //Return kTRUE if the coordinates are in the Detection Element, for station 1 and 2.
563 //This is done by checking if a pad correspond to the (x, y) position.
564
565 AliMpPad pad1;
566 AliMpPad pad2;
567
568 AliMpSectorSegmentation *segm1 = new AliMpSectorSegmentation(AliMpSegmentation::Instance(kFALSE)->GetSector(DeId, AliMp::kCath0));
569 AliMpSectorSegmentation *segm2 = new AliMpSectorSegmentation(AliMpSegmentation::Instance(kFALSE)->GetSector(DeId, AliMp::kCath1));
570 pad1 = segm1->PadByPosition(x, y, kFALSE);
571 pad2 = segm2->PadByPosition(x, y, kFALSE);
572
9a7a0b91 573 if (pad1.IsValid() && pad2.IsValid())
0246246b 574 return kTRUE;
575 else
576 return kFALSE;
577}