TGeoTube.h

Go to the documentation of this file.
00001 // @(#)root/base:$Id: TGeoTube.h 24870 2008-07-17 16:30:58Z brun $
00002 // Author: Andrei Gheata   24/10/01
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TGeoTube
00013 #define ROOT_TGeoTube
00014 
00015 #ifndef ROOT_TGeoBBox
00016 #include "TGeoBBox.h"
00017 #endif
00018 
00019 ////////////////////////////////////////////////////////////////////////////
00020 //                                                                        //
00021 // TGeoTube - cylindrical tube  class. A tube has 3 parameters :          //
00022 //            Rmin - minimum radius                                       //
00023 //            Rmax - maximum radius                                       //
00024 //            dz - half length                                            //
00025 //                                                                        //
00026 ////////////////////////////////////////////////////////////////////////////
00027 
00028 class TGeoTube : public TGeoBBox
00029 {
00030 protected :
00031 // data members
00032    Double_t              fRmin; // inner radius
00033    Double_t              fRmax; // outer radius
00034    Double_t              fDz;   // half length
00035 // methods
00036 
00037 public:
00038    // constructors
00039    TGeoTube();
00040    TGeoTube(Double_t rmin, Double_t rmax, Double_t dz);
00041    TGeoTube(const char * name, Double_t rmin, Double_t rmax, Double_t dz);
00042    TGeoTube(Double_t *params);
00043    // destructor
00044    virtual ~TGeoTube();
00045    // methods
00046 
00047    virtual Double_t      Capacity() const;
00048    static  Double_t      Capacity(Double_t rmin, Double_t rmax, Double_t dz);
00049    virtual void          ComputeBBox();
00050    virtual void          ComputeNormal(Double_t *point, Double_t *dir, Double_t *norm);
00051    static  void          ComputeNormalS(Double_t *point, Double_t *dir, Double_t *norm,
00052                                         Double_t rmin, Double_t rmax, Double_t dz);
00053    virtual Bool_t        Contains(Double_t *point) const;
00054    static  Double_t      DistFromInsideS(Double_t *point, Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz);
00055    virtual Double_t      DistFromInside(Double_t *point, Double_t *dir, Int_t iact=1, 
00056                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00057    static  Double_t      DistFromOutsideS(Double_t *point, Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz);
00058    virtual Double_t      DistFromOutside(Double_t *point, Double_t *dir, Int_t iact=1, 
00059                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00060    static  void          DistToTube(Double_t rsq, Double_t nsq, Double_t rdotn, Double_t radius, Double_t &b, Double_t &delta);
00061    virtual Int_t         DistancetoPrimitive(Int_t px, Int_t py);
00062    virtual TGeoVolume   *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, 
00063                                 Double_t start, Double_t step);
00064    virtual const char   *GetAxisName(Int_t iaxis) const;
00065    virtual Double_t      GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
00066    virtual void          GetBoundingCylinder(Double_t *param) const;
00067    virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
00068    virtual Int_t         GetByteCount() const {return 48;}
00069    virtual Bool_t        GetPointsOnSegments(Int_t npoints, Double_t *array) const;
00070    virtual TGeoShape    *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
00071    virtual void          GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
00072    virtual Int_t         GetNmeshVertices() const;
00073    virtual Double_t      GetRmin() const {return fRmin;}
00074    virtual Double_t      GetRmax() const {return fRmax;}
00075    virtual Double_t      GetDz() const   {return fDz;}
00076    Bool_t                HasRmin() const {return (fRmin>0)?kTRUE:kFALSE;}
00077    virtual void          InspectShape() const;
00078    virtual Bool_t        IsCylType() const {return kTRUE;}
00079    virtual TBuffer3D    *MakeBuffer3D() const;
00080    virtual Double_t      Safety(Double_t *point, Bool_t in=kTRUE) const;
00081    static  Double_t      SafetyS(Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, Int_t skipz=0);
00082    virtual void          SavePrimitive(ostream &out, Option_t *option = "");
00083    void                  SetTubeDimensions(Double_t rmin, Double_t rmax, Double_t dz);
00084    virtual void          SetDimensions(Double_t *param);
00085    virtual void          SetPoints(Double_t *points) const;
00086    virtual void          SetPoints(Float_t *points) const;
00087    virtual void          SetSegsAndPols(TBuffer3D &buff) const;
00088    virtual void          Sizeof3D() const;
00089 
00090    ClassDef(TGeoTube, 1)         // cylindrical tube class
00091 
00092 };
00093 
00094 ////////////////////////////////////////////////////////////////////////////
00095 //                                                                        //
00096 // TGeoTubeSeg - a phi segment of a tube. Has 5 parameters :              //
00097 //            - the same 3 as a tube;                                     //
00098 //            - first phi limit (in degrees)                              //
00099 //            - second phi limit                                          //
00100 //                                                                        //
00101 ////////////////////////////////////////////////////////////////////////////
00102 
00103 class TGeoTubeSeg : public TGeoTube
00104 {
00105 protected:
00106    // data members
00107    Double_t              fPhi1;  // first phi limit 
00108    Double_t              fPhi2;  // second phi limit 
00109 
00110 public:
00111    // constructors
00112    TGeoTubeSeg();
00113    TGeoTubeSeg(Double_t rmin, Double_t rmax, Double_t dz, 
00114                Double_t phi1, Double_t phi2);
00115    TGeoTubeSeg(const char * name, Double_t rmin, Double_t rmax, Double_t dz, 
00116                Double_t phi1, Double_t phi2);
00117    TGeoTubeSeg(Double_t *params);
00118    // destructor
00119    virtual ~TGeoTubeSeg();
00120    // methods
00121    virtual Double_t      Capacity() const;
00122    static  Double_t      Capacity(Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2);
00123    virtual void          ComputeBBox();
00124    virtual void          ComputeNormal(Double_t *point, Double_t *dir, Double_t *norm);
00125    static  void          ComputeNormalS(Double_t *point, Double_t *dir, Double_t *norm,
00126                                         Double_t rmin, Double_t rmax, Double_t dz,
00127                                         Double_t c1, Double_t s1, Double_t c2, Double_t s2);
00128    virtual Bool_t        Contains(Double_t *point) const;
00129    virtual Int_t         DistancetoPrimitive(Int_t px, Int_t py);
00130    static  Double_t      DistFromInsideS(Double_t *point, Double_t *dir,Double_t rmin, Double_t rmax, Double_t dz, 
00131                                     Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi);
00132    virtual Double_t      DistFromInside(Double_t *point, Double_t *dir, Int_t iact=1, 
00133                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00134    static  Double_t      DistFromOutsideS(Double_t *point, Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz,
00135                                    Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi);
00136    virtual Double_t      DistFromOutside(Double_t *point, Double_t *dir, Int_t iact=1, 
00137                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00138    virtual TGeoVolume   *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, 
00139                                 Double_t start, Double_t step);
00140    virtual Double_t      GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
00141    virtual void          GetBoundingCylinder(Double_t *param) const;
00142    virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
00143    virtual Int_t         GetByteCount() const {return 56;}
00144    virtual Bool_t        GetPointsOnSegments(Int_t npoints, Double_t *array) const;
00145    virtual TGeoShape    *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
00146    virtual Int_t         GetNmeshVertices() const;
00147    virtual void          GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
00148    Double_t              GetPhi1() const {return fPhi1;}
00149    Double_t              GetPhi2() const {return fPhi2;}
00150    virtual void          InspectShape() const;
00151    virtual TBuffer3D    *MakeBuffer3D() const;
00152    virtual Double_t      Safety(Double_t *point, Bool_t in=kTRUE) const;
00153    static  Double_t      SafetyS(Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, 
00154                                  Double_t phi1, Double_t phi2, Int_t skipz=0);
00155    virtual void          SavePrimitive(ostream &out, Option_t *option = "");
00156    void                  SetTubsDimensions(Double_t rmin, Double_t rmax, Double_t dz,
00157                                        Double_t phi1, Double_t phi2);
00158    virtual void          SetDimensions(Double_t *param);
00159    virtual void          SetPoints(Double_t *points) const;
00160    virtual void          SetPoints(Float_t *points) const;
00161    virtual void          SetSegsAndPols(TBuffer3D &buff) const;
00162    virtual void          Sizeof3D() const;
00163 
00164    ClassDef(TGeoTubeSeg, 1)         // cylindrical tube segment class 
00165 };
00166 
00167 ////////////////////////////////////////////////////////////////////////////
00168 //                                                                        //
00169 // TGeoCtub - a tube segment cut with 2 planes. Has 11 parameters :       //
00170 //            - the same 5 as a tube segment;                             //
00171 //            - x,y,z components of the normal to the -dZ cut plane in    //
00172 //              point (0,0,-dZ)                                           //
00173 //            -  x,y,z components of the normal to the +dZ cut plane in   //
00174 //              point (0,0,dZ)                                            //
00175 //                                                                        //
00176 ////////////////////////////////////////////////////////////////////////////
00177 
00178 class TGeoCtub : public TGeoTubeSeg
00179 {
00180 protected:
00181    // data members
00182    Double_t             fNlow[3];  // normal to lower cut plane 
00183    Double_t             fNhigh[3]; // normal to highet cut plane 
00184 
00185 public:
00186    // constructors
00187    TGeoCtub();
00188    TGeoCtub(Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
00189             Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz);
00190    TGeoCtub(const char *name, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
00191             Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz);
00192    TGeoCtub(Double_t *params);
00193    // destructor
00194    virtual ~TGeoCtub();
00195    // methods
00196    virtual Double_t      Capacity() const;
00197    virtual void          ComputeBBox();
00198    virtual void          ComputeNormal(Double_t *point, Double_t *dir, Double_t *norm);
00199    virtual Bool_t        Contains(Double_t *point) const;
00200    virtual Double_t      DistFromInside(Double_t *point, Double_t *dir, Int_t iact=1, 
00201                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00202    virtual Double_t      DistFromOutside(Double_t *point, Double_t *dir, Int_t iact=1, 
00203                                    Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
00204    virtual TGeoVolume   *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, 
00205                                 Double_t start, Double_t step);
00206    virtual Double_t      GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
00207    virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
00208    virtual Int_t         GetByteCount() const {return 98;}
00209    virtual Bool_t        GetPointsOnSegments(Int_t npoints, Double_t *array) const;
00210    virtual TGeoShape    *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
00211    virtual void          GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
00212    virtual Int_t         GetNmeshVertices() const;
00213    const Double_t       *GetNlow() const {return &fNlow[0];}
00214    const Double_t       *GetNhigh() const {return &fNhigh[0];}
00215    Double_t              GetZcoord(Double_t xc, Double_t yc, Double_t zc) const;
00216    virtual void          InspectShape() const;
00217    virtual Double_t      Safety(Double_t *point, Bool_t in=kTRUE) const;
00218    virtual void          SavePrimitive(ostream &out, Option_t *option = "");
00219    void                  SetCtubDimensions(Double_t rmin, Double_t rmax, Double_t dz,
00220                                        Double_t phi1, Double_t phi2, Double_t lx, Double_t ly, Double_t lz,
00221                                        Double_t tx, Double_t ty, Double_t tz);
00222    virtual void          SetDimensions(Double_t *param);
00223    virtual void          SetPoints(Double_t *points) const;
00224    virtual void          SetPoints(Float_t *points) const;
00225 
00226    ClassDef(TGeoCtub, 1)         // cut tube segment class 
00227 };
00228 
00229 #endif

Generated on Tue Jul 5 14:12:20 2011 for ROOT_528-00b_version by  doxygen 1.5.1