b15d98065382e63530ee69b19a0463ea54ece078
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySDD.h
1 #ifndef ALIITSV11GEOMETRYSDD_H
2 #define ALIITSV11GEOMETRYSDD_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 // Ludovic Gaudichet (Ludovic.Gaudichet@to.infn.it)
8
9 class TGeoVolume;
10 class TGeoCombiTrans;
11 class TGeoArb8;
12 class TGeoNode;
13
14 #include <TObjArray.h>
15
16 //----------------------------------------------------------------------
17 class AliITSv11GeomSDDcable: public TObject {
18  public:
19   AliITSv11GeomSDDcable():TObject(){fInitialNode = 0; fPointArray.SetOwner(); };
20   virtual ~AliITSv11GeomSDDcable();
21   void AddCheckPoint( TGeoVolume *vol, Int_t iCheckPt, Double_t *coord);
22   Int_t GetNCheckPoints() {return fVolumeArray.GetEntriesFast();};
23   Int_t GetCheckPoint( Int_t iCheckPt, Int_t nOccur, Int_t motherLevel,
24                        Double_t *coord);
25   void SetInitialNode(TGeoVolume *vol);
26   void ResetInitialNode();
27
28  protected:
29   bool CheckDaughter(Int_t i, TGeoNode* node);
30
31   Int_t fNodeInd[50];
32   TObjArray fVolumeArray;
33   TObjArray fPointArray;
34   TGeoVolume *fCurrentVol;
35   TGeoNode *fInitialNode;
36
37   ClassDef(AliITSv11GeomSDDcable,1) // ITS v11 SDD cable geometry
38 };
39
40
41
42 //----------------------------------------------------------------------
43 class AliITSv11GeomSDDcableNap : public AliITSv11GeomSDDcable {
44  public:
45   AliITSv11GeomSDDcableNap(Double_t width, Double_t thick);
46   virtual ~AliITSv11GeomSDDcableNap() {};
47   Int_t CreateAndInsertCableSegment(Int_t p1, Int_t p2, TGeoVolume *motherVol);
48  protected:
49   Double_t fWidth;
50   Double_t fThick;
51
52   ClassDef(AliITSv11GeomSDDcableNap,1) // ITS v11 SDD cable Nap geometry
53 };
54
55
56
57 //----------------------------------------------------------------------
58 class AliITSv11GeometrySDD : public AliITSv11Geometry {
59
60  public:
61   AliITSv11GeometrySDD();
62   AliITSv11GeometrySDD(Int_t debug);
63   virtual ~AliITSv11GeometrySDD(){};
64
65   // Main functions
66   virtual void Layer3(TGeoVolume *Moth);
67   virtual void Layer4(TGeoVolume *Moth);
68
69   // Functions for coding, testing, debugging 
70   void ShowOnePiece(TGeoVolume *Moth);
71   void CheckOverlaps(Double_t precision = 0.01);
72   void AddOnlySegment(Int_t i) { fAddOnlySegment=i; };
73   void AddOnlyLay3Ladder(Int_t min,Int_t max){
74     fAddOnlyLadder3min = min; fAddOnlyLadder3max = max; };
75   void AddOnlyLay4Ladder(Int_t min,Int_t max) {
76     fAddOnlyLadder4min = min; fAddOnlyLadder4max = max;};
77
78   virtual void SetGeomParameters();
79
80
81   AliITSv11GeomSDDcable cable;
82
83   private:
84
85   // Create ladder virtual volumes and its detectors (inside layers 3 and 4)
86   virtual TGeoVolume* CreateLay3Ladder();
87   virtual TGeoVolume* CreateLay3Detectors();
88   virtual TGeoVolume* CreateLay4Ladder();
89   virtual TGeoVolume* CreateLay4Detectors();
90
91   // Create virtual volumes inside a ladder volume
92   virtual TGeoVolume* CreateLadderSegment(Int_t iLay, Int_t iSeg);
93   virtual TGeoVolume* CreateEndLadder(Int_t iLay, Int_t);
94   virtual TGeoVolume* CreateHybrid(Int_t iSeg);
95
96
97   // Create a TGeoCombiTrans : general rotation in phi and (dy,dz) translation 
98   TGeoCombiTrans* CreateCombiTrans( const char *name,
99                                     Double_t dy, Double_t dz, Double_t dphi);
100
101   // add (dx,dy,dz) translation to a initial TGeoCombiTrans
102   void AddTranslationToCombiTrans( TGeoCombiTrans* ct,
103                                     Double_t dx=0, Double_t dy=0, Double_t dz=0);
104
105   // Create one side of the CF corner of the CF structure
106   TGeoArb8* CreateLadderSide( Double_t dz, Double_t angle, Double_t xSign,
107                               Double_t L, Double_t H, Double_t l);
108
109   // Create de CF structure in the ladder segment
110   void AddLadderCFstruct(Double_t dy, TGeoVolume* vol);
111
112   // Create a pin support object
113   virtual TGeoVolume* CreatePinSupport();
114
115   virtual TGeoVolume* CreateCoolPipeSupportL();
116   virtual TGeoVolume* CreateCoolPipeSupportR();
117
118   // Create a SDD detector object
119   virtual TGeoVolume* CreateSDDsensor();
120
121   // Create the base of the thermal bridge, supporting hybrids on ladder
122   virtual TGeoVolume* CreateBaseThermalBridge();
123
124   //**************************************************
125
126   Int_t fAddOnlyLadder3min;
127   Int_t fAddOnlyLadder3max;
128   Int_t fAddOnlyLadder4min;
129   Int_t fAddOnlyLadder4max;
130   Int_t fAddOnlySegment;
131   Int_t fColorCarbonFiber;
132   Int_t fColorRyton;
133   Int_t fColorPhynox;
134   Int_t fColorSilicon;
135
136   bool fCoolingOn;
137
138   // parameters of the SDD geometry :
139   static const Double_t fLay3Rmin;
140   static const Double_t fLay3Rmax;
141   static const Double_t fLay3Length;
142   static const Double_t fLay3LadderLength;
143   static const Double_t fLay3DetLongRadius;
144   static const Double_t fLay3LaddTopCornerEnd;
145   static const Double_t fLay3ZPlusEndLength;
146   static const Int_t    fLay3Nladd;
147   static const Int_t    fLay3Ndet;
148   static const Double_t fLay3DetShortRadius;
149
150   static const Double_t fLay4Rmin;
151   static const Double_t fLay4Rmax;
152   static const Double_t fLay4Length;
153   static const Double_t fLay4LadderLength;
154   static const Double_t fLay4LaddTopCornerEnd;
155   static const Double_t fLay4ZPlusEndLength;
156   static const Int_t    fLay4Nladd;
157   static const Int_t    fLay4Ndet;
158   static const Double_t fLay4DetShortRadius;
159   static const Double_t fLay4DetLongRadius;
160
161   static const Double_t fSegmentLength;
162   static const Double_t fLadderWidth;
163   static const Double_t fLadderHeight;
164   static const Double_t fLadderBeamRadius;
165   static const Double_t fLadderLa;
166   static const Double_t fLadderHa;
167   static const Double_t fLadderLb;
168   static const Double_t fLadderHb;
169   static const Double_t fLadderl;
170
171   static const Double_t fBottomBeamAngle;
172   static const Double_t fBeamSidePhi;
173
174   static const Double_t fWaferThickness;
175   static const Double_t fWaferWidth;
176   static const Double_t fWaferLength;
177   
178   static const Double_t fHybridLength;
179   static const Double_t fHybridWidth;
180   static const Double_t fHybridThBridgeThick;
181
182   static const Double_t fLadWaferSep;
183   static const Double_t fPinSuppWidth;
184   static const Double_t fPinSuppHeight;
185   static const Double_t fPinSuppRmax;
186   static const Double_t fPinR;
187   static const Double_t fPinSuppLength;
188   static const Double_t fPinSuppThickness;
189   static const Double_t fPinSuppConeAngle;
190   static const Double_t fPinDXminOnSensor;
191   static const Double_t fPinPinDDXOnSensor;
192   static const Double_t fPinDYOnSensor;
193
194   static const Double_t fCoolPipeInnerDiam;
195   static const Double_t fCoolPipeOuterDiam;
196   static const Double_t fCoolPipeSuppHeight;
197   static const Double_t fCoolPipeSuppMaxLength;
198   static const Double_t fCoolPipeSuppWidthExt;
199   static const Double_t fCoolPipeSuppWidthIn;
200   static const Double_t fCoolPipeSuppHoleDiam;
201   static const Double_t fCoolPipeSuppFulWidth;
202   static const Double_t fCoolPipeSuppTongW;
203   static const Double_t fCoolPipeSuppAngle;
204   static const Double_t fCoolPipeSuppSlitL;
205   static const Double_t fCoolPipeSuppAxeDist;
206   static const Double_t fLay3CoolPipeSuppH;
207   static const Double_t fLay4CoolPipeSuppH;
208
209   static const Double_t fBTBthick;
210   static const Double_t fBTBlength;
211   static const Double_t fBTBwidth;
212   static const Double_t fBTBaxisAtoBottom;
213   static const Double_t fBTBaxisAtoBase;
214   static const Double_t fRadiusAminBTB;
215   static const Double_t fRadiusBminBTB;
216   static const Double_t fBTBHoleLength;
217   static const Double_t fBTBHolewidth;
218   static const Double_t fBTBHoleRefX;
219   static const Double_t fBTBHoleRefY;
220
221   Double_t fLay3LaddShortRadius;
222   Double_t fLay3LaddLongRadius;
223
224   Double_t fLay4LaddShortRadius;
225   Double_t fLay4LaddLongRadius;
226
227   Double_t fLay3sensorZPos[6];
228   Double_t fLay4sensorZPos[8];
229
230
231   ClassDef(AliITSv11GeometrySDD,1) // ITS v11 SDD geometry
232 };
233
234
235
236
237
238 #endif