359 fCurrentNavigator = 0;
367 fMaxVisNodes = 10000;
378 memset(fPdgId, 0, 1024*
sizeof(
Int_t));
386 fIsNodeSelectable =
kFALSE;
396 fMatrixTransform =
kFALSE;
397 fMatrixReflection =
kFALSE;
415 BuildDefaultMaterials();
425 if (!
gROOT->GetListOfGeometries()->FindObject(
this))
gROOT->GetListOfGeometries()->Add(
this);
426 if (!
gROOT->GetListOfBrowsables()->FindObject(
this))
gROOT->GetListOfBrowsables()->Add(
this);
441 if (
fgLock)
Fatal(
"Init",
"New geometry created while the old one locked !!!");
524 fParticleName(gm.fParticleName),
525 fVisDensity(gm.fVisDensity),
526 fExplodedView(gm.fExplodedView),
527 fVisOption(gm.fVisOption),
528 fVisLevel(gm.fVisLevel),
529 fNsegments(gm.fNsegments),
530 fNtracks(gm.fNtracks),
531 fMaxVisNodes(gm.fMaxVisNodes),
532 fCurrentTrack(gm.fCurrentTrack),
535 fLoopVolumes(gm.fLoopVolumes),
536 fStreamVoxels(gm.fStreamVoxels),
537 fIsGeomReading(gm.fIsGeomReading),
540 fTimeCut(gm.fTimeCut),
541 fDrawExtra(gm.fDrawExtra),
542 fMatrixTransform(gm.fMatrixTransform),
543 fMatrixReflection(gm.fMatrixReflection),
544 fActivity(gm.fActivity),
545 fIsNodeSelectable(gm.fIsNodeSelectable),
546 fPainter(gm.fPainter),
547 fMatrices(gm.fMatrices),
549 fVolumes(gm.fVolumes),
550 fPhysicalNodes(gm.fPhysicalNodes),
551 fGShapes(gm.fGShapes),
552 fGVolumes(gm.fGVolumes),
554 fPdgNames(gm.fPdgNames),
555 fMaterials(gm.fMaterials),
558 fOverlaps(gm.fOverlaps),
560 fCurrentNavigator(gm.fCurrentNavigator),
561 fCurrentVolume(gm.fCurrentVolume),
562 fTopVolume(gm.fTopVolume),
563 fTopNode(gm.fTopNode),
564 fMasterVolume(gm.fMasterVolume),
565 fGLMatrix(gm.fGLMatrix),
566 fUniqueVolumes(gm.fUniqueVolumes),
567 fClippingShape(gm.fClippingShape),
568 fElementTable(gm.fElementTable),
569 fNodeIdArray(gm.fNodeIdArray),
571 fPaintVolume(gm.fPaintVolume),
572 fHashVolumes(gm.fHashVolumes),
573 fHashGVolumes(gm.fHashGVolumes),
574 fHashPNE(gm.fHashPNE),
575 fArrayPNE(gm.fArrayPNE),
585 for(
Int_t i=0; i<1024; i++)
614 for(
Int_t i=0; i<1024; i++)
677 if (gGeoManager !=
this) gGeoManager =
this;
680 if (
gROOT->GetListOfFiles()) {
681 gROOT->GetListOfGeometries()->Remove(
this);
682 gROOT->GetListOfBrowsables()->Remove(
this);
795 Error(
"AddVolume",
"invalid volume");
845 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
850 fNavigators.insert(NavigatorsMap_t::value_type(threadId, array));
868 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
882 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
894 NavigatorsMap_t::const_iterator it =
fNavigators.find(threadId);
896 Error(
"SetCurrentNavigator",
"No navigator defined for thread %ld\n", threadId);
902 Error(
"SetCurrentNavigator",
"Navigator %d not existing for thread %ld\n", index, threadId);
924 for (NavigatorsMap_t::iterator it =
fNavigators.begin();
939 for (NavigatorsMap_t::iterator it =
fNavigators.begin();
951 Error(
"Remove navigator",
"Navigator %p not found", nav);
961 Error(
"SetMaxThreads",
"Cannot set maximum number of threads before closing the geometry");
967 NavigatorsMap_t::const_iterator it =
fNavigators.find(0);
971 fNavigators.insert(NavigatorsMap_t::value_type(threadId, array));
1031 TTHREAD_TLS(
Int_t) tid = -1;
1033 if (ttid > -1)
return ttid;
1036 if (it !=
fgThreadId->end())
return it->second;
1062 "TGeoManager",
this,
"SetVisibility(TObject*,Bool_t)");
1141 if (!vorig || !vnew)
return nref;
1144 if (morig) checkmed =
kTRUE;
1148 Error(
"ReplaceVolume",
"Replacement volume %s has no medium and it is not an assembly",
1152 if (mnew && checkmed) {
1154 Warning(
"ReplaceVolume",
"Replacement volume %s has different medium than original volume %s",
1167 for (i=0; i<nvol; i++) {
1170 if (vol==vorig || vol==vnew)
continue;
1172 for (j=0; j<nd; j++) {
1177 if (mnew && mnew->
GetId()!=morig->
GetId()) ierr++;
1182 Info(
"ReplaceVolume",
"%s replaced with assembly and declared NON-OVERLAPPING!",node->
GetName());
1193 Info(
"ReplaceVolume",
"%s inside substitute assembly %s declared NON-OVERLAPPING!",node->
GetName(),vnew->
GetName());
1199 if (ierr)
Warning(
"ReplaceVolume",
"Volumes should not be replaced with assemblies if they are positioned in containers having a different medium ID.\n %i occurences for assembly replacing volume %s",
1211 Warning(
"TransformVolumeToAssembly",
"Volume %s not found", vname);
1219 while (index<indmax) {
1228 Warning(
"TransformVolumeToAssembly",
"Volume %s already assembly", toTransform->
GetName());
1230 Warning(
"TransformVolumeToAssembly",
"Volume %s has no daughters, cannot transform", toTransform->
GetName());
1232 Warning(
"TransformVolumeToAssembly",
"Volume %s divided, cannot transform", toTransform->
GetName());
1236 if (index >= indmax)
return count;
1238 if (!strcmp(toTransform->
GetName(),vname)) replace =
kTRUE;
1337 return TGeoBuilder::Instance(
this)->
Medium(name, numed, nmat, isvol, ifield, fieldm, tmaxfd, stemax, deemax, epsil, stmin);
1485 Warning(
"CloseGeometry",
"geometry already closed");
1489 Error(
"CloseGeometry",
"you MUST call SetTopVolume() first !");
1492 if (!
gROOT->GetListOfGeometries()->FindObject(
this))
gROOT->GetListOfGeometries()->Add(
this);
1493 if (!
gROOT->GetListOfBrowsables()->FindObject(
this))
gROOT->GetListOfBrowsables()->Add(
this);
1504 Int_t nnavigators = 0;
1512 Error(
"CloseGeometry",
"Master volume not streamed");
1526 for (
Int_t i=0; i<nnavigators; i++) {
1547 if (
fgVerboseLevel>0)
Info(
"CloseGeometry",
"----------------modeler ready----------------");
1565 for (
Int_t i=0; i<nnavigators; i++) {
1573 Info(
"CloseGeometry",
"----------------modeler ready----------------");
1702 while ((node=
next())) {
1729 Error(
"CountLevels",
"Top node not defined.");
1735 if (
fgVerboseLevel>1 && fixrefs)
Info(
"CountLevels",
"Fixing volume reference counts");
1739 Int_t maxvertices = 1;
1740 while ((node=
next())) {
1743 for (
Int_t ibit=10; ibit<14; ibit++) {
1801 if (tmin<0 || tmin>=tmax || nframes<1)
return;
1803 box[0] = box[1] = box[2] = 0;
1804 box[3] = box[4] = box[5] = 100;
1822 for (i=0; i<3; i++) {
1823 start[i+3] = 20 + 1.3*start[i+3];
1824 end[i+3] = 20 + 0.9*end[i+3];
1826 for (i=0; i<6; i++) {
1827 dd[i] = (end[i]-start[i])/10.;
1829 memcpy(box, start, 6*
sizeof(
Double_t));
1831 dlong = (-206-dlong)/
Double_t(nframes);
1832 dlat = (126-dlat)/
Double_t(nframes);
1833 dpsi = (75-dpsi)/
Double_t(nframes);
1837 for (i=0; i<nframes; i++) {
1841 for (j=0; j<6; j++) box[j]+=dd[j];
1867 if (track) track->
Draw(option);
1915 static char defaultname[5] = {
"XXX" };
1916 if (!
fPdgNames || !pdg)
return defaultname;
1935 Warning(
"SetPdgName",
"No more than 256 different pdg codes allowed");
1968 bombx = bomby = bombz = bombr = 1.3;
2049 if (trk)
return trk;
2055 if (trk)
return trk;
2068 if (track->
GetId() ==
id)
return track;
2081 if (track->
GetId()==
id)
return track;
2094 if (track->
GetId() ==
id)
return i;
2121 const Int_t nmax = 110;
2128 col[ 4] = col[ 5] =
kGreen-10;
2129 col[ 6] = col[ 7] =
kBlue-7;
2131 col[10] = col[11] =
kRed-10;
2137 col[24] = col[25] = col[26] =
kBlue-8;
2169 if (strstr(name,
"*")) all=
kTRUE;
2175 if (strcmp(volume->
GetName(),
name) && !all)
continue;
2185 if (strcmp(volume->
GetName(),
name) && !all)
continue;
2194 Warning(
"SetVolumeAttribute",
"volume: %s does not exist",name);
2224 Info(
"SetMaxVisNodes",
"Automatic visible depth for %d visible nodes", maxnodes);
2262 if ((option>=0) && (option<3))
fVisOption=option;
2293 Info(
"SetVisLevel",
"Automatic visible depth disabled");
2314 Error(
"OptimizeVoxels",
"Geometry must be closed first");
2319 if (fname.
IsNull()) fname =
"tgeovox.C";
2322 Error(
"OptimizeVoxels",
"cannot open file");
2329 out << sname.
Data()<<
"()"<<std::endl;
2330 out <<
"{" << std::endl;
2331 out <<
"//=== Macro generated by ROOT version "<<
gROOT->GetVersion()<<
" : "<<t.
AsString()<<std::endl;
2332 out <<
"//=== Voxel optimization for " <<
GetTitle() <<
" geometry"<<std::endl;
2333 out <<
"//===== <run this macro JUST BEFORE closing the geometry>"<<std::endl;
2334 out <<
" TGeoVolume *vol = 0;"<<std::endl;
2335 out <<
" // parse all voxelized volumes"<<std::endl;
2341 out<<
" vol = gGeoManager->GetVolume(\""<<vol->
GetName()<<
"\");"<<std::endl;
2344 out<<
" vol->SetCylVoxels();"<<std::endl;
2346 out<<
" vol->SetCylVoxels(kFALSE);"<<std::endl;
2349 out <<
"}" << std::endl;
2373 for (i=0; i< len; i++) {
2374 if (startstr(i)==
' ')
continue;
2375 e0 += startstr(i, 1);
2393 for (i=0; i<len; i++) {
2395 if (!level) iloop++;
2401 if (level==0) lastpp=i;
2404 if ((e0(i)==
'+') || (e0(i)==
'-') || (e0(i)==
'*')) {
2412 if ((e0(i)==
':') && (level==0)) {
2418 if (gGeoManager) gGeoManager->
Error(
"Parse",
"paranthesys does not match");
2421 if (iloop==1 && (e0(0)==
'(') && (e0(len-1)==
')')) {
2426 if (foundmat)
break;
2427 if (((lastop==0) && (lastdp>0)) || ((lastpp>0) && (lastdp>lastpp) && (indop<lastpp))) {
2428 expr3 = e0(lastdp+1, len-lastdp);
2437 for (i=0; i<len; i++) {
2447 if (level<=levmin) {
2469 expr1 = e0(0, indop);
2470 expr2 = e0(indop+1, len-indop);
2481 Error(
"SaveAttributes",
"geometry must be closed first\n");
2486 if (fname.
IsNull()) fname =
"tgeoatt.C";
2489 Error(
"SaveAttributes",
"cannot open file");
2496 out << sname.
Data()<<
"()"<<std::endl;
2497 out <<
"{" << std::endl;
2498 out <<
"//=== Macro generated by ROOT version "<<
gROOT->GetVersion()<<
" : "<<t.
AsString()<<std::endl;
2499 out <<
"//=== Attributes for " <<
GetTitle() <<
" geometry"<<std::endl;
2500 out <<
"//===== <run this macro AFTER loading the geometry in memory>"<<std::endl;
2502 out <<
" TGeoVolume *top = gGeoManager->GetVolume(\""<<
fTopVolume->
GetName()<<
"\");"<<std::endl;
2503 out <<
" TGeoVolume *vol = 0;"<<std::endl;
2504 out <<
" TGeoNode *node = 0;"<<std::endl;
2505 out <<
" // clear all volume attributes and get painter"<<std::endl;
2506 out <<
" gGeoManager->ClearAttributes();"<<std::endl;
2507 out <<
" gGeoManager->GetGeomPainter();"<<std::endl;
2508 out <<
" // set visualization modes and bomb factors"<<std::endl;
2509 out <<
" gGeoManager->SetVisOption("<<
GetVisOption()<<
");"<<std::endl;
2510 out <<
" gGeoManager->SetVisLevel("<<
GetVisLevel()<<
");"<<std::endl;
2511 out <<
" gGeoManager->SetExplodedView("<<
GetBombMode()<<
");"<<std::endl;
2512 Double_t bombx, bomby, bombz, bombr;
2514 out <<
" gGeoManager->SetBombFactors("<<bombx<<
","<<bomby<<
","<<bombz<<
","<<bombr<<
");"<<std::endl;
2515 out <<
" // iterate volumes coontainer and set new attributes"<<std::endl;
2524 out <<
" // draw top volume with new settings"<<std::endl;
2525 out <<
" top->Draw();"<<std::endl;
2526 out <<
" gPad->x3d();"<<std::endl;
2527 out <<
"}" << std::endl;
2659 if (phi<0) phi+=360.;
2716 if (
fgVerboseLevel>0)
Info(
"GetByteCount",
"Total size of logical tree : %i bytes", count);
2726 if ((h =
gROOT->GetPluginManager()->FindHandler(
"TVirtualGeoPainter"))) {
2731 Error(
"GetGeomPainter",
"could not create painter");
2744 sname = sname.
Strip();
2764 sname = sname.
Strip();
2779 if (!vol)
return -1;
2789 if (index <= 0)
return 0;
2791 for (
Int_t i=0; i<index; i++) {
2793 if (other == mat)
continue;
2794 if (other->
IsEq(mat))
return other;
2805 sname = sname.
Strip();
2816 sname = sname.
Strip();
2829 if (med->
GetId()==numed)
return med;
2852 sname = sname.
Strip();
3024 return TGeoBuilder::Instance(
this)->
MakeCtub(name, medium, rmin, rmax, dz, phi1, phi2, lx, ly, lz, tx, ty, tz);
3093 return TGeoBuilder::Instance(
this)->
MakeTrap(name, medium, dz, theta, phi, h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
3104 return TGeoBuilder::Instance(
this)->
MakeGtra(name, medium, dz, theta, phi, twist, h1, bl1, tl1, alpha1, h2, bl2, tl2, alpha2);
3128 Error(
"SetAlignableEntry",
"An alignable object with name %s already existing. NOT ADDED !", unique_name);
3137 if (!added)
Error(
"SetAlignableEntry",
"A PN entry: has already uid=%i", uid);
3214 keys[index+1] = uid;
3215 values[index+1] = ientry;
3228 for (i=
fNPNEId-1; i>index; i--) {
3245 Error(
"MakeAlignablePN",
"No alignable object named %s found !", name);
3257 Error(
"MakeAlignablePN",
"No alignable object specified !");
3260 const char *path = entry->
GetTitle();
3262 Error(
"MakeAlignablePN",
"Alignable object %s poins to invalid path: %s",
3280 Error(
"MakePhysicalNode",
"path: %s not valid", path);
3344 if ((phimin==0) && (phimax==360)) {
3448 Int_t nnavigators = 0;
3452 for (
Int_t i=0; i<nnavigators; i++) {
3567 Error(
"CheckGeometryFull",
"The option string must contain a letter. See method documentation.");
3592 has_runtime =
kTRUE;
3605 Warning(
"CheckGeometry",
"Volume \"%s\" has no medium: assigned dummy medium and material", vol->
GetName());
3617 Error(
"CheckOverlaps",
"Top node not set");
3654 Info(
"Weight",
"Estimating weight of %s with %g %% precision",
fTopVolume->
GetName(), 100.*precision);
3655 printf(
" event weight err\n");
3656 printf(
"========================================\n");
3675 void TGeoManager::Streamer(
TBuffer &R__b)
3729 cmd =
TString::Format(
"TGDMLWrite::StartGDMLWriting(gGeoManager,\"%s\",\"%s\")", filename, option);
3730 gROOT->ProcessLineFast(cmd);
3737 Error(
"Export",
"Cannot open file");
3820 ::Warning(
"TGeoManager::Import",
"TGeoMananager in lock mode. NOT IMPORTING new geometry");
3823 if (!filename)
return 0;
3829 if (strstr(filename,
".gdml")) {
3831 new TGeoManager(
"GDMLImport",
"Geometry imported from GDML");
3836 ::Error(
"TGeoManager::Import",
"Cannot open file");
3849 if (strstr(filename,
"http")) f =
TFile::Open(filename,
"CACHEREAD");
3852 ::Error(
"TGeoManager::Import",
"Cannot open file");
3855 if (name && strlen(name) > 0) {
3861 if (strcmp(key->GetClassName(),
"TGeoManager") != 0)
continue;
3868 if (!gGeoManager)
return 0;
3869 if (!
gROOT->GetListOfGeometries()->FindObject(gGeoManager))
gROOT->GetListOfGeometries()->Add(gGeoManager);
3870 if (!
gROOT->GetListOfBrowsables()->FindObject(gGeoManager))
gROOT->GetListOfBrowsables()->Add(gGeoManager);
3890 for (i=0; i<nelem; i++) {
3892 if (!elem)
continue;
3894 if (!elem_table)
continue;
3895 if (elem != elem_table) {
3904 if (!elem)
continue;
3906 if (!elem_table)
continue;
3907 if (elem != elem_table) {
3926 while ((obj =
next())) {
3994 Error(
"SetUseParallelWorldNav",
"No parallel world geometry defined. Use CreateParallelWorld.");
4002 Error(
"SetUseParallelWorldNav",
"The geometry must be closed first");
void SetTopVisible(Bool_t vis=kTRUE)
make top volume visible on screen
void SetPhysicalNode(TGeoPhysicalNode *node)
Setter for the corresponding physical node.
void Add(TObject *obj, const char *name=0, Int_t check=-1)
Add object with name to browser.
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="")
Classify a given point. See TGeoChecker::CheckPoint().
virtual void ClearThreadData() const
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
virtual const char * GetTitle() const
Returns title of object.
virtual Int_t GetVisLevel() const =0
Int_t AddShape(TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
TGeoNode * SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil=1E-5, const char *g3path="")
shoot npoints randomly in a box of 1E-5 arround current point.
Bool_t IsRunTimeShape() const
void CheckGeometryFull(Int_t ntracks=1000000, Double_t vx=0., Double_t vy=0., Double_t vz=0., Option_t *option="ob")
Geometry checking.
TGeoNode * CrossBoundaryAndLocate(Bool_t downwards, TGeoNode *skipnode)
Cross next boundary and locate within current node The current point must be on the boundary of fCurr...
double dist(Rotation3D const &r1, Rotation3D const &r2)
Bool_t GotoSafeLevel()
Go upwards the tree until a non-overlaping node.
virtual Int_t CountVisibleNodes()=0
TGeoPhysicalNode * MakePhysicalNode(const char *path=0)
Makes a physical node corresponding to a path.
TGeoNode * InitTrack(const Double_t *point, const Double_t *dir)
Initialize current point and current direction vector (normalized) in MARS.
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.
virtual void GetViewAngles(Double_t &, Double_t &, Double_t &)
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
void DoRestoreState()
Restore a backed-up state without affecting the cache stack.
virtual void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
TGeoVolume * MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
Make a TGeoXtru-shaped volume with nz planes.
void AddLast(TObject *obj)
Add object at the end of the list.
void CheckGeometry(Option_t *option="")
Perform last checks on the geometry.
virtual TVirtualGeoTrack * FindTrackWithId(Int_t id) const
Recursively search through this track for a daughter particle (at any depth) with the specified id...
void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option)
Test for shape navigation methods.
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.
TGeoVolumeAssembly * MakeVolumeAssembly(const char *name)
Make an assembly of volumes.
virtual void CreateThreadData(Int_t nthreads)
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.
Int_t GetNsegments() const
Get number of segments approximating circles.
Bool_t fActivity
flag for GL reflections
virtual void EditGeometry(Option_t *option="")=0
void ClearAttributes()
Reset all attributes to default ones.
void Voxelize(Option_t *option)
build the voxels for this volume
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.
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 SetFinder(TGeoPatternFinder *finder)
virtual void ModifiedPad(Bool_t update=kFALSE) const =0
const char * GetPath() const
Get path to the current node in the form /node0/node1/...
void SetAllIndex()
Assigns uid's for all materials,media and matrices.
TGeoVolume * GetVolume() const
TGeoNavigatorArray * GetListOfNavigators() const
Get list of navigators for the calling thread.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
Bool_t fMatrixTransform
flag that the list of physical nodes has to be drawn
virtual void Sort(Int_t upto=kMaxInt)
If objects in array are sortable (i.e.
ClassImp(TSeqCollection) Int_t TSeqCollection TIter next(this)
Return index of object in collection.
virtual Double_t * GetViewBox()=0
virtual Bool_t IsVolumeMulti() const
TVector3 cross(const TVector3 &v1, const TVector3 &v2)
TGeoNode * InitTrack(const Double_t *point, const Double_t *dir)
Initialize current point and current direction vector (normalized) in MARS.
virtual void Clear(Option_t *option="")
Remove all objects from the array.
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.
void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const
Fill node copy numbers of current branch into an array.
void BombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'bombed' translation vector according current exploded view mode.
virtual TVirtualGeoTrack * AddTrack(Int_t id, Int_t pdgcode, TObject *particle)=0
Bool_t CheckPath(const char *path) const
Check if a geometry path is valid without changing the state of the navigator.
Double_t Safety(Bool_t inside=kFALSE)
Compute safe distance from the current point.
virtual void Delete(Option_t *option="")
Remove all objects from the array AND delete all heap based objects.
Int_t ReplaceVolume(TGeoVolume *vorig, TGeoVolume *vnew)
Replaces all occurences of VORIG with VNEW in the geometry tree.
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...
TObject * FindObject(const char *name) const
Find object using its name.
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.
TGeoNode * SearchNode(Bool_t downwards=kFALSE, const TGeoNode *skipnode=0)
Returns the deepest node containing fPoint, which must be set a priori.
static TGeoMedium * DummyMedium()
void Test(Int_t npoints=1000000, Option_t *option="")
Check time of finding "Where am I" for n points.
void CdUp()
Go one level up in geometry.
TString & ReplaceAll(const TString &s1, const TString &s2)
Int_t GetSafeLevel() const
Go upwards the tree until a non-overlaping node.
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="")
Check all geometry for illegal overlaps within a limit OVLP.
R__EXTERN TStyle * gStyle
virtual void Test(Int_t npoints, Option_t *option)=0
THashList * fHashVolumes
volume currently painted
TVirtualGeoTrack * GetTrack(Int_t index)
virtual void SetName(const char *name)
Change (i.e.
virtual TList * GetListOfKeys() const
void Init()
Initialize manager class.
static Int_t fgMaxDaughters
Maximum level in geometry.
virtual Int_t GetByteCount() const
get the total size in bytes for this volume
std::vector< double > values
TGeoElementTable * GetElementTable()
Returns material table. Creates it if not existing.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
virtual void CheckShape(TGeoShape *shape, Int_t testNo, Int_t nsamples, Option_t *option)=0
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format...
virtual Double_t Weight(Double_t precision, Option_t *option="v")=0
void SetVisBranch()
Set branch type visibility.
Buffer base class used for serializing objects.
void GetBranchOnlys(Int_t *isonly) const
Fill node copy numbers of current branch into an array.
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
Bool_t fMatrixReflection
flag for using GL matrix
TVirtualGeoTrack * fCurrentTrack
static const char * filename()
static void CreateDummyMedium()
void Delete(Option_t *option="")
Remove all objects from the list AND delete all heap based objects.
Int_t fNNodes
upper time limit for tracks drawing
static Int_t GetVerboseLevel()
Set verbosity level (static function).
static void SetVerboseLevel(Int_t vl)
Return current verbosity level (static function).
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.
virtual TObject * Remove(TObject *obj)
Remove object from array.
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
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.
std::map< Long_t, Int_t > ThreadsMap_t
virtual void PrintOverlaps() const =0
Int_t LoadPlugin()
Load the plugin library for this handler.
void ResetUserData()
Sets all pointers TGeoVolume::fField to NULL.
TGeoVolume * Volume(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t npar=0)
Create a volume in GEANT3 style.
void ViewLeaves(Bool_t flag=kTRUE)
Set visualization option (leaves only OR all volumes)
static void ClearThreadsMap()
Clear the current map of threads.
void ToLower()
Change string to lower-case.
TObjArray * fUniqueVolumes
TGeoNode * fTopNode
top level volume in geometry
Bool_t fIsNodeSelectable
switch ON/OFF volume activity (default OFF - all volumes active))
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
void InspectState() const
Inspects path and all flags for the current state.
void OptimizeVoxels(const char *filename="tgeovox.C")
Optimize voxelization type for all volumes. Save best choice in a macro.
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
static Int_t Parse(const char *expr, TString &expr1, TString &expr2, TString &expr3)
Parse a string boolean expression and do a syntax check.
TVirtualGeoTrack * MakeTrack(Int_t id, Int_t pdgcode, TObject *particle)
Makes a primary track but do not attach it to the list of tracks.
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.
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 * 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.
Int_t GetEntriesFast() const
virtual void ExecuteManagerEvent(TGeoManager *geom, Int_t event, Int_t px, Int_t py)=0
TGeoShape * fClippingShape
virtual void RandomPoints(const TGeoVolume *vol, Int_t npoints, Option_t *option="")=0
Int_t GetNAlignable(Bool_t with_uid=kFALSE) const
Retreives number of PN entries with or without UID.
Bool_t IsReflection() const
void SetBombFactors(Double_t bombx=1.3, Double_t bomby=1.3, Double_t bombz=1.3, Double_t bombr=1.3)
Set factors that will "bomb" all translations in cartesian and cylindrical coordinates.
void box(Int_t pat, Double_t x1, Double_t y1, Double_t x2, Double_t y2)
void AnimateTracks(Double_t tmin=0, Double_t tmax=5E-8, Int_t nframes=200, Option_t *option="/*")
Draw animation of tracks.
Long_t ExecPlugin(int nargs, const T &...params)
virtual TGeoElement * GetElement(Int_t i=0) const
Get a pointer to the element this material is made of.
void Refresh()
Refresh this physical node.
virtual void DefaultAngles()=0
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
static void SetNavigatorsLock(Bool_t flag)
Set the lock for navigators.
Int_t GetNdaughters() const
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.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
void SetVisibility(TObject *obj, Bool_t vis)
Set visibility for a volume.
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.
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
void SetVisDensity(Double_t dens=0.01)
Set density threshold.
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.
static Int_t GetNumThreads()
Returns number of threads that were set to use geometry.
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=1, Int_t netopt=0)
Create / open a file.
Int_t CountNodes(Int_t nlevels=1000, Int_t option=0)
Count total number of subnodes starting from this volume, nlevels down option = 0 (default) - count o...
virtual void AppendPad(Option_t *option="")
Append graphics object to current pad.
virtual void SetClippingShape(TGeoShape *shape)=0
Bool_t fIsGeomCleaning
flag set when reading geometry
void DoRestoreState()
Restore a backed-up state without affecting the cache stack.
TObjArray * fMatrices
current painter
void ResetState()
Reset current state flags.
const char * Data() const
virtual TObject * FindObject(const char *name) const
Find an object in this collection using its name.
virtual void Fatal(const char *method, const char *msgfmt,...) const
Issue fatal error message.
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
TGeoParallelWorld * fParallelWorld
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.
virtual Int_t Export(const char *filename, const char *name="", Option_t *option="vg")
Export this geometry to a file.
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.
Sequenceable collection abstract base class.
TVirtualGeoTrack * GetParentTrackOfId(Int_t id) const
Get parent track with a given ID.
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.
void UpdateElements()
Update element flags when geometry is loaded from a file.
TGeoPNEntry * SetAlignableEntry(const char *unique_name, const char *path, Int_t uid=-1)
Creates an aligneable object with unique name corresponding to a path and adds it to the list of alig...
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
Double_t WeightA() const
Analytical computation of the weight.
void SetVolumeAttribute(const char *name, const char *att, Int_t val)
Set volume attributes in G3 style.
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.
virtual void GrabFocus(Int_t nfr=0, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)=0
Bool_t IsOverlapping() const
THashList implements a hybrid collection class consisting of a hash table and a list to store TObject...
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.
Int_t AddTrack(Int_t id, Int_t pdgcode, TObject *particle=0)
Add a track to the list of tracks.
The TNamed class is the base class for all named ROOT classes.
void LocalToMaster(const Double_t *local, Double_t *master) const
virtual void SetNsegments(Int_t nseg=20)=0
void CdDown(Int_t index)
Make a daughter of current node current.
void SetVisStreamed(Bool_t vis=kTRUE)
Mark attributes as "streamed to file".
void CleanGarbage()
Clean temporary volumes and shapes from garbage collection.
THashList * fHashGVolumes
hash list of volumes providing fast search
Int_t GetVisLevel() const
Returns current depth to which geometry is drawn.
void ClearShape(const TGeoShape *shape)
Remove a shape from the list of shapes.
Double_t fTmax
lower time limit for tracks drawing
static Bool_t IsLocked()
Check lock state.
THashList * fHashPNE
hash list of group volumes providing fast search
void Browse(TBrowser *b)
Describe how to browse this object.
void Init(TClassEdit::TInterpreterLookupHelper *helper)
void SortOverlaps()
Sort overlaps by decreasing overlap distance. Extrusions comes first.
virtual Bool_t IsMixture() const
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
virtual void SetExplodedView(Int_t iopt=0)=0
virtual void BombTranslation(const Double_t *tr, Double_t *bombtr)=0
TGeoNavigator * fCurrentNavigator
Lock existing navigators.
TGeoVolume * MakeXtru(const char *name, TGeoMedium *medium, Int_t nz)
Make a TGeoXtru-shaped volume with nz planes.
if(pyself &&pyself!=Py_None)
static Int_t GetMaxDaughters()
Return maximum number of daughters of a volume used in the geometry.
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...
Int_t AddVolume(TGeoVolume *volume)
Add a volume to the list. Returns index of the volume in list.
TGeoVolume * fTopVolume
current volume
static Long_t SelfId()
Static method returning the id for the current thread.
Int_t GetVirtualLevel()
Find level of virtuality of current overlapping node (number of levels up having the same tracking me...
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.
Bool_t IsVisTouched() const
virtual TGeoMatrix * GetMatrix() const =0
static Int_t fgNumThreads
Thread id's map.
Bool_t InsertPNEId(Int_t uid, Int_t ientry)
Insert a PN entry in the sorted array of indexes.
ThreadsMap_t::const_iterator ThreadsMapIt_t
virtual TGeoElement * GetElement(Int_t i=0) const
Retreive the pointer to the element corresponding to component I.
virtual void CheckBoundaryReference(Int_t icheck=-1)=0
TGeoNode * GetCurrentNode() const
Double_t ATan2(Double_t, Double_t)
void SetClippingShape(TGeoShape *clip)
Set a user-defined shape as clipping for ray tracing.
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
void SetMaxVisNodes(Int_t maxnodes=10000)
set the maximum number of visible nodes.
Book space in a file, create I/O buffers, to fill them, (un)compress them.
virtual void SetBombFactors(Double_t bombx=1.3, Double_t bomby=1.3, Double_t bombz=1.3, Double_t bombr=1.3)=0
TVirtualGeoTrack * GetTrackOfId(Int_t id) const
Get track with a given ID.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
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 RestoreMasterVolume()
Restore the master volume of the geometry.
Bool_t fPhiCut
flag to notify that the manager is being destructed
static ENewType IsCallingNew()
Static method returning the defConstructor flag passed to TClass::New().
NavigatorsMap_t fNavigators
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 paralelipiped shape with given medium.
virtual void DrawCurrentPoint(Int_t color)=0
void ResetState()
Reset current state flags.
Int_t TransformVolumeToAssembly(const char *vname)
Transform all volumes named VNAME to assemblies. The volumes must be virtual.
Int_t GetUID(const char *volname) const
Retreive unique id for a volume name. Return -1 if name not found.
static Int_t fgVerboseLevel
Lock preventing a second geometry to be loaded.
TVirtualGeoTrack * GetMother() const
static TGeoVolumeAssembly * MakeAssemblyFromVolume(TGeoVolume *vol)
Make a clone of volume VOL but which is an assembly.
void RefreshPhysicalNodes(Bool_t lock=kTRUE)
Refresh physical nodes to reflect the actual geometry paths after alignment was applied.
void SortNodes()
sort nodes by decreasing volume of the bounding box.
Bool_t fLoopVolumes
flag that geometry is closed
TGeoMaterial * FindDuplicateMaterial(const TGeoMaterial *mat) const
Find if a given material duplicates an existing one.
virtual void SetUniqueID(UInt_t uid)
Set the unique object id.
TGeoPhysicalNode * MakeAlignablePN(const char *name)
Make a physical node from the path pointed by an alignable object with a given name.
TGeoNode * SearchNode(Bool_t downwards=kFALSE, const TGeoNode *skipnode=0)
Returns the deepest node containing fPoint, which must be set a priori.
void CdTop()
Make top level node the current node.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
void CreateThreadData() const
Create thread private data for all geometry objects.
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.
Bool_t CheckPath(const char *path) const
Check if a geometry path is valid without changing the state of the current navigator.
TObject * UncheckedAt(Int_t i) const
virtual TGeoNode * SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil, const char *g3path)=0
virtual void SetTopVisible(Bool_t vis=kTRUE)=0
void SelectTrackingMedia()
Define different tracking media.
TGeoNode * FindNextBoundaryAndStep(Double_t stepmax=TGeoShape::Big(), Bool_t compsafe=kFALSE)
Compute distance to next boundary within STEPMAX.
Int_t AddOverlap(const TNamed *ovlp)
Add an illegal overlap/extrusion to the list.
TGeoVolumeAssembly * MakeVolumeAssembly(const char *name)
Make an assembly of volumes.
Double_t fTmin
highest range for phi cut
void RemoveNavigator(const TGeoNavigator *nav)
Clear a single navigator.
TObjArray * fPhysicalNodes
virtual Int_t GetNelements() const
Using a TBrowser one can browse all ROOT objects.
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot...
Bool_t IsSamePoint(Double_t x, Double_t y, Double_t z) const
Check if a new point with given coordinates is the same as the last located one.
Int_t GetBombMode() const
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.
Int_t * fNodeIdArray
table of elements
Int_t fNLevel
array of node id's
void SetNeedRebuild(Bool_t flag=kTRUE)
void Clear(Option_t *option="")
Remove all objects from the list.
virtual void AfterStreamer()
Bool_t cd(const char *path="")
Browse the tree of nodes starting from top node according to pathname.
TNamed & operator=(const TNamed &rhs)
TNamed assignment operator.
Double_t Safety(Bool_t inside=kFALSE)
Compute safe distance from the current point.
Int_t IndexOf(const TObject *obj) const
void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="")
Check overlaps bigger than OVLP hierarchically, starting with this node.
virtual void AddAtAndExpand(TObject *obj, Int_t idx)
Add object at position idx.
TGeoPNEntry * GetAlignableEntry(const char *name) const
Retreives an existing alignable object.
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>'.
Int_t AddMaterial(TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
void SetMotherVolume(TGeoVolume *mother)
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 paralelipiped shape with given medium.
static void LockGeometry()
Lock current geometry so that no other geometry can be imported.
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.
TGeoNode * Step(Bool_t is_geom=kTRUE, Bool_t cross=kTRUE)
Make a rectiliniar step of length fStep from current point (fPoint) on current direction (fDirection)...
TPaveLabel title(3, 27.1, 15, 28.7,"ROOT Environment and Tools")
virtual void SetFillColor(Color_t fcolor)
void SaveAttributes(std::ostream &out)
save attributes for this node
void SetField(TObject *field)
Int_t GetVirtualLevel()
Find level of virtuality of current overlapping node (number of levels up having the same tracking me...
virtual void CheckGeometryFull(Bool_t checkoverlaps=kTRUE, Bool_t checkcrossings=kTRUE, Int_t nrays=10000, const Double_t *vertex=NULL)=0
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 ...
TGeoNode * FindNextBoundaryAndStep(Double_t stepmax=TGeoShape::Big(), Bool_t compsafe=kFALSE)
Compute distance to next boundary within STEPMAX.
virtual Bool_t IsAssembly() const
Returns true if the volume is an assembly or a scaled assembly.
void DefaultColors()
Set default volume colors according to A of material.
TGeoNavigator * AddNavigator()
Add a navigator in the list of navigators.
virtual Int_t GetValue(const char *name, Int_t dflt)
Returns the integer value for a resource.
TGeoManager()
Default constructor.
Double_t * FindNormalFast()
Computes fast normal to next crossed boundary, assuming that the current point is close enough to the...
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.
virtual TObject * Remove(TObject *obj)
Remove object from the list.
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 ...
virtual void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const =0
static Int_t fgMaxLevel
Verbosity level for Info messages (no IO).
void SetTransparency(Char_t transparency=0)
void CdNode(Int_t nodeid)
Change current path to point to the node having this id.
Double_t fPhimax
lowest range for phi cut
TGeoVolumeMulti * MakeVolumeMulti(const char *name, TGeoMedium *medium)
Make a TGeoVolumeMulti handling a list of volumes.
void SetPdgName(Int_t pdg, const char *name)
Set a name for a particle having a given pdg.
void SetMatrix(const TGeoMatrix *matrix)
Matrix setter.
void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const
Retrieve cartesian and radial bomb factors.
void RefreshPhysicalNodes()
Refresh the node pointers and re-voxelize.
Bool_t TestBit(UInt_t f) const
virtual Int_t GetByteCount() const
void UnmarkSaved()
Reset SavePrimitive bits.
virtual void EstimateCameraMove(Double_t, Double_t, Double_t *, Double_t *)
void DrawCurrentPoint(Int_t color=2)
Draw current point in the same view.
void CdDown(Int_t index)
Make a daughter of current node current.
Bool_t IsSameLocation() const
virtual void RegisterYourself()
Register the matrix in the current manager, which will become the owner.
virtual void SetCheckedNode(TGeoNode *node)=0
virtual const char * GetName() const
Returns name of object.
TObjArray * fTracks
list of runtime volumes
TSubString Strip(EStripType s=kTrailing, char c= ' ') const
Return a substring of self stripped at beginning and/or end.
TGeoMedium * GetMedium(const char *medium) const
Search for a named tracking medium. All trailing blanks stripped.
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.
TGeoNodeCache * GetCache() const
Int_t GetTrackIndex(Int_t id) const
Get index for track id, -1 if not found.
Double_t fVisDensity
particles to be drawn
void GetBranchNames(Int_t *names) const
Fill volume names of current branch into an array.
virtual Int_t GetByteCount(Option_t *option=0)
Get total size of geometry in bytes.
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.
TGeoNavigator * GetCurrentNavigator() const
Returns current navigator for the calling thread.
void CloseGeometry(Option_t *option="d")
Closing geometry implies checking the geometry validity, fixing shapes with negative parameters (run-...
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.
void DrawTracks(Option_t *option="")
Draw tracks over the geometry, according to option.
static Int_t Lock()
Static method to lock the main thread mutex.
void SetCheckedNode(TGeoNode *node)
Assign a given node to be checked for ovelaps. Any other overlaps will be ignored.
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.
const char * GetPdgName(Int_t pdg) const
Get name for given pdg code;.
Bool_t fStreamVoxels
flag volume lists loop
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)
void SetUseParallelWorldNav(Bool_t flag)
Activate/deactivate usage of parallel world navigation.
void ClearThreadData() const
TGeoNode * GetNode(const char *name) const
get the pointer to a daughter node
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
void DrawPath(const char *path, Option_t *option="")
Draw current path.
virtual ~TGeoManager()
Destructor.
void RandomPoints(const TGeoVolume *vol, Int_t npoints=10000, Option_t *option="")
Draw random points in the bounding box of a volume.
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.
TGeoNode * FindNode(Bool_t safe_start=kTRUE)
Returns deepest node containing current point.
TObjArray * fGVolumes
list of runtime shapes
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.
TGeoMaterial * GetMaterial() const
Int_t GetSafeLevel() const
Go upwards the tree until a non-overlaping node.
void SetOverlapping(Bool_t flag=kTRUE)
TGeoVolume * fCurrentVolume
current navigator
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 DefaultAngles()
Set default angles for a given view.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual Bool_t cd(const char *path="")
Browse the tree of nodes starting from fTopNode according to pathname.
void TestOverlaps(const char *path="")
Geometry overlap checker based on sampling.
Double_t Weight(Double_t precision=0.01, Option_t *option="va")
Estimate weight of volume VOL with a precision SIGMA(W)/W better than PRECISION.
TGeoNavigator * GetCurrentNavigator() const
Int_t GetVisOption() const
Returns current depth to which geometry is drawn.
static Int_t UnLock()
Static method to unlock the main thread mutex.
static Int_t GetMaxLevels()
Return maximum number of levels used in the geometry.
virtual void SetVisOption(Int_t option=0)=0
Bool_t IsSamePoint(Double_t x, Double_t y, Double_t z) const
Check if a new point with given coordinates is the same as the last located one.
virtual Int_t GetSize() const
void SetUsed(Bool_t flag=kTRUE)
virtual void ReflectZ(Bool_t leftside, Bool_t rotonly=kFALSE)
Multiply by a reflection respect to XY.
void TopToMaster(const Double_t *top, Double_t *master) const
Convert coordinates from top volume frame to master.
TGeoShape * GetShape() const
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.
void EnableThreadSafety()
Enables the global mutex to make ROOT thread safe/aware.
void DoBackupState()
Backup the current state without affecting the cache stack.
void CdUp()
Go one level up in geometry.
void RemoveMaterial(Int_t index)
Remove material at given index.
TGeoNavigator * SetCurrentNavigator(Int_t inav)
Bool_t GotoSafeLevel()
Go upwards the tree until a non-overlaping node.
virtual const char * GetName() const
Returns name of object.
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of this volume
TGeoVoxelFinder * GetVoxels() const
Getter for optimization structure.
void RegisterMatrix(TGeoMatrix *matrix)
Register a matrix to the list of matrices.
TGeoNode * FindNextBoundary(Double_t stepmax=TGeoShape::Big(), const char *path="", Bool_t frombdr=kFALSE)
Find distance to next boundary and store it in fStep.
TGeoVolume * GetVolume(const char *name) const
Search for a named volume. All trailing blanks stripped.
TVirtualGeoPainter * fPainter
flag that nodes are the selected objects in pad rather than volumes
virtual Bool_t IsComposite() const
void Voxelize(Option_t *option=0)
Voxelize all non-divided volumes.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Bool_t IsMultiThread() const
virtual ULong_t SizeOf(const TGeoNode *node, Option_t *option)
computes the total size in bytes of the branch starting with node.
virtual void DrawPath(const char *path, Option_t *option="")=0
ClassImp(TMCParticle) void TMCParticle printf(": p=(%7.3f,%7.3f,%9.3f) ;", fPx, fPy, fPz)
void ModifiedPad() const
Send "Modified" signal to painter.
void CdTop()
Make top level node the current node.
void RegisterMatrix(const TGeoMatrix *matrix)
Register a matrix to the list of matrices.
Int_t AddTransformation(TGeoMatrix *matrix)
Add a matrix to the list. Returns index of the matrix in list.
static RooMathCoreReg dummy
void SetPhiRange(Double_t phimin=0., Double_t phimax=360.)
Set cut phi range.
Bool_t CloseGeometry()
The main geometry must be closed.
virtual void SetNmeshPoints(Int_t npoints)=0
static Bool_t fgLockNavigators
Number of registered threads.
TObjArray * GetListOfPhysicalNodes()
TGeoManager * gGeoManager
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.
TVirtualGeoTrack * FindTrackWithId(Int_t id) const
Search the track hierarchy to find the track with the given id.
void SetDefined(Bool_t flag=kTRUE)
Bool_t fUsePWNav
Flag for multi-threading.
Int_t GetRefCount() const
Int_t GetEntries() const
Return the number of objects in array (i.e.
Bool_t SetCurrentNavigator(Int_t index)
Switch to another existing navigator for the calling thread.
Bool_t IsAnimatingTracks() const
void SetTminTmax(Double_t tmin=0, Double_t tmax=999)
Set time cut interval for drawing tracks.
Bool_t IsInPhiRange() const
True if current node is in phi range.
virtual void ComputeBBox()=0
Int_t AddShape(const TGeoShape *shape)
Add a shape to the list. Returns index of the shape in list.
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 ResetAll()
Reset the navigator.
static ThreadsMap_t * fgThreadId
Map between thread id's and navigator arrays.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
void SetVolume(TGeoVolume *volume)
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.
virtual void CheckBoundaryErrors(Int_t ntracks=1000000, Double_t radius=-1.)=0
virtual Double_t GetZ() const
void ConvertReflections()
Convert all reflections in geometry to normal rotations + reflected shapes.
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.
TGeoHMatrix * GetHMatrix()
Return stored current matrix (global matrix of the next touched node).
Mother of all ROOT objects.
TGeoNode * FindNextBoundary(Double_t stepmax=TGeoShape::Big(), const char *path="", Bool_t frombdr=kFALSE)
Find distance to next boundary and store it in fStep.
void CdNext()
Do a cd to the node found next by FindNextBoundary.
void CountLevels()
Count maximum number of nodes per volume, maximum depth and maximum number of xtru vertices...
void ClearOverlaps()
Clear the list of overlaps.
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 ...
void SetNsegments(Int_t nseg)
Set number of segments for approximating circles in drawing.
void SetMaxThreads(Int_t nthreads)
Set maximum number of threads for navigation.
void CheckShapes()
check for wrong parameters in shapes
void SetExplodedView(Int_t iopt=0)
Set type of exploding view (see TGeoPainter::SetExplodedView())
virtual void Edit(Option_t *option="")
Append a pad for this geometry.
R__EXTERN TGeoIdentity * gGeoIdentity
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const
Fill node copy numbers of current branch into an array.
TGeoElementTable * fElementTable
clipping shape for raytracing
Bool_t TestShapeBit(UInt_t f) const
void SaveAttributes(const char *filename="tgeoatt.C")
Save current attributes in a macro.
TGeoManager & operator=(const TGeoManager &)
assignment operator
static Int_t ThreadId()
Translates the current thread id to an ordinal number.
Int_t fSizePNEId
array of phisical node entries
virtual Double_t GetDensity() const
void InspectState() const
Inspects path and all flags for the current state.
static TGeoBuilder * Instance(TGeoManager *geom)
Return pointer to singleton.
virtual void Add(TObject *obj)
TGeoVolume * FindVolumeFast(const char *name, Bool_t multi=kFALSE)
Fast search for a named volume. All trailing blanks stripped.
void BuildIdArray()
Builds node id array.
TGeoMedium * GetMedium() const
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 ...
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
void CdNext()
Do a cd to the node found next by FindNextBoundary.
virtual Bool_t IsVisible() const
Int_t GetCurrentNodeId() const
Get the unique ID of the current node.
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.
void BuildDefaultMaterials()
Now just a shortcut for GetElementTable.
TGeoPNEntry * GetAlignableEntryByUID(Int_t uid) const
Retreives an existing alignable object having a preset UID.
virtual void RandomRays(Int_t nrays, Double_t startx, Double_t starty, Double_t startz, const char *target_vol, Bool_t check_norm)=0
void SetAnimateTracks(Bool_t flag=kTRUE)
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 * GetMotherVolume() const
Int_t AddMaterial(const TGeoMaterial *material)
Add a material to the list. Returns index of the material in list.
TGeoNode * FindNode(Bool_t safe_start=kTRUE)
Returns deepest node containing current point.
Bool_t fMultiThread
Max number of threads.
TGeoVolume * MakeReflectedVolume(const char *newname="") const
Make a copy of this volume which is reflected with respect to XY plane.
TString fParticleName
path to current node
Int_t AddTransformation(const TGeoMatrix *matrix)
Add a matrix to the list. Returns index of the matrix in list.
const char * GetPath() const
Get path to the current node in the form /node0/node1/...
void SetVisibility(Bool_t vis=kTRUE)
Set visibility of the node (obsolete).
static Int_t GetMaxXtruVert()
Return maximum number of vertices for an xtru shape used.
TGeoVolume * fPaintVolume
TGeoElement * GetElement(Int_t z)
void GetBranchOnlys(Int_t *isonly) const
Fill node copy numbers of current branch into an array.
void GetBranchNames(Int_t *names) const
Fill volume names of current branch into an array.
virtual void UnbombTranslation(const Double_t *tr, Double_t *bombtr)=0
TGeoParallelWorld * CreateParallelWorld(const char *name)
Create a parallel world for prioritized navigation.
void FindOverlaps() const
loop all nodes marked as overlaps and find overlaping brothers
virtual Int_t IndexOf(const TObject *obj) const
TObject * At(Int_t idx) const
virtual void SetMedium(TGeoMedium *medium)
void ClearNavigators()
Clear all navigators.
void UnbombTranslation(const Double_t *tr, Double_t *bombtr)
Get the new 'unbombed' translation vector according current exploded view mode.
void PrintOverlaps() const
Prints the current list of overlaps.
TGeoVolume * Volume(const char *name, const char *shape, Int_t nmed, Float_t *upar, Int_t npar=0)
Create a volume in GEANT3 style.
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 GetMaterialIndex(const char *matname) const
Return index of named material.
void DoBackupState()
Backup the current state without affecting the cache stack.
void SaveAs(const char *filename, Option_t *option="") const
Save geometry having this as top volume as a C++ macro.
Double_t * FindNormalFast()
Computes fast normal to next crossed boundary, assuming that the current point is close enough to the...
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...
const char * AsString() const
Return the date & time as a string (ctime() format).
Int_t GetCurrentNodeId() const
void SetVisTouched(Bool_t vis=kTRUE)
Mark visualization attributes as "modified".
TGeoVolume * fMasterVolume
top physical node
void SetNumber(Int_t number)
virtual void SetTitle(const char *title="")
Change (i.e. set) the title of the TNamed.
virtual Int_t GetByteCount() const
Get total size in bytes of this.
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 TGeoManager * Import(const char *filename, const char *name="", Option_t *option="")
static function Import a geometry from a gdml or ROOT file
virtual void TestOverlaps(const char *path)=0
void LocalToMaster(const Double_t *local, Double_t *master) const
virtual void CheckPoint(Double_t x=0, Double_t y=0, Double_t z=0, Option_t *option="")=0
void SetVisOption(Int_t option=0)
set drawing mode : option=0 (default) all nodes drawn down to vislevel option=1 leaves and nodes at v...
TVirtualGeoPainter * GetGeomPainter()
Make a default painter if none present. Returns pointer to it.
Bool_t OptimizeVoxels()
Perform an exensive sampling to find which type of voxelization is most efficient.
virtual Bool_t IsEq(const TGeoMaterial *other) const
return true if the other material has the same physical properties
TGeoMaterial * GetMaterial(const char *matname) const
Search for a named material. All trailing blanks stripped.
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.
static void UnlockGeometry()
Unlock current geometry.
Bool_t GetTminTmax(Double_t &tmin, Double_t &tmax) const
Get time cut for drawing tracks.
TGeoVolume * GetCurrentVolume() const
Long64_t BinarySearch(Long64_t n, const T *array, T value)
void BuildInfoBranch()
Bulds info branch. Navigation is possible only after this step.
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.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse actions on this manager.
void SetNumber(Int_t number)
virtual Int_t GetByteCount() const
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.
Bool_t InitArrayPNE() const
Initialize PNE array for fast access via index and unique-id.
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
Int_t GetNdaughters() const
void ClearPhysicalNodes(Bool_t mustdelete=kFALSE)
Clear the current list of physical nodes, so that we can start over with a new list.
void SetNmeshPoints(Int_t npoints=1000)
Set the number of points to be generated on the shape outline when checking for overlaps.
virtual void RecursiveRemove(TObject *obj)
Recursively remove obj from browser.
void MasterToLocal(const Double_t *master, Double_t *local) const
TGeoNode * Step(Bool_t is_geom=kTRUE, Bool_t cross=kTRUE)
Make a rectiliniar step of length fStep from current point (fPoint) on current direction (fDirection)...
static Int_t fgMaxXtruVert
Maximum number of daughters.
void MasterToTop(const Double_t *master, Double_t *top) const
Convert coordinates from master volume frame to top.
void CheckBoundaryReference(Int_t icheck=-1)
Check the boundary errors reference file created by CheckBoundaryErrors method.
TGeoNode * CrossBoundaryAndLocate(Bool_t downwards, TGeoNode *skipnode)
Cross next boundary and locate within current node The current point must be on the boundary of fCurr...
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.