Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
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
18 class TTree;
19 class TGeoShape;
20 class TGeoVolume;
21 class TGeoVoxelFinder;
22 class TGeoNode;
23 class TGeoManager;
24 class TGeoMatrix;
25 class TGeoOverlap;
26 class TBuffer3D;
27 class TH2F;
28 class 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 
37 class TGeoChecker : public TObject
38 {
39 private :
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;
55  Int_t NChecksPerVolume(TGeoVolume *vol);
56  Int_t PropagateInGeom(Double_t *, Double_t *);
57  void Score(TGeoVolume *, Int_t, Double_t);
58  Double_t TimingPerVolume(TGeoVolume *);
59 public:
60  // constructors
61  TGeoChecker();
62  TGeoChecker(TGeoManager *geom);
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;
88  void SetSelectedNode(TGeoNode *node) {fSelectedNode=node;}
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