104     fSelectedNode(nullptr),
 
 
  124     fSelectedNode(nullptr),
 
 
  160   const char symbol[4] = {
'=', 
'\\', 
'|', 
'/'};
 
  161   char progress[11] = 
"          ";
 
  188      time = 
owatch->RealTime();
 
  190      time -= 3600 * 
hours;
 
  193      seconds = (
Int_t)time;
 
  215   for (i = 0; i < 
nchar; i++)
 
  218   for (i = 
nchar + 1; i < 10; i++)
 
  225   else if (
size < 100000)
 
 
  257   Info(
"CheckBoundaryErrors", 
"Top volume is %s", 
tvol->GetName());
 
  272   bug->Branch(
"pos", xyz, 
"xyz[3]/D");
 
  273   bug->Branch(
"dir", dir, 
"dir[3]/D");
 
  274   bug->Branch(
"push", &
relp, 
"push/D");
 
  275   bug->Branch(
"path", &path, 
"path/C");
 
  276   bug->Branch(
"cdir", &
cdir, 
"cdir/C");
 
  278   dl[0] = 
box->GetDX();
 
  279   dl[1] = 
box->GetDY();
 
  280   dl[2] = 
box->GetDZ();
 
  281   ori[0] = (
box->GetOrigin())[0];
 
  282   ori[1] = (
box->GetOrigin())[1];
 
  283   ori[2] = (
box->GetOrigin())[2];
 
  288   TH1F *
hnew = 
new TH1F(
"hnew", 
"Precision pushing", 30, -20., 10.);
 
  289   TH1F *
hold = 
new TH1F(
"hold", 
"Precision pulling", 30, -20., 10.);
 
  298   printf(
"Random box : %f, %f, %f, %f, %f, %f\n", 
ori[0], 
ori[1], 
ori[2], 
dl[0], 
dl[1], 
dl[2]);
 
  299   printf(
"Start... %i points\n", ntracks);
 
  304   while (
igen < ntracks) {
 
  330      for (
Int_t i = 0; i < 30; ++i) {
 
  341               printf(
"Forward error i=%d p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n", i, xyz[0], xyz[1], xyz[2],
 
  352      for (
Int_t i = 0; i < 30; ++i) {
 
  363               printf(
"Backward error i=%d p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n", i, xyz[0], xyz[1], xyz[2],
 
  394    new TCanvas(
"c3", 
"Plot", 600, 600);
 
 
  415   bug->SetBranchAddress(
"pos", xyz);
 
  416   bug->SetBranchAddress(
"dir", dir);
 
  417   bug->SetBranchAddress(
"push", &push);
 
  418   bug->SetBranchAddress(
"path", &path);
 
  419   bug->SetBranchAddress(
"cdir", &
cdir);
 
  426         printf(
"%-9s error push=%g p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n", 
cdir, push, xyz[0], xyz[1],
 
  427                xyz[2], 1., 1., path);
 
  435      printf(
"%-9s error push=%g p=%5.4f %5.4f %5.4f s=%5.4f dot=%5.4f path=%s\n", 
cdir, push, xyz[0], xyz[1], xyz[2],
 
  443         nxyz[
j] = xyz[
j] + step * (1. + 0.1 * push) * dir[
j];
 
  457      pm->SetMarkerStyle(2);
 
  458      pm->SetMarkerSize(0.2);
 
  463         nxyz[
j] = xyz[
j] + step * dir[
j];
 
  466      pm1->SetMarkerStyle(2);
 
  467      pm1->SetMarkerSize(0.2);
 
 
  510   TCanvas *
c = 
new TCanvas(
"overlaps", 
"Overlaps by sampling", 800, 800);
 
  514      printf(
"====================================================================\n");
 
  515      printf(
"STAGE 1: Overlap checking by sampling within 10 microns\n");
 
  516      printf(
"====================================================================\n");
 
  520      printf(
"====================================================================\n");
 
  521      printf(
"STAGE 2: Global overlap/extrusion checking within 10 microns\n");
 
  522      printf(
"====================================================================\n");
 
  542   printf(
"====================================================================\n");
 
  543   printf(
"STAGE 3: Propagating %i tracks starting from vertex\n and counting number of boundary crossings...\n",
 
  545   printf(
"====================================================================\n");
 
  555   for (i = 0; i < ntracks; i++) {
 
  567      printf(
"No boundary crossed\n");
 
  576   printf(
"Time per track for full geometry traversal: %g [ms], per crossing: %g [ms]\n", 
time2, 
time3);
 
  580   printf(
"====================================================================\n");
 
  581   printf(
"STAGE 4: How much navigation time per volume per next+safety call\n");
 
  582   printf(
"====================================================================\n");
 
  596   while ((current = next())) {
 
  614   c1->SetTopMargin(0.15);
 
  615   TFile *
f = 
new TFile(
"statistics.root", 
"RECREATE");
 
  616   TH1F *
h = 
new TH1F(
"h", 
"number of boundary crossings per volume", 3, 0, 3);
 
  622   for (i = 0; i < 
nuid; i++) {
 
  631   h->LabelsOption(
">", 
"X");
 
  634   TCanvas *
c2 = 
new TCanvas(
"c3", 
"time spent per volume in navigation", 10, 10, 900, 500);
 
  636   c2->SetTopMargin(0.15);
 
  637   TH2F *h2 = 
new TH2F(
"h2", 
"time per FNB call vs. ndaughters", 100, 0, 100, 100, 0, 15);
 
  639   h2->SetMarkerStyle(2);
 
  640   TH1F *
h1 = 
new TH1F(
"h1", 
"percent of time spent per volume", 3, 0, 3);
 
  644   for (i = 0; i < 
nuid; i++) {
 
  657   c3->SetTopMargin(0.15);
 
 
  684         printf(
"Error in trying to cross boundary of %s\n", current->
GetName());
 
 
  729      Error(
"SetNmeshPoints", 
"Cannot allow less than 1000 points for checking - set to 1000");
 
 
  755   for (
Int_t i = 0; i < 1000000; i++) {
 
  793      printf(
"Time for volume %s (shape=%s): %g [ms] ndaughters=%d ncross=%d\n", vol->
GetName(),
 
 
  818   pm->SetMarkerColor(2); 
 
  819   pm->SetMarkerStyle(8);
 
  820   pm->SetMarkerSize(0.4);
 
  823   pm->SetMarkerColor(4); 
 
  824   pm->SetMarkerStyle(8);
 
  825   pm->SetMarkerSize(0.4);
 
  828   pm->SetMarkerColor(6); 
 
  829   pm->SetMarkerStyle(8);
 
  830   pm->SetMarkerSize(0.4);
 
  843   for (i = 0; i < 
nrays; i++) {
 
  865         printf(
"#### NOTHING BACK ###########################\n");
 
  874      for (
j = 0; 
j < k; 
j++) {
 
  888      dw = 
dx * dir[0] + 
dy * dir[1] + 
dz * dir[2];
 
  926            dw = 
dx + dir[0] + 
dy * dir[1] + 
dz * dir[2];
 
  960                  printf(
"### BOUNDARY MISSED BACK #########################\n");
 
 
  994   for (
Int_t i = 0; i < numPoints; i++) {
 
 
 1015   if (
vol1->IsAssembly() || 
vol2->IsAssembly())
 
 1089               nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1094               nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1121               nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1126               nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1151            nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1156            nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1177            nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 1182            nodeovlp->SetNextPoint(point[0], point[1], point[2]);
 
 
 1201   if (
voxels->NeedRebuild()) {
 
 1239            Error(
"CheckOverlapsBySampling", 
"No point inside volume!!! - aborting");
 
 1250      for (
id = 0; 
id < 
ncheck; 
id++) {
 
 1288               cindex = 
node1->GetVolume()->GetCurrentNodeIndex();
 
 1293            cindex = 
node2->GetVolume()->GetCurrentNodeIndex();
 
 1298               cindex = 
node2->GetVolume()->GetCurrentNodeIndex();
 
 1307         if (
nodeovlp->GetPolyMarker()->GetN() < 100)
 
 1313   nav->GetCache()->ReleaseInfo();
 
 1321   Info(
"CheckOverlapsBySampling", 
"#Found %d overlaps adding-up to %g +/- %g [cm3] for daughters of %s", 
novlps,
 
 1322        capacity, err * capacity, vol->
GetName());
 
 
 1342      while ((node = 
next1())) {
 
 1365   for (
id = 0; 
id < nd; 
id++) {
 
 1367      if (
node01->IsOverlapping())
 
 1369      vox->FindOverlaps(
id);
 
 1378         if (
node02->IsOverlapping())
 
 1382         if (
node01->GetVolume()->IsAssembly()) {
 
 1384            while ((node = 
next1())) {
 
 1386                  if (
node02->GetVolume()->IsAssembly()) {
 
 1389                        if (!
node1->GetVolume()->IsAssembly()) {
 
 1402            if (
node02->GetVolume()->IsAssembly()) {
 
 1405                  if (!
node1->GetVolume()->IsAssembly()) {
 
 1416      node01->SetOverlaps(
nullptr, 0);
 
 
 1463      while ((node = 
next1())) {
 
 1476                  level = 
next1.GetLevel();
 
 1487            next1.GetPath(path);
 
 1501      Warning(
"CheckOverlaps", 
"Volume %s with %i daughters but not voxelized", vol->
GetName(), nd);
 
 1504   if (
vox->NeedRebuild()) {
 
 1515   for (
id = 0; 
id < nd; 
id++) {
 
 1517      if (
node01->IsOverlapping())
 
 1519      vox->FindOverlaps(
id);
 
 1524      path = 
node01->GetName();
 
 1530         if (
node02->IsOverlapping())
 
 1540         if (
node01->GetVolume()->IsAssembly()) {
 
 1542            while ((node = 
next1())) {
 
 1544                  next1.GetPath(path);
 
 1547                  if (
node02->GetVolume()->IsAssembly()) {
 
 1550                        if (!
node1->GetVolume()->IsAssembly()) {
 
 1559                                 level = 
next2.GetLevel();
 
 1567                                    level = 
next1.GetLevel();
 
 1600                           level = 
next1.GetLevel();
 
 1623            if (
node02->GetVolume()->IsAssembly()) {
 
 1626                  if (!
node1->GetVolume()->IsAssembly()) {
 
 1635                           level = 
next2.GetLevel();
 
 1668      node01->SetOverlaps(
nullptr, 0);
 
 
 1706   printf(
"===  Check current point : (%g, %g, %g) ===\n", point[0], point[1], point[2]);
 
 1713   printf(
"Safety radius : %f\n", close);
 
 1716      sph->SetLineColor(2);
 
 1717      sph->SetLineStyle(3);
 
 1722   pm->SetMarkerColor(2);
 
 1723   pm->SetMarkerStyle(8);
 
 1724   pm->SetMarkerSize(0.5);
 
 
 1755   default: 
Error(
"CheckShape", 
"Test number %d not existent", 
testNo);
 
 
 1785   TH1D *hist = 
new TH1D(
"hTest1", 
"Residual distance from inside/outside", 200, -20, 0);
 
 1820            printf(
"DistFromInside: (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) %f/%f(max)\n", point[0],
 
 1821                   point[1], point[2], dir[0], dir[1], dir[2], 
d1, 
dmove);
 
 1826            pmfrominside->SetNextPoint(point[0], point[1], point[2]);
 
 1827            for (
j = 0; 
j < 3; 
j++)
 
 1836         for (
j = 0; 
j < 3; 
j++)
 
 1842         for (
j = 0; 
j < 3; 
j++) {
 
 1853            printf(
"Error: (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) d1=%f d2=%f dmove=%f\n", point[0],
 
 1854                   point[1], point[2], dir[0], dir[1], dir[2], 
d1, 
d2, 
dmove);
 
 1856               printf(
" (*)DistFromOutside(%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f)  dnext = %f\n",
 
 1861               printf(
"   DistFromOutside(%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f)  dnext = %f\n",
 
 1862                      point[0] + 
d1 * dir[0], point[1] + 
d1 * dir[1], point[2] + 
d1 * dir[2], dir[0], dir[1], dir[2],
 
 1865            printf(
"   DistFromOutside(%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f)  = %f\n", 
pnew[0], 
pnew[1],
 
 1871            pmfrominside->SetNextPoint(point[0], point[1], point[2]);
 
 1872            for (
j = 0; 
j < 3; 
j++)
 
 1873               point[
j] += 
d1 * dir[
j];
 
 1874            pmfrominside->SetNextPoint(point[0], point[1], point[2]);
 
 1882            for (
j = 0; 
j < 3; 
j++)
 
 1890         for (
j = 0; 
j < 3; 
j++)
 
 1896            printf(
"Error DistFromInside(%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) d1=%f d1p=%f\n", 
pnew[0],
 
 1902            pmfrominside->SetNextPoint(point[0], point[1], point[2]);
 
 1903            for (
j = 0; 
j < 3; 
j++)
 
 1904               point[
j] += 
d1 * dir[
j];
 
 1905            pmfrominside->SetNextPoint(point[0], point[1], point[2]);
 
 1913            for (
j = 0; 
j < 3; 
j++)
 
 1927   new TCanvas(
"Test01", 
"Residuals DistFromInside/Outside", 800, 600);
 
 
 1980            printf(
"Error safety (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) safe=%f  dist=%f\n", point[0],
 
 1981                   point[1], point[2], dir[0], dir[1], dir[2], 
safe, dist);
 
 1985            pm1->SetMarkerStyle(24);
 
 1986            pm1->SetMarkerSize(0.4);
 
 1988            pm1->SetNextPoint(point[0], point[1], point[2]);
 
 1989            pm1->SetNextPoint(point[0] + 
safe * dir[0], point[1] + 
safe * dir[1], point[2] + 
safe * dir[2]);
 
 1992            pm2->SetMarkerStyle(7);
 
 1993            pm2->SetMarkerSize(0.3);
 
 1995            pm2->SetNextPoint(point[0] + dist * dir[0], point[1] + dist * dir[1], point[2] + dist * dir[2]);
 
 
 2049   pm2->SetMarkerSize(0.2);
 
 2078            printf(
"Error point outside (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) =%g olddist=%g\n",
 
 2079                   point[0], point[1], point[2], dir[0], dir[1], dir[2], dist, 
olddist);
 
 2080            printf(
"         old point: (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f)\n", 
oldpoint[0],
 
 2087               pm1->SetMarkerStyle(24);
 
 2088               pm1->SetMarkerSize(0.4);
 
 2091            pm1->SetNextPoint(point[0], point[1], point[2]);
 
 2099               printf(
"Error DistFromInside(%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f) =%g olddist=%g\n",
 
 2100                      point[0], point[1], point[2], dir[0], dir[1], dir[2], dist, 
olddist);
 
 2102               printf(
"         old point: (%19.15f, %19.15f, %19.15f, %19.15f, %19.15f, %19.15f)\n", 
oldpoint[0],
 
 2110                  pm1->SetMarkerStyle(24);
 
 2111                  pm1->SetMarkerSize(0.4);
 
 2114               pm1->SetNextPoint(point[0], point[1], point[2]);
 
 2124            point[
j] += dist * dir[
j];
 
 2129            printf(
"Error safety (%19.15f, %19.15f, %19.15f) safe=%g\n", point[0], point[1], point[2], 
safe);
 
 2135               pm1->SetMarkerStyle(24);
 
 2136               pm1->SetMarkerSize(0.4);
 
 2139            pm1->SetNextPoint(point[0], point[1], point[2]);
 
 2156         if ((
itot % 10) == 0)
 
 2157            pm2->SetNextPoint(point[0], point[1], point[2]);
 
 
 2191   printf(
"=== Lego plot sph. => nrays=%i\n", 
ntot);
 
 2192   for (i = 1; i <= 
nphi; i++) {
 
 2202         start[0] = start[1] = start[2] = 1E-3;
 
 2220         while (step < 1
E10) {
 
 2248         hist->
Fill(phi, theta, 
x);
 
 
 2305      if ((
ic < 0) || (
ic >= 128))
 
 2313         pm->AddAt(marker, 
ic);
 
 2318   printf(
"Number of visible points : %i\n", i);
 
 2321   printf(
"efficiency : %g\n", ratio);
 
 2325         marker->
Draw(
"SAME");
 
 2329   printf(
"---Make them visible with : gGeoManager->GetTopVolume()->VisibleDaughters();\n");
 
 
 2411         line->SetPoint(
ipoint++, start[0], start[1], start[2]);
 
 2433         } 
else if (
endnode->IsOnScreen())
 
 2437            line->SetPoint(
ipoint, point[0], point[1], point[2]);
 
 2442               normline->SetPoint(0, point[0], point[1], point[2]);
 
 2454            line->SetPoint(
ipoint++, point[0], point[1], point[2]);
 
 2460               normline->SetPoint(0, point[0], point[1], point[2]);
 
 2471   for (
Int_t m = 0; 
m < 
pm->GetEntriesFast(); 
m++) {
 
 2476   printf(
"number of segments : %i\n", i);
 
 
 2522      while (
index >= 0) {
 
 2553            xyz[0] = point[0] - eps[0] + 2 * eps[0] * 
gRandom->
Rndm();
 
 2554            xyz[1] = point[1] - eps[1] + 2 * eps[1] * 
gRandom->
Rndm();
 
 2555            xyz[2] = point[2] - eps[2] + 2 * eps[2] * 
gRandom->
Rndm();
 
 2559            dist1 = 
TMath::Sqrt((xyz[0] - point[0]) * (xyz[0] - point[0]) + (xyz[1] - point[1]) * (xyz[1] - point[1]) +
 
 2560                                (xyz[2] - point[2]) * (xyz[2] - point[2]));
 
 2583                                   point[2] - eps[2] + 2 * eps[2] * 
gRandom->
Rndm());
 
 2585      if (
node1 != node) {
 
 
 2618      printf(
"empty input array\n");
 
 2640   while (step < 1
E10) {
 
 2643         if (forward < 1E-3) {
 
 
 2723   for (i = 0; i < 
npoints; i++) {
 
 2729   printf(
"Generation time :\n");
 
 2735   for (i = 0; i < 
npoints; i++) {
 
 2742         if (
node1 != node) {
 
 2743            printf(
"Difference for x=%g y=%g z=%g\n", xyz[3 * i], xyz[3 * i + 1], xyz[3 * i + 2]);
 
 
 2762   printf(
"Checking overlaps for path :\n");
 
 2819   ntpl->Draw(
"z:y:x");
 
 2826   printf(
"using FindNode...\n");
 
 2833      if (
cpath.Contains(path)) {
 
 2834         markthis->SetNextPoint(xyz[3 * 
j], xyz[3 * 
j + 1], xyz[3 * 
j + 2]);
 
 2848         pm->AddAt(marker, 
ic);
 
 2853         if (overlaps->
IndexOf(node) < 0)
 
 2854            overlaps->
Add(node);
 
 2867      printf(
"list of overlapping nodes :\n");
 
 
 2929      if ((
iin % 100000) == 0 || 
igen > 1
E8) {
 
 2942         eps = 
sigma / weight;
 
 2952               printf(
"%8dK: %14.7g kg  %g %%\n", 
igen / 1000, weight, eps * 100);
 
 
 2979      point = xyz + 3 * i;
 
 2995   nav->GetCache()->ReleaseInfo();
 
 2996   time = 
timer.CpuTime();
 
 
std::ios_base::fmtflags fFlags
 
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
 
int Int_t
Signed integer 4 bytes (int)
 
char Char_t
Character 1 byte (char)
 
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
 
double Double_t
Double 8 bytes.
 
long long Long64_t
Portable signed long integer 8 bytes.
 
const char Option_t
Option string (const char)
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t nchar
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t points
 
Option_t Option_t TPoint TPoint percent
 
R__EXTERN TGeoIdentity * gGeoIdentity
 
R__EXTERN TRandom * gRandom
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
R__EXTERN TStyle * gStyle
 
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
 
virtual Color_t GetLineColor() const
Return the line color.
 
virtual void SetLineColor(Color_t lcolor)
Set the line color.
 
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
 
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
 
virtual Double_t GetBinCenter(Int_t bin) const
Return center of bin.
 
Generic 3D primitive description class.
 
Bool_t SetRawSizes(UInt_t reqPnts, UInt_t reqPntsCapacity, UInt_t reqSegs, UInt_t reqSegsCapacity, UInt_t reqPols, UInt_t reqPolsCapacity)
Set kRaw tessellation section of buffer with supplied sizes.
 
A ROOT file is an on-disk file, usually with extension .root, that stores objects in a file-system-li...
 
Geometry checking package.
 
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.
 
Bool_t * fFlags
Array of timing per volume.
 
TStopwatch * fTimer
Array of flags per volume.
 
void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option) override
Test for shape navigation methods.
 
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 OpProgress(const char *opname, Long64_t current, Long64_t size, TStopwatch *watch=nullptr, Bool_t last=kFALSE, Bool_t refresh=kFALSE, const char *msg="") override
Print current operation progress.
 
TGeoNode * SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path) override
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.) override
Draw point (x,y,z) over the picture of the daughters of the volume containing this point.
 
Double_t Weight(Double_t precision=0.01, Option_t *option="v") override
Estimate weight of top level volume with a precision SIGMA(W)/W better than PRECISION.
 
void ShapeNormal(TGeoShape *shape, Int_t nsamples, Option_t *option)
Check of validity of the normal for a given shape.
 
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.
 
void CheckBoundaryReference(Int_t icheck=-1) override
Check the boundary errors reference file created by CheckBoundaryErrors method.
 
Double_t * fVal2
Array of number of crossings per volume.
 
Bool_t TestVoxels(TGeoVolume *vol, Int_t npoints=1000000) override
Returns optimal voxelization type for volume vol.
 
TGeoManager * fGeoManager
 
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 ShapeSafety(TGeoShape *shape, Int_t nsamples, Option_t *option)
Check of validity of safe distance for a given shape.
 
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="") override
Generate a lego plot fot the top volume, according to option.
 
void CheckGeometry(Int_t nrays, Double_t startx, Double_t starty, Double_t startz) const override
Shoot nrays with random directions from starting point (startx, starty, startz) in the reference fram...
 
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.
 
void PrintOverlaps() const override
Print the current list of overlaps held by the manager class.
 
TGeoNode * fSelectedNode
Timer.
 
void CheckGeometryFull(Bool_t checkoverlaps=kTRUE, Bool_t checkcrossings=kTRUE, Int_t nrays=10000, const Double_t *vertex=nullptr) override
Geometry checking.
 
void SetNmeshPoints(Int_t npoints=1000) override
Set number of points to be generated on the shape outline when checking for overlaps.
 
void CheckBoundaryErrors(Int_t ntracks=1000000, Double_t radius=-1.) override
Check pushes and pulls needed to cross the next boundary with respect to the position given by FindNe...
 
~TGeoChecker() override
Destructor.
 
Int_t fNmeshPoints
Number of checks for current volume.
 
void TestOverlaps(const char *path) override
Geometry overlap checker based on sampling.
 
void Test(Int_t npoints, Option_t *option) override
Check time of finding "Where am I" for n points.
 
Double_t TimingPerVolume(TGeoVolume *)
Compute timing per "FindNextBoundary" + "Safety" call.
 
void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol=nullptr, Bool_t check_norm=kFALSE) override
Randomly shoot nrays from point (startx,starty,startz) and plot intersections with surfaces for curre...
 
void RandomPoints(TGeoVolume *vol, Int_t npoints, Option_t *option) override
Draw random points in the bounding box of a volume.
 
void CheckOverlaps(const TGeoVolume *vol, Double_t ovlp=0.1, Option_t *option="") override
Check illegal overlaps for volume VOL within a limit OVLP.
 
Double_t CheckVoxels(TGeoVolume *vol, TGeoVoxelFinder *voxels, Double_t *xyz, Int_t npoints)
count voxel timing
 
Matrix class used for computing global transformations Should NOT be used for node definition.
 
void GetPath(TString &path) const
Returns the path for the current node.
 
The manager class for any TGeo geometry.
 
TGeoNode * GetMother(Int_t up=1) const
 
Double_t * FindNormalFast()
Computes fast normal to next crossed boundary, assuming that the current point is close enough to the...
 
TObjArray * GetListOfUVolumes() const
 
TObjArray * GetListOfOverlaps()
 
void CdUp()
Go one level up in geometry.
 
virtual Bool_t cd(const char *path="")
Browse the tree of nodes starting from fTopNode according to pathname.
 
void LocalToMaster(const Double_t *local, Double_t *master) const
 
void RestoreMasterVolume()
Restore the master volume of the geometry.
 
TGeoNode * FindNextDaughterBoundary(Double_t *point, Double_t *dir, Int_t &idaughter, Bool_t compmatrix=kFALSE)
Computes as fStep the distance to next daughter of the current volume.
 
TGeoNavigator * GetCurrentNavigator() const
Returns current navigator for the calling thread.
 
TGeoVolume * GetMasterVolume() const
 
TGeoNode * GetCurrentNode() const
 
void SetCurrentDirection(Double_t *dir)
 
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
 
TGeoNode * FindNextBoundary(Double_t stepmax=TGeoShape::Big(), const char *path="", Bool_t frombdr=kFALSE)
Find distance to next boundary and store it in fStep.
 
TGeoNode * Step(Bool_t is_geom=kTRUE, Bool_t cross=kTRUE)
Make a rectilinear step of length fStep from current point (fPoint) on current direction (fDirection)...
 
TGeoVolume * GetVolume(const char *name) const
Search for a named volume. All trailing blanks stripped.
 
TGeoNode * FindNextBoundaryAndStep(Double_t stepmax=TGeoShape::Big(), Bool_t compsafe=kFALSE)
Compute distance to next boundary within STEPMAX.
 
void SetCurrentPoint(Double_t *point)
 
Double_t * FindNormal(Bool_t forward=kTRUE)
Computes normal vector to the next surface that will be or was already crossed when propagating on a ...
 
TGeoNode * FindNode(Bool_t safe_start=kTRUE)
Returns deepest node containing current point.
 
const Double_t * GetCurrentPoint() const
 
TGeoVolume * MakeSphere(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t themin=0, Double_t themax=180, Double_t phimin=0, Double_t phimax=360)
Make in one step a volume pointing to a sphere shape with given medium.
 
TGeoNode * InitTrack(const Double_t *point, const Double_t *dir)
Initialize current point and current direction vector (normalized) in MARS.
 
TGeoHMatrix * GetCurrentMatrix() const
 
TGeoNode * GetTopNode() const
 
Bool_t IsSameLocation(Double_t x, Double_t y, Double_t z, Bool_t change=kFALSE)
Checks if point (x,y,z) is still in the current node.
 
const char * GetPath() const
Get path to the current node in the form /node0/node1/...
 
Int_t AddOverlap(const TNamed *ovlp)
Add an illegal overlap/extrusion to the list.
 
static void SetVerboseLevel(Int_t vl)
Return current verbosity level (static function).
 
void SetStep(Double_t step)
 
TGeoVolume * GetCurrentVolume() const
 
static Int_t GetVerboseLevel()
Set verbosity level (static function).
 
void CdTop()
Make top level node the current node.
 
Double_t Safety(Bool_t inside=kFALSE)
Compute safe distance from the current point.
 
void MasterToLocal(const Double_t *master, Double_t *local) const
 
void ResetState()
Reset current state flags.
 
void CdDown(Int_t index)
Make a daughter of current node current.
 
TList * GetListOfMaterials() const
 
TGeoVolume * GetTopVolume() const
 
void SetTopVisible(Bool_t vis=kTRUE)
make top volume visible on screen
 
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="")
Check all geometry for illegal overlaps within a limit OVLP.
 
Bool_t IsEntering() const
 
Base class describing materials.
 
Geometrical transformation package.
 
virtual void LocalToMasterVect(const Double_t *local, Double_t *master) const
convert a vector by multiplying its column vector (x, y, z, 1) to matrix inverse
 
virtual void LocalToMaster(const Double_t *local, Double_t *master) const
convert a point by multiplying its column vector (x, y, z, 1) to matrix inverse
 
TGeoMaterial * GetMaterial() const
 
Class providing navigation API for TGeo geometries.
 
A node represent a volume positioned inside another.They store links to both volumes and to the TGeoM...
 
Bool_t IsOverlapping() const
 
Bool_t IsOnScreen() const
check if this node is drawn. Assumes that this node is current
 
TGeoVolume * GetVolume() const
 
virtual TGeoMatrix * GetMatrix() const =0
 
void InspectNode() const
Inspect this node.
 
Base class describing geometry overlaps.
 
Base abstract class for all shapes.
 
virtual 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 =0
 
static void SetTransform(TGeoMatrix *matrix)
Set current transformation matrix that applies to shape.
 
void Draw(Option_t *option="") override
Draw this shape.
 
virtual Double_t Safety(const Double_t *point, Bool_t in=kTRUE) const =0
 
virtual void ComputeNormal(const Double_t *point, const Double_t *dir, Double_t *norm) const =0
 
virtual 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 =0
 
const char * GetName() const override
Get the shape name.
 
virtual Double_t Capacity() const =0
 
virtual Bool_t Contains(const Double_t *point) const =0
 
static Double_t Tolerance()
 
Class describing translations.
 
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
 
void SetVisibility(Bool_t vis=kTRUE) override
set visibility of this volume
 
TGeoMedium * GetMedium() const
 
Bool_t Contains(const Double_t *point) const
 
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
 
void Draw(Option_t *option="") override
draw top volume according to option
 
Int_t GetNdaughters() const
 
void VisibleDaughters(Bool_t vis=kTRUE)
set visibility for daughters
 
void FindOverlaps() const
loop all nodes marked as overlaps and find overlapping brothers
 
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
 
Int_t GetIndex(const TGeoNode *node) const
get index number for a given daughter
 
TGeoPatternFinder * GetFinder() const
 
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
 
TGeoShape * GetShape() const
 
virtual void DrawOnly(Option_t *option="")
draw only this volume
 
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.
 
virtual Bool_t IsVisible() const
 
void InspectShape() const
 
Finder class handling voxels.
 
1-D histogram with a double per channel (see TH1 documentation)
 
1-D histogram with a float per channel (see TH1 documentation)
 
virtual void LabelsOption(Option_t *option="h", Option_t *axis="X")
Sort bins with labels or set option(s) to draw axis with labels.
 
static void AddDirectory(Bool_t add=kTRUE)
Sets the flag controlling the automatic add of histograms in memory.
 
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
 
void Draw(Option_t *option="") override
Draw this histogram with options.
 
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
 
virtual void LabelsDeflate(Option_t *axis="X")
Reduce the number of bins for the axis passed in the option to the number of bins having a label.
 
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
 
2-D histogram with a float per channel (see TH1 documentation)
 
Int_t Fill(Double_t) override
Invalid Fill method.
 
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
 
const char * GetName() const override
Returns name of object.
 
A simple TTree restricted to a list of float variables only.
 
Int_t GetEntriesFast() const
 
Int_t IndexOf(const TObject *obj) const override
 
Int_t GetEntries() const override
Return the number of objects in array (i.e.
 
TObject * At(Int_t idx) const override
 
TObject * RemoveAt(Int_t idx) override
Remove object at index idx.
 
void Add(TObject *obj) override
 
Mother of all ROOT objects.
 
virtual const char * ClassName() const
Returns name of class to which the object belongs.
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
 
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
 
A 3-dimensional polyline.
 
virtual Int_t SetNextPoint(Double_t x, Double_t y, Double_t z)
Set point following LastPoint to x, y, z.
 
void Draw(Option_t *option="") override
Draws 3-D polymarker with its current attributes.
 
Double_t Rndm() override
Machine independent random number generator.
 
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
 
Double_t RealTime()
Stop the stopwatch (if it is running) and return the realtime (in seconds) passed between the start a...
 
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
 
Double_t CpuTime()
Stop the stopwatch (if it is running) and return the cputime (in seconds) passed between the start an...
 
void Stop()
Stop the stopwatch.
 
void Print(Option_t *option="") const override
Print the real and cpu time passed between the start and stop events.
 
void ToLower()
Change string to lower-case.
 
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
 
const char * Data() const
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
 
A TTree represents a columnar dataset.
 
Abstract class for geometry checkers.
 
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
 
Double_t ACos(Double_t)
Returns the principal value of the arc cosine of x, expressed in radians.
 
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
 
Double_t Log(Double_t x)
Returns the natural logarithm of x.
 
Double_t Sqrt(Double_t x)
Returns the square root of x.
 
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
 
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
 
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
 
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
 
constexpr Double_t TwoPi()
 
Statefull info for the current geometry level.