2 // Category: interfaces
5 //==============================================================
7 //----------------TG4GeometryGUI.cxx--------------------------//
8 //----------------AG4 Geometry Browser----------------------//
10 //=================================================================
14 #include "TG4GeometryGUI.h"
15 #include "TG4GuiVolume.h"
16 #include "TG4MainFrame.h"
17 #include "TG4ListTreeFrame.h"
18 #include "TG4VolumesFrames.h"
19 #include "TG4MaterialsFrames.h"
20 #include "TG4Globals.h"
22 #include <G4LogicalVolume.hh>
23 #include <G4VPhysicalVolume.hh>
24 #include <G4LogicalVolumeStore.hh>
25 #include <TGListTree.h>
26 #include <TObjArray.h>
30 ClassImp(TG4GeometryGUI)
32 TG4GeometryGUI::TG4GeometryGUI()
35 fPanel = new TG4MainFrame(gClient->GetRoot(), 650, 500);
37 G4cout << "\n***********************************************" << G4endl;
38 G4cout << "***********************************************" << G4endl;
39 G4cout << " Welcome to the Geometry Browser for AliGeant4 " << G4endl;
40 G4cout << "\n***********************************************" << G4endl;
41 G4cout << "***********************************************\n" << G4endl;
49 TG4GeometryGUI::TG4GeometryGUI(const TG4GeometryGUI& gg)
51 // Dummy copy constructor
52 TG4Globals::Exception(
53 "Attempt to use TG4GeometryGUI copy constructor.");
56 TG4GeometryGUI& TG4GeometryGUI::operator=(const TG4GeometryGUI& gg)
58 // check assignement to self
59 if (this == &gg) return *this;
61 TG4Globals::Exception(
62 "Attempt to assign TG4GeometryGUI singleton.");
67 TG4GeometryGUI::~TG4GeometryGUI(){
70 G4cout << "\n Now in TG4GeometryGUI destructor \n" << G4endl;
72 // ----> guiVolumes not taken care of yet
76 void TG4GeometryGUI::ReadGeometryTree()
78 //--->Linking logical volumes to gui volumes
81 const TGPicture* kFolder = gClient->GetPicture("folder_t.xpm");
82 const TGPicture* kOpenFolder = gClient->GetPicture("ofolder_t.xpm");
83 const TGPicture* kDocument = gClient->GetPicture("doc_t.xpm");
86 G4LogicalVolumeStore* volumeStore;
89 TGListTreeItem* itemi;
91 volumeStore = G4LogicalVolumeStore::GetInstance();
92 top = (*volumeStore )[0];
94 G4String vname = top->GetName();
95 volume = new TG4GuiVolume( vname, top);//--->TObject
96 itemi = fPanel->GetListTreeFrame()
97 ->AddItem(volume,0,vname, kOpenFolder, kFolder);
99 RegisterLogicalVolume( top, itemi);
101 // delete volume; ---> inactivated to get UserData for the
102 // ---> ListTree items in the MainFrame
106 void TG4GeometryGUI::RegisterLogicalVolume(G4LogicalVolume* lv,
107 TGListTreeItem* itemv)
109 //--->Filling up gui volumes objArray
111 typedef G4std::set <G4String, G4std::less<G4String> > TG4StringSet;
112 TG4StringSet lVolumeNames; //set of names of solids
115 const TGPicture* kFolder = gClient->GetPicture("folder_t.xpm");
116 const TGPicture* kOpenFolder = gClient->GetPicture("ofolder_t.xpm");
118 TG4GuiVolume* volume;
119 G4LogicalVolume* lDaughter;
120 G4VPhysicalVolume* pDaughter;
121 TGListTreeItem* itemi;
123 G4int nofDaughters = lv->GetNoDaughters();
124 if (nofDaughters == 0) return;
126 //---------->only for nofDaughters > 0
128 G4String lvName = lv->GetName();
129 TObjArray* guiVolumes = new TObjArray();
133 for (ii=0; ii<nofDaughters; ii++) {
135 pDaughter = lv->GetDaughter(ii);
136 lDaughter = pDaughter->GetLogicalVolume();
137 G4String vname = lDaughter->GetName();
139 //-------> process lv only if it was not yet processed
140 if ( (lVolumeNames.find(vname)) == (lVolumeNames.end()) ) {
142 volume = new TG4GuiVolume( vname, lDaughter);
143 itemi = fPanel->GetListTreeFrame()
144 ->AddItem(volume, itemv, vname, kOpenFolder, kFolder);
146 itemi->SetUserData(volume);
148 volume->SetItem( itemi);
150 //-----> store the name of logical volume in the set
151 lVolumeNames.insert(lVolumeNames.begin(),vname);
152 guiVolumes->AddLast( volume );
158 //-----> process daughters
159 for (ii=0; ii<guiVolumes->GetEntriesFast(); ii++) {
161 TG4GuiVolume* guiVolume = (TG4GuiVolume*)(guiVolumes->At(ii));
162 G4LogicalVolume* lvd = guiVolume->GetLogicalVolume();
163 TGListTreeItem* itemvd = guiVolume->GetItem();
164 RegisterLogicalVolume(lvd, itemvd);
168 // delete volume;---> if deleted, wrong logical volumes assigned
169 // ---> to the ListTree items in the MainFrame display
172 void TG4GeometryGUI::ReadMaterials() const
174 //-----> Puts logical volumes and materials names
175 //-----> into ComboBoxes
176 TG4VolumesFrames* vFrame = fPanel->GetVolumesFrames();
177 vFrame->SetVolumesComboEntries();
179 TG4MaterialsFrames* mFrame = fPanel->GetMaterialsFrames();
180 mFrame->SetMaterialsComboEntries();