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