]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSv11GeometrySDD.h
Default changed: geometry file (.det) is not read by default
[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 //*************************************************************************
8 // class AliITSv11GeometrySDD
9 // Ludovic Gaudichet                                   gaudichet@to.infn.it
10 //*************************************************************************
11
12 class TGeoVolume;
13 class TGeoTranslation;
14 class TGeoCombiTrans;
15 class TGeoArb8;
16 class TGeoNode;
17 class TGeoMedium;
18 class TGeoMatrix;
19 class AliITSgeom;
20 class AliITSv11GeomCableFlat;
21
22 #include "AliITSv11Geometry.h"
23
24
25 class AliITSv11GeometrySDD : public AliITSv11Geometry {
26
27  public:
28   AliITSv11GeometrySDD();
29   AliITSv11GeometrySDD(Int_t debug);
30   AliITSv11GeometrySDD(const AliITSv11GeometrySDD &source);
31   AliITSv11GeometrySDD& operator=(const AliITSv11GeometrySDD &source);
32   virtual ~AliITSv11GeometrySDD();
33
34   // Main functions
35   virtual void  Layer3(TGeoVolume *moth);
36   virtual void  Layer4(TGeoVolume *moth);
37   virtual Int_t ExportSensorGeometry(AliITSgeom *geom, Int_t iLaySDD,
38                                       Int_t startMod);
39   virtual Int_t GetCurrentLayLaddDet(Int_t &lay, Int_t &ladd, Int_t&det) const;
40
41   // Functions for coding, testing, debugging 
42   void          AddHybrids(bool b)     {fAddHybrids    = b;};
43   void          AddSensors(bool b)     {fAddSensors    = b;};
44   void          AddHVcables(bool b)    {fAddHVcables   = b;};
45   void          AddCables(bool b)      {fAddCables     = b;};
46   void          AddCoolingSyst(bool b) {fAddCoolingSyst= b;};
47
48   void          CheckOverlaps(Double_t precision = 0.01);
49   void          AddOnlyLay3Ladder(Int_t min,Int_t max){
50                   fAddOnlyLadder3min = min; fAddOnlyLadder3max = max; };
51   void          AddOnlyLay4Ladder(Int_t min,Int_t max) {
52                   fAddOnlyLadder4min = min; fAddOnlyLadder4max = max;};
53   void          ShowOnePiece(TGeoVolume *Moth);
54
55   virtual void  SetParameters();
56   TGeoVolume*   GetMotherVolume() const { return fMotherVol;};
57   const char*   GetSenstiveVolumeMame() const {return fgSDDsensitiveVolName;};
58   Int_t         GetLay3NLadders() const;
59   Int_t         GetLay4NLadders() const;
60
61   private:
62
63   // Create ladder virtual volumes and its detectors
64   virtual TGeoVolume*  CreateLadder(Int_t iLay);
65   virtual TGeoVolume*  CreateDetectors(Int_t iLay);
66   // Create virtual volumes inside a ladder volume
67   virtual TGeoVolume*  CreateLadderSegment(Int_t iLay, Int_t iSeg);
68   virtual TGeoVolume*  CreateEndLadder(Int_t iLay);
69   // Create some basic objects  
70   virtual TGeoVolume*  CreateHybrid(Int_t iLRSide);
71   virtual TGeoVolume*  CreatePinSupport();
72   virtual TGeoVolume*  CreateCoolPipeSupportL();
73   virtual TGeoVolume*  CreateCoolPipeSupportR();
74   virtual TGeoVolume*  CreateSDDsensor();
75   virtual TGeoVolume*  CreateBaseThermalBridge();
76   void                 CreateBasicObjects();
77
78
79   // Check that the nedium exists
80   virtual TGeoMedium* GetMedium(const char* mediumName);
81
82   // Create a TGeoCombiTrans: general rotation in phi and (dy,dz) translation 
83   TGeoCombiTrans* CreateCombiTrans( const char *name,
84                                     Double_t dy, Double_t dz, Double_t dphi);
85
86   // add (dx,dy,dz) translation to a initial TGeoCombiTrans
87   void AddTranslationToCombiTrans( TGeoCombiTrans* ct,
88                           Double_t dx=0, Double_t dy=0, Double_t dz=0) const;
89
90   // Create one side of the CF corner of the CF structure
91   TGeoArb8* CreateLadderSide( Double_t dz, Double_t angle, Double_t xSign,
92                               Double_t L, Double_t H, Double_t l);
93
94   //----------------------------
95   TGeoVolume* fPinSupport;        //!  pins glued to sensors
96   TGeoVolume* fCoolPipeSupportL;  //!  half of cooling pipe support
97   TGeoVolume* fCoolPipeSupportR;  //!  half of cooling pipe support
98   TGeoVolume* fSDDsensor;         //!  sensor and HV cables on it
99   TGeoVolume* fBaseThermalBridge; //!  Base of hybrid thermal bridge
100   TGeoVolume* fHybrid;            //!  hybrid volume
101
102   static const Int_t fgkNladdSegCommonVol = 19;       //  Number of vol.
103   TGeoVolume* fLaddSegCommonVol[fgkNladdSegCommonVol];//! volumes in ladder
104   TGeoMatrix* fLaddSegCommonTr[fgkNladdSegCommonVol]; //! their transf.
105
106   AliITSv11GeomCableFlat *fDigitCableLay3A; // layer 3 cables, side A
107   AliITSv11GeomCableFlat *fDigitCableLay3B; // layer 3 cables, side A
108   AliITSv11GeomCableFlat *fDigitCableLay4A; // layer 4 cables, side B
109   AliITSv11GeomCableFlat *fDigitCableLay4B; // layer 4 cables, side B
110
111   TGeoVolume *fMotherVol;    //! mother volume given in LayerX() funct.
112   bool  fAddHybrids;         //  Insert hybrids ?   (default TRUE)
113   bool  fAddSensors;         //  Insert sensors ?   (default TRUE)
114   bool  fAddHVcables;        //  Insert HV cables ? (default TRUE)
115   bool  fAddCables;          //  Insert cables ?    (default TRUE)
116   bool  fAddCoolingSyst;     //  Insert cooling system ? (default TRUE)
117   bool  fCoolingOn;          //  Insert cooling fluid ?  (default TRUE)
118   Int_t fAddOnlyLadder3min;  //  first ladder index
119   Int_t fAddOnlyLadder3max;  //  last  ladder index
120   Int_t fAddOnlyLadder4min;  //  first ladder index
121   Int_t fAddOnlyLadder4max;  //  last  ladder index
122   Int_t fColorCarbonFiber;   //  display colors
123   Int_t fColorRyton;         //  ===
124   Int_t fColorPhynox;        //  ===
125   Int_t fColorSilicon;       //  ===
126   Int_t fColorAl;            //  ===
127   Int_t fColorPolyhamide;    //  ===
128   Int_t fColorGlass;         //  ===
129   Int_t fColorSMD;           //  ===
130   Int_t fColorSMDweld;       //  ===
131
132   //--------------------------------------  parameters for the SDD geometry
133
134   static const char* fgSDDsensitiveVolName;       // name of sensitive vol
135
136   static const Int_t    fgkLay3Nladd;             // 14
137   static const Int_t    fgkLay3Ndet;              //  6
138   static const Double_t fgkLay3Rmin;              // min. radius of tube
139   static const Double_t fgkLay3Rmax;              // max. radius of tube
140   static const Double_t fgkLay3Length;            // length of layer 3 tube
141   static const Double_t fgkLay3LadderLength;      // tot. length of ladder
142   static const Double_t fgkLay3DetShortRadius;    // radius from beam axis
143   static const Double_t fgkLay3DetLongRadius;     // radius from beam axis
144   static const Double_t fgkLay3LaddTopCornerEnd;  // Ends of ladder 3
145   static const Double_t fgkLay3ZPlusEndLength;    // ===
146
147   static const Int_t    fgkLay4Nladd;             // 22
148   static const Int_t    fgkLay4Ndet;              //  8
149   static const Double_t fgkLay4Rmin;              // min. radius of tube
150   static const Double_t fgkLay4Rmax;              // max. radius of tube
151   static const Double_t fgkLay4Length;            // length of layer 4 tube
152   static const Double_t fgkLay4LadderLength;      // tot. length of ladder
153   static const Double_t fgkLay4DetShortRadius;    // radius from beam axis
154   static const Double_t fgkLay4DetLongRadius;     // radius from beam axis
155   static const Double_t fgkLay4LaddTopCornerEnd;  // Ends of ladder 3
156   static const Double_t fgkLay4ZPlusEndLength;    // ===
157
158   static const Double_t fgkSegmentLength;         // length of 1 ladder seg.
159   static const Double_t fgkLadderWidth;           // carbon fiber structure 
160   static const Double_t fgkLadderHeight;          // including bottom beam
161   static const Double_t fgkLadderSegBoxDW;        // To include hybrids in box
162   static const Double_t fgkLadderSegBoxDH;        // To include hybrids in box
163
164   static const Double_t fgkLadderBeamRadius;      // carbon fiber beam radius
165   static const Double_t fgkLadderLa;              // parameters defining
166   static const Double_t fgkLadderHa;              //   the V side shape
167   static const Double_t fgkLadderLb;              //   of the carbon
168   static const Double_t fgkLadderHb;              //   fiber ladder
169   static const Double_t fgkLadderl;               //   ============
170
171   static const Double_t fgkBottomBeamAngle;       // bottom beam angle
172   static const Double_t fgkBeamSidePhi;           // side beam angle
173
174   static const Double_t fgkWaferThickness;        // sensor thickness (Y)
175   static const Double_t fgkWaferWidth;            // width (X)
176   static const Double_t fgkWaferLength;           // length (Z)
177   static const Double_t fgkWaferThickSens;        // sensitive volume thich
178   static const Double_t fgkWaferWidthSens;        // sens. volume width
179   static const Double_t fgkWaferLengthSens;       // sens. volume length
180
181   static const Double_t fgkSensorGlassLX;         // dimensions of glass
182   static const Double_t fgkSensorGlassLZ;         //  (on which pins are
183   static const Double_t fgkSensorGlassLY;         //   glued)
184   static const Double_t fgkGlassDXOnSensor;       // Position of glass
185   static const Double_t fgkGlassDZOnSensor;       //   on sensor
186
187   static const Double_t fgkLadWaferSep;           // ladder-sensor dist.
188   static const Double_t fgkPinR;                  // pins radius
189   static const Double_t fgkPinSuppWidth;          // ===
190   static const Double_t fgkPinSuppHeight;         // ===
191   static const Double_t fgkPinSuppRmax;           // Parameters for pin
192   static const Double_t fgkPinSuppLength;         //   supports on
193   static const Double_t fgkPinSuppThickness;      //   carbon fiber
194   static const Double_t fgkPinSuppConeAngle;      //   ladder
195   static const Double_t fgkPinDXminOnSensor;      // ===
196   static const Double_t fgkPinPinDDXOnSensor;     // ===
197   static const Double_t fgkPinDYOnSensor;         // ===
198
199   static const Double_t fgkCoolPipeInnerDiam;     // Water cooling
200   static const Double_t fgkCoolPipeOuterDiam;     //   pipe
201   static const Double_t fgkLay3CoolPipeSuppH;     // Heights of water
202   static const Double_t fgkLay4CoolPipeSuppH;     //   pipes on ladders
203   static const Double_t fgkCoolPipeSuppHeight;    // ===
204   static const Double_t fgkCoolPipeSuppMaxLength; // ===
205   static const Double_t fgkCoolPipeSuppWidthExt;  // Parameters for
206   static const Double_t fgkCoolPipeSuppWidthIn;   //  cooling pipes
207   static const Double_t fgkCoolPipeSuppHoleDiam;  //  on carbon fiber
208   static const Double_t fgkCoolPipeSuppFulWidth;  //  ladder 
209   static const Double_t fgkCoolPipeSuppTongW;     // ===
210   static const Double_t fgkCoolPipeSuppAngle;     // ===
211   static const Double_t fgkCoolPipeSuppSlitL;     // ===
212   static const Double_t fgkCoolPipeSuppAxeDist;   // ===
213
214   static const Double_t fgkBTBthick;              // BTB for :
215   static const Double_t fgkBTBlength;             // Base of Thermal Bridge
216   static const Double_t fgkBTBwidth;              // =====================
217   static const Double_t fgkBTBaxisAtoBottom;      // axis A is the same as
218   static const Double_t fgkBTBaxisAtoBase;        // the cooling pipe axis
219   static const Double_t fgkRadiusAminBTB;         // ===
220   static const Double_t fgkRadiusBminBTB;         // ===
221   static const Double_t fgkBTBHoleLength;         // ===
222   static const Double_t fgkBTBHolewidth;          // ===
223   static const Double_t fgkBTBHoleRefX;           // ===
224   static const Double_t fgkBTBHoleRefY;           // ===
225
226   static const Double_t fgkHybridLength;          // Hybrid parameters :
227   static const Double_t fgkHybridWidth;           // ===
228   static const Double_t fgkHybridAngle;           // Hybrid on ladder in phi
229
230   static const Double_t fgkHybRndHoleRad;         // ===
231   static const Double_t fgkHybRndHoleZ;           // ===
232   static const Double_t fgkHybRndHoleX;           // ===
233
234   static const Double_t fgkHybFLlowHoleDZ;        // FLlow : low flex
235   static const Double_t fgkHybFLlowHolePasDX;     // ===
236   static const Double_t fgkHybFLlowHoleAmbDX;     // ===
237   // (center of ships to the border)
238   static const Double_t fgkHybFLlowChipZ4;        // Z1 to Z4 : position
239   static const Double_t fgkHybFLlowChipZ3;        //   in z of the chip
240   static const Double_t fgkHybFLlowChipZ2;        //   centers
241   static const Double_t fgkHybFLlowChipZ1;        // ===
242   static const Double_t fgkHybFLlowPasX;          // Pascal center X pos
243   static const Double_t fgkHybFLlowAmbX;          // Ambra center X pos
244   static const Double_t fgkHybChipsDZ;            // Z dimension of chips
245   static const Double_t fgkHybPascalDX;           // X dimension of Pascal
246   static const Double_t fgkHybAmbraDX;            // X dimension of Ambra
247   static const Double_t fgkHybFLUpperWidth;       // bFLUpper : upper flex
248   static const Double_t fgkHybFLUpperLength;      // ===
249   static const Double_t fgkHybFLUpperAlDZ;        // ===
250   static const Double_t fgkHybFLUpperAldx;        // ===
251
252   static const Double_t fgkHybridThBridgeThick;   // Thicknesses :
253   static const Double_t fgkHybAlThick;            // ===
254   static const Double_t fgkHybUpThick;            // ===
255   static const Double_t fgkHybGlueScrnThick;      // ===
256   static const Double_t fgkHybGlueLowThick;       // ===
257   static const Double_t fgkHybGlueUpThick;        // ===
258   static const Double_t fgkHybAlCCThick;          // ===
259   static const Double_t fgkHybUpCCThick;          // ===
260   static const Double_t fgkHybChipThick;          // ===
261   static const Double_t fgkHybGlueAgThick;        // ===
262   static const Double_t fgkHybUnderNiThick;       // ===
263   static const Int_t    fgkNHybSMD;               // Number of SMD
264   static const Double_t fgkHybSMDposX[25];        // X pos. of SMD
265   static const Double_t fgkHybSMDposZ[25];        // Z pos. of SMD
266   static const Double_t fgkHybSMDmiddleW;         // SMD width
267   static const Double_t fgkHybSMDmiddleL;         // SMD length
268   static const Double_t fgkHybSMDendW;            // end SMD witdh
269   static const Double_t fgkHybSMDendL;            // end SMD length
270   static const Double_t fgkHybSMDheight;          // SMD height
271
272   static const Double_t fgkDigitCablWidth;        // Digital
273   static const Double_t fgkDigitCablAlThick;      // cables
274   static const Double_t fgkDigitCablPolyThick;    // ===
275
276   //HV cables
277   static const Double_t fgkWaHVcableAlThick;      // Wrap-around
278   static const Double_t fgkWaHVcablePolyThick;    //   High Voltage
279   static const Double_t fgkWaHVcableLength;       //   cables
280   static const Double_t fgkWaHVcableWitdh;        //   (on sensor)
281   static const Double_t fgkWaHVcableDW;           // ===
282
283   static const Double_t fgkTransitHVAlThick;      // Transition
284   static const Double_t fgkTransitHVPolyThick;    //   High Voltage
285   static const Double_t fgkTransitHVHeadLX;       //   cables
286   static const Double_t fgkTransitHVHeadLZ;       //   (on sensor)
287   static const Double_t fgkTransitHVBondingLZ;    // ===
288   static const Double_t fgkTransitHVtailLength;   // ===
289   static const Double_t fgkTransitHVtailWidth;    // ===
290   static const Double_t fgkTransitHVtailXpos;     // ===
291   static const Double_t fgkTransitHVsideLZ;       // ===
292   static const Double_t fgkTransitHVsideLeftZ;    // ===
293   static const Double_t fgkTransitHVsideRightZ;   // ===
294
295   static const Double_t fgkLongHVcablePolyThick;  // Long High
296   static const Double_t fgkLongHVcableAlThick;    //   Voltage
297   static const Double_t fgkLongHVcableSeparation; //   cables
298
299   static const Double_t fgkmu;  // 1 micron, or more for debugging
300
301   // calculated parameters
302   Double_t fLay3LadderUnderSegDH;  // To include HVcables in box
303   Double_t fLay4LadderUnderSegDH;  // To include HVcables in box
304   Double_t fLay3LaddShortRadius;   // ladder 3 to beam axis radius
305   Double_t fLay3LaddLongRadius;    // ladder 3 to beam axis radius
306   Double_t fLay4LaddShortRadius;   // ladder 4 to beam axis radius
307   Double_t fLay4LaddLongRadius;    // ladder 4 to beam axis radius
308
309   // parameters that be modified
310   Double_t fLay3sensorZPos[6];     // Z pos of sensors in layer 3
311   Double_t fLay4sensorZPos[8];     // Z pos of sensors in layer 4
312
313   ClassDef(AliITSv11GeometrySDD,1) // ITS v11 SDD geometry
314 };
315
316
317 #endif