/usr/include/root/TGeoCone.h is in libroot-geom-dev 5.34.19+dfsg-1.2.
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 | // @(#)root/geom:$Id$
// Author: Andrei Gheata 31/01/02
/*************************************************************************
* 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_TGeoCone
#define ROOT_TGeoCone
#ifndef ROOT_TGeoBBox
#include "TGeoBBox.h"
#endif
////////////////////////////////////////////////////////////////////////////
// //
// TGeoCone - conical tube class. It has 5 parameters : //
// dz - half length in z //
// Rmin1, Rmax1 - inside and outside radii at -dz //
// Rmin2, Rmax2 - inside and outside radii at +dz //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoCone : public TGeoBBox
{
protected :
// data members
Double_t fDz; // half length
Double_t fRmin1; // inner radius at -dz
Double_t fRmax1; // outer radius at -dz
Double_t fRmin2; // inner radius at +dz
Double_t fRmax2; // outer radius at +dz
// methods
public:
// constructors
TGeoCone();
TGeoCone(Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2);
TGeoCone(const char *name, Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2);
TGeoCone(Double_t *params);
// destructor
virtual ~TGeoCone();
// methods
virtual Double_t Capacity() const;
static Double_t Capacity(Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2);
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 dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2);
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 void DistToCone(const Double_t *point, const Double_t *dir, Double_t dz, Double_t r1, Double_t r2, Double_t &b, Double_t &delta);
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t dz,
Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2);
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 dz,
Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2);
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 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 Int_t GetByteCount() const {return 56;}
virtual const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const;
virtual Double_t GetDz() const {return fDz;}
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 Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) const;
virtual Double_t GetRmin1() const {return fRmin1;}
virtual Double_t GetRmax1() const {return fRmax1;}
virtual Double_t GetRmin2() const {return fRmin2;}
virtual Double_t GetRmax2() const {return fRmax2;}
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 dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, Int_t skipz=0);
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetConeDimensions(Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2);
virtual void SetDimensions(Double_t *param);
virtual void SetPoints(Double_t *points) const;
virtual void SetPoints(Float_t *points) const;
virtual void SetSegsAndPols(TBuffer3D &buffer) const;
virtual void Sizeof3D() const;
ClassDef(TGeoCone, 1) // conical tube class
};
////////////////////////////////////////////////////////////////////////////
// //
// TGeoConeSeg - a phi segment of a conical tube. Has 7 parameters : //
// - the same 5 as a cone; //
// - first phi limit (in degrees) //
// - second phi limit //
// //
////////////////////////////////////////////////////////////////////////////
class TGeoConeSeg : public TGeoCone
{
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
TGeoConeSeg();
TGeoConeSeg(Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2);
TGeoConeSeg(const char *name, Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2);
TGeoConeSeg(Double_t *params);
// destructor
virtual ~TGeoConeSeg();
// methods
virtual void AfterStreamer();
virtual Double_t Capacity() const;
static Double_t Capacity(Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, 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 dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2,
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 DistToCons(const Double_t *point, const Double_t *dir, Double_t r1, Double_t z1, Double_t r2, Double_t z2, Double_t phi1, Double_t phi2);
static Double_t DistFromInsideS(const Double_t *point, const Double_t *dir, Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, 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 dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2,
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 64;}
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 Bool_t GetPointsOnSegments(Int_t npoints, Double_t *array) 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 dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2, Int_t skipz=0);
virtual void SavePrimitive(std::ostream &out, Option_t *option = "");
void SetConsDimensions(Double_t dz, Double_t rmin1, Double_t rmax1,
Double_t rmin2, Double_t rmax2, 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 &buffer) const;
virtual void Sizeof3D() const;
ClassDef(TGeoConeSeg, 1) // conical tube segment class
};
#endif
|