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 Revision 1.16 2002/01/23 09:36:52 morsch
19 Don't use shunting if you don't want it !
21 Revision 1.15 2001/05/16 14:57:19 alibrary
22 New files for folders and Stack
24 Revision 1.14 2001/03/12 17:46:22 hristov
25 Changes needed on Sun with CC 5.0
27 Revision 1.13 2001/01/26 20:02:43 hristov
28 Major upgrade of AliRoot code
30 Revision 1.12 2000/12/04 08:48:18 alibrary
31 Fixing problems in the HEAD
33 Revision 1.11 2000/11/17 10:15:24 morsch
34 Call to AliDetector::ResetHits() added to method AliPMD::ResetHits()
36 Revision 1.10 2000/11/06 09:07:13 morsch
37 Set fRecPoints to zero in default constructor.
39 Revision 1.9 2000/10/30 09:03:59 morsch
40 Prototype for PMD reconstructed hits (AliPMDRecPoint) added.
42 Revision 1.8 2000/10/20 06:24:40 fca
43 Put the PMD at the right position in the event display
45 Revision 1.7 2000/10/02 21:28:12 fca
46 Removal of useless dependecies via forward declarations
48 Revision 1.6 2000/01/19 17:17:06 fca
49 Introducing a list of lists of hits -- more hits allowed for detector now
51 Revision 1.5 1999/09/29 09:24:27 fca
52 Introduction of the Copyright and cvs Log
56 ///////////////////////////////////////////////////////////////////////////////
59 // Photon Multiplicity Detector //
60 // This class contains the basic functions for the Photon Multiplicity //
61 // Detector. Functions specific to one particular geometry are //
62 // contained in the derived classes //
66 <img src="picts/AliPMDClass.gif">
69 <font size=+2 color=red>
70 <p>The responsible person for this module is
71 <a href="mailto:sub@vecdec.veccal.ernet.in">Subhasis Chattopadhyay</a>.
77 ///////////////////////////////////////////////////////////////////////////////
82 #include <TGeometry.h>
83 #include <TClonesArray.h>
89 #include "AliPMDRecPoint.h"
93 //_____________________________________________________________________________
97 // Default constructor
101 // Always make the TClonesArray, otherwise the automatic streamer gets angry
102 fRecPoints = new TClonesArray("AliPMDRecPoint",10000);
106 //_____________________________________________________________________________
107 AliPMD::AliPMD(const char *name, const char *title)
108 : AliDetector(name,title)
111 // Default constructor
115 // Allocate the array of hits
116 fHits = new TClonesArray("AliPMDhit", 405);
117 gAlice->AddHitList(fHits);
119 fRecPoints = new TClonesArray("AliPMDRecPoint",10000);
146 // Default constructor
152 //_____________________________________________________________________________
153 void AliPMD::AddHit(Int_t track, Int_t *vol, Float_t *hits)
158 TClonesArray &lhits = *fHits;
159 AliPMDhit *newcell, *curcell;
160 // printf("PMD++ Adding energy %f, prim %d, vol %d %d %d %d\n",
161 // hits[3],gAlice->GetPrimary(track-1),vol[0],vol[1],vol[2],vol[3]);
162 newcell = new AliPMDhit(fIshunt, track, vol, hits);
164 for (i=0; i<fNhits; i++) {
166 // See if this cell has already been hit
167 curcell=(AliPMDhit*) lhits[i];
168 if (*curcell==*newcell) {
169 // printf("Cell with same numbers found\n") ; curcell->Print();
170 *curcell = *curcell+*newcell;
171 // printf("Cell after addition\n") ; curcell->Print();
176 new(lhits[fNhits++]) AliPMDhit(newcell);
180 //_____________________________________________________________________________
181 void AliPMD::BuildGeometry()
184 // Build simple ROOT TNode geometry for event display
188 const int kColorPMD = kRed;
191 Top=gAlice->GetGeometry()->GetNode("alice");
194 new TBRIK("S_PMD","PMD box","void",300,300,5);
196 Node = new TNode("PMD","PMD","S_PMD",0,0,-600,"");
197 Node->SetLineColor(kColorPMD);
201 //_____________________________________________________________________________
202 Int_t AliPMD::DistancetoPrimitive(Int_t , Int_t )
205 // Distance from mouse to detector on the screen
211 //_____________________________________________________________________________
212 void AliPMD::SetPAR(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
215 // Set PMD parameters
223 //_____________________________________________________________________________
224 void AliPMD::SetIN(Float_t p1, Float_t p2, Float_t p3,Float_t p4,Float_t p5)
227 // Set PMD parameters
236 //_____________________________________________________________________________
237 void AliPMD::SetGEO(Float_t p1, Float_t p2, Float_t p3)
240 // Set geometry parameters
247 //_____________________________________________________________________________
248 void AliPMD::SetPadSize(Float_t p1, Float_t p2, Float_t p3,Float_t p4)
259 //_____________________________________________________________________________
260 void AliPMD::StepManager()
263 // Called at every step in PMD
267 void AliPMD::AddRecPoint(const AliPMDRecPoint &p)
270 // Add a PMD reconstructed hit to the list
272 TClonesArray &lrecpoints = *fRecPoints;
273 new(lrecpoints[fNRecPoints++]) AliPMDRecPoint(p);
276 void AliPMD::MakeBranch(Option_t* option, const char *file)
278 // Create Tree branches for the PMD
280 const char *cR = strstr(option,"R");
282 AliDetector::MakeBranch(option,file);
285 printf("Make Branch - TreeR address %p\n",gAlice->TreeR());
287 const Int_t kBufferSize = 4000;
290 sprintf(branchname,"%sRecPoints",GetName());
291 if (fRecPoints && gAlice->TreeR()) {
292 MakeBranchInTree(gAlice->TreeR(),
293 branchname, &fRecPoints, kBufferSize, file);
299 void AliPMD::SetTreeAddress()
301 // Set branch address for the TreeR
303 AliDetector::SetTreeAddress();
306 TTree *treeR = gAlice->TreeR();
308 sprintf(branchname,"%s",GetName());
309 if (treeR && fRecPoints) {
310 branch = treeR->GetBranch(branchname);
311 if (branch) branch->SetAddress(&fRecPoints);
315 void AliPMD::ResetHits()
318 // Reset number of hits and the hits array
320 AliDetector::ResetHits();
322 if (fRecPoints) fRecPoints->Clear();
325 ///////////////////////////////////////////////////////////////////////////////
327 // Photon Multiplicity Detector Version 1 //
331 <img src="picts/AliPMDv1Class.gif">
335 ///////////////////////////////////////////////////////////////////////////////
341 //_____________________________________________________________________________
342 AliPMDhit::AliPMDhit(Int_t shunt,Int_t track, Int_t *vol, Float_t *hits):
349 for (i=0;i<5;i++) fVolume[i] = vol[i];