]>
Commit | Line | Data |
---|---|---|
172b0d90 | 1 | #ifndef ALIITSV11GEOMETRY_H |
2 | #define ALIITSV11GEOMETRY_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 | */ | |
166d14ba | 9 | |
10 | /* | |
11 | Base class for defining large parts of the ITS geometry, v11. | |
12 | */ | |
172b0d90 | 13 | #include <TObject.h> |
543b7370 | 14 | #include <AliLog.h> |
172b0d90 | 15 | class TGeoArb8; |
16 | class TGeoPcon; | |
17 | class TGeoTube; | |
18 | class TGeoTubeSeg; | |
19 | class TGeoConeSeg; | |
20 | class TGeoBBox; | |
21 | ||
22 | class AliITSv11Geometry : public TObject { | |
23 | public: | |
543b7370 | 24 | AliITSv11Geometry():fDebug(AliDebugLevel()) {}; |
25 | AliITSv11Geometry(Int_t debug):fDebug(debug) {}; | |
172b0d90 | 26 | virtual ~AliITSv11Geometry(){}; |
27 | // | |
166d14ba | 28 | // Sets the debug flag for debugging output |
db486a6e | 29 | void SetDebug(Int_t level=5){fDebug=level;} |
166d14ba | 30 | // Clears the debug flag so no debugging output will be generated |
db486a6e | 31 | void SetNoDebug(){fDebug=0;} |
166d14ba | 32 | // Returns the debug flag value |
db486a6e | 33 | Bool_t GetDebug(Int_t level=1)const {return fDebug>=level;} |
166d14ba | 34 | // |
35 | // Static functions | |
36 | // | |
37 | // Define Trig functions for use with degrees (standerd TGeo angles). | |
38 | // Sine function | |
cee918ed | 39 | Double_t SinD(Double_t deg)const{return TMath::Sin(deg*TMath::DegToRad());} |
166d14ba | 40 | // Cosine function |
cee918ed | 41 | Double_t CosD(Double_t deg)const{return TMath::Cos(deg*TMath::DegToRad());} |
166d14ba | 42 | // Tangent function |
cee918ed | 43 | Double_t TanD(Double_t deg)const{return TMath::Tan(deg*TMath::DegToRad());} |
166d14ba | 44 | // Given the line, defined by the two points (x0,y0) and (x1,y1) and the |
45 | // point x, return the value of y. | |
cee918ed | 46 | Double_t Yfrom2Points(Double_t x0,Double_t y0, |
47 | Double_t x1,Double_t y1,Double_t x)const; | |
166d14ba | 48 | // Given the line, defined by the two points (x0,y0) and (x1,y1) and the |
49 | // point y, return the value of x. | |
cee918ed | 50 | Double_t Xfrom2Points(Double_t x0,Double_t y0, |
51 | Double_t x1,Double_t y1,Double_t y)const; | |
166d14ba | 52 | // Given 2 points from a TGeoPcon(z and Rmax) finds Rmax at given z |
cee918ed | 53 | Double_t RmaxFrom2Points(const TGeoPcon *p,Int_t i1,Int_t i2, |
54 | Double_t z)const; | |
166d14ba | 55 | // Given 2 points from a TGeoPcon(z and Rmin) finds Rmin at given z |
cee918ed | 56 | Double_t RminFrom2Points(const TGeoPcon *p,Int_t i1,Int_t i2, |
57 | Double_t z)const; | |
166d14ba | 58 | // Give two points in the array ar and az, returns the value r |
59 | // corresponding z along the line defined by those two points | |
cee918ed | 60 | Double_t RFrom2Points(const Double_t *ar,const Double_t *az, |
61 | Int_t i1,Int_t i2,Double_t z)const; | |
166d14ba | 62 | // Given 2 points from a TGeoPcon(z and Rmax) finds z at given Rmin |
cee918ed | 63 | Double_t Zfrom2MinPoints(const TGeoPcon *p,Int_t i1,Int_t i2, |
64 | Double_t r)const; | |
166d14ba | 65 | // Given 2 points from a TGeoPcon(z and Rmax) finds z at given Rmax |
cee918ed | 66 | Double_t Zfrom2MaxPoints(const TGeoPcon *p,Int_t i1,Int_t i2, |
67 | Double_t r)const; | |
166d14ba | 68 | // Give two points in the array ar and az, returns the value z |
69 | // corresponding r along the line defined by those two points | |
cee918ed | 70 | Double_t Zfrom2Points(const Double_t *az,const Double_t *ar, |
71 | Int_t i1,Int_t i2,Double_t r)const; | |
166d14ba | 72 | // Given 1 point from a TGeoPcon(z and Rmax) the angle tc returns r for |
73 | // a given z, an offset (distnace perpendicular to line at angle tc) of | |
74 | // th may be applied. | |
cee918ed | 75 | Double_t RmaxFromZpCone(const TGeoPcon *p,int ip,Double_t tc, |
76 | Double_t z,Double_t th=0.0)const; | |
77 | Double_t RFromZpCone(const Double_t *ar,const Double_t *az,int ip, | |
78 | Double_t tc,Double_t z,Double_t th=0.0)const; | |
166d14ba | 79 | // Given 1 point from a TGeoPcon(z and Rmin) the angle tc returns r for |
80 | // a given z, an offset (distnace perpendicular to line at angle tc) of | |
81 | // th may be applied. | |
cee918ed | 82 | Double_t RminFromZpCone(const TGeoPcon *p,Int_t ip,Double_t tc, |
83 | Double_t z,Double_t th=0.0)const; | |
166d14ba | 84 | // Given 1 point from a TGeoPcon(z and Rmax) the angle tc returns z for |
85 | // a given Rmax, an offset (distnace perpendicular to line at angle tc) of | |
86 | // th may be applied. | |
cee918ed | 87 | Double_t ZFromRmaxpCone(const TGeoPcon *p,int ip,Double_t tc, |
88 | Double_t r,Double_t th=0.0)const; | |
166d14ba | 89 | // General Outer cone Surface equation for z. |
cee918ed | 90 | Double_t ZFromRmaxpCone(const Double_t *ar,const Double_t *az, |
166d14ba | 91 | Int_t ip,Double_t tc,Double_t r, |
cee918ed | 92 | Double_t th=0.0)const; |
166d14ba | 93 | // Given 1 point from a TGeoPcon(z and Rmin) the angle tc returns z for |
94 | // a given Rmin, an offset (distnace perpendicular to line at angle tc) of | |
95 | // th may be applied. | |
cee918ed | 96 | Double_t ZFromRminpCone(const TGeoPcon *p,int ip,Double_t tc, |
97 | Double_t r,Double_t th=0.0)const; | |
166d14ba | 98 | // Given two lines defined by the points i1, i2,i3 in the TGeoPcon |
99 | // class p that intersect at point p->GetZ(i2) return the point z,r | |
100 | // that is Cthick away in the TGeoPcon class q. If points i1=i2 | |
101 | // and max == kTRUE, then p->GetRmin(i1) and p->GetRmax(i2) are used. | |
102 | // if points i2=i3 and max=kTRUE then points p->GetRmax(i2) and | |
103 | // p->GetRmin(i3) are used. If i2=i3 and max=kFALSE, then p->GetRmin(i2) | |
104 | // and p->GetRmax(i3) are used. | |
cee918ed | 105 | void InsidePoint(const TGeoPcon *p,Int_t i1,Int_t i2,Int_t i3, |
106 | Double_t Cthick,TGeoPcon *q,Int_t j1,Bool_t max)const; | |
166d14ba | 107 | // Given two intersecting lines defined by the points (x0,y0), (x1,y1) and |
543b7370 | 108 | // (x1,y1), (x2,y2) {intersecting at (x1,y1)} the point (x,y) a distance |
166d14ba | 109 | // c away is returned such that two lines a distance c away from the |
110 | // lines defined above intersect at (x,y). | |
cee918ed | 111 | void InsidePoint(Double_t x0,Double_t y0,Double_t x1,Double_t y1, |
172b0d90 | 112 | Double_t x2,Double_t y2,Double_t c, |
cee918ed | 113 | Double_t &x,Double_t &y)const; |
166d14ba | 114 | // Given a initial point z0,r0, the initial angle theta0, and the radius |
115 | // of curvature, returns the point z1, r1 at the angle theta1. Theta | |
116 | // measured from the r axis in the clock wise direction [degrees]. | |
cee918ed | 117 | void RadiusOfCurvature(Double_t rc,Double_t theta0,Double_t z0, |
118 | Double_t r0,Double_t theta1,Double_t &z1, | |
119 | Double_t &r1)const; | |
166d14ba | 120 | // |
121 | // Output functions for debugging | |
122 | // | |
123 | // Prints out the contents of the TGeoArb8 | |
124 | void PrintArb8(const TGeoArb8 *a) const; | |
125 | // Prints out the contents of the TGeoPcon | |
126 | void PrintPcon(const TGeoPcon *a) const; | |
127 | // Prints out the contents of the TGeoTube | |
128 | void PrintTube(const TGeoTube *a) const; | |
129 | // Prints out the contents of the TGeoTubeSeg | |
130 | void PrintTubeSeg(const TGeoTubeSeg *a) const; | |
131 | // Prints out the contents of the TGeoConeSeg | |
132 | void PrintConeSeg(const TGeoConeSeg *a) const; | |
133 | // Prints out the contents of the TGeoBBox | |
134 | void PrintBBox(const TGeoBBox *a) const; | |
135 | // Draws a 2D crossection of the TGeoPcon r,z section | |
136 | void DrawCrossSection(const TGeoPcon *p,Int_t fillc=7,Int_t fills=4050, | |
137 | Int_t linec=3,Int_t lines=1,Int_t linew=4, | |
138 | Int_t markc=2,Int_t marks=4, | |
139 | Float_t marksize=1.0) const; | |
db486a6e | 140 | // Compute the angles where a line intersects a circle. |
141 | Bool_t AngleOfIntersectionWithLine(Double_t x0,Double_t y0, | |
142 | Double_t x1,Double_t y1, | |
143 | Double_t xc,Double_t yc, | |
144 | Double_t rc,Double_t &t0, | |
145 | Double_t &t1)const; | |
146 | void AnglesForRoundedCorners(Double_t x0,Double_t y0,Double_t r0, | |
147 | Double_t x1,Double_t y1,Double_t r1, | |
148 | Double_t &t0,Double_t &t1)const; | |
54c9a3d9 | 149 | // Define a general CreateMaterials function here so that if |
150 | // any specific subdetector does not define it this null function | |
151 | // will due. This function is not declaired const so that a sub- | |
152 | // detector's version may use class variables if they wish. | |
153 | void CreateDefaultMaterials(); | |
154 | virtual void CreateMaterials(){}; | |
db486a6e | 155 | // Function to create figure needed for this class' documentation |
54c9a3d9 | 156 | void MakeFigure1(Double_t x0=0.0,Double_t y0=0.0,Double_t r0=2.0, |
157 | Double_t x1=-4.0,Double_t y1=-2.0,Double_t r1=1.0); | |
cee918ed | 158 | protected: |
159 | ||
160 | // Units, Convert from k?? to cm,degree,GeV,seconds, | |
db486a6e | 161 | static const Double_t fgkmicron; // Convert micron to TGeom's cm. |
a98296c1 | 162 | static const Double_t fgkmm; // Convert mm to TGeom's cm. |
db486a6e | 163 | static const Double_t fgkcm; // Convert cm to TGeom's cm. |
a98296c1 | 164 | static const Double_t fgkDegree; //Convert degrees to TGeom's degrees |
165 | static const Double_t fgkRadian; //To Radians | |
a53658c6 | 166 | static const Double_t fgkgcm3; // Density in g/cm^3 |
54c9a3d9 | 167 | static const Double_t fgkKgm3; // Density in kg/m^3 |
168 | static const Double_t fgkKgdm3; // Density in kg/dm^3 | |
a53658c6 | 169 | static const Double_t fgkCelsius; // Temperature in degrees Celcius |
170 | static const Double_t fgkPascal; // Preasure in Pascal | |
171 | static const Double_t fgkKPascal; // Preasure in KPascal | |
172 | static const Double_t fgkeV; // Energy in eV | |
173 | static const Double_t fgkKeV; // Energy in KeV | |
174 | static const Double_t fgkMeV; // Energy in MeV | |
175 | static const Double_t fgkGeV; // Energy in GeV | |
cee918ed | 176 | |
172b0d90 | 177 | private: |
db486a6e | 178 | Double_t AngleForRoundedCorners0(Double_t dx,Double_t dy, |
179 | Double_t sdr)const; | |
180 | Double_t AngleForRoundedCorners1(Double_t dx,Double_t dy, | |
181 | Double_t sdr)const; | |
182 | Int_t fDebug; //! Debug flag/level | |
172b0d90 | 183 | ClassDef(AliITSv11Geometry,1) // Base class for ITS v11 geometry |
184 | }; | |
185 | ||
172b0d90 | 186 | #endif |