401 if (!
gROOT->GetListOfGeometries()->FindObject(
this))
gROOT->GetListOfGeometries()->Add(
this);
402 if (!
gROOT->GetListOfBrowsables()->FindObject(
this))
gROOT->GetListOfBrowsables()->Add(
this);
417 if (
fgLock)
Fatal(
"Init",
"New geometry created while the old one locked !!!");
507 fParticleName(gm.fParticleName),
508 fVisDensity(gm.fVisDensity),
509 fExplodedView(gm.fExplodedView),
510 fVisOption(gm.fVisOption),
511 fVisLevel(gm.fVisLevel),
512 fNsegments(gm.fNsegments),
513 fNtracks(gm.fNtracks),
514 fMaxVisNodes(gm.fMaxVisNodes),
515 fCurrentTrack(gm.fCurrentTrack),
518 fLoopVolumes(gm.fLoopVolumes),
519 fStreamVoxels(gm.fStreamVoxels),
520 fIsGeomReading(gm.fIsGeomReading),
523 fTimeCut(gm.fTimeCut),
524 fDrawExtra(gm.fDrawExtra),
525 fMatrixTransform(gm.fMatrixTransform),
526 fMatrixReflection(gm.fMatrixReflection),
527 fActivity(gm.fActivity),
528 fIsNodeSelectable(gm.fIsNodeSelectable),
529 fPainter(gm.fPainter),
530 fMatrices(gm.fMatrices),
532 fVolumes(gm.fVolumes),
533 fPhysicalNodes(gm.fPhysicalNodes),
534 fGShapes(gm.fGShapes),
535 fGVolumes(gm.fGVolumes),
537 fPdgNames(gm.fPdgNames),
538 fGDMLMatrices(gm.fGDMLMatrices),
539 fOpticalSurfaces(gm.fOpticalSurfaces),
540 fSkinSurfaces(gm.fSkinSurfaces),
541 fBorderSurfaces(gm.fBorderSurfaces),
542 fMaterials(gm.fMaterials),
545 fOverlaps(gm.fOverlaps),
546 fRegions(gm.fRegions),
548 fCurrentNavigator(gm.fCurrentNavigator),
549 fCurrentVolume(gm.fCurrentVolume),
550 fTopVolume(gm.fTopVolume),
551 fTopNode(gm.fTopNode),
552 fMasterVolume(gm.fMasterVolume),
553 fGLMatrix(gm.fGLMatrix),
554 fUniqueVolumes(gm.fUniqueVolumes),
555 fClippingShape(gm.fClippingShape),
556 fElementTable(gm.fElementTable),
557 fNodeIdArray(gm.fNodeIdArray),
559 fPaintVolume(gm.fPaintVolume),
560 fUserPaintVolume(gm.fUserPaintVolume),
561 fHashVolumes(gm.fHashVolumes),
562 fHashGVolumes(gm.fHashGVolumes),
563 fHashPNE(gm.fHashPNE),
564 fArrayPNE(gm.fArrayPNE),
575 for(
Int_t i=0; i<1024; i++)
604 for(
Int_t i=0; i<1024; i++)
677 if (
gROOT->GetListOfFiles()) {
678 gROOT->GetListOfGeometries()->Remove(
this);
679 gROOT->GetListOfBrowsables()->Remove(
this);
757 auto pos =
fProperties.insert(ConstPropMap_t::value_type(property, value));
759 Warning(
"AddProperty",
"Property \"%s\" already exists with value %g", property, (pos.first)->second);
772 if (error) *error =
kTRUE;
775 if (error) *error =
kFALSE;
786 if (error) *error =
kTRUE;
791 while (pos < i) { ++it; ++pos; }
792 if (error) *error =
kFALSE;
851 Error(
"AddVolume",
"invalid volume");
897 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
902 fNavigators.insert(NavigatorsMap_t::value_type(threadId, array));
920 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
934 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
946 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
948 Error(
"SetCurrentNavigator",
"No navigator defined for this thread\n");
949 std::cout <<
" thread id: " << threadId << std::endl;
955 Error(
"SetCurrentNavigator",
"Navigator %d not existing for this thread\n", index);
956 std::cout <<
" thread id: " << threadId << std::endl;
978 for (NavigatorsMap_t::iterator it =
fNavigators.begin();
1004 Error(
"Remove navigator",
"Navigator %p not found", nav);
1014 Error(
"SetMaxThreads",
"Cannot set maximum number of threads before closing the geometry");
1020 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
1024 fNavigators.insert(NavigatorsMap_t::value_type(threadId, array));
1082 TTHREAD_TLS(
Int_t) tid = -1;
1084 if (ttid > -1)
return ttid;
1088 if (it !=
fgThreadId->end())
return it->second;
1114 "TGeoManager",
this,
"SetVisibility(TObject*,Bool_t)");
1193 if (!vorig || !vnew)
return nref;
1196 if (morig) checkmed =
kTRUE;
1200 Error(
"ReplaceVolume",
"Replacement volume %s has no medium and it is not an assembly",
1204 if (mnew && checkmed) {
1206 Warning(
"ReplaceVolume",
"Replacement volume %s has different medium than original volume %s",
1219 for (i=0; i<nvol; i++) {
1222 if (vol==vorig || vol==vnew)
continue;
1224 for (j=0; j<nd; j++) {
1229 if (mnew && mnew->
GetId()!=morig->
GetId()) ierr++;
1234 Info(
"ReplaceVolume",
"%s replaced with assembly and declared NON-OVERLAPPING!",node->
GetName());
1245 Info(
"ReplaceVolume",
"%s inside substitute assembly %s declared NON-OVERLAPPING!",node->
GetName(),vnew->
GetName());
1251 if (ierr)
Warning(
"ReplaceVolume",
"Volumes should not be replaced with assemblies if they are positioned in containers having a different medium ID.\n %i occurrences for assembly replacing volume %s",
1263 Warning(
"TransformVolumeToAssembly",
"Volume %s not found", vname);
1271 while (index<indmax) {
1280 Warning(
"TransformVolumeToAssembly",
"Volume %s already assembly", toTransform->
GetName());
1282 Warning(
"TransformVolumeToAssembly",
"Volume %s has no daughters, cannot transform", toTransform->
GetName());
1284 Warning(
"TransformVolumeToAssembly",
"Volume %s divided, cannot transform", toTransform->
GetName());
1288 if (index >= indmax)
return count;
1290 if (!strcmp(toTransform->
GetName(),vname)) replace =
kTRUE;
1390 return TGeoBuilder::Instance(
this)->
Medium(
name, numed, nmat, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
1538 Warning(
"CloseGeometry",
"geometry already closed");
1542 Error(
"CloseGeometry",
"you MUST call SetTopVolume() first !");
1545 if (!
gROOT->GetListOfGeometries()->FindObject(
this))
gROOT->GetListOfGeometries()->Add(
this);
1546 if (!
gROOT->GetListOfBrowsables()->FindObject(
this))
gROOT->GetListOfBrowsables()->Add(
this);
1557 Int_t nnavigators = 0;
1565 Error(
"CloseGeometry",
"Master volume not streamed");
1576 for (
Int_t i=0; i<nnavigators; i++) {
1597 if (
fgVerboseLevel>0)
Info(
"CloseGeometry",
"----------------modeler ready----------------");
1615 for (
Int_t i=0; i<nnavigators; i++) {
1623 Info(
"CloseGeometry",
"----------------modeler ready----------------");
1754 while ((node=next())) {
1781 Error(
"CountLevels",
"Top node not defined.");
1787 if (
fgVerboseLevel>1 && fixrefs)
Info(
"CountLevels",
"Fixing volume reference counts");
1791 Int_t maxvertices = 1;
1792 while ((node=next())) {
1795 for (
Int_t ibit=10; ibit<14; ibit++) {
1853 if (tmin<0 || tmin>=tmax || nframes<1)
return;
1874 for (i=0; i<3; i++) {
1875 start[i+3] = 20 + 1.3*start[i+3];
1876 end[i+3] = 20 + 0.9*end[i+3];
1878 for (i=0; i<6; i++) {
1879 dd[i] = (end[i]-start[i])/10.;
1883 dlong = (-206-dlong)/
Double_t(nframes);
1884 dlat = (126-dlat)/
Double_t(nframes);
1885 dpsi = (75-dpsi)/
Double_t(nframes);
1889 for (i=0; i<nframes; i++) {
1893 for (j=0; j<6; j++)
box[j]+=dd[j];
1919 if (track) track->
Draw(option);
1972 static char defaultname[5] = {
"XXX" };
1973 if (!
fPdgNames || !pdg)
return defaultname;
1992 Warning(
"SetPdgName",
"No more than 256 different pdg codes allowed");
2013 Error(
"AddGDMLMatrix",
"Matrix %s already added to manager", mat->
GetName());
2032 Error(
"AddOpticalSurface",
"Surface %s already added to manager", optsurf->
GetName());
2051 Error(
"AddSkinSurface",
"Surface %s already added to manager", surf->
GetName());
2070 Error(
"AddBorderSurface",
"Surface %s already added to manager", surf->
GetName());
2101 bombx = bomby = bombz = bombr = 1.3;
2183 if (trk)
return trk;
2189 if (trk)
return trk;
2202 if (track->
GetId() ==
id)
return track;
2215 if (track->
GetId()==
id)
return track;
2228 if (track->
GetId() ==
id)
return i;
2255 const Int_t nmax = 110;
2262 col[ 4] = col[ 5] =
kGreen-10;
2263 col[ 6] = col[ 7] =
kBlue-7;
2265 col[10] = col[11] =
kRed-10;
2271 col[24] = col[25] = col[26] =
kBlue-8;
2309 if (strcmp(volume->
GetName(),
name) && !all)
continue;
2319 if (strcmp(volume->
GetName(),
name) && !all)
continue;
2328 Warning(
"SetVolumeAttribute",
"volume: %s does not exist",
name);
2359 Info(
"SetMaxVisNodes",
"Automatic visible depth for %d visible nodes", maxnodes);
2398 if ((option>=0) && (option<3))
fVisOption=option;
2429 Info(
"SetVisLevel",
"Automatic visible depth disabled");
2450 Error(
"OptimizeVoxels",
"Geometry must be closed first");
2455 if (fname.
IsNull()) fname =
"tgeovox.C";
2456 out.open(fname, std::ios::out);
2458 Error(
"OptimizeVoxels",
"cannot open file");
2465 out << sname.
Data()<<
"()"<<std::endl;
2466 out <<
"{" << std::endl;
2467 out <<
"//=== Macro generated by ROOT version "<<
gROOT->GetVersion()<<
" : "<<t.
AsString()<<std::endl;
2468 out <<
"//=== Voxel optimization for " <<
GetTitle() <<
" geometry"<<std::endl;
2469 out <<
"//===== <run this macro JUST BEFORE closing the geometry>"<<std::endl;
2470 out <<
" TGeoVolume *vol = 0;"<<std::endl;
2471 out <<
" // parse all voxelized volumes"<<std::endl;
2477 out<<
" vol = gGeoManager->GetVolume(\""<<vol->
GetName()<<
"\");"<<std::endl;
2480 out<<
" vol->SetCylVoxels();"<<std::endl;
2482 out<<
" vol->SetCylVoxels(kFALSE);"<<std::endl;
2485 out <<
"}" << std::endl;
2509 for (i=0; i< len; i++) {
2510 if (startstr(i)==
' ')
continue;
2511 e0 += startstr(i, 1);
2529 for (i=0; i<len; i++) {
2531 if (!level) iloop++;
2537 if (level==0) lastpp=i;
2540 if ((e0(i)==
'+') || (e0(i)==
'-') || (e0(i)==
'*')) {
2548 if ((e0(i)==
':') && (level==0)) {
2557 if (iloop==1 && (e0(0)==
'(') && (e0(len-1)==
')')) {
2562 if (foundmat)
break;
2563 if (((lastop==0) && (lastdp>0)) || ((lastpp>0) && (lastdp>lastpp) && (indop<lastpp))) {
2564 expr3 = e0(lastdp+1, len-lastdp);
2573 for (i=0; i<len; i++) {
2583 if (level<=levmin) {
2605 expr1 = e0(0, indop);
2606 expr2 = e0(indop+1, len-indop);
2617 Error(
"SaveAttributes",
"geometry must be closed first\n");
2622 if (fname.
IsNull()) fname =
"tgeoatt.C";
2623 out.open(fname, std::ios::out);
2625 Error(
"SaveAttributes",
"cannot open file");
2632 out << sname.
Data()<<
"()"<<std::endl;
2633 out <<
"{" << std::endl;
2634 out <<
"//=== Macro generated by ROOT version "<<
gROOT->GetVersion()<<
" : "<<t.
AsString()<<std::endl;
2635 out <<
"//=== Attributes for " <<
GetTitle() <<
" geometry"<<std::endl;
2636 out <<
"//===== <run this macro AFTER loading the geometry in memory>"<<std::endl;
2638 out <<
" TGeoVolume *top = gGeoManager->GetVolume(\""<<
fTopVolume->
GetName()<<
"\");"<<std::endl;
2639 out <<
" TGeoVolume *vol = 0;"<<std::endl;
2640 out <<
" TGeoNode *node = 0;"<<std::endl;
2641 out <<
" // clear all volume attributes and get painter"<<std::endl;
2642 out <<
" gGeoManager->ClearAttributes();"<<std::endl;
2643 out <<
" gGeoManager->GetGeomPainter();"<<std::endl;
2644 out <<
" // set visualization modes and bomb factors"<<std::endl;
2645 out <<
" gGeoManager->SetVisOption("<<
GetVisOption()<<
");"<<std::endl;
2646 out <<
" gGeoManager->SetVisLevel("<<
GetVisLevel()<<
");"<<std::endl;
2647 out <<
" gGeoManager->SetExplodedView("<<
GetBombMode()<<
");"<<std::endl;
2648 Double_t bombx, bomby, bombz, bombr;
2650 out <<
" gGeoManager->SetBombFactors("<<bombx<<
","<<bomby<<
","<<bombz<<
","<<bombr<<
");"<<std::endl;
2651 out <<
" // iterate volumes container and set new attributes"<<std::endl;
2660 out <<
" // draw top volume with new settings"<<std::endl;
2661 out <<
" top->Draw();"<<std::endl;
2662 out <<
" gPad->x3d();"<<std::endl;
2663 out <<
"}" << std::endl;
2797 if (phi<0) phi+=360.;
2854 if (
fgVerboseLevel>0)
Info(
"GetByteCount",
"Total size of logical tree : %i bytes", count);
2865 if ((
h =
gROOT->GetPluginManager()->FindHandler(
"TVirtualGeoPainter"))) {
2866 if (
h->LoadPlugin() == -1)
2870 Error(
"GetGeomPainter",
"could not create painter");
2884 sname = sname.
Strip();
2904 sname = sname.
Strip();
2919 if (!vol)
return -1;
2929 if (index <= 0)
return 0;
2931 for (
Int_t i=0; i<index; i++) {
2933 if (other == mat)
continue;
2934 if (other->
IsEq(mat))
return other;
2945 sname = sname.
Strip();
2956 sname = sname.
Strip();
2969 if (med->
GetId()==numed)
return med;
2993 sname = sname.
Strip();
3178 return TGeoBuilder::Instance(
this)->
MakeCtub(
name, medium, rmin, rmax, dz, phi1, phi2, lx, ly, lz, tx, ty, tz);
3247 return TGeoBuilder::Instance(
this)->
MakeTrap(
name, medium, dz, theta, phi,
h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
3258 return TGeoBuilder::Instance(
this)->
MakeGtra(
name, medium, dz, theta, phi, twist,
h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
3282 Error(
"SetAlignableEntry",
"An alignable object with name %s already existing. NOT ADDED !", unique_name);
3291 if (!added)
Error(
"SetAlignableEntry",
"A PN entry: has already uid=%i", uid);
3321 if (index<0 ||
fKeyPNEId[index]!=uid)
return NULL;
3368 keys[index+1] = uid;
3369 values[index+1] = ientry;
3382 for (i=
fNPNEId-1; i>index; i--) {
3399 Error(
"MakeAlignablePN",
"No alignable object named %s found !",
name);
3411 Error(
"MakeAlignablePN",
"No alignable object specified !");
3414 const char *path = entry->
GetTitle();
3416 Error(
"MakeAlignablePN",
"Alignable object %s poins to invalid path: %s",
3434 Error(
"MakePhysicalNode",
"path: %s not valid", path);
3498 if ((phimin==0) && (phimax==360)) {
3602 Int_t nnavigators = 0;
3606 for (
Int_t i=0; i<nnavigators; i++) {
3724 Error(
"CheckGeometryFull",
"The option string must contain a letter. See method documentation.");
3749 has_runtime =
kTRUE;
3762 Warning(
"CheckGeometry",
"Volume \"%s\" has no medium: assigned dummy medium and material", vol->
GetName());
3774 Error(
"CheckOverlaps",
"Top node not set");
3811 Info(
"Weight",
"Estimating weight of %s with %g %% precision",
fTopVolume->
GetName(), 100.*precision);
3812 printf(
" event weight err\n");
3813 printf(
"========================================\n");
3832void TGeoManager::Streamer(
TBuffer &R__b)
3886 cmd =
TString::Format(
"TGDMLWrite::StartGDMLWriting(gGeoManager,\"%s\",\"%s\")", filename, option);
3887 gROOT->ProcessLineFast(cmd);
3893 if (!
f ||
f->IsZombie()) {
3894 Error(
"Export",
"Cannot open file");
3991 ::Warning(
"TGeoManager::Import",
"TGeoMananager in lock mode. NOT IMPORTING new geometry");
3994 if (!filename)
return 0;
4000 if (strstr(filename,
".gdml")) {
4002 new TGeoManager(
"GDMLImport",
"Geometry imported from GDML");
4007 ::Error(
"TGeoManager::Import",
"Cannot open file");
4020 if (strstr(filename,
"http"))
f =
TFile::Open(filename,
"CACHEREAD");
4022 if (!
f ||
f->IsZombie()) {
4023 ::Error(
"TGeoManager::Import",
"Cannot open file");
4029 TIter next(
f->GetListOfKeys());
4031 while ((key = (
TKey*)next())) {
4032 if (strcmp(key->
GetClassName(),
"TGeoManager") != 0)
continue;
4061 for (i=0; i<nelem; i++) {
4063 if (!elem)
continue;
4065 if (!elem_table)
continue;
4066 if (elem != elem_table) {
4075 if (!elem)
continue;
4077 if (!elem_table)
continue;
4078 if (elem != elem_table) {
4097 while ((obj = next())) {
4165 Error(
"SetUseParallelWorldNav",
"No parallel world geometry defined. Use CreateParallelWorld.");
4173 Error(
"SetUseParallelWorldNav",
"The geometry must be closed first");
static RooMathCoreReg dummy
TGeoManager * gGeoManager
R__EXTERN TGeoIdentity * gGeoIdentity
R__EXTERN TStyle * gStyle
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
Using a TBrowser one can browse all ROOT objects.
virtual void RecursiveRemove(TObject *obj)
Recursively remove obj from browser.
static const char * GetFloatFormat()
return current printf format for float members, default "%e"
static void SetFloatFormat(const char *fmt="%e")
set printf format for float/double members, default "%e" to change format only for doubles,...
static const char * GetDoubleFormat()
return current printf format for double members, default "%.14e"
static void SetDoubleFormat(const char *fmt="%.14e")
set printf format for double members, default "%.14e" use it after SetFloatFormat,...
Buffer base class used for serializing objects.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
virtual Int_t GetSize() const
Return the capacity of the collection, i.e.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
const char * AsString() const
Return the date & time as a string (ctime() format).
Small helper to keep current directory context.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
This class is used in the process of reading and writing the GDML "matrix" tag.
Bool_t IsVisTouched() const
void SetVisStreamed(Bool_t vis=kTRUE)
Mark attributes as "streamed to file".
void SetVisTouched(Bool_t vis=kTRUE)
Mark visualization attributes as "modified".
void SetVisBranch()
Set branch type visibility.
void Node(const char *name, Int_t nr, const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot, Bool_t isOnly, Float_t *upar, Int_t npar=0)
Create a node called <name_nr> pointing to the volume called <name> as daughter of the volume called ...
TGeoVolume * MakePgon(const char *name, TGeoMedium *medium, Double_t phi, Double_t dphi, Int_t nedges, Int_t nz)
Make in one step a volume pointing to a polygone shape with given medium.
TGeoVolume * MakeGtra(const char *name, TGeoMedium *medium, Double_t dz, Double_t theta, Double_t phi, Double_t twist, Double_t h1, Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2, Double_t tl2, Double_t alpha2)
Make in one step a volume pointing to a twisted trapezoid shape with given medium.
TGeoVolume * MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
Make a TGeoXtru-shaped volume with nz planes.
TGeoVolume * MakePcon(const char *name, TGeoMedium *medium, Double_t phi, Double_t dphi, Int_t nz)
Make in one step a volume pointing to a polycone shape with given medium.
TGeoVolume * MakeTrap(const char *name, TGeoMedium *medium, Double_t dz, Double_t theta, Double_t phi, Double_t h1, Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2, Double_t tl2, Double_t alpha2)
Make in one step a volume pointing to a trapezoid shape with given medium.
Int_t AddShape(TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
TGeoVolume * MakeTorus(const char *name, TGeoMedium *medium, Double_t r, Double_t rmin, Double_t rmax, Double_t phi1=0, Double_t dphi=360)
Make in one step a volume pointing to a torus shape with given medium.
static TGeoBuilder * Instance(TGeoManager *geom)
Return pointer to singleton.
TGeoVolume * MakeEltu(const char *name, TGeoMedium *medium, Double_t a, Double_t b, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakeHype(const char *name, TGeoMedium *medium, Double_t rin, Double_t stin, Double_t rout, Double_t stout, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoMaterial * Material(const char *name, Double_t a, Double_t z, Double_t dens, Int_t uid, Double_t radlen=0, Double_t intlen=0)
Create material with given A, Z and density, having an unique id.
TGeoVolume * MakeTube(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakePara(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz, Double_t alpha, Double_t theta, Double_t phi)
Make in one step a volume pointing to a parallelepiped shape with given medium.
Int_t AddTransformation(TGeoMatrix *matrix)
Add a matrix to the list. Returns index of the matrix in list.
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.
TGeoMedium * Medium(const char *name, Int_t numed, Int_t nmat, Int_t isvol, Int_t ifield, Double_t fieldm, Double_t tmaxfd, Double_t stemax, Double_t deemax, Double_t epsil, Double_t stmin)
Create tracking medium.
TGeoVolume * MakeTubs(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a tube segment shape with given medium.
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
Make in one step a volume pointing to a box shape with given medium.
void Matrix(Int_t index, Double_t theta1, Double_t phi1, Double_t theta2, Double_t phi2, Double_t theta3, Double_t phi3)
Create rotation matrix named 'mat<index>'.
TGeoVolume * Division(const char *name, const char *mother, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")
Create a new volume by dividing an existing one (GEANT3 like)
TGeoVolume * MakeParaboloid(const char *name, TGeoMedium *medium, Double_t rlo, Double_t rhi, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
TGeoVolume * MakeTrd1(const char *name, TGeoMedium *medium, Double_t dx1, Double_t dx2, Double_t dy, Double_t dz)
Make in one step a volume pointing to a TGeoTrd1 shape with given medium.
TGeoVolumeAssembly * MakeVolumeAssembly(const char *name)
Make an assembly of volumes.
TGeoVolume * MakeCons(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a cone segment shape with given medium.
Int_t AddMaterial(TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
TGeoVolume * MakeTrd2(const char *name, TGeoMedium *medium, Double_t dx1, Double_t dx2, Double_t dy1, Double_t dy2, Double_t dz)
Make in one step a volume pointing to a TGeoTrd2 shape with given medium.
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
TGeoVolume * Volume(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t npar=0)
Create a volume in GEANT3 style.
TGeoMaterial * Mixture(const char *name, Float_t *a, Float_t *z, Double_t dens, Int_t nelem, Float_t *wmat, Int_t uid)
Create mixture OR COMPOUND IMAT as composed by THE BASIC nelem materials defined by arrays A,...
TGeoVolume * MakeCone(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Make in one step a volume pointing to a cone shape with given medium.
void RegisterMatrix(TGeoMatrix *matrix)
Register a matrix to the list of matrices.
TGeoVolume * MakeCtub(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2, Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz)
Make in one step a volume pointing to a tube segment shape with given medium.
Class describing rotation + translation.
Class handling Boolean composition of shapes.
TGeoElement * GetElement(Int_t z)
Base class for chemical elements.
void SetDefined(Bool_t flag=kTRUE)
void SetUsed(Bool_t flag=kTRUE)
Matrix class used for computing global transformations Should NOT be used for node definition.
An identity transformation.
The manager class for any TGeo geometry.
static void UnlockGeometry()
Unlock current geometry.
Double_t fPhimax
lowest range for phi cut
TGeoVolume * MakeCone(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2)
Make in one step a volume pointing to a cone shape with given medium.
void AnimateTracks(Double_t tmin=0, Double_t tmax=5E-8, Int_t nframes=200, Option_t *option="/*")
Draw animation of tracks.
void AddSkinSurface(TGeoSkinSurface *surf)
Add skin surface;.
TGeoVolume * MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
Make a TGeoXtru-shaped volume with nz planes.
Double_t * FindNormalFast()
Computes fast normal to next crossed boundary, assuming that the current point is close enough to the...
TGeoVolume * MakePcon(const char *name, TGeoMedium *medium, Double_t phi, Double_t dphi, Int_t nz)
Make in one step a volume pointing to a polycone shape with given medium.
void Browse(TBrowser *b)
Describe how to browse this object.
Int_t fRaytraceMode
Flag for multi-threading.
Double_t fVisDensity
particles to be drawn
TGeoNavigator * AddNavigator()
Add a navigator in the list of navigators.
TVirtualGeoTrack * GetTrackOfId(Int_t id) const
Get track with a given ID.
TGeoMaterial * FindDuplicateMaterial(const TGeoMaterial *mat) const
Find if a given material duplicates an existing one.
TGeoVolume * Division(const char *name, const char *mother, Int_t iaxis, Int_t ndiv, Double_t start, Double_t step, Int_t numed=0, Option_t *option="")
Create a new volume by dividing an existing one (GEANT3 like)
TGeoVolume * Volume(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t npar=0)
Create a volume in GEANT3 style.
Int_t ReplaceVolume(TGeoVolume *vorig, TGeoVolume *vnew)
Replaces all occurrences of VORIG with VNEW in the geometry tree.
void DoRestoreState()
Restore a backed-up state without affecting the cache stack.
Int_t GetCurrentNodeId() const
Get the unique ID of the current node.
TGeoNode * SearchNode(Bool_t downwards=kFALSE, const TGeoNode *skipnode=0)
Returns the deepest node containing fPoint, which must be set a priori.
TGeoPNEntry * GetAlignableEntry(const char *name) const
Retrieves an existing alignable object.
TGeoVolume * fMasterVolume
top physical node
TVirtualGeoTrack * FindTrackWithId(Int_t id) const
Search the track hierarchy to find the track with the given id.
virtual Int_t GetByteCount(Option_t *option=0)
Get total size of geometry in bytes.
void TestOverlaps(const char *path="")
Geometry overlap checker based on sampling.
static EDefaultUnits GetDefaultUnits()
void RemoveMaterial(Int_t index)
Remove material at given index.
Int_t CountNodes(const TGeoVolume *vol=0, Int_t nlevels=10000, Int_t option=0)
Count the total number of nodes starting from a volume, nlevels down.
void Matrix(Int_t index, Double_t theta1, Double_t phi1, Double_t theta2, Double_t phi2, Double_t theta3, Double_t phi3)
Create rotation matrix named 'mat<index>'.
TGeoElementTable * GetElementTable()
Returns material table. Creates it if not existing.
THashList * fHashPNE
hash list of group volumes providing fast search
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
static Int_t fgVerboseLevel
Lock preventing a second geometry to be loaded.
void Init()
Initialize manager class.
Bool_t InitArrayPNE() const
Initialize PNE array for fast access via index and unique-id.
TObjArray * fPhysicalNodes
virtual ULong_t SizeOf(const TGeoNode *node, Option_t *option)
computes the total size in bytes of the branch starting with node.
TObjArray * fUniqueVolumes
static UInt_t fgExportPrecision
Maximum number of Xtru vertices.
void Node(const char *name, Int_t nr, const char *mother, Double_t x, Double_t y, Double_t z, Int_t irot, Bool_t isOnly, Float_t *upar, Int_t npar=0)
Create a node called <name_nr> pointing to the volume called <name> as daughter of the volume called ...
TGeoVolume * fPaintVolume
TGeoSkinSurface * GetSkinSurface(const char *name) const
Get skin surface with a given name;.
void UpdateElements()
Update element flags when geometry is loaded from a file.
TGeoManager()
Default constructor.
ConstPropMap_t fProperties
TGeoVolume * MakeTube(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz)
Make in one step a volume pointing to a tube shape with given medium.
void CdUp()
Go one level up in geometry.
void DoBackupState()
Backup the current state without affecting the cache stack.
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...
TGeoPNEntry * GetAlignableEntryByUID(Int_t uid) const
Retrieves an existing alignable object having a preset UID.
void AddGDMLMatrix(TGDMLMatrix *mat)
Add GDML matrix;.
void AddBorderSurface(TGeoBorderSurface *surf)
Add border surface;.
void SetClippingShape(TGeoShape *clip)
Set a user-defined shape as clipping for ray tracing.
TGeoVolume * fCurrentVolume
current navigator
void ClearOverlaps()
Clear the list of overlaps.
TGeoVolume * MakeCons(const char *name, TGeoMedium *medium, Double_t dz, Double_t rmin1, Double_t rmax1, Double_t rmin2, Double_t rmax2, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a cone segment shape with given medium.
THashList * fHashGVolumes
hash list of volumes providing fast search
static std::mutex fgMutex
Bool_t IsInPhiRange() const
True if current node is in phi range.
virtual Bool_t cd(const char *path="")
Browse the tree of nodes starting from fTopNode according to pathname.
TGeoMaterial * Material(const char *name, Double_t a, Double_t z, Double_t dens, Int_t uid, Double_t radlen=0, Double_t intlen=0)
Create material with given A, Z and density, having an unique id.
void LocalToMaster(const Double_t *local, Double_t *master) const
TString fParticleName
path to current node
static Bool_t fgLockNavigators
Number of registered threads.
void SaveAttributes(const char *filename="tgeoatt.C")
Save current attributes in a macro.
void RestoreMasterVolume()
Restore the master volume of the geometry.
virtual Int_t Export(const char *filename, const char *name="", Option_t *option="vg")
Export this geometry to a file.
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.
Int_t GetUID(const char *volname) const
Retrieve unique id for a volume name. Return -1 if name not found.
TGeoShape * fClippingShape
TGeoNavigator * GetCurrentNavigator() const
Returns current navigator for the calling thread.
TObjArray * fMatrices
current painter
static Int_t GetNumThreads()
Returns number of threads that were set to use geometry.
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
void ClearNavigators()
Clear all navigators.
Int_t AddTrack(Int_t id, Int_t pdgcode, TObject *particle=0)
Add a track to the list of tracks.
Int_t AddTransformation(const TGeoMatrix *matrix)
Add a matrix to the list. Returns index of the matrix in list.
TObjArray * fOpticalSurfaces
TVirtualGeoTrack * GetParentTrackOfId(Int_t id) const
Get parent track with a given ID.
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
static Int_t GetMaxLevels()
Return maximum number of levels used in the geometry.
Double_t fTmin
highest range for phi cut
static Bool_t IsLocked()
Check lock state.
TGeoVolume * fTopVolume
current volume
void RandomRays(Int_t nrays=1000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=0, Bool_t check_norm=kFALSE)
Randomly shoot nrays and plot intersections with surfaces for current top node.
TGeoVolume * fUserPaintVolume
volume currently painted
TVirtualGeoPainter * GetGeomPainter()
Make a default painter if none present. Returns pointer to it.
void GetBranchOnlys(Int_t *isonly) const
Fill node copy numbers of current branch into an array.
TGeoNode * GetCurrentNode() const
void SetVisOption(Int_t option=0)
set drawing mode :
void SetPdgName(Int_t pdg, const char *name)
Set a name for a particle having a given pdg.
TObjArray * fBorderSurfaces
Int_t GetNAlignable(Bool_t with_uid=kFALSE) const
Retrieves number of PN entries with or without UID.
void RefreshPhysicalNodes(Bool_t lock=kTRUE)
Refresh physical nodes to reflect the actual geometry paths after alignment was applied.
static Bool_t fgLock
mutex for navigator booking in MT mode
TGeoVolume * MakePara(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz, Double_t alpha, Double_t theta, Double_t phi)
Make in one step a volume pointing to a parallelepiped shape with given medium.
void TopToMaster(const Double_t *top, Double_t *master) const
Convert coordinates from top volume frame to master.
void AddOpticalSurface(TGeoOpticalSurface *optsurf)
Add optical surface;.
Bool_t fLoopVolumes
flag that geometry is closed
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
void ClearAttributes()
Reset all attributes to default ones.
static Int_t fgMaxDaughters
Maximum level in geometry.
Bool_t fUsePWNav
Raytrace mode: 0=normal, 1=pass through, 2=transparent.
void SetRTmode(Int_t mode)
Change raytracing mode.
Bool_t CheckPath(const char *path) const
Check if a geometry path is valid without changing the state of the current navigator.
void InspectState() const
Inspects path and all flags for the current state.
void ConvertReflections()
Convert all reflections in geometry to normal rotations + reflected shapes.
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
TGeoNode * FindNextBoundary(Double_t stepmax=TGeoShape