e0b12548dbdb32ac60988ea868375945b5b6b1d2
[u/mrichter/AliRoot.git] / PMD / AliPMD.h
1 #ifndef PMD_H
2 #define PMD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ////////////////////////////////////////////////
9 //  Manager and hits classes for set:PMD      //
10 ////////////////////////////////////////////////
11  
12 #include "AliDetector.h"
13 #include "AliHit.h"
14
15
16 class AliPMD : public AliDetector {
17   
18 protected:
19   Float_t fPar[4];           // pmdin, pmdout, thgas, thcell
20   Float_t fIn[5];            // thmin, thmax, zdist, thlow, thhigh
21   Float_t fGeo[3];           // wafer, edge, numqu
22   Float_t fPadSize[4];       // size of the pads
23   Int_t   fNumPads[4];       // number of the pads
24 public:
25   AliPMD();
26   AliPMD(const char *name, const char *title);
27   virtual      ~AliPMD() {}
28   virtual void  AddHit(Int_t, Int_t*, Float_t*);
29    virtual void  BuildGeometry();
30   virtual void  CreateGeometry() {}
31   virtual void  CreateMaterials() {}
32   Int_t         DistancetoPrimitive(Int_t, Int_t);
33   virtual Int_t IsVersion() const =0;
34   virtual void  SetPAR(Float_t, Float_t, Float_t, Float_t);
35   virtual void  SetIN(Float_t, Float_t, Float_t, Float_t, Float_t);
36   virtual void  SetGEO(Float_t, Float_t, Float_t);
37   virtual void  SetPadSize(Float_t, Float_t, Float_t, Float_t);
38   virtual void  StepManager();
39   
40   ClassDef(AliPMD,1)  // Base Class for Photon Multiplicity Detector
41 };
42
43  
44  
45 //___________________________________________
46  
47 class AliPMDhit : public AliHit {
48 public:
49   Int_t      fVolume[5];  //array of volumes
50   Float_t    fEnergy;     //Total energy deposited in eV
51 public:
52   AliPMDhit() {}
53   AliPMDhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits);
54   AliPMDhit(AliPMDhit* oldhit) {*this=*oldhit;}
55   virtual ~AliPMDhit() {}
56   inline virtual Int_t GetVolume(Int_t i) {return fVolume[i];}
57   inline virtual Float_t GetEnergy() {return fEnergy;}
58   inline int operator == (AliPMDhit &cell) {
59     Int_t i;
60     if(fTrack!=cell.GetTrack()) return 0;
61     for (i=0; i<4; i++) if(fVolume[i]!=cell.GetVolume(i)) return 0;
62     return 1;
63   }
64   inline virtual AliPMDhit& operator + (AliPMDhit &cell) {
65     fEnergy+=cell.GetEnergy();
66     return *this;
67   }
68   virtual void Print(Option_t *) {
69     printf("PMD Cell %d %d %d %d\n   Primary %d -   Energy %f\n",
70            fVolume[0],fVolume[1],fVolume[2],fVolume[3],fTrack,fEnergy);
71   }
72
73  
74   ClassDef(AliPMDhit,1)  //Hits object for set:PMD
75 };
76 #endif