00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TGeoManager
00013 #define ROOT_TGeoManager
00014
00015 #ifndef ROOT_TObjArray
00016 #include "TObjArray.h"
00017 #endif
00018 #ifndef ROOT_TGeoNavigator
00019 #include "TGeoNavigator.h"
00020 #endif
00021
00022
00023 class TVirtualGeoTrack;
00024 class TGeoNode;
00025 class TGeoPhysicalNode;
00026 class TGeoPNEntry;
00027 class TGeoVolume;
00028 class TGeoVolumeMulti;
00029 class TGeoMatrix;
00030 class TGeoHMatrix;
00031 class TGeoMaterial;
00032 class TGeoMedium;
00033 class TGeoShape;
00034 class TVirtualGeoPainter;
00035 class THashList;
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 class TGeoManager : public TNamed
00046 {
00047 protected:
00048 static Bool_t fgLock;
00049 static Int_t fgVerboseLevel;
00050
00051 TGeoManager(const TGeoManager&);
00052 TGeoManager& operator=(const TGeoManager&);
00053
00054 private :
00055 Double_t fPhimin;
00056 Double_t fPhimax;
00057 Double_t fTmin;
00058 Double_t fTmax;
00059 Int_t fNNodes;
00060 TString fPath;
00061 TString fParticleName;
00062 Double_t fVisDensity;
00063 Int_t fExplodedView;
00064 Int_t fVisOption;
00065 Int_t fVisLevel;
00066 Int_t fNsegments;
00067 Int_t fNtracks;
00068 Int_t fMaxVisNodes;
00069 TVirtualGeoTrack *fCurrentTrack;
00070 Int_t fNpdg;
00071 Int_t fPdgId[256];
00072 Bool_t fClosed;
00073 Bool_t fLoopVolumes;
00074 Bool_t fStreamVoxels;
00075 Bool_t fIsGeomReading;
00076 Bool_t fPhiCut;
00077 Bool_t fTimeCut;
00078 Bool_t fDrawExtra;
00079 Bool_t fMatrixTransform;
00080 Bool_t fMatrixReflection;
00081 Bool_t fActivity;
00082 Bool_t fIsNodeSelectable;
00083 TVirtualGeoPainter *fPainter;
00084
00085 TObjArray *fMatrices;
00086 TObjArray *fShapes;
00087 TObjArray *fVolumes;
00088 TObjArray *fPhysicalNodes;
00089 TObjArray *fGShapes;
00090 TObjArray *fGVolumes;
00091 TObjArray *fTracks;
00092 TObjArray *fPdgNames;
00093 TObjArray *fNavigators;
00094 TList *fMaterials;
00095 TList *fMedia;
00096 TObjArray *fNodes;
00097 TObjArray *fOverlaps;
00098 UChar_t *fBits;
00099 TGeoNavigator *fCurrentNavigator;
00100 TGeoVolume *fCurrentVolume;
00101 TGeoVolume *fTopVolume;
00102 TGeoNode *fTopNode;
00103 TGeoVolume *fMasterVolume;
00104 TGeoHMatrix *fGLMatrix;
00105 TObjArray *fUniqueVolumes;
00106 TGeoShape *fClippingShape;
00107 TGeoElementTable *fElementTable;
00108
00109 Int_t *fNodeIdArray;
00110 Int_t fIntSize;
00111 Int_t fDblSize;
00112 Int_t *fIntBuffer;
00113 Int_t fNLevel;
00114 Double_t *fDblBuffer;
00115 TGeoVolume *fPaintVolume;
00116 THashList *fHashVolumes;
00117 THashList *fHashGVolumes;
00118 THashList *fHashPNE;
00119 mutable TObjArray *fArrayPNE;
00120 Int_t fSizePNEId;
00121 Int_t fNPNEId;
00122 Int_t *fKeyPNEId;
00123 Int_t *fValuePNEId;
00124
00125
00126 Bool_t IsLoopingVolumes() const {return fLoopVolumes;}
00127 void Init();
00128 Bool_t InitArrayPNE() const;
00129 Bool_t InsertPNEId(Int_t uid, Int_t ientry);
00130 void SetLoopVolumes(Bool_t flag=kTRUE) {fLoopVolumes=flag;}
00131 void UpdateElements();
00132 void Voxelize(Option_t *option = 0);
00133
00134 public:
00135
00136 TGeoManager();
00137 TGeoManager(const char *name, const char *title);
00138
00139 virtual ~TGeoManager();
00140
00141 Int_t AddMaterial(const TGeoMaterial *material);
00142 Int_t AddOverlap(const TNamed *ovlp);
00143 Int_t AddTransformation(const TGeoMatrix *matrix);
00144 Int_t AddShape(const TGeoShape *shape);
00145 Int_t AddTrack(Int_t id, Int_t pdgcode, TObject *particle=0);
00146 Int_t AddTrack(TVirtualGeoTrack *track);
00147 Int_t AddVolume(TGeoVolume *volume);
00148 Int_t AddNavigator(TGeoNavigator *navigator);
00149 void ClearOverlaps();
00150 void RegisterMatrix(const TGeoMatrix *matrix);
00151 void SortOverlaps();
00152
00153 void Browse(TBrowser *b);
00154 void SetVisibility(TObject *obj, Bool_t vis);
00155 virtual Bool_t cd(const char *path="");
00156 Bool_t CheckPath(const char *path) const;
00157 void CdNode(Int_t nodeid);
00158 void CdDown(Int_t index);
00159 void CdUp();
00160 void CdTop();
00161 void CdNext();
00162 void GetBranchNames(Int_t *names) const;
00163 void GetBranchNumbers(Int_t *copyNumbers, Int_t *volumeNumbers) const;
00164 void GetBranchOnlys(Int_t *isonly) const;
00165 Int_t GetNmany() const {return fCurrentNavigator->GetNmany();}
00166 const char *GetPdgName(Int_t pdg) const;
00167 void SetPdgName(Int_t pdg, const char *name);
00168 Bool_t IsFolder() const { return kTRUE; }
00169
00170 virtual void Edit(Option_t *option="");
00171 void BombTranslation(const Double_t *tr, Double_t *bombtr);
00172 void UnbombTranslation(const Double_t *tr, Double_t *bombtr);
00173 void ClearAttributes();
00174 void DefaultAngles();
00175 void DefaultColors();
00176 TGeoShape *GetClippingShape() const {return fClippingShape;}
00177 Int_t GetNsegments() const;
00178 TVirtualGeoPainter *GetGeomPainter();
00179 TVirtualGeoPainter *GetPainter() const {return fPainter;}
00180 Int_t GetBombMode() const {return fExplodedView;}
00181 void GetBombFactors(Double_t &bombx, Double_t &bomby, Double_t &bombz, Double_t &bombr) const;
00182 Int_t GetMaxVisNodes() const {return fMaxVisNodes;}
00183 Bool_t GetTminTmax(Double_t &tmin, Double_t &tmax) const;
00184 Double_t GetTmax() const {return fTmax;}
00185 TGeoVolume *GetPaintVolume() const {return fPaintVolume;}
00186 Double_t GetVisDensity() const {return fVisDensity;}
00187 Int_t GetVisLevel() const;
00188 Int_t GetVisOption() const;
00189 Bool_t IsInPhiRange() const;
00190 Bool_t IsDrawingExtra() const {return fDrawExtra;}
00191 Bool_t IsNodeSelectable() const {return fIsNodeSelectable;}
00192 Bool_t IsVisLeaves() const {return (fVisOption==1)?kTRUE:kFALSE;}
00193 void ModifiedPad() const;
00194 void OptimizeVoxels(const char *filename="tgeovox.C");
00195 void SetClipping(Bool_t flag=kTRUE) {SetClippingShape(((flag)?fClippingShape:0));}
00196 void SetClippingShape(TGeoShape *clip);
00197 void SetExplodedView(Int_t iopt=0);
00198 void SetPhiRange(Double_t phimin=0., Double_t phimax=360.);
00199 void SetNsegments(Int_t nseg);
00200 Bool_t SetCurrentNavigator(Int_t index);
00201 void SetBombFactors(Double_t bombx=1.3, Double_t bomby=1.3, Double_t bombz=1.3, Double_t bombr=1.3);
00202 void SetPaintVolume(TGeoVolume *vol) {fPaintVolume = vol;}
00203 void SetTopVisible(Bool_t vis=kTRUE);
00204 void SetTminTmax(Double_t tmin=0, Double_t tmax=999);
00205 void SetDrawExtraPaths(Bool_t flag=kTRUE) {fDrawExtra=flag;}
00206 void SetNodeSelectable(Bool_t flag=kTRUE) {fIsNodeSelectable=flag;}
00207 void SetVisDensity(Double_t dens=0.01);
00208 void SetVisLevel(Int_t level=3);
00209 void SetVisOption(Int_t option=0);
00210 void ViewLeaves(Bool_t flag=kTRUE);
00211 void SaveAttributes(const char *filename="tgeoatt.C");
00212 void RestoreMasterVolume();
00213 void SetMaxVisNodes(Int_t maxnodes=10000);
00214
00215 void AnimateTracks(Double_t tmin=0, Double_t tmax=5E-8, Int_t nframes=200, Option_t *option="/*");
00216 void CheckBoundaryErrors(Int_t ntracks=1000000, Double_t radius=-1.);
00217 void CheckBoundaryReference(Int_t icheck=-1);
00218 void CheckGeometryFull(Int_t ntracks=1000000, Double_t vx=0., Double_t vy=0., Double_t vz=0., Option_t *option="ob");
00219 void CheckGeometry(Option_t *option="");
00220 void CheckOverlaps(Double_t ovlp=0.1, Option_t *option="");
00221 void CheckPoint(Double_t x=0,Double_t y=0, Double_t z=0, Option_t *option="");
00222 void ConvertReflections();
00223 void DrawCurrentPoint(Int_t color=2);
00224 void DrawTracks(Option_t *option="");
00225 void SetParticleName(const char *pname) {fParticleName=pname;}
00226 const char *GetParticleName() const {return fParticleName.Data();}
00227 void DrawPath(const char *path);
00228 void PrintOverlaps() const;
00229 void RandomPoints(const TGeoVolume *vol, Int_t npoints=10000, Option_t *option="");
00230 void RandomRays(Int_t nrays=1000, Double_t startx=0, Double_t starty=0, Double_t startz=0);
00231 TGeoNode *SamplePoints(Int_t npoints, Double_t &dist, Double_t epsil=1E-5,
00232 const char *g3path="");
00233 void SetNmeshPoints(Int_t npoints=1000);
00234 void SetCheckedNode(TGeoNode *node);
00235 void Test(Int_t npoints=1000000, Option_t *option="");
00236 void TestOverlaps(const char* path="");
00237 Double_t Weight(Double_t precision=0.01, Option_t *option="va");
00238
00239
00240 TGeoVolume *Division(const char *name, const char *mother, Int_t iaxis, Int_t ndiv,
00241 Double_t start, Double_t step, Int_t numed=0, Option_t *option="");
00242 void Matrix(Int_t index, Double_t theta1, Double_t phi1,
00243 Double_t theta2, Double_t phi2,
00244 Double_t theta3, Double_t phi3);
00245 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);
00246 TGeoMaterial *Mixture(const char *name, Float_t *a, Float_t *z, Double_t dens,
00247 Int_t nelem, Float_t *wmat, Int_t uid);
00248 TGeoMaterial *Mixture(const char *name, Double_t *a, Double_t *z, Double_t dens,
00249 Int_t nelem, Double_t *wmat, Int_t uid);
00250 TGeoMedium *Medium(const char *name, Int_t numed, Int_t nmat, Int_t isvol,
00251 Int_t ifield, Double_t fieldm, Double_t tmaxfd,
00252 Double_t stemax, Double_t deemax, Double_t epsil,
00253 Double_t stmin);
00254 void Node(const char *name, Int_t nr, const char *mother,
00255 Double_t x, Double_t y, Double_t z, Int_t irot,
00256 Bool_t isOnly, Float_t *upar, Int_t npar=0);
00257 void Node(const char *name, Int_t nr, const char *mother,
00258 Double_t x, Double_t y, Double_t z, Int_t irot,
00259 Bool_t isOnly, Double_t *upar, Int_t npar=0);
00260 TGeoVolume *Volume(const char *name, const char *shape, Int_t nmed,
00261 Float_t *upar, Int_t npar=0);
00262 TGeoVolume *Volume(const char *name, const char *shape, Int_t nmed,
00263 Double_t *upar, Int_t npar=0);
00264 void SetVolumeAttribute(const char *name, const char *att, Int_t val);
00265
00266 void BuildDefaultMaterials();
00267 void CloseGeometry(Option_t *option="d");
00268 Bool_t IsClosed() const {return fClosed;}
00269 TGeoVolume *MakeArb8(const char *name, TGeoMedium *medium,
00270 Double_t dz, Double_t *vertices=0);
00271 TGeoVolume *MakeBox(const char *name, TGeoMedium *medium,
00272 Double_t dx, Double_t dy, Double_t dz);
00273 TGeoVolume *MakeCone(const char *name, TGeoMedium *medium,
00274 Double_t dz, Double_t rmin1, Double_t rmax1,
00275 Double_t rmin2, Double_t rmax2);
00276 TGeoVolume *MakeCons(const char *name, TGeoMedium *medium,
00277 Double_t dz, Double_t rmin1, Double_t rmax1,
00278 Double_t rmin2, Double_t rmax2,
00279 Double_t phi1, Double_t phi2);
00280 TGeoVolume *MakeCtub(const char *name, TGeoMedium *medium,
00281 Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2,
00282 Double_t lx, Double_t ly, Double_t lz, Double_t tx, Double_t ty, Double_t tz);
00283 TGeoVolume *MakeEltu(const char *name, TGeoMedium *medium,
00284 Double_t a, Double_t b, Double_t dz);
00285 TGeoVolume *MakeGtra(const char *name, TGeoMedium *medium,
00286 Double_t dz, Double_t theta, Double_t phi, Double_t twist, Double_t h1,
00287 Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2,
00288 Double_t tl2, Double_t alpha2);
00289 TGeoVolume *MakePara(const char *name, TGeoMedium *medium,
00290 Double_t dx, Double_t dy, Double_t dz,
00291 Double_t alpha, Double_t theta, Double_t phi);
00292 TGeoVolume *MakePcon(const char *name, TGeoMedium *medium,
00293 Double_t phi, Double_t dphi, Int_t nz);
00294 TGeoVolume *MakeParaboloid(const char *name, TGeoMedium *medium,
00295 Double_t rlo, Double_t rhi, Double_t dz);
00296 TGeoVolume *MakeHype(const char *name, TGeoMedium *medium,
00297 Double_t rin, Double_t stin, Double_t rout, Double_t stout, Double_t dz);
00298 TGeoVolume *MakePgon(const char *name, TGeoMedium *medium,
00299 Double_t phi, Double_t dphi, Int_t nedges, Int_t nz);
00300 TGeoVolume *MakeSphere(const char *name, TGeoMedium *medium,
00301 Double_t rmin, Double_t rmax,
00302 Double_t themin=0, Double_t themax=180,
00303 Double_t phimin=0, Double_t phimax=360);
00304 TGeoVolume *MakeTorus(const char *name, TGeoMedium *medium, Double_t r,
00305 Double_t rmin, Double_t rmax, Double_t phi1=0, Double_t dphi=360);
00306 TGeoVolume *MakeTrap(const char *name, TGeoMedium *medium,
00307 Double_t dz, Double_t theta, Double_t phi, Double_t h1,
00308 Double_t bl1, Double_t tl1, Double_t alpha1, Double_t h2, Double_t bl2,
00309 Double_t tl2, Double_t alpha2);
00310 TGeoVolume *MakeTrd1(const char *name, TGeoMedium *medium,
00311 Double_t dx1, Double_t dx2, Double_t dy, Double_t dz);
00312 TGeoVolume *MakeTrd2(const char *name, TGeoMedium *medium,
00313 Double_t dx1, Double_t dx2, Double_t dy1, Double_t dy2,
00314 Double_t dz);
00315 TGeoVolume *MakeTube(const char *name, TGeoMedium *medium,
00316 Double_t rmin, Double_t rmax, Double_t dz);
00317 TGeoVolume *MakeTubs(const char *name, TGeoMedium *medium,
00318 Double_t rmin, Double_t rmax, Double_t dz,
00319 Double_t phi1, Double_t phi2);
00320 TGeoVolume *MakeXtru(const char *name, TGeoMedium *medium,
00321 Int_t nz);
00322
00323 TGeoPNEntry *SetAlignableEntry(const char *unique_name, const char *path, Int_t uid=-1);
00324 TGeoPNEntry *GetAlignableEntry(const char *name) const;
00325 TGeoPNEntry *GetAlignableEntry(Int_t index) const;
00326 TGeoPNEntry *GetAlignableEntryByUID(Int_t uid) const;
00327 Int_t GetNAlignable(Bool_t with_uid=kFALSE) const;
00328 TGeoPhysicalNode *MakeAlignablePN(const char *name);
00329 TGeoPhysicalNode *MakeAlignablePN(TGeoPNEntry *entry);
00330 TGeoPhysicalNode *MakePhysicalNode(const char *path=0);
00331 void ClearPhysicalNodes(Bool_t mustdelete=kFALSE);
00332 void RefreshPhysicalNodes(Bool_t lock=kTRUE);
00333 TVirtualGeoTrack *MakeTrack(Int_t id, Int_t pdgcode, TObject *particle);
00334 TGeoVolumeAssembly *MakeVolumeAssembly(const char *name);
00335 TGeoVolumeMulti *MakeVolumeMulti(const char *name, TGeoMedium *medium);
00336 void SetTopVolume(TGeoVolume *vol);
00337
00338
00339 TGeoNode *CrossBoundaryAndLocate(Bool_t downwards, TGeoNode *skipnode);
00340 TGeoNode *FindNextBoundary(Double_t stepmax=TGeoShape::Big(),const char *path="", Bool_t frombdr=kFALSE);
00341 TGeoNode *FindNextDaughterBoundary(Double_t *point, Double_t *dir, Int_t &idaughter, Bool_t compmatrix=kFALSE);
00342 TGeoNode *FindNextBoundaryAndStep(Double_t stepmax=TGeoShape::Big(), Bool_t compsafe=kFALSE);
00343 TGeoNode *FindNode(Bool_t safe_start=kTRUE);
00344 TGeoNode *FindNode(Double_t x, Double_t y, Double_t z);
00345 Double_t *FindNormal(Bool_t forward=kTRUE);
00346 Double_t *FindNormalFast();
00347 TGeoNode *InitTrack(const Double_t *point, const Double_t *dir);
00348 TGeoNode *InitTrack(Double_t x, Double_t y, Double_t z, Double_t nx, Double_t ny, Double_t nz);
00349 void ResetState();
00350 Double_t Safety(Bool_t inside=kFALSE);
00351 TGeoNode *SearchNode(Bool_t downwards=kFALSE, const TGeoNode *skipnode=0);
00352 TGeoNode *Step(Bool_t is_geom=kTRUE, Bool_t cross=kTRUE);
00353 void DisableInactiveVolumes() {fActivity=kTRUE;}
00354 void EnableInactiveVolumes() {fActivity=kFALSE;}
00355 void SetCurrentTrack(Int_t i) {fCurrentTrack = (TVirtualGeoTrack*)fTracks->At(i);}
00356 void SetCurrentTrack(TVirtualGeoTrack *track) {fCurrentTrack=track;}
00357 Int_t GetNtracks() const {return fNtracks;}
00358 TVirtualGeoTrack *GetCurrentTrack() {return fCurrentTrack;}
00359 TVirtualGeoTrack *GetLastTrack() {return (TVirtualGeoTrack*)((fNtracks>0)?fTracks->At(fNtracks-1):NULL);}
00360 const Double_t *GetLastPoint() const {return fCurrentNavigator->GetLastPoint();}
00361 TVirtualGeoTrack *GetTrack(Int_t index) {return (index<fNtracks)?(TVirtualGeoTrack*)fTracks->At(index):0;}
00362 Int_t GetTrackIndex(Int_t id) const;
00363 TVirtualGeoTrack *GetTrackOfId(Int_t id) const;
00364 TVirtualGeoTrack *FindTrackWithId(Int_t id) const;
00365 TVirtualGeoTrack *GetParentTrackOfId(Int_t id) const;
00366 Int_t GetVirtualLevel();
00367 Bool_t GotoSafeLevel();
00368 Int_t GetSafeLevel() const;
00369 Double_t GetSafeDistance() const {return fCurrentNavigator->GetSafeDistance();}
00370 Double_t GetLastSafety() const {return fCurrentNavigator->GetLastSafety();}
00371 Double_t GetStep() const {return fCurrentNavigator->GetStep();}
00372 void InspectState() const;
00373 Bool_t IsAnimatingTracks() const {return fIsGeomReading;}
00374 Bool_t IsCheckingOverlaps() const {return fCurrentNavigator->IsCheckingOverlaps();}
00375 Bool_t IsMatrixTransform() const {return fMatrixTransform;}
00376 Bool_t IsMatrixReflection() const {return fMatrixReflection;}
00377 Bool_t IsSameLocation(Double_t x, Double_t y, Double_t z, Bool_t change=kFALSE);
00378 Bool_t IsSameLocation() const {return fCurrentNavigator->IsSameLocation();}
00379 Bool_t IsSamePoint(Double_t x, Double_t y, Double_t z) const;
00380 Bool_t IsStartSafe() const {return fCurrentNavigator->IsStartSafe();}
00381 void SetCheckingOverlaps(Bool_t flag=kTRUE) {fCurrentNavigator->SetCheckingOverlaps(flag);}
00382 void SetStartSafe(Bool_t flag=kTRUE) {fCurrentNavigator->SetStartSafe(flag);}
00383 void SetMatrixTransform(Bool_t on=kTRUE) {fMatrixTransform = on;}
00384 void SetMatrixReflection(Bool_t flag=kTRUE) {fMatrixReflection = flag;}
00385 void SetStep(Double_t step) {fCurrentNavigator->SetStep(step);}
00386 Bool_t IsCurrentOverlapping() const {return fCurrentNavigator->IsCurrentOverlapping();}
00387 Bool_t IsEntering() const {return fCurrentNavigator->IsEntering();}
00388 Bool_t IsExiting() const {return fCurrentNavigator->IsExiting();}
00389 Bool_t IsStepEntering() const {return fCurrentNavigator->IsStepEntering();}
00390 Bool_t IsStepExiting() const {return fCurrentNavigator->IsStepExiting();}
00391 Bool_t IsOutside() const {return fCurrentNavigator->IsOutside();}
00392 Bool_t IsOnBoundary() const {return fCurrentNavigator->IsOnBoundary();}
00393 Bool_t IsNullStep() const {return fCurrentNavigator->IsNullStep();}
00394 Bool_t IsActivityEnabled() const {return fActivity;}
00395 void SetOutside(Bool_t flag=kTRUE) {fCurrentNavigator->SetOutside(flag);}
00396
00397
00398
00399 void CleanGarbage();
00400 void ClearShape(const TGeoShape *shape);
00401 void ClearTracks() {fTracks->Delete(); fNtracks=0;}
00402 void RemoveMaterial(Int_t index);
00403 void ResetUserData();
00404
00405
00406
00407 Int_t CountNodes(const TGeoVolume *vol=0, Int_t nlevels=10000, Int_t option=0);
00408 virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py);
00409 static Int_t Parse(const char* expr, TString &expr1, TString &expr2, TString &expr3);
00410 Int_t ReplaceVolume(TGeoVolume *vorig, TGeoVolume *vnew);
00411 Int_t TransformVolumeToAssembly(const char *vname);
00412 UChar_t *GetBits() {return fBits;}
00413 virtual Int_t GetByteCount(Option_t *option=0);
00414 Int_t *GetIntBuffer(Int_t length);
00415 Double_t *GetDblBuffer(Int_t length);
00416 void SetAllIndex();
00417
00418
00419 virtual Int_t Export(const char *filename, const char *name="", Option_t *option="v");
00420 static void LockGeometry();
00421 static void UnlockGeometry();
00422 static Int_t GetVerboseLevel();
00423 static void SetVerboseLevel(Int_t vl);
00424 static TGeoManager *Import(const char *filename, const char *name="", Option_t *option="");
00425 static Bool_t IsLocked();
00426 Bool_t IsStreamingVoxels() const {return fStreamVoxels;}
00427
00428
00429 TObjArray *GetListOfNodes() {return fNodes;}
00430 TObjArray *GetListOfPhysicalNodes() {return fPhysicalNodes;}
00431 TObjArray *GetListOfOverlaps() {return fOverlaps;}
00432 TObjArray *GetListOfMatrices() const {return fMatrices;}
00433 TList *GetListOfMaterials() const {return fMaterials;}
00434 TList *GetListOfMedia() const {return fMedia;}
00435 TObjArray *GetListOfVolumes() const {return fVolumes;}
00436 TObjArray *GetListOfGVolumes() const {return fGVolumes;}
00437 TObjArray *GetListOfShapes() const {return fShapes;}
00438 TObjArray *GetListOfGShapes() const {return fGShapes;}
00439 TObjArray *GetListOfUVolumes() const {return fUniqueVolumes;}
00440 TObjArray *GetListOfTracks() const {return fTracks;}
00441 TObjArray *GetListOfNavigators() const {return fNavigators;}
00442 TGeoElementTable *GetElementTable();
00443
00444
00445 void DoBackupState();
00446 void DoRestoreState();
00447 TGeoNode *GetNode(Int_t level) const {return (TGeoNode*)fNodes->UncheckedAt(level);}
00448 Int_t GetNodeId() const {return fCurrentNavigator->GetNodeId();}
00449 TGeoNode *GetNextNode() const {return fCurrentNavigator->GetNextNode();}
00450 TGeoNode *GetMother(Int_t up=1) const {return fCurrentNavigator->GetMother(up);}
00451 TGeoHMatrix *GetMotherMatrix(Int_t up=1) const {return fCurrentNavigator->GetMotherMatrix(up);}
00452 TGeoHMatrix *GetHMatrix();
00453 TGeoHMatrix *GetCurrentMatrix() const {return fCurrentNavigator->GetCurrentMatrix();}
00454 TGeoHMatrix *GetGLMatrix() const {return fGLMatrix;}
00455 TGeoNavigator *GetCurrentNavigator() const {return fCurrentNavigator;}
00456 TGeoNode *GetCurrentNode() const {return fCurrentNavigator->GetCurrentNode();}
00457 Int_t GetCurrentNodeId() const;
00458 const Double_t *GetCurrentPoint() const {return fCurrentNavigator->GetCurrentPoint();}
00459 const Double_t *GetCurrentDirection() const {return fCurrentNavigator->GetCurrentDirection();}
00460 TGeoVolume *GetCurrentVolume() const {return fCurrentNavigator->GetCurrentVolume();}
00461 const Double_t *GetCldirChecked() const {return fCurrentNavigator->GetCldirChecked();}
00462 const Double_t *GetCldir() const {return fCurrentNavigator->GetCldir();}
00463 const Double_t *GetNormal() const {return fCurrentNavigator->GetNormal();}
00464 Int_t GetLevel() const {return fCurrentNavigator->GetLevel();}
00465 Int_t GetMaxLevel() const {return fNLevel;}
00466 const char *GetPath() const;
00467 Int_t GetStackLevel() const {return fCurrentNavigator->GetStackLevel();}
00468 TGeoVolume *GetMasterVolume() const {return fMasterVolume;}
00469 TGeoVolume *GetTopVolume() const {return fTopVolume;}
00470 TGeoNode *GetTopNode() const {return fTopNode;}
00471 TGeoPhysicalNode *GetPhysicalNode(Int_t i) const {return (TGeoPhysicalNode*)fPhysicalNodes->UncheckedAt(i);}
00472 void SetCurrentPoint(Double_t *point) {fCurrentNavigator->SetCurrentPoint(point);}
00473 void SetCurrentPoint(Double_t x, Double_t y, Double_t z) {fCurrentNavigator->SetCurrentPoint(x,y,z);}
00474 void SetLastPoint(Double_t x, Double_t y, Double_t z) {fCurrentNavigator->SetLastPoint(x,y,z);}
00475 void SetCurrentDirection(Double_t *dir) {fCurrentNavigator->SetCurrentDirection(dir);}
00476 void SetCurrentDirection(Double_t nx, Double_t ny, Double_t nz) {fCurrentNavigator->SetCurrentDirection(nx,ny,nz);}
00477 void SetCldirChecked(Double_t *dir) {fCurrentNavigator->SetCldirChecked(dir);}
00478
00479
00480 void LocalToMaster(const Double_t *local, Double_t *master) const {fCurrentNavigator->LocalToMaster(local, master);}
00481 void LocalToMasterVect(const Double_t *local, Double_t *master) const {fCurrentNavigator->LocalToMasterVect(local, master);}
00482 void LocalToMasterBomb(const Double_t *local, Double_t *master) const {fCurrentNavigator->LocalToMasterBomb(local, master);}
00483 void MasterToLocal(const Double_t *master, Double_t *local) const {fCurrentNavigator->MasterToLocal(master, local);}
00484 void MasterToLocalVect(const Double_t *master, Double_t *local) const {fCurrentNavigator->MasterToLocalVect(master, local);}
00485 void MasterToLocalBomb(const Double_t *master, Double_t *local) const {fCurrentNavigator->MasterToLocalBomb(master, local);}
00486 void MasterToTop(const Double_t *master, Double_t *top) const;
00487 void TopToMaster(const Double_t *top, Double_t *master) const;
00488
00489
00490 TGeoMaterial *FindDuplicateMaterial(const TGeoMaterial *mat) const;
00491 TGeoVolume *FindVolumeFast(const char*name, Bool_t multi=kFALSE);
00492 TGeoMaterial *GetMaterial(const char *matname) const;
00493 TGeoMaterial *GetMaterial(Int_t id) const;
00494 TGeoMedium *GetMedium(const char *medium) const;
00495 TGeoMedium *GetMedium(Int_t numed) const;
00496 Int_t GetMaterialIndex(const char *matname) const;
00497
00498 TGeoVolume *GetVolume(const char*name) const;
00499 TGeoVolume *GetVolume(Int_t uid) const {return (TGeoVolume*)fUniqueVolumes->At(uid);}
00500 Int_t GetUID(const char *volname) const;
00501 Int_t GetNNodes() {if (!fNNodes) CountNodes(); return fNNodes;}
00502 TGeoNodeCache *GetCache() const {return fCurrentNavigator->GetCache();}
00503
00504 void SetAnimateTracks(Bool_t flag=kTRUE) {fIsGeomReading=flag;}
00505 virtual ULong_t SizeOf(const TGeoNode *node, Option_t *option);
00506 void SelectTrackingMedia();
00507
00508
00509 Int_t PushPath(Int_t startlevel=0) {return fCurrentNavigator->PushPath(startlevel);}
00510 Bool_t PopPath() {return fCurrentNavigator->PopPath();}
00511 Bool_t PopPath(Int_t index) {return fCurrentNavigator->PopPath(index);}
00512 Int_t PushPoint(Int_t startlevel=0) {return fCurrentNavigator->PushPoint(startlevel);}
00513 Bool_t PopPoint() {return fCurrentNavigator->PopPoint();}
00514 Bool_t PopPoint(Int_t index) {return fCurrentNavigator->PopPoint(index);}
00515 void PopDummy(Int_t ipop=9999) {return fCurrentNavigator->PopDummy(ipop);}
00516
00517 ClassDef(TGeoManager, 12)
00518 };
00519
00520 R__EXTERN TGeoManager *gGeoManager;
00521
00522 #endif
00523