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.6 2000/10/18 11:42:06 morsch
19 - AliMUONRawCluster contains z-position.
20 - Some clean-up of useless print statements during initialisations.
22 Revision 1.5 2000/10/04 18:50:05 morsch
23 In Init(): (*fDpxD)[fNsec-1]=fDpx;
25 Revision 1.4 2000/10/03 21:48:07 morsch
26 Adopt to const declaration of some of the methods in AliSegmentation.
28 Revision 1.3 2000/06/29 12:34:09 morsch
29 AliMUONSegmentation class has been made independent of AliMUONChamber. This makes
30 it usable with any other geometry class. The link to the object to which it belongs is
31 established via an index. This assumes that there exists a global geometry manager
32 from which the pointer to the parent object can be obtained (in our case gAlice).
34 Revision 1.2 2000/06/15 07:58:48 morsch
35 Code from MUON-dev joined
37 Revision 1.1.2.1 2000/06/09 21:38:15 morsch
38 AliMUONSegmentationV04 code from AliMUONSegResV04.cxx
42 /////////////////////////////////////////////////////
43 // Segmentation and Response classes version 04 //
44 /////////////////////////////////////////////////////
47 #include "AliMUONSegmentationV04.h"
48 #include "AliMUONChamber.h"
54 //___________________________________________
55 ClassImp(AliMUONSegmentationV04)
58 void AliMUONSegmentationV04::Init(Int_t chamber)
62 // Fill the arrays fCx (x-contour) and fNpxS (ix-contour) for each sector
63 // These arrays help in converting from real to pad co-ordinates and
66 // Segmentation is defined by rectangular modules approximating
67 // concentric circles as shown below
69 // PCB module size in cm
70 printf("\n Initialise Segmentation V04 \n");
72 const Float_t kDxPCB=40, kDyPCB=40;
73 // PCB distribution (7 rows with 1+3 segmentation regions)
74 const Int_t kpcb[7][4] = {{1, 2, 2, 2},
86 // 3 3 3 2 2 | 2 2 3 3 3
87 // 3 3 3 2 2 2 | 2 2 2 3 3 3
88 // 3 3 2 2 1 1 | 1 1 2 2 3 3
89 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
90 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
91 // ------------------------------
92 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
93 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
94 // 3 3 2 2 1 1 | 1 1 2 2 3 3
95 // 3 3 3 2 2 2 | 2 2 2 3 3 3
96 // 3 3 3 2 2 | 2 2 3 3 3
100 // number of pad rows per PCB
102 Int_t nPyPCB=Int_t(kDyPCB/fDpy);
104 // maximum number of pad rows
107 // Calculate padsize along x
108 (*fDpxD)[fNsec-1]=fDpx;
110 for (Int_t i=fNsec-2; i>=0; i--){
111 (*fDpxD)[i]=(*fDpxD)[fNsec-1]/(*fNDiv)[i];
115 // fill the arrays defining the pad segmentation boundaries
117 // loop over pcb module rows
119 for (Int_t irow=0; irow<7; irow++) {
121 // loop over pads along the anode wires
122 for (Int_t i=0; i<=nPyPCB; i++) {
123 // iy counts the padrow
125 // Loop over sectors (isec=0 is the dead space surounding the beam pipe)
126 for (Int_t isec=0; isec<4; isec++) {
128 fNpxS[0][iy]=kpcb[irow][0]*Int_t(kDxPCB/(*fDpxD)[0]);
129 fCx[0][iy]=kpcb[irow][0]*kDxPCB;
131 fNpxS[isec][iy]=fNpxS[isec-1][iy]
132 +kpcb[irow][isec]*Int_t(kDxPCB/(*fDpxD)[isec]);
134 fCx[isec][iy]=fCx[isec-1][iy]
135 +kpcb[irow][isec]*kDxPCB;
138 } // pad raws in module
141 AliMUON *pMUON = (AliMUON *) gAlice->GetModule("MUON");
142 fChamber=&(pMUON->Chamber(chamber));
146 void AliMUONSegmentationV04::GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const
148 // Returns test point on the pad plane.
149 // Used during determination of the segmoid correction of the COG-method
151 x[0]=(fCx[1][1]+fCx[0][1])/2/TMath::Sqrt(2.);
153 x[1]=(fCx[2][1]+fCx[1][1])/2/TMath::Sqrt(2.);
155 x[2]=(fCx[3][1]+fCx[2][1])/2/TMath::Sqrt(2.);