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 **************************************************************************/
18 Revision 1.3 2000/10/22 16:55:43 morsch
19 Use only x-symmetry in global to local transformations and delegation.
21 Revision 1.2 2000/10/09 14:06:18 morsch
22 Some type cast problems of type (TMath::Sign((Float_t)1.,x)) corrected (P.H.)
24 Revision 1.1 2000/10/06 09:00:47 morsch
25 Segmentation class for chambers built out of slats.
29 #include "AliMUONSegmentationSlatN.h"
30 #include "AliMUONSegmentationSlatModuleN.h"
33 #include "TObjArray.h"
37 //___________________________________________
38 ClassImp(AliMUONSegmentationSlatN);
40 AliMUONSegmentationSlatN::AliMUONSegmentationSlatN()
42 // Default constructor
46 AliMUONSegmentationSlatN::AliMUONSegmentationSlatN(Int_t nsec)
47 : AliMUONSegmentationSlat(nsec)
49 // Non default constructor
53 Float_t AliMUONSegmentationSlatN::Dpx(Int_t isec) const
56 // Returns y-pad size for given sector isec
60 Float_t AliMUONSegmentationSlatN::Dpy(Int_t isec) const
63 // Returns x-pad size for given sector isec
64 // isec = 100*islat+iregion
69 return Slat(islat)->Dpy(iregion);
74 void AliMUONSegmentationSlatN::GlobalToLocal(
75 Int_t ix, Int_t iy, Int_t &islat, Int_t &ixlocal, Int_t &iylocal)
78 // Perform local to global transformation for pad coordinates
87 // Find slat number (index) and iylocal
88 for (Int_t i=0; i<fNSlats; i++) {
89 if (ix <= Slat(i)->Npx()) {
90 Int_t isec=Slat(i)->Sector(ix,1);
91 iytemp-=Slat(i)->Npy()*(*fNDiv)[isec]/(*fNDiv)[1];
93 if (iytemp <= 0) break;
101 void AliMUONSegmentationSlatN::LocalToGlobal(
102 Int_t islat, Int_t ixlocal, Int_t iylocal, Int_t &ix, Int_t &iy)
104 // Local to global transformation for pad coordinates
110 // Find iy global by adding iy offset from slats below
111 for (i=0; i<islat; i++) {
112 if (ixlocal <= Slat(i)->Npx()) {
113 Int_t isec=Slat(i)->Sector(ixlocal,1);
114 iy+=Slat(i)->Npy()*(*fNDiv)[isec]/(*fNDiv)[1];
118 // Perform symmetry transformation
123 void AliMUONSegmentationSlatN::
124 GetPadI(Float_t x, Float_t y, Float_t z, Int_t &ix, Int_t &iy)
126 // Returns pad coordinates for given set of space coordinates
129 Float_t xlocal, ylocal;
130 // Transform to local coordinates
131 AliMUONSegmentationSlat::GlobalToLocal(x,y,z,islat,xlocal,ylocal);
132 Slat(islat)->GetPadI(xlocal, ylocal, ix, iy);
133 // add to local iy offfset from slats below
134 for (i=0; i<islat; i++) {
135 if (ix <= Slat(i)->Npx()) {
136 Int_t isec=Slat(i)->Sector(ix,1);
137 iy+=Slat(i)->Npy()*(*fNDiv)[isec]/(*fNDiv)[1];
140 // Determine sign depending on quadrant
141 ix=ix*Int_t(TMath::Sign((Float_t)1.,x));
144 AliMUONSegmentationSlatModule* AliMUONSegmentationSlatN::
147 // Factory method for slat module
148 return new AliMUONSegmentationSlatModuleN(4);