2 // Category: interfaces
4 // Author: D. Adamova, I. Hrivnacova
5 //==============================================================
7 //----------------TG4GeometryGUI.cxx--------------------------//
8 //----------------AG4 Geometry Browser----------------------//
10 //=================================================================
14 #include "TG4GeometryGUI.h"
15 #include "TG4GuiVolume.h"
17 #include <G4LogicalVolume.hh>
18 #include <G4VPhysicalVolume.hh>
19 #include <G4LogicalVolumeStore.hh>
20 #include <TGListTree.h>
21 #include <TObjArray.h>
23 ClassImp(TG4GeometryGUI)
25 TG4GeometryGUI::TG4GeometryGUI()
28 fPanel = new TG4GUI(gClient->GetRoot(), 650, 500);
34 void TG4GeometryGUI::ReadGeometryTree()
36 // Linking logical volumes to gui volumes
39 const TGPicture* kFolder = gClient->GetPicture("folder_t.xpm");
40 const TGPicture* kOpenFolder = gClient->GetPicture("ofolder_t.xpm");
43 G4LogicalVolumeStore* volumeStore;
46 TGListTreeItem* itemi;
48 volumeStore = G4LogicalVolumeStore::GetInstance();
49 top = (*volumeStore )[0];
51 G4String vname = top->GetName();
52 volume = new TG4GuiVolume( vname, top);//--->TObject
53 itemi = fPanel->AddItem(volume,0,vname, kOpenFolder, kFolder);
55 RegisterLogicalVolume( top, itemi);
59 void TG4GeometryGUI::RegisterLogicalVolume(G4LogicalVolume* lv,
60 TGListTreeItem* itemv)
62 // Filling up gui volumes objArray
64 typedef G4std::set <G4String, G4std::less<G4String> > TG4StringSet;
65 TG4StringSet lVolumeNames; //set of names of solids
68 const TGPicture* kFolder = gClient->GetPicture("folder_t.xpm");
69 const TGPicture* kOpenFolder = gClient->GetPicture("ofolder_t.xpm");
72 G4LogicalVolume* lDaughter;
73 G4VPhysicalVolume* pDaughter;
74 TGListTreeItem* itemi;
76 G4int nofDaughters = lv->GetNoDaughters();
77 if (nofDaughters == 0) return;
79 //---------->only for nofDaughters > 0
81 G4String lvName = lv->GetName();
82 TObjArray* guiVolumes = new TObjArray();
86 for (ii=0; ii<nofDaughters; ii++) {
88 pDaughter = lv->GetDaughter(ii);
89 lDaughter = pDaughter->GetLogicalVolume();
90 G4String vname = lDaughter->GetName();
92 //-------> process lv only if it was not yet processed
93 if ( (lVolumeNames.find(vname)) == (lVolumeNames.end()) ) {
95 volume = new TG4GuiVolume( vname, lDaughter);
96 itemi = fPanel->AddItem(volume, itemv, vname, kOpenFolder, kFolder);
97 volume->SetItem( itemi);
99 //-----> store the name of logical volume in the set
100 lVolumeNames.insert(lVolumeNames.begin(),vname);
101 guiVolumes->AddLast( volume );
107 //-----> process daughters
108 for (ii=0; ii<guiVolumes->GetEntriesFast(); ii++) {
110 TG4GuiVolume* guiVolume = (TG4GuiVolume*)(guiVolumes->At(ii));
111 G4LogicalVolume* lvd = guiVolume->GetLogicalVolume();
112 TGListTreeItem* itemvd = guiVolume->GetItem();
113 RegisterLogicalVolume(lvd, itemvd);