]>
Commit | Line | Data |
---|---|---|
54e415a8 | 1 | #ifndef ALIFMDGEOMETRYBUILDER_H |
2 | #define ALIFMDGEOMETRYBUILDER_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 | */ | |
02a27b50 | 10 | // Builder of FMD geometry. |
11 | // This class takes care of actually building the geometry using the | |
12 | // TGeo classes. Various parameters are fecthed from the | |
13 | // AliFMDGeometry manager. | |
c2fc1258 | 14 | /** @file AliFMDGeometryBuilder.h |
15 | @author Christian Holm Christensen <cholm@nbi.dk> | |
16 | @date Mon Mar 27 12:41:17 2006 | |
17 | @brief Class to build the FMD geometry | |
18 | */ | |
54e415a8 | 19 | #ifndef ROOT_TTask |
20 | # include <TTask.h> | |
21 | #endif | |
22 | #ifndef ROOT_TArrayI | |
23 | # include <TArrayI.h> | |
24 | #endif | |
25 | class TGeoVolume; | |
26 | class TGeoMedium; | |
ed82d35e | 27 | class TGeoShape; |
54e415a8 | 28 | class AliFMD; |
29 | class AliFMDRing; | |
30 | class AliFMDDetector; | |
31 | class AliFMD1; | |
32 | class AliFMD2; | |
33 | class AliFMD3; | |
34 | ||
35 | //____________________________________________________________________ | |
9f662337 | 36 | /** @class AliFMDGeometryBuilder |
37 | @brief Builder of FMD geometry. | |
38 | This class takes care of actually building the geometry using the | |
39 | @b TGeo classes. Various parameters are fecthed from the | |
40 | AliFMDGeometry manager. | |
41 | @ingroup FMD_sim | |
42 | */ | |
54e415a8 | 43 | class AliFMDGeometryBuilder : public TTask |
44 | { | |
45 | public: | |
54e415a8 | 46 | /** CTOR */ |
9f662337 | 47 | AliFMDGeometryBuilder(); |
48 | /** CTOR | |
49 | @param detailed Whether to make a detailed geometry. */ | |
54e415a8 | 50 | AliFMDGeometryBuilder(Bool_t detailed); |
51 | virtual ~AliFMDGeometryBuilder() {} | |
52 | /** Register */ | |
53 | virtual void Exec(Option_t* option=""); | |
54 | /** @param use Wheher to assemblies in the geometry definition */ | |
55 | virtual void UseAssembly(Bool_t use=kTRUE) { fUseAssembly = use; } | |
56 | /** Whether to make a detailed geometry or not. | |
57 | @param use If true, make a detailed geometry */ | |
58 | virtual void SetDetailed(Bool_t use) { fDetailed = use; } | |
59 | /** @return Sector offset in volume tree */ | |
60 | Int_t GetSectorOff() const { return fSectorOff; } | |
61 | /** @return Module offset in volume tree */ | |
62 | Int_t GetModuleOff() const { return fModuleOff; } | |
63 | /** @return Ring offset in the volume tree */ | |
64 | Int_t GetRingOff() const { return fRingOff; } | |
65 | /** @return Detector offfset in the volume tree */ | |
66 | Int_t GetDetectorOff() const { return fDetectorOff; } | |
67 | protected: | |
02a27b50 | 68 | /** Copy CTOR */ |
b5ee4425 | 69 | AliFMDGeometryBuilder(const AliFMDGeometryBuilder& o) |
70 | : TTask(o), | |
71 | fActiveId(o.fActiveId), | |
72 | fDetailed(o.fDetailed), | |
73 | fUseAssembly(o.fUseAssembly), | |
74 | fSectorOff(o.fSectorOff), | |
75 | fModuleOff(o.fModuleOff), | |
76 | fRingOff(o.fRingOff), | |
77 | fDetectorOff(o.fDetectorOff), | |
78 | fSi(o.fSi), | |
79 | fC(o.fC), | |
80 | fAl(o.fAl), | |
81 | fPCB(o.fPCB), | |
82 | fChip(o.fChip), | |
83 | fAir(o.fAir), | |
84 | fPlastic(o.fPlastic), | |
d98fbfa5 | 85 | fCopper(o.fCopper), |
86 | fSteel(o.fSteel) | |
b5ee4425 | 87 | {} |
f70f588a | 88 | /** |
89 | * Assignment operator | |
90 | * | |
91 | * @return Reference to this object | |
92 | */ | |
02a27b50 | 93 | AliFMDGeometryBuilder& operator=(const AliFMDGeometryBuilder&){return *this;} |
f70f588a | 94 | |
95 | /** | |
96 | * Make a polygonic extrusion shape based on verticies passed in @a | |
97 | * verticies | |
98 | * | |
99 | * @param verticies List of verticies | |
100 | * @param thick Thickness | |
101 | * | |
102 | * @return newly allocated polygonic extrusion shape | |
103 | */ | |
104 | virtual TGeoShape* MakeXTRU(const TObjArray& verticies, Double_t thick) const; | |
105 | ||
106 | /** | |
107 | * Make a ring volume | |
108 | * | |
109 | * @param r Ring geometry | |
110 | * | |
111 | * @return Ring volume | |
112 | */ | |
54e415a8 | 113 | virtual TGeoVolume* RingGeometry(AliFMDRing* r); |
ed82d35e | 114 | |
f70f588a | 115 | /** |
116 | * Make a honey comb shape from passed parameters. | |
117 | * | |
118 | * @param id Detector identifier (1,2, or 3) | |
119 | * @param ring Ring identifier ('I' or 'O') | |
120 | * @param r1 Inner radius | |
121 | * @param r2 Outer radius | |
122 | * @param w width | |
123 | * @param t Thickness of material | |
124 | * @param c Clearing from horizontal. | |
125 | * | |
126 | * @return Pointer to newly allocated composite shape. | |
127 | */ | |
ed82d35e | 128 | virtual TGeoShape* HoneycombShape(Int_t id, Char_t ring, |
129 | double r1, double r2, | |
130 | double w, double t, double c=0.3); | |
2e0139df | 131 | /** |
132 | * Get the tension box volume | |
133 | * | |
134 | * | |
135 | * @return | |
136 | */ | |
137 | virtual TGeoVolume* TensionBox(); | |
54e415a8 | 138 | /** Make a detector volume |
139 | @param d Detector geometry | |
f8616692 | 140 | @param motherTop Mother volume (detector volume) |
141 | @param motherBot Mother volume (detector volume) | |
54e415a8 | 142 | @param zmother Z position of mother |
f8616692 | 143 | @param innerTop Inner ring volume |
144 | @param innerBot Inner ring volume | |
145 | @param outerTop Outer ring volume | |
146 | @param outerBot Outer ring volume | |
54e415a8 | 147 | @return Detector volume */ |
148 | virtual TGeoVolume* DetectorGeometry(AliFMDDetector* d, | |
bf000c32 | 149 | TGeoVolume* motherTop, |
150 | TGeoVolume* motherBot, | |
151 | Double_t zmother, | |
152 | TGeoVolume* innerTop, | |
153 | TGeoVolume* innerBot, | |
154 | TGeoVolume* outerTop=0, | |
155 | TGeoVolume* outerBot=0); | |
54e415a8 | 156 | /** Make FMD1 volume |
157 | @param d Detector geometry | |
f8616692 | 158 | @param innerTop Inner ring volume |
159 | @param innerBot Inner ring volume | |
54e415a8 | 160 | @return FMD1 volume */ |
bf000c32 | 161 | virtual TGeoVolume* FMD1Geometry(AliFMD1* d, |
162 | TGeoVolume* innerTop, | |
163 | TGeoVolume* innerBot); | |
f70f588a | 164 | /** |
165 | * Make FMD2 volume | |
166 | * | |
167 | * @param d Detector geometry | |
168 | * @param innerTop Inner ring volume | |
169 | * @param innerBot Inner ring volume | |
170 | * @param outerTop Outer ring volume | |
171 | * @param outerBot Outer ring volume | |
172 | * | |
173 | * @return FMD2 volume | |
174 | */ | |
bf000c32 | 175 | virtual TGeoVolume* FMD2Geometry(AliFMD2* d, |
176 | TGeoVolume* innerTop, | |
177 | TGeoVolume* innerBot, | |
178 | TGeoVolume* outerTop, | |
179 | TGeoVolume* outerBot); | |
f70f588a | 180 | /** |
181 | * Make FMD3 volume | |
182 | * | |
183 | * @param d Detector geometry | |
184 | * @param innerTop Inner ring volume | |
185 | * @param innerBot Inner ring volume | |
186 | * @param outerTop Outer ring volume | |
187 | * @param outerBot Outer ring volume | |
188 | * | |
189 | * @return FMD3 volume | |
190 | */ | |
bf000c32 | 191 | virtual TGeoVolume* FMD3Geometry(AliFMD3* d, |
192 | TGeoVolume* innerTop, | |
193 | TGeoVolume* innerBot, | |
194 | TGeoVolume* outerTop, | |
195 | TGeoVolume* outerBot); | |
54e415a8 | 196 | |
197 | ||
198 | TArrayI fActiveId; //! Active volume ID's | |
199 | Bool_t fDetailed; // Whether to make a detailed simulation | |
200 | Bool_t fUseAssembly; // Assembly volumes | |
201 | Int_t fSectorOff; // Sector offset in volume tree | |
202 | Int_t fModuleOff; // Module offset in volume tree | |
203 | Int_t fRingOff; // Ring offset in the volume tree | |
204 | Int_t fDetectorOff; // Detector offfset in the volume tree | |
205 | ||
206 | TGeoMedium* fSi; //! Si Medium | |
207 | TGeoMedium* fC; //! C Medium | |
208 | TGeoMedium* fAl; //! Al Medium | |
209 | TGeoMedium* fPCB; //! PCB Medium | |
210 | TGeoMedium* fChip; //! Chip Medium | |
211 | TGeoMedium* fAir; //! Air Medium | |
212 | TGeoMedium* fPlastic; //! Plastic Medium | |
213 | TGeoMedium* fCopper; //! Copper Medium | |
d98fbfa5 | 214 | TGeoMedium* fSteel; //! Steel Medium |
54e415a8 | 215 | |
216 | static const Char_t* fgkActiveName; // Name of Active volumes | |
217 | static const Char_t* fgkSectorName; // Name of Sector volumes | |
218 | static const Char_t* fgkStripName; // Name of Strip volumes | |
bf000c32 | 219 | static const Char_t* fgkSensorName; // Name of Sensor volumes |
54e415a8 | 220 | static const Char_t* fgkPCBName; // Name of PCB volumes |
bf000c32 | 221 | static const Char_t* fgkCuName; // Name of copper volumes |
222 | static const Char_t* fgkChipName; // Name of chip volumes | |
54e415a8 | 223 | static const Char_t* fgkLongLegName; // Name of LongLeg volumes |
224 | static const Char_t* fgkShortLegName; // Name of ShortLeg volumes | |
225 | static const Char_t* fgkFrontVName; // Name of Front volumes | |
226 | static const Char_t* fgkBackVName; // Name of Back volumes | |
bf000c32 | 227 | static const Char_t* fgkRingTopName; // Name of Top ring volumes |
228 | static const Char_t* fgkRingBotName; // Name of Bottom ring volumes | |
229 | static const Char_t* fgkHCName; // Name of Honeycomb volumes | |
230 | static const Char_t* fgkIHCName; // Name of Inner honeycomb volumes | |
54e415a8 | 231 | static const Char_t* fgkNoseName; // Name of Nose volumes |
232 | static const Char_t* fgkBackName; // Name of Back volumes | |
d98fbfa5 | 233 | static const Char_t* fgkTopName; // Name of Back volumes |
54e415a8 | 234 | static const Char_t* fgkBeamName; // Name of Beam volumes |
235 | static const Char_t* fgkFlangeName; // Name of Flange volumes | |
d98fbfa5 | 236 | static const Char_t* fgkFMDDCuName; // Name of FMDD copper volumes |
237 | static const Char_t* fgkFMDDPCBName; // Name of FMDD PCB volumes | |
238 | static const Char_t* fgkFMDDChipName; // Name of FMDD chip volumes | |
239 | static const Char_t* fgkFMDDName; // Name of FMDD volumes | |
bf000c32 | 240 | static const Char_t* fgkFMDName; // Name of Half FMD volumes |
54e415a8 | 241 | |
242 | ClassDef(AliFMDGeometryBuilder,1) | |
243 | }; | |
244 | ||
245 | #endif | |
246 | //____________________________________________________________________ | |
247 | // | |
248 | // Local Variables: | |
249 | // mode: C++ | |
250 | // End: | |
251 | // | |
252 | // EOF | |
253 | // | |
254 |