2f5394cec115c69d0ec7e97c8a74e362970f1167
[u/mrichter/AliRoot.git] / ITS / AliITSGeometrySSDCone.h
1 #ifndef ALIITSGEOMETRYSSDCONE_H
2 #define ALIITSGEOMETRYSSDCONE_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /*
7   $Id$
8  */
9
10 /*
11   ITS SSD Cone Geometry. Version 11
12 */
13 #include "AliITSBaseGeometry.h"
14 class TVector3;
15 class AliITS;
16
17 class  AliITSGeometrySSDCone : public AliITSBaseGeometry {
18  public:
19     AliITSGeometrySSDCone();
20     AliITSGeometrySSDCone(AliITS *its,TVector3 &tran,const char *moth,
21                           Int_t mat0);
22     virtual ~AliITSGeometrySSDCone(){};
23     void CreateG3Geometry(const char *moth,TVector3 &trans);
24     void PositionG3Geometry(AliITSBaseVolParams &moth,Int_t cn,
25                             TVector3 &t,Int_t irot);
26     void CreateG3Materials();
27     void BuildDisplayGeometry();
28     void Print(ostream *os); // Prints out the contenes of this class
29     void Read(istream *is); // Reads in the contenst of this class
30     // mother volume.
31  private: // functions Require at parts of Volume A to be already defined.
32     // Retruns the value of Rmax corresponding to point z alone the line
33     // defined by the two points p.Rmax(i1),p.ZAt(i1) and p.Rmax(i2),
34     // p.ZAt(i2).
35     Double_t RmaxFrom2Points(AliITSPConeData &p,Int_t i1,Int_t i2,Double_t z)
36         {return p.Rmax(i2)+(p.Rmax(i1)-p.Rmax(i2))*(z-p.ZAt(i2))/
37              (p.ZAt(i1)-p.ZAt(i2));}
38     // Retruns the value of Rmin corresponding to point z alone the line
39     // defined by the two points p.Rmin(i1),p.ZAt(i1) and p.Rmin(i2),
40     // p.ZAt(i2).
41     Double_t RminFrom2Points(AliITSPConeData &p,Int_t i1,Int_t i2,Double_t z)
42         {return p.Rmin(i2)+(p.Rmin(i1)-p.Rmin(i2))*(z-p.ZAt(i2))/
43
44              (p.ZAt(i1)-p.ZAt(i2));}
45     // Retruns the value of Z corresponding to point R alone the line
46     // defined by the two points p.Rmin(i1),p.ZAt(i1) and p.Rmin(i2),p.ZAt(i2)
47     Double_t Zfrom2MinPoints(AliITSPConeData &p,Int_t i1,Int_t i2,Double_t r)
48         {return p.ZAt(i2)+(p.ZAt(i1)-p.ZAt(i2))*(r-p.Rmin(i2))/
49              (p.Rmin(i1)-p.Rmin(i2));}
50     // Retruns the value of Z corresponding to point R alone the line
51     // defined by the two points p.Rmax(i1),p.ZAt(i1) and p.Rmax(i2),p.ZAt(i2)
52     Double_t Zfrom2MaxPoints(AliITSPConeData &p,Int_t i1,Int_t i2,Double_t r)
53         {return p.ZAt(i2)+(p.ZAt(i1)-p.ZAt(i2))*(r-p.Rmax(i2))/
54              (p.Rmax(i1)-p.Rmax(i2));}
55     // General SSD Outer Cone surface equation Rmax.
56     Double_t RmaxFromZpCone(AliITSPConeData &p,Double_t z,Double_t th=0.0)
57         {return -fTantc*(z-p.ZAt(4))+p.Rmax(4)+th/fCostc;}
58     // General SSD Inner Cone surface equation Rmin.
59     Double_t RminFromZpCone(AliITSPConeData &p,Double_t z,Double_t th=0.0)
60         {return -fTantc*(z-p.ZAt(3))+p.Rmin(3)+th/fCostc;}
61     // Outer SSD cone surface
62     Double_t RmaxFromZSSDcone(Double_t z,Double_t th=0.0) 
63         {return RmaxFromZpCone(fA,z,th);}
64     // Inner SSD cone surface
65     Double_t RminFromZSSDcone(Double_t z,Double_t th=0.0) 
66         {return RminFromZpCone(fA,z,th);}
67     // General SSD Outer cone Surface equation for z.
68     Double_t ZFromRmaxpCone(AliITSPConeData &p,Double_t r,Double_t th=0.0)
69         {return p.ZAt(4)+(p.Rmax(4)+th/fCostc-r)/fTantc;}
70     // General SSD Inner cone Surface equation for z.
71     Double_t ZFromRminpCone(AliITSPConeData &p,Double_t r,Double_t th=0.0)
72         {return p.ZAt(3)+(p.Rmax(3)+th/fCostc-r)/fTantc;}
73     Double_t ZFromRmaxSSDcone(Double_t r,Double_t th=0.0)
74         {return ZFromRmaxpCone(fA,r,th);}
75     Double_t ZFromRminSSDcone(Double_t r,Double_t th=0.0)
76         {return ZFromRminpCone(fA,r,th);}
77     // Given a initial point z0,r0, the initial angle theta0, and the radius
78     // of curvature, returns the point z1, r1 at the angle theta1. Theta
79     // measured from the r axis in the clock wise direction [degrees].
80     void RadiusOfCurvature(Double_t rc,Double_t theta0,Double_t z0,
81                            Double_t r0,Double_t theta1,Double_t &z1,
82                            Double_t &r1)
83         {z1=rc*(Sind(theta1)-Sind(theta0))+z0;
84          r1=rc*(Cosd(theta1)-Cosd(theta0))+r0; return;}
85  private:
86     Double_t fThickness; //mm, Thickness of Rohacell+carbon fiber
87     Double_t fCthick; //mm, Carbon finber thickness
88     Double_t fRcurv; // mm, Radius of curvature.
89     Double_t fTc; // angle of SSD cone [degrees].
90     Double_t fSintc,fCostc,fTantc;
91     Double_t fZ0,fZouterMilled,fZcylinder,fZposts;
92     Double_t fRoutMax,fRoutHole,fRoutMin;
93     Double_t fRholeMax,fRholeMin;
94     Double_t fRpostMin,fdRpost,fZpostMax,fPhi0Post;
95     Double_t fRinMax,fRinCylinder,fRinHole,fRinMin,fdZin;
96     // Screws mounting SSD-SDD thermal/machanical cylinder
97     Double_t fPhi0Screws,fRcylinderScrews,fDscrewHead;
98     Double_t fDscrewShaft,fThScrewHeadHole;
99     // The SDD mounting bracket SSD part of it.
100     Int_t fNssdSupports;
101     Double_t fPhi0SDDsupports;
102     Double_t fRsddSupportPlate,fThSDDsupportPlate,fWsddSupportPlate;
103     Int_t fNspoaks,fNinScrews,fNposts,fNmounts;
104     Int_t fSSDcf; // SSD support cone Carbon Fiber materal number.
105     Int_t fSSDfs; // SSD support cone inserto stesalite 4411w.
106     Int_t fSSDfo; // SSD support cone foam, Rohacell 50A.
107     Int_t fSSDsw; // SSD support cone screw material,Stainless steal
108     Int_t fNcD; // number of screw ends (copy number) Volume D
109     Int_t fNcE; // number of pin end (copy number) Volume E
110     AliITSPConeData fA;//Poly-cone Volume A. Top part of SSD cone Carbon Fiber
111     AliITSPConeData fB; // Poly-cone Volume B. Stesalite inside volume A.
112     AliITSPConeData fC; // Poly-cone Volume C. Foam inside volume A.
113     AliITSTubeData  fD; // Bolt holes willed with bolt
114     AliITSTubeData  fE; // Pin holes willed with pin.
115     AliITSPConeData fF;//Poly-cone Volume F. Foam in spoak reagion, inside A.
116     // SSD support cone Spoaks.
117     AliITSPConeData fG; // Poly-cone Volume G.
118     AliITSPConeData fH; // Poly-cone Volume H.
119     AliITSPConeData fI; // Poly-cone Volume I.
120     AliITSPConeData fJ; // Poly-cone Volume J.
121     AliITSPConeData fK; // Poly-cone Volume K.
122     AliITSPConeData fL; // Poly-cone Volume L.
123     AliITSPConeData fM; // Poly-cone Volume M.
124     AliITSPConeData fN; // Poly-cone Volume N.
125     AliITSPConeData fO; // Poly-cone Volume O.
126     AliITSPConeData fP; // Poly-cone Volume P.
127     AliITSPConeData fQ; // Poly-cone Volume Q.
128     AliITSTubeData  fR; // Bolt holes willed with bolt
129     AliITSTubeData  fS; // Pin holes willed with pin.
130     AliITSPConeData fT; // Poly-cone Volume T.
131     AliITSPConeData fU; // Poly-cone Volume U.
132
133     ClassDef(AliITSGeometrySSDCone,1) // ITS SSD support cone geometry
134                                       // version 11
135 };
136 // Input and Output functions for standard C++ input/output/
137 ostream &operator<<(ostream &os,AliITSGeometrySSDCone &source);
138 istream &operator>>(istream &is,AliITSGeometrySSDCone &source);
139
140 #endif
141