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 /////////////////////////////////////////////////////
19 // Segmentation and Response classes version 04 //
20 /////////////////////////////////////////////////////
25 #include "AliMUONSegmentationV04.h"
26 #include "AliMUONChamber.h"
30 //___________________________________________
31 ClassImp(AliMUONSegmentationV04)
34 AliMUONSegmentationV04::AliMUONSegmentationV04()
35 : AliMUONSegmentationV01()
40 void AliMUONSegmentationV04::Init(Int_t chamber)
44 // Fill the arrays fCx (x-contour) and fNpxS (ix-contour) for each sector
45 // These arrays help in converting from real to pad co-ordinates and
48 // Segmentation is defined by rectangular modules approximating
49 // concentric circles as shown below
51 // PCB module size in cm
52 //printf("\n Initialise Segmentation V04 \n");
54 const Float_t kDxPCB=40, kDyPCB=40;
55 // PCB distribution (7 rows with 1+3 segmentation regions)
56 const Int_t kpcb[7][4] = {{1, 2, 2, 2},
68 // 3 3 3 2 2 | 2 2 3 3 3
69 // 3 3 3 2 2 2 | 2 2 2 3 3 3
70 // 3 3 2 2 1 1 | 1 1 2 2 3 3
71 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
72 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
73 // ------------------------------
74 // 3 3 2 2 1 1 0 | 0 1 1 2 2 3 3
75 // 3 3 2 2 1 1 1 | 1 1 1 2 2 3 3
76 // 3 3 2 2 1 1 | 1 1 2 2 3 3
77 // 3 3 3 2 2 2 | 2 2 2 3 3 3
78 // 3 3 3 2 2 | 2 2 3 3 3
82 // number of pad rows per PCB
84 Int_t nPyPCB=Int_t(kDyPCB/fDpy);
86 // maximum number of pad rows
89 // Calculate padsize along x
90 (*fDpxD)[fNsec-1]=fDpx;
92 for (Int_t i=fNsec-2; i>=0; i--){
93 (*fDpxD)[i]=(*fDpxD)[fNsec-1]/(*fNDiv)[i];
97 // fill the arrays defining the pad segmentation boundaries
99 // loop over pcb module rows
101 for (Int_t irow=0; irow<7; irow++) {
103 // loop over pads along the anode wires
104 for (Int_t i=0; i<=nPyPCB; i++) {
105 // iy counts the padrow
107 // Loop over sectors (isec=0 is the dead space surounding the beam pipe)
108 for (Int_t isec=0; isec<4; isec++) {
110 fNpxS[0][iy]=kpcb[irow][0]*Int_t(kDxPCB/(*fDpxD)[0]);
111 fCx[0][iy]=kpcb[irow][0]*kDxPCB;
113 fNpxS[isec][iy]=fNpxS[isec-1][iy]
114 +kpcb[irow][isec]*Int_t(kDxPCB/(*fDpxD)[isec]);
116 fCx[isec][iy]=fCx[isec-1][iy]
117 +kpcb[irow][isec]*kDxPCB;
120 } // pad raws in module
123 AliMUON *pMUON = (AliMUON *) gAlice->GetModule("MUON");
124 fChamber=&(pMUON->Chamber(chamber));
128 void AliMUONSegmentationV04::GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const
130 // Returns test point on the pad plane.
131 // Used during determination of the segmoid correction of the COG-method
133 x[0]=(fCx[1][1]+fCx[0][1])/2/TMath::Sqrt(2.);
135 x[1]=(fCx[2][1]+fCx[1][1])/2/TMath::Sqrt(2.);
137 x[2]=(fCx[3][1]+fCx[2][1])/2/TMath::Sqrt(2.);