Most coding rule violations corrected.
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3GUI.h
1 #ifndef TGEANT3GUI
2 #define TGEANT3GUI
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include <TROOT.h>
9 #include <TVirtualX.h>
10 #include <TGListBox.h>
11 #include <TGListTree.h>
12 #include <TGClient.h>
13 #include <TGFrame.h>
14 #include <TGIcon.h>
15 #include <TGLabel.h>
16 #include <TGButton.h>
17 #include <TGTextEntry.h>
18 #include <TGMsgBox.h>
19 #include <TGMenu.h>
20 #include <TGCanvas.h>
21 #include <TGComboBox.h>
22 #include <TGTab.h>
23 #include <TGSlider.h>
24 #include <TGDoubleSlider.h>
25 #include <TGFileDialog.h>
26 #include <TRootEmbeddedCanvas.h>
27 #include <TCanvas.h>
28 #include <TH1.h>
29 #include <TH2.h>
30 #include <TClonesArray.h>
31 #include <TGeant3.h>
32
33 class AliGuiGeomDialog;
34 class AliGUISliders;
35 class AliGuiGeomMain;
36 class AliDrawVolume;
37 class AliGUIMaterial;
38 class AliGUIMedium;
39
40
41 class AliGeant3GeometryGUI : public TObject {
42  public:
43     AliGeant3GeometryGUI();
44     virtual ~AliGeant3GeometryGUI(){;}
45     
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 
49     void  ReadMaterials();
50     Float_t Cut(Int_t idmed, Int_t icut);
51  private:
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 
64
65  private:
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);
76     //
77
78     
79     ClassDef(AliGeant3GeometryGUI,1)  // GUI for Geant3 geometry visualisation
80 };
81
82
83 class AliGuiGeomMain : public TGMainFrame {
84  public:
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,
92                 const char* name,
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);
100     // Update widgets
101     virtual void Update();
102     // Update ComboBoxes
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;}
110     virtual void Plot();
111 private:
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
137     
138
139     ClassDef(AliGuiGeomMain,1)  // MainFrame for Geometry Browser
140 };
141
142
143 class AliGuiGeomDialog : public TGTransientFrame {
144 public:
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);
152 // Update widgets   
153    virtual void Update();
154 private:
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
168 };
169
170 class AliGUISliders : public  TGCompositeFrame {
171 public:
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();
177 private:
178 //
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 
186       
187    //   ClassDef(AliGUISliders,1)  // Window containing sliders 
188 };
189
190 class AliDrawVolume : public TObject 
191 {
192 public:
193     AliDrawVolume(char* name);
194     virtual ~AliDrawVolume(){;}
195     // Draw the volume
196     virtual void    Draw(Option_t * option =0);
197     // Draw volume specs
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);
205     // Set volume id
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;}
213     // Get volume id
214     virtual Int_t GetIdVolume()         {return fIdVolume;}
215     // Get copy number
216     virtual Int_t GetIdCopy()           {return fIdCopy;}
217     // Get medium number
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;}
227             
228 private:
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 
254 };
255
256
257 class AliGUIMaterial : public TObject 
258 {
259 public:
260     AliGUIMaterial();
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
265     virtual void  Dump();
266     // Get material id
267     virtual Int_t Id();
268     // Get material name
269     virtual char* Name();
270     // Get mass number 
271     virtual Float_t A();
272     // Get charge number 
273     virtual Float_t Z();
274     // Get density
275     virtual Float_t Density();
276     // Get radiation length
277     virtual Float_t RadiationLength();
278     // Get absorption lenth
279     virtual Float_t AbsorptionLength();
280     // Plot
281     virtual void  Plot();
282     // Set and get link to widget entry
283     virtual Int_t ItemId() {return fItem;}
284     virtual void  SetItemId(Int_t id) {fItem=id;}
285 private:
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
293     //
294     Int_t   fItem;            // Link to Widget Entry
295     ClassDef(AliGUIMaterial,1) // Material Object for GUI 
296 };
297
298
299 const static Int_t kNPars=33;
300
301 class AliGUIMedium : public TObject 
302 {
303 public:
304     AliGUIMedium();
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);
308     
309     virtual ~AliGUIMedium(){;}
310     // Dump medium parameters
311     virtual void    Dump();
312     // Get id
313     virtual Int_t   Id();
314     // Get name
315     virtual char*   Name();
316     // Get parameters
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;}
331     
332  private:
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
345     //
346     Int_t   fItem;           // Link to Widget Entry
347     ClassDef(AliGUIMedium,1) // Tracking Medium Object for GUI 
348 };
349
350 #endif
351
352
353
354
355
356
357
358