Added the class AliFMDGeometryBuilder (and derived
[u/mrichter/AliRoot.git] / FMD / AliFMDGeometryBuilder.h
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  */
10 #ifndef ROOT_TTask
11 # include <TTask.h>
12 #endif
13 #ifndef ROOT_TArrayI
14 # include <TArrayI.h>
15 #endif
16 class TGeoVolume;
17 class TGeoMedium;
18 class AliFMD;
19 class AliFMDRing;
20 class AliFMDDetector;
21 class AliFMD1;
22 class AliFMD2;
23 class AliFMD3;
24
25 //____________________________________________________________________
26 class AliFMDGeometryBuilder : public TTask
27 {
28 public:
29   AliFMDGeometryBuilder();
30   /** CTOR */
31   AliFMDGeometryBuilder(Bool_t detailed);
32   virtual ~AliFMDGeometryBuilder() {}
33   /** Register */
34   virtual void Exec(Option_t* option="");
35   /** @param use Wheher to assemblies in the geometry definition */
36   virtual void UseAssembly(Bool_t use=kTRUE) { fUseAssembly = use; }
37   /** Whether to make a detailed geometry or not. 
38       @param use If true, make a detailed geometry */
39   virtual void SetDetailed(Bool_t use) { fDetailed = use; }
40   /** @return Sector offset in volume tree  */
41   Int_t GetSectorOff() const { return fSectorOff; }
42     /** @return Module offset in volume tree */
43   Int_t GetModuleOff() const { return fModuleOff; }
44     /** @return Ring offset in the volume tree  */
45   Int_t GetRingOff() const { return fRingOff; }
46     /** @return Detector offfset in the volume tree  */
47   Int_t GetDetectorOff() const { return fDetectorOff; }
48 protected:
49   /** Make a ring volume 
50       @param r Ring geometry 
51       @return  Ring volume */
52   virtual TGeoVolume* RingGeometry(AliFMDRing* r);
53   /** Make a detector volume 
54       @param d Detector geometry 
55       @param mother Mother volume (detector volume)
56       @param zmother Z position of mother 
57       @param inner Inner ring volume 
58       @param outer Outer ring volume 
59       @return  Detector volume */
60   virtual TGeoVolume* DetectorGeometry(AliFMDDetector* d, 
61                                        TGeoVolume* mother, 
62                                        Double_t zmother, 
63                                        TGeoVolume* inner, 
64                                        TGeoVolume* outer=0);
65   /** Make FMD1 volume 
66       @param d Detector geometry 
67       @param inner Inner ring volume 
68       @return FMD1 volume  */
69   virtual TGeoVolume* FMD1Geometry(AliFMD1* d, TGeoVolume* inner);
70   /** Make FMD2 volume 
71       @param d Detector geometry 
72       @param inner Inner ring volume 
73       @param outer Outer ring volume 
74       @return FMD2 volume  */
75   virtual TGeoVolume* FMD2Geometry(AliFMD2* d, TGeoVolume* inner, 
76                                    TGeoVolume* outer);
77   /** Make FMD3 volume 
78       @param d Detector geometry 
79       @param inner Inner ring volume 
80       @param outer Outer ring volume 
81       @return FMD3 volume  */
82   virtual TGeoVolume* FMD3Geometry(AliFMD3* d, TGeoVolume* inner, 
83                                    TGeoVolume* outer);
84
85
86   TArrayI     fActiveId;      //! Active volume ID's
87   Bool_t      fDetailed;      // Whether to make a detailed simulation 
88   Bool_t      fUseAssembly;   // Assembly volumes
89   Int_t       fSectorOff;     // Sector offset in volume tree 
90   Int_t       fModuleOff;     // Module offset in volume tree
91   Int_t       fRingOff;       // Ring offset in the volume tree 
92   Int_t       fDetectorOff;   // Detector offfset in the volume tree 
93
94   TGeoMedium* fSi;       //! Si Medium
95   TGeoMedium* fC;        //! C Medium
96   TGeoMedium* fAl;       //! Al Medium
97   TGeoMedium* fPCB;      //! PCB Medium
98   TGeoMedium* fChip;     //! Chip Medium
99   TGeoMedium* fAir;      //! Air Medium
100   TGeoMedium* fPlastic;  //! Plastic Medium
101   TGeoMedium* fCopper;   //! Copper Medium
102
103   static const Char_t* fgkActiveName;   // Name of Active volumes
104   static const Char_t* fgkSectorName;   // Name of Sector volumes
105   static const Char_t* fgkStripName;    // Name of Strip volumes
106   static const Char_t* fgkModuleName;   // Name of Module volumes
107   static const Char_t* fgkPCBName;      // Name of PCB volumes
108   static const Char_t* fgkLongLegName;  // Name of LongLeg volumes
109   static const Char_t* fgkShortLegName; // Name of ShortLeg volumes
110   static const Char_t* fgkFrontVName;   // Name of Front volumes
111   static const Char_t* fgkBackVName;    // Name of Back volumes
112   static const Char_t* fgkRingName;     // Name of Ring volumes
113   static const Char_t* fgkTopHCName;    // Name of TopHC volumes
114   static const Char_t* fgkBotHCName;    // Name of BotHC volumes
115   static const Char_t* fgkTopIHCName;   // Name of TopIHC volumes
116   static const Char_t* fgkBotIHCName;   // Name of BotIHC volumes
117   static const Char_t* fgkNoseName;     // Name of Nose volumes
118   static const Char_t* fgkBackName;     // Name of Back volumes
119   static const Char_t* fgkBeamName;     // Name of Beam volumes
120   static const Char_t* fgkFlangeName;   // Name of Flange volumes
121
122   ClassDef(AliFMDGeometryBuilder,1)
123 };
124
125 #endif
126 //____________________________________________________________________
127 //
128 // Local Variables:
129 //   mode: C++
130 // End:
131 //
132 // EOF
133 //
134