coding conventions and documentation
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySSD.h
1 //*************************************************************************
2 // class AliITSv11GeometrySSD
3 // Enrico Cattaruzza                                     ecattar@ts.infn.it
4 //*************************************************************************
5 #ifndef ALIITSV11GEOMETRYSSD_H
6 #define ALIITSV11GEOMETRYSSD_H
7 class TGeoVolume;
8 class TGeoCombiTrans;
9 class TGeoMedium;
10 class TGeoCompositeShape;
11 class TVector3;
12 class TGeoArb8;
13 class TList;
14 class TGeoTube;
15 class TGeoHMatrix;
16 class AliITSv11GeometrySSD{
17 public:
18   AliITSv11GeometrySSD();
19   virtual ~AliITSv11GeometrySSD(){};
20   /////////////////////////////////////////////////////////////////////////
21   // Public methods
22   /////////////////////////////////////////////////////////////////////////
23   TGeoMedium *GetMedium(char*); // to be interfaced with AliRoot
24   const char*   GetSensitiveVolumeName() const {return fgkSSDSensitiveVolName;};
25   TGeoVolume* GetSSDSensorSupportShape(Double_t,Double_t,Double_t,Double_t*);
26   TGeoVolume* GetSSDSensorSupport(Int_t, Int_t);
27   TGeoVolume* GetSSDSensorSupportAssembly(Int_t);
28   TGeoVolume* GetSSDSensor();
29   TGeoVolume* GetSSDChipAssembly();
30   TGeoVolume* GetSSDChipCables(Double_t,char*);
31   TGeoVolume* GetSSDChipCablesAssembly(Double_t);
32   TGeoVolume* GetSSDStiffenerAssembly();
33   TGeoVolume* GetSSDFlex(Double_t,Double_t);
34   TGeoVolume* GetSSDEndFlex(Double_t,Double_t);
35   TGeoVolume* GetSSDFlexAssembly();
36   TGeoVolume* GetSSDCoolingBlock();
37   TGeoVolume* GetSSDCoolingBlockAssembly();
38   TGeoVolume* GetSSDModule(Int_t);
39   TGeoVolume* GetCarbonFiberJunction(Double_t);
40   TGeoVolume* GetCarbonFiberJunctionAssembly();
41   TList* GetLadderCableSegment(Double_t);
42   TGeoVolume* GetLadderCable(Int_t n,Double_t);
43   TGeoVolume* GetLadderCableAssembly(Int_t n,Double_t);
44   TList* GetLadderCableAssemblyList(Int_t n,Double_t);
45   TList* GetEndLadderCarbonFiberJunctionAssembly();
46   TGeoVolume* GetCarbonFiberSupport();
47   TGeoVolume* GetCarbonFiberLowerSupport(Int_t i=0, Bool_t EndLadder = false);
48   TGeoVolume* GetCarbonFiberAssemblySupport();
49   TGeoVolume* GetCoolingTubeSupport();
50   TGeoVolume* GetCoolingTubeSupportAssembly();
51   TGeoVolume* GetCoolingTube();
52   TGeoVolume* GetCoolingTubeAssembly();
53   TGeoVolume* GetLadderSegment(Int_t);
54   TList* GetEndLadderSegment();
55   TGeoVolume* GetSSDMountingBlock();
56   TGeoVolume* GetLadder(Int_t);
57   TGeoVolume* GetLayer(Int_t);
58   void Layer5(TGeoVolume*);
59   void Layer6(TGeoVolume*);
60   /////////////////////////////////////////////////////////////////////////
61   //Auxiliary methods for shapes building
62   /////////////////////////////////////////////////////////////////////////
63   TVector3* GetReflection(TVector3*,Double_t*);
64   TGeoArb8* GetArbShape(TVector3* [],Double_t*,Double_t,char*,Int_t isign = 1);
65   TGeoArb8* GetTriangleShape(TVector3* [],Double_t,char*);
66   TGeoArb8* GetTrapezoidShape(TVector3* [],Double_t*,Double_t,char*);
67   TGeoCombiTrans* AddTranslationToCombiTrans(TGeoCombiTrans*,Double_t,
68                                                          Double_t,Double_t) const;
69   /////////////////////////////////////////////////////////////////////////
70   //Auxiliary methods for material building
71   /////////////////////////////////////////////////////////////////////////
72   TGeoMedium* AliITSv11GeometrySSD::GetMedium(const char* mediumName);
73   void CreateMaterials();
74 private:
75   /////////////////////////////////////////////////////////////////////////
76   // Layer5 (lengths are in mm and angles in degrees)
77   /////////////////////////////////////////////////////////////////////////
78   static const Double_t fgkSSDLay5LadderLength;
79   static const Int_t fgkSSDLay5SensorsNumber;
80   static const Int_t fgkSSDLay5LadderNumber;
81   static const Double_t fgkSSDLay5RadiusMin;
82   static const Double_t fgkSSDLay5RadiusMax;
83   static const Double_t fgkLay5CenterITSPosition;
84   /////////////////////////////////////////////////////////////////////////
85   // Layer6 (lengths are in mm and angles in degrees)
86   /////////////////////////////////////////////////////////////////////////
87   static const Double_t fgkSSDLay6LadderLength; //It is not used explicitely in the simulation
88   static const Int_t fgkSSDLay6SensorsNumber;
89   static const Int_t fgkSSDLay6LadderNumber;
90   static const Double_t fgkSSDLay6RadiusMin;
91   static const Double_t fgkSSDLay6RadiusMax;
92   static const Double_t fgkLay6CenterITSPosition;
93   /////////////////////////////////////////////////////////////////////////
94   // SSD Chips and Hybrid
95   /////////////////////////////////////////////////////////////////////////
96   static const Int_t fgkSSDChipNumber;
97   static const Double_t fgkSSDChipLength; 
98   static const Double_t fgkSSDChipWidth;
99   static const Double_t fgkSSDChipHeight;
100   static const Double_t fgkSSDChipSeparationLength;
101   static const Double_t fgkSSDChipGlueLength; 
102   static const Double_t fgkSSDChipGlueWidth; 
103   static const Double_t fgkSSDChipGlueHeight; 
104   TGeoMedium* fgkSSDChipMedium;
105   TGeoMedium* fgkSSDChipGlueMedium;
106   /////////////////////////////////////////////////////////////////////////
107   // Stiffener
108   /////////////////////////////////////////////////////////////////////////
109   static const Double_t fgkSSDStiffenerLength;
110   static const Double_t fgkSSDStiffenerWidth;
111   static const Double_t fgkSSDStiffenerHeight;
112   static const Double_t fgkSSDStiffenerToChipDist;
113   static const Double_t fgkSSDCapacitor0603Length;
114   static const Double_t fgkSSDCapacitor0603Width;
115   static const Double_t fgkSSDCapacitor0603Height;
116   static const Double_t fgkSSDCapacitor1812Length;
117   static const Double_t fgkSSDCapacitor1812Width;
118   static const Double_t fgkSSDCapacitor1812Height;
119   static const Double_t fgkSSDWireLength;
120   static const Double_t fgkSSDWireRadius;
121   static const Double_t fgkSSDConnectorPosition[2];
122   static const Double_t fgkSSDConnectorSeparation;
123   static const Double_t fgkSSDConnectorLength;
124   static const Double_t fgkSSDConnectorWidth;
125   static const Double_t fgkSSDConnectorHeight;
126   TGeoMedium* fgkSSDStiffenerMedium;
127   TGeoMedium* fgkSSDStiffenerConnectorMedium;
128   TGeoMedium* fgkSSDStiffener0603CapacitorMedium;
129   TGeoMedium* fgkSSDStiffener1812CapacitorMedium;
130   TGeoMedium* fgkSSDStiffenerHybridWireMedium;
131   /////////////////////////////////////////////////////////////////////////
132   // Flex
133   /////////////////////////////////////////////////////////////////////////
134   static const Double_t fgkSSDFlexFullLength;
135   static const Double_t fgkSSDFlexLength[4];
136   static const Double_t fgkSSDFlexWidth[2];
137   static const Double_t fgkSSDFlexHeight[2];
138   static const Double_t fgkSSDFlexAngle;
139   static const Double_t fgkSSDFlexHoleLength;
140   static const Double_t fgkSSDFlexHoleWidth;
141   static const Double_t fgkSSDEndFlexCompLength[6];
142   static const Double_t fgkSSDEndFlexCompWidth[3];
143   TGeoMedium* fgkSSDKaptonFlexMedium;
144   TGeoMedium* fgkSSDAlTraceFlexMedium;
145   /////////////////////////////////////////////////////////////////////////////////
146   // SSD Ladder Cable 
147   /////////////////////////////////////////////////////////////////////////////////
148   static const Double_t fgkSSDEndLadderCableLength;
149   static const Double_t fgkSSDLadderCableWidth;
150   TGeoMedium* fgkSSDAlTraceLadderCableMedium;
151   TGeoMedium* fgkSSDKaptonLadderCableMedium;
152   /////////////////////////////////////////////////////////////////////////
153   // SSD Module
154   /////////////////////////////////////////////////////////////////////////
155   static const Double_t fgkSSDModuleStiffenerPosition[2];
156   static const Double_t fgkSSDModuleSensorSupportDistance;
157   static const Double_t fgkSSDModuleCoolingBlockToSensor;
158   static const Int_t fgkSSDModuleCombiTransNumber = 7;
159   void SetSSDModuleCombiTransMatrix(Double_t);
160   TGeoCombiTrans *SSDModuleCombiTransMatrix[fgkSSDModuleCombiTransNumber];
161   /////////////////////////////////////////////////////////////////////////
162   // Chip Cables
163   /////////////////////////////////////////////////////////////////////////
164   static const Double_t fgkSSDChipCablesLength[2];
165   static const Double_t fgkSSDChipCablesHeight[4];
166   static const Double_t fgkSSDChipCablesWidth[3];
167   TGeoMedium* fgkSSDKaptonChipCableMedium;
168   TGeoMedium* fgkSSDAlTraceChipCableMedium;
169   /////////////////////////////////////////////////////////////////////////
170   // Cooling Block
171   /////////////////////////////////////////////////////////////////////////
172   static const Double_t fgkSSDCoolingBlockLength;
173   static const Double_t fgkSSDCoolingBlockWidth;
174   static const Double_t fgkSSDCoolingBlockHeight[3];
175   static const Double_t fgkSSDCoolingBlockHoleRadius[2];
176   static const Double_t fgkSSDCoolingBlockHoleLength[2];
177   static const Double_t fgkSSDCoolingBlockHoleCenter;
178   static const Double_t fgkSSDCoolingBlockHoleHeight;
179   TGeoMedium* fgkSSDAlCoolBlockMedium;
180   /////////////////////////////////////////////////////////////////////////
181   // SSD Sensor 
182   /////////////////////////////////////////////////////////////////////////
183   static const char* fgkSSDSensitiveVolName;
184   static const Double_t fgkSSDSensorLength;
185   static const Double_t fgkSSDSensorHeight;
186   static const Double_t fgkSSDSensorWidth;
187   static const Double_t fgkSSDSensorOverlap;
188   static const Double_t fgkSSDSensorInsensitiveLength;
189   static const Double_t fgkSSDSensorInsensitiveWidth;
190   TGeoMedium* fgkSSDSensorMedium;
191   /////////////////////////////////////////////////////////////////////////
192   // SSD Sensor Support 
193   /////////////////////////////////////////////////////////////////////////
194   static const Int_t fgkSSDSensorSupportCombiTransNumber = 3;
195   static const Double_t fgkSSDSensorSideSupportLength;
196   static const Double_t fgkSSDSensorSideSupportWidth;
197   static const Double_t fgkSSDSensorSideSupportHeight[2];
198   static const Double_t fgkSSDSensorSideSupportThickness[2];
199   static const Double_t fgkSSDSensorSideSupportPosition;
200   static const Double_t fgkSSDSensorCenterSupportLength;
201   static const Double_t fgkSSDSensorCenterSupportWidth;
202   static const Double_t fgkSSDSensorCenterSupportHeight[2];
203   static const Double_t fgkSSDSensorCenterSupportThickness[2];
204   static const Double_t fgkSSDSensorCenterSupportPosition;
205   void SetSSDSensorSupportCombiTransMatrix();
206   TGeoCombiTrans *SSDSensorSupportCombiTransMatrix[fgkSSDSensorSupportCombiTransNumber];
207   TGeoMedium* fgkSSDSensorSupportMedium;
208   /////////////////////////////////////////////////////////////////////////
209   //Parameters for Carbon Fiber 
210   /////////////////////////////////////////////////////////////////////////
211   static const Int_t fgkCarbonFiberAssemblyCombiTransNumber = 3;
212   static const Double_t fgkCarbonFiberTriangleLength;
213   static const Double_t fgkCarbonFiberTriangleAngle;
214   static const Double_t fgkCarbonFiberSupportTopEdgeDist[2];
215   static const Double_t fgkCarbonFiberSupportEdgeLength;
216   static const Double_t fgkCarbonFiberSupportWidth;
217   static const Double_t fgkCarbonFiberSupportXAxisLength;
218   static const Double_t fgkCarbonFiberSupportYAxisLength;
219   void SetCarbonFiberAssemblyCombiTransMatrix();
220   TGeoCombiTrans *CarbonFiberAssemblyCombiTransMatrix[fgkCarbonFiberAssemblyCombiTransNumber];
221   TGeoMedium* fgkSSDCarbonFiberMedium;
222   //////////////////////////////////////////////////////////////////////////////
223   // Carbon Fiber Junction Parameters
224   //////////////////////////////////////////////////////////////////////////////
225   static const Int_t fgkCarbonFiberJunctionCombiTransNumber = 3;
226   static const Double_t fgkCarbonFiberJunctionLength;
227   static const Double_t fgkCarbonFiberJunctionWidth;
228   static const Double_t fgkCarbonFiberJunctionEdge[2];
229   static const Double_t fgkCarbonFiberJunctionAngle[2];
230   static const Double_t fgkCarbonFiberJunctionToSensorSupport;
231   void SetCarbonFiberJunctionCombiTransMatrix();
232   TGeoCombiTrans *CarbonFiberJunctionCombiTransMatrix[fgkCarbonFiberJunctionCombiTransNumber];
233   /////////////////////////////////////////////////////////////////////////
234   //Parameters for Carbon Fiber Lower Support (lengths are in mm)
235   /////////////////////////////////////////////////////////////////////////
236   static const Double_t fgkCarbonFiberLowerSupportWidth;
237   static const Double_t fgkCarbonFiberLowerSupportLowerLenght;
238   static const Double_t fgkCarbonFiberLowerSupportHeight;
239   static const Double_t fgkCarbonFiberLowerSupportTransverseWidth;
240   static const Double_t fgkCarbonFiberLowerSupportVolumeSeparation;
241   static const Double_t fgkCarbonFiberLowerSupportVolumePosition[2];
242   /////////////////////////////////////////////////////////////////////////
243   // End Ladder Carbon Fiber Junction Parameters (lengths are in mm and angles in degrees)
244   /////////////////////////////////////////////////////////////////////////
245   static const Int_t fgkEndLadderCarbonFiberJunctionCombiTransNumber = 3;
246   static const Double_t fgkEndLadderCarbonFiberLowerJunctionLength[2]; 
247   static const Double_t fgkEndLadderCarbonFiberUpperJunctionLength[2]; 
248   static const Double_t fgkEndLadderMountingBlockPosition[2];
249   void SetEndLadderCarbonFiberJunctionCombiTransMatrix(Int_t);
250   TGeoCombiTrans *EndLadderCarbonFiberJunctionCombiTransMatrix[fgkEndLadderCarbonFiberJunctionCombiTransNumber];
251   /////////////////////////////////////////////////////////////////////////
252   // Cooling Tube Support (lengths are in mm and angles in degrees)
253   /////////////////////////////////////////////////////////////////////////
254   static const Int_t fgkCoolingTubeSupportCombiTransNumber = 2;
255   static const Double_t fgkCoolingTubeSupportRmax;
256   static const Double_t fgkCoolingTubeSupportRmin;
257   static const Double_t fgkCoolingTubeSupportLength;
258   static const Double_t fgkCoolingTubeSupportHeight;
259   static const Double_t fgkCoolingTubeSupportWidth;
260   static const Double_t fgkCoolingTubeSupportSeparation;
261   static const Double_t fgkCoolingTubeSupportToCarbonFiber;
262   void SetCoolingTubeSupportCombiTransMatrix();
263   TGeoCombiTrans *CoolingTubeSupportCombiTransMatrix[fgkCoolingTubeSupportCombiTransNumber];
264   TGeoMedium* fgkSSDTubeHolderMedium;
265   /////////////////////////////////////////////////////////////////////////////////
266   // Cooling Tube (lengths are in mm and angles in degrees)
267   /////////////////////////////////////////////////////////////////////////////////
268   static const Int_t    fgkCoolingTubeCombiTransNumber = 2;
269   static const Double_t fgkCoolingTubeRmax;
270   static const Double_t fgkCoolingTubeRmin;
271   static const Double_t fgkCoolingTubeLength;
272   static const Double_t fgkCoolingTubeSeparation;
273   void SetCoolingTubeCombiTransMatrix();
274   TGeoCombiTrans *CoolingTubeTransMatrix[fgkCoolingTubeCombiTransNumber];
275   TGeoMedium* fgkSSDCoolingTubeWater;
276   TGeoMedium* fgkSSDCoolingTubePhynox;
277   /////////////////////////////////////////////////////////////////////////
278   // SSD Mounting Block Parameters (lengths are in mm and angles in degrees)
279   /////////////////////////////////////////////////////////////////////////
280   static const Double_t fgkSSDMountingBlockLength[3];  
281   static const Double_t fgkSSDMountingBlockHeight[4];
282   static const Double_t fgkSSDMountingBlockWidth;
283   static const Double_t fgkSSDMountingBlockHoleTrapezoidAngle;
284   static const Double_t fgkSSDMountingBlockHoleTrapezoidHeight;
285   static const Double_t fgkSSDMountingBlockHoleTrapezoidUpBasis;
286   static const Double_t fgkSSDMountingBlockHoleTubeLength[2];
287   static const Double_t fgkSSDMountingBlockHoleTubeWidth[2]; 
288   static const Double_t fgkSSDMountingBlockHoleRadius;
289   static const Double_t fgkSSDMountingBlockScrewHoleEdge;
290   static const Double_t fgkSSDMountingBlockScrewHoleHeigth;
291   static const Double_t fgkSSDMountingBlockScrewHoleRadius[2];
292   TGeoMedium* fgkSSDMountingBlockMedium;
293   /////////////////////////////////////////////////////////////////////////
294   // LadderSegment 
295   /////////////////////////////////////////////////////////////////////////
296   static const Int_t fgkLadderSegmentCombiTransNumber = 5;
297   void SetLadderSegmentCombiTransMatrix();
298   TGeoCombiTrans *LadderSegmentCombiTransMatrix[fgkLadderSegmentCombiTransNumber];
299   static const Int_t fgkEndLadderSegmentCombiTransNumber = 4;
300   void SetEndLadderSegmentCombiTransMatrix(Int_t);
301   TGeoCombiTrans *EndLadderSegmentCombiTransMatrix[fgkEndLadderSegmentCombiTransNumber];
302   /////////////////////////////////////////////////////////////////////////
303   // LadderCables 
304   /////////////////////////////////////////////////////////////////////////
305   void SetLadderCableCombiTransMatrix(Int_t);
306   TGeoCombiTrans *LadderCableCombiTransMatrix[4];
307   /////////////////////////////////////////////////////////////////////////
308   // Mother Volume 
309   /////////////////////////////////////////////////////////////////////////
310   TGeoVolume *fMotherVol;  
311   TGeoVolume* GetMotherVolume() const { return fMotherVol;};
312   /////////////////////////////////////////////////////////////////////////
313   // Color Display 
314   /////////////////////////////////////////////////////////////////////////
315   Int_t fColorCarbonFiber;   
316   Int_t fColorRyton;         
317   Int_t fColorPhynox;        
318   Int_t fColorSilicon;       
319   Int_t fColorAl;   
320   Int_t fColorKapton;         
321   Int_t fColorPolyhamide;    
322   Int_t fColorStiffener;
323   Int_t fColorEpoxy;
324 };
325 #endif
326