4347b38f |
1 | // -*- mode: c++ -*- |
d28dcc0d |
2 | #ifndef ALIFMD_H |
3 | #define ALIFMD_H |
4347b38f |
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights |
5 | * reserved. |
6 | * |
7 | * Latest changes by Christian Holm Christensen <cholm@nbi.dk> |
8 | * |
9 | * See cxx source for full Copyright notice |
10 | */ |
3da30618 |
11 | |
fe4da5cc |
12 | //////////////////////////////////////////////// |
d28dcc0d |
13 | // Manager and hits classes for set:Si-FMD // |
fe4da5cc |
14 | //////////////////////////////////////////////// |
3d44ce66 |
15 | |
4347b38f |
16 | #ifndef ALIDETECTOR_H |
17 | # include <AliDetector.h> |
18 | #endif |
19 | #ifndef ALIFMDSUBDETECTOR_H |
20 | # include "AliFMDSubDetector.h" |
21 | #endif |
22 | #ifndef ALIFMDRING_H |
23 | # include "AliFMDRing.h" |
24 | #endif |
25 | #ifndef ROOT_TBranch |
26 | # include <TBranch.h> |
27 | #endif |
28 | #ifndef ROOT_TArrayI |
29 | # include <TArrayI.h> |
30 | #endif |
31 | |
32 | //____________________________________________________________________ |
33 | class AliFMD : public AliDetector |
34 | { |
fe4da5cc |
35 | public: |
36 | AliFMD(); |
4347b38f |
37 | AliFMD(const char *name, const char *title, bool detailed); |
38 | AliFMD(const AliFMD& FMD) : AliDetector(FMD) {} //copy ctor |
39 | virtual ~AliFMD(); |
40 | AliFMD& operator=(const AliFMD&) {return *this;} |
41 | |
42 | // GEometry ANd Tracking (GEANT :-) |
43 | virtual void CreateGeometry(); |
44 | virtual void CreateMaterials(); |
fe4da5cc |
45 | virtual void Init(); |
4347b38f |
46 | virtual void StepManager() = 0; |
47 | AliFMDSubDetector* GetFMD1() const { return fFMD1; } |
48 | AliFMDSubDetector* GetFMD2() const { return fFMD2; } |
49 | AliFMDSubDetector* GetFMD3() const { return fFMD3; } |
50 | AliFMDRing* GetInner() const { return fInner; } |
51 | AliFMDRing* GetOuter() const { return fOuter; } |
58d6a713 |
52 | |
4347b38f |
53 | // Graphics and event display |
54 | virtual void BuildGeometry(); |
55 | virtual void DrawDetector(); |
56 | virtual const Int_t DistanceToPrimitive(Int_t px, Int_t py); |
3d44ce66 |
57 | |
4347b38f |
58 | // Hit and digit management |
59 | virtual void MakeBranch(Option_t *opt=" "); |
60 | virtual void SetHitsAddressBranch(TBranch *b); |
61 | virtual void SetTreeAddress(); |
62 | virtual TClonesArray* SDigits() { return fSDigits; } |
63 | virtual void ResetSDigits(); |
64 | virtual void AddHit(Int_t track, Int_t *vol, Float_t *hits); |
65 | virtual void AddHit(Int_t track, |
66 | UShort_t detector, |
67 | Char_t ring, |
68 | UShort_t sector, |
69 | UShort_t strip, |
70 | Float_t x=0, |
71 | Float_t y=0, |
72 | Float_t z=0, |
73 | Float_t px=0, |
74 | Float_t py=0, |
75 | Float_t pz=0, |
76 | Float_t edep=0, |
77 | Int_t pdg=0, |
78 | Float_t t=0); |
79 | virtual void AddDigit(Int_t *digits); |
80 | virtual void AddDigit(UShort_t detector=0, |
81 | Char_t ring='\0', |
82 | UShort_t sector=0, |
83 | UShort_t strip=0, |
84 | UShort_t count1=0, |
85 | Short_t count2=-1, |
86 | Short_t count3=-1); |
87 | virtual void AddSDigit(Int_t *digits); |
88 | virtual void AddSDigit(UShort_t detector=0, |
89 | Char_t ring='\0', |
90 | UShort_t sector=0, |
91 | UShort_t strip=0, |
92 | Float_t edep=0, |
93 | UShort_t count1=0, |
94 | Short_t count2=-1, |
95 | Short_t count3=-1); |
96 | |
97 | // Digitisation |
c92eb8ad |
98 | virtual AliDigitizer* CreateDigitizer(AliRunDigitizer* manager) const; |
4347b38f |
99 | virtual void Hits2Digits(); |
100 | virtual void Hits2SDigits(); |
101 | |
102 | // Raw data |
103 | virtual void Digits2Raw(); |
104 | |
105 | // Set various parameters |
106 | void SetLegLength(Double_t length=1); |
107 | void SetLegRadius(Double_t radius=.5); |
108 | void SetLegOffset(Double_t offset=.5); |
109 | void SetModuleSpacing(Double_t spacing=1); |
110 | |
111 | // Get various parameters |
112 | Int_t GetSiId() const { return (*fIdtmed)[kSiId]; } |
113 | Int_t GetAirId() const { return (*fIdtmed)[kAirId]; } |
114 | Int_t GetPlasticId() const { return (*fIdtmed)[kPlasticId]; } |
115 | Int_t GetPcbId() const { return (*fIdtmed)[kPcbId]; } |
116 | Int_t GetKaptionId() const { return (*fIdtmed)[kKaptionId]; } |
117 | Int_t GetCarbonId() const { return (*fIdtmed)[kCarbonId]; } |
118 | Int_t GetPrintboardRotationId() const { return fPrintboardRotationId; } |
119 | Int_t GetShortLegId() const { return fShortLegId; } |
120 | Int_t GetLongLegId() const { return fLongLegId; } |
121 | Double_t GetLegLength() const { return fLegLength; } |
122 | Double_t GetLegRadius() const { return fLegRadius; } |
123 | Double_t GetModuleSpacing() const { return fModuleSpacing; } |
dc8af42e |
124 | |
4347b38f |
125 | // Utility |
126 | void Browse(TBrowser* b); |
127 | Float_t GetSiDensity() const { return fSiDensity; } |
128 | enum { |
129 | kBaseDDL = 0x1000 // DDL offset for the FMD |
130 | }; |
131 | protected: |
132 | enum { |
133 | kSiId, // ID of Si medium |
134 | kAirId, // ID of Air medium |
135 | kPlasticId, // ID of Plastic medium |
136 | kPcbId, // ID of PCB medium |
137 | kSiChipId, // ID of Si Chip medium |
138 | kKaptionId, // ID of Kaption medium |
139 | kCarbonId // ID of Carbon medium |
140 | }; |
37c55dc0 |
141 | |
4347b38f |
142 | void SetSiDensity(Float_t r=2.33) { fSiDensity = r; } |
143 | TClonesArray* HitsArray(); |
144 | TClonesArray* DigitsArray(); |
145 | TClonesArray* SDigitsArray(); |
146 | |
147 | AliFMDRing* fInner; // Inner ring structure |
148 | AliFMDRing* fOuter; // Outer ring structure |
149 | AliFMDSubDetector* fFMD1; // FMD1 structure |
150 | AliFMDSubDetector* fFMD2; // FMD2 structure |
151 | AliFMDSubDetector* fFMD3; // FMD3 structure |
37c55dc0 |
152 | |
4347b38f |
153 | TClonesArray* fSDigits; |
154 | Int_t fNsdigits; |
155 | |
156 | Float_t fSiDensity; // Density of Silicon |
157 | Int_t fPrintboardRotationId; // ID of Rotation of print bard |
158 | Int_t fIdentityRotationId; // ID of identity matrix |
159 | Int_t fShortLegId; // ID short leg volume |
160 | Int_t fLongLegId; // ID long leg volume |
161 | Double_t fLegLength; // Leg length |
162 | Double_t fLegRadius; // Leg radius |
163 | Double_t fModuleSpacing; // Staggering offset |
164 | |
165 | ClassDef(AliFMD,8) // Base class FMD entry point |
fe4da5cc |
166 | }; |
dc8af42e |
167 | |
4347b38f |
168 | //____________________________________________________________________ |
169 | class AliFMDv0 : public AliFMD |
170 | { |
171 | public: |
172 | AliFMDv0() {} |
173 | AliFMDv0(const char *name, const char *title="Coarse geometry") |
174 | : AliFMD(name, title, false) |
175 | {} |
176 | virtual ~AliFMDv0() |
177 | {} |
178 | |
179 | // Required member functions |
180 | virtual Int_t IsVersion() const {return 0;} |
181 | virtual void StepManager() {} |
182 | |
183 | ClassDef(AliFMDv0,1) // Coarse FMD geometry |
184 | }; |
185 | |
186 | //____________________________________________________________________ |
187 | #ifndef ROOT_TLorentzVector |
188 | # include <TLorentzVector.h> |
189 | #endif |
190 | |
191 | class AliFMDv1 : public AliFMD |
192 | { |
193 | public: |
194 | AliFMDv1() {} |
195 | AliFMDv1(const char *name, const char *title="Detailed geometry") |
196 | : AliFMD(name, title, true) |
197 | {} |
198 | virtual ~AliFMDv1() {} |
199 | |
200 | // Required member functions |
201 | virtual Int_t IsVersion() const {return 1;} |
202 | virtual void StepManager(); |
203 | protected: |
204 | Double_t fCurrentDeltaE; // The current accumelated energy loss |
205 | TLorentzVector fCurrentV; // Current production vertex |
206 | TLorentzVector fCurrentP; // Current momentum vector |
207 | Int_t fCurrentPdg; // Current PDG code |
208 | |
209 | ClassDef(AliFMDv1,3) // Detailed FMD geometry |
210 | }; |
dc8af42e |
211 | |
4347b38f |
212 | #endif |
213 | //____________________________________________________________________ |
214 | // |
215 | // EOF |
216 | // |