]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/UPGRADE/AliITSUv1.h
6163353a293529d92f0de2cabb2d2e16612c78e4
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUv1.h
1 #ifndef ALIITSUV1_H
2 #define ALIITSUV1_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //========================================================================
7 //
8 //        Geometry for the Upgrade of the Inner Tracking System
9 //
10 // Mario Sitta (sitta@to.infn.it)
11 //
12 //========================================================================
13
14
15 // $Id: AliITSUv1.h 
16
17 #include "AliITSU.h"
18
19 class  AliITSUv1Layer;
20 //class  AliITSv11GeomBeamPipe;
21 class  TGeoVolume;
22 class  TGeoVolumeAssembly;
23
24 class AliITSUv1 : public AliITSU {
25
26  public:
27
28
29   typedef enum {
30     kIBModelDummy=0,
31     kIBModel0=1,
32     kIBModel1=2, 
33     kIBModel21=3,
34     kIBModel22=4,
35     kIBModel3=5,
36     kIBModel4=10,
37     kOBModelDummy=6,
38     kOBModel0=7,
39     kOBModel1=8, 
40     kOBModel2=9 
41   } AliITSUModel_t;
42   
43
44   AliITSUv1();
45   AliITSUv1(const char *title, Int_t nlay);
46   virtual       ~AliITSUv1() ;
47   virtual void   SetNWrapVolumes(Int_t n);
48   virtual void   AddAlignableVolumes() const;
49   void           AddAlignableVolumesLayer(int lr, TString& parent,Int_t &lastUID) const;
50   void           AddAlignableVolumesStave(int lr, int st, TString& parent,Int_t &lastUID) const;
51   void           AddAlignableVolumesHalfStave(int lr, int st, int sst, TString& parent,Int_t &lastUID) const;
52   void           AddAlignableVolumesModule(int lr, int st, int sst, int md, TString& parent,Int_t &lastUID) const;
53   void           AddAlignableVolumesChip(int lr, int st, int sst, int md, int ch, TString& parent,Int_t &lastUID) const;
54
55   virtual void   CreateGeometry();
56           void   CreateSuppCyl(const Bool_t innerBarrel,TGeoVolume *dest,const TGeoManager *mgr=gGeoManager);
57   virtual void   CreateMaterials();
58   virtual void   DefineLayer(Int_t nlay,Double_t phi0,Double_t r,Double_t zlen,Int_t nstav,
59                              Int_t nunit, Double_t lthick=0.,Double_t dthick=0.,UInt_t detType=0, Int_t buildFlag=0);
60   virtual void   DefineLayerTurbo(Int_t nlay,Double_t phi0,Double_t r,Double_t zlen,Int_t nstav,
61                                   Int_t nunit,Double_t width,Double_t tilt,
62                                   Double_t lthick = 0.,Double_t dthick = 0.,UInt_t detType=0, Int_t buildFlag=0);
63   virtual void   GetLayerParameters(Int_t nlay, Double_t &phi0,Double_t &r, Double_t &zlen,
64                                     Int_t &nstav, Int_t &nmod,
65                                     Double_t &width, Double_t &tilt,
66                                     Double_t &lthick, Double_t &mthick,
67                                     UInt_t &dettype) const;
68   virtual void   DefineWrapVolume(Int_t id, Double_t rmin,Double_t rmax, Double_t zspan);
69   virtual void   Init(); 
70   virtual Bool_t IsLayerTurbo(Int_t nlay);
71   virtual Int_t  IsVersion()                 const { return 20;}  // vUpgrade ? do we need this
72   virtual void   SetDefaults();
73   virtual void   StepManager();
74   virtual void   SetLayerChipTypeID(Int_t lr, UInt_t id);
75   virtual Int_t  GetLayerChipTypeID(Int_t lr);
76   virtual void   SetStaveModelIB(AliITSUModel_t model) {fStaveModelIB=model;}
77   virtual void   SetStaveModelOB(AliITSUModel_t model) {fStaveModelOB=model;}
78   virtual AliITSUModel_t GetStaveModelIB() const {return fStaveModelIB;}
79   virtual AliITSUModel_t GetStaveModelOB() const {return fStaveModelOB;}
80   //
81  private:
82   AliITSUv1(const AliITSUv1 &source); // copy constructor
83   AliITSUv1& operator=(const AliITSUv1 &source); // assignment operator
84
85   TGeoVolume* CreateWrapperVolume(Int_t nLay);
86
87   //
88   Int_t     fNWrapVol;       // number of wrapper volumes
89   Double_t* fWrapRMin;       // min radius of wrapper volume
90   Double_t* fWrapRMax;       // max radius of wrapper volume
91   Double_t* fWrapZSpan;      // Z span of wrapper volume
92   Int_t*    fLay2WrapV;      // id of wrapper layer to which layer belongs (-1 if not wrapped)
93   Bool_t   *fLayTurbo;       // True for "turbo" layers
94   Double_t *fLayPhi0;        // Vector of layer's 1st stave phi in lab
95   Double_t *fLayRadii;       // Vector of layer radii
96   Double_t *fLayZLength;     // Vector of layer length along Z
97   Int_t    *fStavPerLay;     // Vector of number of staves per layer
98   Int_t    *fUnitPerStave;   // Vector of number of "units" per stave
99   Double_t *fChipThick;      // Vector of chip thicknesses
100   Double_t *fStaveWidth;     // Vector of stave width (only used for turbo)
101   Double_t *fStaveTilt;      // Vector of stave tilt (only used for turbo)
102   Double_t *fSensThick;      // Vector of sensor thicknesses
103   UInt_t   *fChipTypeID;     // Vector of detector type id
104   Int_t    *fBuildLevel;     // Vector of Material Budget Studies
105   //  
106   AliITSUv1Layer **fUpGeom; //! Geometry
107   AliITSUModel_t fStaveModelIB; // The stave model for the Inner Barrel
108   AliITSUModel_t fStaveModelOB; // The stave model for the Outer Barrel
109   
110   // Parameters for the Upgrade geometry
111   
112   ClassDef(AliITSUv1,0)
113 };
114  
115 #endif