For Pythia with tune don't switch off MI in ConfigHeavyFlavor
[u/mrichter/AliRoot.git] / ITS / AliITSv11Hybrid.h
1 #ifndef ALIITSV11HYBRID_H
2 #define ALIITSV11HYBRID_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 of the Inner Tracking System
9 //
10 //  This geometry is a mix between the old geometry (originally coded
11 //  in AliITSvPPRasymmFMD) and the new TGeo geometry (v11).
12 // 
13 // Ludovic Gaudichet  (gaudichet@to.infn.it)
14 //
15 //========================================================================
16
17
18 // $Id$
19
20 // $Log$
21 // Revision 1.7  2007/12/17 14:48:24  masera
22 // Thermal shield between SPD and SDD (M. Sitta)
23 //
24 // Revision 1.6  2007/10/21 19:22:53  masera
25 // Coding conventions
26 //
27 // Revision 1.5  2007/08/24 14:32:57  hristov
28 // Introduction of SPD half-stave volumes, cleaning and new code (in relation to new SPD geometry) in AliITSv11Hybrid (Ludovic)
29 //
30 // Revision 1.4  2007/06/28 10:17:25  masera
31 // Introduction of the new SSD geometry in simulation (AliITSv11Hybrid) and suppression of overlaps between old and new parts
32 //
33 // Revision 1.3  2007/05/08 16:57:42  masera
34 // Updates concerning the geometry: versioning system, new V11hybrid version, bug fixes (B.Nilsend and L. Gaudichet
35 //
36
37  
38 #include "AliITS.h"
39 #include "AliITSInitGeometry.h"
40
41 class  AliITSv11GeometrySPD;
42 class  AliITSv11GeometrySDD;
43 class  AliITSv11GeometrySSD;
44 class  AliITSv11GeometrySupport;
45 class  TGeoVolume;
46 class TGeoVolumeAssembly;
47
48 class AliITSv11Hybrid : public AliITS {
49
50  public:
51     AliITSv11Hybrid();
52     AliITSv11Hybrid(const char *title);
53     AliITSv11Hybrid(const char *name, const char *title);
54     virtual       ~AliITSv11Hybrid() ;
55     virtual void   CreateGeometry();
56     virtual void   CreateMaterials();
57     virtual Int_t  IsVersion() const {// returns the ITS version number 
58                                       return 110;} 
59     virtual void   Init(); 
60     virtual void   SetDefaults();
61     virtual void   DrawModule() const;
62     virtual void   StepManager();
63     virtual void   AddAlignableVolumes() const;
64     virtual void   SetMinorVersion(Int_t v=2){ // Choose between existing minor versions
65         fMinorVersion = v;}
66     virtual void   SetThicknessDet1(Float_t v=200.){ 
67          // Set detector thickness in layer 1
68          fDet1 = v;}
69     virtual void   SetThicknessDet2(Float_t v=200.){ 
70          // Set detector thickness in layer 2
71          fDet2 = v;}
72     virtual void   SetThicknessChip1(Float_t v=150.){ 
73          // Set chip thickness in layer 1
74          fChip1 = v;}            
75     virtual void   SetThicknessChip2(Float_t v=150.){ 
76          // Set chip thickness in layer 2
77          fChip2 = v;}
78     virtual void   SetRails(Int_t v=0){ 
79          // Set flag for rails
80          fRails = v;}    
81     virtual void   SetCoolingFluid(Int_t v=1){
82          // Set flag for cooling fluid
83          fFluid = v;}
84     virtual void SetDensityServicesByThickness(){// uses services density
85         // calculation based on the thickness of the services.
86         fByThick = kTRUE;}
87     virtual void SetDensityServicesByMass(){// uses services density
88         // calculation based on the Mass of the services.
89         fByThick = kFALSE;}
90     virtual Int_t GetMajorVersion() const {// return Major Version Number
91         return fMajorVersion;}
92     virtual Int_t GetMinorVersion() const {// return Major Version Number
93         return fMinorVersion;}
94     virtual Float_t GetThicknessDet1() const { 
95          // Get detector thickness in layer 1
96          return fDet1;}
97     virtual Float_t GetThicknessDet2() const { 
98          // Get detector thickness in layer 2
99          return fDet2;}
100     virtual Float_t GetThicknessChip1() const { 
101          // Get chip thickness in layer 1
102          return fChip1;}                 
103     virtual Float_t GetThicknessChip2()const { 
104          // Get chip thickness in layer 2
105          return fChip2;}
106     virtual Int_t GetRails() const {
107          // Get flag for rails
108          return fRails;}
109     virtual Int_t GetCoolingFluid() const{ 
110          // Get flag for cooling fluid
111          return fFluid;}
112
113  protected:
114     void CreateOldGeometry();
115     void SetT2Lmatrix(Int_t uid, Double_t yShift,
116                       Bool_t yFlip, Bool_t yRot180=kFALSE) const; // Set T2L matrix in TGeoPNEntries
117     void CreateSPDThermalShield(TGeoVolume *moth);
118     TGeoVolumeAssembly *CreateSPDThermalShieldAssembly(const char *name,
119                    Double_t innerA, Double_t innerB, Double_t innerRadius,
120                    Double_t outerA, Double_t outerB, Double_t outerRadius,
121                    Double_t halflength, Double_t thickness,
122                    Double_t thicknessOmega, Double_t theta);
123     void SPDThermalShape(Double_t a, Double_t b, Double_t r, Double_t d,
124                          Double_t t, Double_t *x, Double_t *y);
125     void SPDOmegaShape(Double_t ina, Double_t inb, Double_t inr,
126                        Double_t oua, Double_t oub, Double_t our,
127                        Double_t dou, Double_t d  , Double_t t  ,
128                        Double_t *x, Double_t *y);
129     void FillSPDXtruShape(Double_t a, Double_t  b, Double_t  r,
130                           Double_t t, Double_t *x, Double_t *y);
131
132  private:
133     AliITSv11Hybrid(const AliITSv11Hybrid &source); // copy constructor
134     AliITSv11Hybrid& operator=(const AliITSv11Hybrid &source); // assignment operator
135     void InitAliITSgeom() const;
136
137     Bool_t fByThick;          // Flag to use services materials by thickness
138                               // ture, or mass false.
139     Int_t  fMajorVersion;     // Major version number == IsVersion
140     Int_t  fMinorVersion;     // Minor version number
141     Float_t  fDet1;           // thickness of detector in SPD layer 1
142     Float_t  fDet2;           // thickness of detector in SPD layer 2
143     Float_t  fChip1;          // thickness of chip in SPD layer 1   
144     Float_t  fChip2;          // thickness of chip in SPD layer 2   
145     Int_t    fRails;          // flag to switch rails on (=1) and off (=0)
146     Int_t    fFluid;          // flag to switch between water (=1) and freon (=0)
147     Int_t fIDMother;          //! ITS Mother Volume id.
148
149     AliITSInitGeometry fInitGeom;   //! Get access to decoding and AliITSgeom init functins
150     AliITSv11GeometrySPD *fSPDgeom; //! SPD Geometry
151     AliITSv11GeometrySDD *fSDDgeom; //! SDD Geometry
152     AliITSv11GeometrySSD *fSSDgeom; //! SSD Geometry
153     AliITSv11GeometrySupport *fSupgeom; //! Support Geometry
154
155     ClassDef(AliITSv11Hybrid,0)                          
156 };
157  
158 #endif