Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoChecker.h
Go to the documentation of this file.
1// @(#)root/geom:$Id$
2// Author: Andrei Gheata 01/11/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_TGeoChecker
13#define ROOT_TGeoChecker
14
15#include "TObject.h"
16
17// forward declarations
18class TTree;
19class TGeoShape;
20class TGeoVolume;
21class TGeoVoxelFinder;
22class TGeoNode;
23class TGeoManager;
24class TGeoMatrix;
25class TGeoOverlap;
26class TBuffer3D;
27class TH2F;
28class TStopwatch;
29
30///////////////////////////////////////////////////////////////////////////
31// TGeoChecker - A simple checker generating random points inside a //
32// geometry. Generates a tree of points on the surfaces corresponding //
33// to the safety of each generated point //
34// //
35///////////////////////////////////////////////////////////////////////////
36
37class TGeoChecker : public TObject {
38private:
39 // data members
40 TGeoManager *fGeoManager; // pointer to geometry manager
41 TGeoVolume *fVsafe; // volume to which a safety sphere node was added
42 TBuffer3D *fBuff1; // Buffer containing mesh vertices for first volume
43 TBuffer3D *fBuff2; // Buffer containing mesh vertices for second volume
44 Bool_t fFullCheck; // Full overlap checking
45 Double_t *fVal1; //! Array of number of crossings per volume.
46 Double_t *fVal2; //! Array of timing per volume.
47 Bool_t *fFlags; //! Array of flags per volume.
48 TStopwatch *fTimer; //! Timer
49 TGeoNode *fSelectedNode; //! Selected node for overlap checking
50 Int_t fNchecks; //! Number of checks for current volume
51 Int_t fNmeshPoints; //! Number of points on mesh to be checked
52 // methods
53 void CleanPoints(Double_t *points, Int_t &numPoints) const;
58
59public:
60 // constructors
63 // destructor
64 ~TGeoChecker() override;
65 // methods
66 virtual void CheckBoundaryErrors(Int_t ntracks = 1000000, Double_t radius = -1.);
67 virtual void CheckBoundaryReference(Int_t icheck = -1);
68 void CheckGeometryFull(Bool_t checkoverlaps = kTRUE, Bool_t checkcrossings = kTRUE, Int_t nrays = 10000,
69 const Double_t *vertex = nullptr);
70 void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const;
71 void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp = 0.1, Option_t *option = "");
72 void CheckOverlapsBySampling(TGeoVolume *vol, Double_t ovlp = 0.1, Int_t npoints = 1000000) const;
73 void CheckPoint(Double_t x = 0, Double_t y = 0, Double_t z = 0, Option_t *option = "", Double_t safety = 0.);
74 void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option);
75 Double_t CheckVoxels(TGeoVolume *vol, TGeoVoxelFinder *voxels, Double_t *xyz, Int_t npoints);
76 TH2F *LegoPlot(Int_t ntheta = 60, Double_t themin = 0., Double_t themax = 180., Int_t nphi = 90,
77 Double_t phimin = 0., Double_t phimax = 360., Double_t rmin = 0., Double_t rmax = 9999999,
78 Option_t *option = "");
79 void PrintOverlaps() const;
80 void RandomPoints(TGeoVolume *vol, Int_t npoints, Option_t *option);
81 void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol = nullptr,
82 Bool_t check_norm = kFALSE);
83 TGeoOverlap *MakeCheckOverlap(const char *name, TGeoVolume *vol1, TGeoVolume *vol2, TGeoMatrix *mat1,
84 TGeoMatrix *mat2, Bool_t isovlp, Double_t ovlp);
85 void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch = nullptr,
86 Bool_t last = kFALSE, Bool_t refresh = kFALSE, const char *msg = "");
87 TGeoNode *SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path);
88 void ShapeDistances(TGeoShape *shape, Int_t nsamples, Option_t *option);
89 void ShapeSafety(TGeoShape *shape, Int_t nsamples, Option_t *option);
90 void ShapeNormal(TGeoShape *shape, Int_t nsamples, Option_t *option);
91 Double_t *ShootRay(Double_t *start, Double_t dirx, Double_t diry, Double_t dirz, Double_t *array, Int_t &nelem,
92 Int_t &dim, Double_t *enpoint = nullptr) const;
93 void SetSelectedNode(TGeoNode *node) { fSelectedNode = node; }
94 void SetNmeshPoints(Int_t npoints = 1000);
95 void Test(Int_t npoints, Option_t *option);
96 void TestOverlaps(const char *path);
97 Bool_t TestVoxels(TGeoVolume *vol, Int_t npoints = 1000000);
98 Double_t Weight(Double_t precision = 0.01, Option_t *option = "v");
99
100 ClassDefOverride(TGeoChecker, 2) // a simple geometry checker
101};
102
103#endif
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Definition RtypesCore.h:63
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:94
double Double_t
Definition RtypesCore.h:59
long long Long64_t
Definition RtypesCore.h:69
constexpr Bool_t kTRUE
Definition RtypesCore.h:93
const char Option_t
Definition RtypesCore.h:66
#define ClassDefOverride(name, id)
Definition Rtypes.h:346
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
Geometry checking package.
Definition TGeoChecker.h:37
Int_t PropagateInGeom(Double_t *, Double_t *)
Propagate from START along DIR from boundary to boundary until exiting geometry.
Int_t fNchecks
Selected node for overlap checking.
Definition TGeoChecker.h:50
void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option)
Test for shape navigation methods.
Bool_t * fFlags
Array of timing per volume.
Definition TGeoChecker.h:47
TStopwatch * fTimer
Array of flags per volume.
Definition TGeoChecker.h:48
TGeoVolume * fVsafe
Definition TGeoChecker.h:41
void CheckOverlapsBySampling(TGeoVolume *vol, Double_t ovlp=0.1, Int_t npoints=1000000) const
Check illegal overlaps for volume VOL within a limit OVLP by sampling npoints inside the volume shape...
TGeoChecker()
Default constructor.
void ShapeNormal(TGeoShape *shape, Int_t nsamples, Option_t *option)
Check of validity of the normal for a given shape.
void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="")
Check illegal overlaps for volume VOL within a limit OVLP.
void TestOverlaps(const char *path)
Geometry overlap checker based on sampling.
TGeoOverlap * MakeCheckOverlap(const char *name, TGeoVolume *vol1, TGeoVolume *vol2, TGeoMatrix *mat1, TGeoMatrix *mat2, Bool_t isovlp, Double_t ovlp)
Check if the 2 non-assembly volume candidates overlap/extrude. Returns overlap object.
Double_t * fVal2
Array of number of crossings per volume.
Definition TGeoChecker.h:46
TGeoManager * fGeoManager
Definition TGeoChecker.h:40
void ShapeDistances(TGeoShape *shape, Int_t nsamples, Option_t *option)
Test TGeoShape::DistFromInside/Outside.
Int_t NChecksPerVolume(TGeoVolume *vol)
Compute number of overlaps combinations to check per volume.
void SetSelectedNode(TGeoNode *node)
Definition TGeoChecker.h:93
void ShapeSafety(TGeoShape *shape, Int_t nsamples, Option_t *option)
Check of validity of safe distance for a given shape.
void CheckGeometryFull(Bool_t checkoverlaps=kTRUE, Bool_t checkcrossings=kTRUE, Int_t nrays=10000, const Double_t *vertex=nullptr)
Geometry checking.
void Score(TGeoVolume *, Int_t, Double_t)
Score a hit for VOL.
Double_t * ShootRay(Double_t *start, Double_t dirx, Double_t diry, Double_t dirz, Double_t *array, Int_t &nelem, Int_t &dim, Double_t *enpoint=nullptr) const
Shoot one ray from start point with direction (dirx,diry,dirz).
void CleanPoints(Double_t *points, Int_t &numPoints) const
Number of points on mesh to be checked.
TGeoNode * SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path)
shoot npoints randomly in a box of 1E-5 around current point.
void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="", Double_t safety=0.)
Draw point (x,y,z) over the picture of the daughters of the volume containing this point.
TGeoNode * fSelectedNode
Timer.
Definition TGeoChecker.h:49
Double_t Weight(Double_t precision=0.01, Option_t *option="v")
Estimate weight of top level volume with a precision SIGMA(W)/W better than PRECISION.
~TGeoChecker() override
Destructor.
void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=nullptr, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="")
Print current operation progress.
Int_t fNmeshPoints
Number of checks for current volume.
Definition TGeoChecker.h:51
void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const
Shoot nrays with random directions from starting point (startx, starty, startz) in the reference fram...
virtual void CheckBoundaryReference(Int_t icheck=-1)
Check the boundary errors reference file created by CheckBoundaryErrors method.
TBuffer3D * fBuff2
Definition TGeoChecker.h:43
void SetNmeshPoints(Int_t npoints=1000)
Set number of points to be generated on the shape outline when checking for overlaps.
void PrintOverlaps() const
Print the current list of overlaps held by the manager class.
void Test(Int_t npoints, Option_t *option)
Check time of finding "Where am I" for n points.
Double_t TimingPerVolume(TGeoVolume *)
Compute timing per "FindNextBoundary" + "Safety" call.
Bool_t TestVoxels(TGeoVolume *vol, Int_t npoints=1000000)
Returns optimal voxelization type for volume vol.
Double_t * fVal1
Definition TGeoChecker.h:45
void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol=nullptr, Bool_t check_norm=kFALSE)
Randomly shoot nrays from point (startx,starty,startz) and plot intersections with surfaces for curre...
Bool_t fFullCheck
Definition TGeoChecker.h:44
TH2F * LegoPlot(Int_t ntheta=60, Double_t themin=0., Double_t themax=180., Int_t nphi=90, Double_t phimin=0., Double_t phimax=360., Double_t rmin=0., Double_t rmax=9999999, Option_t *option="")
Generate a lego plot fot the top volume, according to option.
void RandomPoints(TGeoVolume *vol, Int_t npoints, Option_t *option)
Draw random points in the bounding box of a volume.
virtual void CheckBoundaryErrors(Int_t ntracks=1000000, Double_t radius=-1.)
Check pushes and pulls needed to cross the next boundary with respect to the position given by FindNe...
Double_t CheckVoxels(TGeoVolume *vol, TGeoVoxelFinder *voxels, Double_t *xyz, Int_t npoints)
count voxel timing
TBuffer3D * fBuff1
Definition TGeoChecker.h:42
The manager class for any TGeo geometry.
Definition TGeoManager.h:44
Geometrical transformation package.
Definition TGeoMatrix.h:38
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Definition TGeoNode.h:39
Base class describing geometry overlaps.
Definition TGeoOverlap.h:37
Base abstract class for all shapes.
Definition TGeoShape.h:25
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43
Finder class handling voxels.
2-D histogram with a float per channel (see TH1 documentation)
Definition TH2.h:307
Mother of all ROOT objects.
Definition TObject.h:41
Stopwatch class.
Definition TStopwatch.h:28
A TTree represents a columnar dataset.
Definition TTree.h:79
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17