ROOT logo
// @(#):$Id: TGeoMediumEditor.cxx 21494 2007-12-19 15:50:40Z brun $
// Author: M.Gheata 

/*************************************************************************
 * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//______________________________________________________________________________
//                                                                      
//  TGeoMediumEditor - Editor class for TGeo tracking media
//                                                                      
//______________________________________________________________________________

#include "TGeoMediumEditor.h"
#include "TGeoTabManager.h"
#include "TGeoManager.h"
#include "TGeoMedium.h"
#include "TGeoMaterial.h"
#include "TPad.h"
#include "TGTab.h"
#include "TGComboBox.h"
#include "TGButton.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"
#include "TG3DLine.h"

ClassImp(TGeoMediumEditor)

enum ETGeoMediumWid {
   kMED_NAME, kMED_ID, kMED_MATSEL,
   kMED_SENS, kMED_FLDOPT, kMED_EDIT_MAT,
   kMED_FIELDM, kMED_TMAX, kMED_STEMAX,
   kMED_DEEMAX, kMED_EPSIL, kMED_STMIN,
   kMED_APPLY, kMED_CANCEL, kMED_UNDO
};

//______________________________________________________________________________
TGeoMediumEditor::TGeoMediumEditor(const TGWindow *p, Int_t width,
                                   Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for medium editor   
   fMedium   = 0;
   fIsEditable = kFALSE;
   fIsModified = kFALSE;
   Pixel_t color;
   TGLabel *label;
      
   // TextEntry for medium name
   MakeTitle("Name");
   fMedName = new TGTextEntry(this, new TGTextBuffer(50), kMED_NAME);
   fMedName->Resize(135, fMedName->GetDefaultHeight());
   fMedName->SetToolTipText("Enter the medium name");
   fMedName->Associate(this);
   AddFrame(fMedName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 2));

   TGTextEntry *nef;

// Composite frame for medium ID and sensitivity
   TGCompositeFrame *f1 = new TGCompositeFrame(this, 120, 30, kHorizontalFrame | kRaisedFrame);
   f1->AddFrame(new TGLabel(f1, "ID"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fMedId = new TGNumberEntry(f1, 0., 1, kMED_ID);
   nef = (TGTextEntry*)fMedId->GetNumberEntry();
   nef->SetToolTipText("Enter the medium ID");
   fMedId->Associate(this);
   f1->AddFrame(fMedId, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 4, 4));
   fMedSensitive = new TGCheckButton(f1, "&Sens", kMED_SENS);
   fMedSensitive->Associate(this);
   f1->AddFrame(fMedSensitive, new TGLayoutHints(kLHintsRight | kLHintsExpandX , 2, 2, 4, 4));
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 3, 3, 2, 2));

   // Current material
   f1 = new TGCompositeFrame(this, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(label = new TGLabel(f1, "Current material"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
   f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
   gClient->GetColorByName("#ff0000", color);
   label->SetTextColor(color);
   AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
   f1 = new TGCompositeFrame(this, 155, 30, kHorizontalFrame | kFixedWidth);
   fSelectedMaterial = 0;
   fLSelMaterial = new TGLabel(f1, "Select material");
   gClient->GetColorByName("#0000ff", color);
   fLSelMaterial->SetTextColor(color);
   fLSelMaterial->ChangeOptions(kSunkenFrame | kDoubleBorder);
   f1->AddFrame(fLSelMaterial, new TGLayoutHints(kLHintsLeft | kLHintsExpandX | kLHintsExpandY, 1, 1, 2, 2));
   fBSelMaterial = new TGPictureButton(f1, fClient->GetPicture("rootdb_t.xpm"), kMED_MATSEL);
   fBSelMaterial->SetToolTipText("Replace with one of the existing materials");
   fBSelMaterial->Associate(this);
   f1->AddFrame(fBSelMaterial, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
   fEditMaterial = new TGTextButton(f1, "Edit");
   f1->AddFrame(fEditMaterial, new TGLayoutHints(kLHintsRight, 1, 1, 2, 2));
   fEditMaterial->SetToolTipText("Edit selected material");
   fEditMaterial->Associate(this);   
   AddFrame(f1, new TGLayoutHints(kLHintsLeft, 2, 2, 0, 0));
   
// Combo box for magnetic field option
   f1 = new TGCompositeFrame(this, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(label = new TGLabel(f1, "Mag. field option"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
   f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
   gClient->GetColorByName("#ff0000", color);
   label->SetTextColor(color);
   AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
   fMagfldOption = new TGComboBox(this, kMED_FLDOPT);
   fMagfldOption->Resize(135, fMedName->GetDefaultHeight());
   AddFrame(fMagfldOption, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 2));


// Number entries for other settings
   f1 = new TGCompositeFrame(this, 145, 10, kHorizontalFrame | kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(label = new TGLabel(f1, "Medium cuts"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
   f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
   gClient->GetColorByName("#ff0000", color);
   label->SetTextColor(color);
   AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
   TGCompositeFrame *compxyz = new TGCompositeFrame(this, 130, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);

   // Number entry for fieldm
   f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, "FIELDM"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedFieldm = new TGNumberEntry(f1, 0., 5, kMED_FIELDM);
   nef = (TGTextEntry*)fMedFieldm->GetNumberEntry();
   nef->SetToolTipText("Maximum magnetic field [kilogauss]");
   fMedFieldm->Associate(this);
   fMedFieldm->Resize(90, fMedFieldm->GetDefaultHeight());
   f1->AddFrame(fMedFieldm, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));

   // Number entry for tmaxfd
   TGCompositeFrame *f2 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f2->AddFrame(new TGLabel(f2, "TMAXFD"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedTmaxfd = new TGNumberEntry(f2, 0., 5, kMED_TMAX);
   nef = (TGTextEntry*)fMedTmaxfd->GetNumberEntry();
   nef->SetToolTipText("Maximum angle per step due to field [deg]");
   fMedTmaxfd->Associate(this);
   fMedTmaxfd->Resize(90, fMedTmaxfd->GetDefaultHeight());
   f2->AddFrame(fMedTmaxfd, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));
   
   // Number entry for stemax
   TGCompositeFrame *f3 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f3->AddFrame(new TGLabel(f3, "STEMAX"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedStemax = new TGNumberEntry(f3, 0., 5, kMED_STEMAX);
   nef = (TGTextEntry*)fMedStemax->GetNumberEntry();
   nef->SetToolTipText("Maximum step allowed [cm]");
   fMedStemax->Associate(this);
   fMedStemax->Resize(90, fMedStemax->GetDefaultHeight());
   f3->AddFrame(fMedStemax, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));

   // Number entry for deemax
   TGCompositeFrame *f4 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f4->AddFrame(new TGLabel(f4, "DEEMAX"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedDeemax = new TGNumberEntry(f4, 0., 5, kMED_DEEMAX);
   nef = (TGTextEntry*)fMedDeemax->GetNumberEntry();
   nef->SetToolTipText("Maximum fraction of energy lost in a step");
   fMedDeemax->Associate(this);
   fMedDeemax->Resize(90, fMedDeemax->GetDefaultHeight());
   f4->AddFrame(fMedDeemax, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f4, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));

   // Number entry for epsil
   TGCompositeFrame *f5 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f5->AddFrame(new TGLabel(f5, "EPSIL"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedEpsil = new TGNumberEntry(f5, 0., 5, kMED_EPSIL);
   nef = (TGTextEntry*)fMedEpsil->GetNumberEntry();
   nef->SetToolTipText("Tracking precision [cm]");
   fMedEpsil->Associate(this);
   fMedEpsil->Resize(90, fMedEpsil->GetDefaultHeight());
   f5->AddFrame(fMedEpsil, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f5, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));

   // Number entry for stmin
   TGCompositeFrame *f6 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f6->AddFrame(new TGLabel(f6, "STMIN"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
   fMedStmin = new TGNumberEntry(f6, 0., 5, kMED_STMIN);
   nef = (TGTextEntry*)fMedStmin->GetNumberEntry();
   nef->SetToolTipText("Minimum step due to continuous processes [cm]");
   fMedStmin->Associate(this);
   fMedStmin->Resize(90, fMedStmin->GetDefaultHeight());
   f6->AddFrame(fMedStmin, new TGLayoutHints(kLHintsRight | kFixedWidth , 2, 2, 2, 2));
   compxyz->AddFrame(f6, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 1, 1));
   
   compxyz->Resize(160,50);
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));

   // Buttons
   TGCompositeFrame *f23 = new TGCompositeFrame(this, 118, 20, kHorizontalFrame | kSunkenFrame | kDoubleBorder);
   fApply = new TGTextButton(f23, "&Apply");
   f23->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
   fApply->Associate(this);
   fUndo = new TGTextButton(f23, " &Undo ");
   f23->AddFrame(fUndo, new TGLayoutHints(kLHintsRight , 2, 2, 4, 4));
   fUndo->Associate(this);
   AddFrame(f23,  new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));  
}

//______________________________________________________________________________
TGeoMediumEditor::~TGeoMediumEditor()
{
// Destructor
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsA() == TGCompositeFrame::Class()  ||
          el->fFrame->IsA() == TGHorizontalFrame::Class() ||
          el->fFrame->IsA() == TGVerticalFrame::Class()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoMediumEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fApply->Connect("Clicked()", "TGeoMediumEditor", this, "DoApply()");
   fUndo->Connect("Clicked()", "TGeoMediumEditor", this, "DoUndo()");
   fMedName->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoMedName()");
   fBSelMaterial->Connect("Clicked()", "TGeoMediumEditor", this, "DoSelectMaterial()");
   fEditMaterial->Connect("Clicked()", "TGeoMediumEditor", this, "DoEditMaterial()");
   fMedId->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoMedId()");
   fMedTmaxfd->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoTmaxfd()");
   fMedStemax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoStemax()");
   fMedDeemax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoDeemax()");
   fMedEpsil->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoEpsil()");
   fMedStmin->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoStmin()");
   fMedSensitive->Connect("Clicked()", "TGeoMediumEditor", this, "DoToggleSensitive()");
   fMagfldOption->Connect("Selected(Int_t)", "TGeoMediumEditor", this, "DoMagfldSelect(Int_t)");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoMediumEditor::SetModel(TObject* obj)
{
   // Connect to the selected object.
   if (obj == 0 || !(obj->IsA()==TGeoMedium::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fMedium = (TGeoMedium*)obj;
   const char *sname = fMedium->GetName();
   if (!strcmp(sname, fMedium->ClassName())) fMedName->SetText("");
   else fMedName->SetText(sname);

   fMedId->SetNumber(fMedium->GetId());
   Int_t isvol = (Int_t)fMedium->GetParam(0);
   fMedSensitive->SetState((isvol==0)?kButtonUp:kButtonDown);

   fSelectedMaterial = fMedium->GetMaterial();
   if (fSelectedMaterial) fLSelMaterial->SetText(fSelectedMaterial->GetName());

   if (!fMagfldOption->GetNumberOfEntries()) {
      fMagfldOption->AddEntry("No field", 0);
      fMagfldOption->AddEntry("User decision", 1);
      fMagfldOption->AddEntry("Runge-Kutta", 2);
      fMagfldOption->AddEntry("Helix", 3);
      fMagfldOption->AddEntry("Helix3", 4);      
      fMagfldOption->AddEntry("Unknown option", 5);      
   }
   Int_t ifld = (Int_t)fMedium->GetParam(1);
   switch (ifld) {
      case 0:
         fMagfldOption->Select(0);
         break;
      case -1:
         fMagfldOption->Select(1);
         break;
      case 1:      
         fMagfldOption->Select(2);
         break;
      case 2:
         fMagfldOption->Select(3);
         break;
      case 3:
         fMagfldOption->Select(4);
         break;
      default:
         fMagfldOption->Select(5);
         break;
   }         

   fMedFieldm->SetNumber(fMedium->GetParam(2));
   fMedTmaxfd->SetNumber(fMedium->GetParam(3));
   fMedStemax->SetNumber(fMedium->GetParam(4));
   fMedDeemax->SetNumber(fMedium->GetParam(5));
   fMedEpsil->SetNumber(fMedium->GetParam(6));
   fMedStmin->SetNumber(fMedium->GetParam(7));
   
   fUndo->SetEnabled(kFALSE);
   fIsModified = kFALSE;
   
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoMediumEditor::DoEditMaterial()
{
// Edit selected material.
   fTabMgr->GetMaterialEditor(fMedium->GetMaterial());
}

//______________________________________________________________________________
void TGeoMediumEditor::DoMedName()
{
// Slot for medium name.
   const char *name = fMedName->GetText();
   if (!strlen(name) || !strcmp(name, fMedium->GetName())) return;
   fMedium->SetName(name);
}

//______________________________________________________________________________
void TGeoMediumEditor::DoMedId()
{
// Slot for medium id.
}

//______________________________________________________________________________
void TGeoMediumEditor::DoSelectMaterial()
{
// Select the material component.
   TGeoMaterial *material = fSelectedMaterial;
   new TGeoMaterialDialog(fBSelMaterial, gClient->GetRoot(), 200,300);  
   fSelectedMaterial = (TGeoMaterial*)TGeoMaterialDialog::GetSelected();
   if (fSelectedMaterial) fLSelMaterial->SetText(fSelectedMaterial->GetName());
   else fSelectedMaterial = material;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoToggleSensitive()
{
// Slot for sensitivity.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoMagfldSelect(Int_t)
{
// Slot for mag. field.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoFieldm()
{
// Slot for max field.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoTmaxfd()
{
// Slot for tmaxfd.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoStemax()
{
// Slot for the max allowed step.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoDeemax()
{
// Slot for the maximum allowed dedx.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoEpsil()
{
// Slot for tracking precision.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoStmin()
{
// Slot for min. step.
   fIsModified = kTRUE;
}

//______________________________________________________________________________
void TGeoMediumEditor::DoApply()
{
// Slot for applying modifications.
   if (!fIsModified) return;
   Double_t isvol = (fMedSensitive->IsOn())?1:0;
   Double_t ifield = fMagfldOption->GetSelected();
   if (ifield>0) {
      ifield -= 1.;
      if (ifield < 1.) ifield -= 1.;
   }   
   Double_t fieldm = fMedFieldm->GetNumber();
   Double_t tmaxfd = fMedTmaxfd->GetNumber();
   Double_t stemax = fMedStemax->GetNumber();
   Double_t deemax = fMedDeemax->GetNumber();
   Double_t epsil = fMedEpsil->GetNumber();
   Double_t stmin = fMedStmin->GetNumber();
   
   fMedium->SetParam(0,isvol); 
   fMedium->SetParam(1,ifield); 
   fMedium->SetParam(2,fieldm); 
   fMedium->SetParam(3,tmaxfd); 
   fMedium->SetParam(4,stemax); 
   fMedium->SetParam(5,deemax); 
   fMedium->SetParam(6,epsil); 
   fMedium->SetParam(7,stmin); 
   if (strcmp(fMedium->GetName(), fMedName->GetText())) fMedium->SetName(fMedName->GetText());
   if (fMedium->GetId() != fMedId->GetIntNumber()) fMedium->SetId(fMedId->GetIntNumber());
}

//______________________________________________________________________________
void TGeoMediumEditor::DoUndo()
{
// Slot for undoing last operation.
}
   
 TGeoMediumEditor.cxx:1
 TGeoMediumEditor.cxx:2
 TGeoMediumEditor.cxx:3
 TGeoMediumEditor.cxx:4
 TGeoMediumEditor.cxx:5
 TGeoMediumEditor.cxx:6
 TGeoMediumEditor.cxx:7
 TGeoMediumEditor.cxx:8
 TGeoMediumEditor.cxx:9
 TGeoMediumEditor.cxx:10
 TGeoMediumEditor.cxx:11
 TGeoMediumEditor.cxx:12
 TGeoMediumEditor.cxx:13
 TGeoMediumEditor.cxx:14
 TGeoMediumEditor.cxx:15
 TGeoMediumEditor.cxx:16
 TGeoMediumEditor.cxx:17
 TGeoMediumEditor.cxx:18
 TGeoMediumEditor.cxx:19
 TGeoMediumEditor.cxx:20
 TGeoMediumEditor.cxx:21
 TGeoMediumEditor.cxx:22
 TGeoMediumEditor.cxx:23
 TGeoMediumEditor.cxx:24
 TGeoMediumEditor.cxx:25
 TGeoMediumEditor.cxx:26
 TGeoMediumEditor.cxx:27
 TGeoMediumEditor.cxx:28
 TGeoMediumEditor.cxx:29
 TGeoMediumEditor.cxx:30
 TGeoMediumEditor.cxx:31
 TGeoMediumEditor.cxx:32
 TGeoMediumEditor.cxx:33
 TGeoMediumEditor.cxx:34
 TGeoMediumEditor.cxx:35
 TGeoMediumEditor.cxx:36
 TGeoMediumEditor.cxx:37
 TGeoMediumEditor.cxx:38
 TGeoMediumEditor.cxx:39
 TGeoMediumEditor.cxx:40
 TGeoMediumEditor.cxx:41
 TGeoMediumEditor.cxx:42
 TGeoMediumEditor.cxx:43
 TGeoMediumEditor.cxx:44
 TGeoMediumEditor.cxx:45
 TGeoMediumEditor.cxx:46
 TGeoMediumEditor.cxx:47
 TGeoMediumEditor.cxx:48
 TGeoMediumEditor.cxx:49
 TGeoMediumEditor.cxx:50
 TGeoMediumEditor.cxx:51
 TGeoMediumEditor.cxx:52
 TGeoMediumEditor.cxx:53
 TGeoMediumEditor.cxx:54
 TGeoMediumEditor.cxx:55
 TGeoMediumEditor.cxx:56
 TGeoMediumEditor.cxx:57
 TGeoMediumEditor.cxx:58
 TGeoMediumEditor.cxx:59
 TGeoMediumEditor.cxx:60
 TGeoMediumEditor.cxx:61
 TGeoMediumEditor.cxx:62
 TGeoMediumEditor.cxx:63
 TGeoMediumEditor.cxx:64
 TGeoMediumEditor.cxx:65
 TGeoMediumEditor.cxx:66
 TGeoMediumEditor.cxx:67
 TGeoMediumEditor.cxx:68
 TGeoMediumEditor.cxx:69
 TGeoMediumEditor.cxx:70
 TGeoMediumEditor.cxx:71
 TGeoMediumEditor.cxx:72
 TGeoMediumEditor.cxx:73
 TGeoMediumEditor.cxx:74
 TGeoMediumEditor.cxx:75
 TGeoMediumEditor.cxx:76
 TGeoMediumEditor.cxx:77
 TGeoMediumEditor.cxx:78
 TGeoMediumEditor.cxx:79
 TGeoMediumEditor.cxx:80
 TGeoMediumEditor.cxx:81
 TGeoMediumEditor.cxx:82
 TGeoMediumEditor.cxx:83
 TGeoMediumEditor.cxx:84
 TGeoMediumEditor.cxx:85
 TGeoMediumEditor.cxx:86
 TGeoMediumEditor.cxx:87
 TGeoMediumEditor.cxx:88
 TGeoMediumEditor.cxx:89
 TGeoMediumEditor.cxx:90
 TGeoMediumEditor.cxx:91
 TGeoMediumEditor.cxx:92
 TGeoMediumEditor.cxx:93
 TGeoMediumEditor.cxx:94
 TGeoMediumEditor.cxx:95
 TGeoMediumEditor.cxx:96
 TGeoMediumEditor.cxx:97
 TGeoMediumEditor.cxx:98
 TGeoMediumEditor.cxx:99
 TGeoMediumEditor.cxx:100
 TGeoMediumEditor.cxx:101
 TGeoMediumEditor.cxx:102
 TGeoMediumEditor.cxx:103
 TGeoMediumEditor.cxx:104
 TGeoMediumEditor.cxx:105
 TGeoMediumEditor.cxx:106
 TGeoMediumEditor.cxx:107
 TGeoMediumEditor.cxx:108
 TGeoMediumEditor.cxx:109
 TGeoMediumEditor.cxx:110
 TGeoMediumEditor.cxx:111
 TGeoMediumEditor.cxx:112
 TGeoMediumEditor.cxx:113
 TGeoMediumEditor.cxx:114
 TGeoMediumEditor.cxx:115
 TGeoMediumEditor.cxx:116
 TGeoMediumEditor.cxx:117
 TGeoMediumEditor.cxx:118
 TGeoMediumEditor.cxx:119
 TGeoMediumEditor.cxx:120
 TGeoMediumEditor.cxx:121
 TGeoMediumEditor.cxx:122
 TGeoMediumEditor.cxx:123
 TGeoMediumEditor.cxx:124
 TGeoMediumEditor.cxx:125
 TGeoMediumEditor.cxx:126
 TGeoMediumEditor.cxx:127
 TGeoMediumEditor.cxx:128
 TGeoMediumEditor.cxx:129
 TGeoMediumEditor.cxx:130
 TGeoMediumEditor.cxx:131
 TGeoMediumEditor.cxx:132
 TGeoMediumEditor.cxx:133
 TGeoMediumEditor.cxx:134
 TGeoMediumEditor.cxx:135
 TGeoMediumEditor.cxx:136
 TGeoMediumEditor.cxx:137
 TGeoMediumEditor.cxx:138
 TGeoMediumEditor.cxx:139
 TGeoMediumEditor.cxx:140
 TGeoMediumEditor.cxx:141
 TGeoMediumEditor.cxx:142
 TGeoMediumEditor.cxx:143
 TGeoMediumEditor.cxx:144
 TGeoMediumEditor.cxx:145
 TGeoMediumEditor.cxx:146
 TGeoMediumEditor.cxx:147
 TGeoMediumEditor.cxx:148
 TGeoMediumEditor.cxx:149
 TGeoMediumEditor.cxx:150
 TGeoMediumEditor.cxx:151
 TGeoMediumEditor.cxx:152
 TGeoMediumEditor.cxx:153
 TGeoMediumEditor.cxx:154
 TGeoMediumEditor.cxx:155
 TGeoMediumEditor.cxx:156
 TGeoMediumEditor.cxx:157
 TGeoMediumEditor.cxx:158
 TGeoMediumEditor.cxx:159
 TGeoMediumEditor.cxx:160
 TGeoMediumEditor.cxx:161
 TGeoMediumEditor.cxx:162
 TGeoMediumEditor.cxx:163
 TGeoMediumEditor.cxx:164
 TGeoMediumEditor.cxx:165
 TGeoMediumEditor.cxx:166
 TGeoMediumEditor.cxx:167
 TGeoMediumEditor.cxx:168
 TGeoMediumEditor.cxx:169
 TGeoMediumEditor.cxx:170
 TGeoMediumEditor.cxx:171
 TGeoMediumEditor.cxx:172
 TGeoMediumEditor.cxx:173
 TGeoMediumEditor.cxx:174
 TGeoMediumEditor.cxx:175
 TGeoMediumEditor.cxx:176
 TGeoMediumEditor.cxx:177
 TGeoMediumEditor.cxx:178
 TGeoMediumEditor.cxx:179
 TGeoMediumEditor.cxx:180
 TGeoMediumEditor.cxx:181
 TGeoMediumEditor.cxx:182
 TGeoMediumEditor.cxx:183
 TGeoMediumEditor.cxx:184
 TGeoMediumEditor.cxx:185
 TGeoMediumEditor.cxx:186
 TGeoMediumEditor.cxx:187
 TGeoMediumEditor.cxx:188
 TGeoMediumEditor.cxx:189
 TGeoMediumEditor.cxx:190
 TGeoMediumEditor.cxx:191
 TGeoMediumEditor.cxx:192
 TGeoMediumEditor.cxx:193
 TGeoMediumEditor.cxx:194
 TGeoMediumEditor.cxx:195
 TGeoMediumEditor.cxx:196
 TGeoMediumEditor.cxx:197
 TGeoMediumEditor.cxx:198
 TGeoMediumEditor.cxx:199
 TGeoMediumEditor.cxx:200
 TGeoMediumEditor.cxx:201
 TGeoMediumEditor.cxx:202
 TGeoMediumEditor.cxx:203
 TGeoMediumEditor.cxx:204
 TGeoMediumEditor.cxx:205
 TGeoMediumEditor.cxx:206
 TGeoMediumEditor.cxx:207
 TGeoMediumEditor.cxx:208
 TGeoMediumEditor.cxx:209
 TGeoMediumEditor.cxx:210
 TGeoMediumEditor.cxx:211
 TGeoMediumEditor.cxx:212
 TGeoMediumEditor.cxx:213
 TGeoMediumEditor.cxx:214
 TGeoMediumEditor.cxx:215
 TGeoMediumEditor.cxx:216
 TGeoMediumEditor.cxx:217
 TGeoMediumEditor.cxx:218
 TGeoMediumEditor.cxx:219
 TGeoMediumEditor.cxx:220
 TGeoMediumEditor.cxx:221
 TGeoMediumEditor.cxx:222
 TGeoMediumEditor.cxx:223
 TGeoMediumEditor.cxx:224
 TGeoMediumEditor.cxx:225
 TGeoMediumEditor.cxx:226
 TGeoMediumEditor.cxx:227
 TGeoMediumEditor.cxx:228
 TGeoMediumEditor.cxx:229
 TGeoMediumEditor.cxx:230
 TGeoMediumEditor.cxx:231
 TGeoMediumEditor.cxx:232
 TGeoMediumEditor.cxx:233
 TGeoMediumEditor.cxx:234
 TGeoMediumEditor.cxx:235
 TGeoMediumEditor.cxx:236
 TGeoMediumEditor.cxx:237
 TGeoMediumEditor.cxx:238
 TGeoMediumEditor.cxx:239
 TGeoMediumEditor.cxx:240
 TGeoMediumEditor.cxx:241
 TGeoMediumEditor.cxx:242
 TGeoMediumEditor.cxx:243
 TGeoMediumEditor.cxx:244
 TGeoMediumEditor.cxx:245
 TGeoMediumEditor.cxx:246
 TGeoMediumEditor.cxx:247
 TGeoMediumEditor.cxx:248
 TGeoMediumEditor.cxx:249
 TGeoMediumEditor.cxx:250
 TGeoMediumEditor.cxx:251
 TGeoMediumEditor.cxx:252
 TGeoMediumEditor.cxx:253
 TGeoMediumEditor.cxx:254
 TGeoMediumEditor.cxx:255
 TGeoMediumEditor.cxx:256
 TGeoMediumEditor.cxx:257
 TGeoMediumEditor.cxx:258
 TGeoMediumEditor.cxx:259
 TGeoMediumEditor.cxx:260
 TGeoMediumEditor.cxx:261
 TGeoMediumEditor.cxx:262
 TGeoMediumEditor.cxx:263
 TGeoMediumEditor.cxx:264
 TGeoMediumEditor.cxx:265
 TGeoMediumEditor.cxx:266
 TGeoMediumEditor.cxx:267
 TGeoMediumEditor.cxx:268
 TGeoMediumEditor.cxx:269
 TGeoMediumEditor.cxx:270
 TGeoMediumEditor.cxx:271
 TGeoMediumEditor.cxx:272
 TGeoMediumEditor.cxx:273
 TGeoMediumEditor.cxx:274
 TGeoMediumEditor.cxx:275
 TGeoMediumEditor.cxx:276
 TGeoMediumEditor.cxx:277
 TGeoMediumEditor.cxx:278
 TGeoMediumEditor.cxx:279
 TGeoMediumEditor.cxx:280
 TGeoMediumEditor.cxx:281
 TGeoMediumEditor.cxx:282
 TGeoMediumEditor.cxx:283
 TGeoMediumEditor.cxx:284
 TGeoMediumEditor.cxx:285
 TGeoMediumEditor.cxx:286
 TGeoMediumEditor.cxx:287
 TGeoMediumEditor.cxx:288
 TGeoMediumEditor.cxx:289
 TGeoMediumEditor.cxx:290
 TGeoMediumEditor.cxx:291
 TGeoMediumEditor.cxx:292
 TGeoMediumEditor.cxx:293
 TGeoMediumEditor.cxx:294
 TGeoMediumEditor.cxx:295
 TGeoMediumEditor.cxx:296
 TGeoMediumEditor.cxx:297
 TGeoMediumEditor.cxx:298
 TGeoMediumEditor.cxx:299
 TGeoMediumEditor.cxx:300
 TGeoMediumEditor.cxx:301
 TGeoMediumEditor.cxx:302
 TGeoMediumEditor.cxx:303
 TGeoMediumEditor.cxx:304
 TGeoMediumEditor.cxx:305
 TGeoMediumEditor.cxx:306
 TGeoMediumEditor.cxx:307
 TGeoMediumEditor.cxx:308
 TGeoMediumEditor.cxx:309
 TGeoMediumEditor.cxx:310
 TGeoMediumEditor.cxx:311
 TGeoMediumEditor.cxx:312
 TGeoMediumEditor.cxx:313
 TGeoMediumEditor.cxx:314
 TGeoMediumEditor.cxx:315
 TGeoMediumEditor.cxx:316
 TGeoMediumEditor.cxx:317
 TGeoMediumEditor.cxx:318
 TGeoMediumEditor.cxx:319
 TGeoMediumEditor.cxx:320
 TGeoMediumEditor.cxx:321
 TGeoMediumEditor.cxx:322
 TGeoMediumEditor.cxx:323
 TGeoMediumEditor.cxx:324
 TGeoMediumEditor.cxx:325
 TGeoMediumEditor.cxx:326
 TGeoMediumEditor.cxx:327
 TGeoMediumEditor.cxx:328
 TGeoMediumEditor.cxx:329
 TGeoMediumEditor.cxx:330
 TGeoMediumEditor.cxx:331
 TGeoMediumEditor.cxx:332
 TGeoMediumEditor.cxx:333
 TGeoMediumEditor.cxx:334
 TGeoMediumEditor.cxx:335
 TGeoMediumEditor.cxx:336
 TGeoMediumEditor.cxx:337
 TGeoMediumEditor.cxx:338
 TGeoMediumEditor.cxx:339
 TGeoMediumEditor.cxx:340
 TGeoMediumEditor.cxx:341
 TGeoMediumEditor.cxx:342
 TGeoMediumEditor.cxx:343
 TGeoMediumEditor.cxx:344
 TGeoMediumEditor.cxx:345
 TGeoMediumEditor.cxx:346
 TGeoMediumEditor.cxx:347
 TGeoMediumEditor.cxx:348
 TGeoMediumEditor.cxx:349
 TGeoMediumEditor.cxx:350
 TGeoMediumEditor.cxx:351
 TGeoMediumEditor.cxx:352
 TGeoMediumEditor.cxx:353
 TGeoMediumEditor.cxx:354
 TGeoMediumEditor.cxx:355
 TGeoMediumEditor.cxx:356
 TGeoMediumEditor.cxx:357
 TGeoMediumEditor.cxx:358
 TGeoMediumEditor.cxx:359
 TGeoMediumEditor.cxx:360
 TGeoMediumEditor.cxx:361
 TGeoMediumEditor.cxx:362
 TGeoMediumEditor.cxx:363
 TGeoMediumEditor.cxx:364
 TGeoMediumEditor.cxx:365
 TGeoMediumEditor.cxx:366
 TGeoMediumEditor.cxx:367
 TGeoMediumEditor.cxx:368
 TGeoMediumEditor.cxx:369
 TGeoMediumEditor.cxx:370
 TGeoMediumEditor.cxx:371
 TGeoMediumEditor.cxx:372
 TGeoMediumEditor.cxx:373
 TGeoMediumEditor.cxx:374
 TGeoMediumEditor.cxx:375
 TGeoMediumEditor.cxx:376
 TGeoMediumEditor.cxx:377
 TGeoMediumEditor.cxx:378
 TGeoMediumEditor.cxx:379
 TGeoMediumEditor.cxx:380
 TGeoMediumEditor.cxx:381
 TGeoMediumEditor.cxx:382
 TGeoMediumEditor.cxx:383
 TGeoMediumEditor.cxx:384
 TGeoMediumEditor.cxx:385
 TGeoMediumEditor.cxx:386
 TGeoMediumEditor.cxx:387
 TGeoMediumEditor.cxx:388
 TGeoMediumEditor.cxx:389
 TGeoMediumEditor.cxx:390
 TGeoMediumEditor.cxx:391
 TGeoMediumEditor.cxx:392
 TGeoMediumEditor.cxx:393
 TGeoMediumEditor.cxx:394
 TGeoMediumEditor.cxx:395
 TGeoMediumEditor.cxx:396
 TGeoMediumEditor.cxx:397
 TGeoMediumEditor.cxx:398
 TGeoMediumEditor.cxx:399
 TGeoMediumEditor.cxx:400
 TGeoMediumEditor.cxx:401
 TGeoMediumEditor.cxx:402
 TGeoMediumEditor.cxx:403
 TGeoMediumEditor.cxx:404
 TGeoMediumEditor.cxx:405
 TGeoMediumEditor.cxx:406
 TGeoMediumEditor.cxx:407
 TGeoMediumEditor.cxx:408
 TGeoMediumEditor.cxx:409
 TGeoMediumEditor.cxx:410
 TGeoMediumEditor.cxx:411
 TGeoMediumEditor.cxx:412
 TGeoMediumEditor.cxx:413
 TGeoMediumEditor.cxx:414
 TGeoMediumEditor.cxx:415
 TGeoMediumEditor.cxx:416
 TGeoMediumEditor.cxx:417
 TGeoMediumEditor.cxx:418
 TGeoMediumEditor.cxx:419
 TGeoMediumEditor.cxx:420
 TGeoMediumEditor.cxx:421
 TGeoMediumEditor.cxx:422
 TGeoMediumEditor.cxx:423
 TGeoMediumEditor.cxx:424
 TGeoMediumEditor.cxx:425
 TGeoMediumEditor.cxx:426
 TGeoMediumEditor.cxx:427
 TGeoMediumEditor.cxx:428
 TGeoMediumEditor.cxx:429
 TGeoMediumEditor.cxx:430
 TGeoMediumEditor.cxx:431
 TGeoMediumEditor.cxx:432
 TGeoMediumEditor.cxx:433