]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONChamber.cxx
Double inclusion of AliResponse removed.
[u/mrichter/AliRoot.git] / MUON / AliMUONChamber.cxx
CommitLineData
a9e2aefa 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$Log$
ef495f13 17Revision 1.5 2000/07/03 11:54:57 morsch
18AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
19The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
20
a30a000f 21Revision 1.4 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.3 2000/06/28 15:16:35 morsch
28(1) Client code adapted to new method signatures in AliMUONSegmentation (see comments there)
29to allow development of slat-muon chamber simulation and reconstruction code in the MUON
30framework. The changes should have no side effects (mostly dummy arguments).
31(2) Hit disintegration uses 3-dim hit coordinates to allow simulation
32of chambers with overlapping modules (MakePadHits, Disintegration).
33
802a864d 34Revision 1.2 2000/06/15 07:58:48 morsch
35Code from MUON-dev joined
36
a9e2aefa 37Revision 1.1.2.5 2000/06/09 21:27:01 morsch
38Most coding rule violations corrected.
39
40Revision 1.1.2.4 2000/05/05 11:34:12 morsch
41Log inside comments.
42
43Revision 1.1.2.3 2000/05/05 10:09:52 morsch
44Log messages included
45*/
46
47#include "AliMUONChamber.h"
a9e2aefa 48
49#include "TMath.h"
50ClassImp(AliMUONChamber)
51
d81db581 52 AliMUONChamber::AliMUONChamber()
53{
54// Default constructor
55 fSegmentation = new TObjArray(2);
56 (*fSegmentation)[0] = 0;
57 (*fSegmentation)[1] = 0;
58 fResponse=0;
59 fnsec=1;
60 fReconstruction=0;
61 fId=0;
62}
63
64 AliMUONChamber::AliMUONChamber(Int_t id)
a9e2aefa 65{
d81db581 66// Construtor with chamber id
a9e2aefa 67 fSegmentation = new TObjArray(2);
68 (*fSegmentation)[0] = 0;
69 (*fSegmentation)[1] = 0;
70 fResponse=0;
71 fnsec=1;
72 fReconstruction=0;
d81db581 73 fId=id;
a9e2aefa 74}
75
76AliMUONChamber::~AliMUONChamber()
77{
d81db581 78// Destructor
a9e2aefa 79 if (fSegmentation) delete fSegmentation;
80}
81
82AliMUONChamber::AliMUONChamber(const AliMUONChamber& rChamber)
83{
84// Dummy copy constructor
85 ;
86}
87
88
89void AliMUONChamber::Init()
90{
91// Initalisation ..
92//
93// ... for chamber segmentation
94 if ((*fSegmentation)[0])
a30a000f 95 ((AliSegmentation *) (*fSegmentation)[0])->Init(fId);
a9e2aefa 96
97 if (fnsec==2) {
98 if ((*fSegmentation)[1])
a30a000f 99 ((AliSegmentation *) (*fSegmentation)[1])->Init(fId);
a9e2aefa 100 }
101}
102
103Int_t AliMUONChamber::SigGenCond(Float_t x, Float_t y, Float_t z)
104{
105// Ask segmentation if signal should be generated
106 if (fnsec==1) {
a30a000f 107 return ((AliSegmentation*) (*fSegmentation)[0])
a9e2aefa 108 ->SigGenCond(x, y, z) ;
109 } else {
a30a000f 110 return (((AliSegmentation*) (*fSegmentation)[0])
a9e2aefa 111 ->SigGenCond(x, y, z)) ||
a30a000f 112 (((AliSegmentation*) (*fSegmentation)[1])
a9e2aefa 113 ->SigGenCond(x, y, z)) ;
114 }
115}
116
117
118void AliMUONChamber::SigGenInit(Float_t x, Float_t y, Float_t z)
119{
120//
121// Initialisation of segmentation for hit
122//
123 if (fnsec==1) {
a30a000f 124 ((AliSegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ;
a9e2aefa 125 } else {
a30a000f 126 ((AliSegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ;
127 ((AliSegmentation*) (*fSegmentation)[1])->SigGenInit(x, y, z) ;
a9e2aefa 128 }
129}
130
131void AliMUONChamber::DisIntegration(Float_t eloss, Float_t tof,
802a864d 132 Float_t xhit, Float_t yhit, Float_t zhit,
a9e2aefa 133 Int_t& nnew,Float_t newclust[6][500])
134{
135//
136// Generates pad hits (simulated cluster)
137// using the segmentation and the response model
138 Float_t dx, dy;
139 //
140 // Width of the integration area
141 //
142 dx=fResponse->SigmaIntegration()*fResponse->ChargeSpreadX();
143 dy=fResponse->SigmaIntegration()*fResponse->ChargeSpreadY();
144 //
145 // Get pulse height from energy loss
146 Float_t qtot = fResponse->IntPH(eloss);
147 //
148 // Loop Over Pads
149
150 Float_t qcheck=0, qp;
151 nnew=0;
ef495f13 152
a9e2aefa 153 for (Int_t i=1; i<=fnsec; i++) {
154 qcheck=0;
a30a000f 155 AliSegmentation * segmentation=
156 (AliSegmentation *) (*fSegmentation)[i-1];
802a864d 157 for (segmentation->FirstPad(xhit, yhit, zhit, dx, dy);
a9e2aefa 158 segmentation->MorePads();
159 segmentation->NextPad())
160 {
161 qp=fResponse->IntXY(segmentation);
162 qp=TMath::Abs(qp);
a9e2aefa 163//
164//
165 if (qp > 1.e-4) {
ef495f13 166 qcheck+=qp*qtot;
a9e2aefa 167 //
168 // --- store signal information
169 newclust[0][nnew]=qtot; // total charge
170 newclust[1][nnew]=segmentation->Ix(); // ix-position of pad
171 newclust[2][nnew]=segmentation->Iy(); // iy-position of pad
172 newclust[3][nnew]=qp * qtot; // charge on pad
173 newclust[4][nnew]=segmentation->ISector(); // sector id
174 newclust[5][nnew]=(Float_t) i; // counter
175 nnew++;
ef495f13 176// if (i==2) printf("\n i, nnew, q %d %d %f", i, nnew, qp*qtot);
177
a9e2aefa 178 }
179 } // Pad loop
ef495f13 180
a9e2aefa 181 } // Cathode plane loop
182}
183
184
185
186void AliMUONChamber::InitGeo(Float_t zpos)
187{
188// sensitive gas gap
189 fdGas= 0.5;
190// 3% radiation length of aluminum (X0=8.9 cm)
191 fdAlu= 3.0/100*8.9;
192}
193
194
195AliMUONChamber & AliMUONChamber::operator =(const AliMUONChamber& rhs)
196{
197// Dummy assignment operator
198 return *this;
199}