/usr/include/root/TGeoTube.h is in libroot-geom-dev 5.34.14-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 | // @(#)root/base:$Id$
// Author: Andrei Gheata 24/10/01
/*************************************************************************
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#ifndef ROOT_TGeoTube
#define ROOT_TGeoTube
#ifndef ROOT_TGeoBBox
#include "TGeoBBox.h"
#endif
////////////////////////////////////////////////////////////////////////////
// //
// TGeoTube - cylindrical tube class. A tube has 3 parameters : //
// Rmin - minimum radius //
// Rmax - maximum radius //
// dz - half length //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoTube : public TGeoBBox
{
protected :
// data members
Double_t fRmin; // inner radius
Double_t fRmax; // outer radius
Double_t fDz; // half length
// methods
public:
// constructors
TGeoTube();
TGeoTube(Double_t rmin, Double_t rmax, Double_t dz);
TGeoTube(const char * name, Double_t rmin, Double_t rmax, Double_t dz);
TGeoTube(Double_t *params);
// destructor
virtual ~TGeoTube();
// methods
virtual Double_t Capacity() const;
static Double_t Capacity(Double_t rmin, Double_t rmax, Double_t dz);
virtual void ComputeBBox();
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm);
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize);
static void ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm,
Double_t rmin, Double_t rmax, Double_t dz);
virtual Bool_t Contains(const Double_t *point) const;
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const;
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz);
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
static Double_t DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz);
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
static void DistToTube(Double_t rsq, Double_t nsq, Double_t rdotn, Double_t radius, Double_t &b, Double_t &delta);
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
virtual TGeoVolume *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step);
virtual const char *GetAxisName(Int_t iaxis) const;
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
virtual void GetBoundingCylinder(Double_t *param) const;
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
virtual Int_t GetByteCount() const {return 48;}
virtual Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) const;
virtual TGeoShape *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
virtual Int_t GetNmeshVertices() const;
virtual Double_t GetRmin() const {return fRmin;}
virtual Double_t GetRmax() const {return fRmax;}
virtual Double_t GetDz() const {return fDz;}
Bool_t HasRmin() const {return (fRmin>0)?kTRUE:kFALSE;}
virtual void InspectShape() const;
virtual Bool_t IsCylType() const {return kTRUE;}
virtual TBuffer3D *MakeBuffer3D() const;
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const;
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const;
static Double_t SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz, Int_t skipz=0);
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetTubeDimensions(Double_t rmin, Double_t rmax, Double_t dz);
virtual void SetDimensions(Double_t *param);
virtual void SetPoints(Double_t *points) const;
virtual void SetPoints(Float_t *points) const;
virtual void SetSegsAndPols(TBuffer3D &buff) const;
virtual void Sizeof3D() const;
ClassDef(TGeoTube, 1) // cylindrical tube class
};
////////////////////////////////////////////////////////////////////////////
// //
// TGeoTubeSeg - a phi segment of a tube. Has 5 parameters : //
// - the same 3 as a tube; //
// - first phi limit (in degrees) //
// - second phi limit //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoTubeSeg : public TGeoTube
{
protected:
// data members
Double_t fPhi1; // first phi limit
Double_t fPhi2; // second phi limit
// Transient trigonometric data
Double_t fS1; //!sin(phi1)
Double_t fC1; //!cos(phi1)
Double_t fS2; //!sin(phi2)
Double_t fC2; //!cos(phi2)
Double_t fSm; //!sin(0.5*(phi1+phi2))
Double_t fCm; //!cos(0.5*(phi1+phi2))
Double_t fCdfi; //!cos(0.5*(phi1-phi2))
void InitTrigonometry();
public:
// constructors
TGeoTubeSeg();
TGeoTubeSeg(Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1, Double_t phi2);
TGeoTubeSeg(const char * name, Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1, Double_t phi2);
TGeoTubeSeg(Double_t *params);
// destructor
virtual ~TGeoTubeSeg();
// methods
virtual void AfterStreamer();
virtual Double_t Capacity() const;
static Double_t Capacity(Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2);
virtual void ComputeBBox();
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm);
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize);
static void ComputeNormalS(const Double_t *point, const Double_t *dir, Double_t *norm,
Double_t rmin, Double_t rmax, Double_t dz,
Double_t c1, Double_t s1, Double_t c2, Double_t s2);
virtual Bool_t Contains(const Double_t *point) const;
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const;
virtual Int_t DistancetoPrimitive(Int_t px, Int_t py);
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir,Double_t rmin, Double_t rmax, Double_t dz,
Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi);
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
static Double_t DistFromOutsideS(const Double_t *point, const Double_t *dir, Double_t rmin, Double_t rmax, Double_t dz,
Double_t c1, Double_t s1, Double_t c2, Double_t s2, Double_t cm, Double_t sm, Double_t cdfi);
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
virtual TGeoVolume *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step);
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
virtual void GetBoundingCylinder(Double_t *param) const;
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
virtual Int_t GetByteCount() const {return 56;}
virtual Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) const;
virtual TGeoShape *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
virtual Int_t GetNmeshVertices() const;
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
Double_t GetPhi1() const {return fPhi1;}
Double_t GetPhi2() const {return fPhi2;}
virtual void InspectShape() const;
virtual TBuffer3D *MakeBuffer3D() const;
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const;
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const;
static Double_t SafetyS(const Double_t *point, Bool_t in, Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1, Double_t phi2, Int_t skipz=0);
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetTubsDimensions(Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1, Double_t phi2);
virtual void SetDimensions(Double_t *param);
virtual void SetPoints(Double_t *points) const;
virtual void SetPoints(Float_t *points) const;
virtual void SetSegsAndPols(TBuffer3D &buff) const;
virtual void Sizeof3D() const;
ClassDef(TGeoTubeSeg, 1) // cylindrical tube segment class
};
////////////////////////////////////////////////////////////////////////////
// //
// TGeoCtub - a tube segment cut with 2 planes. Has 11 parameters : //
// - the same 5 as a tube segment; //
// - x,y,z components of the normal to the -dZ cut plane in //
// point (0,0,-dZ) //
// - x,y,z components of the normal to the +dZ cut plane in //
// point (0,0,dZ) //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoCtub : public TGeoTubeSeg
{
protected:
// data members
Double_t fNlow[3]; // normal to lower cut plane
Double_t fNhigh[3]; // normal to highet cut plane
public:
// constructors
TGeoCtub();
TGeoCtub(Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz);
TGeoCtub(const char *name, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz);
TGeoCtub(Double_t *params);
// destructor
virtual ~TGeoCtub();
// methods
virtual Double_t Capacity() const;
virtual void ComputeBBox();
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm);
virtual void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize);
virtual Bool_t Contains(const Double_t *point) const;
virtual void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const;
virtual Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
virtual Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1,
Double_t step=TGeoShape::Big(), Double_t *safe=0) const;
virtual void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const;
virtual TGeoVolume *Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv,
Double_t start, Double_t step);
virtual Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const;
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
virtual Int_t GetByteCount() const {return 98;}
virtual Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) const;
virtual TGeoShape *GetMakeRuntimeShape(TGeoShape *mother, TGeoMatrix *mat) const;
virtual void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const;
virtual Int_t GetNmeshVertices() const;
const Double_t *GetNlow() const {return &fNlow[0];}
const Double_t *GetNhigh() const {return &fNhigh[0];}
Double_t GetZcoord(Double_t xc, Double_t yc, Double_t zc) const;
virtual void InspectShape() const;
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const;
virtual void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const;
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetCtubDimensions(Double_t rmin, Double_t rmax, Double_t dz,
Double_t phi1, Double_t phi2, Double_t lx, Double_t ly, Double_t lz,
Double_t tx, Double_t ty, Double_t tz);
virtual void SetDimensions(Double_t *param);
virtual void SetPoints(Double_t *points) const;
virtual void SetPoints(Float_t *points) const;
ClassDef(TGeoCtub, 1) // cut tube segment class
};
#endif
|