]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONSegmentationV04.cxx
Event cut added
[u/mrichter/AliRoot.git] / MUON / AliMUONSegmentationV04.cxx
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 /* $Id$ */
17
18 /////////////////////////////////////////////////////
19 //  Segmentation and Response classes version 04   //
20 /////////////////////////////////////////////////////
21
22 #include <TMath.h>
23 #include <TArrayF.h>
24
25 #include "AliMUONSegmentationV04.h"
26 #include "AliMUONChamber.h"
27 #include "AliMUON.h"
28 #include "AliRun.h"
29
30 //___________________________________________
31 ClassImp(AliMUONSegmentationV04)
32
33
34 AliMUONSegmentationV04::AliMUONSegmentationV04()
35   : AliMUONSegmentationV01()
36 {
37 // Constructor
38 }
39
40 void AliMUONSegmentationV04::Init(Int_t chamber)
41 {
42
43 //
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
46 //  vice versa
47 //   
48 //  Segmentation is defined by rectangular modules approximating
49 //  concentric circles as shown below
50 //
51 //  PCB module size in cm
52   //printf("\n Initialise Segmentation V04 \n");
53
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}, 
57                               {0, 3, 2, 2}, 
58                               {0, 2, 2, 2}, 
59                               {0, 0, 3, 3}, 
60                               {0, 0, 2, 3}, 
61                               {0, 0, 0, 4}, 
62                               {0, 0, 0, 3}};
63     
64     
65 //
66 //                             3 3 3 | 3 3 3
67 //                           3 3 3 3 | 3 3 3 3
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
79 //                           3 3 3 3 | 3 3 3 3
80 //                             3 3 3 | 3 3 3
81 //
82 // number of pad rows per PCB
83 //    
84     Int_t nPyPCB=Int_t(kDyPCB/fDpy);
85 //
86 // maximum number of pad rows    
87     fNpy=7*nPyPCB;
88 //
89 //  Calculate padsize along x
90     (*fDpxD)[fNsec-1]=fDpx;
91     if (fNsec > 1) {
92         for (Int_t i=fNsec-2; i>=0; i--){
93             (*fDpxD)[i]=(*fDpxD)[fNsec-1]/(*fNDiv)[i];
94         }
95     }
96 //
97 // fill the arrays defining the pad segmentation boundaries
98 //
99 //  loop over pcb module rows
100     Int_t iy=0;
101     for (Int_t irow=0; irow<7; irow++) {
102 //  
103 //  loop over pads along the anode wires
104         for (Int_t i=0; i<=nPyPCB; i++) {
105 //  iy counts the padrow
106             iy++;
107 //  Loop over sectors (isec=0 is the dead space surounding the beam pipe)
108             for (Int_t isec=0; isec<4; isec++) {
109                 if (isec==0) {
110                     fNpxS[0][iy]=kpcb[irow][0]*Int_t(kDxPCB/(*fDpxD)[0]);
111                     fCx[0][iy]=kpcb[irow][0]*kDxPCB;
112                 } else {
113                     fNpxS[isec][iy]=fNpxS[isec-1][iy]
114                         +kpcb[irow][isec]*Int_t(kDxPCB/(*fDpxD)[isec]);
115
116                     fCx[isec][iy]=fCx[isec-1][iy]
117                     +kpcb[irow][isec]*kDxPCB;
118                 }
119             } // sectors
120         } // pad raws in module
121     } // PCB rows
122
123     AliMUON *pMUON  = (AliMUON *) gAlice->GetModule("MUON");
124     fChamber=&(pMUON->Chamber(chamber));
125     fZ = fChamber->Z();
126 }
127
128 void AliMUONSegmentationV04::GiveTestPoints(Int_t &n, Float_t *x, Float_t *y) const
129 {
130 // Returns test point on the pad plane.
131 // Used during determination of the segmoid correction of the COG-method
132     n=3;
133     x[0]=(fCx[1][1]+fCx[0][1])/2/TMath::Sqrt(2.);
134     y[0]=x[0];
135     x[1]=(fCx[2][1]+fCx[1][1])/2/TMath::Sqrt(2.);
136     y[1]=x[1];
137     x[2]=(fCx[3][1]+fCx[2][1])/2/TMath::Sqrt(2.);
138     y[2]=x[2];
139 }
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155