LCOV - code coverage report
Current view: top level - ITS/ITSsim - AliITSv11Geometry.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 8 12 66.7 %
Date: 2016-06-14 17:26:59 Functions: 9 22 40.9 %

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

Generated by: LCOV version 1.11