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.2 2000/06/15 07:58:48 morsch
19 Code from MUON-dev joined
21 Revision 1.1.2.1 2000/06/09 21:38:46 morsch
22 AliMUONSegmentationV05 code from AliMUONSegResV05.cxx
26 /////////////////////////////////////////////////////
27 // Segmentation and Response classes version 05 //
28 /////////////////////////////////////////////////////
31 #include "AliMUONSegmentationV05.h"
33 //___________________________________________
34 ClassImp(AliMUONSegmentationV05)
37 void AliMUONSegmentationV05::Init(Int_t chamber)
39 printf("\n Initialise segmentation v05 \n");
41 // Fill the arrays fCx (x-contour) and fNpxS (ix-contour) for each sector
42 // These arrays help in converting from real to pad co-ordinates and
45 // Segmentation is defined by rectangular modules approximating
46 // concentric circles as shown below
48 // PCB module size in cm
49 const Float_t kDxPCB=40, kDyPCB=40;
50 // PCB distribution (7 rows with 1+3 segmentation regions)
51 const Int_t kpcb[7][4] = {{1, 2, 2, 2},
63 // 3 3 3 2 2 | 2 2 3 3 3
64 // 3 3 3 2 2 2 | 2 2 2 3 3 3
65 // 3 3 2 2 1 1 | 1 1 2 2 3 3
66 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
67 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
68 // ------------------------------
69 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
70 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
71 // 3 3 2 2 1 1 | 1 1 2 2 3 3
72 // 3 3 3 2 2 2 | 2 2 2 3 3 3
73 // 3 3 3 2 2 | 2 2 3 3 3
77 // number of pad rows per PCB
79 Int_t nPyPCB=Int_t(kDyPCB/fDpy);
81 // maximum number of pad rows
84 // Calculate padsize along x
87 for (Int_t i=fNsec-2; i>=0; i--){
88 fDpxD[i]=fDpxD[fNsec-1]/fNDiv[i];
89 printf("\n test ---dx %d %f \n",i,fDpxD[i]);
93 // fill the arrays defining the pad segmentation boundaries
95 // loop over pcb module rows
97 for (Int_t irow=0; irow<7; irow++) {
99 // loop over pads along the anode wires
100 for (Int_t i=0; i<=nPyPCB; i++) {
101 // iy counts the padrow
103 // Loop over sectors (isec=0 is the dead space surounding the beam pipe)
104 for (Int_t isec=0; isec<4; isec++) {
106 fNpxS[0][iy]=kpcb[irow][0]*Int_t(kDxPCB/fDpxD[0]);
107 fCx[0][iy]=kpcb[irow][0]*kDxPCB;
109 fNpxS[isec][iy]=fNpxS[isec-1][iy]
110 +kpcb[irow][isec]*Int_t(kDxPCB/fDpxD[isec]);
112 fCx[isec][iy]=fCx[isec-1][iy]
113 +kpcb[irow][isec]*kDxPCB;
116 } // pad raws in module
119 for (Int_t iy=1; iy< fNpy; iy++) {
120 printf("\nBoundary %d %f %d %f %d %f %d %f",
121 fNpxS[0][iy], fCx[0][iy],
122 fNpxS[1][iy], fCx[1][iy],
123 fNpxS[2][iy], fCx[2][iy],
124 fNpxS[3][iy], fCx[3][iy]);
130 void AliMUONSegmentationV05::GiveTestPoints(Int_t &n, Float_t *x, Float_t *y)
132 // Returns test point on the pad plane.
133 // Used during determination of the segmoid correction of the COG-method
135 x[0]=(fCx[1][1]+fCx[0][1])/2/TMath::Sqrt(2.);