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 TG4StringSet lVolumeNames; //set of names of solids
114 const TGPicture* kFolder = gClient->GetPicture("folder_t.xpm");
115 const TGPicture* kOpenFolder = gClient->GetPicture("ofolder_t.xpm");
117 TG4GuiVolume* volume;
118 G4LogicalVolume* lDaughter;
119 G4VPhysicalVolume* pDaughter;
120 TGListTreeItem* itemi;
122 G4int nofDaughters = lv->GetNoDaughters();
123 if (nofDaughters == 0) return;
125 //---------->only for nofDaughters > 0
127 G4String lvName = lv->GetName();
128 TObjArray* guiVolumes = new TObjArray();
132 for (ii=0; ii<nofDaughters; ii++) {
134 pDaughter = lv->GetDaughter(ii);
135 lDaughter = pDaughter->GetLogicalVolume();
136 G4String vname = lDaughter->GetName();
138 //-------> process lv only if it was not yet processed
139 if ( (lVolumeNames.find(vname)) == (lVolumeNames.end()) ) {
141 volume = new TG4GuiVolume( vname, lDaughter);
142 itemi = fPanel->GetListTreeFrame()
143 ->AddItem(volume, itemv, vname, kOpenFolder, kFolder);
145 itemi->SetUserData(volume);
147 volume->SetItem( itemi);
149 //-----> store the name of logical volume in the set
150 lVolumeNames.insert(lVolumeNames.begin(),vname);
151 guiVolumes->AddLast( volume );
157 //-----> process daughters
158 for (ii=0; ii<guiVolumes->GetEntriesFast(); ii++) {
160 TG4GuiVolume* guiVolume = (TG4GuiVolume*)(guiVolumes->At(ii));
161 G4LogicalVolume* lvd = guiVolume->GetLogicalVolume();
162 TGListTreeItem* itemvd = guiVolume->GetItem();
163 RegisterLogicalVolume(lvd, itemvd);
167 // delete volume;---> if deleted, wrong logical volumes assigned
168 // ---> to the ListTree items in the MainFrame display
171 void TG4GeometryGUI::ReadMaterials() const
173 //-----> Puts logical volumes and materials names
174 //-----> into ComboBoxes
175 TG4VolumesFrames* vFrame = fPanel->GetVolumesFrames();
176 vFrame->SetVolumesComboEntries();
178 TG4MaterialsFrames* mFrame = fPanel->GetMaterialsFrames();
179 mFrame->SetMaterialsComboEntries();