Added the class AliFMDGeometryBuilder (and derived
[u/mrichter/AliRoot.git] / FMD / AliFMD.h
1 #ifndef ALIFMD_H
2 #define ALIFMD_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
4  * reserved. 
5  *
6  * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
7  *
8  * See cxx source for full Copyright notice                               
9  */
10
11 //____________________________________________________________________
12 //
13 //  Manager class for the FMD - Base class.
14 //
15 #ifndef ALIDETECTOR_H 
16 # include <AliDetector.h>
17 #endif
18 #ifndef ROOT_TBranch
19 # include <TBranch.h>
20 #endif
21 class TBranch;
22 class TClonesArray;
23 class TBrowser;
24 class AliDigitizer;
25 #ifdef USE_PRE_MOVE
26 class AliFMDSimulator;
27 #endif
28 class AliFMDHit;
29
30 //____________________________________________________________________
31 class AliFMD : public AliDetector 
32 {
33 public:
34   AliFMD();
35   AliFMD(const char *name, const char *title);
36   AliFMD(const AliFMD& other);
37   virtual ~AliFMD(); 
38   AliFMD& operator=(const AliFMD& other);
39   // Use old implementation
40   void UseOld(Bool_t use=kTRUE) { fUseOld = use;  }
41   void UseAssembly(Bool_t use=kTRUE) { fUseAssembly = use; }
42   void UseDetailed(Bool_t use=kTRUE) { fDetailed = use; }
43   
44   // GEometry ANd Tracking (GEANT :-)
45   virtual void   CreateGeometry();
46   virtual void   CreateMaterials(); 
47   virtual void   Init();
48   virtual void   StepManager() = 0;
49   virtual void   FinishEvent();
50   
51   // Graphics and event display 
52   virtual        void   BuildGeometry();
53   virtual        void   DrawDetector();
54   virtual        Int_t  DistanceToPrimitive(Int_t px, Int_t py);
55
56   // Hit and digit management 
57   virtual void          MakeBranch(Option_t *opt=" ");
58   virtual void          SetHitsAddressBranch(TBranch *b);
59   virtual void          SetTreeAddress();
60   virtual TClonesArray* SDigits() { return fSDigits; }        
61   virtual void          ResetSDigits();
62   virtual void          AddHit(Int_t track, Int_t *vol, Float_t *hits);
63   virtual AliFMDHit*    AddHitByFields(Int_t    track, 
64                                        UShort_t detector, 
65                                        Char_t   ring, 
66                                        UShort_t sector, 
67                                        UShort_t strip, 
68                                        Float_t  x=0,
69                                        Float_t  y=0, 
70                                        Float_t  z=0,
71                                        Float_t  px=0, 
72                                        Float_t  py=0, 
73                                        Float_t  pz=0,
74                                        Float_t  edep=0,
75                                        Int_t    pdg=0,
76                                        Float_t  t=0);
77   virtual        void   AddDigit(Int_t *digits, Int_t* notused=0);
78   virtual        void   AddDigitByFields(UShort_t detector=0, 
79                                          Char_t   ring='\0', 
80                                          UShort_t sector=0, 
81                                          UShort_t strip=0, 
82                                          UShort_t count1=0, 
83                                          Short_t  count2=-1, 
84                                          Short_t  count3=-1);
85   virtual        void   AddSDigit(Int_t *digits);
86   virtual        void   AddSDigitByFields(UShort_t detector=0, 
87                                           Char_t   ring='\0', 
88                                           UShort_t sector=0, 
89                                           UShort_t strip=0, 
90                                           Float_t  edep=0,
91                                           UShort_t count1=0, 
92                                           Short_t  count2=-1, 
93                                           Short_t  count3=-1);
94
95   // Digitisation
96   virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const;
97   virtual        void   Hits2Digits();
98   virtual        void   Hits2SDigits();
99
100   // Raw data 
101   virtual        void   Digits2Raw();
102
103   // Utility
104   void   Browse(TBrowser* b);
105 protected:
106   TClonesArray*      HitsArray();
107   TClonesArray*      DigitsArray();
108   TClonesArray*      SDigitsArray();
109
110   TClonesArray*      fSDigits;              // Summable digits
111   Int_t              fNsdigits;             // Number of digits  
112   Bool_t             fDetailed;             // Use detailed geometry
113   Bool_t             fUseOld;               // Use old approx geometry
114   Bool_t             fUseAssembly;          // Use divided volumes
115   
116   enum {
117     kSiId,                 // ID index of Si medium
118     kAirId,                // ID index of Air medium
119     kPlasticId,            // ID index of Plastic medium
120     kPcbId,                // ID index of PCB medium
121     kSiChipId,             // ID index of Si Chip medium
122     kAlId,                 // ID index of Al medium
123     kCarbonId,             // ID index of Carbon medium
124     kCopperId,             // ID index of Copper Medium
125     kKaptonId              // ID index of Kapton Medium
126   };  
127
128 #ifdef USE_PRE_MOVE
129   AliFMDSimulator*   fSimulator;            // Simulator task
130 #endif
131   TObjArray*         fBad;                  //! debugging - bad hits 
132   
133   ClassDef(AliFMD,10)     // Base class FMD entry point
134 };
135
136 #endif
137 //____________________________________________________________________
138 //
139 // Local Variables:
140 //   mode: C++
141 // End:
142 //
143 // EOF
144 //