]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONSegmentationV04.cxx
Minor changes (R.Barbera)
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV04.cxx
CommitLineData
4c039060 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/*
17$Log$
de05461e 18Revision 1.6 2000/10/18 11:42:06 morsch
19- AliMUONRawCluster contains z-position.
20- Some clean-up of useless print statements during initialisations.
21
3e1872ed 22Revision 1.5 2000/10/04 18:50:05 morsch
23In Init(): (*fDpxD)[fNsec-1]=fDpx;
24
b25d64e9 25Revision 1.4 2000/10/03 21:48:07 morsch
26Adopt to const declaration of some of the methods in AliSegmentation.
27
c3eff6ad 28Revision 1.3 2000/06/29 12:34:09 morsch
29AliMUONSegmentation class has been made independent of AliMUONChamber. This makes
30it usable with any other geometry class. The link to the object to which it belongs is
31established via an index. This assumes that there exists a global geometry manager
32from which the pointer to the parent object can be obtained (in our case gAlice).
33
d81db581 34Revision 1.2 2000/06/15 07:58:48 morsch
35Code from MUON-dev joined
36
a9e2aefa 37Revision 1.1.2.1 2000/06/09 21:38:15 morsch
38AliMUONSegmentationV04 code from AliMUONSegResV04.cxx
39
4c039060 40*/
41
a897a37a 42/////////////////////////////////////////////////////
43// Segmentation and Response classes version 04 //
44/////////////////////////////////////////////////////
45
a897a37a 46
a9e2aefa 47#include "AliMUONSegmentationV04.h"
3e1872ed 48#include "AliMUONChamber.h"
49#include "AliMUON.h"
50#include "AliRun.h"
51
a9e2aefa 52#include <TMath.h>
a897a37a 53
54//___________________________________________
a9e2aefa 55ClassImp(AliMUONSegmentationV04)
a897a37a 56
57
d81db581 58void AliMUONSegmentationV04::Init(Int_t chamber)
a897a37a 59{
de05461e 60
a897a37a 61//
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
64// vice versa
a9e2aefa 65//
66// Segmentation is defined by rectangular modules approximating
67// concentric circles as shown below
a897a37a 68//
69// PCB module size in cm
de05461e 70 printf("\n Initialise Segmentation V04 \n");
71
a9e2aefa 72 const Float_t kDxPCB=40, kDyPCB=40;
a897a37a 73// PCB distribution (7 rows with 1+3 segmentation regions)
74 const Int_t kpcb[7][4] = {{1, 2, 2, 2},
75 {0, 3, 2, 2},
76 {0, 2, 2, 2},
77 {0, 0, 3, 3},
78 {0, 0, 2, 3},
79 {0, 0, 0, 4},
80 {0, 0, 0, 3}};
81
82
83//
84// 3 3 3 | 3 3 3
85// 3 3 3 3 | 3 3 3 3
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
97// 3 3 3 3 | 3 3 3 3
98// 3 3 3 | 3 3 3
99//
100// number of pad rows per PCB
101//
a9e2aefa 102 Int_t nPyPCB=Int_t(kDyPCB/fDpy);
a897a37a 103//
104// maximum number of pad rows
a9e2aefa 105 fNpy=7*nPyPCB;
a897a37a 106//
107// Calculate padsize along x
b25d64e9 108 (*fDpxD)[fNsec-1]=fDpx;
a897a37a 109 if (fNsec > 1) {
110 for (Int_t i=fNsec-2; i>=0; i--){
c3eff6ad 111 (*fDpxD)[i]=(*fDpxD)[fNsec-1]/(*fNDiv)[i];
a897a37a 112 }
113 }
114//
115// fill the arrays defining the pad segmentation boundaries
116//
117// loop over pcb module rows
118 Int_t iy=0;
119 for (Int_t irow=0; irow<7; irow++) {
120//
121// loop over pads along the anode wires
a9e2aefa 122 for (Int_t i=0; i<=nPyPCB; i++) {
a897a37a 123// iy counts the padrow
124 iy++;
125// Loop over sectors (isec=0 is the dead space surounding the beam pipe)
126 for (Int_t isec=0; isec<4; isec++) {
127 if (isec==0) {
c3eff6ad 128 fNpxS[0][iy]=kpcb[irow][0]*Int_t(kDxPCB/(*fDpxD)[0]);
a9e2aefa 129 fCx[0][iy]=kpcb[irow][0]*kDxPCB;
a897a37a 130 } else {
131 fNpxS[isec][iy]=fNpxS[isec-1][iy]
c3eff6ad 132 +kpcb[irow][isec]*Int_t(kDxPCB/(*fDpxD)[isec]);
a897a37a 133
134 fCx[isec][iy]=fCx[isec-1][iy]
a9e2aefa 135 +kpcb[irow][isec]*kDxPCB;
a897a37a 136 }
137 } // sectors
138 } // pad raws in module
139 } // PCB rows
3e1872ed 140
141 AliMUON *pMUON = (AliMUON *) gAlice->GetModule("MUON");
142 fChamber=&(pMUON->Chamber(chamber));
143 fZ = fChamber->Z();
a897a37a 144}
145
c3eff6ad 146void AliMUONSegmentationV04::GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const
a897a37a 147{
a9e2aefa 148// Returns test point on the pad plane.
149// Used during determination of the segmoid correction of the COG-method
a897a37a 150 n=3;
151 x[0]=(fCx[1][1]+fCx[0][1])/2/TMath::Sqrt(2.);
152 y[0]=x[0];
153 x[1]=(fCx[2][1]+fCx[1][1])/2/TMath::Sqrt(2.);
154 y[1]=x[1];
155 x[2]=(fCx[3][1]+fCx[2][1])/2/TMath::Sqrt(2.);
156 y[2]=x[2];
a897a37a 157}
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173