ROOT logo
// @(#):$Id: TGeoMatrixEditor.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.             *
 *************************************************************************/

//______________________________________________________________________________
//                                                                      
//  TGeoTranslationEditor, TGeoRotationEditor, TGeoCombiTransEditor
//     Editors for different types of TGeo matrices.
//______________________________________________________________________________

#include "TGeoMatrixEditor.h"
#include "TGeoTabManager.h"
#include "TGeoMatrix.h"
#include "TPad.h"
#include "TGTab.h"
#include "TGComboBox.h"
#include "TGButton.h"
#include "TGButtonGroup.h"
#include "TGTextEntry.h"
#include "TGNumberEntry.h"
#include "TGLabel.h"

ClassImp(TGeoTranslationEditor)

enum ETGeoMatrixWid {
   kMATRIX_NAME, kMATRIX_DX, kMATRIX_DY, kMATRIX_DZ,
   kMATRIX_PHI, kMATRIX_THETA, kMATRIX_PSI,
   kMATRIX_APPLY, kMATRIX_CANCEL, kMATRIX_UNDO
};

//______________________________________________________________________________
TGeoTranslationEditor::TGeoTranslationEditor(const TGWindow *p, Int_t width,
                                   Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for translation editor
   fTranslation   = 0;
   fDxi = fDyi = fDzi = 0.0;
   fNamei = "";
   fIsModified = kFALSE;
   fIsEditable = kFALSE;
      
   // TextEntry for name
   MakeTitle("Name");
   fTransName = new TGTextEntry(this, new TGTextBuffer(50), kMATRIX_NAME);
   fTransName->Resize(135, fTransName->GetDefaultHeight());
   fTransName->SetToolTipText("Enter the translation name");
   fTransName->Associate(this);
   AddFrame(fTransName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));

   TGTextEntry *nef;
   MakeTitle("Translations on axes");
   TGCompositeFrame *compxyz = new TGCompositeFrame(this, 118, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for dx
   TGCompositeFrame *f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, "DX"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDx = new TGNumberEntry(f1, 0., 5, kMATRIX_DX);
   nef = (TGTextEntry*)fTransDx->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on X");
   fTransDx->Associate(this);
   f1->AddFrame(fTransDx, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for dy
   TGCompositeFrame *f2 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f2->AddFrame(new TGLabel(f2, "DY"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDy = new TGNumberEntry(f2, 0., 5, kMATRIX_DY);
   nef = (TGTextEntry*)fTransDy->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on Y");
   fTransDy->Associate(this);
   f2->AddFrame(fTransDy, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for dx
   TGCompositeFrame *f3 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f3->AddFrame(new TGLabel(f3, "DZ"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDz = new TGNumberEntry(f3, 0., 5, kMATRIX_DZ);
   nef = (TGTextEntry*)fTransDz->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on Z");
   fTransDz->Associate(this);
   f3->AddFrame(fTransDz, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   compxyz->Resize(150,30);
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 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);
   fCancel = new TGTextButton(f23, "&Cancel");
   f23->AddFrame(fCancel, new TGLayoutHints(kLHintsCenterX, 2, 2, 4, 4));
   fCancel->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, 6, 6, 2, 2));  
   fUndo->SetSize(fCancel->GetSize());
   fApply->SetSize(fCancel->GetSize());
}

//______________________________________________________________________________
TGeoTranslationEditor::~TGeoTranslationEditor()
{
// Destructor.
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoTranslationEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fApply->Connect("Clicked()", "TGeoTranslationEditor", this, "DoApply()");
   fCancel->Connect("Clicked()", "TGeoTranslationEditor", this, "DoCancel()");
   fUndo->Connect("Clicked()", "TGeoTranslationEditor", this, "DoUndo()");
   fTransName->Connect("TextChanged(const char *)", "TGeoTranslationEditor", this, "DoModified()");
   fTransDx->Connect("ValueSet(Long_t)", "TGeoTranslationEditor", this, "DoDx()");
   fTransDy->Connect("ValueSet(Long_t)", "TGeoTranslationEditor", this, "DoDy()");
   fTransDz->Connect("ValueSet(Long_t)", "TGeoTranslationEditor", this, "DoDz()");
   fTransDx->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTranslationEditor", this, "DoDx()");
   fTransDy->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTranslationEditor", this, "DoDy()");
   fTransDz->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoTranslationEditor", this, "DoDz()");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoTranslationEditor::SetModel(TObject* obj)
{
   // Connect to the new matrix.
   if (obj == 0 || (obj->IsA()!=TGeoTranslation::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fTranslation = (TGeoTranslation*)obj;
   fDxi = fTranslation->GetTranslation()[0];
   fDyi = fTranslation->GetTranslation()[1];
   fDzi = fTranslation->GetTranslation()[2];
   const char *sname = fTranslation->GetName();
   if (!strcmp(sname, fTranslation->ClassName())) fTransName->SetText("no_name");
   else {
      fTransName->SetText(sname);
      fNamei = sname;
   }   
   fTransDx->SetNumber(fDxi);
   fTransDy->SetNumber(fDyi);
   fTransDz->SetNumber(fDzi);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoName()
{
// Slot for name.
   const char *name = fTransName->GetText();
   if (!strcmp(name, "no_name") || !strcmp(name, fTranslation->GetName())) return;
   fTranslation->SetName(name);
}

//______________________________________________________________________________
Bool_t TGeoTranslationEditor::DoParameters()
{
// Slot for checking parameters.
   Double_t dx = fTransDx->GetNumber();
   Double_t dy = fTransDy->GetNumber();
   Double_t dz = fTransDz->GetNumber();
   Bool_t changed = kFALSE;
   if (dx != fTranslation->GetTranslation()[0] || 
       dy != fTranslation->GetTranslation()[1] || 
       dz != fTranslation->GetTranslation()[2]) changed = kTRUE;
   if (!changed) return kFALSE;
   fUndo->SetEnabled();
   fTranslation->SetTranslation(dx, dy, dz);
   if (fPad) {
      fPad->Modified();
      fPad->Update();
   }   
   return kTRUE;
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoApply()
{
// Slot for applying changes.
   DoName();
   if (DoParameters()) {
      fUndo->SetEnabled();
      fCancel->SetEnabled(kFALSE);
      fApply->SetEnabled(kFALSE);
   }   
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoCancel()
{
// Slot for cancelling last modifications non-applied.
   if (!fNamei.Length()) fTransName->SetText("no_name");
   else fTransName->SetText(fNamei.Data());
   fTransDx->SetNumber(fDxi);
   fTransDy->SetNumber(fDyi);
   fTransDz->SetNumber(fDzi);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoModified()
{
// Slot for notifying changes.
   fApply->SetEnabled();
   if (fUndo->GetState()==kButtonDisabled) fCancel->SetEnabled();
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoUndo()
{
// Slot for undoing last operation.
   DoCancel();
   DoParameters();
   fCancel->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fApply->SetEnabled(kFALSE);
}
   
//______________________________________________________________________________
void TGeoTranslationEditor::DoDx()
{
// Slot for dx.
   DoModified();
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoDy()
{
// Slot for dx.
   DoModified();
}

//______________________________________________________________________________
void TGeoTranslationEditor::DoDz()
{
// Slot for dx.
   DoModified();
}

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TGeoRotationEditor                                                  //
//                                                                      //
//  Editor for a TGeoRotation.                                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

ClassImp(TGeoRotationEditor)

//______________________________________________________________________________
TGeoRotationEditor::TGeoRotationEditor(const TGWindow *p, Int_t width,
                                   Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for rotation editor
   fRotation   = 0;
   fPhii = fThetai = fPsii = 0.0;
   fAngleX = fAngleY = fAngleZ = 0.0;
   fNamei = "";
   fIsModified = kFALSE;
   fIsEditable = kFALSE;
      
   // TextEntry for name
   MakeTitle("Name");
   fRotName = new TGTextEntry(this, new TGTextBuffer(50), kMATRIX_NAME);
   fRotName->Resize(135, fRotName->GetDefaultHeight());
   fRotName->SetToolTipText("Enter the rotation name");
   fRotName->Associate(this);
   AddFrame(fRotName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));

   TGTextEntry *nef;
   MakeTitle("Euler angles");
   TGCompositeFrame *compxyz = new TGCompositeFrame(this, 140, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for phi angle
   TGCompositeFrame *f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, " PHI "), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotPhi = new TGNumberEntry(f1, 0., 5, kMATRIX_PHI);
   nef = (TGTextEntry*)fRotPhi->GetNumberEntry();
   nef->SetToolTipText("Modify the first rotation angle about Z");
   fRotPhi->Associate(this);
   fRotPhi->Resize(90, fRotPhi->GetDefaultHeight());
   f1->AddFrame(fRotPhi, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for theta angle
   TGCompositeFrame *f2 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f2->AddFrame(new TGLabel(f2, "THETA"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotTheta = new TGNumberEntry(f2, 0., 5, kMATRIX_THETA);
   nef = (TGTextEntry*)fRotTheta->GetNumberEntry();
   nef->SetToolTipText("Modify the second rotation angle about the new X");
   fRotTheta->Associate(this);
   fRotTheta->Resize(90, fRotTheta->GetDefaultHeight());
   f2->AddFrame(fRotTheta, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for psi angle
   TGCompositeFrame *f3 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f3->AddFrame(new TGLabel(f3, " PSI "), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotPsi = new TGNumberEntry(f3, 0., 5, kMATRIX_PSI);
   nef = (TGTextEntry*)fRotPsi->GetNumberEntry();
   nef->SetToolTipText("Modify the third rotation angle about Z");
   fRotPsi->Associate(this);
   fRotPsi->Resize(90, fRotPsi->GetDefaultHeight());
   f3->AddFrame(fRotPsi, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));

   compxyz->Resize(150,compxyz->GetDefaultHeight());
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 2, 2));
   
   MakeTitle("Rotate about axis");
   compxyz = new TGCompositeFrame(this, 140, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for rotation angle about one axis
   f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, "ANGLE"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotAxis = new TGNumberEntry(f1, 0., 5, kMATRIX_DX);
   nef = (TGTextEntry*)fRotAxis->GetNumberEntry();
   nef->SetToolTipText("Enter the new rotation angle about the selected axis");
   fRotAxis->Associate(this);
   fRotAxis->Resize(90, fRotAxis->GetDefaultHeight());
   f1->AddFrame(fRotAxis, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Radio buttons group for axis selection
   TGHButtonGroup *bg1 = new TGHButtonGroup(compxyz, " Axis ");
   fRotX = new TGRadioButton(bg1, " &X ", kMATRIX_DX);
   fRotY = new TGRadioButton(bg1, " &Y ", kMATRIX_DY);
   fRotZ = new TGRadioButton(bg1, " &Z ", kMATRIX_DZ);
   bg1->SetRadioButtonExclusive();
   bg1->Show();
   compxyz->AddFrame(bg1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));

   compxyz->Resize(150,compxyz->GetDefaultHeight());
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 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);
   fCancel = new TGTextButton(f23, "Cancel");
   f23->AddFrame(fCancel, new TGLayoutHints(kLHintsCenterX, 2, 2, 4, 4));
   fCancel->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, 6, 6, 2, 2));  
   fUndo->SetSize(fCancel->GetSize());
   fApply->SetSize(fCancel->GetSize());
}

//______________________________________________________________________________
TGeoRotationEditor::~TGeoRotationEditor()
{
// Destructor
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoRotationEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fApply->Connect("Clicked()", "TGeoRotationEditor", this, "DoApply()");
   fCancel->Connect("Clicked()", "TGeoRotationEditor", this, "DoCancel()");
   fUndo->Connect("Clicked()", "TGeoRotationEditor", this, "DoUndo()");
   fRotName->Connect("TextChanged(const char *)", "TGeoRotationEditor", this, "DoModified()");
   fRotPhi->Connect("ValueSet(Long_t)", "TGeoRotationEditor", this, "DoRotPhi()");
   fRotTheta->Connect("ValueSet(Long_t)", "TGeoRotationEditor", this, "DoRotTheta()");
   fRotPsi->Connect("ValueSet(Long_t)", "TGeoRotationEditor", this, "DoRotPsi()");
   fRotAxis->Connect("ValueSet(Long_t)", "TGeoRotationEditor", this, "DoRotAngle()");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoRotationEditor::SetModel(TObject* obj)
{
   // Connect to the selected rotation.
   if (obj == 0 || (obj->IsA()!=TGeoRotation::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fRotation = (TGeoRotation*)obj;
   fRotation->GetAngles(fPhii, fThetai, fPsii);
   const char *sname = fRotation->GetName();
   if (!strcmp(sname, fRotation->ClassName())) fRotName->SetText("no_name");
   else {
      fRotName->SetText(sname);
      fNamei = sname;
   }   
   fRotPhi->SetNumber(fPhii);
   fRotTheta->SetNumber(fThetai);
   fRotPsi->SetNumber(fPsii);
   fRotAxis->SetNumber(0.0);

   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoRotationEditor::DoName()
{
// Slot for name.
   const char *name = fRotName->GetText();
   if (!strcmp(name, "no_name") || !strcmp(name, fRotation->GetName())) return;
   fRotation->SetName(name);
}

//______________________________________________________________________________
void TGeoRotationEditor::DoRotPhi()
{
// Slot for phi (Euler X convention)
   if (fRotPhi->GetNumber() < 0.) fRotPhi->SetNumber(fRotPhi->GetNumber()+360.);
   if (fRotPhi->GetNumber() >= 360.) fRotPhi->SetNumber(fRotPhi->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoRotationEditor::DoRotTheta()
{
// Slot for theta (Euler X convention)
   if (fRotTheta->GetNumber() < 0.) fRotTheta->SetNumber(fRotTheta->GetNumber()+360.);
   if (fRotTheta->GetNumber() >= 360.) fRotTheta->SetNumber(fRotTheta->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoRotationEditor::DoRotPsi()
{
// Slot for psi (Euler X convention)
   if (fRotPsi->GetNumber() < 0.) fRotPsi->SetNumber(fRotPsi->GetNumber()+360.);
   if (fRotPsi->GetNumber() >= 360.) fRotPsi->SetNumber(fRotPsi->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoRotationEditor::DoRotAngle()
{
// Slot for additional rotation about one axis.
   if (fRotAxis->GetNumber() < 0.) fRotAxis->SetNumber(fRotAxis->GetNumber()+360.);
   if (fRotAxis->GetNumber() >= 360.) fRotAxis->SetNumber(fRotAxis->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
Bool_t TGeoRotationEditor::DoParameters()
{
// Slot for checking parameters.
   Double_t phi = fRotPhi->GetNumber();
   Double_t theta = fRotTheta->GetNumber();
   Double_t psi = fRotPsi->GetNumber();
   Double_t angle = fRotAxis->GetNumber();
   Double_t phi0 = 0., theta0 = 0., psi0 = 0.;
   fRotation->GetAngles(phi0,theta0,psi0);
   Bool_t changed = kFALSE;
   if (phi != psi0 || theta != theta0 || psi != psi0) changed = kTRUE;
   if (changed) fRotation->SetAngles(phi, theta, psi);
   // Check if we have to rotate about one axis
   if (angle != 0.0) {
      if (fRotX->IsOn()) {fRotation->RotateX(angle); changed = kTRUE;}
      if (fRotY->IsOn()) {fRotation->RotateY(angle); changed = kTRUE;}
      if (fRotZ->IsOn()) {fRotation->RotateZ(angle); changed = kTRUE;}
   }   
   if (!changed) return kFALSE;   
   fRotAxis->SetNumber(0.0);
   fUndo->SetEnabled();
   if (fPad) {
      fPad->Modified();
      fPad->Update();
   }   
   return kTRUE;
}

//______________________________________________________________________________
void TGeoRotationEditor::DoApply()
{
// Slot for applying modifications.
   DoName();
   if (DoParameters()) {
      fUndo->SetEnabled();
      fCancel->SetEnabled(kFALSE);
      fApply->SetEnabled(kFALSE);
   }   
}

//______________________________________________________________________________
void TGeoRotationEditor::DoCancel()
{
// Slot for cancelling last un-applied operations.
   if (!fNamei.Length()) fRotName->SetText("no_name");
   else fRotName->SetText(fNamei.Data());
   fRotPhi->SetNumber(fPhii);
   fRotTheta->SetNumber(fThetai);
   fRotPsi->SetNumber(fPsii);
   fRotAxis->SetNumber(0.0);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
}

//______________________________________________________________________________
void TGeoRotationEditor::DoModified()
{
// Slot for notifying changes.
   fApply->SetEnabled();
   if (fUndo->GetState()==kButtonDisabled) fCancel->SetEnabled();
}

//______________________________________________________________________________
void TGeoRotationEditor::DoUndo()
{
// Slot for undoing last changes.
   DoCancel();
   DoParameters();
   fCancel->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fApply->SetEnabled(kFALSE);
}

   
//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  TGeoCombiTransEditor                                                //
//                                                                      //
//  Editor for a TGeoCombiTrans.                                        //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

ClassImp(TGeoCombiTransEditor)

//______________________________________________________________________________
TGeoCombiTransEditor::TGeoCombiTransEditor(const TGWindow *p, Int_t width,
                                   Int_t height, UInt_t options, Pixel_t back)
   : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
{
   // Constructor for combi matrix editor
   fCombi   = 0;
   fPhii = fThetai = fPsii = 0.0;
   fDxi = fDyi = fDzi = 0.0;
   fAngleX = fAngleY = fAngleZ = 0.0;
   fNamei = "";
   fIsModified = kFALSE;
   fIsEditable = kFALSE;
      
   // TextEntry for name
   MakeTitle("Name");
   fRotName = new TGTextEntry(this, new TGTextBuffer(50), kMATRIX_NAME);
   fRotName->Resize(135, fRotName->GetDefaultHeight());
   fRotName->SetToolTipText("Enter the rotation name");
   fRotName->Associate(this);
   AddFrame(fRotName, new TGLayoutHints(kLHintsLeft, 3, 1, 2, 5));

   TGTextEntry *nef;
   MakeTitle("Translations on axes");
   TGCompositeFrame *compxyz = new TGCompositeFrame(this, 118, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for dx
   TGCompositeFrame *f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, "DX"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDx = new TGNumberEntry(f1, 0., 5, kMATRIX_DX);
   nef = (TGTextEntry*)fTransDx->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on X");
   fTransDx->Associate(this);
   f1->AddFrame(fTransDx, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for dy
   TGCompositeFrame *f2 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f2->AddFrame(new TGLabel(f2, "DY"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDy = new TGNumberEntry(f2, 0., 5, kMATRIX_DY);
   nef = (TGTextEntry*)fTransDy->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on Y");
   fTransDy->Associate(this);
   f2->AddFrame(fTransDy, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for dx
   TGCompositeFrame *f3 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f3->AddFrame(new TGLabel(f3, "DZ"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fTransDz = new TGNumberEntry(f3, 0., 5, kMATRIX_DZ);
   nef = (TGTextEntry*)fTransDz->GetNumberEntry();
   nef->SetToolTipText("Enter the translation on Z");
   fTransDz->Associate(this);
   f3->AddFrame(fTransDz, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   compxyz->Resize(150,30);
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 2, 2));


   MakeTitle("Euler angles");
   compxyz = new TGCompositeFrame(this, 140, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for phi angle
   f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, " PHI "), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotPhi = new TGNumberEntry(f1, 0., 5, kMATRIX_PHI);
   nef = (TGTextEntry*)fRotPhi->GetNumberEntry();
   nef->SetToolTipText("Modify the first rotation angle about Z");
   fRotPhi->Associate(this);
   fRotPhi->Resize(90, fRotPhi->GetDefaultHeight());
   f1->AddFrame(fRotPhi, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for theta angle
   f2 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f2->AddFrame(new TGLabel(f2, "THETA"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotTheta = new TGNumberEntry(f2, 0., 5, kMATRIX_THETA);
   nef = (TGTextEntry*)fRotTheta->GetNumberEntry();
   nef->SetToolTipText("Modify the second rotation angle about the new X");
   fRotTheta->Associate(this);
   fRotTheta->Resize(90, fRotTheta->GetDefaultHeight());
   f2->AddFrame(fRotTheta, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Number entry for psi angle
   f3 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f3->AddFrame(new TGLabel(f3, " PSI "), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotPsi = new TGNumberEntry(f3, 0., 5, kMATRIX_PSI);
   nef = (TGTextEntry*)fRotPsi->GetNumberEntry();
   nef->SetToolTipText("Modify the third rotation angle about Z");
   fRotPsi->Associate(this);
   fRotPsi->Resize(90, fRotPsi->GetDefaultHeight());
   f3->AddFrame(fRotPsi, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));

   compxyz->Resize(150,compxyz->GetDefaultHeight());
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 2, 2));
   
   MakeTitle("Rotate about axis");
   compxyz = new TGCompositeFrame(this, 140, 30, kVerticalFrame | kRaisedFrame | kDoubleBorder);
   // Number entry for rotation angle about one axis
   f1 = new TGCompositeFrame(compxyz, 118, 10, kHorizontalFrame |
                                 kLHintsExpandX | kFixedWidth | kOwnBackground);
   f1->AddFrame(new TGLabel(f1, "ANGLE"), new TGLayoutHints(kLHintsLeft, 1, 1, 6, 0));
   fRotAxis = new TGNumberEntry(f1, 0., 5, kMATRIX_DX);
   nef = (TGTextEntry*)fRotAxis->GetNumberEntry();
   nef->SetToolTipText("Enter the new rotation angle about the selected axis");
   fRotAxis->Associate(this);
   fRotAxis->Resize(90, fRotAxis->GetDefaultHeight());
   f1->AddFrame(fRotAxis, new TGLayoutHints(kLHintsRight , 2, 2, 2, 2));
   compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));
   
   // Radio buttons group for axis selection
   TGHButtonGroup *bg1 = new TGHButtonGroup(compxyz, " Axis ");
   fRotX = new TGRadioButton(bg1, " &X ", kMATRIX_DX);
   fRotY = new TGRadioButton(bg1, " &Y ", kMATRIX_DY);
   fRotZ = new TGRadioButton(bg1, " &Z ", kMATRIX_DZ);
   bg1->SetRadioButtonExclusive();
   bg1->Show();
   compxyz->AddFrame(bg1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX , 2, 2, 2, 2));

   compxyz->Resize(150,compxyz->GetDefaultHeight());
   AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 6, 6, 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);
   fCancel = new TGTextButton(f23, "&Cancel");
   f23->AddFrame(fCancel, new TGLayoutHints(kLHintsCenterX, 2, 2, 4, 4));
   fCancel->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, 6, 6, 2, 2));  
   fUndo->SetSize(fCancel->GetSize());
   fApply->SetSize(fCancel->GetSize());
}

//______________________________________________________________________________
TGeoCombiTransEditor::~TGeoCombiTransEditor()
{
// Destructor
   TGFrameElement *el;
   TIter next(GetList());
   while ((el = (TGFrameElement *)next())) {
      if (el->fFrame->IsComposite()) 
         TGeoTabManager::Cleanup((TGCompositeFrame*)el->fFrame);
   }
   Cleanup();   
}

//______________________________________________________________________________
void TGeoCombiTransEditor::ConnectSignals2Slots()
{
   // Connect signals to slots.
   fApply->Connect("Clicked()", "TGeoCombiTransEditor", this, "DoApply()");
   fCancel->Connect("Clicked()", "TGeoCombiTransEditor", this, "DoCancel()");
   fUndo->Connect("Clicked()", "TGeoCombiTransEditor", this, "DoUndo()");
   fRotName->Connect("TextChanged(const char *)", "TGeoCombiTransEditor", this, "DoModified()");
   fRotPhi->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoRotPhi()");
   fRotTheta->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoRotTheta()");
   fRotPsi->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoRotPsi()");
   fRotAxis->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoRotAngle()");
   fTransDx->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoDx()");
   fTransDy->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoDy()");
   fTransDz->Connect("ValueSet(Long_t)", "TGeoCombiTransEditor", this, "DoDz()");
   fTransDx->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoCombiTransEditor", this, "DoDx()");
   fTransDy->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoCombiTransEditor", this, "DoDy()");
   fTransDz->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoCombiTransEditor", this, "DoDz()");
   fInit = kFALSE;
}


//______________________________________________________________________________
void TGeoCombiTransEditor::SetModel(TObject* obj)
{
   // Connect to the selected combi matrix.
   if (obj == 0 || (obj->IsA()!=TGeoCombiTrans::Class())) {
      SetActive(kFALSE);
      return;                 
   } 
   fCombi = (TGeoCombiTrans*)obj;
   TGeoRotation *rot = fCombi->GetRotation();
   if (rot) rot->GetAngles(fPhii, fThetai, fPsii);
   const char *sname = fCombi->GetName();
   if (!strcmp(sname, fCombi->ClassName())) fRotName->SetText("no_name");
   else {
      fRotName->SetText(sname);
      fNamei = sname;
   }   
   
   fDxi = fCombi->GetTranslation()[0];
   fDyi = fCombi->GetTranslation()[1];
   fDzi = fCombi->GetTranslation()[2];
   fTransDx->SetNumber(fDxi);
   fTransDy->SetNumber(fDyi);
   fTransDz->SetNumber(fDzi);

   fRotPhi->SetNumber(fPhii);
   fRotTheta->SetNumber(fThetai);
   fRotPsi->SetNumber(fPsii);
   fRotAxis->SetNumber(0.0);

   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
   
   if (fInit) ConnectSignals2Slots();
   SetActive();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoName()
{
// Slot for name.
   const char *name = fRotName->GetText();
   if (!strcmp(name, "no_name") || !strcmp(name, fCombi->GetName())) return;
   fCombi->SetName(name);
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoRotPhi()
{
// Slot for phi (Euler X convention)
   if (fRotPhi->GetNumber() < 0.) fRotPhi->SetNumber(fRotPhi->GetNumber()+360.);
   if (fRotPhi->GetNumber() >= 360.) fRotPhi->SetNumber(fRotPhi->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoRotTheta()
{
// Slot for theta (Euler X convention)
   if (fRotTheta->GetNumber() < 0.) fRotTheta->SetNumber(fRotTheta->GetNumber()+360.);
   if (fRotTheta->GetNumber() >= 360.) fRotTheta->SetNumber(fRotTheta->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoRotPsi()
{
// Slot for psi (Euler X convention)
   if (fRotPsi->GetNumber() < 0.) fRotPsi->SetNumber(fRotPsi->GetNumber()+360.);
   if (fRotPsi->GetNumber() >= 360.) fRotPsi->SetNumber(fRotPsi->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoRotAngle()
{
// Slot for additional rotation about one axis.
   if (fRotAxis->GetNumber() < 0.) fRotAxis->SetNumber(fRotAxis->GetNumber()+360.);
   if (fRotAxis->GetNumber() >= 360.) fRotAxis->SetNumber(fRotAxis->GetNumber()-360.);
   DoModified();
}

//______________________________________________________________________________
Bool_t TGeoCombiTransEditor::DoParameters()
{
// Slot for checking parameters.
   Double_t dx = fTransDx->GetNumber();
   Double_t dy = fTransDy->GetNumber();
   Double_t dz = fTransDz->GetNumber();
   Bool_t changedtr = kFALSE;
   if (dx != fCombi->GetTranslation()[0] || 
       dy != fCombi->GetTranslation()[1] || 
       dz != fCombi->GetTranslation()[2]) changedtr = kTRUE;
   if (changedtr) fCombi->SetTranslation(dx, dy, dz);
   Double_t phi = fRotPhi->GetNumber();
   Double_t theta = fRotTheta->GetNumber();
   Double_t psi = fRotPsi->GetNumber();
   Double_t angle = fRotAxis->GetNumber();
   Double_t phi0 = 0., theta0 = 0., psi0 = 0.;
   TGeoRotation *rot = fCombi->GetRotation();
   if (rot) rot->GetAngles(phi0,theta0,psi0);
   else {
      if (phi!=fPhii || theta!=fThetai || psi!=fPsii) {
         TGeoRotation r("rot",10.,0.,0.);
         fCombi->SetRotation(r);
         rot = fCombi->GetRotation();
         rot->SetAngles(0.,0.,0.);
      }
   }      
   Bool_t changed = kFALSE;
   if (phi != psi0 || theta != theta0 || psi != psi0) changed = kTRUE;
   if (changed && rot) rot->SetAngles(phi, theta, psi);
   // Check if we have to rotate about one axis
   if (angle != 0.0) {
      if (fRotX->IsOn()) {fCombi->RotateX(angle); changed = kTRUE;}
      if (fRotY->IsOn()) {fCombi->RotateY(angle); changed = kTRUE;}
      if (fRotZ->IsOn()) {fCombi->RotateZ(angle); changed = kTRUE;}
   }
   if (changedtr) changed = kTRUE;   
   if (!changed) return kFALSE;   
   fRotAxis->SetNumber(0.0);
   fUndo->SetEnabled();
   if (fPad) {
      fPad->Modified();
      fPad->Update();
   }   
   return kTRUE;
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoApply()
{
// Slot for applying modifications.
   DoName();
   if (DoParameters()) {
      fUndo->SetEnabled();
      fCancel->SetEnabled(kFALSE);
      fApply->SetEnabled(kFALSE);
   }   
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoCancel()
{
// Slot for cancelling last un-applied operations.
   if (!fNamei.Length()) fRotName->SetText("no_name");
   else fRotName->SetText(fNamei.Data());
   fTransDx->SetNumber(fDxi);
   fTransDy->SetNumber(fDyi);
   fTransDz->SetNumber(fDzi);
   fRotPhi->SetNumber(fPhii);
   fRotTheta->SetNumber(fThetai);
   fRotPsi->SetNumber(fPsii);
   fRotAxis->SetNumber(0.0);
   fApply->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fCancel->SetEnabled(kFALSE);
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoModified()
{
// Slot for notifying changes.
   fApply->SetEnabled();
   if (fUndo->GetState()==kButtonDisabled) fCancel->SetEnabled();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoUndo()
{
// Slot for undoing last changes.
   DoCancel();
   DoParameters();
   fCancel->SetEnabled(kFALSE);
   fUndo->SetEnabled(kFALSE);
   fApply->SetEnabled(kFALSE);
}
   
//______________________________________________________________________________
void TGeoCombiTransEditor::DoDx()
{
// Slot for X.
   DoModified();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoDy()
{
// Slot for Y.
   DoModified();
}

//______________________________________________________________________________
void TGeoCombiTransEditor::DoDz()
{
// Slot for Z.
   DoModified();
}

 TGeoMatrixEditor.cxx:1
 TGeoMatrixEditor.cxx:2
 TGeoMatrixEditor.cxx:3
 TGeoMatrixEditor.cxx:4
 TGeoMatrixEditor.cxx:5
 TGeoMatrixEditor.cxx:6
 TGeoMatrixEditor.cxx:7
 TGeoMatrixEditor.cxx:8
 TGeoMatrixEditor.cxx:9
 TGeoMatrixEditor.cxx:10
 TGeoMatrixEditor.cxx:11
 TGeoMatrixEditor.cxx:12
 TGeoMatrixEditor.cxx:13
 TGeoMatrixEditor.cxx:14
 TGeoMatrixEditor.cxx:15
 TGeoMatrixEditor.cxx:16
 TGeoMatrixEditor.cxx:17
 TGeoMatrixEditor.cxx:18
 TGeoMatrixEditor.cxx:19
 TGeoMatrixEditor.cxx:20
 TGeoMatrixEditor.cxx:21
 TGeoMatrixEditor.cxx:22
 TGeoMatrixEditor.cxx:23
 TGeoMatrixEditor.cxx:24
 TGeoMatrixEditor.cxx:25
 TGeoMatrixEditor.cxx:26
 TGeoMatrixEditor.cxx:27
 TGeoMatrixEditor.cxx:28
 TGeoMatrixEditor.cxx:29
 TGeoMatrixEditor.cxx:30
 TGeoMatrixEditor.cxx:31
 TGeoMatrixEditor.cxx:32
 TGeoMatrixEditor.cxx:33
 TGeoMatrixEditor.cxx:34
 TGeoMatrixEditor.cxx:35
 TGeoMatrixEditor.cxx:36
 TGeoMatrixEditor.cxx:37
 TGeoMatrixEditor.cxx:38
 TGeoMatrixEditor.cxx:39
 TGeoMatrixEditor.cxx:40
 TGeoMatrixEditor.cxx:41
 TGeoMatrixEditor.cxx:42
 TGeoMatrixEditor.cxx:43
 TGeoMatrixEditor.cxx:44
 TGeoMatrixEditor.cxx:45
 TGeoMatrixEditor.cxx:46
 TGeoMatrixEditor.cxx:47
 TGeoMatrixEditor.cxx:48
 TGeoMatrixEditor.cxx:49
 TGeoMatrixEditor.cxx:50
 TGeoMatrixEditor.cxx:51
 TGeoMatrixEditor.cxx:52
 TGeoMatrixEditor.cxx:53
 TGeoMatrixEditor.cxx:54
 TGeoMatrixEditor.cxx:55
 TGeoMatrixEditor.cxx:56
 TGeoMatrixEditor.cxx:57
 TGeoMatrixEditor.cxx:58
 TGeoMatrixEditor.cxx:59
 TGeoMatrixEditor.cxx:60
 TGeoMatrixEditor.cxx:61
 TGeoMatrixEditor.cxx:62
 TGeoMatrixEditor.cxx:63
 TGeoMatrixEditor.cxx:64
 TGeoMatrixEditor.cxx:65
 TGeoMatrixEditor.cxx:66
 TGeoMatrixEditor.cxx:67
 TGeoMatrixEditor.cxx:68
 TGeoMatrixEditor.cxx:69
 TGeoMatrixEditor.cxx:70
 TGeoMatrixEditor.cxx:71
 TGeoMatrixEditor.cxx:72
 TGeoMatrixEditor.cxx:73
 TGeoMatrixEditor.cxx:74
 TGeoMatrixEditor.cxx:75
 TGeoMatrixEditor.cxx:76
 TGeoMatrixEditor.cxx:77
 TGeoMatrixEditor.cxx:78
 TGeoMatrixEditor.cxx:79
 TGeoMatrixEditor.cxx:80
 TGeoMatrixEditor.cxx:81
 TGeoMatrixEditor.cxx:82
 TGeoMatrixEditor.cxx:83
 TGeoMatrixEditor.cxx:84
 TGeoMatrixEditor.cxx:85
 TGeoMatrixEditor.cxx:86
 TGeoMatrixEditor.cxx:87
 TGeoMatrixEditor.cxx:88
 TGeoMatrixEditor.cxx:89
 TGeoMatrixEditor.cxx:90
 TGeoMatrixEditor.cxx:91
 TGeoMatrixEditor.cxx:92
 TGeoMatrixEditor.cxx:93
 TGeoMatrixEditor.cxx:94
 TGeoMatrixEditor.cxx:95
 TGeoMatrixEditor.cxx:96
 TGeoMatrixEditor.cxx:97
 TGeoMatrixEditor.cxx:98
 TGeoMatrixEditor.cxx:99
 TGeoMatrixEditor.cxx:100
 TGeoMatrixEditor.cxx:101
 TGeoMatrixEditor.cxx:102
 TGeoMatrixEditor.cxx:103
 TGeoMatrixEditor.cxx:104
 TGeoMatrixEditor.cxx:105
 TGeoMatrixEditor.cxx:106
 TGeoMatrixEditor.cxx:107
 TGeoMatrixEditor.cxx:108
 TGeoMatrixEditor.cxx:109
 TGeoMatrixEditor.cxx:110
 TGeoMatrixEditor.cxx:111
 TGeoMatrixEditor.cxx:112
 TGeoMatrixEditor.cxx:113
 TGeoMatrixEditor.cxx:114
 TGeoMatrixEditor.cxx:115
 TGeoMatrixEditor.cxx:116
 TGeoMatrixEditor.cxx:117
 TGeoMatrixEditor.cxx:118
 TGeoMatrixEditor.cxx:119
 TGeoMatrixEditor.cxx:120
 TGeoMatrixEditor.cxx:121
 TGeoMatrixEditor.cxx:122
 TGeoMatrixEditor.cxx:123
 TGeoMatrixEditor.cxx:124
 TGeoMatrixEditor.cxx:125
 TGeoMatrixEditor.cxx:126
 TGeoMatrixEditor.cxx:127
 TGeoMatrixEditor.cxx:128
 TGeoMatrixEditor.cxx:129
 TGeoMatrixEditor.cxx:130
 TGeoMatrixEditor.cxx:131
 TGeoMatrixEditor.cxx:132
 TGeoMatrixEditor.cxx:133
 TGeoMatrixEditor.cxx:134
 TGeoMatrixEditor.cxx:135
 TGeoMatrixEditor.cxx:136
 TGeoMatrixEditor.cxx:137
 TGeoMatrixEditor.cxx:138
 TGeoMatrixEditor.cxx:139
 TGeoMatrixEditor.cxx:140
 TGeoMatrixEditor.cxx:141
 TGeoMatrixEditor.cxx:142
 TGeoMatrixEditor.cxx:143
 TGeoMatrixEditor.cxx:144
 TGeoMatrixEditor.cxx:145
 TGeoMatrixEditor.cxx:146
 TGeoMatrixEditor.cxx:147
 TGeoMatrixEditor.cxx:148
 TGeoMatrixEditor.cxx:149
 TGeoMatrixEditor.cxx:150
 TGeoMatrixEditor.cxx:151
 TGeoMatrixEditor.cxx:152
 TGeoMatrixEditor.cxx:153
 TGeoMatrixEditor.cxx:154
 TGeoMatrixEditor.cxx:155
 TGeoMatrixEditor.cxx:156
 TGeoMatrixEditor.cxx:157
 TGeoMatrixEditor.cxx:158
 TGeoMatrixEditor.cxx:159
 TGeoMatrixEditor.cxx:160
 TGeoMatrixEditor.cxx:161
 TGeoMatrixEditor.cxx:162
 TGeoMatrixEditor.cxx:163
 TGeoMatrixEditor.cxx:164
 TGeoMatrixEditor.cxx:165
 TGeoMatrixEditor.cxx:166
 TGeoMatrixEditor.cxx:167
 TGeoMatrixEditor.cxx:168
 TGeoMatrixEditor.cxx:169
 TGeoMatrixEditor.cxx:170
 TGeoMatrixEditor.cxx:171
 TGeoMatrixEditor.cxx:172
 TGeoMatrixEditor.cxx:173
 TGeoMatrixEditor.cxx:174
 TGeoMatrixEditor.cxx:175
 TGeoMatrixEditor.cxx:176
 TGeoMatrixEditor.cxx:177
 TGeoMatrixEditor.cxx:178
 TGeoMatrixEditor.cxx:179
 TGeoMatrixEditor.cxx:180
 TGeoMatrixEditor.cxx:181
 TGeoMatrixEditor.cxx:182
 TGeoMatrixEditor.cxx:183
 TGeoMatrixEditor.cxx:184
 TGeoMatrixEditor.cxx:185
 TGeoMatrixEditor.cxx:186
 TGeoMatrixEditor.cxx:187
 TGeoMatrixEditor.cxx:188
 TGeoMatrixEditor.cxx:189
 TGeoMatrixEditor.cxx:190
 TGeoMatrixEditor.cxx:191
 TGeoMatrixEditor.cxx:192
 TGeoMatrixEditor.cxx:193
 TGeoMatrixEditor.cxx:194
 TGeoMatrixEditor.cxx:195
 TGeoMatrixEditor.cxx:196
 TGeoMatrixEditor.cxx:197
 TGeoMatrixEditor.cxx:198
 TGeoMatrixEditor.cxx:199
 TGeoMatrixEditor.cxx:200
 TGeoMatrixEditor.cxx:201
 TGeoMatrixEditor.cxx:202
 TGeoMatrixEditor.cxx:203
 TGeoMatrixEditor.cxx:204
 TGeoMatrixEditor.cxx:205
 TGeoMatrixEditor.cxx:206
 TGeoMatrixEditor.cxx:207
 TGeoMatrixEditor.cxx:208
 TGeoMatrixEditor.cxx:209
 TGeoMatrixEditor.cxx:210
 TGeoMatrixEditor.cxx:211
 TGeoMatrixEditor.cxx:212
 TGeoMatrixEditor.cxx:213
 TGeoMatrixEditor.cxx:214
 TGeoMatrixEditor.cxx:215
 TGeoMatrixEditor.cxx:216
 TGeoMatrixEditor.cxx:217
 TGeoMatrixEditor.cxx:218
 TGeoMatrixEditor.cxx:219
 TGeoMatrixEditor.cxx:220
 TGeoMatrixEditor.cxx:221
 TGeoMatrixEditor.cxx:222
 TGeoMatrixEditor.cxx:223
 TGeoMatrixEditor.cxx:224
 TGeoMatrixEditor.cxx:225
 TGeoMatrixEditor.cxx:226
 TGeoMatrixEditor.cxx:227
 TGeoMatrixEditor.cxx:228
 TGeoMatrixEditor.cxx:229
 TGeoMatrixEditor.cxx:230
 TGeoMatrixEditor.cxx:231
 TGeoMatrixEditor.cxx:232
 TGeoMatrixEditor.cxx:233
 TGeoMatrixEditor.cxx:234
 TGeoMatrixEditor.cxx:235
 TGeoMatrixEditor.cxx:236
 TGeoMatrixEditor.cxx:237
 TGeoMatrixEditor.cxx:238
 TGeoMatrixEditor.cxx:239
 TGeoMatrixEditor.cxx:240
 TGeoMatrixEditor.cxx:241
 TGeoMatrixEditor.cxx:242
 TGeoMatrixEditor.cxx:243
 TGeoMatrixEditor.cxx:244
 TGeoMatrixEditor.cxx:245
 TGeoMatrixEditor.cxx:246
 TGeoMatrixEditor.cxx:247
 TGeoMatrixEditor.cxx:248
 TGeoMatrixEditor.cxx:249
 TGeoMatrixEditor.cxx:250
 TGeoMatrixEditor.cxx:251
 TGeoMatrixEditor.cxx:252
 TGeoMatrixEditor.cxx:253
 TGeoMatrixEditor.cxx:254
 TGeoMatrixEditor.cxx:255
 TGeoMatrixEditor.cxx:256
 TGeoMatrixEditor.cxx:257
 TGeoMatrixEditor.cxx:258
 TGeoMatrixEditor.cxx:259
 TGeoMatrixEditor.cxx:260
 TGeoMatrixEditor.cxx:261
 TGeoMatrixEditor.cxx:262
 TGeoMatrixEditor.cxx:263
 TGeoMatrixEditor.cxx:264
 TGeoMatrixEditor.cxx:265
 TGeoMatrixEditor.cxx:266
 TGeoMatrixEditor.cxx:267
 TGeoMatrixEditor.cxx:268
 TGeoMatrixEditor.cxx:269
 TGeoMatrixEditor.cxx:270
 TGeoMatrixEditor.cxx:271
 TGeoMatrixEditor.cxx:272
 TGeoMatrixEditor.cxx:273
 TGeoMatrixEditor.cxx:274
 TGeoMatrixEditor.cxx:275
 TGeoMatrixEditor.cxx:276
 TGeoMatrixEditor.cxx:277
 TGeoMatrixEditor.cxx:278
 TGeoMatrixEditor.cxx:279
 TGeoMatrixEditor.cxx:280
 TGeoMatrixEditor.cxx:281
 TGeoMatrixEditor.cxx:282
 TGeoMatrixEditor.cxx:283
 TGeoMatrixEditor.cxx:284
 TGeoMatrixEditor.cxx:285
 TGeoMatrixEditor.cxx:286
 TGeoMatrixEditor.cxx:287
 TGeoMatrixEditor.cxx:288
 TGeoMatrixEditor.cxx:289
 TGeoMatrixEditor.cxx:290
 TGeoMatrixEditor.cxx:291
 TGeoMatrixEditor.cxx:292
 TGeoMatrixEditor.cxx:293
 TGeoMatrixEditor.cxx:294
 TGeoMatrixEditor.cxx:295
 TGeoMatrixEditor.cxx:296
 TGeoMatrixEditor.cxx:297
 TGeoMatrixEditor.cxx:298
 TGeoMatrixEditor.cxx:299
 TGeoMatrixEditor.cxx:300
 TGeoMatrixEditor.cxx:301
 TGeoMatrixEditor.cxx:302
 TGeoMatrixEditor.cxx:303
 TGeoMatrixEditor.cxx:304
 TGeoMatrixEditor.cxx:305
 TGeoMatrixEditor.cxx:306
 TGeoMatrixEditor.cxx:307
 TGeoMatrixEditor.cxx:308
 TGeoMatrixEditor.cxx:309
 TGeoMatrixEditor.cxx:310
 TGeoMatrixEditor.cxx:311
 TGeoMatrixEditor.cxx:312
 TGeoMatrixEditor.cxx:313
 TGeoMatrixEditor.cxx:314
 TGeoMatrixEditor.cxx:315
 TGeoMatrixEditor.cxx:316
 TGeoMatrixEditor.cxx:317
 TGeoMatrixEditor.cxx:318
 TGeoMatrixEditor.cxx:319
 TGeoMatrixEditor.cxx:320
 TGeoMatrixEditor.cxx:321
 TGeoMatrixEditor.cxx:322
 TGeoMatrixEditor.cxx:323
 TGeoMatrixEditor.cxx:324
 TGeoMatrixEditor.cxx:325
 TGeoMatrixEditor.cxx:326
 TGeoMatrixEditor.cxx:327
 TGeoMatrixEditor.cxx:328
 TGeoMatrixEditor.cxx:329
 TGeoMatrixEditor.cxx:330
 TGeoMatrixEditor.cxx:331
 TGeoMatrixEditor.cxx:332
 TGeoMatrixEditor.cxx:333
 TGeoMatrixEditor.cxx:334
 TGeoMatrixEditor.cxx:335
 TGeoMatrixEditor.cxx:336
 TGeoMatrixEditor.cxx:337
 TGeoMatrixEditor.cxx:338
 TGeoMatrixEditor.cxx:339
 TGeoMatrixEditor.cxx:340
 TGeoMatrixEditor.cxx:341
 TGeoMatrixEditor.cxx:342
 TGeoMatrixEditor.cxx:343
 TGeoMatrixEditor.cxx:344
 TGeoMatrixEditor.cxx:345
 TGeoMatrixEditor.cxx:346
 TGeoMatrixEditor.cxx:347
 TGeoMatrixEditor.cxx:348
 TGeoMatrixEditor.cxx:349
 TGeoMatrixEditor.cxx:350
 TGeoMatrixEditor.cxx:351
 TGeoMatrixEditor.cxx:352
 TGeoMatrixEditor.cxx:353
 TGeoMatrixEditor.cxx:354
 TGeoMatrixEditor.cxx:355
 TGeoMatrixEditor.cxx:356
 TGeoMatrixEditor.cxx:357
 TGeoMatrixEditor.cxx:358
 TGeoMatrixEditor.cxx:359
 TGeoMatrixEditor.cxx:360
 TGeoMatrixEditor.cxx:361
 TGeoMatrixEditor.cxx:362
 TGeoMatrixEditor.cxx:363
 TGeoMatrixEditor.cxx:364
 TGeoMatrixEditor.cxx:365
 TGeoMatrixEditor.cxx:366
 TGeoMatrixEditor.cxx:367
 TGeoMatrixEditor.cxx:368
 TGeoMatrixEditor.cxx:369
 TGeoMatrixEditor.cxx:370
 TGeoMatrixEditor.cxx:371
 TGeoMatrixEditor.cxx:372
 TGeoMatrixEditor.cxx:373
 TGeoMatrixEditor.cxx:374
 TGeoMatrixEditor.cxx:375
 TGeoMatrixEditor.cxx:376
 TGeoMatrixEditor.cxx:377
 TGeoMatrixEditor.cxx:378
 TGeoMatrixEditor.cxx:379
 TGeoMatrixEditor.cxx:380
 TGeoMatrixEditor.cxx:381
 TGeoMatrixEditor.cxx:382
 TGeoMatrixEditor.cxx:383
 TGeoMatrixEditor.cxx:384
 TGeoMatrixEditor.cxx:385
 TGeoMatrixEditor.cxx:386
 TGeoMatrixEditor.cxx:387
 TGeoMatrixEditor.cxx:388
 TGeoMatrixEditor.cxx:389
 TGeoMatrixEditor.cxx:390
 TGeoMatrixEditor.cxx:391
 TGeoMatrixEditor.cxx:392
 TGeoMatrixEditor.cxx:393
 TGeoMatrixEditor.cxx:394
 TGeoMatrixEditor.cxx:395
 TGeoMatrixEditor.cxx:396
 TGeoMatrixEditor.cxx:397
 TGeoMatrixEditor.cxx:398
 TGeoMatrixEditor.cxx:399
 TGeoMatrixEditor.cxx:400
 TGeoMatrixEditor.cxx:401
 TGeoMatrixEditor.cxx:402
 TGeoMatrixEditor.cxx:403
 TGeoMatrixEditor.cxx:404
 TGeoMatrixEditor.cxx:405
 TGeoMatrixEditor.cxx:406
 TGeoMatrixEditor.cxx:407
 TGeoMatrixEditor.cxx:408
 TGeoMatrixEditor.cxx:409
 TGeoMatrixEditor.cxx:410
 TGeoMatrixEditor.cxx:411
 TGeoMatrixEditor.cxx:412
 TGeoMatrixEditor.cxx:413
 TGeoMatrixEditor.cxx:414
 TGeoMatrixEditor.cxx:415
 TGeoMatrixEditor.cxx:416
 TGeoMatrixEditor.cxx:417
 TGeoMatrixEditor.cxx:418
 TGeoMatrixEditor.cxx:419
 TGeoMatrixEditor.cxx:420
 TGeoMatrixEditor.cxx:421
 TGeoMatrixEditor.cxx:422
 TGeoMatrixEditor.cxx:423
 TGeoMatrixEditor.cxx:424
 TGeoMatrixEditor.cxx:425
 TGeoMatrixEditor.cxx:426
 TGeoMatrixEditor.cxx:427
 TGeoMatrixEditor.cxx:428
 TGeoMatrixEditor.cxx:429
 TGeoMatrixEditor.cxx:430
 TGeoMatrixEditor.cxx:431
 TGeoMatrixEditor.cxx:432
 TGeoMatrixEditor.cxx:433
 TGeoMatrixEditor.cxx:434
 TGeoMatrixEditor.cxx:435
 TGeoMatrixEditor.cxx:436
 TGeoMatrixEditor.cxx:437
 TGeoMatrixEditor.cxx:438
 TGeoMatrixEditor.cxx:439
 TGeoMatrixEditor.cxx:440
 TGeoMatrixEditor.cxx:441
 TGeoMatrixEditor.cxx:442
 TGeoMatrixEditor.cxx:443
 TGeoMatrixEditor.cxx:444
 TGeoMatrixEditor.cxx:445
 TGeoMatrixEditor.cxx:446
 TGeoMatrixEditor.cxx:447
 TGeoMatrixEditor.cxx:448
 TGeoMatrixEditor.cxx:449
 TGeoMatrixEditor.cxx:450
 TGeoMatrixEditor.cxx:451
 TGeoMatrixEditor.cxx:452
 TGeoMatrixEditor.cxx:453
 TGeoMatrixEditor.cxx:454
 TGeoMatrixEditor.cxx:455
 TGeoMatrixEditor.cxx:456
 TGeoMatrixEditor.cxx:457
 TGeoMatrixEditor.cxx:458
 TGeoMatrixEditor.cxx:459
 TGeoMatrixEditor.cxx:460
 TGeoMatrixEditor.cxx:461
 TGeoMatrixEditor.cxx:462
 TGeoMatrixEditor.cxx:463
 TGeoMatrixEditor.cxx:464
 TGeoMatrixEditor.cxx:465
 TGeoMatrixEditor.cxx:466
 TGeoMatrixEditor.cxx:467
 TGeoMatrixEditor.cxx:468
 TGeoMatrixEditor.cxx:469
 TGeoMatrixEditor.cxx:470
 TGeoMatrixEditor.cxx:471
 TGeoMatrixEditor.cxx:472
 TGeoMatrixEditor.cxx:473
 TGeoMatrixEditor.cxx:474
 TGeoMatrixEditor.cxx:475
 TGeoMatrixEditor.cxx:476
 TGeoMatrixEditor.cxx:477
 TGeoMatrixEditor.cxx:478
 TGeoMatrixEditor.cxx:479
 TGeoMatrixEditor.cxx:480
 TGeoMatrixEditor.cxx:481
 TGeoMatrixEditor.cxx:482
 TGeoMatrixEditor.cxx:483
 TGeoMatrixEditor.cxx:484
 TGeoMatrixEditor.cxx:485
 TGeoMatrixEditor.cxx:486
 TGeoMatrixEditor.cxx:487
 TGeoMatrixEditor.cxx:488
 TGeoMatrixEditor.cxx:489
 TGeoMatrixEditor.cxx:490
 TGeoMatrixEditor.cxx:491
 TGeoMatrixEditor.cxx:492
 TGeoMatrixEditor.cxx:493
 TGeoMatrixEditor.cxx:494
 TGeoMatrixEditor.cxx:495
 TGeoMatrixEditor.cxx:496
 TGeoMatrixEditor.cxx:497
 TGeoMatrixEditor.cxx:498
 TGeoMatrixEditor.cxx:499
 TGeoMatrixEditor.cxx:500
 TGeoMatrixEditor.cxx:501
 TGeoMatrixEditor.cxx:502
 TGeoMatrixEditor.cxx:503
 TGeoMatrixEditor.cxx:504
 TGeoMatrixEditor.cxx:505
 TGeoMatrixEditor.cxx:506
 TGeoMatrixEditor.cxx:507
 TGeoMatrixEditor.cxx:508
 TGeoMatrixEditor.cxx:509
 TGeoMatrixEditor.cxx:510
 TGeoMatrixEditor.cxx:511
 TGeoMatrixEditor.cxx:512
 TGeoMatrixEditor.cxx:513
 TGeoMatrixEditor.cxx:514
 TGeoMatrixEditor.cxx:515
 TGeoMatrixEditor.cxx:516
 TGeoMatrixEditor.cxx:517
 TGeoMatrixEditor.cxx:518
 TGeoMatrixEditor.cxx:519
 TGeoMatrixEditor.cxx:520
 TGeoMatrixEditor.cxx:521
 TGeoMatrixEditor.cxx:522
 TGeoMatrixEditor.cxx:523
 TGeoMatrixEditor.cxx:524
 TGeoMatrixEditor.cxx:525
 TGeoMatrixEditor.cxx:526
 TGeoMatrixEditor.cxx:527
 TGeoMatrixEditor.cxx:528
 TGeoMatrixEditor.cxx:529
 TGeoMatrixEditor.cxx:530
 TGeoMatrixEditor.cxx:531
 TGeoMatrixEditor.cxx:532
 TGeoMatrixEditor.cxx:533
 TGeoMatrixEditor.cxx:534
 TGeoMatrixEditor.cxx:535
 TGeoMatrixEditor.cxx:536
 TGeoMatrixEditor.cxx:537
 TGeoMatrixEditor.cxx:538
 TGeoMatrixEditor.cxx:539
 TGeoMatrixEditor.cxx:540
 TGeoMatrixEditor.cxx:541
 TGeoMatrixEditor.cxx:542
 TGeoMatrixEditor.cxx:543
 TGeoMatrixEditor.cxx:544
 TGeoMatrixEditor.cxx:545
 TGeoMatrixEditor.cxx:546
 TGeoMatrixEditor.cxx:547
 TGeoMatrixEditor.cxx:548
 TGeoMatrixEditor.cxx:549
 TGeoMatrixEditor.cxx:550
 TGeoMatrixEditor.cxx:551
 TGeoMatrixEditor.cxx:552
 TGeoMatrixEditor.cxx:553
 TGeoMatrixEditor.cxx:554
 TGeoMatrixEditor.cxx:555
 TGeoMatrixEditor.cxx:556
 TGeoMatrixEditor.cxx:557
 TGeoMatrixEditor.cxx:558
 TGeoMatrixEditor.cxx:559
 TGeoMatrixEditor.cxx:560
 TGeoMatrixEditor.cxx:561
 TGeoMatrixEditor.cxx:562
 TGeoMatrixEditor.cxx:563
 TGeoMatrixEditor.cxx:564
 TGeoMatrixEditor.cxx:565
 TGeoMatrixEditor.cxx:566
 TGeoMatrixEditor.cxx:567
 TGeoMatrixEditor.cxx:568
 TGeoMatrixEditor.cxx:569
 TGeoMatrixEditor.cxx:570
 TGeoMatrixEditor.cxx:571
 TGeoMatrixEditor.cxx:572
 TGeoMatrixEditor.cxx:573
 TGeoMatrixEditor.cxx:574
 TGeoMatrixEditor.cxx:575
 TGeoMatrixEditor.cxx:576
 TGeoMatrixEditor.cxx:577
 TGeoMatrixEditor.cxx:578
 TGeoMatrixEditor.cxx:579
 TGeoMatrixEditor.cxx:580
 TGeoMatrixEditor.cxx:581
 TGeoMatrixEditor.cxx:582
 TGeoMatrixEditor.cxx:583
 TGeoMatrixEditor.cxx:584
 TGeoMatrixEditor.cxx:585
 TGeoMatrixEditor.cxx:586
 TGeoMatrixEditor.cxx:587
 TGeoMatrixEditor.cxx:588
 TGeoMatrixEditor.cxx:589
 TGeoMatrixEditor.cxx:590
 TGeoMatrixEditor.cxx:591
 TGeoMatrixEditor.cxx:592
 TGeoMatrixEditor.cxx:593
 TGeoMatrixEditor.cxx:594
 TGeoMatrixEditor.cxx:595
 TGeoMatrixEditor.cxx:596
 TGeoMatrixEditor.cxx:597
 TGeoMatrixEditor.cxx:598
 TGeoMatrixEditor.cxx:599
 TGeoMatrixEditor.cxx:600
 TGeoMatrixEditor.cxx:601
 TGeoMatrixEditor.cxx:602
 TGeoMatrixEditor.cxx:603
 TGeoMatrixEditor.cxx:604
 TGeoMatrixEditor.cxx:605
 TGeoMatrixEditor.cxx:606
 TGeoMatrixEditor.cxx:607
 TGeoMatrixEditor.cxx:608
 TGeoMatrixEditor.cxx:609
 TGeoMatrixEditor.cxx:610
 TGeoMatrixEditor.cxx:611
 TGeoMatrixEditor.cxx:612
 TGeoMatrixEditor.cxx:613
 TGeoMatrixEditor.cxx:614
 TGeoMatrixEditor.cxx:615
 TGeoMatrixEditor.cxx:616
 TGeoMatrixEditor.cxx:617
 TGeoMatrixEditor.cxx:618
 TGeoMatrixEditor.cxx:619
 TGeoMatrixEditor.cxx:620
 TGeoMatrixEditor.cxx:621
 TGeoMatrixEditor.cxx:622
 TGeoMatrixEditor.cxx:623
 TGeoMatrixEditor.cxx:624
 TGeoMatrixEditor.cxx:625
 TGeoMatrixEditor.cxx:626
 TGeoMatrixEditor.cxx:627
 TGeoMatrixEditor.cxx:628
 TGeoMatrixEditor.cxx:629
 TGeoMatrixEditor.cxx:630
 TGeoMatrixEditor.cxx:631
 TGeoMatrixEditor.cxx:632
 TGeoMatrixEditor.cxx:633
 TGeoMatrixEditor.cxx:634
 TGeoMatrixEditor.cxx:635
 TGeoMatrixEditor.cxx:636
 TGeoMatrixEditor.cxx:637
 TGeoMatrixEditor.cxx:638
 TGeoMatrixEditor.cxx:639
 TGeoMatrixEditor.cxx:640
 TGeoMatrixEditor.cxx:641
 TGeoMatrixEditor.cxx:642
 TGeoMatrixEditor.cxx:643
 TGeoMatrixEditor.cxx:644
 TGeoMatrixEditor.cxx:645
 TGeoMatrixEditor.cxx:646
 TGeoMatrixEditor.cxx:647
 TGeoMatrixEditor.cxx:648
 TGeoMatrixEditor.cxx:649
 TGeoMatrixEditor.cxx:650
 TGeoMatrixEditor.cxx:651
 TGeoMatrixEditor.cxx:652
 TGeoMatrixEditor.cxx:653
 TGeoMatrixEditor.cxx:654
 TGeoMatrixEditor.cxx:655
 TGeoMatrixEditor.cxx:656
 TGeoMatrixEditor.cxx:657
 TGeoMatrixEditor.cxx:658
 TGeoMatrixEditor.cxx:659
 TGeoMatrixEditor.cxx:660
 TGeoMatrixEditor.cxx:661
 TGeoMatrixEditor.cxx:662
 TGeoMatrixEditor.cxx:663
 TGeoMatrixEditor.cxx:664
 TGeoMatrixEditor.cxx:665
 TGeoMatrixEditor.cxx:666
 TGeoMatrixEditor.cxx:667
 TGeoMatrixEditor.cxx:668
 TGeoMatrixEditor.cxx:669
 TGeoMatrixEditor.cxx:670
 TGeoMatrixEditor.cxx:671
 TGeoMatrixEditor.cxx:672
 TGeoMatrixEditor.cxx:673
 TGeoMatrixEditor.cxx:674
 TGeoMatrixEditor.cxx:675
 TGeoMatrixEditor.cxx:676
 TGeoMatrixEditor.cxx:677
 TGeoMatrixEditor.cxx:678
 TGeoMatrixEditor.cxx:679
 TGeoMatrixEditor.cxx:680
 TGeoMatrixEditor.cxx:681
 TGeoMatrixEditor.cxx:682
 TGeoMatrixEditor.cxx:683
 TGeoMatrixEditor.cxx:684
 TGeoMatrixEditor.cxx:685
 TGeoMatrixEditor.cxx:686
 TGeoMatrixEditor.cxx:687
 TGeoMatrixEditor.cxx:688
 TGeoMatrixEditor.cxx:689
 TGeoMatrixEditor.cxx:690
 TGeoMatrixEditor.cxx:691
 TGeoMatrixEditor.cxx:692
 TGeoMatrixEditor.cxx:693
 TGeoMatrixEditor.cxx:694
 TGeoMatrixEditor.cxx:695
 TGeoMatrixEditor.cxx:696
 TGeoMatrixEditor.cxx:697
 TGeoMatrixEditor.cxx:698
 TGeoMatrixEditor.cxx:699
 TGeoMatrixEditor.cxx:700
 TGeoMatrixEditor.cxx:701
 TGeoMatrixEditor.cxx:702
 TGeoMatrixEditor.cxx:703
 TGeoMatrixEditor.cxx:704
 TGeoMatrixEditor.cxx:705
 TGeoMatrixEditor.cxx:706
 TGeoMatrixEditor.cxx:707
 TGeoMatrixEditor.cxx:708
 TGeoMatrixEditor.cxx:709
 TGeoMatrixEditor.cxx:710
 TGeoMatrixEditor.cxx:711
 TGeoMatrixEditor.cxx:712
 TGeoMatrixEditor.cxx:713
 TGeoMatrixEditor.cxx:714
 TGeoMatrixEditor.cxx:715
 TGeoMatrixEditor.cxx:716
 TGeoMatrixEditor.cxx:717
 TGeoMatrixEditor.cxx:718
 TGeoMatrixEditor.cxx:719
 TGeoMatrixEditor.cxx:720
 TGeoMatrixEditor.cxx:721
 TGeoMatrixEditor.cxx:722
 TGeoMatrixEditor.cxx:723
 TGeoMatrixEditor.cxx:724
 TGeoMatrixEditor.cxx:725
 TGeoMatrixEditor.cxx:726
 TGeoMatrixEditor.cxx:727
 TGeoMatrixEditor.cxx:728
 TGeoMatrixEditor.cxx:729
 TGeoMatrixEditor.cxx:730
 TGeoMatrixEditor.cxx:731
 TGeoMatrixEditor.cxx:732
 TGeoMatrixEditor.cxx:733
 TGeoMatrixEditor.cxx:734
 TGeoMatrixEditor.cxx:735
 TGeoMatrixEditor.cxx:736
 TGeoMatrixEditor.cxx:737
 TGeoMatrixEditor.cxx:738
 TGeoMatrixEditor.cxx:739
 TGeoMatrixEditor.cxx:740
 TGeoMatrixEditor.cxx:741
 TGeoMatrixEditor.cxx:742
 TGeoMatrixEditor.cxx:743
 TGeoMatrixEditor.cxx:744
 TGeoMatrixEditor.cxx:745
 TGeoMatrixEditor.cxx:746
 TGeoMatrixEditor.cxx:747
 TGeoMatrixEditor.cxx:748
 TGeoMatrixEditor.cxx:749
 TGeoMatrixEditor.cxx:750
 TGeoMatrixEditor.cxx:751
 TGeoMatrixEditor.cxx:752
 TGeoMatrixEditor.cxx:753
 TGeoMatrixEditor.cxx:754
 TGeoMatrixEditor.cxx:755
 TGeoMatrixEditor.cxx:756
 TGeoMatrixEditor.cxx:757
 TGeoMatrixEditor.cxx:758
 TGeoMatrixEditor.cxx:759
 TGeoMatrixEditor.cxx:760
 TGeoMatrixEditor.cxx:761
 TGeoMatrixEditor.cxx:762
 TGeoMatrixEditor.cxx:763
 TGeoMatrixEditor.cxx:764
 TGeoMatrixEditor.cxx:765
 TGeoMatrixEditor.cxx:766
 TGeoMatrixEditor.cxx:767
 TGeoMatrixEditor.cxx:768
 TGeoMatrixEditor.cxx:769
 TGeoMatrixEditor.cxx:770
 TGeoMatrixEditor.cxx:771
 TGeoMatrixEditor.cxx:772
 TGeoMatrixEditor.cxx:773
 TGeoMatrixEditor.cxx:774
 TGeoMatrixEditor.cxx:775
 TGeoMatrixEditor.cxx:776
 TGeoMatrixEditor.cxx:777
 TGeoMatrixEditor.cxx:778
 TGeoMatrixEditor.cxx:779
 TGeoMatrixEditor.cxx:780
 TGeoMatrixEditor.cxx:781
 TGeoMatrixEditor.cxx:782
 TGeoMatrixEditor.cxx:783
 TGeoMatrixEditor.cxx:784
 TGeoMatrixEditor.cxx:785
 TGeoMatrixEditor.cxx:786
 TGeoMatrixEditor.cxx:787
 TGeoMatrixEditor.cxx:788
 TGeoMatrixEditor.cxx:789
 TGeoMatrixEditor.cxx:790
 TGeoMatrixEditor.cxx:791
 TGeoMatrixEditor.cxx:792
 TGeoMatrixEditor.cxx:793
 TGeoMatrixEditor.cxx:794
 TGeoMatrixEditor.cxx:795
 TGeoMatrixEditor.cxx:796
 TGeoMatrixEditor.cxx:797
 TGeoMatrixEditor.cxx:798
 TGeoMatrixEditor.cxx:799
 TGeoMatrixEditor.cxx:800
 TGeoMatrixEditor.cxx:801
 TGeoMatrixEditor.cxx:802
 TGeoMatrixEditor.cxx:803
 TGeoMatrixEditor.cxx:804
 TGeoMatrixEditor.cxx:805
 TGeoMatrixEditor.cxx:806
 TGeoMatrixEditor.cxx:807
 TGeoMatrixEditor.cxx:808
 TGeoMatrixEditor.cxx:809
 TGeoMatrixEditor.cxx:810
 TGeoMatrixEditor.cxx:811
 TGeoMatrixEditor.cxx:812
 TGeoMatrixEditor.cxx:813
 TGeoMatrixEditor.cxx:814
 TGeoMatrixEditor.cxx:815
 TGeoMatrixEditor.cxx:816
 TGeoMatrixEditor.cxx:817
 TGeoMatrixEditor.cxx:818
 TGeoMatrixEditor.cxx:819
 TGeoMatrixEditor.cxx:820
 TGeoMatrixEditor.cxx:821
 TGeoMatrixEditor.cxx:822
 TGeoMatrixEditor.cxx:823
 TGeoMatrixEditor.cxx:824
 TGeoMatrixEditor.cxx:825
 TGeoMatrixEditor.cxx:826
 TGeoMatrixEditor.cxx:827
 TGeoMatrixEditor.cxx:828
 TGeoMatrixEditor.cxx:829
 TGeoMatrixEditor.cxx:830
 TGeoMatrixEditor.cxx:831
 TGeoMatrixEditor.cxx:832
 TGeoMatrixEditor.cxx:833
 TGeoMatrixEditor.cxx:834
 TGeoMatrixEditor.cxx:835
 TGeoMatrixEditor.cxx:836
 TGeoMatrixEditor.cxx:837
 TGeoMatrixEditor.cxx:838
 TGeoMatrixEditor.cxx:839
 TGeoMatrixEditor.cxx:840
 TGeoMatrixEditor.cxx:841
 TGeoMatrixEditor.cxx:842
 TGeoMatrixEditor.cxx:843
 TGeoMatrixEditor.cxx:844
 TGeoMatrixEditor.cxx:845
 TGeoMatrixEditor.cxx:846
 TGeoMatrixEditor.cxx:847
 TGeoMatrixEditor.cxx:848
 TGeoMatrixEditor.cxx:849
 TGeoMatrixEditor.cxx:850
 TGeoMatrixEditor.cxx:851
 TGeoMatrixEditor.cxx:852
 TGeoMatrixEditor.cxx:853
 TGeoMatrixEditor.cxx:854
 TGeoMatrixEditor.cxx:855
 TGeoMatrixEditor.cxx:856
 TGeoMatrixEditor.cxx:857
 TGeoMatrixEditor.cxx:858
 TGeoMatrixEditor.cxx:859
 TGeoMatrixEditor.cxx:860
 TGeoMatrixEditor.cxx:861
 TGeoMatrixEditor.cxx:862
 TGeoMatrixEditor.cxx:863
 TGeoMatrixEditor.cxx:864
 TGeoMatrixEditor.cxx:865
 TGeoMatrixEditor.cxx:866
 TGeoMatrixEditor.cxx:867
 TGeoMatrixEditor.cxx:868
 TGeoMatrixEditor.cxx:869
 TGeoMatrixEditor.cxx:870
 TGeoMatrixEditor.cxx:871
 TGeoMatrixEditor.cxx:872
 TGeoMatrixEditor.cxx:873
 TGeoMatrixEditor.cxx:874
 TGeoMatrixEditor.cxx:875
 TGeoMatrixEditor.cxx:876
 TGeoMatrixEditor.cxx:877
 TGeoMatrixEditor.cxx:878
 TGeoMatrixEditor.cxx:879
 TGeoMatrixEditor.cxx:880
 TGeoMatrixEditor.cxx:881
 TGeoMatrixEditor.cxx:882
 TGeoMatrixEditor.cxx:883
 TGeoMatrixEditor.cxx:884
 TGeoMatrixEditor.cxx:885
 TGeoMatrixEditor.cxx:886
 TGeoMatrixEditor.cxx:887
 TGeoMatrixEditor.cxx:888
 TGeoMatrixEditor.cxx:889
 TGeoMatrixEditor.cxx:890
 TGeoMatrixEditor.cxx:891
 TGeoMatrixEditor.cxx:892
 TGeoMatrixEditor.cxx:893
 TGeoMatrixEditor.cxx:894
 TGeoMatrixEditor.cxx:895
 TGeoMatrixEditor.cxx:896
 TGeoMatrixEditor.cxx:897
 TGeoMatrixEditor.cxx:898
 TGeoMatrixEditor.cxx:899
 TGeoMatrixEditor.cxx:900
 TGeoMatrixEditor.cxx:901
 TGeoMatrixEditor.cxx:902
 TGeoMatrixEditor.cxx:903
 TGeoMatrixEditor.cxx:904
 TGeoMatrixEditor.cxx:905
 TGeoMatrixEditor.cxx:906
 TGeoMatrixEditor.cxx:907
 TGeoMatrixEditor.cxx:908
 TGeoMatrixEditor.cxx:909
 TGeoMatrixEditor.cxx:910
 TGeoMatrixEditor.cxx:911
 TGeoMatrixEditor.cxx:912
 TGeoMatrixEditor.cxx:913
 TGeoMatrixEditor.cxx:914
 TGeoMatrixEditor.cxx:915
 TGeoMatrixEditor.cxx:916
 TGeoMatrixEditor.cxx:917
 TGeoMatrixEditor.cxx:918
 TGeoMatrixEditor.cxx:919
 TGeoMatrixEditor.cxx:920
 TGeoMatrixEditor.cxx:921
 TGeoMatrixEditor.cxx:922
 TGeoMatrixEditor.cxx:923
 TGeoMatrixEditor.cxx:924
 TGeoMatrixEditor.cxx:925
 TGeoMatrixEditor.cxx:926
 TGeoMatrixEditor.cxx:927
 TGeoMatrixEditor.cxx:928
 TGeoMatrixEditor.cxx:929
 TGeoMatrixEditor.cxx:930
 TGeoMatrixEditor.cxx:931
 TGeoMatrixEditor.cxx:932
 TGeoMatrixEditor.cxx:933
 TGeoMatrixEditor.cxx:934
 TGeoMatrixEditor.cxx:935
 TGeoMatrixEditor.cxx:936
 TGeoMatrixEditor.cxx:937
 TGeoMatrixEditor.cxx:938
 TGeoMatrixEditor.cxx:939
 TGeoMatrixEditor.cxx:940
 TGeoMatrixEditor.cxx:941
 TGeoMatrixEditor.cxx:942
 TGeoMatrixEditor.cxx:943
 TGeoMatrixEditor.cxx:944
 TGeoMatrixEditor.cxx:945
 TGeoMatrixEditor.cxx:946
 TGeoMatrixEditor.cxx:947
 TGeoMatrixEditor.cxx:948
 TGeoMatrixEditor.cxx:949
 TGeoMatrixEditor.cxx:950
 TGeoMatrixEditor.cxx:951
 TGeoMatrixEditor.cxx:952
 TGeoMatrixEditor.cxx:953
 TGeoMatrixEditor.cxx:954