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