Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoPcon.h
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 24/10/01
3
4/*************************************************************************
5 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12#ifndef ROOT_TGeoPcon
13#define ROOT_TGeoPcon
14
15#include "TGeoBBox.h"
16
17class TGeoPcon : public TGeoBBox {
18protected:
19 // data members
20 Int_t fNz = 0; // number of z planes (at least two)
21 Double_t fPhi1 = 0; // lower phi limit (converted to [0,2*pi)
22 Double_t fDphi = 0; // phi range
23 Double_t *fRmin = nullptr; //[fNz] pointer to array of inner radii
24 Double_t *fRmax = nullptr; //[fNz] pointer to array of outer radii
25 Double_t *fZ = nullptr; //[fNz] pointer to array of Z planes positions
26 Bool_t fFullPhi = false; //! Full phi range flag
27 Double_t fC1 = 0; //! Cosine of phi1
28 Double_t fS1 = 0; //! Sine of phi1
29 Double_t fC2 = 0; //! Cosine of phi1+dphi
30 Double_t fS2 = 0; //! Sine of phi1+dphi
31 Double_t fCm = 0; //! Cosine of (phi1+phi2)/2
32 Double_t fSm = 0; //! Sine of (phi1+phi2)/2
33 Double_t fCdphi = 0; //! Cosine of dphi
34
35 // methods
36 TGeoPcon(const TGeoPcon &) = delete;
37 TGeoPcon &operator=(const TGeoPcon &) = delete;
38
40 void SetSegsAndPolsNoInside(TBuffer3D &buff) const;
41
42public:
43 // constructors
44 TGeoPcon();
45 TGeoPcon(const char *name) : TGeoBBox(name, 0, 0, 0) {}
46 TGeoPcon(Double_t phi, Double_t dphi, Int_t nz);
47 TGeoPcon(const char *name, Double_t phi, Double_t dphi, Int_t nz);
48 TGeoPcon(Double_t *params);
49 // destructor
50 ~TGeoPcon() override;
51 // methods
52 Double_t Capacity() const override;
53 void ComputeBBox() override;
54 void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override;
55 void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override;
56 Bool_t Contains(const Double_t *point) const override;
57 void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override;
58 virtual void DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
59 Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact = 1, Double_t step = TGeoShape::Big(),
60 Double_t *safe = nullptr) const override;
61 void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
62 Double_t *step) const override;
63 Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact = 1,
64 Double_t step = TGeoShape::Big(), Double_t *safe = nullptr) const override;
65 void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize,
66 Double_t *step) const override;
67 Double_t DistToSegZ(const Double_t *point, const Double_t *dir, Int_t &iz) const;
68 Int_t DistancetoPrimitive(Int_t px, Int_t py) override;
70 Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override;
71 const char *GetAxisName(Int_t iaxis) const override;
72 Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const override;
73 void GetBoundingCylinder(Double_t *param) const override;
74 const TBuffer3D &GetBuffer3D(Int_t reqSections, Bool_t localFrame) const override;
75 Int_t GetByteCount() const override { return 60 + 12 * fNz; }
76 Double_t GetPhi1() const { return fPhi1; }
77 Double_t GetDphi() const { return fDphi; }
78 Int_t GetNz() const { return fNz; }
79 virtual Int_t GetNsegments() const;
80 Double_t *GetRmin() const { return fRmin; }
81 Double_t GetRmin(Int_t ipl) const;
82 Double_t *GetRmax() const { return fRmax; }
83 Double_t GetRmax(Int_t ipl) const;
84 Double_t *GetZ() const { return fZ; }
85 Double_t GetZ(Int_t ipl) const;
86 TGeoShape *GetMakeRuntimeShape(TGeoShape * /*mother*/, TGeoMatrix * /*mat*/) const override { return nullptr; }
87 Int_t GetNmeshVertices() const override;
88 Bool_t GetPointsOnSegments(Int_t /*npoints*/, Double_t * /*array*/) const override { return kFALSE; }
89 void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override;
90 void InspectShape() const override;
91 Bool_t IsCylType() const override { return kTRUE; }
92 TBuffer3D *MakeBuffer3D() const override;
93 Double_t &Phi1() { return fPhi1; }
94 Double_t &Dphi() { return fDphi; }
95 Double_t &Rmin(Int_t ipl) { return fRmin[ipl]; }
96 Double_t &Rmax(Int_t ipl) { return fRmax[ipl]; }
97 Double_t &Z(Int_t ipl) { return fZ[ipl]; }
98 Double_t Safety(const Double_t *point, Bool_t in = kTRUE) const override;
99 void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override;
101 SafetyToSegment(const Double_t *point, Int_t ipl, Bool_t in = kTRUE, Double_t safmin = TGeoShape::Big()) const;
102 void SavePrimitive(std::ostream &out, Option_t *option = "") override;
103 void SetDimensions(Double_t *param) override;
104 void SetPoints(Double_t *points) const override;
105 void SetPoints(Float_t *points) const override;
106 void SetSegsAndPols(TBuffer3D &buff) const override;
107 void Sizeof3D() const override;
108
109 ClassDefOverride(TGeoPcon, 1) // polycone class
110};
111
112#endif
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
float Float_t
Definition RtypesCore.h:57
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
double Double_t
Definition RtypesCore.h:59
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:341
Option_t Option_t option
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
char name[80]
Definition TGX11.cxx:110
Generic 3D primitive description class.
Definition TBuffer3D.h:18
Box class.
Definition TGeoBBox.h:17
Geometrical transformation package.
Definition TGeoMatrix.h:38
A polycone is represented by a sequence of tubes/cones, glued together at defined Z planes.
Definition TGeoPcon.h:17
Double_t fSm
Cosine of (phi1+phi2)/2.
Definition TGeoPcon.h:32
Double_t * GetRmax() const
Definition TGeoPcon.h:82
void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) override
Compute normal to closest surface from POINT.
Definition TGeoPcon.cxx:366
Double_t & Rmin(Int_t ipl)
Definition TGeoPcon.h:95
void DistFromInside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
Double_t GetDphi() const
Definition TGeoPcon.h:77
Double_t & Rmax(Int_t ipl)
Definition TGeoPcon.h:96
Double_t SafetyToSegment(const Double_t *point, Int_t ipl, Bool_t in=kTRUE, Double_t safmin=TGeoShape::Big()) const
Compute safety from POINT to segment between planes ipl, ipl+1 within safmin.
Double_t * fRmax
Definition TGeoPcon.h:24
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
void SetPoints(Double_t *points) const override
create polycone mesh points
Double_t DistFromOutside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const override
compute distance from outside point to surface of the tube
Definition TGeoPcon.cxx:630
TBuffer3D * MakeBuffer3D() const override
Creates a TBuffer3D describing this shape.
Definition TGeoPcon.cxx:937
Bool_t Contains(const Double_t *point) const override
test if point is inside this shape check total z range
Definition TGeoPcon.cxx:436
Bool_t GetPointsOnSegments(Int_t, Double_t *) const override
Fills array with n random points located on the line segments of the shape mesh.
Definition TGeoPcon.h:88
const char * GetAxisName(Int_t iaxis) const override
Returns name of axis IAXIS.
Definition TGeoPcon.cxx:824
Int_t GetByteCount() const override
Definition TGeoPcon.h:75
Double_t * fRmin
Definition TGeoPcon.h:23
Double_t Capacity() const override
Computes capacity of the shape in [length^3].
Definition TGeoPcon.cxx:264
Int_t GetNmeshVertices() const override
Return number of vertices of the mesh representation.
void Contains_v(const Double_t *points, Bool_t *inside, Int_t vecsize) const override
Check the inside status for each of the points in the array.
Int_t fNz
Definition TGeoPcon.h:20
Double_t * fZ
Definition TGeoPcon.h:25
virtual void DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax)
Defines z position of a section plane, rmin and rmax at this z.
Definition TGeoPcon.cxx:684
Double_t GetAxisRange(Int_t iaxis, Double_t &xlo, Double_t &xhi) const override
Get range of shape for a given axis.
Definition TGeoPcon.cxx:837
Double_t fC1
Full phi range flag.
Definition TGeoPcon.h:27
void InspectShape() const override
print shape parameters
Definition TGeoPcon.cxx:921
void SetDimensions(Double_t *param) override
Set polycone dimensions starting from an array.
TGeoShape * GetMakeRuntimeShape(TGeoShape *, TGeoMatrix *) const override
In case shape has some negative parameters, these has to be computed in order to fit the mother.
Definition TGeoPcon.h:86
Double_t fCdphi
Sine of (phi1+phi2)/2.
Definition TGeoPcon.h:33
Bool_t fFullPhi
Definition TGeoPcon.h:26
Double_t fS1
Cosine of phi1.
Definition TGeoPcon.h:28
Bool_t IsCylType() const override
Definition TGeoPcon.h:91
TGeoVolume * Divide(TGeoVolume *voldiv, const char *divname, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step) override
Divide this polycone shape belonging to volume "voldiv" into ndiv volumes called divname,...
Definition TGeoPcon.cxx:734
Double_t DistToSegZ(const Double_t *point, const Double_t *dir, Int_t &iz) const
compute distance to a pcon Z slice. Segment iz must be valid
Definition TGeoPcon.cxx:579
Double_t fCm
Sine of phi1+dphi.
Definition TGeoPcon.h:31
TGeoPcon & operator=(const TGeoPcon &)=delete
TGeoPcon(const TGeoPcon &)=delete
Cosine of dphi.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
compute closest distance from point px,py to each corner
Definition TGeoPcon.cxx:487
~TGeoPcon() override
destructor
Definition TGeoPcon.cxx:245
Double_t & Z(Int_t ipl)
Definition TGeoPcon.h:97
Double_t * GetZ() const
Definition TGeoPcon.h:84
Double_t DistFromInside(const Double_t *point, const Double_t *dir, Int_t iact=1, Double_t step=TGeoShape::Big(), Double_t *safe=nullptr) const override
compute distance from inside point to surface of the polycone
Definition TGeoPcon.cxx:498
TGeoPcon(const char *name)
Definition TGeoPcon.h:45
Bool_t HasInsideSurface() const
Returns true when pgon has internal surface It will be only disabled when all Rmin values are 0.
virtual Int_t GetNsegments() const
Returns number of segments on each mesh circle segment.
Definition TGeoPcon.cxx:720
Double_t fPhi1
Definition TGeoPcon.h:21
Double_t & Phi1()
Definition TGeoPcon.h:93
void GetMeshNumbers(Int_t &nvert, Int_t &nsegs, Int_t &npols) const override
Returns numbers of vertices, segments and polygons composing the shape mesh.
Double_t & Dphi()
Definition TGeoPcon.h:94
Double_t fS2
Cosine of phi1+dphi.
Definition TGeoPcon.h:30
void SetSegsAndPolsNoInside(TBuffer3D &buff) const
Fill TBuffer3D structure for segments and polygons, when no inner surface exists.
Double_t fDphi
Definition TGeoPcon.h:22
void Safety_v(const Double_t *points, const Bool_t *inside, Double_t *safe, Int_t vecsize) const override
Compute safe distance from each of the points in the input array.
void ComputeBBox() override
compute bounding box of the pcon Check if the sections are in increasing Z order
Definition TGeoPcon.cxx:288
Double_t fC2
Sine of phi1.
Definition TGeoPcon.h:29
void Sizeof3D() const override
fill size of this 3-D object
void SetSegsAndPols(TBuffer3D &buff) const override
Fill TBuffer3D structure for segments and polygons.
Definition TGeoPcon.cxx:957
const TBuffer3D & GetBuffer3D(Int_t reqSections, Bool_t localFrame) const override
Fills a static 3D buffer and returns a reference.
void DistFromOutside_v(const Double_t *points, const Double_t *dirs, Double_t *dists, Int_t vecsize, Double_t *step) const override
Compute distance from array of input points having directions specified by dirs. Store output in dist...
Int_t GetNz() const
Definition TGeoPcon.h:78
void GetBoundingCylinder(Double_t *param) const override
Fill vector param[4] with the bounding cylinder parameters.
Definition TGeoPcon.cxx:861
Double_t * GetRmin() const
Definition TGeoPcon.h:80
TGeoPcon()
dummy ctor
Definition TGeoPcon.cxx:104
Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const override
computes the closest distance from given point to this shape, according to option.
void ComputeNormal_v(const Double_t *points, const Double_t *dirs, Double_t *norms, Int_t vecsize) override
Compute the normal for an array o points so that norm.dot.dir is positive Input: Arrays of point coor...
Double_t GetPhi1() const
Definition TGeoPcon.h:76
Base abstract class for all shapes.
Definition TGeoShape.h:25
static Double_t Big()
Definition TGeoShape.h:87
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43