Logo ROOT  
Reference Guide
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
38{
39private :
40// data members
41 TGeoManager *fGeoManager; // pointer to geometry manager
42 TGeoVolume *fVsafe; // volume to which a safety sphere node was added
43 TBuffer3D *fBuff1; // Buffer containing mesh vertices for first volume
44 TBuffer3D *fBuff2; // Buffer containing mesh vertices for second volume
45 Bool_t fFullCheck; // Full overlap checking
46 Double_t *fVal1; //! Array of number of crossings per volume.
47 Double_t *fVal2; //! Array of timing per volume.
48 Bool_t *fFlags; //! Array of flags per volume.
49 TStopwatch *fTimer; //! Timer
50 TGeoNode *fSelectedNode; //! Selected node for overlap checking
51 Int_t fNchecks; //! Number of checks for current volume
52 Int_t fNmeshPoints; //! Number of points on mesh to be checked
53// methods
54 void CleanPoints(Double_t *points, Int_t &numPoints) const;
59public:
60 // constructors
63 // destructor
64 virtual ~TGeoChecker();
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, const Double_t *vertex=NULL);
69 void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const;
70 void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="");
71 void CheckOverlapsBySampling(TGeoVolume *vol, Double_t ovlp=0.1, Int_t npoints=1000000) const;
72 void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="");
73 void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option);
74 Double_t CheckVoxels(TGeoVolume *vol, TGeoVoxelFinder *voxels, Double_t *xyz, Int_t npoints);
75 TH2F *LegoPlot(Int_t ntheta=60, Double_t themin=0., Double_t themax=180.,
76 Int_t nphi=90, Double_t phimin=0., Double_t phimax=360.,
77 Double_t rmin=0., Double_t rmax=9999999, Option_t *option="");
78 void PrintOverlaps() const;
79 void RandomPoints(TGeoVolume *vol, Int_t npoints, Option_t *option);
80 void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol=0, Bool_t check_norm=kFALSE);
81 TGeoOverlap *MakeCheckOverlap(const char *name, TGeoVolume *vol1, TGeoVolume *vol2, TGeoMatrix *mat1, TGeoMatrix *mat2, Bool_t isovlp, Double_t ovlp);
82 void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=0, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="");
83 TGeoNode *SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char* g3path);
84 void ShapeDistances(TGeoShape *shape, Int_t nsamples, Option_t *option);
85 void ShapeSafety(TGeoShape *shape, Int_t nsamples, Option_t *option);
86 void ShapeNormal(TGeoShape *shape, Int_t nsamples, Option_t *option);
87 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=0) const;
89 void SetNmeshPoints(Int_t npoints=1000);
90 void Test(Int_t npoints, Option_t *option);
91 void TestOverlaps(const char *path);
92 Bool_t TestVoxels(TGeoVolume *vol, Int_t npoints=1000000);
93 Double_t Weight(Double_t precision=0.01, Option_t *option="v");
94
95 ClassDef(TGeoChecker, 2) // a simple geometry checker
96};
97
98#endif
99
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
int Int_t
Definition: RtypesCore.h:45
const Bool_t kFALSE
Definition: RtypesCore.h:101
bool Bool_t
Definition: RtypesCore.h:63
double Double_t
Definition: RtypesCore.h:59
long long Long64_t
Definition: RtypesCore.h:80
const Bool_t kTRUE
Definition: RtypesCore.h:100
const char Option_t
Definition: RtypesCore.h:66
#define ClassDef(name, id)
Definition: Rtypes.h:325
char name[80]
Definition: TGX11.cxx:110
point * points
Definition: X3DBuffer.c:22
Generic 3D primitive description class.
Definition: TBuffer3D.h:18
Geometry checking package.
Definition: TGeoChecker.h:38
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:51
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:48
TStopwatch * fTimer
Array of flags per volume.
Definition: TGeoChecker.h:49
TGeoVolume * fVsafe
Definition: TGeoChecker.h:42
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.
Definition: TGeoChecker.cxx:95
virtual ~TGeoChecker()
Destructor.
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:47
TGeoManager * fGeoManager
Definition: TGeoChecker.h:41
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:88
void ShapeSafety(TGeoShape *shape, Int_t nsamples, Option_t *option)
Check of validity of safe distance for a given shape.
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=0) 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.
TGeoNode * fSelectedNode
Timer.
Definition: TGeoChecker.h:50
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.
void CheckGeometryFull(Bool_t checkoverlaps=kTRUE, Bool_t checkcrossings=kTRUE, Int_t nrays=10000, const Double_t *vertex=NULL)
Geometry checking.
Int_t fNmeshPoints
Number of checks for current volume.
Definition: TGeoChecker.h:52
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.
void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="")
Draw point (x,y,z) over the picture of the daughters of the volume containing this point.
TBuffer3D * fBuff2
Definition: TGeoChecker.h:44
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.
void OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=0, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="")
Print current operation progress.
void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol=0, Bool_t check_norm=kFALSE)
Randomly shoot nrays from point (startx,starty,startz) and plot intersections with surfaces for curre...
Double_t * fVal1
Definition: TGeoChecker.h:46
Bool_t fFullCheck
Definition: TGeoChecker.h:45
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:43
The manager class for any TGeo geometry.
Definition: TGeoManager.h:45
Geometrical transformation package.
Definition: TGeoMatrix.h:41
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
Definition: TGeoNode.h:41
Base class describing geometry overlaps.
Definition: TGeoOverlap.h:41
Base abstract class for all shapes.
Definition: TGeoShape.h:26
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:49
Finder class handling voxels.
2-D histogram with a float per channel (see TH1 documentation)}
Definition: TH2.h:251
Mother of all ROOT objects.
Definition: TObject.h:37
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
double dist(Rotation3D const &r1, Rotation3D const &r2)
Definition: 3DDistances.cxx:48
REAL * vertex
Definition: triangle.c:513