3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
10 #include <TGListBox.h>
11 #include <TGListTree.h>
17 #include <TGTextEntry.h>
21 #include <TGComboBox.h>
24 #include <TGDoubleSlider.h>
25 #include <TGFileDialog.h>
26 #include <TRootEmbeddedCanvas.h>
30 #include <TClonesArray.h>
33 class AliGuiGeomDialog;
41 class AliGeant3GeometryGUI : public TObject {
43 AliGeant3GeometryGUI();
44 virtual ~AliGeant3GeometryGUI(){;}
46 // Reads the zebra geometry tree and put it into the ListTree
47 void ReadGeometryTree();
48 // Read material and media information and put it into ComboBox
50 Float_t Cut(Int_t idmed, Int_t icut);
52 AliGuiGeomMain *fPanel; // the main gui panel
53 Int_t fNstack; // number of volumes
54 TClonesArray *fVolumes; // array of volumes
55 Int_t fNMaterials; // number of materials and media
56 TClonesArray *fMaterials; // array of materials
57 TClonesArray *fMedia; // array of materials
58 // Zebra bank related information
59 Int_t* fZlq; // pointer to Zebra bank lq
60 Float_t* fZq; // pointer to Zebra bank q
61 Int_t* fZiq; // pointer to Zebra bank iq
62 Gclink_t* fGclink; // pointer to Geant common block
63 Gcnum_t* fGcnum; // pointer to Geant common block
66 virtual AliDrawVolume* Volume(Int_t id)
67 {return (AliDrawVolume *) (fVolumes->UncheckedAt(id));}
68 // Return number of children for volume idvol
69 Int_t NChildren(Int_t idvol);
70 // Return child number idc of volume idvol
71 Int_t Child(Int_t idvol, Int_t idc);
72 // Return medium number for given volume idvol
73 Int_t Medium(Int_t idvol);
74 // Return material number for given volume idvol
75 Int_t Material(Int_t idvol);
79 ClassDef(AliGeant3GeometryGUI,1) // GUI for Geant3 geometry visualisation
83 class AliGuiGeomMain : public TGMainFrame {
85 AliGuiGeomMain(const TGWindow *p, UInt_t w, UInt_t h);
86 virtual ~AliGuiGeomMain();
87 // Destroy the main window
88 virtual void CloseWindow();
89 // Add item to ListTree
90 virtual TGListTreeItem *
91 AddItem(TObject *obj, TGListTreeItem* parent,
93 const TGPicture* open, const TGPicture* closed);
94 // Add Material to ComboBox
95 virtual void AddMaterial(AliGUIMaterial *Material, Int_t i);
96 // Add Medium to ComboBox
97 virtual void AddMedium(AliGUIMedium *Medium, Int_t i);
98 // Process messages from this window
99 virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
101 virtual void Update();
103 virtual void UpdateCombo();
104 virtual void UpdateListBox();
105 // Relate objects to ComboEntries
106 // Currently ComboBox Entries are strings only, hence we need this construction
107 virtual void SetComboEntries(TClonesArray *entries) {fComboEntries=entries;}
108 virtual void SetMediaComboEntries(TClonesArray *entries)
109 {fComboMediaEntries=entries;}
112 TGTab *fTab; // Contains Tab entries: volumes, materials..
113 TGCanvas *fCanvasWindow; // Canvas window for list tree
114 TGCompositeFrame *fF2, *fF21, *fF3, *fF31, *fF4, *fF5; // Frames for combos
115 TGCompositeFrame *fF6, *fF61, *fF62, *fF63; // Frames for combos
116 TGListTree *fLt; // Volumes list tree
117 TGMenuBar *fMenuBar; // Menu bar: File, Draw Control ...
118 TGPopupMenu *fMenuFile, *fMenuTest, *fMenuHelp; // Pop-up menus
119 TGLayoutHints *fMenuBarItemLayout, *fMenuBarHelpLayout, // Lay-out hints
120 *fMenuBarLayout, fLTab; // Lay-out hints
121 TGLayoutHints *fL2; // Lay-out hints
122 AliGuiGeomDialog *fDialog; //! no output please
123 TGComboBox *fMaterialCombo; // Material combo box
124 TGComboBox *fMechanismCombo; // Mechanism combo box
125 TGComboBox *fMediaCombo, *fParticleCombo; // Media and particle combo boxes
126 TGListBox *fProcessLB, *fCutsLB; // List boxes for cuts and processes
127 TClonesArray *fComboEntries; // List of materials
128 TClonesArray *fComboMediaEntries; // List of media
129 TGHorizontalFrame *fHframe[6],*fHframeM[8]; // sub frames
130 TGTextBuffer *fTbh[6], *fTbhM[8], *fTbh61, *fTbh62, *fTbh63; // text frames
131 TGTextEntry *fTeh[6], *fTehM[8], *fTeh61, *fTeh62, *fTeh63; // text entries
132 TGLabel *fLabel[6], *fLabelM[8], *fSLabel61; // labels
133 TGTextButton *fPlotButton; // Plot-Button
134 Float_t fEmin; // minimum energy for de/dx plot
135 Float_t fEmax; // maximum energy for de/dx plot
136 Int_t fNbins; // number of bins for de/dx plot
139 ClassDef(AliGuiGeomMain,1) // MainFrame for Geometry Browser
143 class AliGuiGeomDialog : public TGTransientFrame {
145 AliGuiGeomDialog(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h,
146 UInt_t options = kMainFrame | kVerticalFrame);
147 virtual ~AliGuiGeomDialog();
148 // Destroy this window
149 virtual void CloseWindow();
150 // Process messages from this window
151 virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
153 virtual void Update();
155 AliGUISliders *fF1; // Slider for Draw Control
156 TGCompositeFrame *fFrame1, *fF2, *fF3, *fF4; // Outer frames
157 TGButton *fOkButton, *fCancelButton; // Buttons
158 TGButton *fChk1, *fChk2, *fChk3; // Buttons
159 TGComboBox *fCombo, *fCombo2; // Combo Boxes
160 TGLabel *fLabel1, *fLabel2; // Labels
161 TGTab *fTab; // Tab Entries
162 TGLayoutHints *fL1, *fL2, *fL3, *fL4, *fBly, *fBfly1; // Layout hints
163 TGHorizontalFrame *fHSframe1, *fHSframe2, *fHSframe3; // Horizontal frames
164 TGTextBuffer *fTbh11, *fTbh12, *fTbh21, *fTbh22, *fTbh31, *fTbh32; // Text buffers
165 TGTextEntry *fTeh11, *fTeh12, *fTeh21, *fTeh22, *fTeh31, *fTeh32; // Text Entries
166 TGDoubleHSlider *fDslider1, *fDslider2, *fDslider3; // Sliders for clip box
167 TGLabel *fSLabel1, *fSLabel2, *fSLabel3; // Labels
170 class AliGUISliders : public TGCompositeFrame {
172 AliGUISliders(const TGWindow *p, const TGWindow *main, UInt_t w, UInt_t h);
173 virtual ~AliGUISliders();
174 virtual void CloseWindow();
175 virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
176 virtual void Update();
179 TGHorizontalFrame *fHframe[8]; // 8 Horizontal frames for sliders
180 TGLayoutHints *fBly, *fBfly1; // Lay-out hints
181 TGHSlider *fHslider[8]; // 8 Sliders
182 TGTextEntry *fTeh[8]; // Text entries for slider position
183 TGTextBuffer *fTbh[8]; // Text buffer
184 TGLabel *fLabel[8]; // Slider labels
185 Text_t fLabelText[8]; // Label text
187 // ClassDef(AliGUISliders,1) // Window containing sliders
190 class AliDrawVolume : public TObject
193 AliDrawVolume(char* name);
194 virtual ~AliDrawVolume(){;}
196 virtual void Draw(Option_t * option =0);
198 virtual void DrawSpec();
199 // Return volume name
200 virtual char* Name();
201 // Set volume parameter i
202 virtual void SetParam(Int_t i, Float_t param);
203 // Get volume parameters i
204 virtual Float_t GetParam(Int_t i);
206 virtual void SetIdVolume(Int_t id) {fIdVolume = id;}
207 // Set volume copy number
208 virtual void SetIdCopy(Int_t id) {fIdCopy = id;}
209 // Set volume medium number
210 virtual void SetIdMedium(Int_t id) {fIdMedium = id;}
211 // Set volume material number
212 virtual void SetIdMaterial(Int_t id) {fIdMaterial = id;}
214 virtual Int_t GetIdVolume() {return fIdVolume;}
216 virtual Int_t GetIdCopy() {return fIdCopy;}
218 virtual Int_t Medium() {return fIdMedium;}
219 // Get material number
220 virtual Int_t Material() {return fIdMaterial;}
221 // Increase copy number by one
222 virtual void AddCopy() {fIdCopy ++;}
223 // Set link to ListTree Item
224 virtual void SetItem(TGListTreeItem *item) {fItem = item;}
225 // Get link to ListTree Item
226 virtual TGListTreeItem* GetItem() {return fItem;}
229 char* fName; // name of the volume
230 Float_t fTheta; // theta-angle for drawing
231 Float_t fPhi; // phi-angle for drawing
232 Float_t fPsi; // psi-angle for drawing
233 Float_t fU; // u-position
234 Float_t fV; // v-position
235 Float_t fUscale; // u-scaling factor
236 Float_t fVscale; // v-scaling factor
237 Bool_t fHide; // hide flag
238 Bool_t fShadow; // shadow flag
239 Int_t fFill; // fill option 1-6
240 Int_t fSeen; // seen option -2 - 1
241 Bool_t fClip; // clipping flag
242 Float_t fClipXmin; // clip box range xmin
243 Float_t fClipXmax; // clip box range xmax
244 Float_t fClipYmin; // clip box range ymin
245 Float_t fClipYmax; // clip box range ymax
246 Float_t fClipZmin; // clip box range zmin
247 Float_t fClipZmax; // clip box range zmax
248 Int_t fIdVolume; // geant volume id
249 Int_t fIdMedium; // geant medium id
250 Int_t fIdMaterial; // geant material id
251 Int_t fIdCopy; // copy flag
252 TGListTreeItem *fItem; // current item
253 ClassDef(AliDrawVolume,1) // Volume Object for Drawing
257 class AliGUIMaterial : public TObject
261 AliGUIMaterial(Int_t imat, char* name, Float_t a, Float_t z,
262 Float_t dens, Float_t radl, Float_t absl);
263 virtual ~AliGUIMaterial(){;}
264 // Dump material parameters
269 virtual char* Name();
275 virtual Float_t Density();
276 // Get radiation length
277 virtual Float_t RadiationLength();
278 // Get absorption lenth
279 virtual Float_t AbsorptionLength();
282 // Set and get link to widget entry
283 virtual Int_t ItemId() {return fItem;}
284 virtual void SetItemId(Int_t id) {fItem=id;}
286 Int_t fId; // Id number of the material
287 char* fName; // name of the material
288 Float_t fA; // mass number of the material
289 Float_t fZ; // charge number of the material
290 Float_t fDensity; // density of the material
291 Float_t fRadl; // radiation length of the material
292 Float_t fAbsl; // absorption length
294 Int_t fItem; // Link to Widget Entry
295 ClassDef(AliGUIMaterial,1) // Material Object for GUI
299 const static Int_t kNPars=33;
301 class AliGUIMedium : public TObject
305 AliGUIMedium(Int_t imed, Int_t imat, char* name, Int_t isvol, Int_t ifield,
306 Float_t fieldm, Float_t tmaxfd, Float_t stemax, Float_t deemax,
307 Float_t epsil, Float_t stmin);
309 virtual ~AliGUIMedium(){;}
310 // Dump medium parameters
315 virtual char* Name();
317 virtual Int_t IdMat() {return fIdMat;}
318 virtual Int_t Isvol() {return fIsvol;}
319 virtual Int_t Ifield() {return fIfield;}
320 virtual Float_t Fieldm() {return fFieldm;}
321 virtual Float_t Tmaxfd() {return fTmaxfd;}
322 virtual Float_t Stemax() {return fStemax;}
323 virtual Float_t Deemax() {return fDeemax;}
324 virtual Float_t Epsil() {return fEpsil;}
325 virtual Float_t Stmin() {return fStmin;}
326 virtual void SetPar(Int_t ipar, Float_t par) {fPars[ipar-1]=par;}
327 virtual Float_t GetPar(Int_t ipar);
328 // Set and get link to widget entry
329 virtual Int_t ItemId() {return fItem;}
330 virtual void SetItemId(Int_t id) {fItem=id;}
333 Float_t fPars[kNPars]; // special medium parameters
334 Int_t fId; // Id number of the Medium
335 Int_t fIdMat; // Associated material
336 char* fName; // Name of the Medium
337 Int_t fIsvol; // Sensitivity flag
338 Int_t fIfield; // Magnetic Field Flag
339 Float_t fFieldm; // Maximum Field Strength
340 Float_t fTmaxfd; // Max. Ang. Deviation
341 Float_t fStemax; // Maximum Step
342 Float_t fDeemax; // Max. Frac. Energy Loss",
343 Float_t fEpsil; // Crossing Precission
344 Float_t fStmin; // Minimum Step Size
346 Int_t fItem; // Link to Widget Entry
347 ClassDef(AliGUIMedium,1) // Tracking Medium Object for GUI