Correction of dead zones in inner regions of stations 3-5
[u/mrichter/AliRoot.git] / PMD / AliPMD.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$
d3b63a89 18Revision 1.10 2000/11/06 09:07:13 morsch
19Set fRecPoints to zero in default constructor.
20
d2c4ec78 21Revision 1.9 2000/10/30 09:03:59 morsch
22Prototype for PMD reconstructed hits (AliPMDRecPoint) added.
23
4fa198c6 24Revision 1.8 2000/10/20 06:24:40 fca
25Put the PMD at the right position in the event display
26
d651cc98 27Revision 1.7 2000/10/02 21:28:12 fca
28Removal of useless dependecies via forward declarations
29
94de3818 30Revision 1.6 2000/01/19 17:17:06 fca
31Introducing a list of lists of hits -- more hits allowed for detector now
32
1cedd08a 33Revision 1.5 1999/09/29 09:24:27 fca
34Introduction of the Copyright and cvs Log
35
4c039060 36*/
37
fe4da5cc 38///////////////////////////////////////////////////////////////////////////////
6edc06da 39//
fe4da5cc 40// //
41// Photon Multiplicity Detector //
42// This class contains the basic functions for the Photon Multiplicity //
43// Detector. Functions specific to one particular geometry are //
44// contained in the derived classes //
45// //
46//Begin_Html
47/*
1439f98e 48<img src="picts/AliPMDClass.gif">
fe4da5cc 49</pre>
50<br clear=left>
51<font size=+2 color=red>
52<p>The responsible person for this module is
53<a href="mailto:sub@vecdec.veccal.ernet.in">Subhasis Chattopadhyay</a>.
54</font>
55<pre>
56*/
57//End_Html
58// //
59///////////////////////////////////////////////////////////////////////////////
60
61#include <TBRIK.h>
62#include <TNode.h>
4fa198c6 63#include <TTree.h>
94de3818 64#include <TGeometry.h>
4fa198c6 65#include <TClonesArray.h>
94de3818 66
fe4da5cc 67#include "AliPMD.h"
68#include "AliRun.h"
6edc06da 69#include "AliMC.h"
fe4da5cc 70#include "AliConst.h"
4fa198c6 71#include "AliPMDRecPoint.h"
72
fe4da5cc 73ClassImp(AliPMD)
74
75//_____________________________________________________________________________
76AliPMD::AliPMD()
77{
78 //
79 // Default constructor
80 //
81 fIshunt = 0;
d2c4ec78 82 fRecPoints = NULL;
fe4da5cc 83}
84
85//_____________________________________________________________________________
86AliPMD::AliPMD(const char *name, const char *title)
87 : AliDetector(name,title)
88{
89 //
90 // Default constructor
91 //
92
93 //
94 // Allocate the array of hits
95 fHits = new TClonesArray("AliPMDhit", 405);
1cedd08a 96 gAlice->AddHitList(fHits);
4fa198c6 97
98 fRecPoints = new TClonesArray("AliPMDRecPoint",10000);
99 fNRecPoints = 0;
fe4da5cc 100
4fa198c6 101
fe4da5cc 102 fIshunt = 1;
103
104 fPar[0] = 1;
105 fPar[1] = 1;
106 fPar[2] = 0.8;
107 fPar[3] = 0.02;
108 fIn[0] = 6;
109 fIn[1] = 20;
110 fIn[2] = 600;
111 fIn[3] = 27;
112 fIn[4] = 27;
113 fGeo[0] = 0;
114 fGeo[1] = 0.2;
115 fGeo[2] = 4;
116 fPadSize[0] = 0.8;
117 fPadSize[1] = 1.0;
118 fPadSize[2] = 1.2;
119 fPadSize[3] = 1.5;
120}
121
4fa198c6 122AliPMD::~AliPMD()
123{
124 //
125 // Default constructor
126 //
127 delete fRecPoints;
128 fNRecPoints=0;
129}
130
fe4da5cc 131//_____________________________________________________________________________
132void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
133{
134 //
135 // Add a PMD hit
136 //
137 TClonesArray &lhits = *fHits;
138 AliPMDhit *newcell, *curcell;
6edc06da 139// printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d\n",
140// hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3]);
fe4da5cc 141 newcell = new AliPMDhit(fIshunt, track, vol, hits);
142 Int_t i;
143 for (i=0; i<fNhits; i++) {
144 //
145 // See if this cell has already been hit
146 curcell=(AliPMDhit*) lhits[i];
147 if (*curcell==*newcell) {
6edc06da 148// printf("Cell with same numbers found\n") ; curcell->Print();
fe4da5cc 149 *curcell = *curcell+*newcell;
6edc06da 150// printf("Cell after addition\n") ; curcell->Print();
fe4da5cc 151 delete newcell;
152 return;
153 }
154 }
155 new(lhits[fNhits++]) AliPMDhit(newcell);
156 delete newcell;
157}
158
159//_____________________________________________________________________________
160void AliPMD::BuildGeometry()
161{
162 //
163 // Build simple ROOT TNode geometry for event display
164 //
165
166 TNode *Node, *Top;
167 const int kColorPMD = kRed;
168
169 //
170 Top=gAlice->GetGeometry()->GetNode("alice");
171
172 // PMD
173 new TBRIK("S_PMD","PMD box","void",300,300,5);
174 Top->cd();
d651cc98 175 Node = new TNode("PMD","PMD","S_PMD",0,0,-600,"");
fe4da5cc 176 Node->SetLineColor(kColorPMD);
177 fNodes->Add(Node);
178}
179
180//_____________________________________________________________________________
181Int_t AliPMD::DistancetoPrimitive(Int_t , Int_t )
182{
183 //
184 // Distance from mouse to detector on the screen
185 // dummy routine
186 //
187 return 9999;
188}
189
190//_____________________________________________________________________________
191void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
192{
193 //
194 // Set PMD parameters
195 //
196 fPar[0] = p1;
197 fPar[1] = p2;
198 fPar[2] = p3;
199 fPar[3] = p4;
200}
201
202//_____________________________________________________________________________
203void AliPMD::SetIN(Float_t p1, Float_t p2, Float_t p3,Float_t p4,Float_t p5)
204{
205 //
206 // Set PMD parameters
207 //
208 fIn[0] = p1;
209 fIn[1] = p2;
210 fIn[2] = p3;
211 fIn[3] = p4;
212 fIn[4] = p5;
213}
214
215//_____________________________________________________________________________
216void AliPMD::SetGEO(Float_t p1, Float_t p2, Float_t p3)
217{
218 //
219 // Set geometry parameters
220 //
221 fGeo[0] = p1;
222 fGeo[1] = p2;
223 fGeo[2] = p3;
224}
225
226//_____________________________________________________________________________
227void AliPMD::SetPadSize(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
228{
229 //
230 // Set pad size
231 //
232 fPadSize[0] = p1;
233 fPadSize[1] = p2;
234 fPadSize[2] = p3;
235 fPadSize[3] = p4;
236}
237
238//_____________________________________________________________________________
239void AliPMD::StepManager()
240{
241 //
242 // Called at every step in PMD
243 //
244}
245
4fa198c6 246void AliPMD::AddRecPoint(const AliPMDRecPoint &p)
247{
248 //
249 // Add a PMD reconstructed hit to the list
250 //
251 TClonesArray &lrecpoints = *fRecPoints;
252 new(lrecpoints[fNRecPoints++]) AliPMDRecPoint(p);
253}
254
255void AliPMD::MakeBranch(Option_t* option)
256{
257 // Create Tree branches for the PMD
258 printf("Make Branch - TreeR address %p\n",gAlice->TreeR());
259
260 const Int_t kBufferSize = 4000;
261 char branchname[30];
262
263 AliDetector::MakeBranch(option);
264
265 sprintf(branchname,"%sRecPoints",GetName());
266 if (fRecPoints && gAlice->TreeR()) {
267 gAlice->TreeR()->Branch(branchname, &fRecPoints, kBufferSize);
268 printf("Making Branch %s for reconstructed hits\n",branchname);
269 }
270}
271
272
273void AliPMD::SetTreeAddress()
274{
275 // Set branch address for the TreeR
276 char branchname[30];
277 AliDetector::SetTreeAddress();
278
279 TBranch *branch;
280 TTree *treeR = gAlice->TreeR();
281
282 sprintf(branchname,"%s",GetName());
283 if (treeR && fRecPoints) {
284 branch = treeR->GetBranch(branchname);
285 if (branch) branch->SetAddress(&fRecPoints);
286 }
287}
288
289void AliPMD::ResetHits()
290{
291 //
292 // Reset number of hits and the hits array
293 //
d3b63a89 294 AliDetector::ResetHits();
295 fNRecPoints = 0;
296 if (fRecPoints) fRecPoints->Clear();
4fa198c6 297}
298
fe4da5cc 299///////////////////////////////////////////////////////////////////////////////
300// //
301// Photon Multiplicity Detector Version 1 //
302// //
303//Begin_Html
304/*
1439f98e 305<img src="picts/AliPMDv1Class.gif">
fe4da5cc 306*/
307//End_Html
308// //
309///////////////////////////////////////////////////////////////////////////////
310
4fa198c6 311
312
fe4da5cc 313ClassImp(AliPMDhit)
314
315//_____________________________________________________________________________
6edc06da 316AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
fe4da5cc 317 AliHit(shunt, track)
318{
319 //
320 // Add a PMD hit
321 //
322 Int_t i;
6edc06da 323 for (i=0;i<5;i++) fVolume[i] = vol[i];
fe4da5cc 324 fX=hits[0];
325 fY=hits[1];
326 fZ=hits[2];
327 fEnergy=hits[3];
328}
6edc06da 329